You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1 lines
13 KiB

{"version":3,"sources":["../src/drawer.js"],"names":["define","$","CustomEvents","Log","PubSub","Aria","SELECTORS","TOGGLE_REGION","TOGGLE_ACTION","TOGGLE_TARGET","TOGGLE_SIDE","BODY","SECTION","DRAWER","small","document","width","Drawer","length","debug","each","index","ele","trigger","find","drawerid","attr","drawer","getElementById","hidden","side","body","preference","M","util","set_user_preference","on","preventPageScroll","addClass","bind","registerEventListeners","closeAll","prototype","removeClass","hide","get","toggleDrawer","e","target","closest","open","unhide","focus","delay","queue","hasClass","dequeue","publish","delta","wheelDelta","originalEvent","detail","bottomOverflow","scrollTop","outerHeight","scrollHeight","topOverflow","preventDefault","element","events","activate","data","click"],"mappings":"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","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Contain the logic for a drawer.\n *\n * @module theme_ilb/drawer\n * @copyright 2016 Damyon Wiese\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/custom_interaction_events', 'core/log', 'core/pubsub', 'core/aria'],\n function($, CustomEvents, Log, PubSub, Aria) {\n\n var SELECTORS = {\n TOGGLE_REGION: '[data-region=\"drawer-toggle\"]',\n TOGGLE_ACTION: '[data-action=\"toggle-drawer\"]',\n TOGGLE_TARGET: 'aria-controls',\n TOGGLE_SIDE: 'left',\n BODY: 'body',\n SECTION: '.list-group-item[href*=\"#section-\"]',\n DRAWER: '#nav-drawer'\n };\n\n var small = $(document).width() < 768;\n\n /**\n * Constructor for the Drawer.\n */\n var Drawer = function() {\n\n if (!$(SELECTORS.TOGGLE_REGION).length) {\n Log.debug('Page is missing a drawer region');\n }\n if (!$(SELECTORS.TOGGLE_ACTION).length) {\n Log.debug('Page is missing a drawer toggle link');\n }\n $(SELECTORS.TOGGLE_REGION).each(function(index, ele) {\n var trigger = $(ele).find(SELECTORS.TOGGLE_ACTION);\n var drawerid = trigger.attr('aria-controls');\n var drawer = $(document.getElementById(drawerid));\n var hidden = trigger.attr('aria-expanded') == 'false';\n var side = trigger.attr('data-side');\n var body = $(SELECTORS.BODY);\n var preference = trigger.attr('data-preference');\n if (small) {\n M.util.set_user_preference(preference, 'false');\n }\n\n drawer.on('mousewheel DOMMouseScroll', this.preventPageScroll);\n\n if (!hidden) {\n body.addClass('drawer-open-' + side);\n trigger.attr('aria-expanded', 'true');\n } else {\n trigger.attr('aria-expanded', 'false');\n }\n }.bind(this));\n\n this.registerEventListeners();\n if (small) {\n this.closeAll();\n }\n };\n\n Drawer.prototype.closeAll = function() {\n $(SELECTORS.TOGGLE_REGION).each(function(index, ele) {\n var trigger = $(ele).find(SELECTORS.TOGGLE_ACTION);\n var side = trigger.attr('data-side');\n var body = $(SELECTORS.BODY);\n var drawerid = trigger.attr('aria-controls');\n var drawer = $(document.getElementById(drawerid));\n var preference = trigger.attr('data-preference');\n\n trigger.attr('aria-expanded', 'false');\n body.removeClass('drawer-open-' + side);\n Aria.hide(drawer.get());\n drawer.addClass('closed');\n if (!small) {\n M.util.set_user_preference(preference, 'false');\n }\n });\n };\n\n /**\n * Open / close the blocks drawer.\n *\n * @method toggleDrawer\n * @param {Event} e\n */\n Drawer.prototype.toggleDrawer = function(e) {\n var trigger = $(e.target).closest('[data-action=toggle-drawer]');\n var drawerid = trigger.attr('aria-controls');\n var drawer = $(document.getElementById(drawerid));\n var body = $(SELECTORS.BODY);\n var side = trigger.attr('data-side');\n var preference = trigger.attr('data-preference');\n if (small) {\n M.util.set_user_preference(preference, 'false');\n }\n\n body.addClass('drawer-ease');\n var open = trigger.attr('aria-expanded') == 'true';\n if (!open) {\n // Open.\n trigger.attr('aria-expanded', 'true');\n Aria.unhide(drawer.get());\n drawer.focus();\n body.addClass('drawer-open-' + side);\n drawer.removeClass('closed');\n if (!small) {\n M.util.set_user_preference(preference, 'true');\n }\n } else {\n // Close.\n body.removeClass('drawer-open-' + side);\n trigger.attr('aria-expanded', 'false');\n drawer.addClass('closed').delay(500).queue(function() {\n // Ensure that during the delay, the drawer wasn't re-opened.\n if ($(this).hasClass('closed')) {\n Aria.hide(this);\n }\n $(this).dequeue();\n });\n if (!small) {\n M.util.set_user_preference(preference, 'false');\n }\n }\n\n // Publish an event to tell everything that the drawer has been toggled.\n // The drawer transitions closed so another event will fire once teh transition\n // has completed.\n PubSub.publish('nav-drawer-toggle-start', open);\n };\n\n /**\n * Prevent the page from scrolling when the drawer is at max scroll.\n *\n * @method preventPageScroll\n * @param {Event} e\n */\n Drawer.prototype.preventPageScroll = function(e) {\n var delta = e.wheelDelta || (e.originalEvent && e.originalEvent.wheelDelta) || -e.originalEvent.detail,\n bottomOverflow = (this.scrollTop + $(this).outerHeight() - this.scrollHeight) >= 0,\n topOverflow = this.scrollTop <= 0;\n\n if ((delta < 0 && bottomOverflow) || (delta > 0 && topOverflow)) {\n e.preventDefault();\n }\n };\n\n /**\n * Set up all of the event handling for the modal.\n *\n * @method registerEventListeners\n */\n Drawer.prototype.registerEventListeners = function() {\n\n $(SELECTORS.TOGGLE_ACTION).each(function(index, element) {\n CustomEvents.define($(element), [CustomEvents.events.activate]);\n $(element).on(CustomEvents.events.activate, function(e, data) {\n this.toggleDrawer(data.originalEvent);\n data.originalEvent.preventDefault();\n }.bind(this));\n }.bind(this));\n\n $(SELECTORS.SECTION).click(function() {\n if (small) {\n this.closeAll();\n }\n }.bind(this));\n\n // Publish an event to tell everything that the drawer completed the transition\n // to either an open or closed state.\n $(SELECTORS.DRAWER).on('webkitTransitionEnd msTransitionEnd transitionend', function(e) {\n var drawer = $(e.target).closest(SELECTORS.DRAWER);\n // Note: aria-hidden is either present, or absent. It should not be set to false.\n var open = !!drawer.attr('aria-hidden');\n PubSub.publish('nav-drawer-toggle-end', open);\n });\n };\n\n return {\n 'init': function() {\n return new Drawer();\n }\n };\n});\n"],"file":"drawer.min.js"}