Commit | Line | Data |
---|---|---|
7c523661 TC |
1 | // https://civicrm.org/licensing |
2 | (function($, _) { | |
f91b1c0c CW |
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 | |
5 | CRM.wysiwyg = { | |
286a7e5a CW |
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() { | |
13 | ret.resolve(); | |
14 | }); | |
15 | }); | |
16 | } else { | |
17 | ret.resolve(); | |
18 | } | |
19 | return ret; | |
c63f9bfb | 20 | }, |
f91b1c0c CW |
21 | destroy: _.noop, |
22 | updateElement: _.noop, | |
23 | getVal: function(item) { | |
24 | return $(item).val(); | |
25 | }, | |
26 | setVal: function(item, val) { | |
27 | return $(item).val(val); | |
28 | }, | |
29 | insert: function(item, text) { | |
30 | CRM.wysiwyg._insertIntoTextarea(item, text); | |
31 | }, | |
32 | focus: function(item) { | |
33 | $(item).focus(); | |
34 | }, | |
35 | // Fallback function to use when a wysiwyg has not been initialized | |
36 | _insertIntoTextarea: function(item, text) { | |
37 | var origVal = $(item).val(); | |
38 | var origPos = item[0].selectionStart; | |
39 | var newVal = origVal + text; | |
40 | $(item).val(newVal); | |
41 | var newPos = (origPos + text.length); | |
42 | item[0].selectionStart = newPos; | |
43 | item[0].selectionEnd = newPos; | |
44 | $(item).triggerHandler('change'); | |
45 | CRM.wysiwyg.focus(item); | |
46 | }, | |
0bd65d9b | 47 | // Create a "collapsed" textarea that expands into a wysiwyg when clicked |
f91b1c0c CW |
48 | createCollapsed: function(item) { |
49 | $(item) | |
50 | .hide() | |
f91b1c0c CW |
51 | .on('blur', function () { |
52 | CRM.wysiwyg.destroy(item); | |
53 | $(item).hide().next('.replace-plain').show().html($(item).val()); | |
0bd65d9b CW |
54 | }) |
55 | .after('<div class="replace-plain" tabindex="0"></div>'); | |
56 | $(item).next('.replace-plain') | |
57 | .attr('title', ts('Click to edit')) | |
58 | .html($(item).val()) | |
59 | .on('click keypress', function (e) { | |
60 | // Stop browser from opening clicked links | |
61 | e.preventDefault(); | |
62 | $(item).show().next('.replace-plain').hide(); | |
63 | CRM.wysiwyg.create(item); | |
f91b1c0c | 64 | }); |
f91b1c0c | 65 | } |
7c523661 | 66 | }; |
7c523661 | 67 | })(CRM.$, CRM._); |