dialog_tab_controls.js 2.05 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
var DialogTabControls = (function() {
    'use strict';

    var focusableChildren,
        numElements,
        currentIndex,
        initializeTabKeyValues = function(elementName, $closeButton) {
            focusableChildren = $(elementName).find(
                'a, input[type=text], input[type=submit], select, textarea, button'
            );
            if ($closeButton) {
                focusableChildren = focusableChildren.add($closeButton);
            }
            numElements = focusableChildren.length;
            currentIndex = 0;
            focusableChildren[currentIndex].focus();
        },
        focusElement = function() {
            var focusableElement = focusableChildren[currentIndex];
            if (focusableElement) {
                focusableElement.focus();
            }
        },
        focusPrevious = function() {
            currentIndex--;
            if (currentIndex < 0) {
                currentIndex = numElements - 1;
            }

            focusElement();

            return false;
        },
        focusNext = function() {
            currentIndex++;
            if (currentIndex >= numElements) {
                currentIndex = 0;
            }

            focusElement();

            return false;
        },
        setKeydownListner = function($modal, $closeButton) {
            $modal.on('keydown', function(e) {
                var keyCode = e.keyCode || e.which,
                    escapeKeyCode = 27,
                    tabKeyCode = 9;
                if (keyCode === escapeKeyCode) {
                    e.preventDefault();
                    $closeButton.click();
                }
                if (keyCode === tabKeyCode && e.shiftKey) {
                    e.preventDefault();
                    focusPrevious();
                } else if (keyCode === tabKeyCode) {
                    e.preventDefault();
                    focusNext();
                }
            });
        };

    return {
        initializeTabKeyValues: initializeTabKeyValues,
        setKeydownListner: setKeydownListner
    };
}());