7 lines
13 KiB
JavaScript
Raw Normal View History

2020-05-19 11:43:42 +03:00
/*!
* AngularJS Material Design
* https://github.com/angular/material
* @license MIT
* v1.1.18-master-97a1616
*/
function MenuController(o,t,a,i,l,r,e,n,s){var u,d,c=l.prefixer(),m=this;this.nestLevel=parseInt(t.mdNestLevel,10)||0,this.init=function(e,t){t=t||{},u=e,(d=a[0].querySelector(c.buildSelector(["ng-click","ng-mouseenter"]))).setAttribute("aria-expanded","false"),this.isInMenuBar=t.isInMenuBar,this.nestedMenus=l.nodesToArray(u[0].querySelectorAll(".md-nested-menu")),u.on("$mdInterimElementRemove",function(){m.isOpen=!1,l.nextTick(function(){m.onIsOpenChanged(m.isOpen)})}),l.nextTick(function(){m.onIsOpenChanged(m.isOpen)});var n="menu_container_"+l.nextUid();u.attr("id",n),angular.element(d).attr({"aria-owns":n,"aria-haspopup":"true"}),i.$on("$destroy",angular.bind(this,function(){this.disableHoverListener(),o.destroy()})),u.on("$destroy",function(){o.destroy()})};var p,f,h=[];this.enableHoverListener=function(){h.push(e.$on("$mdMenuOpen",function(e,t){u[0].contains(t[0])&&(m.currentlyOpenMenu=t.controller("mdMenu"),m.isAlreadyOpening=!1,m.currentlyOpenMenu.registerContainerProxy(m.triggerContainerProxy.bind(m)))})),h.push(e.$on("$mdMenuClose",function(e,t){u[0].contains(t[0])&&(m.currentlyOpenMenu=void 0)})),(f=angular.element(l.nodesToArray(u[0].children[0].children))).on("mouseenter",m.handleMenuItemHover),f.on("mouseleave",m.handleMenuItemMouseLeave)},this.disableHoverListener=function(){for(;h.length;)h.shift()();f&&f.off("mouseenter",m.handleMenuItemHover),f&&f.off("mouseleave",m.handleMenuItemMouseLeave)},this.handleMenuItemHover=function(e){if(!m.isAlreadyOpening){var t=e.target.querySelector("md-menu")||l.getClosest(e.target,"MD-MENU");p=r(function(){if(t=t&&angular.element(t).controller("mdMenu"),m.currentlyOpenMenu&&m.currentlyOpenMenu!=t){var e=m.nestLevel+1;m.currentlyOpenMenu.close(!0,{closeTo:e}),m.isAlreadyOpening=!!t,t&&t.open()}else t&&!t.isOpen&&t.open&&(m.isAlreadyOpening=!!t,t&&t.open())},t?100:250);var n=e.currentTarget.querySelector(".md-button:not([disabled])");n&&n.focus()}},this.handleMenuItemMouseLeave=function(){p&&(r.cancel(p),p=void 0)},this.open=function(e){e&&e.stopPropagation(),e&&e.preventDefault(),m.isOpen||(m.enableHoverListener(),m.isOpen=!0,l.nextTick(function(){m.onIsOpenChanged(m.isOpen)}),(d=d||(e?e.target:a[0])).setAttribute("aria-expanded","true"),i.$emit("$mdMenuOpen",a),o.show({scope:i,mdMenuCtrl:m,nestLevel:m.nestLevel,element:u,target:d,preserveElement:!0,parent:"body"}).finally(function(){d.setAttribute("aria-expanded","false"),m.disableHoverListener()}))},this.onIsOpenChanged=function(e){e?(u.attr("aria-hidden","false"),a[0].classList.add("md-open"),angular.forEach(m.nestedMenus,function(e){e.classList.remove("md-open")})):(u.attr("aria-hidden","true"),a[0].classList.remove("md-open")),i.$mdMenuIsOpen=m.isOpen},this.focusMenuContainer=function(){var e=u[0].querySelector(c.buildSelector(["md-menu-focus-target","md-autofocus"]));(e=e||u[0].querySelector(".md-button:not([disabled])")).focus()},this.registerContainerProxy=function(e){this.containerProxy=e},this.triggerContainerProxy=function(e){this.containerProxy&&this.containerProxy(e)},this.destroy=function(){return m.isOpen?o.destroy():n.when(!1)},this.close=function(e,t){if(m.isOpen){m.isOpen=!1,l.nextTick(function(){m.onIsOpenChanged(m.isOpen)});var n=angular.extend({},t,{skipFocus:e});if(i.$emit("$mdMenuClose",a,n),o.hide(null,t),!e){var r=m.restoreFocusTo||a.find("button")[0];r instanceof angular.element&&(r=r[0]),r&&r.focus()}}},this.positionMode=function(){var e=(t.mdPositionMode||"target").split(" ");return 1===e.length&&e.push(e[0]),{left:e[0],top:e[1]}},this.offsets=function(){var e=(t.mdOffset||"0 0").split(" ").map(parseFloat);if(2===e.length)return{left:e[0],top:e[1]};if(1===e.length)return{top:e[0],left:e[0]};throw Error("Invalid offsets specified. Please follow format <x, y> or <n>")},i.$mdMenu={open:this.open,close:this.close},i.$mdOpenMenu=angular.bind(this,function(){return s.warn("mdMenu: The $mdOpenMenu method is deprecated. Please use `$mdMenu.open`."),this.open.apply(this,arguments)})}function MenuDirective(i){var l="Invalid HTML for md-menu: ";return{restrict:"E",require:["mdMenu","?^mdMenuBar"],contro