mirror of
https://github.com/documize/community.git
synced 2025-07-22 22:59:43 +02:00
1 line
No EOL
13 KiB
JavaScript
1 line
No EOL
13 KiB
JavaScript
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.util.Tools"),n={hasDimensions:function(e){return!1!==e.settings.image_dimensions},hasAdvTab:function(e){return!0===e.settings.image_advtab},getPrependUrl:function(e){return e.getParam("image_prepend_url","")},getClassList:function(e){return e.getParam("image_class_list")},hasDescription:function(e){return!1!==e.settings.image_description},hasImageTitle:function(e){return!0===e.settings.image_title},hasImageCaption:function(e){return!0===e.settings.image_caption},getImageList:function(e){return e.getParam("image_list",!1)},hasUploadUrl:function(e){return e.getParam("images_upload_url",!1)},hasUploadHandler:function(e){return e.getParam("images_upload_handler",!1)},getUploadUrl:function(e){return e.getParam("images_upload_url")},getUploadHandler:function(e){return e.getParam("images_upload_handler")},getUploadBasePath:function(e){return e.getParam("images_upload_base_path")},getUploadCredentials:function(e){return e.getParam("images_upload_credentials")}},a="undefined"!=typeof window?window:Function("return this;")(),i=function(e,t){for(var n=t!==undefined&&null!==t?t:a,i=0;i<e.length&&n!==undefined&&null!==n;++i)n=n[e[i]];return n},r=function(e,t){var n=e.split(".");return i(n,t)},o=function(e,t){var n=function(e,t){return r(e,t)}(e,t);if(n===undefined||null===n)throw e+" not available on this browser";return n},l=function(){return new(o("FileReader"))},s=tinymce.util.Tools.resolve("tinymce.util.Promise"),u=tinymce.util.Tools.resolve("tinymce.util.XHR"),c=function(e,t){return Math.max(parseInt(e,10),parseInt(t,10))},g={getImageSize:function(e,t){function n(e,n){a.parentNode&&a.parentNode.removeChild(a),t({width:e,height:n})}var a=document.createElement("img");a.onload=function(){n(c(a.width,a.clientWidth),c(a.height,a.clientHeight))},a.onerror=function(){n(0,0)};var i=a.style;i.visibility="hidden",i.position="fixed",i.bottom=i.left="0px",i.width=i.height="auto",document.body.appendChild(a),a.src=e},buildListItems:function(e,n,a){function i(e,a){return a=a||[],t.each(e,function(e){var t={text:e.text||e.title};e.menu?t.menu=i(e.menu):(t.value=e.value,n(t)),a.push(t)}),a}return i(e,a||[])},removePixelSuffix:function(e){return e&&(e=e.replace(/px$/,"")),e},addPixelSuffix:function(e){return e.length>0&&/^[0-9]+$/.test(e)&&(e+="px"),e},mergeMargins:function(e){if(e.margin){var t=e.margin.split(" ");switch(t.length){case 1:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[0],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[0];break;case 2:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[1];break;case 3:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[1];break;case 4:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[3]}delete e.margin}return e},createImageList:function(e,t){var a=n.getImageList(e);"string"==typeof a?u.send({url:a,success:function(e){t(JSON.parse(e))}}):"function"==typeof a?a(t):t(a)},waitLoadImage:function(e,t,a){function i(){a.onload=a.onerror=null,e.selection&&(e.selection.select(a),e.nodeChanged())}a.onload=function(){t.width||t.height||!n.hasDimensions(e)||e.dom.setAttribs(a,{width:a.clientWidth,height:a.clientHeight}),i()},a.onerror=i},blobToDataUri:function(e){return new s(function(t,n){var a=new l;a.onload=function(){t(a.result)},a.onerror=function(){n(l.error.message)},a.readAsDataURL(e)})}},d={makeTab:function(e,t){return{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox",onchange:function(e){return function(t){var a=e.dom,i=t.control.rootControl;if(n.hasAdvTab(e)){var r=i.toJSON(),o=a.parseStyle(r.style);i.find("#vspace").value(""),i.find("#hspace").value(""),((o=g.mergeMargins(o))["margin-top"]&&o["margin-bottom"]||o["margin-right"]&&o["margin-left"])&&(o["margin-top"]===o["margin-bottom"]?i.find("#vspace").value(g.removePixelSuffix(o["margin-top"])):i.find("#vspace").value(""),o["margin-right"]===o["margin-left"]?i.find("#hspace").value(g.removePixelSuffix(o["margin-right"])):i.find("#hspace").value("")),o["border-width"]&&i.find("#border").value(g.removePixelSuffix(o["border-width"])),i.find("#style").value(a.serializeStyle(a.parseStyle(a.serializeStyle(o))))}}}(e)},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:function(n){t(e,n.control.rootControl)}},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}}},m=function(e,t){e.state.set("oldVal",e.value()),t.state.set("oldVal",t.value())},f=function(e,t){var n=e.find("#width")[0],a=e.find("#height")[0],i=e.find("#constrain")[0];n&&a&&i&&t(n,a,i.checked())},p=function(e,t,n){var a=e.state.get("oldVal"),i=t.state.get("oldVal"),r=e.value(),o=t.value();n&&a&&i&&r&&o&&(r!==a?(o=Math.round(r/a*o),isNaN(o)||t.value(o)):(r=Math.round(o/i*r),isNaN(r)||e.value(r))),m(e,t)},h=function(e){f(e,p)},b={createUi:function(){var e=function(e){h(e.control.rootControl)};return{type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:5,onchange:e,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:5,onchange:e,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}},syncSize:function(e){f(e,m)},updateSize:h},v=function(e){e.meta=e.control.rootControl.toJSON()},y=function(e,a){var i=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:function(a){!function(e,a){var i,r,o,l=e.meta||{},s=e.control,u=s.rootControl,c=u.find("#image-list")[0];c&&c.value(a.convertURL(s.value(),"src")),t.each(l,function(e,t){u.find("#"+t).value(e)}),l.width||l.height||(i=a.convertURL(s.value(),"src"),r=n.getPrependUrl(a),o=new RegExp("^(?:[a-z]+:)?//","i"),r&&!o.test(i)&&i.substring(0,r.length)!==r&&(i=r+i),s.value(i),g.getImageSize(a.documentBaseURI.toAbsolute(s.value()),function(e){e.width&&e.height&&n.hasDimensions(a)&&(u.find("#width").value(e.width),u.find("#height").value(e.height),b.updateSize(u))}))}(a,e)},onbeforecall:v},a];return n.hasDescription(e)&&i.push({name:"alt",type:"textbox",label:"Image description"}),n.hasImageTitle(e)&&i.push({name:"title",type:"textbox",label:"Image Title"}),n.hasDimensions(e)&&i.push(b.createUi()),n.getClassList(e)&&i.push({name:"class",type:"listbox",label:"Class",values:g.buildListItems(n.getClassList(e),function(t){t.value&&(t.textStyle=function(){return e.formatter.getCssText({inline:"img",classes:[t.value]})})})}),n.hasImageCaption(e)&&i.push({name:"caption",type:"checkbox",label:"Caption"}),i},x={makeTab:function(e,t){return{title:"General",type:"form",items:y(e,t)}},getGeneralItems:y},w=function(){return o("URL")},S=function(e){return w().createObjectURL(e)},U=function(e){w().revokeObjectURL(e)},T=tinymce.util.Tools.resolve("tinymce.ui.Factory"),C=function(){},I=function(e){var n=function(t,n,a,i){var r,l;(r=new function(){return new(o("XMLHttpRequest"))}).open("POST",e.url),r.withCredentials=e.credentials,r.upload.onprogress=function(e){i(e.loaded/e.total*100)},r.onerror=function(){a("Image upload failed due to a XHR Transport error. Code: "+r.status)},r.onload=function(){var t;r.status<200||r.status>=300?a("HTTP Error: "+r.status):(t=JSON.parse(r.responseText))&&"string"==typeof t.location?n(function(e,t){return e?e.replace(/\/$/,"")+"/"+t.replace(/^\//,""):t}(e.basePath,t.location)):a("Invalid JSON: "+r.responseText)},(l=new FormData).append("file",t.blob(),t.filename()),r.send(l)};return e=t.extend({credentials:!1,handler:n},e),{upload:function(t){return!e.url&&function(e){return e===n}(e.handler)?s.reject("Upload url missing from the settings."):function(e,t){return new s(function(n,a){try{t(e,n,a,C)}catch(i){a(i.message)}})}(t,e.handler)}}},P=function(e){return function(t){var a=T.get("Throbber"),i=t.control.rootControl,r=new a(i.getEl()),o=t.control.value(),l=S(o),s=I({url:n.getUploadUrl(e),basePath:n.getUploadBasePath(e),credentials:n.getUploadCredentials(e),handler:n.getUploadHandler(e)}),u=function(){r.hide(),U(l)};return r.show(),g.blobToDataUri(o).then(function(t){var n=e.editorUpload.blobCache.create({blob:o,blobUri:l,name:o.name?o.name.replace(/\.[^\.]+$/,""):null,base64:t.split(",")[1]});return s.upload(n).then(function(e){var t=i.find("#src");return t.value(e),i.find("tabpanel")[0].activateTab(0),t.fire("change"),u(),e})})["catch"](function(t){e.windowManager.alert(t),u()})}},L=".jpg,.jpeg,.png,.gif",_={makeTab:function(e){return{title:"Upload",type:"form",layout:"flex",direction:"column",align:"stretch",padding:"20 20 20 20",items:[{type:"container",layout:"flex",direction:"column",align:"center",spacing:10,items:[{text:"Browse for an image",type:"browsebutton",accept:L,onchange:P(e)},{text:"OR",type:"label"}]},{text:"Drop an image here",type:"dropzone",accept:L,height:100,onchange:P(e)}]}}},N=function(e){function a(a){function r(){var n,a;b.updateSize(o),i(e,o),(c=t.extend(c,o.toJSON())).alt||(c.alt=""),c.title||(c.title=""),""===c.width&&(c.width=null),""===c.height&&(c.height=null),c.style||(c.style=null),c={src:c.src,alt:c.alt,title:c.title,width:c.width,height:c.height,style:c.style,caption:c.caption,"class":c["class"]},e.undoManager.transact(function(){if(c.src){if(""===c.title&&(c.title=null),l?m.setAttribs(l,c):(c.id="__mcenew",e.focus(),e.selection.setContent(m.createHTML("img",c)),l=m.get("__mcenew"),m.setAttrib(l,"id",null)),e.editorUpload.uploadImagesAuto(),!1===c.caption&&m.is(l.parentNode,"figure.image")&&(n=l.parentNode,m.insertAfter(l,n),m.remove(n)),!0!==c.caption)g.waitLoadImage(e,c,l);else if(!m.is(l.parentNode,"figure.image")){a=l,l=l.cloneNode(!0),(n=m.create("figure",{"class":"image"})).appendChild(l),n.appendChild(m.create("figcaption",{contentEditable:!0},"Caption")),n.contentEditable=!1;var t=m.getParent(a,function(t){return e.schema.getTextBlockElements()[t.nodeName]});t?m.split(t,a,n):m.replace(n,a),e.selection.select(n)}}else if(l){var i=m.is(l.parentNode,"figure.image")?l.parentNode:l;m.remove(i),e.focus(),e.nodeChanged(),m.isEmpty(e.getBody())&&(e.setContent(""),e.selection.setCursorLocation())}})}var o,l,s,u,c={},m=e.dom;if(l=e.selection.getNode(),(s=m.getParent(l,"figure.image"))&&(l=m.select("img",s)[0]),l&&("IMG"!==l.nodeName||l.getAttribute("data-mce-object")||l.getAttribute("data-mce-placeholder"))&&(l=null),l&&(c={src:m.getAttrib(l,"src"),alt:m.getAttrib(l,"alt"),title:m.getAttrib(l,"title"),"class":m.getAttrib(l,"class"),width:m.getAttrib(l,"width"),height:m.getAttrib(l,"height"),caption:!!s}),a&&(u={type:"listbox",label:"Image list",name:"image-list",values:g.buildListItems(a,function(t){t.value=e.convertURL(t.value||t.url,"src")},[{text:"None",value:""}]),value:c.src&&e.convertURL(c.src,"src"),onselect:function(e){var t=o.find("#alt");(!t.value()||e.lastControl&&t.value()===e.lastControl.text())&&t.value(e.control.text()),o.find("#src").value(e.control.value()).fire("change")},onPostRender:function(){u=this}}),n.hasAdvTab(e)||n.hasUploadUrl(e)||n.hasUploadHandler(e)){var f=[x.makeTab(e,u)];n.hasAdvTab(e)&&(l&&(l.style.marginLeft&&l.style.marginRight&&l.style.marginLeft===l.style.marginRight&&(c.hspace=g.removePixelSuffix(l.style.marginLeft)),l.style.marginTop&&l.style.marginBottom&&l.style.marginTop===l.style.marginBottom&&(c.vspace=g.removePixelSuffix(l.style.marginTop)),l.style.borderWidth&&(c.border=g.removePixelSuffix(l.style.borderWidth)),c.style=e.dom.serializeStyle(e.dom.parseStyle(e.dom.getAttrib(l,"style")))),f.push(d.makeTab(e,i))),(n.hasUploadUrl(e)||n.hasUploadHandler(e))&&f.push(_.makeTab(e)),o=e.windowManager.open({title:"Insert/edit image",data:c,bodyType:"tabpanel",body:f,onSubmit:r})}else o=e.windowManager.open({title:"Insert/edit image",data:c,body:x.getGeneralItems(e,u),onSubmit:r});b.syncSize(o)}var i=function(e,t){if(n.hasAdvTab(e)){var a=e.dom,i=t.toJSON(),r=a.parseStyle(i.style);r=g.mergeMargins(r),i.vspace&&(r["margin-top"]=r["margin-bottom"]=g.addPixelSuffix(i.vspace)),i.hspace&&(r["margin-left"]=r["margin-right"]=g.addPixelSuffix(i.hspace)),i.border&&(r["border-width"]=g.addPixelSuffix(i.border)),t.find("#style").value(a.serializeStyle(a.parseStyle(a.serializeStyle(r))))}};return{open:function(){g.createImageList(e,a)}}},A=function(e){e.addCommand("mceImage",N(e).open)},k=function(e){var t=e.attr("class");return t&&/\bimage\b/.test(t)},z=function(e){return function(n){for(var a,i=n.length,r=function(t){t.attr("contenteditable",e?"true":null)};i--;)a=n[i],k(a)&&(a.attr("contenteditable",e?"false":null),t.each(a.getAll("figcaption"),r))}},R=function(e){e.on("preInit",function(){e.parser.addNodeFilter("figure",z(!0)),e.serializer.addNodeFilter("figure",z(!1))})},H=function(e){e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:N(e).open,stateSelector:"img:not([data-mce-object],[data-mce-placeholder]),figure.image"}),e.addMenuItem("image",{icon:"image",text:"Image",onclick:N(e).open,context:"insert",prependToContext:!0})};e.add("image",function(e){R(e),H(e),A(e)})}(); |