blob: a91f1ad34e9da5409de3f7559ecaf75352c3ce1c (
plain)
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
|
/**
* Binds a TinyMCE widget to <textarea> elements.
*/
angular.module('ui.directives').directive('uiTinymce', ['ui.config', function (uiConfig) {
uiConfig.tinymce = uiConfig.tinymce || {};
return {
require: 'ngModel',
link: function (scope, elm, attrs, ngModel) {
var expression,
options = {
// Update model on button click
onchange_callback: function (inst) {
if (inst.isDirty()) {
inst.save();
ngModel.$setViewValue(elm.val());
if (!scope.$$phase)
scope.$apply();
}
},
// Update model on keypress
handle_event_callback: function (e) {
if (this.isDirty()) {
this.save();
ngModel.$setViewValue(elm.val());
if (!scope.$$phase)
scope.$apply();
}
return true; // Continue handling
},
// Update model when calling setContent (such as from the source editor popup)
setup: function (ed) {
ed.onSetContent.add(function (ed, o) {
if (ed.isDirty()) {
ed.save();
ngModel.$setViewValue(elm.val());
if (!scope.$$phase)
scope.$apply();
}
});
}
};
if (attrs.uiTinymce) {
expression = scope.$eval(attrs.uiTinymce);
} else {
expression = {};
}
angular.extend(options, uiConfig.tinymce, expression);
setTimeout(function () {
elm.tinymce(options);
});
}
};
}]);
|