Fixed a bug in the PaintWeb plugin for TinyMCE.
[moodle/mihaisucan.git] / lib / editor / tinymce / jscripts / tiny_mce / plugins / paintweb / editor_plugin.js
blob318ce4859cc65d8a6c8611d6179ae2081c077337
1 (function(){var j=null;var l=null;var S=null;var I=null;var X=null;var b=10000;var W=null;var L=30000;var G=null;var d=false;var O=null;var E=null;var T=null;var Y=false;var g=null;var B=false;var Q=null;if(!window.tinymce){alert("It looks like the PaintWeb plugin for TinyMCE cannot run.TinyMCE was not detected!");return }if(!window.XMLHttpRequest||!window.getComputedStyle||!document.createElement("canvas").getContext){return }var A,F,C;var M=(function(){var o=navigator.userAgent.toLowerCase();A=window.opera||/\b(opera|presto)\b/.test(o);F=!A&&/\b(applewebkit|webkit)\b/.test(o);C=!A&&!F&&/\bgecko\b/.test(o);if(F){return true}if(C){var n=/\brv\:([^;\)\s]+)[;\)\s]/.exec(o);if(n&&n[1]){n=n[1].replace(/[^\d]+$/,"").split(".");if(n[0]==1&&n[1]<=9&&n[2]<1){return true}}}return false})();function a(){if(window.PaintWeb){N();return }var n=E.getParam("paintweb_config"),o=n.tinymce.paintwebFolder+"paintweb.js";tinymce.ScriptLoader.load(o,N)}function N(){if(I){return }I=new PaintWeb();S=I.config;var o=E.getParam("paintweb_config"),n=E.getElement();pNode=O.parentNode,pwContainer=tinymce.DOM.create("div");pNode.insertBefore(pwContainer,n.nextSibling);if(!PaintWeb.baseFolder){PaintWeb.baseFolder=o.tinymce.paintwebFolder}o.imageLoad=T;o.guiPlaceholder=pwContainer;if(!o.lang){o.lang=E.getParam("language")}for(var p in o){S[p]=o[p]}S.tinymceEditor=E;I.init(J)}function J(n){if(l&&E){l.value=E.getLang("paintweb.overlayButton","Edit")}if(n.state!==PaintWeb.INIT_DONE){alert("PaintWeb initialization failed! "+n.errorMessage);I=null;T=null;E=null;return }Q=window.pwlib;I.events.add("imageSave",P);I.events.add("imageSaveResult",i);if(X){I.events.add("viewportSizeChange",k)}Z(n)}function c(){d=true;I.imageSave()}function f(){e()}function P(o){if(S.tinymce.imageSaveDataURL){o.preventDefault();var n=Y?"-":E.dom.getAttrib(T,"src");I.events.dispatch(new Q.appEvent.imageSaveResult(true,n,o.dataURL))}else{if(X){if(W){clearTimeout(W);W=null}X.firstChild.innerHTML=E.getLang("paintweb.statusSavingImage","Saving image...")}}}function i(n){if(!T){return }if(X){if(n.successful){X.firstChild.innerHTML=E.getLang("paintweb.statusImageSaved","Image save was succesful!")}else{X.firstChild.innerHTML=E.getLang("paintweb.statusImageSaveFailed","Image save failed!")}if(W){clearTimeout(W)}W=setTimeout(K,b)}if(n.successful){B=true;if(n.urlNew){g=n.urlNew}if(d){d=false;e()}}}function K(){if(!X){return }W=null;X.firstChild.innerHTML=E.getLang("paintweb.statusImageEditing","You are editing an image from TinyMCE.")}function k(n){tinymce.DOM.setStyle(X,"width",n.width)}function U(){if(!R(T)){T=null;return false}if(G){clearTimeout(G);G=null}var o=function(){if(l&&l.parentNode){l.value=E.getLang("paintweb.overlayLoading","Loading PaintWeb...")}if(I){I.imageLoad(T);Z()}else{a()}};var q=function(){tinymce.dom.Event.remove(T,"load",q);Y=false;o()};var p=E.dom.getAttrib(T,"src");if(p.substr(0,5)==="data:"){Y=true}else{Y=false}var n=Y&&M?E.getParam("paintweb_config"):null;if(n&&n.tinymce.imageDataURLfilter){tinymce.util.XHR.send({url:n.tinymce.imageDataURLfilter,content_type:"application/x-www-form-urlencoded",data:"url=-&dataURL="+encodeURIComponent(p),error:function(){if(window.console&&console.log){console.log("TinyMCE.PaintWeb: failed to preload image data URL!")}o()},success:function(r){if(!r){o();return }r=tinymce.util.JSON.parse(r);if(!r||!r.successful||!r.urlNew){o();return }g=T.src;tinymce.dom.Event.add(T,"load",q);E.dom.setAttrib(T,"src",r.urlNew)}})}else{o()}p=null;return true}function V(q,n,s,t,u){q=parseInt(q)||0;n=parseInt(n)||0;if(!q||!n){return }var o=tinymce.DOM.create("canvas",{width:q,height:n}),p=o.getContext("2d");if(s){p.fillStyle=s;p.fillRect(0,0,q,n)}E.execCommand("mceInsertContent",false,'<img id="paintwebNewImage">');var r=E.dom.get("paintwebNewImage");if(!r||r.id!=="paintwebNewImage"||r.nodeName.toLowerCase()!=="img"){return }if(t){E.dom.setAttrib(r,"alt",t)}if(u){E.dom.setAttrib(r,"title",u)}r.src=o.toDataURL();r.setAttribute("mce_src",r.src);r.removeAttribute("id");T=r;o=null;p=null;U()}function Z(o){var n=null;if(S.tinymce.syncViewportSize){n=tinymce.DOM.getRect(E.getContentAreaContainer())}tinymce.DOM.setStyle(O,"display","none");S.tinymceEditor=E;if(!o||o.type!=="appInit"){I.gui.show()}if(n&&n.w&&n.h){I.gui.resizeTo(n.w+"px",n.h+"px")}if(X){K();var p=S.guiPlaceholder;if(!X.parentNode){p.parentNode.insertBefore(X,p)}}}function e(){I.gui.hide();if(l&&E){l.value=E.getLang("paintweb.overlayButton","Edit")}if(X&&X.parentNode){O.parentNode.removeChild(X)}if(g){if(g.substr(0,5)!=="data:"){E.dom.setAttrib(T,"src",g)}else{T.src=g;if(T.hasAttribute("mce_src")){T.setAttribute("mce_src",g)}}g=null}else{if(!Y&&B){var o=E.dom.getAttrib(T,"src"),n=(new Date()).getMilliseconds()*Math.round(Math.random()*100);if(o.indexOf("?")===-1){o+="?"+n}else{if(/\?[0-9]+$/.test(o)){o=o.replace(/\?[0-9]+$/,"?"+n)}else{if(/&[0-9]+$/.test(o)){o=o.replace(/&[0-9]+$/,"&"+n)}else{o+="&"+n}}}E.dom.setAttrib(T,"src",o)}}O.style.display="";T=null;B=false;E.focus();if(!G){G=setTimeout(m,L)}}function m(){if(I){I.destroy();var n=S.guiPlaceholder.parentNode;n.removeChild(S.guiPlaceholder);I=null;S=null;G=null}}function h(){if(T){return }var p=this.selection.getNode(),o=p.nodeName.toLowerCase();if(o!=="img"&&l&&l.parentNode&&l._targetImage){p=l._targetImage;o=p.nodeName.toLowerCase()}E=this;O=this.getContainer();T=p;if(!U()&&o!=="img"){this.windowManager.open({file:j+"/newimage.html",width:350+parseInt(this.getLang("paintweb.dlg_delta_width",0)),height:200+parseInt(this.getLang("paintweb.dlg_delta_height",0)),inline:1},{plugin_url:j,newImageFn:V})}}function R(s){if(!s){return false}var o=s.src;if(s.nodeName.toLowerCase()!=="img"||!o){return false}var r=o.indexOf(":"),q=o.substr(0,r+1).toLowerCase();if(q==="data:"){return true}if(q!=="http:"&&q!=="https:"){return false}var p=o.replace(/^https?:\/\//i,"");r=p.indexOf("/");if(r>-1){p=p.substr(0,r)}if(p!==window.location.host){return false}return true}function D(o,t){if(!l||!o||!t){return }var r=5,s=5,q=null,p;if(t.parentNode.nodeName.toLowerCase()==="a"){p=t.parentNode.parentNode;q=t.parentNode.nextSibling}else{p=t.parentNode;q=t.nextSibling}l._targetImage=t;o.dom.setStyles(l,{top:(t.offsetTop+r)+"px",left:(t.offsetLeft+s)+"px"});l.value=o.getLang("paintweb.overlayButton","Edit");p.insertBefore(l,q)}function H(p){if(!l||!p||!p.getDoc){return }var n,o,r;if(l){if(l.parentNode){r=l.parentNode;r.removeChild(l)}l._targetImage=null}n=p.getDoc();if(!n||!n.getElementsByClassName){return }o=n.getElementsByClassName(l.className);for(var q=0;q<o.length;q++){r=o[q].parentNode;r.removeChild(o[q])}}tinymce.PluginManager.requireLangPack("paintweb");tinymce.create("tinymce.plugins.paintweb",{init:function(n,p){var q=this;j=p;n.addCommand("paintwebEdit",h,n);n.addButton("paintwebEdit",{title:"paintweb.toolbarButton",cmd:"paintwebEdit",image:j+"/img/paintweb2.gif"});if(A){n.onKeyUp.add(this.edNodeChange);n.onMouseUp.add(this.edNodeChange)}else{n.onNodeChange.add(this.edNodeChange)}var o=n.getParam("paintweb_config")||{};if(!o.tinymce){o.tinymce={}}if(o.tinymce.contextMenuItem&&n.plugins.contextmenu){n.plugins.contextmenu.onContextMenu.add(this.pluginContextMenu)}n.onSubmit.add(this.edSubmit);if(o.tinymce.overlayButton){n.onBeforeGetContent.add(H);n.onInit.add(function(t){H(t);t.onKeyDown.addToTop(q.overlayButtonEvent);t.onMouseDown.addToTop(q.overlayButtonEvent)});l=tinymce.DOM.create("input",{type:"button","class":"paintweb_tinymce_overlayButton",style:"position:absolute",value:n.getLang("paintweb.overlayButton","Edit")})}if(o.tinymce.dblclickHandler){n.onDblClick.add(this.edDblClick)}if(o.tinymce.pluginBar){X=tinymce.DOM.create("div",{"class":"paintweb_tinymce_status",style:"display:none"});var s=tinymce.DOM.create("input",{type:"button","class":"paintweb_tinymce_save",title:n.getLang("paintweb.imageSaveButtonTitle","Save the image and return to TinyMCE."),value:n.getLang("paintweb.imageSaveButton","Save")});s.addEventListener("click",c,false);var r=tinymce.DOM.create("input",{type:"button","class":"paintweb_tinymce_cancel",title:n.getLang("paintweb.cancelEditButtonTitle","Cancel image edits and return to TinyMCE."),value:n.getLang("paintweb.cancelEditButton","Cancel")});r.addEventListener("click",f,false);var u=tinymce.DOM.create("span");X.appendChild(u);X.appendChild(s);X.appendChild(r)}},edNodeChange:function(p){var o=p.controlManager,r=p.selection.getNode();if(!r||l&&l._targetImage&&r&&r.className===l.className){return }var q=!R(r);if(r.nodeName.toLowerCase()==="img"&&q){o.setDisabled("paintwebEdit",true);o.setActive("paintwebEdit",false)}else{o.setDisabled("paintwebEdit",false);o.setActive("paintwebEdit",!q)}if(!l){return }if(!q){D(p,r)}else{if(l._targetImage){l._targetImage=null}}},overlayButtonEvent:function(o,p){var q=p.type==="mousedown"?p.target:o.selection.getNode();if(!T&&p.type==="mousedown"&&l&&q&&q.className===l.className&&l._targetImage){E=o;O=o.getContainer();T=l._targetImage;U()}else{if(q&&q.nodeName.toLowerCase()!=="img"){H(o)}}},edDblClick:function(n,o){if(!T&&R(o.target)){E=n;O=n.getContainer();T=o.target;o.target.focus();U()}},edSubmit:function(n,o){if(!T||!I){return }if(!I.image.modified){e();n.save();return }o.preventDefault();if(X){var p=n.getLang("paintweb.submitUnsaved","The image is not saved! You cannot submit the form. Please save the image changes, or cancel image editing, then try again.");X.firstChild.innerHTML=p;if(W){clearTimeout(W)}W=setTimeout(K,b);X.tabIndex=5;X.focus();X.tabIndex=-1}if(typeof S.tinymce.onSubmitUnsaved==="function"){S.tinymce.onSubmitUnsaved(o,n,I)}},pluginContextMenu:function(o,p,n){if(R(n)){p.add({title:"paintweb.contextMenuEdit",cmd:"paintwebEdit",image:j+"/img/paintweb2.gif"})}},getInfo:function(){return{longname:"PaintWeb - online painting application",author:"Mihai Şucan",authorurl:"http://www.robodesign.ro/mihai",infourl:"http://code.google.com/p/paintweb",version:"0.9"}}});tinymce.PluginManager.add("paintweb",tinymce.plugins.paintweb)})();