PageSourceSearch

https://www.voices4midnorthcoast.org/wp-content/plugins/civicrm/civicrm/js/wysiwyg/crm.wysiwyg.js?r=fZo0len_AU

js voices4midnorthcoast.org collected 2026-10-09 17:12:22 UTC 4,331 bytes, 25 lines download raw bytes

1(function($,_){let richTextInputId=0;class CiviRichTextInput extends HTMLElement{constructor(){super();this.input=document.createElement('textarea');this.input.id='civiRichTextInput'+richTextInputId++;this.input.style.display='none';}
2connectedCallback(){this.render();}
3render(){this.innerHTML=`
4        <div class="rich-text-toolbar crm-buttons" style="display: none;">
5          <button type="button" class="crm-button rich-text-cancel">
6            <i class="crm-i fa-cancel" role="img" aria-disabled="true"></i>
7          </button>
8          <button type="button" class="crm-button rich-text-save">
9            <i class="crm-i fa-check" role="img" aria-disabled="true"></i>
10          </button>
11        </div>
12        <div class="rich-text-preview" tabindex="0"></div>
13      `;this.append(this.input);this.toolbar=this.querySelector('.rich-text-toolbar');this.cancelButton=this.querySelector('.rich-text-cancel');this.saveButton=this.querySelector('.rich-text-save');this.preview=this.querySelector('.rich-text-preview');this.cancelButton.append(ts('Cancel'));this.saveButton.append(ts('Save'));this.preview.title=ts('Click to edit');this.renderPreview();this.preview.onclick=(e)=>{e.preventDefault();this.openEditor();};this.preview.onkeystroke=(e)=>{e.preventDefault();this.openEditor();};this.cancelButton.onclick=()=>this.closeEditor();this.saveButton.onclick=()=>this.saveAndCloseEditor();if(this.hasAttribute('token-picker')){this.loadTokenPicker();}}
14renderPreview(){this.preview.innerHTML=this.value.length?this.value:'<i class="crm-i fa-pencil" role="img" aria-label="Edit"></i>';}
15loadTokenPicker(){this.tokenPicker=document.createElement('input');this.tokenPicker.classList.add('rich-text-token-picker','form-control','crm-auto-width','crm-action-menu','fa-code','collapsible-optgroups');this.toolbar.prepend(this.tokenPicker);this.tokenPicker.onchange=()=>{const token=`[${this.tokenPicker.value}]`;CRM.wysiwyg.insert(this.input,token);CRM.$(this.tokenPicker).select2('val','');};CRM.$(this.tokenPicker).crmSelect2({data:()=>this.getTokens(),placeholder:ts('Tokens')});}
16openEditor(){this.setAttribute('editing',true);CRM.wysiwyg.create(this.input);this.preview.style.display='none';this.toolbar.style.display=null;this.dispatchEvent(new Event('load'));}
17closeEditor(){CRM.wysiwyg.destroy(this.input);this.input.style.display='none';this.toolbar.style.display='none';this.preview.style.display=null;this.removeAttribute('editing');}
18saveAndCloseEditor(){this.value=CRM.wysiwyg.getVal(this.input);this.closeEditor();this.dispatchEvent(new Event('change'));}
19getTokens(){if(this.closest('af-gui-editor')){const afGuiEditor=angular.element(this.closest('af-gui-editor')).controller('afGuiEditor');return{results:afGuiEditor.getTokens(this.hasAttribute('include-submission-tokens'))};}
20else{throw new Error('civi-rich-text-input[token-picker] doesn\'t know how to get available tokens outside of af-gui-editor context yet');}}
21get value(){return this.input.value;}
22set value(v){if(!v){v='';}
23this.input.value=v;CRM.wysiwyg.setVal(this.input,v);if(this.preview){this.renderPreview();}}}
24customElements.define('civi-rich-text-input',CiviRichTextInput);CRM.wysiwyg={supportsFileUploads:!!CRM.config.wysisygScriptLocation,create:function(item){var ret=$.Deferred();if(CRM.config.wysisygScriptLocation){CRM.loadScript(CRM.config.wysisygScriptLocation).done(function(){CRM.wysiwyg._create(item).done(function(){ret.resolve();});});}else{ret.resolve();}
25return ret;},destroy:_.noop,updateElement:_.noop,getVal:function(item){return $(item).val();},setVal:function(item,val){return $(item).val(val);},insert:function(item,text){CRM.wysiwyg._insertIntoTextarea(item,text);},focus:function(item){$(item).focus();},_insertIntoTextarea:function(item,text){var itemObj=$(item);var origVal=itemObj.val();var origStart=itemObj[0].selectionStart;var origEnd=itemObj[0].selectionEnd;var newVal=origVal.substring(0,origStart)+text+origVal.substring(origEnd);itemObj.val(newVal);var newPos=(origStart+text.length);itemObj[0].selectionStart=newPos;itemObj[0].selectionEnd=newPos;itemObj.triggerHandler('change');CRM.wysiwyg.focus(item);},createCollapsed:(item)=>{const customInput=document.createElement('civi-rich-text-input');
25customInput.input=item;customInput.input.style.display='none';item.replaceWith(customInput);}};})(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.