{"version":3,"file":"drawer.min.js","sources":["https:\/\/dl-iamt.spbstu.ru\/theme\/remui\/amd\/src\/drawer.js"],"sourcesContent":["\/* eslint-disable no-undef*\/\n\/\/ 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 * @module theme_remui\/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','theme_remui\/user\/repository'],\n function($, CustomEvents, Log, PubSub, Aria, UserRepository) {\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 * Sets a user preference using the appropriate method based on the value of the `applylatestuserpref` flag.\n *\n * @param {string} preference The name of the preference to set.\n * @param {string} prefflag The value to set the preference to.\n *\/\n var edwPreferenceSetter =function(preference,prefflag){\n if(applylatestuserpref){\n UserRepository.setUserPreference(preference, prefflag);\n }else{\n M.util.set_user_preference(preference, prefflag);\n }\n };\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 edwPreferenceSetter(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 edwPreferenceSetter(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 edwPreferenceSetter(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 edwPreferenceSetter(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 edwPreferenceSetter(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"],"names":["define","$","CustomEvents","Log","PubSub","Aria","UserRepository","SELECTORS","small","document","width","edwPreferenceSetter","preference","prefflag","applylatestuserpref","setUserPreference","M","util","set_user_preference","Drawer","length","debug","each","index","ele","trigger","find","drawerid","attr","drawer","getElementById","hidden","side","body","on","this","preventPageScroll","addClass","bind","registerEventListeners","closeAll","prototype","removeClass","hide","get","toggleDrawer","e","target","closest","open","delay","queue","hasClass","dequeue","unhide","focus","publish","delta","wheelDelta","originalEvent","detail","bottomOverflow","scrollTop","outerHeight","scrollHeight","topOverflow","preventDefault","element","events","activate","data","click"],"mappings":";;;;;;;AAuBAA,4BAAO,CAAC,SAAU,iCAAkC,WAAY,cAAe,YAAY,gCACtF,SAASC,EAAGC,aAAcC,IAAKC,OAAQC,KAAMC,oBAE1CC,wBACe,gCADfA,wBAEe,gCAFfA,eAKM,OALNA,kBAMS,sCANTA,iBAOQ,cAGRC,MAAQP,EAAEQ,UAAUC,QAAU,IAO9BC,oBAAqB,SAASC,WAAWC,UACtCC,oBACCR,eAAeS,kBAAkBH,WAAYC,UAE7CG,EAAEC,KAAKC,oBAAoBN,WAAYC,WAO3CM,OAAS,WAEJlB,EAAEM,yBAAyBa,QAC5BjB,IAAIkB,MAAM,mCAETpB,EAAEM,yBAAyBa,QAC5BjB,IAAIkB,MAAM,wCAEdpB,EAAEM,yBAAyBe,KAAK,SAASC,MAAOC,SACxCC,QAAUxB,EAAEuB,KAAKE,KAAKnB,yBACtBoB,SAAWF,QAAQG,KAAK,iBACxBC,OAAS5B,EAAEQ,SAASqB,eAAeH,WACnCI,OAA0C,SAAjCN,QAAQG,KAAK,iBACtBI,KAAOP,QAAQG,KAAK,aACpBK,KAAOhC,EAAEM,gBACTK,WAAaa,QAAQG,KAAK,mBAC1BpB,OACAG,oBAAoBC,WAAY,SAGpCiB,OAAOK,GAAG,4BAA6BC,KAAKC,mBAEvCL,OAIDN,QAAQG,KAAK,gBAAiB,UAH9BK,KAAKI,SAAS,eAAiBL,MAC\/BP,QAAQG,KAAK,gBAAiB,UAIpCU,KAAKH,YAEFI,yBACD\/B,YACKgC,mBAIbrB,OAAOsB,UAAUD,SAAW,WACxBvC,EAAEM,yBAAyBe,MAAK,SAASC,MAAOC,SACxCC,QAAUxB,EAAEuB,KAAKE,KAAKnB,yBACtByB,KAAOP,QAAQG,KAAK,aACpBK,KAAOhC,EAAEM,gBACToB,SAAWF,QAAQG,KAAK,iBACxBC,OAAS5B,EAAEQ,SAASqB,eAAeH,WACnCf,WAAaa,QAAQG,KAAK,mBAE9BH,QAAQG,KAAK,gBAAiB,SAC9BK,KAAKS,YAAY,eAAiBV,MAClC3B,KAAKsC,KAAKd,OAAOe,OACjBf,OAAOQ,SAAS,UACX7B,OACDG,oBAAoBC,WAAY,aAW5CO,OAAOsB,UAAUI,aAAe,SAASC,OACjCrB,QAAUxB,EAAE6C,EAAEC,QAAQC,QAAQ,+BAC9BrB,SAAWF,QAAQG,KAAK,iBACxBC,OAAS5B,EAAEQ,SAASqB,eAAeH,WACnCM,KAAOhC,EAAEM,gBACTyB,KAAOP,QAAQG,KAAK,aACpBhB,WAAaa,QAAQG,KAAK,mBAC1BpB,OACAG,oBAAoBC,WAAY,SAGpCqB,KAAKI,SAAS,mBACVY,KAAwC,QAAjCxB,QAAQG,KAAK,iBACnBqB,MAYDhB,KAAKS,YAAY,eAAiBV,MAClCP,QAAQG,KAAK,gBAAiB,SAC9BC,OAAOQ,SAAS,UAAUa,MAAM,KAAKC,OAAM,WAEnClD,EAAEkC,MAAMiB,SAAS,WACjB\/C,KAAKsC,KAAKR,MAEdlC,EAAEkC,MAAMkB,aAEP7C,OACDG,oBAAoBC,WAAY,WApBpCa,QAAQG,KAAK,gBAAiB,QAC9BvB,KAAKiD,OAAOzB,OAAOe,OACnBf,OAAO0B,QACPtB,KAAKI,SAAS,eAAiBL,MAC\/BH,OAAOa,YAAY,UACdlC,OACDG,oBAAoBC,WAAY,SAqBxCR,OAAOoD,QAAQ,0BAA2BP,OAS9C9B,OAAOsB,UAAUL,kBAAoB,SAASU,OACtCW,MAAQX,EAAEY,YAAeZ,EAAEa,eAAiBb,EAAEa,cAAcD,aAAgBZ,EAAEa,cAAcC,OAC5FC,eAAkB1B,KAAK2B,UAAY7D,EAAEkC,MAAM4B,cAAgB5B,KAAK6B,cAAiB,EACjFC,YAAc9B,KAAK2B,WAAa,GAE\/BL,MAAQ,GAAKI,gBAAoBJ,MAAQ,GAAKQ,cAC\/CnB,EAAEoB,kBASV\/C,OAAOsB,UAAUF,uBAAyB,WAEtCtC,EAAEM,yBAAyBe,KAAK,SAASC,MAAO4C,SAC5CjE,aAAaF,OAAOC,EAAEkE,SAAU,CAACjE,aAAakE,OAAOC,WACrDpE,EAAEkE,SAASjC,GAAGhC,aAAakE,OAAOC,SAAU,SAASvB,EAAGwB,WAC\/CzB,aAAayB,KAAKX,eACvBW,KAAKX,cAAcO,kBACrB5B,KAAKH,QACTG,KAAKH,OAEPlC,EAAEM,mBAAmBgE,MAAM,WACnB\/D,YACKgC,YAEXF,KAAKH,OAIPlC,EAAEM,kBAAkB2B,GAAG,qDAAqD,SAASY,OAG7EG,OAFShD,EAAE6C,EAAEC,QAAQC,QAAQzC,kBAEbqB,KAAK,eACzBxB,OAAOoD,QAAQ,wBAAyBP,UAIzC,MACK,kBACG,IAAI9B"}