-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheckbox-directive.js
executable file
·77 lines (74 loc) · 2.9 KB
/
checkbox-directive.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/* @preserve
*
* angular-material-checkbox
* https://github.com/Sattvabit/angular-material-checkbox
*
* Version: 0.0.1 - 08/22/2015
* License: MIT
* Credits: sattvabitinc & contributors
*/
angular.module('sb.checkbox', [])
.constant('iconSizeClasses', {
small: '24px',
medium: '40px',
large: '53px'
})
.constant('labelSizeClasses', {
small: '16px',
medium: '20px',
large: '24px'
})
.filter('trust', function($sce) {
return function(val) {
return $sce.trustAsHtml(val);
};
})
.directive('sbCheckbox', ['iconSizeClasses', 'labelSizeClasses', function(iconSizeClasses, labelSizeClasses) {
return {
scope: {
label:'@',
checkedIconName:'@',
uncheckedIconName:'@',
checkedIconColor:'@',
uncheckedIconColor:'@',
size:'@',
preSelected:'@',
showLabel:'@'
},
require: 'ngModel',
restrict: 'AE',
template: '<div class="sb-checkbox" style=\'-moz-user-select: none; -webkit-user-select: none; -ms-user-select:none; user-select:none;\' unselectable=\'on\' onselectstart=\'return false;\' onmousedown=\'return false;\'><span class="custom-icon" ng-style="{color: checkboxModel.isChecked ? checkboxModel.checkedIconColor : checkboxModel.uncheckedIconColor}"><i class="material-icons" ng-style="{verticalAlign: \'middle\', fontSize: checkboxModel.iconFontSize}" ng-bind-html="checkboxModel.isChecked ? checkboxModel.checkedIconName : checkboxModel.uncheckedIconName | trust"></i></span> <span ng-if="checkboxModel.showLabel" ng-class="{\'sb-checkbox-label-checked\':checkboxModel.isChecked, \'sb-checkbox-label-unchecked\':!checkboxModel.isChecked}">{{label}}</span></div>',
link: function(scope, element, Attrs, ngModel) {
element.css("cursor", "pointer");
scope.checkboxModel = {
isChecked: false,
// checkedIconName: scope.checkedIconName || 'check_circle',
// uncheckedIconName: scope.uncheckedIconName || 'radio_button_unchecked',
// IE 6-9
checkedIconName: scope.checkedIconName || '',
uncheckedIconName: scope.uncheckedIconName || '',
checkedIconColor: scope.checkedIconColor || '#009688',
uncheckedIconColor: scope.uncheckedIconColor || '#B2DFDB',
size: scope.size || 'small',
showLabel: true
};
console.log(iconSizeClasses['small']);
var iconSizeClass = scope.checkboxModel.size.toLowerCase();
if(iconSizeClass == 'small' || iconSizeClass == 'medium' || iconSizeClass == 'large') {
scope.checkboxModel.iconFontSize = iconSizeClasses[scope.checkboxModel.size.toLowerCase()];
}
if(scope.showLabel == 'false') {
scope.checkboxModel.showLabel = false;
}
if(scope.preSelected == 'true') {
scope.checkboxModel.isChecked = true;
}
ngModel.$setViewValue(scope.checkboxModel.isChecked);
element.bind('click', function() {
scope.checkboxModel.isChecked = !scope.checkboxModel.isChecked;
ngModel.$setViewValue(scope.checkboxModel.isChecked);
scope.$apply();
});
}
};
}]);