AutorÃa | Ultima modificación | Ver Log |
define(["jquery","core/custom_interaction_events","core/log","core/pubsub","core/aria","core_user/repository"],function($,CustomEvents,Log,PubSub,Aria,UserRepository){"use strict";var SELECTORS={TOGGLE_REGION:'[data-region="drawer-toggle"]',TOGGLE_ACTION:'[data-action="toggle-drawer"]',TOGGLE_TARGET:"aria-controls",TOGGLE_SIDE:"left",BODY:"body",SECTION:'.list-group-item[href*="#section-"]',DRAWER:"#nav-drawer",};var small=$(document).width()<768;var Drawer=function(){if(!$(SELECTORS.TOGGLE_REGION).length){Log.debug("Page is missing a drawer region");}if(!$(SELECTORS.TOGGLE_ACTION).length){Log.debug("Page is missing a drawer toggle link");}$(SELECTORS.TOGGLE_REGION).each(function(index,ele){var trigger=$(ele).find(SELECTORS.TOGGLE_ACTION);var drawerid=trigger.attr("aria-controls");var drawer=$(document.getElementById(drawerid));var hidden=trigger.attr("aria-expanded")=="false";var side=trigger.attr("data-side");var body=$(SELECTORS.BODY);var preference=trigger.attr("data-preference");if(small){UserRepository.setUserPreference(preference,false);}drawer.on("mousewheel DOMMouseScroll",this.preventPageScroll);if(!hidden){body.addClass("drawer-open-"+side);trigger.attr("aria-expanded","true");}else{trigger.attr("aria-expanded","false");}}.bind(this));this.registerEventListeners();if(small){this.closeAll();}};Drawer.prototype.closeAll=function(){$(SELECTORS.TOGGLE_REGION).each(function(index,ele){var trigger=$(ele).find(SELECTORS.TOGGLE_ACTION);var side=trigger.attr("data-side");var body=$(SELECTORS.BODY);var drawerid=trigger.attr("aria-controls");var drawer=$(document.getElementById(drawerid));var preference=trigger.attr("data-preference");trigger.attr("aria-expanded","false");body.removeClass("drawer-open-"+side);Aria.hide(drawer.get());drawer.addClass("closed");if(!small){UserRepository.setUserPreference(preference,false);}});};Drawer.prototype.toggleDrawer=function(e){var trigger=$(e.target).closest("[data-action=toggle-drawer]");var drawerid=trigger.attr("aria-controls");var drawer=$(document.getElementById(drawerid));var body=$(SELECTORS.BODY);var side=trigger.attr("data-side");var preference=trigger.attr("data-preference");if(small){UserRepository.setUserPreference(preference,false);}body.addClass("drawer-ease");var open=trigger.attr("aria-expanded")=="true";if(!open){trigger.attr("aria-expanded","true");Aria.unhide(drawer.get());drawer.focus();body.addClass("drawer-open-"+side);drawer.removeClass("closed");if(!small){UserRepository.setUserPreference(preference,true);}}else{body.removeClass("drawer-open-"+side);trigger.attr("aria-expanded","false");drawer.addClass("closed").delay(500).queue(function(){if($(this).hasClass("closed")){Aria.hide(this);}$(this).dequeue();});if(!small){UserRepository.setUserPreference(preference,false);}}PubSub.publish("nav-drawer-toggle-start",open);};Drawer.prototype.preventPageScroll=function(e){var delta=e.wheelDelta||(e.originalEvent&&e.originalEvent.wheelDelta)||-e.originalEvent.detail,bottomOverflow=this.scrollTop+$(this).outerHeight()-this.scrollHeight>=0,topOverflow=this.scrollTop<=0;if((delta<0&&bottomOverflow)||(delta>0&&topOverflow)){e.preventDefault();}};Drawer.prototype.registerEventListeners=function(){$(SELECTORS.TOGGLE_ACTION).each(function(index,element){CustomEvents.define($(element),[CustomEvents.events.activate]);$(element).on(CustomEvents.events.activate,function(e,data){this.toggleDrawer(data.originalEvent);data.originalEvent.preventDefault();}.bind(this));}.bind(this));$(SELECTORS.SECTION).click(function(){if(small){this.closeAll();}}.bind(this));$(SELECTORS.DRAWER).on("webkitTransitionEnd msTransitionEnd transitionend",function(e){var drawer=$(e.target).closest(SELECTORS.DRAWER);var open=!!drawer.attr("aria-hidden");PubSub.publish("nav-drawer-toggle-end",open);});};return{init:function(){return new Drawer();},};});