{"version":3,"sources":["https:\/\/immet-dist.spbstu.ru\/theme\/mooc\/amd\/src\/drawer.js"],"names":["define","$","CustomEvents","Log","PubSub","window","drawerInitialized","SELECTORS","small","document","width","Drawer","length","debug","each","index","ele","trigger","find","hidden","attr","side","body","preference","M","util","set_user_preference","addClass","this","registerEventListeners","closeAll","prototype","drawerid","drawer","getElementById","removeClass","toggleDrawer","e","target","closest","open","focus","publish","preventPageScroll","delta","wheelDelta","originalEvent","detail","bottomOverflow","scrollTop","outerHeight","scrollHeight","topOverflow","preventDefault","element","events","activate","on","data","bind","click","init"],"mappings":"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\/B,QACP+B,KAAK\/B,OACP3B,EAAEM,GAAmBqD,MAAM,WACrBpD,GACFoB,KAAKE,YAEP6B,KAAK\/B,OAGP3B,EAAEM,GAAkBkD,GAAG,oDAAqD,SAAUpB,GACpF,IACIG,EAAqC,SAD5BvC,EAAEoC,EAAEC,QAAQC,QAAQhC,GACfa,KAAK,eACvBhB,EAAOsC,QAAQ,wBAAyBF,MAIrC,CACLqB,KAAQ,WACN,OAAgC,GAA5BxD,OAAOC,oBACTD,OAAOC,mBAAoB,EACpB,IAAIK","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 .\n\n\/**\n * Contain the logic for a drawer.\n *\n * @package theme_remui\n * @copyright 2016 Damyon Wiese\n * @license http:\/\/www.gnu.org\/copyleft\/gpl.html GNU GPL v3 or later\n *\/\n\"use strict\";\ndefine(['jquery', 'core\/custom_interaction_events', 'core\/log', 'core\/pubsub'], function($, CustomEvents, Log, PubSub) {\n\n window.drawerInitialized = false;\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 * @param {object} root The root jQuery element for the modal\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 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 if (!hidden) {\n body.addClass('drawer-open-' + side);\n trigger.attr('aria-expanded', 'true');\n } else {\n trigger.attr('aria-expanded', 'false');\n }\n });\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 drawer.attr('aria-hidden', 'true');\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 drawer.attr('aria-hidden', 'false');\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.attr('aria-hidden', 'true');\n drawer.addClass('closed');\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 var open = drawer.attr('aria-hidden') == 'false';\n PubSub.publish('nav-drawer-toggle-end', open);\n });\n };\n\n return {\n 'init': function() {\n if (window.drawerInitialized == false) {\n window.drawerInitialized = true;\n return new Drawer();\n }\n return false;\n }\n };\n});\n"],"file":"drawer.min.js"}