-
Notifications
You must be signed in to change notification settings - Fork 53
/
Copy pathga-redactor.min.js
5 lines (5 loc) · 148 KB
/
ga-redactor.min.js
1
2
3
4
5
if(function($){function Redactor(el,options){return new Redactor.prototype.init(el,options)}var uuid=0,Range=function(range){return this[0]=range.startOffset,this[1]=range.endOffset,this.range=range,this};Range.prototype.equals=function(){return this[0]===this[1]};var reUrlYoutube=/https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com\S*[^\w\-\s])([\w\-]{11})(?=[^\w\-]|$)(?![?=&+%\w.-]*(?:['"][^<>]*>|<\/a>))[?=&+%\w.-]*/gi,reUrlVimeo=/https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/;$.fn.redactor=function(options){var val=[],args=Array.prototype.slice.call(arguments,1);return"string"==typeof options?this.each(function(){var instance=$.data(this,"redactor");if("undefined"==typeof instance||!$.isFunction(instance[options]))return $.error('No such method "'+options+'" for Redactor');var methodVal=instance[options].apply(instance,args);void 0!==methodVal&&methodVal!==instance&&val.push(methodVal)}):this.each(function(){$.data(this,"redactor")||$.data(this,"redactor",Redactor(this,options))}),0===val.length?this:1===val.length?val[0]:val},$.Redactor=Redactor,$.Redactor.VERSION="9.2.6",$.Redactor.opts={rangy:!1,iframe:!1,fullpage:!1,css:!1,lang:"en",direction:"ltr",placeholder:!1,typewriter:!1,wym:!1,mobile:!0,cleanup:!0,tidyHtml:!0,pastePlainText:!1,removeEmptyTags:!0,cleanSpaces:!0,cleanFontTag:!0,templateVars:!1,xhtml:!1,visual:!0,focus:!1,tabindex:!1,autoresize:!0,minHeight:!1,maxHeight:!1,shortcuts:{"ctrl+m, meta+m":"this.execCommand('removeFormat', false)","ctrl+b, meta+b":"this.execCommand('bold', false)","ctrl+i, meta+i":"this.execCommand('italic', false)","ctrl+h, meta+h":"this.execCommand('superscript', false)","ctrl+l, meta+l":"this.execCommand('subscript', false)","ctrl+k, meta+k":"this.linkShow()","ctrl+shift+7":"this.execCommand('insertorderedlist', false)","ctrl+shift+8":"this.execCommand('insertunorderedlist', false)"},shortcutsAdd:!1,autosave:!1,autosaveInterval:60,plugins:!1,linkProtocol:"http://",linkNofollow:!1,linkSize:50,predefinedLinks:!1,imageFloatMargin:"10px",imageGetJson:!1,dragUpload:!0,imageTabLink:!0,imageUpload:!1,imageUploadParam:"file",imageResizable:!0,fileUpload:!1,fileUploadParam:"file",clipboardUpload:!0,clipboardUploadUrl:!1,dnbImageTypes:["image/png","image/jpeg","image/gif"],s3:!1,uploadFields:!1,observeImages:!0,observeLinks:!0,modalOverlay:!0,tabSpaces:!1,tabFocus:!0,air:!1,airButtons:["formatting","bold","italic","deleted","unorderedlist","orderedlist","outdent","indent"],toolbar:!0,toolbarFixed:!1,toolbarFixedTarget:document,toolbarFixedTopOffset:0,toolbarFixedBox:!1,toolbarExternal:!1,toolbarOverflow:!1,buttonSource:!0,buttons:["html","formatting","bold","italic","deleted","unorderedlist","orderedlist","outdent","indent","image","video","file","table","link","alignment","|","horizontalrule"],buttonsHideOnMobile:[],activeButtons:["deleted","italic","bold","underline","unorderedlist","orderedlist","alignleft","aligncenter","alignright","justify","table"],activeButtonsStates:{b:"bold",strong:"bold",i:"italic",em:"italic",del:"deleted",strike:"deleted",ul:"unorderedlist",ol:"orderedlist",u:"underline",tr:"table",td:"table",table:"table"},formattingTags:["p","blockquote","pre","h1","h2","h3","h4","h5","h6"],linebreaks:!1,paragraphy:!0,convertDivs:!0,convertLinks:!0,convertImageLinks:!1,convertVideoLinks:!1,formattingPre:!1,phpTags:!1,allowedTags:!1,deniedTags:["html","head","link","body","meta","script","style","applet"],boldTag:"strong",italicTag:"em",indentValue:20,buffer:[],rebuffer:[],textareamode:!1,emptyHtml:"<p>​</p>",invisibleSpace:"​",rBlockTest:/^(P|H[1-6]|LI|ADDRESS|SECTION|HEADER|FOOTER|ASIDE|ARTICLE)$/i,alignmentTags:["P","H1","H2","H3","H4","H5","H6","DD","DL","DT","DIV","TD","BLOCKQUOTE","OUTPUT","FIGCAPTION","ADDRESS","SECTION","HEADER","FOOTER","ASIDE","ARTICLE"],ownLine:["area","body","head","hr","i?frame","link","meta","noscript","style","script","table","tbody","thead","tfoot"],contOwnLine:["li","dt","dt","h[1-6]","option","script"],newLevel:["blockquote","div","dl","fieldset","form","frameset","map","ol","p","pre","select","td","th","tr","ul"],blockLevelElements:["P","H1","H2","H3","H4","H5","H6","DD","DL","DT","DIV","LI","BLOCKQUOTE","OUTPUT","FIGCAPTION","PRE","ADDRESS","SECTION","HEADER","FOOTER","ASIDE","ARTICLE","TD"],langs:{en:{html:"HTML",video:"Insert Video",image:"Insert Image",table:"Table",link:"Link",link_insert:"Insert link",link_edit:"Edit link",unlink:"Unlink",formatting:"Formatting",paragraph:"Normal text",quote:"Quote",code:"Code",header1:"Header 1",header2:"Header 2",header3:"Header 3",header4:"Header 4",header5:"Header 5",bold:"Bold",italic:"Italic",fontcolor:"Font Color",backcolor:"Back Color",unorderedlist:"Unordered List",orderedlist:"Ordered List",outdent:"Outdent",indent:"Indent",cancel:"Cancel",insert:"Insert",save:"Save",_delete:"Delete",insert_table:"Insert Table",insert_row_above:"Add Row Above",insert_row_below:"Add Row Below",insert_column_left:"Add Column Left",insert_column_right:"Add Column Right",delete_column:"Delete Column",delete_row:"Delete Row",delete_table:"Delete Table",rows:"Rows",columns:"Columns",add_head:"Add Head",delete_head:"Delete Head",title:"Title",image_position:"Position",none:"None",left:"Left",right:"Right",center:"Center",image_web_link:"Image Web Link",text:"Text",mailto:"Email",web:"URL",video_html_code:"Video Embed Code",file:"Insert File",upload:"Upload",download:"Download",choose:"Choose",or_choose:"Or choose",drop_file_here:"Drop file here",align_left:"Align text to the left",align_center:"Center text",align_right:"Align text to the right",align_justify:"Justify text",horizontalrule:"Insert Horizontal Rule",deleted:"Deleted",anchor:"Anchor",link_new_tab:"Open link in new tab",underline:"Underline",alignment:"Alignment",filename:"Name (optional)",edit:"Edit"}}},Redactor.fn=$.Redactor.prototype={keyCode:{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,ESC:27,TAB:9,CTRL:17,META:91,LEFT:37,LEFT_WIN:91},init:function(el,options){this.rtePaste=!1,this.$element=this.$source=$(el),this.uuid=uuid++;var opts=$.extend(!0,{},$.Redactor.opts);if(this.opts=$.extend({},opts,this.$element.data(),options),this.start=!0,this.dropdowns=[],this.sourceHeight=this.$source.css("height"),this.sourceWidth=this.$source.css("width"),this.opts.fullpage&&(this.opts.iframe=!0),this.opts.linebreaks&&(this.opts.paragraphy=!1),this.opts.paragraphy&&(this.opts.linebreaks=!1),this.opts.toolbarFixedBox&&(this.opts.toolbarFixed=!0),this.document=document,this.window=window,this.savedSel=!1,this.cleanlineBefore=new RegExp("^<(/?"+this.opts.ownLine.join("|/?")+"|"+this.opts.contOwnLine.join("|")+")[ >]"),this.cleanlineAfter=new RegExp("^<(br|/?"+this.opts.ownLine.join("|/?")+"|/"+this.opts.contOwnLine.join("|/")+")[ >]"),this.cleannewLevel=new RegExp("^</?("+this.opts.newLevel.join("|")+")[ >]"),this.rTestBlock=new RegExp("^("+this.opts.blockLevelElements.join("|")+")$","i"),this.opts.linebreaks===!1){if(this.opts.allowedTags!==!1){var arrSearch=["strong","em","del"],arrAdd=["b","i","strike"];"-1"===$.inArray("p",this.opts.allowedTags)&&this.opts.allowedTags.push("p");for(i in arrSearch)"-1"!=$.inArray(arrSearch[i],this.opts.allowedTags)&&this.opts.allowedTags.push(arrAdd[i])}if(this.opts.deniedTags!==!1){var pos=$.inArray("p",this.opts.deniedTags);"-1"!==pos&&this.opts.deniedTags.splice(pos,pos)}}(this.browser("msie")||this.browser("opera"))&&(this.opts.buttons=this.removeFromArrayByValue(this.opts.buttons,"horizontalrule")),this.opts.curLang=this.opts.langs[this.opts.lang],$.extend(this.opts.shortcuts,this.opts.shortcutsAdd),this.placeholderInit(),this.buildStart()},toolbarInit:function(lang){return{html:{title:lang.html,func:"toggle"},formatting:{title:lang.formatting,func:"show",dropdown:{p:{title:lang.paragraph,func:"formatBlocks"},blockquote:{title:lang.quote,func:"formatQuote",className:"redactor_format_blockquote"},pre:{title:lang.code,func:"formatBlocks",className:"redactor_format_pre"},h1:{title:lang.header1,func:"formatBlocks",className:"redactor_format_h1"},h2:{title:lang.header2,func:"formatBlocks",className:"redactor_format_h2"},h3:{title:lang.header3,func:"formatBlocks",className:"redactor_format_h3"},h4:{title:lang.header4,func:"formatBlocks",className:"redactor_format_h4"},h5:{title:lang.header5,func:"formatBlocks",className:"redactor_format_h5"}}},bold:{title:lang.bold,exec:"bold"},italic:{title:lang.italic,exec:"italic"},deleted:{title:lang.deleted,exec:"strikethrough"},underline:{title:lang.underline,exec:"underline"},unorderedlist:{title:"• "+lang.unorderedlist,exec:"insertunorderedlist"},orderedlist:{title:"1. "+lang.orderedlist,exec:"insertorderedlist"},outdent:{title:"< "+lang.outdent,func:"indentingOutdent"},indent:{title:"> "+lang.indent,func:"indentingIndent"},image:{title:lang.image,func:"imageShow"},video:{title:lang.video,func:"videoShow"},file:{title:lang.file,func:"fileShow"},table:{title:lang.table,func:"show",dropdown:{insert_table:{title:lang.insert_table,func:"tableShow"},separator_drop1:{name:"separator"},insert_row_above:{title:lang.insert_row_above,func:"tableAddRowAbove"},insert_row_below:{title:lang.insert_row_below,func:"tableAddRowBelow"},insert_column_left:{title:lang.insert_column_left,func:"tableAddColumnLeft"},insert_column_right:{title:lang.insert_column_right,func:"tableAddColumnRight"},separator_drop2:{name:"separator"},add_head:{title:lang.add_head,func:"tableAddHead"},delete_head:{title:lang.delete_head,func:"tableDeleteHead"},separator_drop3:{name:"separator"},delete_column:{title:lang.delete_column,func:"tableDeleteColumn"},delete_row:{title:lang.delete_row,func:"tableDeleteRow"},delete_table:{title:lang.delete_table,func:"tableDeleteTable"}}},link:{title:lang.link,func:"show",dropdown:{link:{title:lang.link_insert,func:"linkShow"},unlink:{title:lang.unlink,exec:"unlink"}}},alignment:{title:lang.alignment,func:"show",dropdown:{alignleft:{title:lang.align_left,func:"alignmentLeft"},aligncenter:{title:lang.align_center,func:"alignmentCenter"},alignright:{title:lang.align_right,func:"alignmentRight"},justify:{title:lang.align_justify,func:"alignmentJustify"}}},alignleft:{title:lang.align_left,func:"alignmentLeft"},aligncenter:{title:lang.align_center,func:"alignmentCenter"},alignright:{title:lang.align_right,func:"alignmentRight"},alignjustify:{title:lang.align_justify,func:"alignmentJustify"},horizontalrule:{exec:"inserthorizontalrule",title:lang.horizontalrule}}},callback:function(type,event,data){var callback=this.opts[type+"Callback"];return $.isFunction(callback)?event===!1?callback.call(this,data):callback.call(this,event,data):data},destroy:function(){clearInterval(this.autosaveInterval),$(window).off(".redactor"),this.$source.off("redactor-textarea"),this.$element.off(".redactor").removeData("redactor");var html=this.get();if(this.opts.textareamode)this.$box.after(this.$source),this.$box.remove(),this.$source.val(html).show();else{var $elem=this.$editor;this.opts.iframe&&($elem=this.$element),this.$box.after($elem),this.$box.remove(),$elem.removeClass("redactor_editor").removeClass("redactor_editor_wym").removeAttr("contenteditable").html(html).show()}this.opts.toolbarExternal&&$(this.opts.toolbarExternal).html(""),this.opts.air&&$("#redactor_air_"+this.uuid).remove()},getObject:function(){return $.extend({},this)},getEditor:function(){return this.$editor},getBox:function(){return this.$box},getIframe:function(){return this.opts.iframe?this.$frame:!1},getToolbar:function(){return this.$toolbar?this.$toolbar:!1},get:function(){return this.$source.val()},getCodeIframe:function(){this.$editor.removeAttr("contenteditable").removeAttr("dir");var html=this.outerHtml(this.$frame.contents().children());return this.$editor.attr({contenteditable:!0,dir:this.opts.direction}),html},set:function(html,strip,placeholderRemove){html=html.toString(),html=html.replace(/\$/g,"$"),this.opts.fullpage?this.setCodeIframe(html):this.setEditor(html,strip),""==html&&(placeholderRemove=!1),placeholderRemove!==!1&&this.placeholderRemoveFromEditor()},setEditor:function(html,strip){strip!==!1&&(html=this.cleanSavePreCode(html),html=this.cleanStripTags(html),html=this.cleanConvertProtected(html),html=this.cleanConvertInlineTags(html,!0),html=this.opts.linebreaks===!1?this.cleanConverters(html):html.replace(/<p(.*?)>([\w\W]*?)<\/p>/gi,"$2<br>")),html=html.replace(/&#36;/g,"$"),html=this.cleanEmpty(html),this.$editor.html(html),this.setNonEditable(),this.setSpansVerified(),this.sync()},setCodeIframe:function(html){var doc=this.iframePage();this.$frame[0].src="about:blank",html=this.cleanConvertProtected(html),html=this.cleanConvertInlineTags(html),html=this.cleanRemoveSpaces(html),doc.open(),doc.write(html),doc.close(),this.opts.fullpage&&(this.$editor=this.$frame.contents().find("body").attr({contenteditable:!0,dir:this.opts.direction})),this.setNonEditable(),this.setSpansVerified(),this.sync()},setFullpageOnInit:function(html){this.fullpageDoctype=html.match(/^<\!doctype[^>]*>/i),this.fullpageDoctype&&1==this.fullpageDoctype.length&&(html=html.replace(/^<\!doctype[^>]*>/i,"")),html=this.cleanSavePreCode(html,!0),html=this.cleanConverters(html),html=this.cleanEmpty(html),this.$editor.html(html),this.setNonEditable(),this.setSpansVerified(),this.sync()},setFullpageDoctype:function(){if(this.fullpageDoctype&&1==this.fullpageDoctype.length){var source=this.fullpageDoctype[0]+"\n"+this.$source.val();this.$source.val(source)}},setSpansVerified:function(){var spans=this.$editor.find("span"),replacementTag="inline";$.each(spans,function(){var outer=this.outerHTML,regex=new RegExp("<"+this.tagName,"gi"),newTag=outer.replace(regex,"<"+replacementTag);regex=new RegExp("</"+this.tagName,"gi"),newTag=newTag.replace(regex,"</"+replacementTag),$(this).replaceWith(newTag)})},setSpansVerifiedHtml:function(html){return html=html.replace(/<span(.*?)>/,"<inline$1>"),html.replace(/<\/span>/,"</inline>")},setNonEditable:function(){this.$editor.find(".noneditable").attr("contenteditable",!1)},sync:function(e){var html="";this.cleanUnverified(),html=this.opts.fullpage?this.getCodeIframe():this.$editor.html(),html=this.syncClean(html),html=this.cleanRemoveEmptyTags(html);var source=this.cleanRemoveSpaces(this.$source.val(),!1),editor=this.cleanRemoveSpaces(html,!1);if(source==editor)return!1;if(html=html.replace(/<\/li><(ul|ol)>([\w\W]*?)<\/(ul|ol)>/gi,"<$1>$2</$1></li>"),"<br>"===$.trim(html)&&(html=""),this.opts.xhtml){var xhtmlTags=["br","hr","img","link","input","meta"];$.each(xhtmlTags,function(i,s){html=html.replace(new RegExp("<"+s+"(.*?[^/$]?)>","gi"),"<"+s+"$1 />")})}if(html=this.callback("syncBefore",!1,html),this.$source.val(html),this.setFullpageDoctype(),this.callback("syncAfter",!1,html),this.start===!1)if("undefined"!=typeof e)switch(e.which){case 37:break;case 38:break;case 39:break;case 40:break;default:this.callback("change",!1,html)}else this.callback("change",!1,html)},syncClean:function(html){return this.opts.fullpage||(html=this.cleanStripTags(html)),html=$.trim(html),html=this.placeholderRemoveFromCode(html),html=html.replace(/​/gi,""),html=html.replace(/​/gi,""),html=html.replace(/<\/a> /gi,"</a> "),html=html.replace(/\u200B/g,""),("<p></p>"==html||"<p> </p>"==html||"<p> </p>"==html)&&(html=""),this.opts.linkNofollow&&(html=html.replace(/<a(.*?)rel="nofollow"(.*?)>/gi,"<a$1$2>"),html=html.replace(/<a(.*?)>/gi,'<a$1 rel="nofollow">')),html=html.replace("<!--?php","<?php"),html=html.replace("?-->","?>"),html=html.replace(/<(.*?)class="noeditable"(.*?) contenteditable="false"(.*?)>/gi,'<$1class="noeditable"$2$3>'),html=html.replace(/ data-tagblock=""/gi,""),html=html.replace(/<br\s?\/?>\n?<\/(P|H[1-6]|LI|ADDRESS|SECTION|HEADER|FOOTER|ASIDE|ARTICLE)>/gi,"</$1>"),html=html.replace(/<span(.*?)id="redactor-image-box"(.*?)>([\w\W]*?)<img(.*?)><\/span>/gi,"$3<img$4>"),html=html.replace(/<span(.*?)id="redactor-image-resizer"(.*?)>(.*?)<\/span>/gi,""),html=html.replace(/<span(.*?)id="redactor-image-editter"(.*?)>(.*?)<\/span>/gi,""),html=html.replace(/<(ul|ol)>\s*\t*\n*<\/(ul|ol)>/gi,""),this.opts.cleanFontTag&&(html=html.replace(/<font(.*?)>([\w\W]*?)<\/font>/gi,"$2")),html=html.replace(/<span(.*?)>([\w\W]*?)<\/span>/gi,"$2"),html=html.replace(/<inline>([\w\W]*?)<\/inline>/gi,"$1"),html=html.replace(/<inline>/gi,"<span>"),html=html.replace(/<inline /gi,"<span "),html=html.replace(/<\/inline>/gi,"</span>"),this.opts.removeEmptyTags&&(html=html.replace(/<span>([\w\W]*?)<\/span>/gi,"$1")),html=html.replace(/<span(.*?)class="redactor_placeholder"(.*?)>([\w\W]*?)<\/span>/gi,""),html=html.replace(/<img(.*?)contenteditable="false"(.*?)>/gi,"<img$1$2>"),html=html.replace(/&/gi,"&"),html=html.replace(/\u2122/gi,"™"),html=html.replace(/\u00a9/gi,"©"),html=html.replace(/\u2026/gi,"…"),html=html.replace(/\u2014/gi,"—"),html=html.replace(/\u2010/gi,"‐"),html=this.cleanReConvertProtected(html)},buildStart:function(){this.content="",this.$box=$('<div class="redactor_box" />'),"TEXTAREA"===this.$source[0].tagName&&(this.opts.textareamode=!0),this.opts.mobile===!1&&this.isMobile()?this.buildMobile():(this.buildContent(),this.opts.iframe?(this.opts.autoresize=!1,this.iframeStart()):this.opts.textareamode?this.buildFromTextarea():this.buildFromElement(),this.opts.iframe||(this.buildOptions(),this.buildAfter()))},buildMobile:function(){this.opts.textareamode||(this.$editor=this.$source,this.$editor.hide(),this.$source=this.buildCodearea(this.$editor),this.$source.val(this.content)),this.$box.insertAfter(this.$source).append(this.$source)},buildContent:function(){this.opts.textareamode?this.content=$.trim(this.$source.val()):this.content=$.trim(this.$source.html())},buildFromTextarea:function(){this.$editor=$("<div />"),this.$box.insertAfter(this.$source).append(this.$editor).append(this.$source),this.buildAddClasses(this.$editor),this.buildEnable()},buildFromElement:function(){this.$editor=this.$source,this.$source=this.buildCodearea(this.$editor),this.$box.insertAfter(this.$editor).append(this.$editor).append(this.$source),this.buildEnable()},buildCodearea:function($source){return $("<textarea />").attr("name",$source.attr("id")).css("height",this.sourceHeight)},buildAddClasses:function(el){$.each(this.$source.get(0).className.split(/\s+/),function(i,s){el.addClass("redactor_"+s)})},buildEnable:function(){this.$editor.addClass("redactor_editor").attr({contenteditable:!0,dir:this.opts.direction}),this.$source.attr("dir",this.opts.direction).hide(),this.set(this.content,!0,!1)},buildOptions:function(){var $source=this.$editor;this.opts.iframe&&($source=this.$frame),this.opts.tabindex&&$source.attr("tabindex",this.opts.tabindex),this.opts.minHeight?$source.css("min-height",this.opts.minHeight+"px"):this.browser("mozilla")&&this.opts.linebreaks&&this.$editor.css("min-height","45px"),this.browser("mozilla")&&this.opts.linebreaks&&this.$editor.css("padding-bottom","10px"),this.opts.maxHeight&&(this.opts.autoresize=!1,this.sourceHeight=this.opts.maxHeight),this.opts.wym&&this.$editor.addClass("redactor_editor_wym"),this.opts.typewriter&&this.$editor.addClass("redactor-editor-typewriter"),this.opts.autoresize||$source.css("height",this.sourceHeight)},buildAfter:function(){if(this.start=!1,this.opts.toolbar&&(this.opts.toolbar=this.toolbarInit(this.opts.curLang),this.toolbarBuild()),this.modalTemplatesInit(),this.buildPlugins(),this.buildBindKeyboard(),this.opts.autosave&&this.autosave(),setTimeout($.proxy(this.observeStart,this),4),this.browser("mozilla"))try{this.document.execCommand("enableObjectResizing",!1,!1),this.document.execCommand("enableInlineTableEditing",!1,!1)}catch(e){}this.opts.focus&&setTimeout($.proxy(this.focus,this),100),this.opts.visual||setTimeout($.proxy(function(){this.opts.visual=!0,this.toggle(!1)},this),200),this.callback("init")},buildBindKeyboard:function(){this.dblEnter=0,!this.opts.dragUpload||this.opts.imageUpload===!1&&this.opts.s3===!1||this.$editor.on("drop.redactor",$.proxy(this.buildEventDrop,this)),this.$editor.on("click.redactor",$.proxy(function(){this.selectall=!1},this)),this.$editor.on("input.redactor",$.proxy(this.sync,this)),this.$editor.on("paste.redactor",$.proxy(this.buildEventPaste,this)),this.$editor.on("keydown.redactor",$.proxy(this.buildEventKeydown,this)),this.$editor.on("keyup.redactor",$.proxy(this.buildEventKeyup,this)),$.isFunction(this.opts.textareaKeydownCallback)&&this.$source.on("keydown.redactor-textarea",$.proxy(this.opts.textareaKeydownCallback,this)),$.isFunction(this.opts.focusCallback)&&this.$editor.on("focus.redactor",$.proxy(this.opts.focusCallback,this));var clickedElement;$(document).mousedown(function(e){clickedElement=$(e.target)}),this.$editor.on("blur.redactor",$.proxy(function(e){$(clickedElement).hasClass("redactor_toolbar")||0!=$(clickedElement).parents(".redactor_toolbar").size()||(this.selectall=!1,$.isFunction(this.opts.blurCallback)&&this.callback("blur",e))},this))},buildEventDrop:function(e){if(e=e.originalEvent||e,void 0===window.FormData||!e.dataTransfer)return!0;var length=e.dataTransfer.files.length;if(0==length)return!0;e.preventDefault();var file=e.dataTransfer.files[0];return this.opts.dnbImageTypes!==!1&&-1==this.opts.dnbImageTypes.indexOf(file.type)?!0:(this.bufferSet(),this.showProgressBar(),void(this.opts.s3===!1?this.dragUploadAjax(this.opts.imageUpload,file,!0,e,this.opts.imageUploadParam):this.s3uploadFile(file)))},buildEventPaste:function(e){var oldsafari=!1;if(this.browser("webkit")&&-1===navigator.userAgent.indexOf("Chrome")){var arr=this.browser("version").split(".");arr[0]<536&&(oldsafari=!0)}if(oldsafari)return!0;if(this.browser("opera"))return!0;if(this.opts.clipboardUpload&&this.buildEventClipboardUpload(e))return!0;if(this.opts.cleanup){this.rtePaste=!0,this.selectionSave(),this.selectall||(this.opts.autoresize===!0&&this.fullscreen!==!0?(this.$editor.height(this.$editor.height()),this.saveScroll=this.document.body.scrollTop):this.saveScroll=this.$editor.scrollTop());var frag=this.extractContent();setTimeout($.proxy(function(){var pastedFrag=this.extractContent();this.$editor.append(frag),this.selectionRestore();var html=this.getFragmentHtml(pastedFrag);this.pasteClean(html),this.opts.autoresize===!0&&this.fullscreen!==!0&&this.$editor.css("height","auto")},this),1)}},buildEventClipboardUpload:function(e){var event=e.originalEvent||e;if(this.clipboardFilePaste=!1,"undefined"==typeof event.clipboardData)return!1;if(event.clipboardData.items){var file=event.clipboardData.items[0].getAsFile();if(null!==file){this.bufferSet(),this.clipboardFilePaste=!0;var reader=new FileReader;return reader.onload=$.proxy(this.pasteClipboardUpload,this),reader.readAsDataURL(file),!0}}return!1},buildEventKeydown:function(e){if(this.rtePaste)return!1;var key=e.which,ctrl=e.ctrlKey||e.metaKey,parent=this.getParent(),current=this.getCurrent(),block=this.getBlock(),pre=!1;if(this.callback("keydown",e),this.browser("mozilla")&&"modify"in window.getSelection()&&ctrl&&(37===e.keyCode||39===e.keyCode)){var selection=this.getSelection(),lineOrWord=e.metaKey?"line":"word";37===e.keyCode&&(selection.modify("extend","left",lineOrWord),e.shiftKey||selection.collapseToStart()),39===e.keyCode&&(selection.modify("extend","right",lineOrWord),e.shiftKey||selection.collapseToEnd()),e.preventDefault()}if(this.imageResizeHide(!1),(parent&&"PRE"===$(parent).get(0).tagName||current&&"PRE"===$(current).get(0).tagName)&&(pre=!0,key===this.keyCode.DOWN&&this.insertAfterLastElement(block)),key===this.keyCode.DOWN&&(parent&&"BLOCKQUOTE"===$(parent)[0].tagName&&this.insertAfterLastElement(parent),current&&"BLOCKQUOTE"===$(current)[0].tagName&&this.insertAfterLastElement(current),parent&&"P"===$(parent)[0].tagName&&"BLOCKQUOTE"==$(parent).parent()[0].tagName&&this.insertAfterLastElement(parent,$(parent).parent()[0]),current&&"P"===$(current)[0].tagName&&parent&&"BLOCKQUOTE"==$(parent)[0].tagName&&this.insertAfterLastElement(current,parent)),this.shortcuts(e,key),ctrl&&90===key&&!e.shiftKey&&!e.altKey)return e.preventDefault(),void(this.opts.buffer.length?this.bufferUndo():this.document.execCommand("undo",!1,!1));if(ctrl&&90===key&&e.shiftKey&&!e.altKey)return e.preventDefault(),void(0!=this.opts.rebuffer.length?this.bufferRedo():this.document.execCommand("redo",!1,!1));if(32==key&&this.bufferSet(),ctrl&&65===key?(this.bufferSet(),this.selectall=!0):key==this.keyCode.LEFT_WIN||ctrl||(this.selectall=!1),key!=this.keyCode.ENTER||e.shiftKey||e.ctrlKey||e.metaKey)key===this.keyCode.ENTER&&(e.ctrlKey||e.shiftKey)&&(this.bufferSet(),e.preventDefault(),this.insertLineBreak());else{var range=this.getRange();if(range&&range.collapsed===!1&&(sel=this.getSelection(),sel.rangeCount&&range.deleteContents()),this.browser("msie")&&1==parent.nodeType&&("TD"==parent.tagName||"TH"==parent.tagName))return e.preventDefault(),this.bufferSet(),this.insertNode(document.createElement("br")),this.callback("enter",e),!1;if(block&&("BLOCKQUOTE"==block.tagName||"BLOCKQUOTE"==$(block).parent()[0].tagName))if(this.isEndOfElement()){if(1==this.dblEnter){var element,last;if("BLOCKQUOTE"==block.tagName?(last="br",element=block):(last="p",element=$(block).parent()[0]),e.preventDefault(),this.insertingAfterLastElement(element),this.dblEnter=0,"p"==last)$(block).parent().find("p").last().remove();else{var tmp=$.trim($(block).html());$(block).html(tmp.replace(/<br\s?\/?>$/i,""))}return}this.dblEnter++}else this.dblEnter++;if(pre===!0)return this.buildEventKeydownPre(e,current);if(!this.opts.linebreaks){if(block&&"LI"==block.tagName){var listCurrent=this.getBlock();if(listCurrent!==!1||"LI"===listCurrent.tagName){var listText=$.trim($(block).text()),listCurrentText=$.trim($(listCurrent).text());if(""==listText&&""==listCurrentText&&0==$(listCurrent).next("li").size()&&0==$(listCurrent).parents("li").size()){this.bufferSet();var $list=$(listCurrent).closest("ol, ul");$(listCurrent).remove();var node=$("<p>"+this.opts.invisibleSpace+"</p>");return $list.after(node),this.selectionStart(node),this.sync(),this.callback("enter",e),!1}}}if(block&&this.opts.rBlockTest.test(block.tagName))this.bufferSet(),setTimeout($.proxy(function(){var blockElem=this.getBlock();if("DIV"===blockElem.tagName&&!$(blockElem).hasClass("redactor_editor")){var node=$("<p>"+this.opts.invisibleSpace+"</p>");$(blockElem).replaceWith(node),this.selectionStart(node)}},this),1);else if(block===!1){this.bufferSet();var node=$("<p>"+this.opts.invisibleSpace+"</p>");return this.insertNode(node[0]),this.selectionStart(node),this.callback("enter",e),!1}}if(this.opts.linebreaks){if(!block||!this.opts.rBlockTest.test(block.tagName))return this.buildEventKeydownInsertLineBreak(e);this.bufferSet(),setTimeout($.proxy(function(){var blockElem=this.getBlock();"DIV"!==blockElem.tagName&&"P"!==blockElem.tagName||$(blockElem).hasClass("redactor_editor")||this.replaceLineBreak(blockElem)},this),1)}if("BLOCKQUOTE"==block.tagName||"FIGCAPTION"==block.tagName)return this.buildEventKeydownInsertLineBreak(e);this.callback("enter",e)}return(key===this.keyCode.TAB||e.metaKey&&219===key)&&this.opts.shortcuts?this.buildEventKeydownTab(e,pre,key):void(key===this.keyCode.BACKSPACE&&this.buildEventKeydownBackspace(e,current,parent))},buildEventKeydownPre:function(e,current){e.preventDefault(),this.bufferSet();var html=$(current).parent().text();return this.insertNode(document.createTextNode("\n")),-1==html.search(/\s$/)&&this.insertNode(document.createTextNode("\n")),this.sync(),this.callback("enter",e),!1},buildEventKeydownTab:function(e,pre,key){return this.opts.tabFocus?this.isEmpty(this.get())&&this.opts.tabSpaces===!1?!0:(e.preventDefault(),pre!==!0||e.shiftKey?this.opts.tabSpaces!==!1?(this.bufferSet(),this.insertNode(document.createTextNode(Array(this.opts.tabSpaces+1).join(" "))),this.sync(),!1):(e.shiftKey?this.indentingOutdent():this.indentingIndent(),!1):(this.bufferSet(),this.insertNode(document.createTextNode(" ")),this.sync(),!1)):!0},buildEventKeydownBackspace:function(e,current,parent){if(parent&¤t&&"TD"==parent.parentNode.tagName&&"UL"==parent.tagName&&"LI"==current.tagName&&1==$(parent).children("li").size()){var text=$(current).text().replace(/[\u200B-\u200D\uFEFF]/g,"");if(""==text){var node=parent.parentNode;return $(parent).remove(),this.selectionStart(node),this.sync(),!1}}if("undefined"!=typeof current.tagName&&/^(H[1-6])$/i.test(current.tagName)){var node;node=$(this.opts.linebreaks===!1?"<p>"+this.opts.invisibleSpace+"</p>":"<br>"+this.opts.invisibleSpace),$(current).replaceWith(node),this.selectionStart(node),this.sync()}"undefined"!=typeof current.nodeValue&&null!==current.nodeValue&¤t.remove&&3===current.nodeType&&null==current.nodeValue.match(/[^\u200B]/g)&&($(current).prev().remove(),this.sync())},buildEventKeydownInsertLineBreak:function(e){this.bufferSet(),e.preventDefault(),this.insertLineBreak(),this.callback("enter",e)},buildEventKeyup:function(e){if(this.rtePaste)return!1;var key=e.which,parent=this.getParent(),current=this.getCurrent();if(!this.opts.linebreaks&&3==current.nodeType&&(0==parent||"BODY"==parent.tagName)){var node=$("<p>").append($(current).clone());$(current).replaceWith(node);var next=$(node).next();"undefined"!=typeof next[0]&&"BR"==next[0].tagName&&next.remove(),this.selectionEnd(node)}return(this.opts.convertLinks||this.opts.convertImageLinks||this.opts.convertVideoLinks)&&key===this.keyCode.ENTER&&this.buildEventKeyupConverters(),key===this.keyCode.DELETE||key===this.keyCode.BACKSPACE?this.formatEmpty(e):(this.callback("keyup",e),void this.sync(e))},buildEventKeyupConverters:function(){this.formatLinkify(this.opts.linkProtocol,this.opts.convertLinks,this.opts.convertImageLinks,this.opts.convertVideoLinks,this.opts.linkSize),setTimeout($.proxy(function(){this.opts.convertImageLinks&&this.observeImages(),this.opts.observeLinks&&this.observeLinks()},this),5)},buildPlugins:function(){this.opts.plugins&&$.each(this.opts.plugins,$.proxy(function(i,s){RedactorPlugins[s]&&($.extend(this,RedactorPlugins[s]),$.isFunction(RedactorPlugins[s].init)&&this.init())},this))},iframeStart:function(){this.iframeCreate(),this.opts.textareamode?this.iframeAppend(this.$source):(this.$sourceOld=this.$source.hide(),this.$source=this.buildCodearea(this.$sourceOld),this.iframeAppend(this.$sourceOld))},iframeAppend:function(el){this.$source.attr("dir",this.opts.direction).hide(),this.$box.insertAfter(el).append(this.$frame).append(this.$source)},iframeCreate:function(){this.$frame=$('<iframe style="width: 100%;" frameborder="0" />').one("load",$.proxy(function(){if(this.opts.fullpage){this.iframePage(),""===this.content&&(this.content=this.opts.invisibleSpace),this.$frame.contents()[0].write(this.content),this.$frame.contents()[0].close();var timer=setInterval($.proxy(function(){this.$frame.contents().find("body").html()&&(clearInterval(timer),this.iframeLoad())},this),0)}else this.iframeLoad()},this))},iframeDoc:function(){return this.$frame[0].contentWindow.document},iframePage:function(){var doc=this.iframeDoc();return doc.documentElement&&doc.removeChild(doc.documentElement),doc},iframeAddCss:function(css){css=css||this.opts.css,this.isString(css)&&this.$frame.contents().find("head").append('<link rel="stylesheet" href="'+css+'" />'),$.isArray(css)&&$.each(css,$.proxy(function(i,url){this.iframeAddCss(url)},this))},iframeLoad:function(){this.$editor=this.$frame.contents().find("body").attr({contenteditable:!0,dir:this.opts.direction}),this.$editor[0]&&(this.document=this.$editor[0].ownerDocument,this.window=this.document.defaultView||window),this.iframeAddCss(),this.opts.fullpage?this.setFullpageOnInit(this.$source.val()):this.set(this.content,!0,!1),this.buildOptions(),this.buildAfter()},placeholderInit:function(){this.opts.placeholder!==!1?(this.placeholderText=this.opts.placeholder,this.opts.placeholder=!0):"undefined"==typeof this.$element.attr("placeholder")||""==this.$element.attr("placeholder")?this.opts.placeholder=!1:(this.placeholderText=this.$element.attr("placeholder"),this.opts.placeholder=!0)},placeholderStart:function(html){return this.opts.placeholder===!1?!1:this.isEmpty(html)?(this.opts.focus=!1,
this.placeholderOnFocus(),this.placeholderOnBlur(),this.placeholderGet()):(this.placeholderOnBlur(),!1)},placeholderOnFocus:function(){this.$editor.on("focus.redactor_placeholder",$.proxy(this.placeholderFocus,this))},placeholderOnBlur:function(){this.$editor.on("blur.redactor_placeholder",$.proxy(this.placeholderBlur,this))},placeholderGet:function(){var ph=$('<span class="redactor_placeholder">').data("redactor","verified").attr("contenteditable",!1).text(this.placeholderText);return this.opts.linebreaks===!1?$("<p>").append(ph):ph},placeholderBlur:function(){var html=this.get();this.isEmpty(html)&&(this.placeholderOnFocus(),this.$editor.html(this.placeholderGet()))},placeholderFocus:function(){this.$editor.find("span.redactor_placeholder").remove();var html="";this.opts.linebreaks===!1&&(html=this.opts.emptyHtml),this.$editor.off("focus.redactor_placeholder"),this.$editor.html(html),this.opts.linebreaks===!1?this.selectionStart(this.$editor.children()[0]):this.focus(),this.sync()},placeholderRemoveFromEditor:function(){this.$editor.find("span.redactor_placeholder").remove(),this.$editor.off("focus.redactor_placeholder")},placeholderRemoveFromCode:function(html){return html.replace(/<span class="redactor_placeholder"(.*?)>(.*?)<\/span>/i,"")},shortcuts:function(e,key){return this.opts.shortcuts?void $.each(this.opts.shortcuts,$.proxy(function(str,command){var keys=str.split(",");for(var i in keys)"string"==typeof keys[i]&&this.shortcutsHandler(e,$.trim(keys[i]),$.proxy(function(){eval(command)},this))},this)):(!e.ctrlKey&&!e.metaKey||66!==key&&73!==key||e.preventDefault(),!1)},shortcutsHandler:function(e,keys,origHandler){var hotkeysSpecialKeys={8:"backspace",9:"tab",10:"return",13:"return",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"del",59:";",61:"=",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"numlock",145:"scroll",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},hotkeysShiftNums={"`":"~",1:"!",2:"@",3:"#",4:"$",5:"%",6:"^",7:"&",8:"*",9:"(",0:")","-":"_","=":"+",";":": ","'":'"',",":"<",".":">","/":"?","\\":"|"};keys=keys.toLowerCase().split(" ");var special=hotkeysSpecialKeys[e.keyCode],character=String.fromCharCode(e.which).toLowerCase(),modif="",possible={};$.each(["alt","ctrl","meta","shift"],function(index,specialKey){e[specialKey+"Key"]&&special!==specialKey&&(modif+=specialKey+"+")}),special&&(possible[modif+special]=!0),character&&(possible[modif+character]=!0,possible[modif+hotkeysShiftNums[character]]=!0,"shift+"===modif&&(possible[hotkeysShiftNums[character]]=!0));for(var i=0,l=keys.length;l>i;i++)if(possible[keys[i]])return e.preventDefault(),origHandler.apply(this,arguments)},focus:function(){this.browser("opera")?this.$editor.focus():this.window.setTimeout($.proxy(this.focusSet,this,!0),1)},focusWithSaveScroll:function(){if(this.browser("msie"))var top=this.document.documentElement.scrollTop;this.$editor.focus(),this.browser("msie")&&(this.document.documentElement.scrollTop=top)},focusEnd:function(){if(this.browser("mozilla"))if(this.opts.linebreaks===!1){var last=this.$editor.children().last();this.$editor.focus(),this.selectionEnd(last)}else this.focusSet();else this.focusSet()},focusSet:function(collapse,element){this.$editor.focus(),"undefined"==typeof element&&(element=this.$editor[0]);var range=this.getRange();range.selectNodeContents(element),range.collapse(collapse||!1);var sel=this.getSelection();sel.removeAllRanges(),sel.addRange(range)},toggle:function(direct){this.opts.visual?this.toggleCode(direct):this.toggleVisual()},toggleVisual:function(){var html=this.$source.hide().val();if("undefined"!=typeof this.modified){var modified=this.modified.replace(/\n/g,""),thtml=html.replace(/\n/g,"");thtml=this.cleanRemoveSpaces(thtml,!1),this.modified=this.cleanRemoveSpaces(modified,!1)!==thtml}this.modified&&(this.opts.fullpage&&""===html?this.setFullpageOnInit(html):(this.set(html),this.opts.fullpage&&this.buildBindKeyboard()),this.callback("change",!1,html)),this.opts.iframe?this.$frame.show():this.$editor.show(),this.opts.fullpage&&this.$editor.attr("contenteditable",!0),this.$source.off("keydown.redactor-textarea-indenting"),this.$editor.focus(),this.selectionRestore(),this.observeStart(),this.buttonActiveVisual(),this.buttonInactive("html"),this.opts.visual=!0},toggleCode:function(direct){direct!==!1&&this.selectionSave();var height=null;this.opts.iframe?(height=this.$frame.height(),this.opts.fullpage&&this.$editor.removeAttr("contenteditable"),this.$frame.hide()):(height=this.$editor.innerHeight(),this.$editor.hide());var html=this.$source.val();""!==html&&this.opts.tidyHtml&&this.$source.val(this.cleanHtml(html)),this.modified=html,this.$source.height(height).show().focus(),this.$source.on("keydown.redactor-textarea-indenting",this.textareaIndenting),this.buttonInactiveVisual(),this.buttonActive("html"),this.opts.visual=!1},textareaIndenting:function(e){if(9===e.keyCode){var $el=$(this),start=$el.get(0).selectionStart;return $el.val($el.val().substring(0,start)+" "+$el.val().substring($el.get(0).selectionEnd)),$el.get(0).selectionStart=$el.get(0).selectionEnd=start+1,!1}},autosave:function(){var savedHtml=!1;this.autosaveInterval=setInterval($.proxy(function(){var html=this.get();if(savedHtml!==html){var name=this.$source.attr("name");$.ajax({url:this.opts.autosave,type:"post",data:"name="+name+"&"+name+"="+escape(encodeURIComponent(html)),success:$.proxy(function(data){var json=$.parseJSON(data);"undefined"==typeof json.error?this.callback("autosave",!1,json):this.callback("autosaveError",!1,json),savedHtml=html},this)})}},this),1e3*this.opts.autosaveInterval)},toolbarBuild:function(){if(this.isMobile()&&this.opts.buttonsHideOnMobile.length>0&&$.each(this.opts.buttonsHideOnMobile,$.proxy(function(i,s){var index=this.opts.buttons.indexOf(s);this.opts.buttons.splice(index,1)},this)),this.opts.air)this.opts.buttons=this.opts.airButtons;else if(!this.opts.buttonSource){var index=this.opts.buttons.indexOf("html");this.opts.buttons.splice(index,1)}return this.opts.toolbar&&$.each(this.opts.toolbar.formatting.dropdown,$.proxy(function(i,s){"-1"==$.inArray(i,this.opts.formattingTags)&&delete this.opts.toolbar.formatting.dropdown[i]},this)),0===this.opts.buttons.length?!1:(this.airEnable(),this.$toolbar=$("<ul>").addClass("redactor_toolbar").attr("id","redactor_toolbar_"+this.uuid),this.opts.typewriter&&this.$toolbar.addClass("redactor-toolbar-typewriter"),this.opts.toolbarOverflow&&this.isMobile()&&this.$toolbar.addClass("redactor-toolbar-overflow"),this.opts.air?(this.$air=$('<div class="redactor_air">').attr("id","redactor_air_"+this.uuid).hide(),this.$air.append(this.$toolbar),$("body").append(this.$air)):this.opts.toolbarExternal?(this.$toolbar.addClass("redactor-toolbar-external"),$(this.opts.toolbarExternal).html(this.$toolbar)):this.$box.prepend(this.$toolbar),$.each(this.opts.buttons,$.proxy(function(i,btnName){if(this.opts.toolbar[btnName]){var btnObject=this.opts.toolbar[btnName];if(this.opts.fileUpload===!1&&"file"===btnName)return!0;this.$toolbar.append($("<li>").append(this.buttonBuild(btnName,btnObject)))}},this)),this.$toolbar.find("a").attr("tabindex","-1"),this.opts.toolbarFixed&&(this.toolbarObserveScroll(),$(this.opts.toolbarFixedTarget).on("scroll.redactor",$.proxy(this.toolbarObserveScroll,this))),void(this.opts.activeButtons&&this.$editor.on("mouseup.redactor keyup.redactor",$.proxy(this.buttonActiveObserver,this))))},toolbarObserveScroll:function(){var scrollTop=$(this.opts.toolbarFixedTarget).scrollTop(),boxTop=0,left=0,end=0;if(boxTop=this.opts.toolbarFixedTarget===document?this.$box.offset().top:1,end=boxTop+this.$box.height()+40,scrollTop>boxTop){var width="100%";this.opts.toolbarFixedBox&&(left=this.$box.offset().left,width=this.$box.innerWidth(),this.$toolbar.addClass("toolbar_fixed_box")),this.toolbarFixed=!0,this.opts.toolbarFixedTarget===document?this.$toolbar.css({position:"fixed",width:width,zIndex:10005,top:this.opts.toolbarFixedTopOffset+"px",left:left}):this.$toolbar.css({position:"absolute",width:width,zIndex:10005,top:this.opts.toolbarFixedTopOffset+scrollTop+"px",left:0}),end>scrollTop?this.$toolbar.css("visibility","visible"):this.$toolbar.css("visibility","hidden")}else this.toolbarFixed=!1,this.$toolbar.css({position:"relative",width:"auto",top:0,left:left}),this.opts.toolbarFixedBox&&this.$toolbar.removeClass("toolbar_fixed_box")},airEnable:function(){this.opts.air&&this.$editor.on("mouseup.redactor keyup.redactor",this,$.proxy(function(e){var text=this.getSelectionText();if("mouseup"===e.type&&""!=text&&this.airShow(e),"keyup"===e.type&&e.shiftKey&&""!=text){var $focusElem=$(this.getElement(this.getSelection().focusNode)),offset=$focusElem.offset();offset.height=$focusElem.height(),this.airShow(offset,!0)}},this))},airShow:function(e,keyboard){if(this.opts.air){this.selectionSave();var left,top;if($(".redactor_air").hide(),keyboard)left=e.left,top=e.top+e.height+14,this.opts.iframe&&(top+=this.$box.position().top-$(this.document).scrollTop(),left+=this.$box.position().left);else{var width=this.$air.innerWidth();left=e.clientX,$(this.document).width()<left+width&&(left-=width),top=e.clientY+14,this.opts.iframe?(top+=this.$box.position().top,left+=this.$box.position().left):top+=$(this.document).scrollTop()}this.$air.css({left:left+"px",top:top+"px"}).show(),this.airBindHide()}},airBindHide:function(){if(this.opts.air){var hideHandler=$.proxy(function(doc){$(doc).on("mousedown.redactor",$.proxy(function(e){0===$(e.target).closest(this.$toolbar).length&&(this.$air.fadeOut(100),this.selectionRemove(),$(doc).off(e))},this)).on("keydown.redactor",$.proxy(function(e){e.which===this.keyCode.ESC&&this.getSelection().collapseToStart(),this.$air.fadeOut(100),$(doc).off(e)},this))},this);hideHandler(document),this.opts.iframe&&hideHandler(this.document)}},airBindMousemoveHide:function(){if(this.opts.air){var hideHandler=$.proxy(function(doc){$(doc).on("mousemove.redactor",$.proxy(function(e){0===$(e.target).closest(this.$toolbar).length&&(this.$air.fadeOut(100),$(doc).off(e))},this))},this);hideHandler(document),this.opts.iframe&&hideHandler(this.document)}},dropdownBuild:function($dropdown,dropdownObject){$.each(dropdownObject,$.proxy(function(btnName,btnObject){btnObject.className||(btnObject.className="");var $item;"separator"===btnObject.name?$item=$('<a class="redactor_separator_drop">'):($item=$('<a href="#" class="'+btnObject.className+" redactor_dropdown_"+btnName+'">'+btnObject.title+"</a>"),$item.on("click",$.proxy(function(e){this.opts.air&&this.selectionRestore(),e.preventDefault&&e.preventDefault(),this.browser("msie")&&(e.returnValue=!1),btnObject.callback&&btnObject.callback.call(this,btnName,$item,btnObject,e),btnObject.exec&&this.execCommand(btnObject.exec,btnName),btnObject.func&&this[btnObject.func](btnName),this.buttonActiveObserver(),this.opts.air&&this.$air.fadeOut(100)},this))),$dropdown.append($item)},this))},dropdownShow:function(e,key){if(!this.opts.visual)return e.preventDefault(),!1;var $button=this.buttonGet(key),$dropdown=$button.data("dropdown").appendTo(document.body);if($button.hasClass("dropact"))this.dropdownHideAll();else{this.dropdownHideAll(),this.callback("dropdownShow",{dropdown:$dropdown,key:key,button:$button}),this.buttonActive(key),$button.addClass("dropact");var keyPosition=$button.offset(),dropdownWidth=$dropdown.width();keyPosition.left+dropdownWidth>$(document).width()&&(keyPosition.left-=dropdownWidth);var left=keyPosition.left+"px",btnHeight=$button.innerHeight(),position="absolute",top=btnHeight+this.opts.toolbarFixedTopOffset+"px";this.opts.toolbarFixed&&this.toolbarFixed?position="fixed":top=keyPosition.top+btnHeight+"px",$dropdown.css({position:position,left:left,top:top}).show(),this.callback("dropdownShown",{dropdown:$dropdown,key:key,button:$button})}var hdlHideDropDown=$.proxy(function(e){this.dropdownHide(e,$dropdown)},this);$(document).one("click",hdlHideDropDown),this.$editor.one("click",hdlHideDropDown),this.$editor.one("touchstart",hdlHideDropDown),e.stopPropagation(),this.focusWithSaveScroll()},dropdownHideAll:function(){this.$toolbar.find("a.dropact").removeClass("redactor_act").removeClass("dropact"),$(".redactor_dropdown").hide(),this.callback("dropdownHide")},dropdownHide:function(e,$dropdown){$(e.target).hasClass("dropact")||($dropdown.removeClass("dropact"),this.dropdownHideAll())},buttonBuild:function(btnName,btnObject,buttonImage){var $button=$('<a href="javascript:;" title="'+btnObject.title+'" tabindex="-1" class="re-icon re-'+btnName+'"></a>');if("undefined"!=typeof buttonImage&&$button.addClass("redactor-btn-image"),$button.on("click",$.proxy(function(e){return e.preventDefault&&e.preventDefault(),this.browser("msie")&&(e.returnValue=!1),$button.hasClass("redactor_button_disabled")?!1:(this.isFocused()!==!1||btnObject.exec||this.focusWithSaveScroll(),btnObject.exec?(this.focusWithSaveScroll(),this.execCommand(btnObject.exec,btnName),this.airBindMousemoveHide()):btnObject.func&&"show"!==btnObject.func?(this[btnObject.func](btnName),this.airBindMousemoveHide()):btnObject.callback?(btnObject.callback.call(this,btnName,$button,btnObject,e),this.airBindMousemoveHide()):btnObject.dropdown&&this.dropdownShow(e,btnName),void this.buttonActiveObserver(!1,btnName))},this)),btnObject.dropdown){var $dropdown=$('<div class="redactor_dropdown redactor_dropdown_box_'+btnName+'" style="display: none;">');$button.data("dropdown",$dropdown),this.dropdownBuild($dropdown,btnObject.dropdown)}return $button},buttonGet:function(key){return this.opts.toolbar?$(this.$toolbar.find("a.re-"+key)):!1},buttonTagToActiveState:function(buttonName,tagName){this.opts.activeButtons.push(buttonName),this.opts.activeButtonsStates[tagName]=buttonName},buttonActiveToggle:function(key){var btn=this.buttonGet(key);btn.hasClass("redactor_act")?this.buttonInactive(key):this.buttonActive(key)},buttonActive:function(key){var btn=this.buttonGet(key);btn.addClass("redactor_act")},buttonInactive:function(key){var btn=this.buttonGet(key);btn.removeClass("redactor_act")},buttonInactiveAll:function(btnName){this.$toolbar.find("a.re-icon").not(".re-"+btnName).removeClass("redactor_act")},buttonActiveVisual:function(){this.$toolbar.find("a.re-icon").not("a.re-html").removeClass("redactor_button_disabled")},buttonInactiveVisual:function(){this.$toolbar.find("a.re-icon").not("a.re-html").addClass("redactor_button_disabled")},buttonChangeIcon:function(key,classname){this.buttonGet(key).addClass("re-"+classname)},buttonRemoveIcon:function(key,classname){this.buttonGet(key).removeClass("re-"+classname)},buttonAwesome:function(key,name){var button=this.buttonGet(key);button.removeClass("redactor-btn-image"),button.addClass("fa-redactor-btn"),button.html('<i class="fa '+name+'"></i>')},buttonAdd:function(key,title,callback,dropdown){if(this.opts.toolbar){var btn=this.buttonBuild(key,{title:title,callback:callback,dropdown:dropdown},!0);return this.$toolbar.append($("<li>").append(btn)),btn}},buttonAddFirst:function(key,title,callback,dropdown){if(this.opts.toolbar){var btn=this.buttonBuild(key,{title:title,callback:callback,dropdown:dropdown},!0);this.$toolbar.prepend($("<li>").append(btn))}},buttonAddAfter:function(afterkey,key,title,callback,dropdown){if(this.opts.toolbar){var btn=this.buttonBuild(key,{title:title,callback:callback,dropdown:dropdown},!0),$btn=this.buttonGet(afterkey);return 0!==$btn.size()?$btn.parent().after($("<li>").append(btn)):this.$toolbar.append($("<li>").append(btn)),btn}},buttonAddBefore:function(beforekey,key,title,callback,dropdown){if(this.opts.toolbar){var btn=this.buttonBuild(key,{title:title,callback:callback,dropdown:dropdown},!0),$btn=this.buttonGet(beforekey);return 0!==$btn.size()?$btn.parent().before($("<li>").append(btn)):this.$toolbar.append($("<li>").append(btn)),btn}},buttonRemove:function(key){var $btn=this.buttonGet(key);$btn.remove()},buttonActiveObserver:function(e,btnName){var parent=this.getParent();if(this.buttonInactiveAll(btnName),e===!1&&"html"!==btnName)return void(-1!=$.inArray(btnName,this.opts.activeButtons)&&this.buttonActiveToggle(btnName));parent&&"A"===parent.tagName?this.$toolbar.find("a.redactor_dropdown_link").text(this.opts.curLang.link_edit):this.$toolbar.find("a.redactor_dropdown_link").text(this.opts.curLang.link_insert),$.each(this.opts.activeButtonsStates,$.proxy(function(key,value){0!=$(parent).closest(key,this.$editor.get()[0]).length&&this.buttonActive(value)},this));var $parent=$(parent).closest(this.opts.alignmentTags.toString().toLowerCase(),this.$editor[0]);if($parent.length){var align=$parent.css("text-align");""==align&&(align="left"),this.buttonActive("align"+align)}},execPasteFrag:function(html){var sel=this.getSelection();if(sel.getRangeAt&&sel.rangeCount){var range=this.getRange();range.deleteContents();var el=this.document.createElement("div");el.innerHTML=html;for(var node,lastNode,frag=this.document.createDocumentFragment();node=el.firstChild;)lastNode=frag.appendChild(node);frag.firstChild;range.insertNode(frag),lastNode&&(range=range.cloneRange(),range.setStartAfter(lastNode),range.collapse(!0)),sel.removeAllRanges(),sel.addRange(range)}},exec:function(cmd,param,sync){"formatblock"===cmd&&this.browser("msie")&&(param="<"+param+">"),"inserthtml"===cmd&&this.browser("msie")?this.isIe11()?this.execPasteFrag(param):(this.focusWithSaveScroll(),this.document.selection.createRange().pasteHTML(param)):this.document.execCommand(cmd,!1,param),sync!==!1&&this.sync(),this.callback("execCommand",cmd,param)},execCommand:function(cmd,param,sync){if(!this.opts.visual)return this.$source.focus(),!1;if(("bold"===cmd||"italic"===cmd||"underline"===cmd||"strikethrough"===cmd)&&this.bufferSet(),"superscript"===cmd||"subscript"===cmd){var parent=this.getParent();("SUP"===parent.tagName||"SUB"===parent.tagName)&&this.inlineRemoveFormatReplace(parent)}return"inserthtml"===cmd?(this.insertHtml(param,sync),void this.callback("execCommand",cmd,param)):this.currentOrParentIs("PRE")&&!this.opts.formattingPre?!1:"insertunorderedlist"===cmd||"insertorderedlist"===cmd?this.execLists(cmd,param):"unlink"===cmd?this.execUnlink(cmd,param):(this.exec(cmd,param,sync),void("inserthorizontalrule"===cmd&&this.$editor.find("hr").removeAttr("id")))},execUnlink:function(cmd,param){this.bufferSet();var link=this.currentOrParentIs("A");return link?($(link).replaceWith($(link).text()),this.sync(),void this.callback("execCommand",cmd,param)):void 0},execLists:function(cmd,param){this.bufferSet();var parent=this.getParent(),$list=$(parent).closest("ol, ul");this.isParentRedactor($list)||0==$list.size()||($list=!1);var remove=!1;if($list&&$list.length){remove=!0;var listTag=$list[0].tagName;("insertunorderedlist"===cmd&&"OL"===listTag||"insertorderedlist"===cmd&&"UL"===listTag)&&(remove=!1)}if(this.selectionSave(),remove){var nodes=this.getNodes(),elems=this.getBlocks(nodes);"undefined"!=typeof nodes[0]&&nodes.length>1&&3==nodes[0].nodeType&&elems.unshift(this.getBlock());var data="",replaced="";$.each(elems,$.proxy(function(i,s){if("LI"==s.tagName){var $s=$(s),cloned=$s.clone();if(cloned.find("ul","ol").remove(),this.opts.linebreaks===!1)data+=this.outerHtml($("<p>").append(cloned.contents()));else{var clonedHtml=cloned.html().replace(/<br\s?\/?>$/i,"");data+=clonedHtml+"<br>"}0==i?($s.addClass("redactor-replaced").empty(),replaced=this.outerHtml($s)):$s.remove()}},this)),html=this.$editor.html().replace(replaced,"</"+listTag+">"+data+"<"+listTag+">"),this.$editor.html(html),this.$editor.find(listTag+":empty").remove()}else{var firstParent=$(this.getParent()).closest("td");if(this.browser("msie")&&!this.isIe11()&&this.opts.linebreaks){var wrapper=this.selectionWrap("div"),wrapperHtml=$(wrapper).html(),tmpList=$("<ul>");"insertorderedlist"==cmd&&(tmpList=$("<ol>"));var tmpLi=$("<li>");""==$.trim(wrapperHtml)?(tmpLi.append(wrapperHtml+'<span id="selection-marker-1">'+this.opts.invisibleSpace+"</span>"),tmpList.append(tmpLi),this.$editor.find("#selection-marker-1").replaceWith(tmpList)):(tmpLi.append(wrapperHtml),tmpList.append(tmpLi),$(wrapper).replaceWith(tmpList))}else this.document.execCommand(cmd);var parent=this.getParent(),$list=$(parent).closest("ol, ul");if(this.opts.linebreaks===!1){var listText=$.trim($list.text());""==listText&&($list.children("li").find("br").remove(),$list.children("li").append('<span id="selection-marker-1">'+this.opts.invisibleSpace+"</span>"))}if(0!=firstParent.size()&&$list.wrapAll("<td>"),$list.length){var $listParent=$list.parent();this.isParentRedactor($listParent)&&"LI"!=$listParent[0].tagName&&this.nodeTestBlocks($listParent[0])&&$listParent.replaceWith($listParent.contents())}this.browser("mozilla")&&this.$editor.focus()}this.selectionRestore(),this.$editor.find("#selection-marker-1").removeAttr("id"),this.sync(),this.callback("execCommand",cmd,param)},indentingIndent:function(){this.indentingStart("indent")},indentingOutdent:function(){this.indentingStart("outdent")},indentingStart:function(cmd){if(this.bufferSet(),"indent"===cmd){var block=this.getBlock();if(this.selectionSave(),block&&"LI"==block.tagName){var parent=this.getParent(),$list=$(parent).closest("ol, ul"),listTag=$list[0].tagName,elems=this.getBlocks();$.each(elems,function(i,s){if("LI"==s.tagName){var $prev=$(s).prev();if(0!=$prev.size()&&"LI"==$prev[0].tagName){var $childList=$prev.children("ul, ol");0==$childList.size()?$prev.append($("<"+listTag+">").append(s)):$childList.append(s)}}})}else if(block===!1&&this.opts.linebreaks===!0){this.exec("formatBlock","blockquote");var newblock=this.getBlock(),block=$('<div data-tagblock="">').html($(newblock).html());$(newblock).replaceWith(block);var left=this.normalize($(block).css("margin-left"))+this.opts.indentValue;$(block).css("margin-left",left+"px")}else{var elements=this.getBlocks();$.each(elements,$.proxy(function(i,elem){var $el=!1;if("TD"!==elem.tagName){$el=-1!==$.inArray(elem.tagName,this.opts.alignmentTags)?$(elem):$(elem).closest(this.opts.alignmentTags.toString().toLowerCase(),this.$editor[0]);var left=this.normalize($el.css("margin-left"))+this.opts.indentValue;$el.css("margin-left",left+"px")}},this))}this.selectionRestore()}else{this.selectionSave();var block=this.getBlock();if(block&&"LI"==block.tagName){var elems=this.getBlocks(),index=0;this.insideOutdent(block,index,elems)}else{var elements=this.getBlocks();$.each(elements,$.proxy(function(i,elem){var $el=!1;$el=-1!==$.inArray(elem.tagName,this.opts.alignmentTags)?$(elem):$(elem).closest(this.opts.alignmentTags.toString().toLowerCase(),this.$editor[0]);var left=this.normalize($el.css("margin-left"))-this.opts.indentValue;0>=left?this.opts.linebreaks===!0&&"undefined"!=typeof $el.data("tagblock")?$el.replaceWith($el.html()+"<br>"):($el.css("margin-left",""),this.removeEmptyAttr($el,"style")):$el.css("margin-left",left+"px")},this))}this.selectionRestore()}this.sync()},insideOutdent:function(li,index,elems){if(li&&"LI"==li.tagName){var $parent=$(li).parent().parent();0!=$parent.size()&&"LI"==$parent[0].tagName?$parent.after(li):"undefined"!=typeof elems[index]?(li=elems[index],index++,this.insideOutdent(li,index,elems)):this.execCommand("insertunorderedlist")}},alignmentLeft:function(){this.alignmentSet("","JustifyLeft")},alignmentRight:function(){this.alignmentSet("right","JustifyRight")},alignmentCenter:function(){this.alignmentSet("center","JustifyCenter")},alignmentJustify:function(){this.alignmentSet("justify","JustifyFull")},alignmentSet:function(type,cmd){if(this.bufferSet(),this.oldIE())return this.document.execCommand(cmd,!1,!1),!0;this.selectionSave();var block=this.getBlock();if(!block&&this.opts.linebreaks){this.exec("formatblock","div");var newblock=this.getBlock(),block=$('<div data-tagblock="">').html($(newblock).html());$(newblock).replaceWith(block),$(block).css("text-align",type),this.removeEmptyAttr(block,"style"),""==type&&"undefined"!=typeof $(block).data("tagblock")&&$(block).replaceWith($(block).html())}else{var elements=this.getBlocks();$.each(elements,$.proxy(function(i,elem){var $el=!1;$el=-1!==$.inArray(elem.tagName,this.opts.alignmentTags)?$(elem):$(elem).closest(this.opts.alignmentTags.toString().toLowerCase(),this.$editor[0]),$el&&($el.css("text-align",type),this.removeEmptyAttr($el,"style"))},this))}this.selectionRestore(),this.sync()},cleanEmpty:function(html){var ph=this.placeholderStart(html);return ph!==!1?ph:(this.opts.linebreaks===!1&&(""===html?html=this.opts.emptyHtml:-1!==html.search(/^<hr\s?\/?>$/gi)&&(html="<hr>"+this.opts.emptyHtml)),html)},cleanConverters:function(html){return this.opts.convertDivs&&!this.opts.gallery&&(html=html.replace(/<div(.*?)>([\w\W]*?)<\/div>/gi,"<p$1>$2</p>")),this.opts.paragraphy&&(html=this.cleanParagraphy(html)),html},cleanConvertProtected:function(html){return this.opts.templateVars&&(html=html.replace(/\{\{(.*?)\}\}/gi,"<!-- template double $1 -->"),html=html.replace(/\{(.*?)\}/gi,"<!-- template $1 -->")),html=html.replace(/<script(.*?)>([\w\W]*?)<\/script>/gi,'<title type="text/javascript" style="display: none;" class="redactor-script-tag"$1>$2</title>'),html=html.replace(/<style(.*?)>([\w\W]*?)<\/style>/gi,'<section$1 style="display: none;" rel="redactor-style-tag">$2</section>'),html=html.replace(/<form(.*?)>([\w\W]*?)<\/form>/gi,'<section$1 rel="redactor-form-tag">$2</section>'),html=this.opts.phpTags?html.replace(/<\?php([\w\W]*?)\?>/gi,'<section style="display: none;" rel="redactor-php-tag">$1</section>'):html.replace(/<\?php([\w\W]*?)\?>/gi,"")},cleanReConvertProtected:function(html){return this.opts.templateVars&&(html=html.replace(/<!-- template double (.*?) -->/gi,"{{$1}}"),html=html.replace(/<!-- template (.*?) -->/gi,"{$1}")),html=html.replace(/<title type="text\/javascript" style="display: none;" class="redactor-script-tag"(.*?)>([\w\W]*?)<\/title>/gi,'<script$1 type="text/javascript">$2</script>'),html=html.replace(/<section(.*?) style="display: none;" rel="redactor-style-tag">([\w\W]*?)<\/section>/gi,"<style$1>$2</style>"),html=html.replace(/<section(.*?)rel="redactor-form-tag"(.*?)>([\w\W]*?)<\/section>/gi,"<form$1$2>$3</form>"),this.opts.phpTags&&(html=html.replace(/<section style="display: none;" rel="redactor-php-tag">([\w\W]*?)<\/section>/gi,"<?php\r\n$1\r\n?>")),html},cleanRemoveSpaces:function(html,buffer){if(buffer!==!1){var buffer=[],matches=html.match(/<(pre|style|script|title)(.*?)>([\w\W]*?)<\/(pre|style|script|title)>/gi);if(null===matches&&(matches=[]),this.opts.phpTags){var phpMatches=html.match(/<\?php([\w\W]*?)\?>/gi);phpMatches&&(matches=$.merge(matches,phpMatches))}matches&&$.each(matches,function(i,s){html=html.replace(s,"buffer_"+i),buffer.push(s)})}return html=html.replace(/\n/g," "),html=html.replace(/[\t]*/g,""),html=html.replace(/\n\s*\n/g,"\n"),html=html.replace(/^[\s\n]*/g," "),html=html.replace(/[\s\n]*$/g," "),html=html.replace(/>\s{2,}</g,"> <"),html=this.cleanReplacer(html,buffer),html=html.replace(/\n\n/g,"\n")},cleanReplacer:function(html,buffer){return buffer===!1?html:($.each(buffer,function(i,s){html=html.replace("buffer_"+i,s)}),html)},cleanRemoveEmptyTags:function(html){html=html.replace(/[\u200B-\u200D\uFEFF]/g,"");var etagsInline=["<b>\\s*</b>","<b> </b>","<em>\\s*</em>"],etags=["<pre></pre>","<blockquote>\\s*</blockquote>","<dd></dd>","<dt></dt>","<ul></ul>","<ol></ol>","<li></li>","<table></table>","<tr></tr>","<span>\\s*<span>","<span> <span>","<p>\\s*</p>","<p></p>","<p> </p>","<p>\\s*<br>\\s*</p>","<div>\\s*</div>","<div>\\s*<br>\\s*</div>"];etags=this.opts.removeEmptyTags?etags.concat(etagsInline):etagsInline;for(var len=etags.length,i=0;len>i;++i)html=html.replace(new RegExp(etags[i],"gi"),"");return html},cleanParagraphy:function(html){function R(str,mod,r){return html.replace(new RegExp(str,mod),r)}if(html=$.trim(html),this.opts.linebreaks===!0)return html;if(""===html||"<p></p>"===html)return this.opts.emptyHtml;if(html+="\n",this.opts.removeEmptyTags===!1)return html;var safes=[],matches=html.match(/<(table|div|pre|object)(.*?)>([\w\W]*?)<\/(table|div|pre|object)>/gi);matches||(matches=[]);var commentsMatches=html.match(/<!--([\w\W]*?)-->/gi);if(commentsMatches&&(matches=$.merge(matches,commentsMatches)),this.opts.phpTags){var phpMatches=html.match(/<section(.*?)rel="redactor-php-tag">([\w\W]*?)<\/section>/gi);phpMatches&&(matches=$.merge(matches,phpMatches))}matches&&$.each(matches,function(i,s){safes[i]=s,html=html.replace(s,"{replace"+i+"}\n")}),html=html.replace(/<br \/>\s*<br \/>/gi,"\n\n"),html=html.replace(/<br><br>/gi,"\n\n");var blocks="(comment|html|body|head|title|meta|style|script|link|iframe|table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|option|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)";html=R("(<"+blocks+"[^>]*>)","gi","\n$1"),html=R("(</"+blocks+">)","gi","$1\n\n"),html=R("\r\n","g","\n"),html=R("\r","g","\n"),html=R("/\n\n+/","g","\n\n");var htmls=html.split(new RegExp("\ns*\n","g"),-1);html="";for(var i in htmls)htmls.hasOwnProperty(i)&&(-1==htmls[i].search("{replace")?(htmls[i]=htmls[i].replace(/<p>\n\t?<\/p>/gi,""),htmls[i]=htmls[i].replace(/<p><\/p>/gi,""),""!=htmls[i]&&(html+="<p>"+htmls[i].replace(/^\n+|\n+$/g,"")+"</p>")):html+=htmls[i]);return html=R("<p><p>","gi","<p>"),html=R("</p></p>","gi","</p>"),html=R("<p>s?</p>","gi",""),html=R("<p>([^<]+)</(div|address|form)>","gi","<p>$1</p></$2>"),html=R("<p>(</?"+blocks+"[^>]*>)</p>","gi","$1"),html=R("<p>(<li.+?)</p>","gi","$1"),html=R("<p>s?(</?"+blocks+"[^>]*>)","gi","$1"),html=R("(</?"+blocks+"[^>]*>)s?</p>","gi","$1"),html=R("(</?"+blocks+"[^>]*>)s?<br />","gi","$1"),html=R("<br />(s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)","gi","$1"),html=R("\n</p>","gi","</p>"),html=R("<li><p>","gi","<li>"),html=R("</p></li>","gi","</li>"),html=R("</li><p>","gi","</li>"),html=R("<p> ?\n?<p>","gi","<p>"),html=R("</dt><p>","gi","</dt>"),html=R("</dd><p>","gi","</dd>"),html=R("<br></p></blockquote>","gi","</blockquote>"),html=R("<p> *</p>","gi",""),$.each(safes,function(i,s){html=html.replace("{replace"+i+"}",s)}),$.trim(html)},cleanConvertInlineTags:function(html,set){var boldTag="strong";"b"===this.opts.boldTag&&(boldTag="b");var italicTag="em";return"i"===this.opts.italicTag&&(italicTag="i"),html=html.replace(/<span style="font-style: italic;">([\w\W]*?)<\/span>/gi,"<"+italicTag+">$1</"+italicTag+">"),html=html.replace(/<span style="font-weight: bold;">([\w\W]*?)<\/span>/gi,"<"+boldTag+">$1</"+boldTag+">"),html="strong"===this.opts.boldTag?html.replace(/<b>([\w\W]*?)<\/b>/gi,"<strong>$1</strong>"):html.replace(/<strong>([\w\W]*?)<\/strong>/gi,"<b>$1</b>"),html="em"===this.opts.italicTag?html.replace(/<i>([\w\W]*?)<\/i>/gi,"<em>$1</em>"):html.replace(/<em>([\w\W]*?)<\/em>/gi,"<i>$1</i>"),html=html.replace(/<span style="text-decoration: underline;">([\w\W]*?)<\/span>/gi,"<u>$1</u>"),html=set!==!0?html.replace(/<strike>([\w\W]*?)<\/strike>/gi,"<del>$1</del>"):html.replace(/<del>([\w\W]*?)<\/del>/gi,"<strike>$1</strike>")},cleanStripTags:function(html){if(""==html||"undefined"==typeof html)return html;var allowed=!1;this.opts.allowedTags!==!1&&(allowed=!0);var arr=allowed===!0?this.opts.allowedTags:this.opts.deniedTags,tags=/<\/?([a-z][a-z0-9]*)\b[^>]*>/gi;return html=html.replace(tags,function($0,$1){return allowed===!0?$.inArray($1.toLowerCase(),arr)>"-1"?$0:"":$.inArray($1.toLowerCase(),arr)>"-1"?"":$0}),html=this.cleanConvertInlineTags(html)},cleanSavePreCode:function(html,encode){var pre=html.match(/<(pre|code)(.*?)>([\w\W]*?)<\/(pre|code)>/gi);return null!==pre&&$.each(pre,$.proxy(function(i,s){var arr=s.match(/<(pre|code)(.*?)>([\w\W]*?)<\/(pre|code)>/i);
arr[3]=arr[3].replace(/ /g," "),encode!==!1&&(arr[3]=this.cleanEncodeEntities(arr[3])),arr[3]=arr[3].replace(/\$/g,"$"),html=html.replace(s,"<"+arr[1]+arr[2]+">"+arr[3]+"</"+arr[1]+">")},this)),html},cleanEncodeEntities:function(str){return str=String(str).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"'),str.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")},cleanUnverified:function(){var $elem=this.$editor.find("li, img, a, b, strong, sub, sup, i, em, u, small, strike, del, span, cite");$elem.filter('[style*="background-color: transparent;"][style*="line-height"]').css("background-color","").css("line-height",""),$elem.filter('[style*="background-color: transparent;"]').css("background-color",""),$elem.css("line-height",""),$.each($elem,$.proxy(function(i,s){this.removeEmptyAttr(s,"style")},this));var $elem2=this.$editor.find("b, strong, i, em, u, strike, del");$elem2.css("font-size",""),$.each($elem2,$.proxy(function(i,s){this.removeEmptyAttr(s,"style")},this)),this.$editor.find('div[style="text-align: -webkit-auto;"]').contents().unwrap(),this.$editor.find("ul, ol, li").removeAttr("style")},cleanHtml:function(code){var i=0,codeLength=code.length,point=0,start=null,end=null,tag="",out="",cont="";for(this.cleanlevel=0;codeLength>i;i++){if(point=i,-1==code.substr(i).indexOf("<"))return out+=code.substr(i),this.cleanFinish(out);for(;codeLength>point&&"<"!=code.charAt(point);)point++;for(i!=point&&(cont=code.substr(i,point-i),cont.match(/^\s{2,}$/g)||("\n"==out.charAt(out.length-1)?out+=this.cleanGetTabs():"\n"==cont.charAt(0)&&(out+="\n"+this.cleanGetTabs(),cont=cont.replace(/^\s+/,"")),out+=cont),cont.match(/\n/)&&(out+="\n"+this.cleanGetTabs())),start=point;codeLength>point&&">"!=code.charAt(point);)point++;tag=code.substr(start,point-start),i=point;var t;if("!--"==tag.substr(1,3)){if(!tag.match(/--$/)){for(;"-->"!=code.substr(point,3);)point++;point+=2,tag=code.substr(start,point-start),i=point}"\n"!=out.charAt(out.length-1)&&(out+="\n"),out+=this.cleanGetTabs(),out+=tag+">\n"}else"!"==tag[1]?out=this.placeTag(tag+">",out):"?"==tag[1]?out+=tag+">\n":(t=tag.match(/^<(script|style|pre)/i))?(t[1]=t[1].toLowerCase(),tag=this.cleanTag(tag),out=this.placeTag(tag,out),end=String(code.substr(i+1)).toLowerCase().indexOf("</"+t[1]),end&&(cont=code.substr(i+1,end),i+=end,out+=cont)):(tag=this.cleanTag(tag),out=this.placeTag(tag,out))}return this.cleanFinish(out)},cleanGetTabs:function(){for(var s="",j=0;j<this.cleanlevel;j++)s+=" ";return s},cleanFinish:function(code){return code=code.replace(/\n\s*\n/g,"\n"),code=code.replace(/^[\s\n]*/,""),code=code.replace(/[\s\n]*$/,""),code=code.replace(/<script(.*?)>\n<\/script>/gi,"<script$1></script>"),this.cleanlevel=0,code},cleanTag:function(tag){var tagout="";tag=tag.replace(/\n/g," "),tag=tag.replace(/\s{2,}/g," "),tag=tag.replace(/^\s+|\s+$/g," ");var suffix="";tag.match(/\/$/)&&(suffix="/",tag=tag.replace(/\/+$/,""));for(var m;m=/\s*([^= ]+)(?:=((['"']).*?\3|[^ ]+))?/.exec(tag);)m[2]?tagout+=m[1].toLowerCase()+"="+m[2]:m[1]&&(tagout+=m[1].toLowerCase()),tagout+=" ",tag=tag.substr(m[0].length);return tagout.replace(/\s*$/,"")+suffix+">"},placeTag:function(tag,out){var nl=tag.match(this.cleannewLevel);return(tag.match(this.cleanlineBefore)||nl)&&(out=out.replace(/\s*$/,""),out+="\n"),nl&&"/"==tag.charAt(1)&&this.cleanlevel--,"\n"==out.charAt(out.length-1)&&(out+=this.cleanGetTabs()),nl&&"/"!=tag.charAt(1)&&this.cleanlevel++,out+=tag,(tag.match(this.cleanlineAfter)||tag.match(this.cleannewLevel))&&(out=out.replace(/ *$/,""),out+="\n"),out},formatEmpty:function(e){var html=$.trim(this.$editor.html());if(this.opts.linebreaks)""==html&&(e.preventDefault(),this.$editor.html(""),this.focus());else{html=html.replace(/<br\s?\/?>/i,"");var thtml=html.replace(/<p>\s?<\/p>/gi,"");if(""===html||""===thtml){e.preventDefault();var node=$(this.opts.emptyHtml).get(0);this.$editor.html(node),this.focus()}}this.sync()},formatBlocks:function(tag){this.browser("mozilla")&&this.isFocused()&&this.$editor.focus(),this.bufferSet();var nodes=this.getBlocks();this.selectionSave(),$.each(nodes,$.proxy(function(i,node){if("LI"!==node.tagName){var parent=$(node).parent();if("p"===tag){if("P"===node.tagName&&0!=parent.size()&&"BLOCKQUOTE"===parent[0].tagName||"BLOCKQUOTE"===node.tagName)return void this.formatQuote();if(this.opts.linebreaks){if(!node||0!=node.tagName.search(/H[1-6]/))return;$(node).replaceWith(node.innerHTML+"<br>")}else this.formatBlock(tag,node)}else this.formatBlock(tag,node)}},this)),this.selectionRestore(),this.sync()},formatBlock:function(tag,block){if(block===!1&&(block=this.getBlock()),block===!1&&this.opts.linebreaks===!0)return this.execCommand("formatblock",tag),!0;var contents="";if("pre"!==tag?contents=$(block).contents():(contents=$(block).html(),""===$.trim(contents)&&(contents='<span id="selection-marker-1"></span>')),"PRE"===block.tagName&&(tag="p"),this.opts.linebreaks===!0&&"p"===tag)$(block).replaceWith($("<div>").append(contents).html()+"<br>");else{var parent=this.getParent(),node=$("<"+tag+">").append(contents);$(block).replaceWith(node),parent&&"TD"==parent.tagName&&$(node).wrapAll("<td>")}},formatChangeTag:function(fromElement,toTagName,save){save!==!1&&this.selectionSave();var newElement=$("<"+toTagName+"/>");return $(fromElement).replaceWith(function(){return newElement.append($(this).contents())}),save!==!1&&this.selectionRestore(),newElement},formatQuote:function(){if(this.browser("mozilla")&&this.isFocused()&&this.$editor.focus(),this.bufferSet(),this.opts.linebreaks===!1){this.selectionSave();var blocks=this.getBlocks(),blockquote=!1,blocksLen=blocks.length;if(blocks){var data="",replaced="",replace=!1,paragraphsOnly=!0;if($.each(blocks,function(i,s){"P"!==s.tagName&&(paragraphsOnly=!1)}),$.each(blocks,$.proxy(function(i,s){if("BLOCKQUOTE"===s.tagName)this.formatBlock("p",s,!1);else if("P"===s.tagName)if(blockquote=$(s).parent(),"BLOCKQUOTE"==blockquote[0].tagName){var count=$(blockquote).children("p").size();1==count?$(blockquote).replaceWith(s):count==blocksLen?(replace="blockquote",data+=this.outerHtml(s)):(replace="html",data+=this.outerHtml(s),0==i?($(s).addClass("redactor-replaced").empty(),replaced=this.outerHtml(s)):$(s).remove())}else paragraphsOnly===!1||1==blocks.length?this.formatBlock("blockquote",s,!1):(replace="paragraphs",data+=this.outerHtml(s));else"LI"!==s.tagName&&this.formatBlock("blockquote",s,!1)},this)),replace)if("paragraphs"==replace)$(blocks[0]).replaceWith("<blockquote>"+data+"</blockquote>"),$(blocks).remove();else if("blockquote"==replace)$(blockquote).replaceWith(data);else if("html"==replace){var html=this.$editor.html().replace(replaced,"</blockquote>"+data+"<blockquote>");this.$editor.html(html),this.$editor.find("blockquote").each(function(){""==$.trim($(this).html())&&$(this).remove()})}}this.selectionRestore()}else{var block=this.getBlock();if("BLOCKQUOTE"===block.tagName){this.selectionSave();var html=$.trim($(block).html()),selection=$.trim(this.getSelectionHtml());if(html=html.replace(/<span(.*?)id="selection-marker(.*?)<\/span>/gi,""),html==selection)$(block).replaceWith($(block).html()+"<br>");else{this.inlineFormat("tmp");var tmp=this.$editor.find("tmp");tmp.empty();var newhtml=this.$editor.html().replace("<tmp></tmp>",'</blockquote><span id="selection-marker-1">'+this.opts.invisibleSpace+"</span>"+selection+"<blockquote>");this.$editor.html(newhtml),tmp.remove(),this.$editor.find("blockquote").each(function(){""==$.trim($(this).html())&&$(this).remove()})}this.selectionRestore(),this.$editor.find("span#selection-marker-1").attr("id",!1)}else{var wrapper=this.selectionWrap("blockquote"),html=$(wrapper).html(),blocksElemsRemove=["ul","ol","table","tr","tbody","thead","tfoot","dl"];$.each(blocksElemsRemove,function(i,s){html=html.replace(new RegExp("<"+s+"(.*?)>","gi"),""),html=html.replace(new RegExp("</"+s+">","gi"),"")});var blocksElems=this.opts.blockLevelElements;$.each(blocksElems,function(i,s){html=html.replace(new RegExp("<"+s+"(.*?)>","gi"),""),html=html.replace(new RegExp("</"+s+">","gi"),"<br>")}),$(wrapper).html(html),this.selectionElement(wrapper);var next=$(wrapper).next();0!=next.size()&&"BR"===next[0].tagName&&next.remove()}}this.sync()},blockRemoveAttr:function(attr,value){var nodes=this.getBlocks();$(nodes).removeAttr(attr),this.sync()},blockSetAttr:function(attr,value){var nodes=this.getBlocks();$(nodes).attr(attr,value),this.sync()},blockRemoveStyle:function(rule){var nodes=this.getBlocks();$(nodes).css(rule,""),this.removeEmptyAttr(nodes,"style"),this.sync()},blockSetStyle:function(rule,value){var nodes=this.getBlocks();$(nodes).css(rule,value),this.sync()},blockRemoveClass:function(className){var nodes=this.getBlocks();$(nodes).removeClass(className),this.removeEmptyAttr(nodes,"class"),this.sync()},blockSetClass:function(className){var nodes=this.getBlocks();$(nodes).addClass(className),this.sync()},inlineRemoveClass:function(className){this.selectionSave(),this.inlineEachNodes(function(node){$(node).removeClass(className),this.removeEmptyAttr(node,"class")}),this.selectionRestore(),this.sync()},inlineSetClass:function(className){var current=this.getCurrent();$(current).hasClass(className)||this.inlineMethods("addClass",className)},inlineRemoveStyle:function(rule){this.selectionSave(),this.inlineEachNodes(function(node){$(node).css(rule,""),this.removeEmptyAttr(node,"style")}),this.selectionRestore(),this.sync()},inlineSetStyle:function(rule,value){this.inlineMethods("css",rule,value)},inlineRemoveAttr:function(attr){this.selectionSave();var range=this.getRange(),node=this.getElement(),nodes=this.getNodes();(range.collapsed||range.startContainer===range.endContainer&&node)&&(nodes=$(node)),$(nodes).removeAttr(attr),this.inlineUnwrapSpan(),this.selectionRestore(),this.sync()},inlineSetAttr:function(attr,value){this.inlineMethods("attr",attr,value)},inlineMethods:function(type,attr,value){this.bufferSet(),this.selectionSave();var range=this.getRange(),el=this.getElement();if(!range.collapsed&&range.startContainer!==range.endContainer||!el||this.nodeTestBlocks(el)){var cmd,arg=value;switch(attr){case"font-size":cmd="fontSize",arg=4;break;case"font-family":cmd="fontName";break;case"color":cmd="foreColor";break;case"background-color":cmd="backColor"}this.document.execCommand(cmd,!1,arg);var fonts=this.$editor.find("font");$.each(fonts,$.proxy(function(i,s){this.inlineSetMethods(type,s,attr,value)},this))}else $(el)[type](attr,value);this.selectionRestore(),this.sync()},inlineSetMethods:function(type,s,attr,value){var el,parent=$(s).parent(),selectionHtml=this.getSelectionText(),parentHtml=$(parent).text(),selected=selectionHtml==parentHtml;return selected&&parent&&"INLINE"===parent[0].tagName&&0!=parent[0].attributes.length?(el=parent,$(s).replaceWith($(s).html())):(el=$("<inline>").append($(s).contents()),$(s).replaceWith(el)),$(el)[type](attr,value),el},inlineEachNodes:function(callback){var collapsed,range=this.getRange(),node=this.getElement(),nodes=this.getNodes();(range.collapsed||range.startContainer===range.endContainer&&node)&&(nodes=$(node),collapsed=!0),$.each(nodes,$.proxy(function(i,node){if(!collapsed&&"INLINE"!==node.tagName){var selectionHtml=this.getSelectionText(),parentHtml=$(node).parent().text(),selected=selectionHtml==parentHtml;if(!selected||"INLINE"!==node.parentNode.tagName||$(node.parentNode).hasClass("redactor_editor"))return;node=node.parentNode}callback.call(this,node)},this))},inlineUnwrapSpan:function(){var $spans=this.$editor.find("inline");$.each($spans,$.proxy(function(i,span){var $span=$(span);void 0===$span.attr("class")&&void 0===$span.attr("style")&&$span.contents().unwrap()},this))},inlineFormat:function(tag){this.selectionSave(),this.document.execCommand("fontSize",!1,4);var last,fonts=this.$editor.find("font");$.each(fonts,function(i,s){var el=$("<"+tag+"/>").append($(s).contents());$(s).replaceWith(el),last=el}),this.selectionRestore(),this.sync()},inlineRemoveFormat:function(tag){this.selectionSave();var utag=tag.toUpperCase(),nodes=this.getNodes(),parent=$(this.getParent()).parent();$.each(nodes,function(i,s){s.tagName===utag&&this.inlineRemoveFormatReplace(s)}),parent&&parent[0].tagName===utag&&this.inlineRemoveFormatReplace(parent),this.selectionRestore(),this.sync()},inlineRemoveFormatReplace:function(el){$(el).replaceWith($(el).contents())},insertHtml:function(html,sync){var current=this.getCurrent(),parent=current.parentNode;this.focusWithSaveScroll(),this.bufferSet();var $html=$("<div>").append($.parseHTML(html));html=$html.html(),html=this.cleanRemoveEmptyTags(html),$html=$("<div>").append($.parseHTML(html));var currBlock=this.getBlock();if(1==$html.contents().length){var htmlTagName=$html.contents()[0].tagName;("P"!=htmlTagName&&htmlTagName==currBlock.tagName||"PRE"==htmlTagName)&&($html=$("<div>").append(html))}this.opts.linebreaks&&(html=html.replace(/<p(.*?)>([\w\W]*?)<\/p>/gi,"$2<br>")),!this.opts.linebreaks&&1==$html.contents().length&&3==$html.contents()[0].nodeType&&(this.getRangeSelectedNodes().length>2||!current||"BODY"==current.tagName&&!parent||"HTML"==parent.tagName)&&(html="<p>"+html+"</p>"),html=this.setSpansVerifiedHtml(html),$html.contents().length>1&&currBlock||$html.contents().is("p, :header, ul, ol, li, div, table, td, blockquote, pre, address, section, header, footer, aside, article")?this.browser("msie")?this.isIe11()?this.execPasteFrag(html):this.document.selection.createRange().pasteHTML(html):this.document.execCommand("inserthtml",!1,html):this.insertHtmlAdvanced(html,!1),this.selectall&&this.window.setTimeout($.proxy(function(){this.opts.linebreaks?this.focusEnd():this.selectionEnd(this.$editor.contents().last())},this),1),this.observeStart(),this.setNonEditable(),sync!==!1&&this.sync()},insertHtmlAdvanced:function(html,sync){html=this.setSpansVerifiedHtml(html);var sel=this.getSelection();if(sel.getRangeAt&&sel.rangeCount){var range=sel.getRangeAt(0);range.deleteContents();var el=document.createElement("div");el.innerHTML=html;for(var node,lastNode,frag=document.createDocumentFragment();node=el.firstChild;)lastNode=frag.appendChild(node);range.insertNode(frag),lastNode&&(range=range.cloneRange(),range.setStartAfter(lastNode),range.collapse(!0),sel.removeAllRanges(),sel.addRange(range))}sync!==!1&&this.sync()},insertBeforeCursor:function(html){html=this.setSpansVerifiedHtml(html);var node=$(html),space=document.createElement("span");space.innerHTML="";var range=this.getRange();range.insertNode(space),range.insertNode(node[0]),range.collapse(!1);var sel=this.getSelection();sel.removeAllRanges(),sel.addRange(range),this.sync()},insertText:function(html){var $html=$($.parseHTML(html));$html.length&&(html=$html.text()),this.focusWithSaveScroll(),this.browser("msie")?this.isIe11()?this.execPasteFrag(html):this.document.selection.createRange().pasteHTML(html):this.document.execCommand("inserthtml",!1,html),this.sync()},insertNode:function(node){if(node=node[0]||node,"SPAN"==node.tagName){var replacementTag="inline",outer=node.outerHTML,regex=new RegExp("<"+node.tagName,"i"),newTag=outer.replace(regex,"<"+replacementTag);regex=new RegExp("</"+node.tagName,"i"),newTag=newTag.replace(regex,"</"+replacementTag),node=$(newTag)[0]}var sel=this.getSelection();return sel.getRangeAt&&sel.rangeCount&&(range=sel.getRangeAt(0),range.deleteContents(),range.insertNode(node),range.setEndAfter(node),range.setStartAfter(node),sel.removeAllRanges(),sel.addRange(range)),node},insertNodeToCaretPositionFromPoint:function(e,node){var range,x=e.clientX,y=e.clientY;if(this.document.caretPositionFromPoint){var pos=this.document.caretPositionFromPoint(x,y);range=this.getRange(),range.setStart(pos.offsetNode,pos.offset),range.collapse(!0),range.insertNode(node)}else if(this.document.caretRangeFromPoint)range=this.document.caretRangeFromPoint(x,y),range.insertNode(node);else if("undefined"!=typeof document.body.createTextRange){range=this.document.body.createTextRange(),range.moveToPoint(x,y);var endRange=range.duplicate();endRange.moveToPoint(x,y),range.setEndPoint("EndToEnd",endRange),range.select()}},insertAfterLastElement:function(element,parent){if("undefined"!=typeof parent&&(element=parent),this.isEndOfElement()){if(this.opts.linebreaks){var contents=$("<div>").append($.trim(this.$editor.html())).contents(),last=contents.last()[0];if("SPAN"==last.tagName&&""==last.innerHTML&&(last=contents.prev()[0]),this.outerHtml(last)!=this.outerHtml(element))return!1}else if(this.$editor.contents().last()[0]!==element)return!1;this.insertingAfterLastElement(element)}},insertingAfterLastElement:function(element){if(this.bufferSet(),this.opts.linebreaks===!1){var node=$(this.opts.emptyHtml);$(element).after(node),this.selectionStart(node)}else{var node=$('<span id="selection-marker-1">'+this.opts.invisibleSpace+"</span>",this.document)[0];$(element).after(node),$(node).after(this.opts.invisibleSpace),this.selectionRestore(),this.$editor.find("span#selection-marker-1").removeAttr("id")}},insertLineBreak:function(twice){this.selectionSave();var br="<br>";if(1==twice&&(br="<br><br>"),this.browser("mozilla")){var span=$("<span>").html(this.opts.invisibleSpace);this.$editor.find("#selection-marker-1").before(br).before(span).before(this.opts.invisibleSpace),this.setCaretAfter(span[0]),span.remove(),this.selectionRemoveMarkers()}else{var parent=this.getParent();if(parent&&"A"===parent.tagName){var offset=this.getCaretOffset(parent),text=$.trim($(parent).text()).replace(/\n\r\n/g,""),len=text.length;if(offset==len){this.selectionRemoveMarkers();var node=$('<span id="selection-marker-1">'+this.opts.invisibleSpace+"</span>",this.document)[0];return $(parent).after(node),$(node).before(br+(this.browser("webkit")?this.opts.invisibleSpace:"")),this.selectionRestore(),!0}}this.$editor.find("#selection-marker-1").before(br+(this.browser("webkit")?this.opts.invisibleSpace:"")),this.selectionRestore()}},insertDoubleLineBreak:function(){this.insertLineBreak(!0)},replaceLineBreak:function(element){var node=$("<br>"+this.opts.invisibleSpace);$(element).replaceWith(node),this.selectionStart(node)},pasteClean:function(html){if(html=this.callback("pasteBefore",!1,html),this.browser("msie")){var tmp=$.trim(html);0==tmp.search(/^<a(.*?)>(.*?)<\/a>$/i)&&(html=html.replace(/^<a(.*?)>(.*?)<\/a>$/i,"$2"))}if(this.opts.pastePlainText){var tmp=this.document.createElement("div");return html=html.replace(/<br>|<\/H[1-6]>|<\/p>|<\/div>/gi,"\n"),tmp.innerHTML=html,html=tmp.textContent||tmp.innerText,html=$.trim(html),html=html.replace("\n","<br>"),html=this.cleanParagraphy(html),this.pasteInsert(html),!1}var tablePaste=!1;if(this.currentOrParentIs("TD")){tablePaste=!0;var blocksElems=this.opts.blockLevelElements;blocksElems.push("tr"),blocksElems.push("table"),$.each(blocksElems,function(i,s){html=html.replace(new RegExp("<"+s+"(.*?)>","gi"),""),html=html.replace(new RegExp("</"+s+">","gi"),"<br>")})}if(this.currentOrParentIs("PRE"))return html=this.pastePre(html),this.pasteInsert(html),!0;if(html=html.replace(/<img(.*?)v:shapes=(.*?)>/gi,""),html=html.replace(/<p(.*?)class="MsoListParagraphCxSpFirst"([\w\W]*?)<\/p>/gi,"<ul><li$2</li>"),html=html.replace(/<p(.*?)class="MsoListParagraphCxSpMiddle"([\w\W]*?)<\/p>/gi,"<li$2</li>"),html=html.replace(/<p(.*?)class="MsoListParagraphCxSpLast"([\w\W]*?)<\/p>/gi,"<li$2</li></ul>"),html=html.replace(/<p(.*?)class="MsoListParagraph"([\w\W]*?)<\/p>/gi,"<ul><li$2</li></ul>"),html=html.replace(/·/g,""),html=html.replace(/<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi,""),this.opts.cleanSpaces===!0&&(html=html.replace(/( ){2,}/gi," "),html=html.replace(/ /gi," ")),html=html.replace(/<b\sid="internal-source-marker(.*?)">([\w\W]*?)<\/b>/gi,"$2"),html=html.replace(/<b(.*?)id="docs-internal-guid(.*?)">([\w\W]*?)<\/b>/gi,"$3"),html=html.replace(/<span[^>]*(font-style: italic; font-weight: bold|font-weight: bold; font-style: italic)[^>]*>/gi,'<span style="font-weight: bold;"><span style="font-style: italic;">'),html=html.replace(/<span[^>]*font-style: italic[^>]*>/gi,'<span style="font-style: italic;">'),html=html.replace(/<span[^>]*font-weight: bold[^>]*>/gi,'<span style="font-weight: bold;">'),html=html.replace(/<span[^>]*text-decoration: underline[^>]*>/gi,'<span style="text-decoration: underline;">'),html=html.replace(/<td>\u200b*<\/td>/gi,"[td]"),html=html.replace(/<td> <\/td>/gi,"[td]"),html=html.replace(/<td><br><\/td>/gi,"[td]"),html=html.replace(/<td(.*?)colspan="(.*?)"(.*?)>([\w\W]*?)<\/td>/gi,'[td colspan="$2"]$4[/td]'),html=html.replace(/<td(.*?)rowspan="(.*?)"(.*?)>([\w\W]*?)<\/td>/gi,'[td rowspan="$2"]$4[/td]'),html=html.replace(/<a(.*?)href="(.*?)"(.*?)>([\w\W]*?)<\/a>/gi,'[a href="$2"]$4[/a]'),html=html.replace(/<iframe(.*?)>([\w\W]*?)<\/iframe>/gi,"[iframe$1]$2[/iframe]"),html=html.replace(/<video(.*?)>([\w\W]*?)<\/video>/gi,"[video$1]$2[/video]"),html=html.replace(/<audio(.*?)>([\w\W]*?)<\/audio>/gi,"[audio$1]$2[/audio]"),html=html.replace(/<embed(.*?)>([\w\W]*?)<\/embed>/gi,"[embed$1]$2[/embed]"),html=html.replace(/<object(.*?)>([\w\W]*?)<\/object>/gi,"[object$1]$2[/object]"),html=html.replace(/<param(.*?)>/gi,"[param$1]"),html=html.replace(/<img(.*?)>/gi,"[img$1]"),html=html.replace(/ class="(.*?)"/gi,""),html=html.replace(/<(\w+)([\w\W]*?)>/gi,"<$1>"),this.opts.linebreaks?(html=html.replace(/<strong><\/strong>/gi,""),html=html.replace(/<u><\/u>/gi,""),this.opts.cleanFontTag&&(html=html.replace(/<font(.*?)>([\w\W]*?)<\/font>/gi,"$2")),html=html.replace(/<[^\/>][^>]*>(\s*|\t*|\n*| |<br>)<\/[^>]+>/gi,"<br>")):html=html.replace(/<[^\/>][^>]*>(\s*|\t*|\n*| |<br>)<\/[^>]+>/gi,""),html=html.replace(/<div>\s*?\t*?\n*?(<ul>|<ol>|<p>)/gi,"$1"),html=html.replace(/\[td colspan="(.*?)"\]([\w\W]*?)\[\/td\]/gi,'<td colspan="$1">$2</td>'),html=html.replace(/\[td rowspan="(.*?)"\]([\w\W]*?)\[\/td\]/gi,'<td rowspan="$1">$2</td>'),html=html.replace(/\[td\]/gi,"<td> </td>"),html=html.replace(/\[a href="(.*?)"\]([\w\W]*?)\[\/a\]/gi,'<a href="$1">$2</a>'),html=html.replace(/\[iframe(.*?)\]([\w\W]*?)\[\/iframe\]/gi,"<iframe$1>$2</iframe>"),html=html.replace(/\[video(.*?)\]([\w\W]*?)\[\/video\]/gi,"<video$1>$2</video>"),html=html.replace(/\[audio(.*?)\]([\w\W]*?)\[\/audio\]/gi,"<audio$1>$2</audio>"),html=html.replace(/\[embed(.*?)\]([\w\W]*?)\[\/embed\]/gi,"<embed$1>$2</embed>"),html=html.replace(/\[object(.*?)\]([\w\W]*?)\[\/object\]/gi,"<object$1>$2</object>"),html=html.replace(/\[param(.*?)\]/gi,"<param$1>"),html=html.replace(/\[img(.*?)\]/gi,"<img$1>"),this.opts.convertDivs?(html=html.replace(/<div(.*?)>([\w\W]*?)<\/div>/gi,"<p>$2</p>"),html=html.replace(/<\/div><p>/gi,"<p>"),html=html.replace(/<\/p><\/div>/gi,"</p>"),html=html.replace(/<p><\/p>/gi,"<br />")):html=html.replace(/<div><\/div>/gi,"<br />"),html=this.cleanStripTags(html),this.currentOrParentIs("LI")?html=html.replace(/<p>([\w\W]*?)<\/p>/gi,"$1<br>"):tablePaste===!1&&(html=this.cleanParagraphy(html)),html=html.replace(/<span(.*?)>([\w\W]*?)<\/span>/gi,"$2"),html=html.replace(/<img>/gi,""),html=html.replace(/<[^\/>][^>][^img|param|source|td][^<]*>(\s*|\t*|\n*| |<br>)<\/[^>]+>/gi,""),html=html.replace(/\n{3,}/gi,"\n"),html=html.replace(/<p><p>/gi,"<p>"),html=html.replace(/<\/p><\/p>/gi,"</p>"),html=html.replace(/<li>(\s*|\t*|\n*)<p>/gi,"<li>"),html=html.replace(/<\/p>(\s*|\t*|\n*)<\/li>/gi,"</li>"),this.opts.linebreaks===!0&&(html=html.replace(/<p(.*?)>([\w\W]*?)<\/p>/gi,"$2<br>")),html=html.replace(/<[^\/>][^>][^img|param|source|td][^<]*>(\s*|\t*|\n*| |<br>)<\/[^>]+>/gi,""),html=html.replace(/<img src="webkit-fake-url\:\/\/(.*?)"(.*?)>/gi,""),html=html.replace(/<td(.*?)>(\s*|\t*|\n*)<p>([\w\W]*?)<\/p>(\s*|\t*|\n*)<\/td>/gi,"<td$1>$3</td>"),this.opts.convertDivs&&(html=html.replace(/<div(.*?)>([\w\W]*?)<\/div>/gi,"$2"),html=html.replace(/<div(.*?)>([\w\W]*?)<\/div>/gi,"$2")),this.pasteClipboardMozilla=!1,this.browser("mozilla")){if(this.opts.clipboardUpload){var matches=html.match(/<img src="data:image(.*?)"(.*?)>/gi);if(null!==matches){this.pasteClipboardMozilla=matches;for(k in matches){var img=matches[k].replace("<img",'<img data-mozilla-paste-image="'+k+'" ');html=html.replace(matches[k],img)}}}for(;/<br>$/gi.test(html);)html=html.replace(/<br>$/gi,"")}if(html=html.replace(/<p>•([\w\W]*?)<\/p>/gi,"<li>$1</li>"),this.browser("msie"))for(;/<font>([\w\W]*?)<\/font>/gi.test(html);)html=html.replace(/<font>([\w\W]*?)<\/font>/gi,"$1");tablePaste===!1&&(html=html.replace(/<td(.*?)>([\w\W]*?)<p(.*?)>([\w\W]*?)<\/td>/gi,"<td$1>$2$4</td>"),html=html.replace(/<td(.*?)>([\w\W]*?)<\/p>([\w\W]*?)<\/td>/gi,"<td$1>$2$3</td>"),html=html.replace(/<td(.*?)>([\w\W]*?)<p(.*?)>([\w\W]*?)<\/td>/gi,"<td$1>$2$4</td>"),html=html.replace(/<td(.*?)>([\w\W]*?)<\/p>([\w\W]*?)<\/td>/gi,"<td$1>$2$3</td>")),html=html.replace(/\n/g," "),html=html.replace(/<p>\n?<li>/gi,"<li>"),this.pasteInsert(html)},pastePre:function(s){s=s.replace(/<br>|<\/H[1-6]>|<\/p>|<\/div>/gi,"\n");var tmp=this.document.createElement("div");return tmp.innerHTML=s,this.cleanEncodeEntities(tmp.textContent||tmp.innerText)},pasteInsert:function(html){html=this.callback("pasteAfter",!1,html),this.selectall?(this.$editor.html(html),this.selectionRemove(),this.focusEnd(),this.sync()):this.insertHtml(html),this.selectall=!1,setTimeout($.proxy(function(){this.rtePaste=!1,this.browser("mozilla")&&this.$editor.find("p:empty").remove(),this.pasteClipboardMozilla!==!1&&this.pasteClipboardUploadMozilla()},this),100),this.opts.autoresize&&this.fullscreen!==!0?$(this.document.body).scrollTop(this.saveScroll):this.$editor.scrollTop(this.saveScroll)},pasteClipboardAppendFields:function(postData){return this.opts.uploadFields!==!1&&"object"==typeof this.opts.uploadFields&&$.each(this.opts.uploadFields,$.proxy(function(k,v){null!=v&&0===v.toString().indexOf("#")&&(v=$(v).val()),postData[k]=v},this)),postData},pasteClipboardUploadMozilla:function(){var imgs=this.$editor.find("img[data-mozilla-paste-image]");$.each(imgs,$.proxy(function(i,s){var $s=$(s),arr=s.src.split(","),postData={contentType:arr[0].split(";")[0].split(":")[1],data:arr[1]};postData=this.pasteClipboardAppendFields(postData),$.post(this.opts.clipboardUploadUrl,postData,$.proxy(function(data){var json="string"==typeof data?$.parseJSON(data):data;$s.attr("src",json.filelink),$s.removeAttr("data-mozilla-paste-image"),this.sync(),this.callback("imageUpload",$s,json)},this))},this))},pasteClipboardUpload:function(e){var result=e.target.result,arr=result.split(","),postData={contentType:arr[0].split(";")[0].split(":")[1],data:arr[1]};this.opts.clipboardUpload?(postData=this.pasteClipboardAppendFields(postData),$.post(this.opts.clipboardUploadUrl,postData,$.proxy(function(data){var json="string"==typeof data?$.parseJSON(data):data,html='<img src="'+json.filelink+'" id="clipboard-image-marker" />';this.execCommand("inserthtml",html,!1);var image=$(this.$editor.find("img#clipboard-image-marker"));image.length?image.removeAttr("id"):image=!1,this.sync(),image&&this.callback("imageUpload",image,json)},this))):this.insertHtml('<img src="'+result+'" />')},bufferSet:function(selectionSave){selectionSave!==!1&&this.selectionSave(),this.opts.buffer.push(this.$editor.html()),selectionSave!==!1&&this.selectionRemoveMarkers("buffer")},bufferUndo:function(){return 0===this.opts.buffer.length?void this.focusWithSaveScroll():(this.selectionSave(),this.opts.rebuffer.push(this.$editor.html()),this.selectionRestore(!1,!0),this.$editor.html(this.opts.buffer.pop()),this.selectionRestore(),void setTimeout($.proxy(this.observeStart,this),100))},bufferRedo:function(){return 0===this.opts.rebuffer.length?(this.focusWithSaveScroll(),!1):(this.selectionSave(),this.opts.buffer.push(this.$editor.html()),this.selectionRestore(!1,!0),this.$editor.html(this.opts.rebuffer.pop()),this.selectionRestore(!0),void setTimeout($.proxy(this.observeStart,this),4))},observeStart:function(){this.observeImages(),this.opts.observeLinks&&this.observeLinks()},observeLinks:function(){this.$editor.find("a").on("click",$.proxy(this.linkObserver,this)),this.$editor.on("click.redactor",$.proxy(function(e){this.linkObserverTooltipClose(e)},this)),$(document).on("click.redactor",$.proxy(function(e){this.linkObserverTooltipClose(e)},this))},observeImages:function(){return this.opts.observeImages===!1?!1:(this.$editor.find("img").each($.proxy(function(i,elem){this.browser("msie")&&$(elem).attr("unselectable","on");var parent=$(elem).parent();parent.hasClass("royalSlider")||parent.hasClass("fotorama")||this.imageResize(elem)},this)),void this.$editor.find(".fotorama, .royalSlider").on("click",$.proxy(this.editGallery,this)))},linkObserver:function(e){var $link=$(e.target),parent=$(e.target).parent();if(!parent.hasClass("royalSlider")&&!parent.hasClass("fotorama")&&0!=$link.size()&&"A"===$link[0].tagName){var pos=$link.offset();if(this.opts.iframe){var posFrame=this.$frame.offset();pos.top=posFrame.top+(pos.top-$(this.document).scrollTop()),pos.left+=posFrame.left}var tooltip=$('<span class="redactor-link-tooltip"></span>'),href=$link.attr("href");void 0===href&&(href=""),href.length>24&&(href=href.substring(0,24)+"...");var aLink=$('<a href="'+$link.attr("href")+'" target="_blank">'+href+"</a>").on("click",$.proxy(function(e){this.linkObserverTooltipClose(!1)},this)),aEdit=$('<a href="#">'+this.opts.curLang.edit+"</a>").on("click",$.proxy(function(e){e.preventDefault(),this.linkShow(),this.linkObserverTooltipClose(!1)},this)),aUnlink=$('<a href="#">'+this.opts.curLang.unlink+"</a>").on("click",$.proxy(function(e){e.preventDefault(),this.execCommand("unlink"),this.linkObserverTooltipClose(!1)},this));tooltip.append(aLink),tooltip.append(" | "),tooltip.append(aEdit),tooltip.append(" | "),tooltip.append(aUnlink),tooltip.css({top:pos.top+20+"px",left:pos.left+"px"}),$(".redactor-link-tooltip").remove(),$("body").append(tooltip)}},linkObserverTooltipClose:function(e){return e!==!1&&"A"==e.target.tagName?!1:void $(".redactor-link-tooltip").remove()},getSelection:function(){return this.opts.rangy?this.opts.iframe?rangy.getSelection(this.$frame[0]):rangy.getSelection():this.document.getSelection()},getRange:function(){if(this.opts.rangy)return this.opts.iframe?rangy.createRange(this.iframeDoc()):rangy.createRange();if(this.document.getSelection){var sel=this.getSelection();if(sel.getRangeAt&&sel.rangeCount)return sel.getRangeAt(0)}return this.document.createRange()},selectionElement:function(node){this.setCaret(node)},selectionStart:function(node){this.selectionSet(node[0]||node,0,null,0)},selectionEnd:function(node){this.selectionSet(node[0]||node,1,null,1)},selectionSet:function(orgn,orgo,focn,foco){null==focn&&(focn=orgn),null==foco&&(foco=orgo);var sel=this.getSelection();if(sel){if("P"==orgn.tagName&&""==orgn.innerHTML&&(orgn.innerHTML=this.opts.invisibleSpace),"BR"==orgn.tagName&&this.opts.linebreaks===!1){var par=$(this.opts.emptyHtml)[0];$(orgn).replaceWith(par),orgn=par,focn=orgn}var range=this.getRange();range.setStart(orgn,orgo),range.setEnd(focn,foco);try{sel.removeAllRanges()}catch(e){}sel.addRange(range)}},selectionWrap:function(tag){tag=tag.toLowerCase();var block=this.getBlock();if(block){var wrapper=this.formatChangeTag(block,tag);return this.sync(),wrapper}var sel=this.getSelection(),range=sel.getRangeAt(0),wrapper=document.createElement(tag);return wrapper.appendChild(range.extractContents()),range.insertNode(wrapper),this.selectionElement(wrapper),wrapper},selectionAll:function(){var range=this.getRange();range.selectNodeContents(this.$editor[0]);var sel=this.getSelection();sel.removeAllRanges(),sel.addRange(range)},selectionRemove:function(){this.getSelection().removeAllRanges()},getCaretOffset:function(element){var caretOffset=0,range=this.getRange(),preCaretRange=range.cloneRange();return preCaretRange.selectNodeContents(element),preCaretRange.setEnd(range.endContainer,range.endOffset),caretOffset=$.trim(preCaretRange.toString()).length},getCaretOffsetRange:function(){return new Range(this.getSelection().getRangeAt(0))},setCaret:function(el,start,end){
"undefined"==typeof end&&(end=start),el=el[0]||el;var range=this.getRange();range.selectNodeContents(el);var endCharCount,textNodes=this.getTextNodesIn(el),foundStart=!1,charCount=0;if(1==textNodes.length&&start)range.setStart(textNodes[0],start),range.setEnd(textNodes[0],end);else for(var textNode,i=0;textNode=textNodes[i++];){if(endCharCount=charCount+textNode.length,!foundStart&&start>=charCount&&(endCharCount>start||start==endCharCount&&i<textNodes.length)&&(range.setStart(textNode,start-charCount),foundStart=!0),foundStart&&endCharCount>=end){range.setEnd(textNode,end-charCount);break}charCount=endCharCount}var sel=this.getSelection();sel.removeAllRanges(),sel.addRange(range)},setCaretAfter:function(node){this.$editor.focus(),node=node[0]||node;var range=this.document.createRange(),start=1,end=-1;range.setStart(node,start),range.setEnd(node,end+2);var selection=this.window.getSelection(),cursorRange=this.document.createRange(),emptyElement=this.document.createTextNode("");$(node).after(emptyElement),cursorRange.setStartAfter(emptyElement),selection.removeAllRanges(),selection.addRange(cursorRange),$(emptyElement).remove()},getTextNodesIn:function(node){var textNodes=[];if(3==node.nodeType)textNodes.push(node);else for(var children=node.childNodes,i=0,len=children.length;len>i;++i)textNodes.push.apply(textNodes,this.getTextNodesIn(children[i]));return textNodes},getCurrent:function(){var el=!1,sel=this.getSelection();return sel&&sel.rangeCount>0&&(el=sel.getRangeAt(0).startContainer),this.isParentRedactor(el)},getParent:function(elem){return elem=elem||this.getCurrent(),elem?this.isParentRedactor($(elem).parent()[0]):!1},getBlock:function(node){for("undefined"==typeof node&&(node=this.getCurrent());node;){if(this.nodeTestBlocks(node))return $(node).hasClass("redactor_editor")?!1:node;node=node.parentNode}return!1},getBlocks:function(nodes){var newnodes=[];if("undefined"==typeof nodes){var range=this.getRange();if(range&&range.collapsed===!0)return[this.getBlock()];var nodes=this.getNodes(range)}return $.each(nodes,$.proxy(function(i,node){return this.opts.iframe===!1&&0==$(node).parents("div.redactor_editor").size()?!1:void(this.nodeTestBlocks(node)&&newnodes.push(node))},this)),0===newnodes.length&&(newnodes=[this.getBlock()]),newnodes},isInlineNode:function(node){return 1!=node.nodeType?!1:!this.rTestBlock.test(node.nodeName)},nodeTestBlocks:function(node){return 1==node.nodeType&&this.rTestBlock.test(node.nodeName)},tagTestBlock:function(tag){return this.rTestBlock.test(tag)},getNodes:function(range,tag){if("undefined"==typeof range||0==range)var range=this.getRange();if(range&&range.collapsed===!0){if("undefined"==typeof tag&&this.tagTestBlock(tag)){var block=this.getBlock();return block.tagName==tag?[block]:[]}return[this.getCurrent()]}var nodes=[],finalnodes=[],sel=this.document.getSelection();if(sel.isCollapsed||(nodes=this.getRangeSelectedNodes(sel.getRangeAt(0))),$.each(nodes,$.proxy(function(i,node){return this.opts.iframe===!1&&0==$(node).parents("div.redactor_editor").size()?!1:void("undefined"==typeof tag?""!=$.trim(node.textContent)&&finalnodes.push(node):node.tagName==tag&&finalnodes.push(node))},this)),0==finalnodes.length){if("undefined"==typeof tag&&this.tagTestBlock(tag)){var block=this.getBlock();return block.tagName==tag?finalnodes.push(block):[]}finalnodes.push(this.getCurrent())}var last=finalnodes[finalnodes.length-1];return this.nodeTestBlocks(last)&&(finalnodes=finalnodes.slice(0,-1)),finalnodes},getElement:function(node){for(node||(node=this.getCurrent());node;){if(1==node.nodeType)return $(node).hasClass("redactor_editor")?!1:node;node=node.parentNode}return!1},getRangeSelectedNodes:function(range){range=range||this.getRange();var node=range.startContainer,endNode=range.endContainer;if(node==endNode)return[node];for(var rangeNodes=[];node&&node!=endNode;)rangeNodes.push(node=this.nextNode(node));for(node=range.startContainer;node&&node!=range.commonAncestorContainer;)rangeNodes.unshift(node),node=node.parentNode;return rangeNodes},nextNode:function(node){if(node.hasChildNodes())return node.firstChild;for(;node&&!node.nextSibling;)node=node.parentNode;return node?node.nextSibling:null},getSelectionText:function(){return this.getSelection().toString()},getSelectionHtml:function(){var html="",sel=this.getSelection();if(sel.rangeCount){for(var container=this.document.createElement("div"),len=sel.rangeCount,i=0;len>i;++i)container.appendChild(sel.getRangeAt(i).cloneContents());html=container.innerHTML}return this.syncClean(html)},selectionSave:function(){this.isFocused()||this.focusWithSaveScroll(),this.opts.rangy?this.savedSel=rangy.saveSelection():this.selectionCreateMarker(this.getRange())},selectionCreateMarker:function(range,remove){if(range){var node1=$('<span id="selection-marker-1" class="redactor-selection-marker">'+this.opts.invisibleSpace+"</span>",this.document)[0],node2=$('<span id="selection-marker-2" class="redactor-selection-marker">'+this.opts.invisibleSpace+"</span>",this.document)[0];range.collapsed===!0?this.selectionSetMarker(range,node1,!0):(this.selectionSetMarker(range,node1,!0),this.selectionSetMarker(range,node2,!1)),this.savedSel=this.$editor.html(),this.selectionRestore(!1,!1)}},selectionSetMarker:function(range,node,type){var boundaryRange=range.cloneRange();try{boundaryRange.collapse(type),boundaryRange.insertNode(node),boundaryRange.detach()}catch(e){var html=this.opts.emptyHtml;this.opts.linebreaks&&(html="<br>"),this.$editor.prepend(html),this.focus()}},selectionRestore:function(replace,remove){if(this.opts.rangy)rangy.restoreSelection(this.savedSel);else{replace===!0&&this.savedSel&&this.$editor.html(this.savedSel);var node1=this.$editor.find("span#selection-marker-1"),node2=this.$editor.find("span#selection-marker-2");this.browser("mozilla")?this.$editor.focus():this.isFocused()||this.focusWithSaveScroll(),0!=node1.length&&0!=node2.length?this.selectionSet(node1[0],0,node2[0],0):0!=node1.length&&this.selectionSet(node1[0],0,null,0),remove!==!1&&(this.selectionRemoveMarkers(),this.savedSel=!1)}},selectionRemoveMarkers:function(type){this.opts.rangy?rangy.removeMarkers(this.savedSel):$.each(this.$editor.find("span.redactor-selection-marker"),function(){var html=$.trim($(this).html().replace(/[^\u0000-\u1C7F]/g,""));""==html?$(this).remove():$(this).removeAttr("class").removeAttr("id")})},tableShow:function(){this.selectionSave(),this.modalInit(this.opts.curLang.table,this.opts.modal_table,300,$.proxy(function(){$("#redactor_insert_table_btn").click($.proxy(this.tableInsert,this)),setTimeout(function(){$("#redactor_table_rows").focus()},200)},this))},tableInsert:function(){this.bufferSet(!1);var i,$row,z,$column,rows=$("#redactor_table_rows").val(),columns=$("#redactor_table_columns").val(),$table_box=$("<div></div>"),tableId=Math.floor(99999*Math.random()),$table=$('<table id="table'+tableId+'"><tbody></tbody></table>');for(i=0;rows>i;i++){for($row=$("<tr></tr>"),z=0;columns>z;z++)$column=$("<td>"+this.opts.invisibleSpace+"</td>"),0===i&&0===z&&$column.append('<span id="selection-marker-1">'+this.opts.invisibleSpace+"</span>"),$($row).append($column);$table.append($row)}$table_box.append($table);var html=$table_box.html();this.opts.linebreaks===!1&&this.browser("mozilla")&&(html+="<p>"+this.opts.invisibleSpace+"</p>"),this.modalClose(),this.selectionRestore();var current=this.getBlock()||this.getCurrent();if(current&&"BODY"!=current.tagName){if("LI"==current.tagName)var current=$(current).closest("ul, ol");$(current).after(html)}else this.insertHtmlAdvanced(html,!1);this.selectionRestore();var table=this.$editor.find("#table"+tableId);this.buttonActiveObserver(),table.find("span#selection-marker-1, inline#selection-marker-1").remove(),table.removeAttr("id"),this.sync()},tableDeleteTable:function(){var $table=$(this.getParent()).closest("table");return this.isParentRedactor($table)?0==$table.size()?!1:(this.bufferSet(),$table.remove(),void this.sync()):!1},tableDeleteRow:function(){var parent=this.getParent(),$table=$(parent).closest("table");if(!this.isParentRedactor($table))return!1;if(0==$table.size())return!1;this.bufferSet();var $current_tr=$(parent).closest("tr"),$focus_tr=$current_tr.prev().length?$current_tr.prev():$current_tr.next();if($focus_tr.length){var $focus_td=$focus_tr.children("td").first();$focus_td.length&&$focus_td.prepend('<span id="selection-marker-1">'+this.opts.invisibleSpace+"</span>")}$current_tr.remove(),this.selectionRestore(),$table.find("span#selection-marker-1").remove(),this.sync()},tableDeleteColumn:function(){var parent=this.getParent(),$table=$(parent).closest("table");if(!this.isParentRedactor($table))return!1;if(0==$table.size())return!1;this.bufferSet();var $current_td=$(parent).closest("td");$current_td.is("td")||($current_td=$current_td.closest("td"));var index=$current_td.get(0).cellIndex;$table.find("tr").each($.proxy(function(i,elem){var focusIndex=0>index-1?index+1:index-1;0===i&&$(elem).find("td").eq(focusIndex).prepend('<span id="selection-marker-1">'+this.opts.invisibleSpace+"</span>"),$(elem).find("td").eq(index).remove()},this)),this.selectionRestore(),$table.find("span#selection-marker-1").remove(),this.sync()},tableAddHead:function(){var $table=$(this.getParent()).closest("table");if(!this.isParentRedactor($table))return!1;if(0==$table.size())return!1;if(this.bufferSet(),0!==$table.find("thead").size())this.tableDeleteHead();else{var tr=$table.find("tr").first().clone();tr.find("td").html(this.opts.invisibleSpace),$thead=$("<thead></thead>"),$thead.append(tr),$table.prepend($thead),this.sync()}},tableDeleteHead:function(){var $table=$(this.getParent()).closest("table");if(!this.isParentRedactor($table))return!1;var $thead=$table.find("thead");return 0==$thead.size()?!1:(this.bufferSet(),$thead.remove(),void this.sync())},tableAddRowAbove:function(){this.tableAddRow("before")},tableAddRowBelow:function(){this.tableAddRow("after")},tableAddColumnLeft:function(){this.tableAddColumn("before")},tableAddColumnRight:function(){this.tableAddColumn("after")},tableAddRow:function(type){var $table=$(this.getParent()).closest("table");if(!this.isParentRedactor($table))return!1;if(0==$table.size())return!1;this.bufferSet();var $current_tr=$(this.getParent()).closest("tr"),new_tr=$current_tr.clone();new_tr.find("td").html(this.opts.invisibleSpace),"after"===type?$current_tr.after(new_tr):$current_tr.before(new_tr),this.sync()},tableAddColumn:function(type){var parent=this.getParent(),$table=$(parent).closest("table");if(!this.isParentRedactor($table))return!1;if(0==$table.size())return!1;this.bufferSet();var index=0,current=this.getCurrent(),$current_tr=$(current).closest("tr"),$current_td=$(current).closest("td");$current_tr.find("td").each($.proxy(function(i,elem){$(elem)[0]===$current_td[0]&&(index=i)},this)),$table.find("tr").each($.proxy(function(i,elem){var $current=$(elem).find("td").eq(index),td=$current.clone();td.html(this.opts.invisibleSpace),"after"===type?$current.after(td):$current.before(td)},this)),this.sync()},videoShow:function(){this.selectionSave(),this.modalInit(this.opts.curLang.video,this.opts.modal_video,600,$.proxy(function(){$("#redactor_insert_video_btn").click($.proxy(this.videoInsert,this)),setTimeout(function(){$("#redactor_insert_video_area").focus()},200)},this))},videoInsert:function(){var data=$("#redactor_insert_video_area").val();data=this.cleanStripTags(data);var iframeStart='<iframe width="500" height="281" src="',iframeEnd='" frameborder="0" allowfullscreen></iframe>';data.match(reUrlYoutube)?data=data.replace(reUrlYoutube,iframeStart+"//www.youtube.com/embed/$1"+iframeEnd):data.match(reUrlVimeo)&&(data=data.replace(reUrlVimeo,iframeStart+"//player.vimeo.com/video/$2"+iframeEnd)),this.selectionRestore();var current=this.getBlock()||this.getCurrent();current?$(current).after(data):this.insertHtmlAdvanced(data,!1),this.sync(),this.modalClose()},linkShow:function(){this.selectionSave();var callback=$.proxy(function(){if(this.opts.predefinedLinks!==!1){this.predefinedLinksStorage={};var that=this;$.getJSON(this.opts.predefinedLinks,function(data){var $select=$("#redactor-predefined-links");$select.html(""),$.each(data,function(key,val){that.predefinedLinksStorage[key]=val,$select.append($("<option>").val(key).html(val.name))}),$select.on("change",function(){var key=$(this).val(),name="",url="";0!=key&&(name=that.predefinedLinksStorage[key].name,url=that.predefinedLinksStorage[key].url),$("#redactor_link_url").val(url),$("#redactor_link_url_text").val(name)}),$select.show()})}this.insert_link_node=!1;var sel=this.getSelection(),url="",text="",target="",elem=this.getParent(),par=$(elem).parent().get(0);par&&"A"===par.tagName&&(elem=par),elem&&"A"===elem.tagName?(url=elem.href,text=$(elem).text(),target=elem.target,this.insert_link_node=elem):text=sel.toString(),$("#redactor_link_url_text").val(text);var thref=self.location.href.replace(/\/$/i,"");if(url=url.replace(thref,""),url=url.replace(/^\/#/,"#"),url=url.replace("mailto:",""),this.opts.linkProtocol===!1){var re=new RegExp("^(http|ftp|https)://"+self.location.host,"i");url=url.replace(re,"")}$("#redactor_link_url").val(url),"_blank"===target&&$("#redactor_link_blank").prop("checked",!0),this.linkInsertPressed=!1,$("#redactor_insert_link_btn").on("click",$.proxy(this.linkProcess,this)),setTimeout(function(){$("#redactor_link_url").focus()},200)},this);this.modalInit(this.opts.curLang.link,this.opts.modal_link,460,callback)},linkProcess:function(){if(!this.linkInsertPressed){this.linkInsertPressed=!0;var target="",targetBlank="",link=$("#redactor_link_url").val(),text=$("#redactor_link_url_text").val();if(-1!=link.search("@")&&/(http|ftp|https):\/\//i.test(link)===!1)link="mailto:"+link;else if(0!=link.search("#")){$("#redactor_link_blank").prop("checked")&&(target=' target="_blank"',targetBlank="_blank");var pattern="((xn--)?[a-z0-9]+(-[a-z0-9]+)*.)+[a-z]{2,}",re=new RegExp("^(http|ftp|https)://"+pattern,"i"),re2=new RegExp("^"+pattern,"i");-1==link.search(re)&&0==link.search(re2)&&this.opts.linkProtocol&&(link=this.opts.linkProtocol+link)}text=text.replace(/<|>/g,"");var extra=" ";this.browser("mozilla")&&(extra=" "),this.linkInsert('<a href="'+link+'"'+target+">"+text+"</a>"+extra,$.trim(text),link,targetBlank)}},linkInsert:function(a,text,link,target){if(this.selectionRestore(),""!==text){if(this.insert_link_node)this.bufferSet(),$(this.insert_link_node).text(text).attr("href",link),""!==target?$(this.insert_link_node).attr("target",target):$(this.insert_link_node).removeAttr("target");else{var $a=$(a).addClass("redactor-added-link");this.exec("inserthtml",this.outerHtml($a),!1);var link=this.$editor.find("a.redactor-added-link");link.removeAttr("style").removeClass("redactor-added-link").each(function(){""==this.className&&$(this).removeAttr("class")})}this.sync()}setTimeout($.proxy(function(){this.opts.observeLinks&&this.observeLinks()},this),5),this.modalClose()},fileShow:function(){this.selectionSave();var callback=$.proxy(function(){var sel=this.getSelection(),text="";text=this.oldIE()?sel.text:sel.toString(),$("#redactor_filename").val(text),this.isMobile()||this.isIPad()||this.draguploadInit("#redactor_file",{url:this.opts.fileUpload,uploadFields:this.opts.uploadFields,success:$.proxy(this.fileCallback,this),error:$.proxy(function(obj,json){this.callback("fileUploadError",json)},this),uploadParam:this.opts.fileUploadParam}),this.uploadInit("redactor_file",{auto:!0,url:this.opts.fileUpload,success:$.proxy(this.fileCallback,this),error:$.proxy(function(obj,json){this.callback("fileUploadError",json)},this)})},this);this.modalInit(this.opts.curLang.file,this.opts.modal_file,500,callback)},fileCallback:function(json){if(this.selectionRestore(),json!==!1){var text=$("#redactor_filename").val();""===text&&(text=json.filename);var link='<a href="'+json.filelink+'" id="filelink-marker">'+text+"</a>";this.browser("webkit")&&this.window.chrome&&(link+=" "),this.execCommand("inserthtml",link,!1);var linkmarker=$(this.$editor.find("a#filelink-marker"));0!=linkmarker.size()?linkmarker.removeAttr("id"):linkmarker=!1,this.sync(),this.callback("fileUpload",linkmarker,json)}this.modalClose()},imageShow:function(){this.selectionSave();var callback=$.proxy(function(){this.opts.imageGetJson?$.getJSON(this.opts.imageGetJson,$.proxy(function(data){var folders={},count=0;$.each(data,$.proxy(function(key,val){"undefined"!=typeof val.folder&&(count++,folders[val.folder]=count)},this));var folderclass=!1;if($.each(data,$.proxy(function(key,val){var thumbtitle="";"undefined"!=typeof val.title&&(thumbtitle=val.title);var folderkey=0;$.isEmptyObject(folders)||"undefined"==typeof val.folder||(folderkey=folders[val.folder],folderclass===!1&&(folderclass=".redactorfolder"+folderkey));var img=$('<img src="'+val.thumb+'" class="redactorfolder redactorfolder'+folderkey+'" rel="'+val.image+'" title="'+thumbtitle+'" />');$("#redactor_image_box").append(img),$(img).click($.proxy(this.imageThumbClick,this))},this)),!$.isEmptyObject(folders)){$(".redactorfolder").hide(),$(folderclass).show();var onchangeFunc=function(e){$(".redactorfolder").hide(),$(".redactorfolder"+$(e.target).val()).show()},select=$('<select id="redactor_image_box_select">');$.each(folders,function(k,v){select.append($('<option value="'+v+'">'+k+"</option>"))}),$("#redactor_image_box").before(select),select.change(onchangeFunc)}},this)):$("#redactor-tab-control-2").remove(),this.opts.imageUpload||this.opts.s3?(this.isMobile()||this.isIPad()||this.opts.s3!==!1||$("#redactor_file").length&&this.draguploadInit("#redactor_file",{url:this.opts.imageUpload,uploadFields:this.opts.uploadFields,success:$.proxy(this.imageCallback,this),error:$.proxy(function(obj,json){this.callback("imageUploadError",json)},this),uploadParam:this.opts.imageUploadParam}),this.opts.s3===!1?this.uploadInit("redactor_file",{auto:!0,url:this.opts.imageUpload,success:$.proxy(this.imageCallback,this),error:$.proxy(function(obj,json){this.callback("imageUploadError",json)},this)}):$("#redactor_file").on("change.redactor",$.proxy(this.s3handleFileSelect,this))):($(".redactor_tab").hide(),this.opts.imageGetJson?($("#redactor-tab-control-1").remove(),$("#redactor-tab-control-2").addClass("redactor_tabs_act"),$("#redactor_tab2").show()):($("#redactor_tabs").remove(),$("#redactor_tab3").show())),this.opts.imageTabLink||!this.opts.imageUpload&&!this.opts.imageGetJson||$("#redactor-tab-control-3").hide(),$("#redactor_upload_btn").click($.proxy(this.imageCallbackLink,this)),this.opts.imageUpload||this.opts.imageGetJson||setTimeout(function(){$("#redactor_file_link").focus()},200)},this);this.modalInit(this.opts.curLang.image,this.opts.modal_image,610,callback)},imageEdit:function(image){var $el=image,parent=$el.parent().parent(),callback=$.proxy(function(){$("#redactor_file_alt").val($el.attr("alt")),$("#redactor_image_edit_src").attr("href",$el.attr("src")),"block"==$el.css("display")&&"none"==$el.css("float")?$("#redactor_form_image_align").val("center"):$("#redactor_form_image_align").val($el.css("float")),"A"===$(parent).get(0).tagName&&($("#redactor_file_link").val($(parent).attr("href")),"_blank"==$(parent).attr("target")&&$("#redactor_link_blank").prop("checked",!0)),$("#redactor_image_delete_btn").click($.proxy(function(){this.imageRemove($el)},this)),$("#redactorSaveBtn").click($.proxy(function(){this.imageSave($el)},this))},this);this.modalInit(this.opts.curLang.edit,this.opts.modal_image_edit,380,callback)},imageRemove:function(el){var parentLink=$(el).parent().parent(),parent=$(el).parent(),parentEl=!1;parentLink.length&&"A"===parentLink[0].tagName?(parentEl=!0,$(parentLink).remove()):parent.length&&"A"===parent[0].tagName?(parentEl=!0,$(parent).remove()):$(el).remove(),parent.length&&"P"===parent[0].tagName&&(this.focusWithSaveScroll(),parentEl===!1&&this.selectionStart(parent)),this.callback("imageDelete",el),this.modalClose(),this.sync()},imageSave:function(el){this.imageResizeHide(!1);var $el=$(el),parent=$el.parent();$el.attr("alt",$("#redactor_file_alt").val());var floating=$("#redactor_form_image_align").val(),margin="";"left"===floating?(margin="0 "+this.opts.imageFloatMargin+" "+this.opts.imageFloatMargin+" 0",$el.css({"float":"left",margin:margin})):"right"===floating?(margin="0 0 "+this.opts.imageFloatMargin+" "+this.opts.imageFloatMargin,$el.css({"float":"right",margin:margin})):"center"===floating?$el.css({"float":"",display:"block",margin:"auto"}):$el.css({"float":"",display:"",margin:""});var link=$.trim($("#redactor_file_link").val());if(""!==link){var target=!1;if($("#redactor_link_blank").prop("checked")&&(target=!0),"A"!==parent.get(0).tagName){var a=$('<a href="'+link+'">'+this.outerHtml(el)+"</a>");target&&a.attr("target","_blank"),$el.replaceWith(a)}else parent.attr("href",link),target?parent.attr("target","_blank"):parent.removeAttr("target")}else"A"===parent.get(0).tagName&&parent.replaceWith(this.outerHtml(el));this.modalClose(),this.observeImages(),this.sync()},imageResizeHide:function(e){if(e!==!1&&0!=$(e.target).parent().size()&&"redactor-image-box"===$(e.target).parent()[0].id)return!1;var imageBox=this.$editor.find("#redactor-image-box");return 0==imageBox.size()?!1:(this.$editor.find("#redactor-image-editter, #redactor-image-resizer").remove(),imageBox.find("img").css({marginTop:imageBox[0].style.marginTop,marginBottom:imageBox[0].style.marginBottom,marginLeft:imageBox[0].style.marginLeft,marginRight:imageBox[0].style.marginRight}),imageBox.css("margin",""),imageBox.find("img").css("opacity",""),imageBox.replaceWith(function(){return $(this).contents()}),$(document).off("click.redactor-image-resize-hide"),this.$editor.off("click.redactor-image-resize-hide"),this.$editor.off("keydown.redactor-image-delete"),void this.sync())},imageResize:function(image){var $image=$(image);$image.on("mousedown",$.proxy(function(){this.imageResizeHide(!1)},this)),$image.on("dragstart",$.proxy(function(){this.$editor.on("drop.redactor-image-inside-drop",$.proxy(function(){setTimeout($.proxy(function(){this.observeImages(),this.$editor.off("drop.redactor-image-inside-drop"),this.sync()},this),1)},this))},this)),$image.on("click",$.proxy(function(e){if(0!=this.$editor.find("#redactor-image-box").size())return!1;var start_x,start_y,ratio=$image.width()/$image.height(),min_w=20,imageResizer=this.imageResizeControls($image),isResizing=!1;imageResizer!==!1&&(imageResizer.on("mousedown",function(e){isResizing=!0,e.preventDefault(),ratio=$image.width()/$image.height(),start_x=Math.round(e.pageX-$image.eq(0).offset().left),start_y=Math.round(e.pageY-$image.eq(0).offset().top)}),$(this.document.body).on("mousemove",$.proxy(function(e){if(isResizing){var mouse_y=(Math.round(e.pageX-$image.eq(0).offset().left)-start_x,Math.round(e.pageY-$image.eq(0).offset().top)-start_y),div_h=$image.height(),new_h=parseInt(div_h,10)+mouse_y,new_w=Math.round(new_h*ratio);new_w>min_w&&($image.width(new_w),100>new_w?this.imageEditter.css({marginTop:"-7px",marginLeft:"-13px",fontSize:"9px",padding:"3px 5px"}):this.imageEditter.css({marginTop:"-11px",marginLeft:"-18px",fontSize:"11px",padding:"7px 10px"})),start_x=Math.round(e.pageX-$image.eq(0).offset().left),start_y=Math.round(e.pageY-$image.eq(0).offset().top),this.sync()}},this)).on("mouseup",function(){isResizing=!1})),this.$editor.on("keydown.redactor-image-delete",$.proxy(function(e){var key=e.which;(this.keyCode.BACKSPACE==key||this.keyCode.DELETE==key)&&(this.bufferSet(!1),this.imageResizeHide(!1),this.imageRemove($image))},this)),$(document).on("click.redactor-image-resize-hide",$.proxy(this.imageResizeHide,this)),this.$editor.on("click.redactor-image-resize-hide",$.proxy(this.imageResizeHide,this))},this))},imageResizeControls:function($image){var imageBox=$('<span id="redactor-image-box" data-redactor="verified">');if(imageBox.css({position:"relative",display:"inline-block",lineHeight:0,outline:"1px dashed rgba(0, 0, 0, .6)","float":$image.css("float")}),imageBox.attr("contenteditable",!1),"auto"!=$image[0].style.margin?(imageBox.css({marginTop:$image[0].style.marginTop,marginBottom:$image[0].style.marginBottom,marginLeft:$image[0].style.marginLeft,marginRight:$image[0].style.marginRight}),$image.css("margin","")):imageBox.css({display:"block",margin:"auto"}),$image.css("opacity",.5).after(imageBox),this.imageEditter=$('<span id="redactor-image-editter" data-redactor="verified">'+this.opts.curLang.edit+"</span>"),this.imageEditter.css({position:"absolute",zIndex:5,top:"50%",left:"50%",marginTop:"-11px",marginLeft:"-18px",lineHeight:1,backgroundColor:"#000",color:"#fff",fontSize:"11px",padding:"7px 10px",cursor:"pointer"}),this.imageEditter.attr("contenteditable",!1),this.imageEditter.on("click",$.proxy(function(){this.imageEdit($image)},this)),imageBox.append(this.imageEditter),this.opts.imageResizable){var imageResizer=$('<span id="redactor-image-resizer" data-redactor="verified"></span>');return imageResizer.css({position:"absolute",zIndex:2,lineHeight:1,cursor:"nw-resize",bottom:"-4px",right:"-5px",border:"1px solid #fff",backgroundColor:"#000",width:"8px",height:"8px"}),imageResizer.attr("contenteditable",!1),imageBox.append(imageResizer),imageBox.append($image),imageResizer}return imageBox.append($image),!1},imageThumbClick:function(e){var img='<img id="image-marker" src="'+$(e.target).attr("rel")+'" alt="'+$(e.target).attr("title")+'" />',parent=this.getParent();this.opts.paragraphy&&0==$(parent).closest("li").size()&&(img="<p>"+img+"</p>"),this.imageInsert(img,!0)},imageCallbackLink:function(){var val=$("#redactor_file_link").val();if(""!==val){var data='<img id="image-marker" src="'+val+'" />';this.opts.linebreaks===!1&&(data="<p>"+data+"</p>"),this.imageInsert(data,!0)}else this.modalClose()},imageCallback:function(data){this.imageInsert(data)},imageInsert:function(json,link){if(this.selectionRestore(),json!==!1){var html="";if(link!==!0){html='<img id="image-marker" src="'+json.filelink+'" />';var parent=this.getParent();this.opts.paragraphy&&0==$(parent).closest("li").size()&&(html="<p>"+html+"</p>")}else html=json;this.execCommand("inserthtml",html,!1);var image=$(this.$editor.find("img#image-marker"));image.length?image.removeAttr("id"):image=!1,this.sync(),link!==!0&&this.callback("imageUpload",image,json)}this.modalClose(),this.observeImages()},buildProgressBar:function(){0==$("#redactor-progress").size()&&(this.$progressBar=$('<div id="redactor-progress"><span></span></div>'),$(document.body).append(this.$progressBar))},showProgressBar:function(){this.buildProgressBar(),$("#redactor-progress").fadeIn()},hideProgressBar:function(){$("#redactor-progress").fadeOut(1500)},modalTemplatesInit:function(){$.extend(this.opts,{modal_file:String()+'<section id="redactor-modal-file-insert"><form id="redactorUploadFileForm" method="post" action="" enctype="multipart/form-data"><label>'+this.opts.curLang.filename+'</label><input type="text" id="redactor_filename" class="redactor_input" /><div style="margin-top: 7px;"><input type="file" id="redactor_file" name="'+this.opts.fileUploadParam+'" /></div></form></section>',modal_image_edit:String()+'<section id="redactor-modal-image-edit"><label>'+this.opts.curLang.title+'</label><input type="text" id="redactor_file_alt" class="redactor_input" /><label>'+this.opts.curLang.link+'</label><input type="text" id="redactor_file_link" class="redactor_input" /><label><input type="checkbox" id="redactor_link_blank"> '+this.opts.curLang.link_new_tab+"</label><label>"+this.opts.curLang.image_position+'</label><select id="redactor_form_image_align"><option value="none">'+this.opts.curLang.none+'</option><option value="left">'+this.opts.curLang.left+'</option><option value="center">'+this.opts.curLang.center+'</option><option value="right">'+this.opts.curLang.right+'</option></select></section><footer><button id="redactor_image_delete_btn" class="redactor_modal_btn redactor_modal_delete_btn">'+this.opts.curLang._delete+'</button><button class="redactor_modal_btn redactor_btn_modal_close">'+this.opts.curLang.cancel+'</button><button id="redactorSaveBtn" class="redactor_modal_btn redactor_modal_action_btn">'+this.opts.curLang.save+"</button></footer>",modal_image:String()+'<section id="redactor-modal-image-insert"><div id="redactor_tabs"><a href="#" id="redactor-tab-control-1" class="redactor_tabs_act">'+this.opts.curLang.upload+'</a><a href="#" id="redactor-tab-control-2">'+this.opts.curLang.choose+'</a><a href="#" id="redactor-tab-control-3">'+this.opts.curLang.link+'</a></div><form id="redactorInsertImageForm" method="post" action="" enctype="multipart/form-data"><div id="redactor_tab1" class="redactor_tab"><input type="file" id="redactor_file" name="'+this.opts.imageUploadParam+'" /></div><div id="redactor_tab2" class="redactor_tab" style="display: none;"><div id="redactor_image_box"></div></div></form><div id="redactor_tab3" class="redactor_tab" style="display: none;"><label>'+this.opts.curLang.image_web_link+'</label><input type="text" name="redactor_file_link" id="redactor_file_link" class="redactor_input" /><br><br></div></section><footer><button class="redactor_modal_btn redactor_btn_modal_close">'+this.opts.curLang.cancel+'</button><button class="redactor_modal_btn redactor_modal_action_btn" id="redactor_upload_btn">'+this.opts.curLang.insert+"</button></footer>",modal_link:String()+'<section id="redactor-modal-link-insert"><select id="redactor-predefined-links" style="width: 99.5%; display: none;"></select><label>URL</label><input type="text" class="redactor_input" id="redactor_link_url" /><label>'+this.opts.curLang.text+'</label><input type="text" class="redactor_input" id="redactor_link_url_text" /><label><input type="checkbox" id="redactor_link_blank"> '+this.opts.curLang.link_new_tab+'</label></section><footer><button class="redactor_modal_btn redactor_btn_modal_close">'+this.opts.curLang.cancel+'</button><button id="redactor_insert_link_btn" class="redactor_modal_btn redactor_modal_action_btn">'+this.opts.curLang.insert+"</button></footer>",modal_table:String()+'<section id="redactor-modal-table-insert"><label>'+this.opts.curLang.rows+'</label><input type="text" size="5" value="2" id="redactor_table_rows" /><label>'+this.opts.curLang.columns+'</label><input type="text" size="5" value="3" id="redactor_table_columns" /></section><footer><button class="redactor_modal_btn redactor_btn_modal_close">'+this.opts.curLang.cancel+'</button><button id="redactor_insert_table_btn" class="redactor_modal_btn redactor_modal_action_btn">'+this.opts.curLang.insert+"</button></footer>",modal_video:String()+'<section id="redactor-modal-video-insert"><form id="redactorInsertVideoForm"><label>'+this.opts.curLang.video_html_code+'</label><textarea id="redactor_insert_video_area" style="width: 99%; height: 160px;"></textarea></form></section><footer><button class="redactor_modal_btn redactor_btn_modal_close">'+this.opts.curLang.cancel+'</button><button id="redactor_insert_video_btn" class="redactor_modal_btn redactor_modal_action_btn">'+this.opts.curLang.insert+"</button></footer>"})},modalInit:function(title,content,width,callback){return this.modalSetOverlay(),this.$redactorModalWidth=width,this.$redactorModal=$("#redactor_modal"),this.$redactorModal.length||(this.$redactorModal=$('<div id="redactor_modal" style="display: none;" />'),this.$redactorModal.append($('<div id="redactor_modal_close">×</div>')),this.$redactorModal.append($('<header id="redactor_modal_header" />')),this.$redactorModal.append($('<div id="redactor_modal_inner" />')),this.$redactorModal.appendTo(document.body)),$("#redactor_modal_close").on("click",$.proxy(this.modalClose,this)),$(document).on("keyup",$.proxy(this.modalCloseHandler,this)),this.$editor.on("keyup",$.proxy(this.modalCloseHandler,this)),this.modalSetContent(content),this.modalSetTitle(title),this.modalSetDraggable(),this.modalLoadTabs(),this.modalOnCloseButton(),this.modalSetButtonsWidth(),this.saveModalScroll=this.document.body.scrollTop,this.opts.autoresize===!1&&(this.saveModalScroll=this.$editor.scrollTop()),
this.isMobile()===!1?this.modalShowOnDesktop():this.modalShowOnMobile(),"function"==typeof callback&&callback(),setTimeout($.proxy(function(){this.callback("modalOpened",this.$redactorModal)},this),11),$(document).off("focusin.modal"),this.$redactorModal.find("input[type=text]").on("keypress",$.proxy(function(e){13===e.which&&(this.$redactorModal.find(".redactor_modal_action_btn").click(),e.preventDefault())},this)),this.$redactorModal},modalShowOnDesktop:function(){this.$redactorModal.css({position:"fixed",top:"-2000px",left:"50%",width:this.$redactorModalWidth+"px",marginLeft:"-"+this.$redactorModalWidth/2+"px"}).show(),this.modalSaveBodyOveflow=$(document.body).css("overflow"),$(document.body).css("overflow","hidden"),setTimeout($.proxy(function(){var height=this.$redactorModal.outerHeight();this.$redactorModal.css({top:"50%",height:"auto",minHeight:"auto",marginTop:"-"+(height+10)/2+"px"})},this),15)},modalShowOnMobile:function(){this.$redactorModal.css({position:"fixed",width:"100%",height:"100%",top:"0",left:"0",margin:"0",minHeight:"300px"}).show()},modalSetContent:function(content){this.modalcontent=!1,0==content.indexOf("#")?(this.modalcontent=$(content),$("#redactor_modal_inner").empty().append(this.modalcontent.html()),this.modalcontent.html("")):$("#redactor_modal_inner").empty().append(content)},modalSetTitle:function(title){this.$redactorModal.find("#redactor_modal_header").html(title)},modalSetButtonsWidth:function(){var buttons=this.$redactorModal.find("footer button").not(".redactor_modal_btn_hidden"),buttonsSize=buttons.size();buttonsSize>0&&$(buttons).css("width",this.$redactorModalWidth/buttonsSize+"px")},modalOnCloseButton:function(){this.$redactorModal.find(".redactor_btn_modal_close").on("click",$.proxy(this.modalClose,this))},modalSetOverlay:function(){this.opts.modalOverlay&&(this.$redactorModalOverlay=$("#redactor_modal_overlay"),this.$redactorModalOverlay.length||(this.$redactorModalOverlay=$('<div id="redactor_modal_overlay" style="display: none;"></div>'),$("body").prepend(this.$redactorModalOverlay)),this.$redactorModalOverlay.show().on("click",$.proxy(this.modalClose,this)))},modalSetDraggable:function(){"undefined"!=typeof $.fn.draggable&&(this.$redactorModal.draggable({handle:"#redactor_modal_header"}),this.$redactorModal.find("#redactor_modal_header").css("cursor","move"))},modalLoadTabs:function(){var $redactor_tabs=$("#redactor_tabs");if(!$redactor_tabs.length)return!1;var that=this;$redactor_tabs.find("a").each(function(i,s){i++,$(s).on("click",function(e){if(e.preventDefault(),$redactor_tabs.find("a").removeClass("redactor_tabs_act"),$(this).addClass("redactor_tabs_act"),$(".redactor_tab").hide(),$("#redactor_tab"+i).show(),$("#redactor_tab_selected").val(i),that.isMobile()===!1){var height=that.$redactorModal.outerHeight();that.$redactorModal.css("margin-top","-"+(height+10)/2+"px")}})})},modalCloseHandler:function(e){return e.keyCode===this.keyCode.ESC?(this.modalClose(),!1):void 0},modalClose:function(){return $("#redactor_modal_close").off("click",this.modalClose),$("#redactor_modal").fadeOut("fast",$.proxy(function(){var redactorModalInner=$("#redactor_modal_inner");this.modalcontent!==!1&&(this.modalcontent.html(redactorModalInner.html()),this.modalcontent=!1),redactorModalInner.html(""),this.opts.modalOverlay&&$("#redactor_modal_overlay").hide().off("click",this.modalClose),$(document).off("keyup",this.modalCloseHandler),this.$editor.off("keyup",this.modalCloseHandler),this.selectionRestore(),this.opts.autoresize&&this.saveModalScroll?$(this.document.body).scrollTop(this.saveModalScroll):this.opts.autoresize===!1&&this.saveModalScroll&&this.$editor.scrollTop(this.saveModalScroll),this.callback("modalClosed")},this)),this.isMobile()===!1&&$(document.body).css("overflow",this.modalSaveBodyOveflow?this.modalSaveBodyOveflow:"visible"),!1},modalSetTab:function(num){$(".redactor_tab").hide(),$("#redactor_tabs").find("a").removeClass("redactor_tabs_act").eq(num-1).addClass("redactor_tabs_act"),$("#redactor_tab"+num).show()},s3handleFileSelect:function(e){for(var f,files=e.target.files,i=0;f=files[i];i++)this.s3uploadFile(f)},s3uploadFile:function(file){this.s3executeOnSignedUrl(file,$.proxy(function(signedURL){this.s3uploadToS3(file,signedURL)},this))},s3executeOnSignedUrl:function(file,callback){var xhr=new XMLHttpRequest,mark="?";"-1"!=this.opts.s3.search(/\?/)&&(mark="&"),xhr.open("GET",this.opts.s3+mark+"name="+file.name+"&type="+file.type,!0),xhr.overrideMimeType&&xhr.overrideMimeType("text/plain; charset=x-user-defined");var that=this;xhr.onreadystatechange=function(e){4==this.readyState&&200==this.status?(that.showProgressBar(),callback(decodeURIComponent(this.responseText))):4==this.readyState&&200!=this.status},xhr.send()},s3createCORSRequest:function(method,url){var xhr=new XMLHttpRequest;return"withCredentials"in xhr?xhr.open(method,url,!0):"undefined"!=typeof XDomainRequest?(xhr=new XDomainRequest,xhr.open(method,url)):xhr=null,xhr},s3uploadToS3:function(file,url){var xhr=this.s3createCORSRequest("PUT",url);xhr&&(xhr.onload=$.proxy(function(){if(200==xhr.status){this.hideProgressBar();var s3image=url.split("?");if(!s3image[0])return!1;this.selectionRestore();var html="";html='<img id="image-marker" src="'+s3image[0]+'" />',this.opts.paragraphy&&(html="<p>"+html+"</p>"),this.execCommand("inserthtml",html,!1);var image=$(this.$editor.find("img#image-marker"));image.length?image.removeAttr("id"):image=!1,this.sync(),this.callback("imageUpload",image,!1),this.modalClose(),this.observeImages()}},this),xhr.onerror=function(){},xhr.upload.onprogress=function(e){},xhr.setRequestHeader("Content-Type",file.type),xhr.setRequestHeader("x-amz-acl","public-read"),xhr.send(file))},uploadInit:function(el,options){this.uploadOptions={url:!1,success:!1,error:!1,start:!1,trigger:!1,auto:!1,input:!1},$.extend(this.uploadOptions,options);var $el=$("#"+el);$el.length&&"INPUT"===$el[0].tagName?(this.uploadOptions.input=$el,this.el=$($el[0].form)):this.el=$el,this.element_action=this.el.attr("action"),this.uploadOptions.auto?$(this.uploadOptions.input).change($.proxy(function(e){this.el.submit(function(e){return!1}),this.uploadSubmit(e)},this)):this.uploadOptions.trigger&&$("#"+this.uploadOptions.trigger).click($.proxy(this.uploadSubmit,this))},uploadSubmit:function(e){this.showProgressBar(),this.uploadForm(this.element,this.uploadFrame())},uploadFrame:function(){this.id="f"+Math.floor(99999*Math.random());var d=this.document.createElement("div"),iframe='<iframe style="display:none" id="'+this.id+'" name="'+this.id+'"></iframe>';return d.innerHTML=iframe,$(d).appendTo("body"),this.uploadOptions.start&&this.uploadOptions.start(),$("#"+this.id).load($.proxy(this.uploadLoaded,this)),this.id},uploadForm:function(f,name){if(this.uploadOptions.input){var formId="redactorUploadForm"+this.id,fileId="redactorUploadFile"+this.id;this.form=$('<form action="'+this.uploadOptions.url+'" method="POST" target="'+name+'" name="'+formId+'" id="'+formId+'" enctype="multipart/form-data" />'),this.opts.uploadFields!==!1&&"object"==typeof this.opts.uploadFields&&$.each(this.opts.uploadFields,$.proxy(function(k,v){null!=v&&0===v.toString().indexOf("#")&&(v=$(v).val());var hidden=$("<input/>",{type:"hidden",name:k,value:v});$(this.form).append(hidden)},this));var oldElement=this.uploadOptions.input,newElement=$(oldElement).clone();$(oldElement).attr("id",fileId).before(newElement).appendTo(this.form),$(this.form).css("position","absolute").css("top","-2000px").css("left","-2000px").appendTo("body"),this.form.submit()}else f.attr("target",name).attr("method","POST").attr("enctype","multipart/form-data").attr("action",this.uploadOptions.url),this.element.submit()},uploadLoaded:function(){var d,i=$("#"+this.id)[0];if(d=i.contentDocument?i.contentDocument:i.contentWindow?i.contentWindow.document:window.frames[this.id].document,this.uploadOptions.success)if(this.hideProgressBar(),"undefined"!=typeof d){var rawString=d.body.innerHTML,jsonString=rawString.match(/\{(.|\n)*\}/)[0];jsonString=jsonString.replace(/^\[/,""),jsonString=jsonString.replace(/\]$/,"");var json=$.parseJSON(jsonString);"undefined"==typeof json.error?this.uploadOptions.success(json):(this.uploadOptions.error(this,json),this.modalClose())}else this.modalClose(),alert("Upload failed!");this.el.attr("action",this.element_action),this.el.attr("target","")},draguploadInit:function(el,options){return this.draguploadOptions=$.extend({url:!1,success:!1,error:!1,preview:!1,uploadFields:!1,text:this.opts.curLang.drop_file_here,atext:this.opts.curLang.or_choose,uploadParam:!1},options),void 0===window.FormData?!1:(this.droparea=$('<div class="redactor_droparea"></div>'),this.dropareabox=$('<div class="redactor_dropareabox">'+this.draguploadOptions.text+"</div>"),this.dropalternative=$('<div class="redactor_dropalternative">'+this.draguploadOptions.atext+"</div>"),this.droparea.append(this.dropareabox),$(el).before(this.droparea),$(el).before(this.dropalternative),this.dropareabox.on("dragover",$.proxy(function(){return this.draguploadOndrag()},this)),this.dropareabox.on("dragleave",$.proxy(function(){return this.draguploadOndragleave()},this)),void(this.dropareabox.get(0).ondrop=$.proxy(function(e){e.preventDefault(),this.dropareabox.removeClass("hover").addClass("drop"),this.showProgressBar(),this.dragUploadAjax(this.draguploadOptions.url,e.dataTransfer.files[0],!1,e,this.draguploadOptions.uploadParam)},this)))},dragUploadAjax:function(url,file,directupload,e,uploadParam){if(!directupload){var xhr=$.ajaxSettings.xhr();xhr.upload&&xhr.upload.addEventListener("progress",$.proxy(this.uploadProgress,this),!1),$.ajaxSetup({xhr:function(){return xhr}})}this.callback("drop",e);var fd=new FormData;uploadParam!==!1?fd.append(uploadParam,file):fd.append("file",file),this.opts.uploadFields!==!1&&"object"==typeof this.opts.uploadFields&&$.each(this.opts.uploadFields,$.proxy(function(k,v){null!=v&&0===v.toString().indexOf("#")&&(v=$(v).val()),fd.append(k,v)},this)),$.ajax({url:url,dataType:"html",data:fd,cache:!1,contentType:!1,processData:!1,type:"POST",success:$.proxy(function(data){data=data.replace(/^\[/,""),data=data.replace(/\]$/,"");var json="string"==typeof data?$.parseJSON(data):data;if(this.hideProgressBar(),directupload){var $img=$("<img>");$img.attr("src",json.filelink).attr("id","drag-image-marker"),this.insertNodeToCaretPositionFromPoint(e,$img[0]);var image=$(this.$editor.find("img#drag-image-marker"));image.length?image.removeAttr("id"):image=!1,this.sync(),this.observeImages(),image&&this.callback("imageUpload",image,json),"undefined"!=typeof json.error&&this.callback("imageUploadError",json)}else"undefined"==typeof json.error?this.draguploadOptions.success(json):(this.draguploadOptions.error(this,json),this.draguploadOptions.success(!1))},this)})},draguploadOndrag:function(){return this.dropareabox.addClass("hover"),!1},draguploadOndragleave:function(){return this.dropareabox.removeClass("hover"),!1},uploadProgress:function(e,text){var percent=e.loaded?parseInt(e.loaded/e.total*100,10):e;this.dropareabox.text("Loading "+percent+"% "+(text||""))},isMobile:function(){return/(iPhone|iPod|BlackBerry|Android)/.test(navigator.userAgent)},isIPad:function(){return/iPad/.test(navigator.userAgent)},normalize:function(str){return"undefined"==typeof str?0:parseInt(str.replace("px",""),10)},outerHtml:function(el){return $("<div>").append($(el).eq(0).clone()).html()},stripHtml:function(html){var tmp=document.createElement("DIV");return tmp.innerHTML=html,tmp.textContent||tmp.innerText||""},isString:function(obj){return"[object String]"==Object.prototype.toString.call(obj)},isEmpty:function(html){return html=html.replace(/​|<br>|<br\/>| /gi,""),html=html.replace(/\s/g,""),html=html.replace(/^<p>[^\W\w\D\d]*?<\/p>$/i,""),""==html},getInternetExplorerVersion:function(){var rv=!1;if("Microsoft Internet Explorer"==navigator.appName){var ua=navigator.userAgent,re=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");null!=re.exec(ua)&&(rv=parseFloat(RegExp.$1))}return rv},isIe11:function(){return!!navigator.userAgent.match(/Trident\/7\./)},browser:function(browser){var ua=navigator.userAgent.toLowerCase(),match=/(opr)[\/]([\w.]+)/.exec(ua)||/(chrome)[ \/]([\w.]+)/.exec(ua)||/(webkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(ua)||/(webkit)[ \/]([\w.]+)/.exec(ua)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua)||/(msie) ([\w.]+)/.exec(ua)||ua.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(ua)||ua.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua)||[];return"version"==browser?match[2]:"webkit"==browser?"chrome"==match[1]||"webkit"==match[1]:"rv"==match[1]?"msie"==browser:"opr"==match[1]?"webkit"==browser:browser==match[1]},oldIE:function(){return this.browser("msie")&&parseInt(this.browser("version"),10)<9?!0:!1},getFragmentHtml:function(fragment){var cloned=fragment.cloneNode(!0),div=this.document.createElement("div");return div.appendChild(cloned),div.innerHTML},extractContent:function(){for(var child,node=this.$editor[0],frag=this.document.createDocumentFragment();child=node.firstChild;)frag.appendChild(child);return frag},isParentRedactor:function(el){return el?this.opts.iframe?el:0==$(el).parents("div.redactor_editor").length||$(el).hasClass("redactor_editor")?!1:el:!1},currentOrParentIs:function(tagName){var parent=this.getParent(),current=this.getCurrent();return parent&&parent.tagName===tagName?parent:current&¤t.tagName===tagName?current:!1},isEndOfElement:function(){var current=this.getBlock(),offset=this.getCaretOffset(current),text=$.trim($(current).text()).replace(/\n\r\n/g,""),len=text.length;return offset==len?!0:!1},isFocused:function(){var el,sel=this.getSelection();return sel&&sel.rangeCount&&sel.rangeCount>0&&(el=sel.getRangeAt(0).startContainer),el?this.opts.iframe?this.getCaretOffsetRange().equals()?!this.$editor.is(el):!0:0!=$(el).closest("div.redactor_editor").length:!1},removeEmptyAttr:function(el,attr){""==$(el).attr(attr)&&$(el).removeAttr(attr)},removeFromArrayByValue:function(array,value){for(var index=null;-1!==(index=array.indexOf(value));)array.splice(index,1);return array}},Redactor.prototype.init.prototype=Redactor.prototype,$.Redactor.fn.formatLinkify=function(protocol,convertLinks,convertImageLinks,convertVideoLinks,linkSize){for(var url=/(((https?|ftps?):\/\/)|www[.][^\s])(.+?\..+?)([.),]?)(\s|\.\s+|\)|$)/gi,rProtocol=/(https?|ftp):\/\//i,urlImage=/(https?:\/\/.*\.(?:png|jpg|jpeg|gif))/gi,childNodes=(this.$editor?this.$editor.get(0):this).childNodes,i=childNodes.length;i--;){var n=childNodes[i];if(3===n.nodeType){var html=n.nodeValue;if(convertVideoLinks&&html){var iframeStart='<iframe width="500" height="281" src="',iframeEnd='" frameborder="0" allowfullscreen></iframe>';html.match(reUrlYoutube)?(html=html.replace(reUrlYoutube,iframeStart+"//www.youtube.com/embed/$1"+iframeEnd),$(n).after(html).remove()):html.match(reUrlVimeo)&&(html=html.replace(reUrlVimeo,iframeStart+"//player.vimeo.com/video/$2"+iframeEnd),$(n).after(html).remove())}if(convertImageLinks&&html&&html.match(urlImage)&&(html=html.replace(urlImage,'<img src="$1">'),$(n).after(html).remove()),convertLinks&&html&&html.match(url)){var matches=html.match(url);for(var i in matches){var href=matches[i],text=href,space="";null!==href.match(/\s$/)&&(space=" ");var addProtocol=protocol;null!==href.match(rProtocol)&&(addProtocol=""),text.length>linkSize&&(text=text.substring(0,linkSize)+"..."),text=text.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");var escapedBackReferences=text.replace("$","$$$");html=html.replace(href,'<a href="'+addProtocol+$.trim(href)+'">'+$.trim(escapedBackReferences)+"</a>"+space)}$(n).after(html).remove()}}else 1!==n.nodeType||/^(a|button|textarea)$/i.test(n.tagName)||$.Redactor.fn.formatLinkify.call(n,protocol,convertLinks,convertImageLinks,convertVideoLinks,linkSize)}}}(jQuery),!RedactorPlugins)var RedactorPlugins={};if(RedactorPlugins.fontcolor={init:function(){for(var colors=["#ffffff","#000000","#eeece1","#1f497d","#4f81bd","#c0504d","#9bbb59","#8064a2","#4bacc6","#f79646","#ffff00","#f2f2f2","#7f7f7f","#ddd9c3","#c6d9f0","#dbe5f1","#f2dcdb","#ebf1dd","#e5e0ec","#dbeef3","#fdeada","#fff2ca","#d8d8d8","#595959","#c4bd97","#8db3e2","#b8cce4","#e5b9b7","#d7e3bc","#ccc1d9","#b7dde8","#fbd5b5","#ffe694","#bfbfbf","#3f3f3f","#938953","#548dd4","#95b3d7","#d99694","#c3d69b","#b2a2c7","#b7dde8","#fac08f","#f2c314","#a5a5a5","#262626","#494429","#17365d","#366092","#953734","#76923c","#5f497a","#92cddc","#e36c09","#c09100","#7f7f7f","#0c0c0c","#1d1b10","#0f243e","#244061","#632423","#4f6128","#3f3151","#31859b","#974806","#7f6000"],buttonsHide=this.opts.buttonsHide,buttons=["fontcolor","backcolor"],i=0;2>i;i++){var name=buttons[i];if(!(buttonsHide.indexOf(name)>-1)){var $dropdown=$('<div class="redactor_dropdown redactor_dropdown_box_'+name+'" style="display: none; width: 243px;">');this.pickerBuild($dropdown,name,colors),$(this.$toolbar).append($dropdown);var btn=this.buttonAdd(name,this.opts.curLang[name],$.proxy(function(btnName,$button,btnObject,e){this.dropdownShow(e,btnName)},this));btn.data("dropdown",$dropdown)}}},pickerBuild:function($dropdown,name,colors){var rule="color";"backcolor"===name&&(rule="background-color");for(var _self=this,onSwatch=function(e){e.preventDefault();var $this=$(this);_self.pickerSet($this.data("rule"),$this.attr("rel"))},len=colors.length,z=0;len>z;z++){var color=colors[z],$swatch=$('<a rel="'+color+'" data-rule="'+rule+'" href="#" style="float: left; font-size: 0; border: 2px solid #fff; padding: 0; margin: 0; width: 20px; height: 20px;"></a>');$swatch.css("background-color",color),$dropdown.append($swatch),$swatch.on("click",onSwatch)}var $elNone=$('<a href="#" style="display: block; clear: both; padding: 4px 0; font-size: 11px; line-height: 1;"></a>').html(this.opts.curLang.none).on("click",function(e){e.preventDefault(),_self.pickerSet(rule,!1)});$dropdown.append($elNone)},pickerSet:function(rule,type){this.bufferSet(),this.$editor.focus(),this.inlineRemoveStyle(rule),type!==!1&&this.inlineSetStyle(rule,type),this.opts.air&&this.$air.fadeOut(100),this.sync()}},!RedactorPlugins)var RedactorPlugins={};if(RedactorPlugins.fontfamily={init:function(){var fonts=["Arial","Helvetica","Georgia","Times New Roman","Monospace"],that=this,dropdown={};$.each(fonts,function(i,s){dropdown["s"+i]={title:s,callback:function(){that.setFontfamily(s)}}}),dropdown.remove={title:"Remove font",callback:function(){that.resetFontfamily()}},this.buttonAdd("fontfamily","Change font family",!1,dropdown)},setFontfamily:function(value){this.inlineSetStyle("font-family",value)},resetFontfamily:function(){this.inlineRemoveStyle("font-family")}},!RedactorPlugins)var RedactorPlugins={};if(RedactorPlugins.fontsize={init:function(){var fonts=[10,11,12,14,16,18,20,24,28,30],that=this,dropdown={};$.each(fonts,function(i,s){dropdown["s"+i]={title:s+"px",callback:function(){that.setFontsize(s)}}}),dropdown.remove={title:"Remove font size",callback:function(){that.resetFontsize()}},this.buttonAdd("fontsize","Change font size",!1,dropdown)},setFontsize:function(size){this.inlineSetStyle("font-size",size+"px")},resetFontsize:function(){this.inlineRemoveStyle("font-size")}},!RedactorPlugins)var RedactorPlugins={};if(RedactorPlugins.gaimageupload={init:function(){var token=this.opts.apiToken,tokenName=this.opts.apiTokenName;this.uploadForm=function(f,name){var file=this.uploadOptions.input[0].files[0];this.dragUploadAjax(this.uploadOptions.url,file,!1,null,!1)},this.dragUploadAjax=function(url,file,directupload,e,uploadParam){if(!directupload){var xhr=$.ajaxSettings.xhr();xhr.upload&&xhr.upload.addEventListener("progress",$.proxy(this.uploadProgress,this),!1),$.ajaxSetup({xhr:function(){return xhr}})}this.callback("drop",e);var fd=new FormData;this.opts.imageUploadParam!==!1?fd.append(this.opts.imageUploadParam,file):fd.append("file",file),this.opts.uploadFields!==!1&&"object"==typeof this.opts.uploadFields&&$.each(this.opts.uploadFields,$.proxy(function(k,v){null!=v&&0===v.toString().indexOf("#")&&(v=$(v).val()),fd.append(k,v)},this)),$.ajax({url:url,dataType:"html",data:fd,cache:!1,contentType:!1,processData:!1,type:"POST",beforeSend:function(xhr){xhr.setRequestHeader("Authorization",tokenName+" "+token)},success:$.proxy(function(data){data=data.replace(/^\[/,""),data=data.replace(/\]$/,"");var json="string"==typeof data?$.parseJSON(data):data;if(json.filelink=json.url,this.hideProgressBar(),directupload){var $img=$("<img>");$img.attr("src",json.filelink).attr("id","drag-image-marker"),this.insertNodeToCaretPositionFromPoint(e,$img[0]);var image=$(this.$editor.find("img#drag-image-marker"));image.length?image.removeAttr("id"):image=!1,this.sync(),this.observeImages(),image&&this.callback("imageUpload",image,json),"undefined"!=typeof json.error&&this.callback("imageUploadError",json)}else"undefined"==typeof json.error?this.draguploadOptions.success(json):(this.draguploadOptions.error(this,json),this.draguploadOptions.success(!1))},this)})}}},!RedactorPlugins)var RedactorPlugins={};var token,url;if(RedactorPlugins.gaimporttemplate={init:function(){token=this.opts.apiToken,url=this.opts.premailerEndpoint,$.extend(this.opts,{modal_template:String()+'<section id="redactor-modal-video-insert"><form id="redactorInsertVideoForm"><label>Paste your email template below.</label><textarea id="redactor_insert_template_area" style="width: 99%; height: 160px;"></textarea></form></section><footer><button class="redactor_modal_btn redactor_btn_modal_close">'+this.opts.curLang.cancel+'</button><button id="redactor_import_template_btn" class="redactor_modal_btn redactor_modal_action_btn">Import</button></footer>'}),this.buttonAdd("gaimporttemplate","Import email template",this.openTemplateModal),this.buttonAwesome("gaimporttemplate","fa-sign-in")},openTemplateModal:function(){this.selectionSave(),this.modalInit("Import Template",this.opts.modal_template,600,$.proxy(function(){$("#redactor_import_template_btn").click($.proxy(this.processTemplate,this)),setTimeout(function(){$("#redactor_insert_template_area").focus()},200)},this))},processTemplate:function(){var template=$("#redactor_insert_template_area").val();$.ajax({url:url,data:{html:template},type:"POST",beforeSend:function(xhr){xhr.setRequestHeader("Authorization","Token "+token)},success:$.proxy(function(data){this.set(data.html),this.modalClose()},this)})}},!RedactorPlugins)var RedactorPlugins={};RedactorPlugins.taglist={init:function(){var tags=this.opts.tags,tagButton=this.opts.tagButton,dropdown=[],that=this;$.each(tags,function(i,t){dropdown[i]={title:tags[i].label,callback:function(){that.insertTag(tags[i].tag)}}}),this.buttonAdd("taglist","Insert a tag",!1,dropdown),this.buttonText("taglist",tagButton)},insertTag:function(tag){var scope=angular.element(document.getElementById("redactor_toolbar_"+this.uuid)).scope();scope.$broadcast("TAG_ADDED"),this.insertText(tag)},buttonText:function(key,name){var button=this.buttonGet(key);button.removeClass("redactor-btn-image"),button.addClass("redactor-btn-text"),button.html(name)}};