This repository has been archived by the owner on Aug 29, 2023. It is now read-only.
/
menuItemDirective.js
59 lines (50 loc) · 1.7 KB
/
menuItemDirective.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
angular
.module('material.components.menuBar')
.directive('mdMenuItem', MenuItemDirective);
/**
*
* @ngInjdect
*/
function MenuItemDirective() {
return {
require: ['mdMenuItem', '?ngModel'],
compile: function(templateEl, templateAttrs) {
if (templateAttrs.type == 'checkbox' || templateAttrs.type == 'radio') {
var text = templateEl[0].textContent;
var buttonEl = angular.element('<md-button type="button"></md-button>');
buttonEl.html(text);
buttonEl.attr('tabindex', '0');
templateEl.html('');
templateEl.append(angular.element('<md-icon md-svg-icon="check"></md-icon>'));
templateEl.append(buttonEl);
templateEl[0].classList.add('md-indent');
setDefault('role', (templateAttrs.type == 'checkbox') ? 'menuitemcheckbox' : 'menuitemradio', buttonEl);
angular.forEach(['ng-disabled'], moveAttrToButton);
} else {
setDefault('role', 'menuitem', templateEl[0].querySelector('md-button,button,a'));
}
return function(scope, el, attrs, ctrls) {
var ctrl = ctrls[0];
var ngModel = ctrls[1];
ctrl.init(ngModel);
};
function setDefault(attr, val, el) {
el = el || templateEl;
if (el instanceof angular.element) {
el = el[0];
}
if (!el.hasAttribute(attr)) {
el.setAttribute(attr, val);
}
}
function moveAttrToButton(attr) {
if (templateEl[0].hasAttribute(attr)) {
var val = templateEl[0].getAttribute(attr);
buttonEl[0].setAttribute(attr, val);
templateEl[0].removeAttribute(attr);
}
}
},
controller: 'MenuItemController'
};
}