plugin.min.js 5.0 KB

1
  1. tinymce.PluginManager.add("image",function(e){function t(e,t){var i=document.createElement("img");function n(e,n){if(i.parentNode){i.parentNode.removeChild(i)}t({width:e,height:n})}i.onload=function(){n(i.clientWidth,i.clientHeight)};i.onerror=function(){n()};var a=i.style;a.visibility="hidden";a.position="fixed";a.bottom=a.left=0;a.width=a.height="auto";document.body.appendChild(i);i.src=e}function i(t){tinymce.each(t,function(t){t.textStyle=function(){return e.formatter.getCssText({inline:"img",classes:[t.value]})}});return t}function n(t){return function(){var i=e.settings.image_list;if(typeof i=="string"){tinymce.util.XHR.send({url:i,success:function(e){t(tinymce.util.JSON.parse(e))}})}else{t(i)}}}function a(n){var a,l={},o=e.dom,s=e.selection.getNode();var r,c,d,u;function g(t,i,n){var a,o=[];tinymce.each(e.settings[t]||n,function(e){var t={text:e.text||e.title,value:e.value};o.push(t);if(l[i]===e.value||!a&&e.selected){a=t}});if(a&&!l[i]){l[i]=a.value;a.selected=true}return o}function h(){var t=[{text:"None",value:""}];tinymce.each(n,function(i){t.push({text:i.text||i.title,value:e.convertURL(i.value||i.url,"src"),menu:i.menu})});return t}function m(){var e,t,i,n;e=a.find("#width")[0];t=a.find("#height")[0];i=e.value();n=t.value();if(a.find("#constrain")[0].checked()&&r&&c&&i&&n){if(r!=i){n=Math.round(i/r*n);t.value(n)}else{i=Math.round(n/c*i);e.value(i)}}r=i;c=n}function f(){function t(t){function i(){t.onload=t.onerror=null;e.selection.select(t);e.nodeChanged()}t.onload=function(){if(!l.width&&!l.height){o.setAttribs(t,{width:t.clientWidth,height:t.clientHeight})}i()};t.onerror=i}b();m();l=tinymce.extend(l,a.toJSON());if(!l.alt){l.alt=""}if(l.width===""){l.width=null}if(l.height===""){l.height=null}if(l.style===""){l.style=null}l={src:l.src,alt:l.alt,width:l.width,height:l.height,style:l.style,class:l["class"]};if(!l["class"]){delete l["class"]}e.undoManager.transact(function(){if(!l.src){if(s){o.remove(s);e.focus();e.nodeChanged()}return}if(!s){l.id="__mcenew";e.focus();e.selection.setContent(o.createHTML("img",l));s=o.get("__mcenew");o.setAttrib(s,"id",null)}else{o.setAttribs(s,l)}t(s)})}function p(e){if(e){e=e.replace(/px$/,"")}return e}function y(){if(d){d.value(e.convertURL(this.value(),"src"))}t(this.value(),function(e){if(e.width&&e.height){r=e.width;c=e.height;a.find("#width").value(r);a.find("#height").value(c)}})}r=o.getAttrib(s,"width");c=o.getAttrib(s,"height");if(s.nodeName=="IMG"&&!s.getAttribute("data-mce-object")&&!s.getAttribute("data-mce-placeholder")){l={src:o.getAttrib(s,"src"),alt:o.getAttrib(s,"alt"),class:o.getAttrib(s,"class"),width:r,height:c}}else{s=null}if(n){d={type:"listbox",label:"Image list",values:h(),value:l.src&&e.convertURL(l.src,"src"),onselect:function(e){var t=a.find("#alt");if(!t.value()||e.lastControl&&t.value()==e.lastControl.text()){t.value(e.control.text())}a.find("#src").value(e.control.value())},onPostRender:function(){d=this}}}if(e.settings.image_class_list){u={name:"class",type:"listbox",label:"Class",values:i(g("image_class_list","class"))}}var v=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:true,onchange:y},d];if(e.settings.image_description!==false){v.push({name:"alt",type:"textbox",label:"Image description"})}if(e.settings.image_dimensions!==false){v.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:m,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:m,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:true,text:"Constrain proportions"}]})}v.push(u);function b(){function t(e){if(e.length>0&&/^[0-9]+$/.test(e)){e+="px"}return e}if(!e.settings.image_advtab){return}var i=a.toJSON();var n=o.parseStyle(i.style);delete n.margin;n["margin-top"]=n["margin-bottom"]=t(i.vspace);n["margin-left"]=n["margin-right"]=t(i.hspace);n["border-width"]=t(i.border);a.find("#style").value(o.serializeStyle(o.parseStyle(o.serializeStyle(n))))}if(e.settings.image_advtab){if(s){l.hspace=p(s.style.marginLeft||s.style.marginRight);l.vspace=p(s.style.marginTop||s.style.marginBottom);l.border=p(s.style.borderWidth);l.style=e.dom.serializeStyle(e.dom.parseStyle(e.dom.getAttrib(s,"style")))}a=e.windowManager.open({title:"Insert/edit image",data:l,bodyType:"tabpanel",body:[{title:"General",type:"form",items:v},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox"},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:b},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:f})}else{a=e.windowManager.open({title:"Insert/edit image",data:l,body:v,onSubmit:f})}}e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:n(a),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"});e.addMenuItem("image",{icon:"image",text:"Insert image",onclick:n(a),context:"insert",prependToContext:true})});