angular-material
Version:
This repository publishes the AngularJS Material v1.x library and localized installs using `npm`. You can find the component source-code for this library in the [AngularJS Material repository](https://github.com/angular/material).
7 lines • 5.25 kB
JavaScript
/*!
* AngularJS Material Design
* https://github.com/angular/material
* @license MIT
* v1.2.0-master-93518bb
*/
function mdListDirective(t){return{restrict:"E",compile:function(e){return e[0].setAttribute("role","list"),t}}}function mdListItemDirective(m,u,f,g){var p=["md-checkbox","md-switch","md-menu"];return{restrict:"E",controller:"MdListController",compile:function(a,r){var e,i,t,n=a[0].querySelectorAll(".md-secondary"),o=a;if(a[0].setAttribute("role","listitem"),r.ngClick||r.ngDblclick||r.ngHref||r.href||r.uiSref||r.ngAttrUiSref)s("button");else if(!a.hasClass("md-no-proxy")){for(var l=0;l<p.length;++l)if(null!==(i=a[0].querySelector(p[l]))){e=!0;break}e?s("div"):a.addClass("md-no-proxy")}function s(e){if("div"===e)(o=angular.element('<div class="md-no-style md-list-item-inner">')).append(a.contents()),a.addClass("md-proxy-focus");else{o=angular.element('<div class="md-button md-no-style"> <div class="md-list-item-inner"></div></div>');var t=angular.element('<md-button class="md-no-style"></md-button>');if(d(a[0],t[0]),!t.attr("aria-label")){t.attr("aria-label",m.getText(a));var n=o[0].querySelector(".md-list-item-inner");n&&n.setAttribute("aria-hidden","true")}a.hasClass("md-no-focus")&&t.addClass("md-no-focus"),o.prepend(t),o.children().eq(1).append(a.contents()),a.addClass("_md-button-wrap")}a[0].setAttribute("tabindex","-1"),a.append(o)}function d(t,n,e){var r=f.prefixer(["ng-if","ng-click","ng-dblclick","aria-label","ng-disabled","ui-sref","href","ng-href","rel","target","ng-attr-ui-sref","ui-sref-opts","download"]);e&&(r=r.concat(f.prefixer(e))),angular.forEach(r,function(e){t.hasAttribute(e)&&(n.setAttribute(e,t.getAttribute(e)),t.removeAttribute(e))})}function c(e){for(var t=e.attributes,n=0;n<t.length;n++)if("ngClick"===r.$normalize(t[n].name))return!0;return!1}return t=angular.element('<div class="md-secondary-container">'),angular.forEach(n,function(e){!function(e,t){if(e&&!function(e){var t=e.nodeName.toUpperCase();return"MD-BUTTON"===t||"BUTTON"===t}(e)&&e.hasAttribute("ng-click")){m.expect(e,"aria-label");var n=angular.element('<md-button class="md-secondary md-icon-button">');d(e,n[0],["ng-if","ng-hide","ng-show"]),e.setAttribute("tabindex","-1"),n.append(e),e=n[0]}e&&(!c(e)||!r.ngClick&&function(e){return-1!==p.indexOf(e.nodeName.toLowerCase())}(e))&&angular.element(e).removeClass("md-secondary"),a.addClass("md-with-secondary"),t.append(e)}(e,t)}),o.append(t),function(){for(var e,t=["md-switch","md-checkbox"],n=0;n<t.length;++n)if((e=a.find(t[n])[0])&&!e.hasAttribute("aria-label")){var r=a.find("p")[0];if(!(r=r||a.find("span")[0]))return;e.setAttribute("aria-label","Toggle "+r.textContent)}}(),e&&"MD-MENU"===i.nodeName&&function(){var e=angular.element(i),t=e.parent().hasClass("md-secondary-container")||i.parentNode.firstElementChild!==i,n="left";t&&(n="right");e.attr("md-position-mode")||e.attr("md-position-mode",n+" target");var r=e.children().eq(0);c(r[0])||r.attr("ng-click","$mdMenu.open($event)");r.attr("aria-label")||r.attr("aria-label","Open List Menu")}(),function(e,i,t,n){i.addClass("_md");var r=[],a=i[0].firstElementChild,o=i.hasClass("_md-button-wrap")?a.firstElementChild:a,l=o&&c(o),s=i.hasClass("md-no-proxy");a&&a.children&&!l&&!s&&angular.forEach(p,function(e){angular.forEach(a.querySelectorAll(e+":not(.md-secondary)"),function(e){r.push(e)})}),1!==r.length&&!l||(i.addClass("md-clickable"),l||n.attachRipple(e,angular.element(i[0].querySelector(".md-no-style")))),r.length&&angular.forEach(r,function(t){t=angular.element(t),e.mouseActive=!1,t.on("mousedown",function(){e.mouseActive=!0,g(function(){e.mouseActive=!1},100)}).on("focus",function(){!1===e.mouseActive&&i.addClass("md-focused"),t.on("blur",function e(){i.removeClass("md-focused"),t.off("blur",e)})})});function d(e){"INPUT"===e.target.nodeName||"TEXTAREA"===e.target.nodeName||e.target.isContentEditable||(e.which||e.keyCode)===u.KEY_CODE.SPACE&&o&&(o.click(),e.preventDefault(),e.stopPropagation())}l||r.length||o&&o.addEventListener("keypress",d);i.off("click"),i.off("keypress"),i.off("keydown"),1===r.length&&o&&i.children().eq(0).on("click",function(t){(function(e){var t=["md-slider"],n=f.getEventPath(e);if(!n||0===n.length)return-1!==t.indexOf(e.target.tagName.toLowerCase());for(var r=n.indexOf(i.children()[0]),a=0;a<r;a++)if(-1!==t.indexOf(n[a].tagName.toLowerCase()))return!0;return!1})(t)||!f.getClosest(t.target,"BUTTON")&&o.contains(t.target)&&angular.forEach(r,function(e){t.target===e||e.contains(t.target)||("MD-MENU"===e.nodeName&&(e=e.children[0]),angular.element(e).triggerHandler("click"))})});e.$on("$destroy",function(){o&&o.removeEventListener("keypress",d)})}}}}function MdListController(e,t,n){this.attachRipple=function(e,t){n.attach(e,t,{})}}goog.provide("ngmaterial.components.list"),goog.require("ngmaterial.core"),MdListController.$inject=["$scope","$element","$mdListInkRipple"],mdListDirective.$inject=["$mdTheming"],mdListItemDirective.$inject=["$mdAria","$mdConstant","$mdUtil","$timeout"],angular.module("material.components.list",["material.core"]).controller("MdListController",MdListController).directive("mdList",mdListDirective).directive("mdListItem",mdListItemDirective),ngmaterial.components.list=angular.module("material.components.list");