1 // https://civicrm.org/licensing
3 var scriptLoaded
= false;
5 function getInstance(item
) {
6 var name
= $(item
).attr("name"),
7 id
= $(item
).attr("id");
8 if (name
&& window
.CKEDITOR
&& CKEDITOR
.instances
[name
]) {
9 return CKEDITOR
.instances
[name
];
11 if (id
&& window
.CKEDITOR
&& CKEDITOR
.instances
[id
]) {
12 return CKEDITOR
.instances
[id
];
16 function loadScript(url
) {
17 var deferred
= $.Deferred(),
18 script
= document
.createElement('script');
19 script
.onload = function() {deferred
.resolve();};
21 document
.getElementsByTagName("head")[0].appendChild(script
);
25 CRM
.wysiwyg
.supportsFileUploads
= true;
27 CRM
.wysiwyg
.create = function(item
) {
28 var deferred
= $.Deferred();
34 editor
.on('focus', function() {
35 $(item
).trigger('focus');
37 editor
.on('blur', function() {
38 editor
.updateElement();
39 $(item
).trigger("blur");
40 $(item
).trigger("change");
42 editor
.on('insertText', function() {
43 $(item
).trigger("keypress");
45 _
.each(['key', 'pasteState'], function(evName
) {
46 editor
.on(evName
, function(evt
) {
47 if (debounce
) clearTimeout(debounce
);
48 debounce
= setTimeout(function() {
49 editor
.updateElement();
50 $(item
).trigger("change");
54 editor
.on('pasteState', function() {
55 $(item
).trigger("paste");
57 // Hide CiviCRM menubar when editor is fullscreen
58 editor
.on('maximize', function (e
) {
59 $('#civicrm-menu').toggle(e
.data
=== 2);
64 function initialize() {
66 browseUrl
= CRM
.config
.resourceBase
+ "packages/kcfinder/browse.php?cms=civicrm",
67 uploadUrl
= CRM
.config
.resourceBase
+ "packages/kcfinder/upload.php?cms=civicrm";
69 $(item
).addClass('crm-wysiwyg-enabled');
71 CKEDITOR
.replace($(item
)[0], {
72 filebrowserBrowseUrl
: browseUrl
+ '&type=files',
73 filebrowserImageBrowseUrl
: browseUrl
+ '&type=images',
74 filebrowserFlashBrowseUrl
: browseUrl
+ '&type=flash',
75 filebrowserUploadUrl
: uploadUrl
+ '&type=files',
76 filebrowserImageUploadUrl
: uploadUrl
+ '&type=images',
77 filebrowserFlashUploadUrl
: uploadUrl
+ '&type=flash',
78 allowedContent
: true, // For CiviMail!
79 customConfig
: CRM
.config
.CKEditorCustomConfig
,
81 instanceReady
: onReady
86 if ($(item
).hasClass('crm-wysiwyg-enabled')) {
89 else if ($(item
).length
) {
90 // Lazy-load ckeditor.js
91 if (window
.CKEDITOR
) {
94 if (scriptLoaded
=== false) {
95 scriptLoaded
= loadScript(CRM
.config
.resourceBase
+ 'bower_components/ckeditor/ckeditor.js');
97 scriptLoaded
.done(initialize
);
105 CRM
.wysiwyg
.destroy = function(item
) {
106 $(item
).removeClass('crm-wysiwyg-enabled');
107 var editor
= getInstance(item
);
113 CRM
.wysiwyg
.updateElement = function(item
) {
114 var editor
= getInstance(item
);
116 editor
.updateElement();
120 CRM
.wysiwyg
.getVal = function(item
) {
121 var editor
= getInstance(item
);
123 return editor
.getData();
125 return $(item
).val();
129 CRM
.wysiwyg
.setVal = function(item
, val
) {
130 var editor
= getInstance(item
);
132 return editor
.setData(val
);
134 return $(item
).val(val
);
138 CRM
.wysiwyg
.insert = function(item
, text
) {
139 var editor
= getInstance(item
);
141 editor
.insertText(text
);
143 CRM
.wysiwyg
._insertIntoTextarea(item
, text
);
147 CRM
.wysiwyg
.focus = function(item
) {
148 var editor
= getInstance(item
);