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 | ||
629fcb04 J |
71 | var isFullPage = false; |
72 | if ($(item).hasClass('crm-wysiwyg-fullpage')) { | |
73 | isFullPage = true; | |
74 | } | |
75 | ||
183473a2 CW |
76 | CKEDITOR.replace($(item)[0], { |
77 | filebrowserBrowseUrl: browseUrl + '&type=files', | |
78 | filebrowserImageBrowseUrl: browseUrl + '&type=images', | |
79 | filebrowserFlashBrowseUrl: browseUrl + '&type=flash', | |
80 | filebrowserUploadUrl: uploadUrl + '&type=files', | |
81 | filebrowserImageUploadUrl: uploadUrl + '&type=images', | |
82 | filebrowserFlashUploadUrl: uploadUrl + '&type=flash', | |
c4a27c4a | 83 | allowedContent: true, // For CiviMail! |
629fcb04 | 84 | fullPage: isFullPage, |
183473a2 CW |
85 | customConfig: CRM.config.CKEditorCustomConfig, |
86 | on: { | |
87 | instanceReady: onReady | |
88 | } | |
89 | }); | |
90 | } | |
9db15279 CW |
91 | |
92 | if ($(item).hasClass('crm-wysiwyg-enabled')) { | |
93 | deferred.resolve(); | |
94 | } | |
95 | else if ($(item).length) { | |
80ab9d76 CW |
96 | // Lazy-load ckeditor.js |
97 | if (window.CKEDITOR) { | |
98 | initialize(); | |
99 | } else { | |
100 | if (scriptLoaded === false) { | |
dc662c39 | 101 | scriptLoaded = loadScript(CRM.config.resourceBase + 'bower_components/ckeditor/ckeditor.js'); |
80ab9d76 CW |
102 | } |
103 | scriptLoaded.done(initialize); | |
104 | } | |
c63f9bfb CW |
105 | } else { |
106 | deferred.reject(); | |
7c523661 | 107 | } |
c63f9bfb | 108 | return deferred; |
7c523661 | 109 | }; |
183473a2 | 110 | |
7c523661 | 111 | CRM.wysiwyg.destroy = function(item) { |
9db15279 | 112 | $(item).removeClass('crm-wysiwyg-enabled'); |
7c523661 TC |
113 | var editor = getInstance(item); |
114 | if (editor) { | |
115 | editor.destroy(); | |
116 | } | |
117 | }; | |
183473a2 | 118 | |
7c523661 TC |
119 | CRM.wysiwyg.updateElement = function(item) { |
120 | var editor = getInstance(item); | |
121 | if (editor) { | |
122 | editor.updateElement(); | |
123 | } | |
124 | }; | |
183473a2 | 125 | |
c62731c3 | 126 | CRM.wysiwyg.getVal = function(item) { |
7c523661 TC |
127 | var editor = getInstance(item); |
128 | if (editor) { | |
129 | return editor.getData(); | |
130 | } else { | |
131 | return $(item).val(); | |
132 | } | |
133 | }; | |
183473a2 | 134 | |
c62731c3 TC |
135 | CRM.wysiwyg.setVal = function(item, val) { |
136 | var editor = getInstance(item); | |
137 | if (editor) { | |
138 | return editor.setData(val); | |
139 | } else { | |
140 | return $(item).val(val); | |
141 | } | |
142 | }; | |
183473a2 | 143 | |
c62731c3 | 144 | CRM.wysiwyg.insert = function(item, text) { |
7c523661 TC |
145 | var editor = getInstance(item); |
146 | if (editor) { | |
147 | editor.insertText(text); | |
c62731c3 | 148 | } else { |
f91b1c0c | 149 | CRM.wysiwyg._insertIntoTextarea(item, text); |
7c523661 TC |
150 | } |
151 | }; | |
80ab9d76 | 152 | |
c62731c3 | 153 | CRM.wysiwyg.focus = function(item) { |
7c523661 TC |
154 | var editor = getInstance(item); |
155 | if (editor) { | |
c62731c3 | 156 | editor.focus(); |
f91b1c0c CW |
157 | } else { |
158 | $(item).focus(); | |
7c523661 | 159 | } |
b608cfb1 | 160 | }; |
c62731c3 | 161 | |
b608cfb1 | 162 | })(CRM.$, CRM._); |