plugin.js 14 KB

12345
  1. /*
  2. Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  3. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  4. */
  5. !function(){function e(e){function a(){this.deflated||(e.widgets.focused==this.widget&&(this.focused=!0),e.widgets.destroy(this.widget),this.deflated=!0)}function n(){var t=e.editable(),i=e.document;if(this.deflated)this.widget=e.widgets.initOn(this.element,"image",this.widget.data),this.widget.inline&&!new CKEDITOR.dom.elementPath(this.widget.wrapper,t).block&&(t=i.createElement(e.activeEnterMode==CKEDITOR.ENTER_P?"p":"div"),t.replace(this.widget.wrapper),this.widget.wrapper.move(t)),this.focused&&(this.widget.focus(),delete this.focused),delete this.deflated;else{var a=this.widget,t=r,i=a.wrapper,n=a.data.align,a=a.data.hasCaption;if(t){for(var s=3;s--;)i.removeClass(t[s]);"center"==n?a&&i.addClass(t[1]):"none"!=n&&i.addClass(t[m[n]])}else"center"==n?(a?i.setStyle("text-align","center"):i.removeStyle("text-align"),i.removeStyle("float")):("none"==n?i.removeStyle("float"):i.setStyle("float",n),i.removeStyle("text-align"))}}var r=e.config.image2_alignClasses,l=e.config.image2_captionedClass;return{allowedContent:g(e),requiredContent:"img[src,alt]",features:c(e),styleableElements:"img figure",contentTransformations:[["img[width]: sizeToAttribute"]],editables:{caption:{selector:"figcaption",allowedContent:"br em strong sub sup u s; a[!href,target]"}},parts:{image:"img",caption:"figcaption"},dialog:"image2",template:'<img alt="" src="" />',data:function(){var t=this.features;if(this.data.hasCaption&&!e.filter.checkFeature(t.caption)&&(this.data.hasCaption=!1),"none"==this.data.align||e.filter.checkFeature(t.align)||(this.data.align="none"),this.shiftState({widget:this,element:this.element,oldData:this.oldData,newData:this.data,deflate:a,inflate:n}),this.data.link?this.parts.link||(this.parts.link=this.parts.image.getParent()):this.parts.link&&delete this.parts.link,this.parts.image.setAttributes({src:this.data.src,"data-cke-saved-src":this.data.src,alt:this.data.alt}),this.oldData&&!this.oldData.hasCaption&&this.data.hasCaption)for(var i in this.data.classes)this.parts.image.removeClass(i);if(e.filter.checkFeature(t.dimension)){t=this.data,t={width:t.width,height:t.height},i=this.parts.image;for(var s in t)t[s]?i.setAttribute(s,t[s]):i.removeAttribute(s)}this.oldData=CKEDITOR.tools.extend({},this.data)},init:function(){var t=CKEDITOR.plugins.image2,i=this.parts.image,a={hasCaption:!!this.parts.caption,src:i.getAttribute("src"),alt:i.getAttribute("alt")||"",width:i.getAttribute("width")||"",height:i.getAttribute("height")||"",lock:this.ready?t.checkHasNaturalRatio(i):!0},n=i.getAscendant("a");n&&this.wrapper.contains(n)&&(this.parts.link=n),a.align||(i=a.hasCaption?this.element:i,r?(i.hasClass(r[0])?a.align="left":i.hasClass(r[2])&&(a.align="right"),a.align?i.removeClass(r[m[a.align]]):a.align="none"):(a.align=i.getStyle("float")||"none",i.removeStyle("float"))),e.plugins.link&&this.parts.link&&(a.link=t.getLinkAttributesParser()(e,this.parts.link),(i=a.link.advanced)&&i.advCSSClasses&&(i.advCSSClasses=CKEDITOR.tools.trim(i.advCSSClasses.replace(/cke_\S+/,"")))),this.wrapper[(a.hasCaption?"remove":"add")+"Class"]("cke_image_nocaption"),this.setData(a),e.filter.checkFeature(this.features.dimension)&&!0!==e.config.image2_disableResizer&&s(this),this.shiftState=t.stateShifter(this.editor),this.on("contextMenu",function(e){e.data.image=CKEDITOR.TRISTATE_OFF,(this.parts.link||this.wrapper.getAscendant("a"))&&(e.data.link=e.data.unlink=CKEDITOR.TRISTATE_OFF)})},addClass:function(e){d(this).addClass(e)},hasClass:function(e){return d(this).hasClass(e)},removeClass:function(e){d(this).removeClass(e)},getClasses:function(){var e=new RegExp("^("+[].concat(l,r).join("|")+")$");return function(){var t,i=this.repository.parseElementClasses(d(this).getAttribute("class"));for(t in i)e.test(t)&&delete i[t];return i}}(),upcast:t(e),downcast:i(e),getLabel:function(){return this.editor.lang.widget.label.replace(/%1/,(this.data.alt||"")+" "+this.pathName)}}}function t(e){var t=a(e),i=e.config.image2_captionedClass;return function(e,a){var s,r={width:1,height:1},l=e.name;if(!e.attributes["data-cke-realelement"]&&(t(e)?("div"==l&&(s=e.getFirst("figure"))&&(e.replaceWith(s),e=s),a.align="center",s=e.getFirst("img")||e.getFirst("a").getFirst("img")):"figure"==l&&e.hasClass(i)?s=e.find(function(e){return"img"===e.name&&-1!==CKEDITOR.tools.array.indexOf(["figure","a"],e.parent.name)},!0)[0]:n(e)&&(s="a"==e.name?e.children[0]:e),s)){for(var o in r)(r=s.attributes[o])&&r.match(u)&&delete s.attributes[o];return e}}}function i(e){var t=e.config.image2_alignClasses;return function(e){var i="a"==e.name?e.getFirst():e,a=i.attributes,n=this.data.align;if(!this.inline){var s=e.getFirst("span");s&&s.replaceWith(s.getFirst({img:1,a:1}))}return n&&"none"!=n&&(s=CKEDITOR.tools.parseCssText(a.style||""),"center"==n&&"figure"==e.name?e=e.wrapWith(new CKEDITOR.htmlParser.element("div",t?{"class":t[1]}:{style:"text-align:center"})):n in{left:1,right:1}&&(t?i.addClass(t[m[n]]):s["float"]=n),t||CKEDITOR.tools.isEmpty(s)||(a.style=CKEDITOR.tools.writeCssText(s))),e}}function a(e){var t=e.config.image2_captionedClass,i=e.config.image2_alignClasses,a={figure:1,a:1,img:1};return function(s){if(!(s.name in{div:1,p:1}))return!1;var r=s.children;if(1!==r.length)return!1;if(r=r[0],!(r.name in a))return!1;if("p"==s.name){if(!n(r))return!1}else if("figure"==r.name){if(!r.hasClass(t))return!1}else if(e.enterMode==CKEDITOR.ENTER_P||!n(r))return!1;return(i?s.hasClass(i[1]):"center"==CKEDITOR.tools.parseCssText(s.attributes.style||"",!0)["text-align"])?!0:!1}}function n(e){return"img"==e.name?!0:"a"==e.name?1==e.children.length&&e.getFirst("img"):!1}function s(e){var t=e.editor,i=t.editable(),a=t.document,n=e.resizer=a.createElement("span");if(n.addClass("cke_image_resizer"),n.setAttribute("title",t.lang.image2.resizer),n.append(new CKEDITOR.dom.text("​",a)),e.inline)e.wrapper.append(n);else{var s=e.parts.link||e.parts.image,r=s.getParent(),l=a.createElement("span");l.addClass("cke_image_resizer_wrapper"),l.append(s),l.append(n),e.element.append(l,!0),r.is("span")&&r.remove()}n.on("mousedown",function(s){function r(e,t,i){var n=CKEDITOR.document,s=[];if(a.equals(n)||s.push(n.on(e,t)),s.push(a.on(e,t)),i)for(e=s.length;e--;)i.push(s.pop())}function l(){c=_+v*m,d=Math.round(c/E)}function o(){d=T-u,c=Math.round(d*E)}var g,c,d,h,m,u,f,p=e.parts.image,C=function(){var e,i=t.config.image2_maxSize;return i?(i=CKEDITOR.tools.copy(i),e=CKEDITOR.plugins.image2.getNatural(p),i.width=Math.max("natural"===i.width?e.width:i.width,15),i.height=Math.max("natural"===i.height?e.height:i.height,15),i):null}(),v="right"==e.data.align?-1:1,k=s.data.$.screenX,w=s.data.$.screenY,_=p.$.clientWidth,T=p.$.clientHeight,E=_/T,b=[],D="cke_image_s"+(~v?"e":"w");t.fire("saveSnapshot"),r("mousemove",function(e){g=e.data.$,m=g.screenX-k,u=w-g.screenY,f=Math.abs(m/u),1==v?0>=m?0>=u?l():f>=E?l():o():0>=u?f>=E?o():l():o():0>=m?0>=u?f>=E?o():l():o():0>=u?l():f>=E?l():o(),e=C&&(c>C.width||d>C.height),15>c||15>d||e||(h={width:c,height:d},p.setAttributes(h))},b),r("mouseup",function(){for(var a;a=b.pop();)a.removeListener();i.removeClass(D),n.removeClass("cke_image_resizing"),h&&(e.setData(h),t.fire("saveSnapshot")),h=!1},b),i.addClass(D),n.addClass("cke_image_resizing")}),e.on("data",function(){n["right"==e.data.align?"addClass":"removeClass"]("cke_image_resizer_left")})}function r(e){var t,i=[];return function(a){var n=e.getCommand("justify"+a);n&&(i.push(function(){n.refresh(e,e.elementPath())}),a in{right:1,left:1,center:1}&&n.on("exec",function(t){var n=o(e);if(n){for(n.setData("align",a),n=i.length;n--;)i[n]();t.cancel()}}),n.on("refresh",function(i){var n=o(e),s={right:1,left:1,center:1};n&&(void 0===t&&(t=e.filter.checkFeature(e.widgets.registered.image.features.align)),t?this.setState(n.data.align==a?CKEDITOR.TRISTATE_ON:a in s?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED):this.setState(CKEDITOR.TRISTATE_DISABLED),i.cancel())}))}}function l(e){if(e.plugins.link){var t=CKEDITOR.on("dialogDefinition",function(t){if(t=t.data,"link"==t.name){t=t.definition;var i=t.onShow,a=t.onOk;t.onShow=function(){var t=o(e),a=this.getContentElement("info","linkDisplayText").getElement().getParent().getParent();t&&(t.inline?!t.wrapper.getAscendant("a"):1)?(this.setupContent(t.data.link||{}),a.hide()):(a.show(),i.apply(this,arguments))},t.onOk=function(){var t=o(e);if(t&&(t.inline?!t.wrapper.getAscendant("a"):1)){var i={};this.commitContent(i),t.setData("link",i)}else a.apply(this,arguments)}}});e.on("destroy",function(){t.removeListener()}),e.getCommand("unlink").on("exec",function(t){var i=o(e);i&&i.parts.link&&(i.setData("link",null),this.refresh(e,e.elementPath()),t.cancel())}),e.getCommand("unlink").on("refresh",function(t){var i=o(e);i&&(this.setState(i.data.link||i.wrapper.getAscendant("a")?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),t.cancel())})}}function o(e){return(e=e.widgets.focused)&&"image"==e.name?e:null}function g(e){var t=e.config.image2_alignClasses;return e={div:{match:a(e)},p:{match:a(e)},img:{attributes:"!src,alt,width,height"},figure:{classes:"!"+e.config.image2_captionedClass},figcaption:!0},t?(e.div.classes=t[1],e.p.classes=e.div.classes,e.img.classes=t[0]+","+t[2],e.figure.classes+=","+e.img.classes):(e.div.styles="text-align",e.p.styles="text-align",e.img.styles="float",e.figure.styles="float,display"),e}function c(e){return e=e.config.image2_alignClasses,{dimension:{requiredContent:"img[width,height]"},align:{requiredContent:"img"+(e?"("+e[0]+")":"{float}")},caption:{requiredContent:"figcaption"}}}function d(e){return e.data.hasCaption?e.element:e.parts.image}var h=new CKEDITOR.template('<figure class="{captionedClass}"><img alt="" src="" /><figcaption>{captionPlaceholder}</figcaption></figure>'),m={left:0,center:1,right:2},u=/^\s*(\d+\%)\s*$/i;CKEDITOR.plugins.add("image2",{lang:"af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,oc,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",requires:"widget,dialog",icons:"image",hidpi:!0,onLoad:function(){CKEDITOR.addCss('.cke_image_nocaption{line-height:0}.cke_editable.cke_image_sw, .cke_editable.cke_image_sw *{cursor:sw-resize !important}.cke_editable.cke_image_se, .cke_editable.cke_image_se *{cursor:se-resize !important}.cke_image_resizer{display:none;position:absolute;width:10px;height:10px;bottom:-5px;right:-5px;background:#000;outline:1px solid #fff;line-height:0;cursor:se-resize;}.cke_image_resizer_wrapper{position:relative;display:inline-block;line-height:0;}.cke_image_resizer.cke_image_resizer_left{right:auto;left:-5px;cursor:sw-resize;}.cke_widget_wrapper:hover .cke_image_resizer,.cke_image_resizer.cke_image_resizing{display:block}.cke_editable[contenteditable="false"] .cke_image_resizer{display:none;}.cke_widget_wrapper>a{display:inline-block}')},init:function(t){if(!t.plugins.detectConflict("image2",["easyimage"])){var i=t.config,a=t.lang.image2,n=e(t);i.filebrowserImage2BrowseUrl=i.filebrowserImageBrowseUrl,i.filebrowserImage2UploadUrl=i.filebrowserImageUploadUrl,n.pathName=a.pathName,n.editables.caption.pathName=a.pathNameCaption,t.widgets.add("image",n),t.ui.addButton&&t.ui.addButton("Image",{label:t.lang.common.image,command:"image",toolbar:"insert,10"}),t.contextMenu&&(t.addMenuGroup("image",10),t.addMenuItem("image",{label:a.menu,command:"image",group:"image"})),CKEDITOR.dialog.add("image2",this.path+"dialogs/image2.js")}},afterInit:function(e){var t,i={left:1,right:1,center:1,block:1},a=r(e);for(t in i)a(t);l(e)}}),CKEDITOR.plugins.image2={stateShifter:function(e){function t(e,t){var s={};return n?s.attributes={"class":n[1]}:s.styles={"text-align":"center"},s=a.createElement(e.activeEnterMode==CKEDITOR.ENTER_P?"p":"div",s),i(s,t),t.move(s),s}function i(t,i){if(i.getParent()){var a=e.createRange();a.moveToPosition(i,CKEDITOR.POSITION_BEFORE_START),i.remove(),r.insertElementIntoRange(t,a)}else t.replace(i)}var a=e.document,n=e.config.image2_alignClasses,s=e.config.image2_captionedClass,r=e.editable(),l=["hasCaption","align","link"],o={align:function(i,a,s){var r=i.element;i.changed.align?i.newData.hasCaption||("center"==s&&(i.deflate(),i.element=t(e,r)),i.changed.hasCaption||"center"!=a||"center"==s||(i.deflate(),a=r.findOne("a,img"),a.replace(r),i.element=a)):"center"==s&&i.changed.hasCaption&&!i.newData.hasCaption&&(i.deflate(),i.element=t(e,r)),!n&&r.is("figure")&&("center"==s?r.setStyle("display","inline-block"):r.removeStyle("display"))},hasCaption:function(t,n,r){t.changed.hasCaption&&(n=t.element.is({img:1,a:1})?t.element:t.element.findOne("a,img"),t.deflate(),r?(r=CKEDITOR.dom.element.createFromHtml(h.output({captionedClass:s,captionPlaceholder:e.lang.image2.captionPlaceholder}),a),i(r,t.element),n.replace(r.findOne("img")),t.element=r):(n.replace(t.element),t.element=n))},link:function(t,i,n){if(t.changed.link){var s,r=t.element.is("img")?t.element:t.element.findOne("img"),l=t.element.is("a")?t.element:t.element.findOne("a"),o=t.element.is("a")&&!n||t.element.is("img")&&n;o&&t.deflate(),n?(i||(s=a.createElement("a",{attributes:{href:t.newData.link.url}}),s.replace(r),r.move(s)),n=CKEDITOR.plugins.image2.getLinkAttributesGetter()(e,n),CKEDITOR.tools.isEmpty(n.set)||(s||l).setAttributes(n.set),n.removed.length&&(s||l).removeAttributes(n.removed)):(n=l.findOne("img"),n.replace(l),s=n),o&&(t.element=s)}}};return function(e){var t,i;for(e.changed={},i=0;i<l.length;i++)t=l[i],e.changed[t]=e.oldData?e.oldData[t]!==e.newData[t]:!1;for(i=0;i<l.length;i++)t=l[i],o[t](e,e.oldData?e.oldData[t]:null,e.newData[t]);e.inflate()}},checkHasNaturalRatio:function(e){var t=e.$;return e=this.getNatural(e),Math.round(t.clientWidth/e.width*e.height)==t.clientHeight||Math.round(t.clientHeight/e.height*e.width)==t.clientWidth},getNatural:function(e){if(e.$.naturalWidth)e={width:e.$.naturalWidth,height:e.$.naturalHeight};else{var t=new Image;t.src=e.getAttribute("src"),e={width:t.width,height:t.height}}return e},getLinkAttributesGetter:function(){return CKEDITOR.plugins.link.getLinkAttributes},getLinkAttributesParser:function(){return CKEDITOR.plugins.link.parseLinkAttributes}}}(),CKEDITOR.config.image2_captionedClass="image";