1 // https://civicrm.org/licensing
3 // This defines an interface which by default only handles plain textareas
4 // A wysiwyg implementation can extend this by overriding as many of these functions as needed
6 supportsFileUploads
: !!CRM
.config
.wysisygScriptLocation
,
7 create: function(item
) {
8 var ret
= $.Deferred();
9 // Lazy-load the wysiwyg js
10 if (CRM
.config
.wysisygScriptLocation
) {
11 CRM
.loadScript(CRM
.config
.wysisygScriptLocation
).done(function() {
12 CRM
.wysiwyg
._create(item
).done(function() {
22 updateElement
: _
.noop
,
23 getVal: function(item
) {
26 setVal: function(item
, val
) {
27 return $(item
).val(val
);
29 insert: function(item
, text
) {
30 CRM
.wysiwyg
._insertIntoTextarea(item
, text
);
32 focus: function(item
) {
35 // Fallback function to use when a wysiwyg has not been initialized
36 _insertIntoTextarea: function(item
, text
) {
37 var itemObj
= $(item
);
38 var origVal
= itemObj
.val();
39 var origStart
= itemObj
[0].selectionStart
;
40 var origEnd
= itemObj
[0].selectionEnd
;
41 var newVal
= origVal
.substring(0, origStart
) + text
+ origVal
.substring(origEnd
);
43 var newPos
= (origStart
+ text
.length
);
44 itemObj
[0].selectionStart
= newPos
;
45 itemObj
[0].selectionEnd
= newPos
;
46 itemObj
.triggerHandler('change');
47 CRM
.wysiwyg
.focus(item
);
49 // Create a "collapsed" textarea that expands into a wysiwyg when clicked
50 createCollapsed: function(item
) {
53 .on('blur', function () {
54 CRM
.wysiwyg
.destroy(item
);
55 $(item
).hide().next('.replace-plain').show().html($(item
).val());
57 .after('<div class="replace-plain" tabindex="0"></div>');
58 $(item
).next('.replace-plain')
59 .attr('title', ts('Click to edit'))
61 .on('click keypress', function (e
) {
62 // Stop browser from opening clicked links
64 $(item
).show().next('.replace-plain').hide();
65 CRM
.wysiwyg
.create(item
);