UNPKG

jodit-pro

Version:

PRO Version of Jodit Editor

2 lines (1 loc) 4.65 kB
var R=Object.defineProperty;var m=(c,e)=>R(c,"name",{value:e,configurable:!0});var p=function(c,e,t,o){var r=arguments.length,s=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,n;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(c,e,t,o);else for(var i=c.length-1;i>=0;i--)(n=c[i])&&(s=(r<3?n(s):r>3?n(e,t,s):n(e,t))||s);return r>3&&s&&Object.defineProperty(e,t,s),s};import"./config.js";import{Autocomplete as D}from"./ui/autocomplete.js";import{getTextLeftOfCursor as E,replaceTextLeftOfCursorAfterSpace as P}from"./helpers.js";import{KEY_DOWN as d,KEY_ENTER as O,KEY_ESC as b,KEY_TAB as y,KEY_UP as g}from"jodit/esm/core/constants.js";import{autobind as u,cache as v,debounce as _}from"jodit/esm/core/decorators/index.js";import{Dom as x}from"jodit/esm/core/dom/dom.js";import{isArray as w,isFunction as A,isPromise as S,isString as C,position as V,trim as F}from"jodit/esm/core/helpers/index.js";import{Plugin as T}from"jodit/esm/core/plugin/index.js";import{Popup as Y}from"jodit/esm/core/ui/popup/popup.js";import{JoditPro as j}from"../../jodit-pro.js";const a=class a extends T{constructor(){super(...arguments),this.hasStyle=!j.fatMode,this.sources=[]}get list(){return new D(this.jodit)}get popup(){const e=new Y(this.jodit);return e.setMod("padding",!1),e.setContent(this.list.container),this.jodit.e.on(e,"beforeClose",()=>{this.list.currentSelection=0}),e}afterInit(e){e.e.on("select.autocomplete",t=>{let o=t.value;A(t.insertValueRenderer)&&(o=t.insertValueRenderer(t)),x.isNode(o)||(o=e.createInside.fromHTML(o)),P(e.s.range,o),this.j.s.setCursorAfter(o),this.j.synchronizeValues(),this.popup.close()}).on("keydown.autocomplete",this.onKeyDown).on("keydown.autocomplete",this.onKeyControlDown,{top:!0}).on("beforeEnter.autocomplete",this.onEnter,{top:!0}).on("autocomplete.autocomplete",this.onAutoComplete).on("registerAutocompleteSource.autocomplete",this.registerAutocompleteSource).on("unregisterAutocompleteSource.autocomplete",this.unregisterAutocompleteSource)}registerAutocompleteSource(e){this.sources.push(e)}unregisterAutocompleteSource(e){const t=this.sources.indexOf(e);t!==-1&&this.sources.splice(t,1)}static isControlKey(e){return e===d||e===g||e===O||e===y}async onKeyDown(e){var t,o;if(e.key===b){this.popup.isOpened&&this.popup.close();return}const{s:r}=this.j;if(a.isControlKey(e.key)||!r.isInsideArea||!r.isCollapsed)return;const s=!((t=this.j.s.sel)===null||t===void 0)&&t.rangeCount?(o=this.j.s.sel)===null||o===void 0?void 0:o.getRangeAt(0):null,n=s&&E(s).split(" ").pop();if(n&&F(n).length){const i=await this.onAutoComplete(n);if(i.length)return this.openPopup(i)}this.popup.isOpened&&this.popup.close()}onKeyControlDown(e){if(this.popup.isOpened&&a.isControlKey(e.key)){switch(e.key){case d:this.list.selectNext();break;case g:this.list.selectPrevious();break;case y:this.list.select();break}return this.j.e.stopPropagation(e.type),!1}}onEnter(){if(this.popup.isOpened)return this.list.select(),!1}async onAutoComplete(e){const t=[];return await Promise.all(this.sources.concat(this.j.o.autocomplete.sources).map(async o=>{t.push(...await this.resolveFeed(e,o))})),t}async resolveFeed(e,t,o){let r;if(S(t)&&(t=await t),A(t))r=await t(e);else if(w(t)){const s=t,{isMatchedQuery:n}=this.j.o.autocomplete;r=s.filter(i=>C(i)?n(e,i):n(e,i.value)).map(i=>C(i)?{title:i,value:i}:i)}else r=await this.resolveFeed(e,t.feed,t);if(this.j.isDestructed)return[];if(r&&w(r)){const{itemRenderer:s,insertValueRenderer:n,maxItems:i}=this.j.o.autocomplete;return r=r.map(K=>{var h,f;return{itemRenderer:(h=o?.itemRenderer)!==null&&h!==void 0?h:s,insertValueRenderer:(f=o?.insertValueRenderer)!==null&&f!==void 0?f:n,...K}}),r.slice(0,i)}return[]}openPopup(e){this.list.build(e),this.popup.open(()=>{const{j:t}=this,o=t.s.range.getBoundingClientRect(),r={left:o.left,top:o.top,height:o.height,width:o.width};if(t.o.iframe&&t.iframe){const s=V(t.iframe,t);r.top+=s.top,r.left+=s.left}return r})}beforeDestruct(e){e.e.off(this.list).off(this.popup).off("keydown.autocomplete",this.onKeyDown).off("autocomplete.autocomplete",this.onAutoComplete).off(".autocomplete"),this.list.destruct(),this.popup.destruct()}};m(a,"autocomplete");let l=a;l.requires=["enter","license"],p([v],l.prototype,"list",null),p([v],l.prototype,"popup",null),p([u],l.prototype,"registerAutocompleteSource",null),p([u],l.prototype,"unregisterAutocompleteSource",null),p([_()],l.prototype,"onKeyDown",null),p([u],l.prototype,"onKeyControlDown",null),p([u],l.prototype,"onEnter",null),p([u],l.prototype,"onAutoComplete",null),p([u],l.prototype,"resolveFeed",null),j.plugins.add("autocomplete",l);export{l as autocomplete};