automizy-email-editor
Version:
Design mobile friendly HTML emails in your application.
7 lines • 6.49 kB
JavaScript
define([
"core"
], function () {
$AEE.styleHtml = function (e, t) {
function u(){this.pos=0;this.token="";this.current_mode="CONTENT";this.tags={parent:"parent1",parentcount:1,parent1:""};this.tag_type="";this.token_text=this.last_token=this.last_text=this.token_type="";this.Utils={whitespace:"\n\r ".split(""),single_token:"br,input,link,meta,!doctype,basefont,base,area,hr,wbr,param,img,isindex,?xml,embed".split(","),extra_liners:"head,body,/html".split(","),in_array:function(e,t){for(var n=0;n<t.length;n++)if(e===t[n])return true;return false}};this.get_content=function(){var e="";var t=[];var n=false;while(this.input.charAt(this.pos)!=="<"){if(this.pos>=this.input.length)return t.length?t.join(""):["","TK_EOF"];e=this.input.charAt(this.pos);this.pos++;this.line_char_count++;if(this.Utils.in_array(e,this.Utils.whitespace)){if(t.length)n=true;this.line_char_count--;continue}else if(n){if(this.line_char_count>=this.max_char){t.push("\n");for(var r=0;r<this.indent_level;r++)t.push(this.indent_string);this.line_char_count=0}else{t.push(" ");this.line_char_count++}n=false}t.push(e)}return t.length?t.join(""):""};this.get_script=function(){var e="";var t=[];var n=new RegExp("</script"+">","igm");n.lastIndex=this.pos;var r=n.exec(this.input);var i=r?r.index:this.input.length;while(this.pos<i){if(this.pos>=this.input.length)return t.length?t.join(""):["","TK_EOF"];e=this.input.charAt(this.pos);this.pos++;t.push(e)}return t.length?t.join(""):""};this.record_tag=function(e){if(this.tags[e+"count"]){this.tags[e+"count"]++;this.tags[e+this.tags[e+"count"]]=this.indent_level}else{this.tags[e+"count"]=1;this.tags[e+this.tags[e+"count"]]=this.indent_level}this.tags[e+this.tags[e+"count"]+"parent"]=this.tags.parent;this.tags.parent=e+this.tags[e+"count"]};this.retrieve_tag=function(e){if(this.tags[e+"count"]){var t=this.tags.parent;while(t){if(e+this.tags[e+"count"]===t)break;t=this.tags[t+"parent"]}if(t){this.indent_level=this.tags[e+this.tags[e+"count"]];this.tags.parent=this.tags[t+"parent"]}delete this.tags[e+this.tags[e+"count"]+"parent"];delete this.tags[e+this.tags[e+"count"]];if(this.tags[e+"count"]==1)delete this.tags[e+"count"];else this.tags[e+"count"]--}};this.get_tag=function(){var e="";var t=[];var n=false;do{if(this.pos>=this.input.length)return t.length?t.join(""):["","TK_EOF"];e=this.input.charAt(this.pos);this.pos++;this.line_char_count++;if(this.Utils.in_array(e,this.Utils.whitespace)){n=true;this.line_char_count--;continue}if(e==="'"||e==='"')if(!t[1]||t[1]!=="!"){e+=this.get_unformatted(e);n=true}if(e==="=")n=false;if(t.length&&t[t.length-1]!=="="&&e!==">"&&n){if(this.line_char_count>=this.max_char){this.print_newline(false,t);this.line_char_count=0}else{t.push(" ");this.line_char_count++}n=false}t.push(e)}while(e!==">");var r=t.join("");var i;if(r.indexOf(" ")!=-1)i=r.indexOf(" ");else i=r.indexOf(">");var s=r.substring(1,i).toLowerCase();if(r.charAt(r.length-2)==="/"||this.Utils.in_array(s,this.Utils.single_token))this.tag_type="SINGLE";else if(s==="script"){this.record_tag(s);this.tag_type="SCRIPT"}else if(s==="style"){this.record_tag(s);this.tag_type="STYLE"}else if(this.Utils.in_array(s,unformatted)){var o=this.get_unformatted("</"+s+">",r);t.push(o);this.tag_type="SINGLE"}else if(s.charAt(0)==="!")if(s.indexOf("[if")!=-1){if(r.indexOf("!IE")!=-1){var o=this.get_unformatted("-->",r);t.push(o)}this.tag_type="START"}else if(s.indexOf("[endif")!=-1){this.tag_type="END";this.unindent()}else if(s.indexOf("[cdata[")!=-1){var o=this.get_unformatted("]]>",r);t.push(o);this.tag_type="SINGLE"}else{var o=this.get_unformatted("-->",r);t.push(o);this.tag_type="SINGLE"}else{if(s.charAt(0)==="/"){this.retrieve_tag(s.substring(1));this.tag_type="END"}else{this.record_tag(s);this.tag_type="START"}if(this.Utils.in_array(s,this.Utils.extra_liners))this.print_newline(true,this.output)}return t.join("")};this.get_unformatted=function(e,t){if(t&&t.indexOf(e)!=-1)return"";var n="";var r="";var i=true;do{if(this.pos>=this.input.length)return r;n=this.input.charAt(this.pos);this.pos++;if(this.Utils.in_array(n,this.Utils.whitespace)){if(!i){this.line_char_count--;continue}if(n==="\n"||n==="\r"){r+="\n";this.line_char_count=0;continue}}r+=n;this.line_char_count++;i=true}while(r.indexOf(e)==-1);return r};this.get_token=function(){var e;if(this.last_token==="TK_TAG_SCRIPT"){var t=this.get_script();if(typeof t!=="string")return t;e=js_beautify(t.replace(/^[\r\n]+/,""),{indent_size:this.indent_size,indent_char:this.indent_character,brace_style:this.brace_style});return[e,"TK_CONTENT"]}if(this.current_mode==="CONTENT"){e=this.get_content();if(typeof e!=="string")return e;else return[e,"TK_CONTENT"]}if(this.current_mode==="TAG"){e=this.get_tag();if(typeof e!=="string")return e;else{var n="TK_TAG_"+this.tag_type;return[e,n]}}};this.printer=function(e,t,n,r,i){this.input=e||"";this.output=[];this.indent_character=t;this.indent_string="";this.indent_size=n;this.brace_style=i;this.indent_level=0;this.max_char=r;this.line_char_count=0;for(var s=0;s<this.indent_size;s++)this.indent_string+=this.indent_character;this.print_newline=function(e,t){this.line_char_count=0;if(!t||!t.length)return;if(!e)while(this.Utils.in_array(t[t.length-1],this.Utils.whitespace))t.pop();t.push("\n");for(var n=0;n<this.indent_level;n++)t.push(this.indent_string)};this.print_token=function(e){this.output.push(e)};this.indent=function(){this.indent_level++};this.unindent=function(){if(this.indent_level>0)this.indent_level--}};return this}var n,r,i,s,o;t=t||{};r=t.indent_size||4;i=t.indent_char||" ";o=t.brace_style||"collapse";s=t.max_char||"70";unformatted=t.unformatted||["a"];n=new u;n.printer(e,i,r,s,o);while(true){var a=n.get_token();n.token_text=a[0];n.token_type=a[1];if(n.token_type==="TK_EOF")break;switch(n.token_type){case"TK_TAG_START":case"TK_TAG_STYLE":n.print_newline(false,n.output);n.print_token(n.token_text);n.indent();n.current_mode="CONTENT";break;case"TK_TAG_SCRIPT":n.print_newline(false,n.output);n.print_token(n.token_text);n.current_mode="CONTENT";break;case"TK_TAG_END":n.print_newline(true,n.output);n.print_token(n.token_text);n.current_mode="CONTENT";break;case"TK_TAG_SINGLE":n.print_newline(false,n.output);n.print_token(n.token_text);n.current_mode="CONTENT";break;case"TK_CONTENT":if(n.token_text!==""){n.print_newline(false,n.output);n.print_token(n.token_text)}n.current_mode="TAG";break}n.last_token=n.token_type;n.last_text=n.token_text}return n.output.join("");
};
});