Attempt to implement image save using data URLs.
[moodle/mihaisucan.git] / lib / editor / tinymce / jscripts / tiny_mce / plugins / paintweb / editor_plugin.js
blob1ee6ad99ef44e7d15ae129c5b2f95dbd3bc1f313
1 (function(){var C=null,U=null,S=null,D=null,O=5000,V=null,X=30000,K=null,T=false,a=null,Z=null,L=null,G=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 }function b(){if(window.PaintWeb){Q();return }var c=Z.getParam("paintweb_config"),d=c.tinymce.paintwebFolder+"paintweb.js";tinymce.ScriptLoader.load(d,Q)}function Q(){if(S){return }S=new PaintWeb();U=S.config;var d=Z.getParam("paintweb_config"),c=Z.getElement();pNode=a.parentNode,pwContainer=document.createElement("div");pNode.insertBefore(pwContainer,c.nextSibling);PaintWeb.baseFolder=d.tinymce.paintwebFolder;d.imageLoad=G;d.guiPlaceholder=pwContainer;if(!d.lang){d.lang=Z.getParam("language")}for(var e in d){U[e]=d[e]}S.init(P)}function P(c){if(C&&Z){C.title=Z.getLang("paintweb.overlayButton","Edit");C.replaceChild(document.createTextNode(C.title),C.firstChild)}if(c.state!==PaintWeb.INIT_DONE){alert("PaintWeb initialization failed! "+c.errorMessage);S=null;return }S.events.add("imageSave",J);S.events.add("imageSaveResult",M);N()}function H(c){c.preventDefault();T=true;S.imageSave()}function W(c){c.preventDefault();A()}function J(d){if(U.tinymce.imageSaveDataURL){d.preventDefault();var c=L==="dataURL"?"-":Z.dom.getAttrib(G,"src");S.events.dispatch(new pwlib.appEvent.imageSaveResult(true,c,d.dataURL))}else{if(D&&Z&&!V){if(L==="dataURL"){str=Z.getLang("paintweb.statusSavingDataURL","Saving image data URL...")}else{str=Z.getLang("paintweb.statusSavingImage","Saving image {file}...").replace("{file}","<strong>"+L+"</strong>")}D.firstChild.innerHTML=str}}}function M(c){if(!G){return }if(D){if(c.successful){D.firstChild.innerHTML=Z.getLang("paintweb.statusImageSaved","Image save was succesful!")}else{D.firstChild.innerHTML=Z.getLang("paintweb.statusImageSaveFailed","Image save failed!")}V=setTimeout(F,O)}if(c.successful){if(c.urlNew){Z.dom.setAttrib(G,"src",c.urlNew)}if(T){T=false;A()}}}function F(){if(!D||!G||!L){return }V=null;var c="";if(L==="dataURL"){c=Z.getLang("paintweb.statusEditingDataURL")}else{c=Z.getLang("paintweb.statusImageEditing","You are editing {file}.").replace("{file}","<strong>"+L+"</strong>")}D.firstChild.innerHTML=c}function E(){if(!I(G)){G=null;L=null;return }if(K){clearTimeout(K);K=null}L=Z.dom.getAttrib(G,"src");if(L.substr(0,5)==="data:"){L="dataURL"}else{L=L.substr(L.lastIndexOf("/")+1)}if(C&&C.parentNode&&Z){C.title=Z.getLang("paintweb.overlayLoading","Loading PaintWeb...");C.replaceChild(document.createTextNode(C.title),C.firstChild)}if(S){S.imageLoad(G);N()}else{b()}}function N(){S.gui.show();a.style.display="none";if(!D){return }F();var c=U.guiPlaceholder;if(!D.parentNode){c.parentNode.insertBefore(D,c)}}function A(){S.gui.hide();if(C&&Z){C.title=Z.getLang("paintweb.overlayButton","Edit");C.replaceChild(document.createTextNode(C.title),C.firstChild)}if(D&&D.parentNode){a.parentNode.removeChild(D)}a.style.display="";G=null;L=null;Z.focus();if(!K){K=setTimeout(B,X)}}function B(){if(S){S.destroy();var c=U.guiPlaceholder.parentNode;c.removeChild(U.guiPlaceholder);S=null;U=null;K=null}}function Y(){if(G){return }Z=this;a=this.getContainer();G=this.selection.getNode();E()}function I(g){if(!g){return false}var c=g.src;if(g.nodeName.toLowerCase()!=="img"||!c){return false}var f=c.indexOf(":"),e=c.substr(0,f+1).toLowerCase();if(e==="data:"){return true}if(e!=="http:"&&e!=="https:"){return false}var d=c.replace(/^https?:\/\//i,"");f=d.indexOf("/");if(f>-1){d=d.substr(0,f)}if(d!==window.location.host){return false}return true}function R(d){if(!d||!d.getDoc){return }var g=d.getDoc();if(!g||!g.getElementsByClassName){return }var c=g.getElementsByClassName(C.className),f;for(var e=0;e<c.length;e++){f=c[e].parentNode;f.removeChild(c[e])}}tinymce.PluginManager.requireLangPack("paintweb");tinymce.create("tinymce.plugins.paintweb",{init:function(c,e){c.addCommand("paintwebEdit",Y,c);c.addButton("paintwebEdit",{title:"paintweb.toolbarButton",cmd:"paintwebEdit",image:e+"/img/paintweb.gif"});c.onNodeChange.add(this.edNodeChange);var d=c.getParam("paintweb_config")||{};if(!d.tinymce){d.tinymce={}}if(d.tinymce.contextMenuItem&&c.plugins.contextmenu){c.plugins.contextmenu.onContextMenu.add(this.pluginContextMenu)}if(d.tinymce.overlayButton){c.onClick.add(this.edClick);c.onPreProcess.add(this.edPreProcess);c.onBeforeGetContent.add(this.edPreProcess);c.onRemove.add(this.edPreProcess);c.onInit.add(R);C=document.createElement("a");overlayStyle=C.style;C.className="paintwebOverlayButton";C.title=c.getLang("paintweb.overlayButton","Edit");C.appendChild(document.createTextNode(C.title));overlayStyle.position="absolute";overlayStyle.background="#fff";overlayStyle.padding="4px 6px";overlayStyle.border="1px solid #000";overlayStyle.textDecoration="none";overlayStyle.color="#000"}if(d.tinymce.dblclickHandler){c.onDblClick.add(this.edDblClick)}if(d.tinymce.pluginBar){D=document.createElement("div");var g=document.createElement("a"),f=document.createElement("a"),h=document.createElement("span");g.className="paintweb_tinymce_save";g.href="#";g.title=c.getLang("paintweb.imageSaveButtonTitle","Save the image and return to TinyMCE.");g.appendChild(document.createTextNode(c.getLang("paintweb.imageSaveButton","Save")));g.addEventListener("click",H,false);f.className="paintweb_tinymce_cancel";f.href="#";f.title=c.getLang("paintweb.cancelEditButtonTitle","Cancel image edits and return to TinyMCE.");f.appendChild(document.createTextNode(c.getLang("paintweb.cancelEditButton","Cancel")));f.addEventListener("click",W,false);D.className="paintweb_tinymce_status";D.style.display="none";D.appendChild(h);D.appendChild(g);D.appendChild(f)}},edPreProcess:function(c){if(C&&C.parentNode){C._targetImage=null;pNode=C.parentNode;pNode.removeChild(C)}R(c)},edNodeChange:function(d,c,g){if(!G&&C&&g&&g.className===C.className&&g._targetImage===g.previousSibling){return }var f=!I(g),e=null;c.setDisabled("paintwebEdit",f);if(!C){return }if(C.parentNode){C._targetImage=null;e=C.parentNode;e.removeChild(C)}if(g.nextSibling&&g.nextSibling.className===C.className){e=g.parentNode;e.removeChild(g.nextSibling)}if(g.className===C.className){e=g.parentNode;e.removeChild(g)}if(!f){C._targetImage=g;C.style.top=(g.offsetTop+5)+"px";C.style.left=(g.offsetLeft+5)+"px";C.title=d.getLang("paintweb.overlayButton","Edit");C.replaceChild(document.createTextNode(C.title),C.firstChild);e=g.parentNode;e.insertBefore(C,g.nextSibling)}else{if(C._targetImage){C._targetImage=null}}},edClick:function(c,d){if(!G&&C&&d.target&&d.target.className===C.className&&C._targetImage){Z=c;a=c.getContainer();G=C._targetImage;E()}},edDblClick:function(c,d){if(!G&&I(d.target)){Z=c;a=c.getContainer();G=d.target;d.target.focus();E()}},pluginContextMenu:function(d,e,c){if(I(c)){e.add({title:"paintweb.contextMenuEdit",cmd:"paintwebEdit"})}},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)})();