2016-08-22 12:55:52 +02:00

7 lines
5.7 KiB
JavaScript

/*!
* Angular Material Design
* https://github.com/angular/material
* @license MIT
* v0.10.0
*/
!function(e,t,n){"use strict";function r(e){function n(e){e.addClass("md-menu");var t=e.children()[0];if(t.hasAttribute("ng-click")||(t=t.querySelector("[ng-click]")),t&&t.setAttribute("aria-haspopup","true"),2!=e.children().length)throw Error("Invalid HTML for md-menu. Expected two children elements.");return r}function r(e,n,r,o){var i=t.element('<div class="md-open-menu-container md-whiteframe-z2"></div>'),a=n.children()[1];i.append(a),o.init(i),e.$on("$destroy",function(){o.isOpen&&(i.remove(),o.close())})}return{restrict:"E",require:"mdMenu",controller:"mdMenuCtrl",scope:!0,compile:n}}function o(e,t,n,r){var o,i,a=this;this.init=function(e){o=e,i=n[0].querySelector("[ng-click]")},this.open=function(){a.isOpen=!0,i.setAttribute("aria-expanded","true"),e.show({mdMenuCtrl:a,element:o,target:n[0]})},r.$mdOpenMenu=this.open,this.close=function(t){a.isOpen=!1,i.setAttribute("aria-expanded","false"),e.hide(),t||n.children()[0].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>")}}function i(e){function r(e,r,i,a,l,d,s){function c(n,o,s){function c(){if(!s.target)throw Error("$mdMenu.show() expected a target to animate from in options.target");t.extend(s,{alreadyOpen:!1,isRemoved:!1,target:t.element(s.target),parent:t.element(s.parent),menuContentEl:t.element(o[0].querySelector("md-menu-content")),backdrop:s.hasBackdrop&&t.element('<md-backdrop class="md-menu-backdrop md-click-catcher">')})}function u(){s.resizeFn=function(){p(o,s)},t.element(r).on("resize",s.resizeFn),t.element(r).on("orientationchange",s.resizeFn)}function f(){s.parent.append(o),o.removeClass("md-leave"),e(function(){e(function(){p(o,s),e(function(){o.addClass("md-active"),s.alreadyOpen=!0,o[0].style[d.CSS.TRANSFORM]=""})})})}function h(){o.addClass("md-clickable"),s.backdrop&&s.backdrop.on("click",function(e){e.preventDefault(),e.stopPropagation(),s.mdMenuCtrl.close(!0)}),s.menuContentEl.on("keydown",function(e){n.$apply(function(){switch(e.keyCode){case d.KEY_CODE.ESCAPE:s.mdMenuCtrl.close();break;case d.KEY_CODE.UP_ARROW:m(e,s.menuContentEl,s,-1);break;case d.KEY_CODE.DOWN_ARROW:m(e,s.menuContentEl,s,1)}})}),s.menuContentEl.on("click",function(e){function t(){n.$apply(function(){s.mdMenuCtrl.close()})}var r=e.target;do if(r&&r.hasAttribute("ng-click")){r.hasAttribute("disabled")||t();break}while((r=r.parentNode)&&r!=s.menuContentEl)});var e=s.menuContentEl[0].querySelector("[md-menu-focus-target]");e||(e=s.menuContentEl[0].firstElementChild.firstElementChild),e.focus()}return c(s),a.inherit(s.menuContentEl,s.target),u(),s.disableParentScroll&&(s.restoreScroll=i.disableScrollAround(s.element)),l(h,75,!1),s.backdrop&&(a.inherit(s.backdrop,s.parent),s.parent.append(s.backdrop)),f(),i.transitionEndPromise(o,{timeout:350})}function m(e,t,n,r){for(var o=i.getClosest(e.target,"MD-MENU-ITEM"),a=i.nodesToArray(t[0].children),l=a.indexOf(o),d=l+r;d>=0&&d<a.length;d+=r){var s=a[d].firstElementChild||a[d],c=u(s);if(c)break}}function u(e){return e&&-1!=e.getAttribute("tabindex")?(e.focus(),s[0].activeElement==e?!0:!1):void 0}function f(e,o,a){return a.isRemoved=!0,o.addClass("md-leave").removeClass("md-clickable"),t.element(r).off("resize",a.resizeFn),t.element(r).off("orientationchange",a.resizeFn),a.resizeFn=n,i.transitionEndPromise(o,{timeout:350}).then(function(){o.removeClass("md-active"),a.backdrop&&a.backdrop.remove(),o[0].parentNode===a.parent[0]&&a.parent[0].removeChild(o[0]),a.restoreScroll&&a.restoreScroll()})}function p(e,t){function n(e){e.top=Math.max(Math.min(e.top,h.bottom-l.offsetHeight),h.top),e.left=Math.max(Math.min(e.left,h.right-l.offsetWidth),h.left)}if(!t.isRemoved){var r,i,a,l=e[0],s=e[0].firstElementChild,c=s.getBoundingClientRect(),m=t.parent[0],u=m.getBoundingClientRect(),f=t.target[0].querySelector("[md-menu-origin]")||t.target[0],p=f.getBoundingClientRect(),h={left:u.left+o,top:u.top+o,bottom:u.bottom-o,right:u.right-o},g=t.mdMenuCtrl.positionMode();("target"==g.top||"target"==g.left||"target-right"==g.left)&&(r=s.firstElementChild.firstElementChild||s.firstElementChild,r=r.querySelector("[md-menu-align-target]")||r,i=r.getBoundingClientRect(),a={top:parseFloat(l.style.top||0),left:parseFloat(l.style.left||0)});var C={},v="top ";switch(g.top){case"target":C.top=a.top+p.top-i.top;break;default:throw new Error('Invalid target mode "'+g.top+'" specified for md-menu on Y axis.')}switch(g.left){case"target":C.left=a.left+p.left-i.left,v+="left";break;case"target-right":C.left=p.right-c.width+(c.right-i.right),v+="right";break;default:throw new Error('Invalid target mode "'+g.left+'" specified for md-menu on X axis.')}var b=t.mdMenuCtrl.offsets();C.top+=b.top,C.left+=b.left,n(C),e.css({top:C.top+"px",left:C.left+"px"}),l.style[d.CSS.TRANSFORM_ORIGIN]=v,t.alreadyOpen||(l.style[d.CSS.TRANSFORM]="scale("+Math.min(p.width/l.offsetWidth,1)+","+Math.min(p.height/l.offsetHeight,1)+")")}}return{parent:"body",onShow:c,onRemove:f,hasBackdrop:!0,disableParentScroll:!0,skipCompile:!0,themable:!0}}var o=8;return r.$inject=["$$rAF","$window","$mdUtil","$mdTheming","$timeout","$mdConstant","$document"],e("$mdMenu").setDefaults({methods:["target"],options:r})}t.module("material.components.menu",["material.core","material.components.backdrop"]).directive("mdMenu",r).controller("mdMenuCtrl",o),r.$inject=["$mdMenu"],o.$inject=["$mdMenu","$attrs","$element","$scope"],t.module("material.components.menu").provider("$mdMenu",i),i.$inject=["$$interimElementProvider"]}(window,window.angular);