From 151f8da5c399a26a13356da358aaa4bc653048a9 Mon Sep 17 00:00:00 2001 From: Gabriel Pedro Date: Mon, 2 May 2016 03:02:18 -0400 Subject: [PATCH] resolves #228 updating nicedit for using imgur api v3 and refactoring youtubeButton --- engine/js/nicedit.js | 77 ++++++++++++++------------------------------ 1 file changed, 25 insertions(+), 52 deletions(-) diff --git a/engine/js/nicedit.js b/engine/js/nicedit.js index 1421607..27797a3 100644 --- a/engine/js/nicedit.js +++ b/engine/js/nicedit.js @@ -29,9 +29,9 @@ var nicEditorConfig = bkClass.extend({ 'hr' : {name : __('Horizontal Rule'), command : 'insertHorizontalRule', noActive : true} }, iconsPath : 'http://js.nicedit.com/nicEditIcons-latest.gif', - buttonList : ['save','bold','italic','underline','left','center','right','justify','ol','ul','fontSize','fontFamily','fontFormat','indent','outdent','image','upload','link','unlink','forecolor','bgcolor','youtube'], - iconList : {"xhtml":1,"bgcolor":2,"forecolor":3,"bold":4,"center":5,"hr":6,"indent":7,"italic":8,"justify":9,"left":10,"ol":11,"outdent":12,"removeformat":13,"right":14,"save":25,"strikethrough":16,"subscript":17,"superscript":18,"ul":19,"underline":20,"image":21,"link":22,"unlink":23,"close":24,"arrow":26,"upload":27, "youtube": 27} - + buttonList : ['save','bold','italic','underline','left','center','right','justify','ol','ul','fontSize','fontFamily','fontFormat','indent','outdent','image','upload','link','unlink','forecolor','bgcolor', 'youtube'], + iconList : {"xhtml":1,"bgcolor":2,"forecolor":3,"bold":4,"center":5,"hr":6,"indent":7,"italic":8,"justify":9,"left":10,"ol":11,"outdent":12,"removeformat":13,"right":14,"save":25,"strikethrough":16,"subscript":17,"superscript":18,"ul":19,"underline":20,"image":21,"link":22,"unlink":23,"close":24,"arrow":26,"upload":27,"youtube":27} + }); ; var nicEditors={nicPlugins:[],editors:[],registerPlugin:function(B,A){this.nicPlugins.push({p:B,o:A})},allTextAreas:function(C){var A=document.getElementsByTagName("textarea");for(var B=0;B'+this.sel[itm]+"")}}});var nicEditorFontFamilySelect=nicEditorSelect.extend({sel:{arial:"Arial","comic sans ms":"Comic Sans","courier new":"Courier New",georgia:"Georgia",helvetica:"Helvetica",impact:"Impact","times new roman":"Times","trebuchet ms":"Trebuchet",verdana:"Verdana"},init:function(){this.setDisplay("Font Family...");for(itm in this.sel){this.add(itm,''+this.sel[itm]+"")}}});var nicEditorFontFormatSelect=nicEditorSelect.extend({sel:{p:"Paragraph",pre:"Pre",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1"},init:function(){this.setDisplay("Font Format...");for(itm in this.sel){var A=itm.toUpperCase();this.add("<"+A+">","<"+itm+' style="padding: 0px; margin: 0px;">'+this.sel[itm]+"")}}});nicEditors.registerPlugin(nicPlugin,nicSelectOptions); -var nicButtonTips=bkClass.extend({construct:function(A){this.ne=A;A.addEvent("buttonOver",this.show.closure(this)).addEvent("buttonOut",this.hide.closure(this))},show:function(A){this.timer=setTimeout(this.create.closure(this,A),400)},create:function(A){this.timer=null;if(!this.pane){this.pane=new nicEditorPane(A.button,this.ne,{fontSize:"12px",marginTop:"5px"});this.pane.setContent(A.options.name)}},hide:function(A){if(this.timer){clearTimeout(this.timer)}if(this.pane){this.pane=this.pane.remove()}}});nicEditors.registerPlugin(nicButtonTips); - -var nicEditorAdvancedButton=nicEditorButton.extend({init:function(){this.ne.addEvent("selected",this.removePane.closure(this)).addEvent("blur",this.removePane.closure(this))},mouseClick:function(){if(!this.isDisabled){if(this.pane&&this.pane.pane){this.removePane()}else{this.pane=new nicEditorPane(this.contain,this.ne,{width:(this.width||"270px"),backgroundColor:"#fff"},this);this.addPane();this.ne.selectedInstance.saveRng()}}},addForm:function(C,G){this.form=new bkElement("form").addEvent("submit",this.submit.closureListener(this));this.pane.append(this.form);this.inputs={};for(itm in C){var D=C[itm];var F="";if(G){F=G.getAttribute(itm)}if(!F){F=D.value||""}var A=C[itm].type;if(A=="title"){new bkElement("div").setContent(D.txt).setStyle({fontSize:"14px",fontWeight:"bold",padding:"0px",margin:"2px 0"}).appendTo(this.form)}else{var B=new bkElement("div").setStyle({overflow:"hidden",clear:"both"}).appendTo(this.form);if(D.txt){new bkElement("label").setAttributes({"for":itm}).setContent(D.txt).setStyle({margin:"2px 4px",fontSize:"13px",width:"50px",lineHeight:"20px",textAlign:"right","float":"left"}).appendTo(B)}switch(A){case"text":this.inputs[itm]=new bkElement("input").setAttributes({id:itm,value:F,type:"text"}).setStyle({margin:"2px 0",fontSize:"13px","float":"left",height:"20px",border:"1px solid #ccc",overflow:"hidden"}).setStyle(D.style).appendTo(B);break;case"select":this.inputs[itm]=new bkElement("select").setAttributes({id:itm}).setStyle({border:"1px solid #ccc","float":"left",margin:"2px 0"}).appendTo(B);for(opt in D.options){var E=new bkElement("option").setAttributes({value:opt,selected:(opt==F)?"selected":""}).setContent(D.options[opt]).appendTo(this.inputs[itm])}break;case"content":this.inputs[itm]=new bkElement("textarea").setAttributes({id:itm}).setStyle({border:"1px solid #ccc","float":"left"}).setStyle(D.style).appendTo(B);this.inputs[itm].value=F}}}new bkElement("input").setAttributes({type:"submit"}).setStyle({backgroundColor:"#efefef",border:"1px solid #ccc",margin:"3px 0","float":"left",clear:"both"}).appendTo(this.form);this.form.onsubmit=bkLib.cancelEvent},submit:function(){},findElm:function(B,A,E){var D=this.ne.selectedInstance.getElm().getElementsByTagName(B);for(var C=0;C"}if(O==""&&Q=="span"){A=false}if(A){G+="<"+Q;if(Q!="br"){G+=O}}}if(!N&&!bkLib.inArray(this.noShort,M)){if(A){G+=" />"}}else{if(A){G+=">"}for(var F=0;F"}for(var F=0;F"}break;case 3:G+=C.nodeValue;break}return G}});nicEditors.registerPlugin(nicXHTML); +var nicBBCode=bkClass.extend({construct:function(A){this.ne=A;if(this.ne.options.bbCode){A.addEvent("get",this.bbGet.closure(this));A.addEvent("set",this.bbSet.closure(this));var B=this.ne.loadedPlugins;for(itm in B){if(B[itm].toXHTML){this.xhtml=B[itm]}}}},bbGet:function(A){var B=this.xhtml.toXHTML(A.getElm());A.content=this.toBBCode(B)},bbSet:function(A){A.content=this.fromBBCode(A.content)},toBBCode:function(B){function A(D,C){B=B.replace(D,C)}A(/\n/gi,"");A(/(.*?)<\/strong>/gi,"[b]$1[/b]");A(/(.*?)<\/em>/gi,"[i]$1[/i]");A(/(.*?)<\/span>/gi,"[u]$1[/u]");A(/
    (.*?)<\/ul>/gi,"[list]$1[/list]");A(/
  • (.*?)<\/li>/gi,"[*]$1[]");A(/
      (.*?)<\/ol>/gi,"[list=1]$1[/list]");A(//gi,"[img]$1[/img]");A(/(.*?)<\/a>/gi,"[url=$1]$2[/url]");A(//gi,"\n");A(/<.*?>.*?<\/.*?>/gi,"");return B},fromBBCode:function(A){function B(D,C){A=A.replace(D,C)}B(/\[b\](.*?)\[\/b\]/gi,"$1");B(/\[i\](.*?)\[\/i\]/gi,"$1");B(/\[u\](.*?)\[\/u\]/gi,'$1');B(/\[list\](.*?)\[\/list\]/gi,"
        $1
      ");B(/\[list=1\](.*?)\[\/list\]/gi,"
        $1
      ");B(/\[\*\](.*?)\[\/\*\]/gi,"
    1. $1
    2. ");B(/\[img\](.*?)\[\/img\]/gi,'');B(/\[url=(.*?)\](.*?)\[\/url\]/gi,'$2');B(/\n/gi,"
      ");return A}});nicEditors.registerPlugin(nicBBCode); + +nicEditor=nicEditor.extend({floatingPanel:function(){this.floating=new bkElement("DIV").setStyle({position:"absolute",top:"-1000px"}).appendTo(document.body);this.addEvent("focus",this.reposition.closure(this)).addEvent("blur",this.hide.closure(this));this.setPanel(this.floating)},reposition:function(){var B=this.selectedInstance.e;this.floating.setStyle({width:(parseInt(B.getStyle("width"))||B.clientWidth)+"px"});var A=B.offsetTop-this.floating.offsetHeight;if(A<0){A=B.offsetTop+B.offsetHeight}this.floating.setStyle({top:A+"px",left:B.offsetLeft+"px",display:"block"})},hide:function(){this.floating.setStyle({top:"-1000px"})}}); + + var nicCodeOptions = { buttons : { 'xhtml' : {name : 'Edit HTML', type : 'nicCodeButton'} } + }; var nicCodeButton=nicEditorAdvancedButton.extend({width:"350px",addPane:function(){this.addForm({"":{type:"title",txt:"Edit HTML"},code:{type:"content",value:this.ne.selectedInstance.getContent(),style:{width:"340px",height:"200px"}}})},submit:function(B){var A=this.inputs.code.value;this.ne.selectedInstance.setContent(A);this.removePane()}});nicEditors.registerPlugin(nicPlugin,nicCodeOptions); -var nicBBCode=bkClass.extend({construct:function(A){this.ne=A;if(this.ne.options.bbCode){A.addEvent("get",this.bbGet.closure(this));A.addEvent("set",this.bbSet.closure(this));var B=this.ne.loadedPlugins;for(itm in B){if(B[itm].toXHTML){this.xhtml=B[itm]}}}},bbGet:function(A){var B=this.xhtml.toXHTML(A.getElm());A.content=this.toBBCode(B)},bbSet:function(A){A.content=this.fromBBCode(A.content)},toBBCode:function(B){function A(D,C){B=B.replace(D,C)}A(/\n/gi,"");A(/(.*?)<\/strong>/gi,"[b]$1[/b]");A(/(.*?)<\/em>/gi,"[i]$1[/i]");A(/(.*?)<\/span>/gi,"[u]$1[/u]");A(/
        (.*?)<\/ul>/gi,"[list]$1[/list]");A(/
      • (.*?)<\/li>/gi,"[*]$1[]");A(/
          (.*?)<\/ol>/gi,"[list=1]$1[/list]");A(//gi,"[img]$1[/img]");A(/(.*?)<\/a>/gi,"[url=$1]$2[/url]");A(//gi,"\n");A(/<.*?>.*?<\/.*?>/gi,"");return B},fromBBCode:function(A){function B(D,C){A=A.replace(D,C)}B(/\[b\](.*?)\[\/b\]/gi,"$1");B(/\[i\](.*?)\[\/i\]/gi,"$1");B(/\[u\](.*?)\[\/u\]/gi,'$1');B(/\[list\](.*?)\[\/list\]/gi,"
            $1
          ");B(/\[list=1\](.*?)\[\/list\]/gi,"
            $1
          ");B(/\[\*\](.*?)\[\/\*\]/gi,"
        1. $1
        2. ");B(/\[img\](.*?)\[\/img\]/gi,'');B(/\[url=(.*?)\](.*?)\[\/url\]/gi,'$2');B(/\n/gi,"
          ");return A}});nicEditors.registerPlugin(nicBBCode); - - -var nicUploadOptions = { - buttons : { - 'upload' : {name : 'Upload Image', type : 'nicUploadButton'}, - - } - -}; - -var nicUploadButton=nicEditorAdvancedButton.extend({nicURI:"http://api.imgur.com/2/upload.json",errorText:"Failed to upload image",addPane:function(){if(typeof window.FormData==="undefined"){return this.onError("Image uploads are not supported in this browser, use Chrome, Firefox, or Safari instead.")}this.im=this.ne.selectedInstance.selElm().parentTag("IMG");var A=new bkElement("div").setStyle({padding:"10px"}).appendTo(this.pane.pane);new bkElement("div").setStyle({fontSize:"14px",fontWeight:"bold",paddingBottom:"5px"}).setContent("Insert an Image").appendTo(A);this.fileInput=new bkElement("input").setAttributes({type:"file"}).appendTo(A);this.progress=new bkElement("progress").setStyle({width:"100%",display:"none"}).setAttributes("max",100).appendTo(A);this.fileInput.onchange=this.uploadFile.closure(this)},onError:function(A){this.removePane();alert(A||"Failed to upload image")},uploadFile:function(){var B=this.fileInput.files[0];if(!B||!B.type.match(/image.*/)){this.onError("Only image files can be uploaded");return }this.fileInput.setStyle({display:"none"});this.setProgress(0);var A=new FormData();A.append("image",B);A.append("key","b7ea18a4ecbda8e92203fa4968d10660");var C=new XMLHttpRequest();C.open("POST",this.ne.options.uploadURI||this.nicURI);C.onload=function(){try{var D=JSON.parse(C.responseText)}catch(E){return this.onError()}this.onUploaded(D.upload)}.closure(this);C.onerror=this.onError.closure(this);C.upload.onprogress=function(D){this.setProgress(D.loaded/D.total)}.closure(this);C.send(A)},setProgress:function(A){this.progress.setStyle({display:"block"});if(A<0.98){this.progress.value=A}else{this.progress.removeAttribute("value")}},onUploaded:function(B){this.removePane();var D=B.links.original;if(!this.im){this.ne.selectedInstance.restoreRng();var C="javascript:nicImTemp();";this.ne.nicCommand("insertImage",D);this.im=this.findElm("IMG","src",D)}var A=parseInt(this.ne.selectedInstance.elm.getStyle("width"));if(this.im){this.im.setAttributes({src:D,width:(A&&B.image.width)?Math.min(A,B.image.width):""})}}});nicEditors.registerPlugin(nicPlugin,nicUploadOptions); - var nicYouTubeOptions = { buttons : { 'youtube': {name : 'YouTube Link', type : 'nicYouTubeButton'} } }; - -var nicYouTubeButton = nicEditorAdvancedButton.extend({ - - width: '350px', - - addPane: function () { - this.addForm({ - '': { type: 'title', txt: 'YouTube Url' }, - 'youTubeUrl': { type: 'text', txt: 'URL', value: 'http://', style: { width: '150px'} }, - 'height': { type: 'text', txt: 'Height', value: '560', style: { width: '150px'} }, - 'width': { type: 'text', txt: 'Width', value: '315', style: { width: '150px'} } - }); - }, - - submit: function (e) { - var code = this.inputs['youTubeUrl'].value; - var width = this.inputs['height'].value; - var height = this.inputs['width'].value; - - if (code.indexOf('watch?v=') > 0) { - code = code.replace('watch?v=','embed/'); - } - - var youTubeCode = ''; - - this.ne.selectedInstance.setContent(this.ne.selectedInstance.getContent() + youTubeCode); - this.removePane(); - } -}); - -nicEditors.registerPlugin(nicPlugin,nicYouTubeOptions); \ No newline at end of file +var nicYouTubeButton=nicEditorAdvancedButton.extend({width:"350px",addPane:function(){this.addForm({"":{type:"title",txt:"YouTube Url"},youTubeUrl:{type:"text",txt:"URL",value:"http://",style:{width:"150px"}},height:{type:"text",txt:"Height",value:"400",style:{width:"150px"}},width:{type:"text",txt:"Width",value:"400",style:{width:"150px"}}})},submit:function(t){var e=this.inputs.youTubeUrl.value,i=this.inputs.width.value,n=this.inputs.height.value;if(""===e||e.indexOf("youtube")<0)return alert("You must enter a Youtube URL"),!1;e.indexOf("watch?v=")>0&&(e=e.replace("watch?v=","embed/"));var u='';this.ne.selectedInstance.setContent(this.ne.selectedInstance.getContent()+u),this.removePane()}});nicEditors.registerPlugin(nicPlugin, nicYouTubeOptions);