Commit | Line | Data |
---|---|---|
b608cfb1 TC |
1 | // https://civicrm.org/licensing |
2 | (function($, _) { | |
80ab9d76 | 3 | var scriptLoaded = false; |
183473a2 | 4 | |
b608cfb1 | 5 | function getInstance(item) { |
f91b1c0c CW |
6 | var name = $(item).attr("name"), |
7 | id = $(item).attr("id"); | |
5f005e5d | 8 | if (name && window.CKEDITOR && CKEDITOR.instances[name]) { |
c62731c3 TC |
9 | return CKEDITOR.instances[name]; |
10 | } | |
5f005e5d | 11 | if (id && window.CKEDITOR && CKEDITOR.instances[id]) { |
c62731c3 TC |
12 | return CKEDITOR.instances[id]; |
13 | } | |
b608cfb1 | 14 | } |
183473a2 | 15 | |
80ab9d76 CW |
16 | function loadScript(url) { |
17 | var deferred = $.Deferred(), | |
18 | script = document.createElement('script'); | |
19 | script.onload = function() {deferred.resolve();}; | |
20 | script.src = url; | |
21 | document.getElementsByTagName("head")[0].appendChild(script); | |
22 | return deferred; | |
23 | } | |
24 | ||
c90cd6ed | 25 | CRM.wysiwyg.supportsFileUploads = true; |
183473a2 | 26 | |
f91b1c0c | 27 | CRM.wysiwyg.create = function(item) { |
183473a2 | 28 | var deferred = $.Deferred(); |
80ab9d76 | 29 | |
183473a2 CW |
30 | function onReady() { |
31 | var debounce, | |
32 | editor = this; | |
33 | ||
13d9bc82 CW |
34 | editor.on('focus', function() { |
35 | $(item).trigger('focus'); | |
36 | }); | |
c62731c3 TC |
37 | editor.on('blur', function() { |
38 | editor.updateElement(); | |
7c523661 | 39 | $(item).trigger("blur"); |
f91b1c0c | 40 | $(item).trigger("change"); |
7c523661 | 41 | }); |
c62731c3 TC |
42 | editor.on('insertText', function() { |
43 | $(item).trigger("keypress"); | |
44 | }); | |
e4d81a60 | 45 | _.each(['key', 'pasteState'], function(evName) { |
6633d03f TO |
46 | editor.on(evName, function(evt) { |
47 | if (debounce) clearTimeout(debounce); | |
48 | debounce = setTimeout(function() { | |
49 | editor.updateElement(); | |
50 | $(item).trigger("change"); | |
51 | }, 50); | |
52 | }); | |
53 | }); | |
c62731c3 TC |
54 | editor.on('pasteState', function() { |
55 | $(item).trigger("paste"); | |
56 | }); | |
9cc08ac2 CW |
57 | // Hide CiviCRM menubar when editor is fullscreen |
58 | editor.on('maximize', function (e) { | |
59 | $('#civicrm-menu').toggle(e.data === 2); | |
60 | }); | |
183473a2 CW |
61 | deferred.resolve(); |
62 | } | |
63 | ||
64 | function initialize() { | |
65 | var | |
dc662c39 CW |
66 | browseUrl = CRM.config.resourceBase + "packages/kcfinder/browse.php?cms=civicrm", |
67 | uploadUrl = CRM.config.resourceBase + "packages/kcfinder/upload.php?cms=civicrm"; | |
183473a2 | 68 | |
9db15279 CW |
69 | $(item).addClass('crm-wysiwyg-enabled'); |
70 | ||
15036c7d | 71 | var isFullPage = $(item).hasClass('crm-wysiwyg-fullpage'); |
629fcb04 | 72 | |
183473a2 CW |
73 | CKEDITOR.replace($(item)[0], { |
74 | filebrowserBrowseUrl: browseUrl + '&type=files', | |
75 | filebrowserImageBrowseUrl: browseUrl + '&type=images', | |
76 | filebrowserFlashBrowseUrl: browseUrl + '&type=flash', | |
77 | filebrowserUploadUrl: uploadUrl + '&type=files', | |
78 | filebrowserImageUploadUrl: uploadUrl + '&type=images', | |
79 | filebrowserFlashUploadUrl: uploadUrl + '&type=flash', | |
c4a27c4a | 80 | allowedContent: true, // For CiviMail! |
629fcb04 | 81 | fullPage: isFullPage, |
183473a2 CW |
82 | customConfig: CRM.config.CKEditorCustomConfig, |
83 | on: { | |
84 | instanceReady: onReady | |
85 | } | |
86 | }); | |
87 | } | |
9db15279 CW |
88 | |
89 | if ($(item).hasClass('crm-wysiwyg-enabled')) { | |
90 | deferred.resolve(); | |
91 | } | |
92 | else if ($(item).length) { | |
80ab9d76 CW |
93 | // Lazy-load ckeditor.js |
94 | if (window.CKEDITOR) { | |
95 | initialize(); | |
96 | } else { | |
97 | if (scriptLoaded === false) { | |
dc662c39 | 98 | scriptLoaded = loadScript(CRM.config.resourceBase + 'bower_components/ckeditor/ckeditor.js'); |
80ab9d76 CW |
99 | } |
100 | scriptLoaded.done(initialize); | |
101 | } | |
c63f9bfb CW |
102 | } else { |
103 | deferred.reject(); | |
7c523661 | 104 | } |
c63f9bfb | 105 | return deferred; |
7c523661 | 106 | }; |
183473a2 | 107 | |
7c523661 | 108 | CRM.wysiwyg.destroy = function(item) { |
9db15279 | 109 | $(item).removeClass('crm-wysiwyg-enabled'); |
7c523661 TC |
110 | var editor = getInstance(item); |
111 | if (editor) { | |
112 | editor.destroy(); | |
113 | } | |
114 | }; | |
183473a2 | 115 | |
7c523661 TC |
116 | CRM.wysiwyg.updateElement = function(item) { |
117 | var editor = getInstance(item); | |
118 | if (editor) { | |
119 | editor.updateElement(); | |
120 | } | |
121 | }; | |
183473a2 | 122 | |
c62731c3 | 123 | CRM.wysiwyg.getVal = function(item) { |
7c523661 TC |
124 | var editor = getInstance(item); |
125 | if (editor) { | |
126 | return editor.getData(); | |
127 | } else { | |
128 | return $(item).val(); | |
129 | } | |
130 | }; | |
183473a2 | 131 | |
c62731c3 TC |
132 | CRM.wysiwyg.setVal = function(item, val) { |
133 | var editor = getInstance(item); | |
134 | if (editor) { | |
135 | return editor.setData(val); | |
136 | } else { | |
137 | return $(item).val(val); | |
138 | } | |
139 | }; | |
183473a2 | 140 | |
c62731c3 | 141 | CRM.wysiwyg.insert = function(item, text) { |
7c523661 TC |
142 | var editor = getInstance(item); |
143 | if (editor) { | |
144 | editor.insertText(text); | |
c62731c3 | 145 | } else { |
f91b1c0c | 146 | CRM.wysiwyg._insertIntoTextarea(item, text); |
7c523661 TC |
147 | } |
148 | }; | |
80ab9d76 | 149 | |
c62731c3 | 150 | CRM.wysiwyg.focus = function(item) { |
7c523661 TC |
151 | var editor = getInstance(item); |
152 | if (editor) { | |
c62731c3 | 153 | editor.focus(); |
f91b1c0c CW |
154 | } else { |
155 | $(item).focus(); | |
7c523661 | 156 | } |
b608cfb1 | 157 | }; |
c62731c3 | 158 | |
b608cfb1 | 159 | })(CRM.$, CRM._); |