7 lines
No EOL
15 KiB
JavaScript
Executable file
7 lines
No EOL
15 KiB
JavaScript
Executable file
/*!
|
|
* Angular Material Design
|
|
* https://github.com/angular/material
|
|
* @license MIT
|
|
* v0.10.1
|
|
*/
|
|
!function(e,t,n){"use strict";function l(e,l,o,i,r,a,d){function c(r,c){var s=t.element("<md-select-value><span></span></md-select-value>");if(s.append('<span class="md-select-icon" aria-hidden="true"></span>'),s.addClass("md-select-value"),s[0].hasAttribute("id")||s.attr("id","select_value_label_"+l.nextUid()),r.find("md-content").length||r.append(t.element("<md-content>").append(r.contents())),c.mdOnOpen&&r.find("md-content").prepend(t.element("<md-progress-circular>").attr("md-mode","indeterminate").attr("ng-hide","$$loadingAsyncDone").wrap("<div>").parent()),c.name){var u=t.element('<select class="md-visually-hidden">');u.attr({name:"."+c.name,"ng-model":c.ngModel,"aria-hidden":"true",tabindex:"-1"});var p=r.find("md-option");t.forEach(p,function(e){var n=t.element("<option>"+e.innerHTML+"</option>");e.hasAttribute("ng-value")?n.attr("ng-value",e.getAttribute("ng-value")):e.hasAttribute("value")&&n.attr("value",e.getAttribute("value")),u.append(n)}),r.parent().append(u)}var f='<div class="md-select-menu-container"><md-select-menu '+(t.isDefined(c.multiple)?"multiple":"")+">"+r.html()+"</md-select-menu></div>";return r.empty().append(s),c.tabindex=c.tabindex||"0",function(r,c,s,u){function p(){var e=c.attr("placeholder");!e&&C&&C.label&&(e=C.label.text()),i.expect(c,"aria-label",e)}function m(){O&&(T=T||O.find("md-select-menu").controller("mdSelectMenu"),w.setLabelText(T.selectedLabels()))}function h(){C&&C.setHasValue(T.selectedLabels().length>0||(c[0].validity||{}).badInput)}function v(){O=t.element(f);var e=O.find("md-select-menu");e.data("$ngModelController",k),e.data("$mdSelectController",w),A=r.$new(),o.inherit(O,c),O[0].setAttribute("class",O[0].getAttribute("class")+" "+c.attr("md-container-class")),O=a(O)(A),T=O.find("md-select-menu").controller("mdSelectMenu")}function g(e){var n=[32,13,38,40];if(-1!=n.indexOf(e.keyCode))e.preventDefault(),b(e);else if(e.keyCode<=90&&e.keyCode>=31){e.preventDefault();var l=T.optNodeForKeyboardSearch(e);if(!l)return;var o=t.element(l).controller("mdOption");T.isMultiple||T.deselect(Object.keys(T.selected)[0]),T.select(o.hashKey,o.value),T.refreshViewValue(),k.$render()}}function b(){r.$apply("isOpen = true"),e.show({scope:A,preserveScope:!0,skipCompile:!0,element:O,target:c[0],hasBackdrop:!0,loadingAsync:s.mdOnOpen?r.$eval(s.mdOnOpen)||!0:!1}).then(function(){$=!1})}var $,y,C=u[0],w=u[1],k=u[2],E=u[3],x=c.find("md-select-value"),S=t.isDefined(s.readonly);if(C){if(C.input)throw new Error("<md-input-container> can only have *one* child <input>, <textarea> or <select> element!");C.input=c,C.label||i.expect(c,"aria-label",c.attr("placeholder"));var M=C&&C.isErrorGetter||function(){return k.$invalid&&k.$touched};r.$watch(M,C.setInvalid)}var O,A,T;if(v(),o(c),s.name&&E){var D=c.parent()[0].querySelector('select[name=".'+s.name+'"]'),R=t.element(D).controller();R&&E.$removeControl(R)}var V=k.$render;k.$render=function(){V(),m(),h()},w.setLabelText=function(e){w.setIsPlaceholder(!e);var t=s.placeholder||(C&&C.label?C.label.text():"");e=e||t||"";var n=x.children().eq(0);n.text(e)},w.setIsPlaceholder=function(e){e?(x.addClass("md-select-placeholder"),C&&C.label&&C.label.addClass("md-placeholder md-static")):(x.removeClass("md-select-placeholder"),C&&C.label&&C.label.removeClass("md-placeholder"))},S||c.on("focus",function(e){C&&C.element.hasClass("md-input-has-value")&&C.setFocused(!0)}).on("blur",function(e){C&&C.setFocused(!1),h()}),w.triggerClose=function(){d(s.mdOnClose)(r)},r.$$postDigest(function(){p(),m()});var N;s.$observe("ngMultiple",function(e){N&&N();var t=d(e);N=r.$watch(function(){return t(r)},function(e,t){(e!==n||t!==n)&&(e?c.attr("multiple","multiple"):c.removeAttr("multiple"),O&&(T.setMultiple(e),V=k.$render,k.$render=function(){V(),m()},T.refreshViewValue(),k.$render()))})}),s.$observe("disabled",function(e){"string"==typeof e&&(e=!0),(y===n||y!==e)&&(y=e,e?(c.attr({tabindex:-1,"aria-disabled":"true"}),c.off("click",b),c.off("keydown",g)):(c.attr({tabindex:s.tabindex,"aria-disabled":"false"}),c.on("click",b),c.on("keydown",g)))}),s.disabled||s.ngDisabled||(c.attr({tabindex:s.tabindex,"aria-disabled":"false"}),c.on("click",b),c.on("keydown",g));var F={role:"combobox","aria-expanded":"false"};c[0].hasAttribute("id")||(F.id="select_"+l.nextUid()),c.attr(F),r.$on("$destroy",function(){$?e.hide()["finally"](function(){O.remove()}):O.remove(),C&&(C.setFocused(!1),C.setHasValue(!1),C.input=null)})}}return{restrict:"E",require:["^?mdInputContainer","mdSelect","ngModel","?^form"],compile:c,controller:function(){}}}function o(e,l,o){function i(e,n,i,r){function a(){n.attr({id:"select_menu_"+l.nextUid(),role:"listbox","aria-multiselectable":s.isMultiple?"true":"false"})}function d(e){(13==e.keyCode||32==e.keyCode)&&c(e)}function c(n){var o=l.getClosest(n.target,"md-option"),i=o&&t.element(o).data("$mdOptionController");if(o&&i){if(o.hasAttribute("disabled"))return n.stopImmediatePropagation(),!1;var r=s.hashGetter(i.value),a=t.isDefined(s.selected[r]);e.$apply(function(){s.isMultiple?a?s.deselect(r):s.select(r,i.value):a||(s.deselect(Object.keys(s.selected)[0]),s.select(r,i.value)),s.refreshViewValue()})}}var s=r[0],u=r[1];o(n),n.on("click",c),n.on("keypress",d),u&&s.init(u),a()}function r(o,i,r){function a(){var e=s.ngModel.$modelValue||s.ngModel.$viewValue;if(t.isArray(e)){var n=Object.keys(s.selected),l=e.map(s.hashGetter),o=n.filter(function(e){return-1===l.indexOf(e)});o.forEach(s.deselect),l.forEach(function(t,n){s.select(t,e[n])})}}function d(){var e=s.ngModel.$viewValue||s.ngModel.$modelValue;Object.keys(s.selected).forEach(s.deselect),s.select(s.hashGetter(e),e)}var s=this;s.isMultiple=t.isDefined(i.multiple),s.selected={},s.options={},o.$watch(function(){return s.options},function(){s.ngModel.$render()},!0);var u;s.setMultiple=function(e){function n(e,n){return t.isArray(e||n||[])}var l=s.ngModel;s.isMultiple=e,u&&u(),s.isMultiple?(l.$validators["md-multiple"]=n,l.$render=a,o.$watchCollection(i.ngModel,function(e){n(e)&&a(e)})):(delete l.$validators["md-multiple"],l.$render=d)};var p,f,m,h="",v=300;s.optNodeForKeyboardSearch=function(e){p&&clearTimeout(p),p=setTimeout(function(){p=n,h="",m=n,f=n},v),h+=String.fromCharCode(e.keyCode);var l=new RegExp("^"+h,"i");f||(f=r.find("md-option"),m=new Array(f.length),t.forEach(f,function(e,t){m[t]=e.textContent.trim()}));for(var o=0;o<m.length;++o)if(l.test(m[o]))return f[o]},s.init=function(n){if(s.ngModel=n,n.$options&&n.$options.trackBy){var l={},i=e(n.$options.trackBy);s.hashGetter=function(e,t){return l.$value=e,i(t||o,l)}}else s.hashGetter=function(e){return t.isObject(e)?"object_"+(e.$$mdSelectId||(e.$$mdSelectId=++c)):e};s.setMultiple(s.isMultiple)},s.selectedLabels=function(){var e=l.nodesToArray(r[0].querySelectorAll("md-option[selected]"));return e.length?e.map(function(e){return e.textContent}).join(", "):""},s.select=function(e,t){var n=s.options[e];n&&n.setSelected(!0),s.selected[e]=t},s.deselect=function(e){var t=s.options[e];t&&t.setSelected(!1),delete s.selected[e]},s.addOption=function(e,n){if(t.isDefined(s.options[e]))throw new Error('Duplicate md-option values are not allowed in a select. Duplicate value "'+n.value+'" found.');s.options[e]=n,t.isDefined(s.selected[e])&&(s.select(e,n.value),s.refreshViewValue())},s.removeOption=function(e){delete s.options[e]},s.refreshViewValue=function(){var e,t=[];for(var n in s.selected)t.push((e=s.options[n])?e.value:s.selected[n]);s.ngModel.$setViewValue(s.isMultiple?t:t[0])}}return r.$inject=["$scope","$attrs","$element"],{restrict:"E",require:["mdSelectMenu","?ngModel"],controller:r,link:{pre:i}}}function i(e,n){function l(e,n){return e.append(t.element('<div class="md-text">').append(e.contents())),e.attr("tabindex",n.tabindex||"0"),o}function o(l,o,i,r){function a(e,t){var n=s.hashGetter(t,l),o=s.hashGetter(e,l);c.hashKey=o,c.value=e,s.removeOption(n,c),s.addOption(o,c)}function d(){var e={role:"option","aria-selected":"false"};o[0].hasAttribute("id")||(e.id="select_option_"+n.nextUid()),o.attr(e)}var c=r[0],s=r[1];t.isDefined(i.ngValue)?l.$watch(i.ngValue,a):t.isDefined(i.value)?a(i.value):l.$watch(function(){return o.text()},a),i.$observe("disabled",function(e){e?o.attr("tabindex","-1"):o.attr("tabindex","0")}),l.$$postDigest(function(){i.$observe("selected",function(e){t.isDefined(e)&&("string"==typeof e&&(e=!0),e?(s.isMultiple||s.deselect(Object.keys(s.selected)[0]),s.select(c.hashKey,c.value)):s.deselect(c.hashKey),s.refreshViewValue(),s.ngModel.$render())})}),e.attach(l,o),d(),l.$on("$destroy",function(){s.removeOption(c.hashKey,c)})}function i(e){this.selected=!1,this.setSelected=function(t){t&&!this.selected?e.attr({selected:"selected","aria-selected":"true"}):!t&&this.selected&&(e.removeAttr("selected"),e.attr("aria-selected","false")),this.selected=t}}return i.$inject=["$element"],{restrict:"E",require:["mdOption","^^mdSelectMenu"],controller:i,compile:l}}function r(){function e(e,n){var l=e.find("label");l.length||(l=t.element("<label>"),e.prepend(l)),n.label&&l.text(n.label)}return{restrict:"E",compile:e}}function a(e){function l(e,l,r,a,c,s,u,p){function f(o,i,d){function p(){d.target.attr("aria-expanded","true")}function f(){function t(e){m=d.selectEl[0].getElementsByTagName("md-option");var t,l=a.nodesToArray(m),o=l.indexOf(d.focusedNode);do-1===o?o=0:"next"===e&&o<l.length-1?o++:"prev"===e&&o>0&&o--,t=l[o],t.hasAttribute("disabled")&&(t=n);while(!t&&o<l.length-1&&o>0);t&&t.focus(),d.focusedNode=t}function o(){t("next")}function r(){t("prev")}function c(){s.isMultiple||(d.restoreFocus=!0,a.nextTick(function(){e.hide(s.ngModel.$viewValue)},!0))}if(!d.isRemoved){var s=d.selectEl.controller("mdSelectMenu")||{};i.addClass("md-clickable"),d.backdrop&&d.backdrop.on("click",function(t){t.preventDefault(),t.stopPropagation(),d.restoreFocus=!1,a.nextTick(e.hide,!0)}),d.selectEl.on("keydown",function(t){switch(t.keyCode){case l.KEY_CODE.SPACE:case l.KEY_CODE.ENTER:var n=a.getClosest(t.target,"md-option");n&&(d.selectEl.triggerHandler({type:"click",target:n}),t.preventDefault());break;case l.KEY_CODE.TAB:case l.KEY_CODE.ESCAPE:t.preventDefault(),d.restoreFocus=!0,a.nextTick(e.hide,!0)}}),d.selectEl.on("keydown",function(e){switch(e.keyCode){case l.KEY_CODE.UP_ARROW:return r();case l.KEY_CODE.DOWN_ARROW:return o();default:if(e.keyCode>=31&&e.keyCode<=90){var t=d.selectEl.controller("mdSelectMenu").optNodeForKeyboardSearch(e);d.focusedNode=t||d.focusedNode,t&&t.focus()}}}),d.selectEl.on("click",c),d.selectEl.on("keydown",function(e){(32==e.keyCode||13==e.keyCode)&&c()})}}if(!d.target)throw new Error('$mdSelect.show() expected a target element in options.target but got "'+d.target+'"!');t.extend(d,{isRemoved:!1,target:t.element(d.target),parent:t.element(d.parent),selectEl:i.find("md-select-menu"),contentEl:i.find("md-content"),backdrop:d.hasBackdrop&&a.createBackdrop(o,"md-select-backdrop md-click-catcher")}),d.resizeFn=function(){r(function(){r(function(){h(o,i,d)})})},t.element(s).on("resize",d.resizeFn),t.element(s).on("orientationchange",d.resizeFn),p(),i.removeClass("md-leave");var m=d.selectEl[0].getElementsByTagName("md-option");return d.loadingAsync&&d.loadingAsync.then?d.loadingAsync.then(function(){o.$$loadingAsyncDone=!0,r(function(){r(function(){d.isRemoved||h(o,i,d)})})}):d.loadingAsync&&(o.$$loadingAsyncDone=!0),d.disableParentScroll&&!a.getClosest(d.target,"MD-DIALOG")?d.restoreScroll=a.disableScrollAround(d.element):d.disableParentScroll=!1,d.backdrop&&(c.inherit(d.backdrop,d.target),d.parent.append(d.backdrop)),d.parent.append(i),r(function(){r(function(){d.isRemoved||h(o,i,d)})}),d.isRemoved?u.reject(!0):v.waitTransitionEnd(d.selectEl,{timeout:470})["finally"](function(){f()})}function m(e,l,o){o.isRemoved=!0,o.target.attr("aria-expanded","false"),o.selectEl.off("keydown"),t.element(s).off("resize",o.resizeFn),t.element(s).off("orientationchange",o.resizefn),o.resizeFn=n,l.addClass("md-leave").removeClass("md-clickable");var i=o.selectEl.controller("mdSelect");return i&&i.setLabelText(o.selectEl.controller("mdSelectMenu").selectedLabels()),o.backdrop&&o.backdrop.remove(),v.waitTransitionEnd(l,{timeout:370})["finally"](function(){i&&i.triggerClose(),l.removeClass("md-active"),l[0].parentNode===o.parent[0]&&o.parent[0].removeChild(l[0]),o.disableParentScroll&&o.restoreScroll(),o.restoreFocus&&o.target.focus()})}function h(e,t,n){var c,u=t[0],p=n.target[0].firstElementChild,f=n.parent[0],m=n.selectEl[0],h=n.contentEl[0],v=f.getBoundingClientRect(),g=p.getBoundingClientRect(),b=!1,$={left:v.left+d,top:d,bottom:v.height-d,right:v.width-d-(a.floatingScrollbars()?16:0)},y={top:g.top-$.top,left:g.left-$.left,right:$.right-(g.left+g.width),bottom:$.bottom-(g.top+g.height)},C=v.width-2*d,w=h.scrollHeight>h.offsetHeight,k=m.querySelector("md-option[selected]"),E=m.getElementsByTagName("md-option"),x=m.getElementsByTagName("md-optgroup");c=k?k:x.length?x[0]:E.length?E[0]:h.firstElementChild||h,h.offsetWidth>C&&(h.style["max-width"]=C+"px"),b&&(h.style["min-width"]=g.width+"px"),w&&m.classList.add("md-overflow");var S=c;"MD-OPTGROUP"===(S.tagName||"").toUpperCase()&&(S=E[0]||h.firstElementChild||h,c=S);var M=m.getBoundingClientRect(),O=i(c);if(c){var A=s.getComputedStyle(c);O.paddingLeft=parseInt(A.paddingLeft,10)||0,O.paddingRight=parseInt(A.paddingRight,10)||0}if(w){var T=h.offsetHeight/2;h.scrollTop=O.top+O.height/2-T,y.top<T?h.scrollTop=Math.min(O.top,h.scrollTop+T-y.top):y.bottom<T&&(h.scrollTop=Math.max(O.top+O.height-M.height,h.scrollTop-T+y.bottom))}var D,R,V;b?(D=g.left,R=g.top+g.height,V="50% 0",R+M.height>$.bottom&&(R=g.top-M.height,V="50% 100%")):(D=g.left+O.left-O.paddingLeft+2,R=Math.floor(g.top+g.height/2-O.height/2-O.top+h.scrollTop)+2,V=O.left+g.width/2+"px "+(O.top+O.height/2-h.scrollTop)+"px 0px",u.style.minWidth=g.width+O.paddingLeft+O.paddingRight+"px");var N=u.getBoundingClientRect();u.style.left=o($.left,D,$.right-N.width)+"px",u.style.top=o($.top,R,$.bottom-N.height)+"px",m.style[l.CSS.TRANSFORM_ORIGIN]=V,m.style[l.CSS.TRANSFORM]="scale("+Math.min(g.width/M.width,1)+","+Math.min(g.height/M.height,1)+")",r(function(){t.addClass("md-active"),m.style[l.CSS.TRANSFORM]="",S&&!S.hasAttribute("disabled")&&(n.focusedNode=S,S.focus())})}var v=a.dom.animator;return{parent:"body",onShow:f,onRemove:m,hasBackdrop:!0,disableParentScroll:!0,themable:!0}}function o(e,t,n){return Math.max(e,Math.min(t,n))}function i(e){return e?{left:e.offsetLeft,top:e.offsetTop,width:e.offsetWidth,height:e.offsetHeight}:{left:0,top:0,width:0,height:0}}return l.$inject=["$mdSelect","$mdConstant","$$rAF","$mdUtil","$mdTheming","$window","$q","$compile"],e("$mdSelect").setDefaults({methods:["target"],options:l})}var d=8,c=0;t.module("material.components.select",["material.core","material.components.backdrop"]).directive("mdSelect",l).directive("mdSelectMenu",o).directive("mdOption",i).directive("mdOptgroup",r).provider("$mdSelect",a),l.$inject=["$mdSelect","$mdUtil","$mdTheming","$mdAria","$interpolate","$compile","$parse"],o.$inject=["$parse","$mdUtil","$mdTheming"],i.$inject=["$mdButtonInkRipple","$mdUtil"],a.$inject=["$$interimElementProvider"]}(window,window.angular); |