1 // https://civicrm.org/licensing
4 function getInstance(item
) {
5 var name
= $(item
).attr("name"),
6 id
= $(item
).attr("id");
7 if (name
&& window
.CKEDITOR
&& CKEDITOR
.instances
[name
]) {
8 return CKEDITOR
.instances
[name
];
10 if (id
&& window
.CKEDITOR
&& CKEDITOR
.instances
[id
]) {
11 return CKEDITOR
.instances
[id
];
15 CRM
.wysiwyg
.supportsFileUploads
= true;
17 CRM
.wysiwyg
._create = function(item
) {
18 var deferred
= $.Deferred();
24 editor
.on('focus', function() {
25 $(item
).trigger('focus');
27 editor
.on('blur', function() {
28 editor
.updateElement();
29 $(item
).trigger("blur");
30 $(item
).trigger("change");
32 editor
.on('insertText', function() {
33 $(item
).trigger("keypress");
35 _
.each(['key', 'pasteState'], function(evName
) {
36 editor
.on(evName
, function(evt
) {
37 if (debounce
) clearTimeout(debounce
);
38 debounce
= setTimeout(function() {
39 editor
.updateElement();
40 $(item
).trigger("change");
44 editor
.on('pasteState', function() {
45 $(item
).trigger("paste");
47 // Hide CiviCRM menubar when editor is fullscreen
48 editor
.on('maximize', function (e
) {
49 $('#civicrm-menu').toggle(e
.data
=== 2);
51 $(editor
.element
.$).trigger('crmWysiwygCreate', ['ckeditor', editor
]);
55 function initialize() {
57 browseUrl
= CRM
.config
.packagesBase
+ "kcfinder/browse.php?cms=civicrm",
58 uploadUrl
= CRM
.config
.packagesBase
+ "kcfinder/upload.php?cms=civicrm&format=json",
59 preset
= $(item
).data('preset') || 'default',
60 // This variable is always an array but a legacy extension could be setting it as a string.
61 customConfig
= (typeof CRM
.config
.CKEditorCustomConfig
=== 'string') ? CRM
.config
.CKEditorCustomConfig
:
62 (CRM
.config
.CKEditorCustomConfig
[preset
] || CRM
.config
.CKEditorCustomConfig
.default);
64 $(item
).addClass('crm-wysiwyg-enabled');
66 CKEDITOR
.replace($(item
)[0], {
67 filebrowserBrowseUrl
: browseUrl
+ '&type=files',
68 filebrowserImageBrowseUrl
: browseUrl
+ '&type=images',
69 filebrowserFlashBrowseUrl
: browseUrl
+ '&type=flash',
70 filebrowserUploadUrl
: uploadUrl
+ '&type=files',
71 filebrowserImageUploadUrl
: uploadUrl
+ '&type=images',
72 filebrowserFlashUploadUrl
: uploadUrl
+ '&type=flash',
73 customConfig
: customConfig
,
75 instanceReady
: onReady
80 if ($(item
).hasClass('crm-wysiwyg-enabled')) {
83 else if ($(item
).length
) {
84 // Lazy-load ckeditor.js
85 if (window
.CKEDITOR
) {
88 CRM
.loadScript(CRM
.config
.resourceBase
+ 'bower_components/ckeditor/ckeditor.js').done(initialize
);
96 CRM
.wysiwyg
.destroy = function(item
) {
97 $(item
).removeClass('crm-wysiwyg-enabled');
98 var editor
= getInstance(item
);
104 CRM
.wysiwyg
.updateElement = function(item
) {
105 var editor
= getInstance(item
);
107 editor
.updateElement();
111 CRM
.wysiwyg
.getVal = function(item
) {
112 var editor
= getInstance(item
);
114 return editor
.getData();
116 return $(item
).val();
120 CRM
.wysiwyg
.setVal = function(item
, val
) {
121 var editor
= getInstance(item
);
123 return editor
.setData(val
);
125 return $(item
).val(val
);
129 CRM
.wysiwyg
.insert = function(item
, text
) {
130 var editor
= getInstance(item
);
132 editor
.insertText(text
);
134 CRM
.wysiwyg
._insertIntoTextarea(item
, text
);
138 CRM
.wysiwyg
.focus = function(item
) {
139 var editor
= getInstance(item
);