wpd-editor.min.js
5.33 KB
class wpdEditorCounter{constructor(b,a){this.quill=b,this.options=a,this.commentmaxcount=a.commentmaxcount,this.replymaxcount=a.replymaxcount,this.commentmincount=a.commentmincount,this.replymincount=a.replymincount,this.container=document.getElementById("wpd-editor-char-counter-"+a.uniqueID),this.submit=document.getElementById("wpd-field-submit-"+a.uniqueID),b.on("editor-change",this.update.bind(this)),this.update()}calculate(){let b=this.quill.getText().length,c=this.quill.container.id,a=Array.from(document.querySelectorAll(`#${c} .ql-editor img`));return a.length&&a.forEach(function(a){null!==a.src.match(/https\:\/\/s\.w\.org\/images\/core\/emoji/gi)?b+=a.alt.length:a.classList.contains("wpdem-sticker")?b+=a.alt.length:b+=a.src.length}),b}update(){let b=this.calculate(),a=parseInt(this.quill.container.id.substring(this.quill.container.id.lastIndexOf("_")+1))?this.replymaxcount:this.commentmaxcount;if(a>0&&b>=a&&this.quill.deleteText(a,b),a>0){let c=a-(b-1);this.container.innerText=c>=0?c:0,b+10>a?this.container.classList.add("error"):this.container.classList.remove("error")}else this.container&&this.container.remove()}}Quill.register("modules/counter",wpdEditorCounter);let Link=Quill.import("formats/link");class wpdEditorLink extends Link{static create(a){let b=super.create(a);a=this.sanitize(a),b.setAttribute("href",a);let c=location.protocol+"//"+location.hostname;return(a.startsWith(c)||"#"===a.charAt(0)||"/"===a.charAt(0)&&"/"!==a.charAt(1))&&b.removeAttribute("target"),b}static sanitize(b){let a=super.sanitize(b),c=a.slice(0,a.indexOf(":"));return"#"===a.charAt(0)||"/"===a.charAt(0)|| -1!==this.PROTOCOL_WHITELIST.indexOf(c)||(a="http://"+b),a}}Quill.register(wpdEditorLink,!0);class WpdEditor{constructor(){this.editorWraperPrefix="wpd-editor-wraper",this.textEditorContainer="ql-texteditor",this.textEditorPrefix="wc-textarea",this.editorToolbarPrefix="wpd-editor-toolbar",this.sourceCodeButtonName="sourcecode",this.spoiler="spoiler",this.spoilerPromtTitle=wpdiscuzAjaxObj.wc_spoiler_title,this._container="",this._uniqueid="",this.currentEditor=null,this._editors=new Map,this._handlers=new Map,this._initDefaults()}addButtonEventHandler(a,b){this._handlers.set(a,b)}set uniqueid(a){""!==a&&"string"==typeof a?this._uniqueid=a:""===a?this._uniqueid=this._findUniqueId():console.error("Incorrect uniqueid.")}get uniqueid(){return this._uniqueid}set container(a){""!==a&&"string"==typeof a?(this._container=a,this.uniqueid=this._findUniqueId()):console.error("Incorrect uniqueid.")}get container(){return this._container}createEditor(b){if(this.container=b,this._editors.has(this.uniqueid))this.currentEditor=this._editors.get(this.uniqueid);else{let c=`#${this.editorToolbarPrefix}-${this.uniqueid}`;wpdiscuzEditorOptions.modules.toolbar=c,wpdiscuzEditorOptions.modules.counter.uniqueID=this.uniqueid;let a=new Quill(this.container,wpdiscuzEditorOptions);a.on("editor-change",(c,...b)=>{null!==b[0]&&(this.currentEditor=a,this.container=a.container.id)}),a.clipboard.addMatcher("a",(a,b)=>a.getAttribute("href")!==a.innerHTML?b:new(Quill.import("delta"))([{insert:a.innerHTML}])),a.clipboard.addMatcher("img",(b,d)=>{let c=Quill.import("delta"),a=b.getAttribute("src");return new c(/^data:image\/.+;base64/.test(a)?[{insert:""}]:[{insert:a}])}),Array.from(document.querySelectorAll(`${c} button`)).forEach(b=>{b.onclick=()=>{this.currentEditor=a,this.container=a.container.id;let c=b.dataset.wpde_button_name;void 0!==c&&"string"==typeof c&&""!==c.trim()&&this._handlers.has(c)&&this._handlers.get(c)(this.currentEditor,this.uniqueid)}}),this._bindTextEditor(a),this._editors.set(this.uniqueid,a),document.getElementById(`${this.editorWraperPrefix}-${this.uniqueid}`).style.display=""}let d=0;document.getElementsByClassName("wpd-thread-info").length&&(d=parseInt(document.getElementsByClassName("wpd-thread-info")[0].getAttribute("data-comments-count")));let e=d?"wc_comment_join_text":"wc_be_the_first_text";return this.currentEditor.root.setAttribute("data-placeholder",wpdiscuzAjaxObj.applyFilterOnPhrase(wpdiscuzEditorOptions[e],e,jQuery(b))),this.currentEditor}removeEditor(a){this.container=a,this._editors.has(this.uniqueid)&&this._editors.delete(this.uniqueid)}_bindTextEditor(b){let c=`${this.textEditorPrefix}-${this.uniqueid}`,a=document.getElementById(c);a&&(a.style.cssText="display: none;",b.addContainer(this.textEditorContainer).appendChild(a)),this.currentEditor=b}_findUniqueId(){return this.container.substring(this.container.lastIndexOf("-")+1)}_initDefaults(){this.addButtonEventHandler(this.sourceCodeButtonName,a=>{document.getElementById(`${this.textEditorPrefix}-${this.uniqueid}`);let b=document.getElementById("wpd-editor-source-code-wrapper-bg"),c=document.getElementById("wpd-editor-source-code-wrapper"),d=document.getElementById("wpd-editor-source-code"),e=document.getElementById("wpd-editor-uid");b.style.display="block",c.style.display="block",e.value=a.container.id,d.value=a.root.innerHTML}),this.addButtonEventHandler(this.spoiler,b=>{let e=prompt(this.spoilerPromtTitle);if(null===e)return;let c=` [spoiler title="${e}"] `,d=" [/spoiler] ",a=b.getSelection();null===a&&(a={index:b.getLength()-1,length:0}),0===a.length?(b.insertText(a.index,c+d,Quill.sources.USER),b.setSelection(a.index+c.length,Quill.sources.USER)):(b.insertText(a.index,c),b.insertText(a.index+c.length+a.length,d,Quill.sources.USER),b.setSelection(a.index+c.length+a.length+d.length,Quill.sources.USER))})}}