Skip to content

Commit 1860861

Browse files
committed
HFP-2992 Made IV functions public
1 parent 0a30dca commit 1860861

File tree

1 file changed

+71
-71
lines changed

1 file changed

+71
-71
lines changed

src/scripts/interactive-video.js

Lines changed: 71 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,77 @@ function InteractiveVideo(params, id, contentData) {
518518
self.handleAnswered();
519519
}
520520

521+
522+
/**
523+
* Disable tab indexes hidden behind overlay.
524+
*/
525+
self.disableTabIndexes = (elementToExclude = '.h5p-dialog-wrapper') => {
526+
var self = this;
527+
// Make all other elements in container not tabbable. When dialog is open,
528+
// it's like the elements behind does not exist.
529+
var $elementToExclude = self.$container.find(elementToExclude);
530+
self.$tabbables = self.$container.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function () {
531+
var $tabbable = $(this);
532+
var insideWrapper = $.contains($elementToExclude.get(0), $tabbable.get(0));
533+
534+
// tabIndex has already been modified, keep it in the set.
535+
if ($tabbable.data('tabindex')) {
536+
return true;
537+
}
538+
539+
if (!insideWrapper) {
540+
// Store current tabindex, so we can set it back when dialog closes
541+
var tabIndex = $tabbable.attr('tabindex');
542+
$tabbable.data('tabindex', tabIndex);
543+
544+
// Make it non tabbable
545+
$tabbable.attr('tabindex', '-1');
546+
return true;
547+
}
548+
// If element is part of dialog wrapper, just ignore it
549+
return false;
550+
});
551+
};
552+
553+
/**
554+
* Restore tab indexes that was previously disabled.
555+
* @param {H5P.jQuery} [$withinContainer] Only restore tab indexes of elements within this container.
556+
*/
557+
self.restoreTabIndexes = ($withinContainer) => {
558+
var self = this;
559+
// Resetting tabindex on background elements
560+
if (self.$tabbables) {
561+
self.$tabbables.each(function () {
562+
var $element = $(this);
563+
var tabindex = $element.data('tabindex');
564+
565+
// Only restore elements within container when specified
566+
if ($withinContainer && !$.contains($withinContainer.get(0), $element.get(0))) {
567+
return true;
568+
}
569+
570+
// Specifically handle jquery ui slider, since it overwrites data in an inconsistent way
571+
if ($element.hasClass('ui-slider-handle')) {
572+
$element.attr('tabindex', 0);
573+
$element.removeData('tabindex');
574+
}
575+
else if (tabindex !== undefined) {
576+
$element.attr('tabindex', tabindex);
577+
$element.removeData('tabindex');
578+
}
579+
else {
580+
$element.removeAttr('tabindex');
581+
}
582+
});
583+
584+
// Do not remove reference if only restored partially
585+
if (!$withinContainer) {
586+
// Has been restored, remove reference
587+
self.$tabbables = undefined;
588+
}
589+
}
590+
};
591+
521592
/**
522593
* Toggle mute
523594
* @param {Boolean} [refocus=true]
@@ -3162,77 +3233,6 @@ InteractiveVideo.prototype.restorePosterTabIndexes = function () {
31623233
});
31633234
};
31643235

3165-
3166-
/**
3167-
* Disable tab indexes hidden behind overlay.
3168-
*/
3169-
InteractiveVideo.prototype.disableTabIndexes = function (elementToExclude = '.h5p-dialog-wrapper') {
3170-
var self = this;
3171-
// Make all other elements in container not tabbable. When dialog is open,
3172-
// it's like the elements behind does not exist.
3173-
var $elementToExclude = self.$container.find(elementToExclude);
3174-
self.$tabbables = self.$container.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function () {
3175-
var $tabbable = $(this);
3176-
var insideWrapper = $.contains($elementToExclude.get(0), $tabbable.get(0));
3177-
3178-
// tabIndex has already been modified, keep it in the set.
3179-
if ($tabbable.data('tabindex')) {
3180-
return true;
3181-
}
3182-
3183-
if (!insideWrapper) {
3184-
// Store current tabindex, so we can set it back when dialog closes
3185-
var tabIndex = $tabbable.attr('tabindex');
3186-
$tabbable.data('tabindex', tabIndex);
3187-
3188-
// Make it non tabbable
3189-
$tabbable.attr('tabindex', '-1');
3190-
return true;
3191-
}
3192-
// If element is part of dialog wrapper, just ignore it
3193-
return false;
3194-
});
3195-
};
3196-
3197-
/**
3198-
* Restore tab indexes that was previously disabled.
3199-
* @param {H5P.jQuery} [$withinContainer] Only restore tab indexes of elements within this container.
3200-
*/
3201-
InteractiveVideo.prototype.restoreTabIndexes = function ($withinContainer) {
3202-
var self = this;
3203-
// Resetting tabindex on background elements
3204-
if (self.$tabbables) {
3205-
self.$tabbables.each(function () {
3206-
var $element = $(this);
3207-
var tabindex = $element.data('tabindex');
3208-
3209-
// Only restore elements within container when specified
3210-
if ($withinContainer && !$.contains($withinContainer.get(0), $element.get(0))) {
3211-
return true;
3212-
}
3213-
3214-
// Specifically handle jquery ui slider, since it overwrites data in an inconsistent way
3215-
if ($element.hasClass('ui-slider-handle')) {
3216-
$element.attr('tabindex', 0);
3217-
$element.removeData('tabindex');
3218-
}
3219-
else if (tabindex !== undefined) {
3220-
$element.attr('tabindex', tabindex);
3221-
$element.removeData('tabindex');
3222-
}
3223-
else {
3224-
$element.removeAttr('tabindex');
3225-
}
3226-
});
3227-
3228-
// Do not remove reference if only restored partially
3229-
if (!$withinContainer) {
3230-
// Has been restored, remove reference
3231-
self.$tabbables = undefined;
3232-
}
3233-
}
3234-
};
3235-
32363236
/**
32373237
* If there are visible required interactions, trap focus
32383238
* within them.

0 commit comments

Comments
 (0)