UNPKG

alertifyjs

Version:

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

274 lines (256 loc) 9.82 kB
/** * Triggers a close event. * * @param {Object} instance The dilog instance. * * @return {undefined} */ function triggerClose(instance) { var found; triggerCallback(instance, function (button) { return found = instance.get('invokeOnCloseOff') !== true && (button.invokeOnClose === true); }); //none of the buttons registered as onclose callback //close the dialog if (!found && instance.isOpen()) { instance.close(); } } /** * Dialogs commands event handler, attached to the dialog commands element. * * @param {Event} event DOM event object. * @param {Object} instance The dilog instance. * * @return {undefined} */ function commandsClickHandler(event, instance) { var target = event.srcElement || event.target; switch (target) { case instance.elements.commands.pin: if (!instance.isPinned()) { pin(instance); } else { unpin(instance); } break; case instance.elements.commands.maximize: if (!instance.isMaximized()) { maximize(instance); } else { restore(instance); } break; case instance.elements.commands.close: triggerClose(instance); break; } return false; } /** * Helper: pins the modeless dialog. * * @param {Object} instance The dialog instance. * * @return {undefined} */ function pin(instance) { //pin the dialog instance.set('pinned', true); } /** * Helper: unpins the modeless dialog. * * @param {Object} instance The dilog instance. * * @return {undefined} */ function unpin(instance) { //unpin the dialog instance.set('pinned', false); } /** * Helper: enlarges the dialog to fill the entire screen. * * @param {Object} instance The dilog instance. * * @return {undefined} */ function maximize(instance) { // allow custom `onmaximize` method dispatchEvent('onmaximize', instance); //maximize the dialog addClass(instance.elements.root, classes.maximized); if (instance.isOpen()) { ensureNoOverflow(); } // allow custom `onmaximized` method dispatchEvent('onmaximized', instance); } /** * Helper: returns the dialog to its former size. * * @param {Object} instance The dilog instance. * * @return {undefined} */ function restore(instance) { // allow custom `onrestore` method dispatchEvent('onrestore', instance); //maximize the dialog removeClass(instance.elements.root, classes.maximized); if (instance.isOpen()) { ensureNoOverflow(); } // allow custom `onrestored` method dispatchEvent('onrestored', instance); } /** * Show or hide the maximize box. * * @param {Object} instance The dilog instance. * @param {Boolean} on True to add the behavior, removes it otherwise. * * @return {undefined} */ function updatePinnable(instance) { if (instance.get('pinnable')) { // add class addClass(instance.elements.root, classes.pinnable); } else { // remove class removeClass(instance.elements.root, classes.pinnable); } } /** * Helper: Fixes the absolutly positioned modal div position. * * @param {Object} instance The dialog instance. * * @return {undefined} */ function addAbsPositionFix(instance) { var scrollLeft = getScrollLeft(); instance.elements.modal.style.marginTop = getScrollTop() + 'px'; instance.elements.modal.style.marginLeft = scrollLeft + 'px'; instance.elements.modal.style.marginRight = (-scrollLeft) + 'px'; } /** * Helper: Removes the absolutly positioned modal div position fix. * * @param {Object} instance The dialog instance. * * @return {undefined} */ function removeAbsPositionFix(instance) { var marginTop = parseInt(instance.elements.modal.style.marginTop, 10); var marginLeft = parseInt(instance.elements.modal.style.marginLeft, 10); instance.elements.modal.style.marginTop = ''; instance.elements.modal.style.marginLeft = ''; instance.elements.modal.style.marginRight = ''; if (instance.isOpen()) { var top = 0, left = 0 ; if (instance.elements.dialog.style.top !== '') { top = parseInt(instance.elements.dialog.style.top, 10); } instance.elements.dialog.style.top = (top + (marginTop - getScrollTop())) + 'px'; if (instance.elements.dialog.style.left !== '') { left = parseInt(instance.elements.dialog.style.left, 10); } instance.elements.dialog.style.left = (left + (marginLeft - getScrollLeft())) + 'px'; } } /** * Helper: Adds/Removes the absolutly positioned modal div position fix based on its pinned setting. * * @param {Object} instance The dialog instance. * * @return {undefined} */ function updateAbsPositionFix(instance) { // if modeless and unpinned add fix if (!instance.get('modal') && !instance.get('pinned')) { addAbsPositionFix(instance); } else { removeAbsPositionFix(instance); } } /** * Toggles the dialog position lock | modeless only. * * @param {Object} instance The dilog instance. * @param {Boolean} on True to make it modal, false otherwise. * * @return {undefined} */ function updatePinned(instance) { if (instance.get('pinned')) { removeClass(instance.elements.root, classes.unpinned); if (instance.isOpen()) { removeAbsPositionFix(instance); } } else { addClass(instance.elements.root, classes.unpinned); if (instance.isOpen() && !instance.isModal()) { addAbsPositionFix(instance); } } } /** * Show or hide the maximize box. * * @param {Object} instance The dilog instance. * @param {Boolean} on True to add the behavior, removes it otherwise. * * @return {undefined} */ function updateMaximizable(instance) { if (instance.get('maximizable')) { // add class addClass(instance.elements.root, classes.maximizable); } else { // remove class removeClass(instance.elements.root, classes.maximizable); } } /** * Show or hide the close box. * * @param {Object} instance The dilog instance. * @param {Boolean} on True to add the behavior, removes it otherwise. * * @return {undefined} */ function updateClosable(instance) { if (instance.get('closable')) { // add class addClass(instance.elements.root, classes.closable); bindClosableEvents(instance); } else { // remove class removeClass(instance.elements.root, classes.closable); unbindClosableEvents(instance); } } var cancelClick = false,// flag to cancel click event if already handled by end resize event (the mousedown, mousemove, mouseup sequence fires a click event.). modalClickHandlerTS=0 // stores last click timestamp to prevent executing the handler twice on double click. ; /** * Helper: closes the modal dialog when clicking the modal * * @param {Event} event DOM event object. * @param {Object} instance The dilog instance. * * @return {undefined} */ function modalClickHandler(event, instance) { if(event.timeStamp - modalClickHandlerTS > 200 && (modalClickHandlerTS = event.timeStamp) && !cancelClick){ var target = event.srcElement || event.target; if (instance.get('closableByDimmer') === true && target === instance.elements.modal) { triggerClose(instance); } } cancelClick = false; }