PageSourceSearch

https://www.o-p-i.fr/aupays/wp-content/plugins/civicrm/civicrm/js/wysiwyg/crm.wysiwyg.js?r=Cx6ZOfr_FR

js o-p-i.fr collected 2026-09-24 21:12:17 UTC 2,479 bytes, 72 lines download raw bytes

1// https://civicrm.org/licensing
2(function($, _) {
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 = {
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;
20    },
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 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);
42      itemObj.val(newVal);
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);
48    },
49    // Create a "collapsed" textarea that expands into a wysiwyg when clicked
50    createCollapsed: function(item) {
51      $(item)
52        .hide()
53        .on('blur', function () {
54          CRM.wysiwyg.destroy(item);
55          $(item).hide().next('.replace-plain').show().html($(item).val());
56        })
57        .on('change', function() {
58          $(this).next('.replace-plain').html($(this).val());
59        })
60        .after('<div class="replace-plain" tabindex="0"></div>');
61      $(item).next('.replace-plain')
62        .attr('title', ts('Click to edit'))
63        .html($(item).val())
64        .on('click keypress', function (e) {
65          // Stop browser from opening clicked links
66          e.preventDefault();
67          $(item).show().next('.replace-plain').hide();
68          CRM.wysiwyg.create(item);
69        });
70    }
71  };
72})(CRM.$, CRM._);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.