UNPKG

jodit-pro

Version:

PRO Version of Jodit Editor

7 lines (6 loc) 3.21 kB
var p=Object.defineProperty;var d=(l,e)=>p(l,"name",{value:e,configurable:!0});var r,a=function(l,e,t,i){var s=arguments.length,n=s<3?e:i===null?i=Object.getOwnPropertyDescriptor(e,t):i,h;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(l,e,t,i);else for(var c=l.length-1;c>=0;c--)(h=l[c])&&(n=(s<3?h(n):s>3?h(e,t,n):h(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n},m;import{KEY_LEFT as f,KEY_RIGHT as v,KEY_SPACE as w}from"jodit/esm/core/constants.js";import{autobind as x,component as C,watch as u}from"jodit/esm/core/decorators/index.js";import{css as g,loadImage as k}from"jodit/esm/core/helpers/index.js";import{assert as y}from"jodit/esm/core/helpers/utils/assert.js";import{Dialog as I,Dom as _,UIElement as b}from"jodit/esm/modules/index.js";let o=m=(r=class extends b{className(){return"UILightBox"}render(){return`<div> <div class='&__previous'>*angle-left*</div> <div class='&__preview'></div> <div class='&__loader'></div> <div class='&__next'>*angle-right*</div> </div>`}constructor(e,t,i){super(e),this.current=t,this.elements=i,this.dialog=new I;const{dialog:s}=this;s.setMod("theme",e.state.theme).toolbar.setMod("mode","header"),s.open(this),this.elements=this.elements.filter(n=>n.isImage),s.e.on(s,"afterClose",()=>{this.destruct()}),this.addGlobalListeners(),this.onChangeCurrent(),s.toolbar.build([{icon:"check",exec:d(()=>{e.stateManager.addActive(this.current,!1),e.e.fire("select.filebrowser"),s.close()},"exec")},"dialog.close"])}async onChangeCurrent(){const{current:e}=this;this.setMod("loading",!0);const t=this.getElm("preview");if(y(t!=null,"preview element does not exist"),_.detach(t),g(t,{backgroundImage:null}),e.isImage){const i=await k(e.fileURL,this.j);this.dialog.setPosition(),g(t,{width:Math.min(this.jodit.ow.innerWidth,i.naturalWidth),height:Math.min(this.jodit.ow.innerHeight-100,i.naturalHeight),backgroundImage:`url(${i.src})`})}else{const i=await this.makeIframe(e.fileURL);t.appendChild(i)}this.dialog.setSize(),this.dialog.setPosition(),this.setMod("loading",!1)}makeIframe(e){const t=this.j.c.element("iframe");return t.classList.add(this.getFullElName("office-iframe")),t.src=/\.pdf/.test(e)?e:this.j.o.previewOfficeURL+encodeURIComponent(e),t}onPreviousClick(){const{current:e}=this;let t=this.j.stateManager.getIndex(e,this.elements);t<=0?t=this.elements.length-1:t-=1,this.current=this.elements[t]}onNextClick(){const{current:e}=this;let t=this.j.stateManager.getIndex(e,this.elements);t>=this.elements.length-1?t=0:t+=1,this.current=this.elements[t]}static open(e,t,i){return new m(e,t,i)}addGlobalListeners(){this.j.e.on(this.j.od,"keydown",this.onKeyPress)}onKeyPress(e){if(e.key===f||e.key===v||e.key===w)return e.key===f?this.onPreviousClick():this.onNextClick(),!1}removeGlobalListeners(){this.j.e.off(this.j.od,"keydown",this.onKeyPress)}destruct(){return this.removeGlobalListeners(),this.dialog.destruct(),super.destruct()}},d(r,"UILightBox"),r);a([u("current")],o.prototype,"onChangeCurrent",null),a([u("previous:click")],o.prototype,"onPreviousClick",null),a([u("next:click")],o.prototype,"onNextClick",null),a([x],o.prototype,"onKeyPress",null),o=m=a([C],o);export{o as UILightBox};