UNPKG

alertifyjs

Version:

AlertifyJS is a javascript framework for developing pretty browser dialogs and notifications.

110 lines (106 loc) 4.56 kB
// stores last call timestamp to prevent triggering the callback twice. var callbackTS = 0; // flag to cancel keyup event if already handled by click event (pressing Enter on a focusted button). var cancelKeyup = false; /** * Helper: triggers a button callback * * @param {Object} The dilog instance. * @param {Function} Callback to check which button triggered the event. * * @return {undefined} */ function triggerCallback(instance, check) { if(Date.now() - callbackTS > 200 && (callbackTS = Date.now())){ for (var idx = 0; idx < instance.__internal.buttons.length; idx += 1) { var button = instance.__internal.buttons[idx]; if (!button.element.disabled && check(button)) { var closeEvent = createCloseEvent(idx, button); if (typeof instance.callback === 'function') { instance.callback.apply(instance, [closeEvent]); } //close the dialog only if not canceled. if (closeEvent.cancel === false) { instance.close(); } break; } } } } /** * Clicks event handler, attached to the dialog footer. * * @param {Event} DOM event object. * @param {Object} The dilog instance. * * @return {undefined} */ function buttonsClickHandler(event, instance) { var target = event.srcElement || event.target; triggerCallback(instance, function (button) { // if this button caused the click, cancel keyup event return button.element.contains(target) && (cancelKeyup = true); }); } /** * Keyup event handler, attached to the document.body * * @param {Event} DOM event object. * @param {Object} The dilog instance. * * @return {undefined} */ function keyupHandler(event) { //hitting enter while button has focus will trigger keyup too. //ignore if handled by clickHandler if (cancelKeyup) { cancelKeyup = false; return; } var instance = openDialogs[openDialogs.length - 1]; var keyCode = event.keyCode; if (instance.__internal.buttons.length === 0 && keyCode === keys.ESC && instance.get('closable') === true) { triggerClose(instance); return false; }else if (usedKeys.indexOf(keyCode) > -1) { triggerCallback(instance, function (button) { return button.key === keyCode; }); return false; } } /** * Keydown event handler, attached to the document.body * * @param {Event} DOM event object. * @param {Object} The dilog instance. * * @return {undefined} */ function keydownHandler(event) { var instance = openDialogs[openDialogs.length - 1]; var keyCode = event.keyCode; if (keyCode === keys.LEFT || keyCode === keys.RIGHT) { var buttons = instance.__internal.buttons; for (var x = 0; x < buttons.length; x += 1) { if (document.activeElement === buttons[x].element) { switch (keyCode) { case keys.LEFT: buttons[(x || buttons.length) - 1].element.focus(); return; case keys.RIGHT: buttons[(x + 1) % buttons.length].element.focus(); return; } } } }else if (keyCode < keys.F12 + 1 && keyCode > keys.F1 - 1 && usedKeys.indexOf(keyCode) > -1) { event.preventDefault(); event.stopPropagation(); triggerCallback(instance, function (button) { return button.key === keyCode; }); return false; } }