-
Notifications
You must be signed in to change notification settings - Fork 5
/
angular-dojo.js
85 lines (74 loc) · 3.26 KB
/
angular-dojo.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
78
79
80
81
82
83
84
85
angular.module('angular-dojo', []).directive('dojoWidget', function($timeout) {
var parseProps = function(props, scope) {
if (typeof props === 'undefined') return {};
props = '[{' + props + '}]';
return eval(props)[0];
};
return {
restrict: "A",
replace: false,
transclude: false,
require: '?ngModel',
scope: {
'ngModel' : '=?',
'ngClick' : '&',
'ngChange' : '&',
'dojoStore' : '&',
'dojoProps' : '@',
'dojoDisplayValue' : '=?'
},
link: function(scope, element, attrs, model) {
require(["dojo/ready", "dijit/dijit", attrs.dojoWidget, "dojo/on"], function(ready, dijit, DojoWidget, on) {
ready(function () {
scope.widget = new DojoWidget({}, element[0]);
attrs.$observe('dojoProps', function(dojoProps) {
scope.widget.set(parseProps(dojoProps, scope));
});
attrs.$observe('dojoStore', function() {
if (scope.dojoStore != undefined) {
scope.widget.store = scope.dojoStore();
}
});
scope.$watch('ngModel', function() {
if (scope.ngModel != undefined) {
if (attrs.dojoWidget == 'dijit/form/FilteringSelect' || attrs.dojoWidget == 'dijit/form/Select') {
scope.widget.set('item', scope.ngModel);
}
else {
scope.widget.set('value', scope.ngModel);
scope.widget.set('checked', scope.ngModel);
}
}
});
on(scope.widget, "blur", function () {
if (scope.widget.displayedValue != undefined) {
scope.dojoDisplayValue = scope.widget.displayedValue;
}
});
on(scope.widget, "change", function(newValue) {
if (attrs.dojoWidget == 'dijit/form/FilteringSelect' || attrs.dojoWidget == 'dijit/form/Select') {
scope.ngModel = this.item;
}
else {
scope.ngModel = newValue;
}
$timeout(function() {
scope.$apply();
if (scope.ngChange != undefined) {
scope.ngChange();
}
});
});
on(scope.widget, 'click', function() {
$timeout(function() {
scope.$apply();
if (scope.ngClick != undefined) {
scope.ngClick();
}
});
});
});
});
}
};
});