{"version":3,"sources":["doTA.js"],"names":["G","t","module","exports","document","window","this","X","h","b","f","indexOf","text","substring","c","closeTag","comment","d","e","g","q","k","a","n","l","u","slice","length","replace","toLowerCase","openTag","voidTag","console","Y","O","toUpperCase","K","getElementById","substr","setAttribute","String","prototype","trim","Object","watch","unwatch","v","createElement","B","diff","H","firstChild","nodeType","nodeValue","diff2","lastIndexOf","charAt","innerHTML","parentNode","replaceChild","insertBefore","createTextNode","appendChild","diff3","y","L","x","removeChild","getId","U","initCH","compile","match","Z","F","push","aa","Q","I","R","N","loose","true","false","null","undefined","new","doTA","$index","S","$attr","M","Math","Date","Array","location","_","C","E","render","V","m","J","watchDiff","diffLevel","model","ba","bind","ca","event","key","W","params","da","T","strip","ea","encode","fa",">","<","r","w","A","skip","z","D","p","refresh","split","elif","ga","exec","style","value","ha","id","P","expand","join","optimize","ia","debug","Function","scroll","change","input","click","dblclick","mousedown","mouseup","mouseover","mouseout","mousemove","mouseenter","mouseleave","keydown","keyup","keypress","submit","focus","blur","copy","cut","paste"],"mappings":"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","file":"doTA.min.js","sourcesContent":["(function(global, factory) {\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\t\tmodule.exports = factory(global, global.document);\n\t} else {\n\t\tfactory(global, global.document);\n\t}\n\n}(typeof window !== 'undefined' ? window : this, function(window, document) {\n\n\t/* for ie8 */\n\tif (!String.prototype.trim) {\n\t\tString.prototype.trim = function() {\n\t\t\treturn this.replace(/^\\s+|\\s+$/g,'');\n\t\t};\n\t}\n\n\t/* no, thanks! firefox */\n\tif (Object.prototype.watch) {\n\t\tdelete Object.prototype.watch;\n\t\tdelete Object.prototype.unwatch;\n\t}\n\n\t//less memory usage with this, javascript is single threaded anyway\n\tvar newNode = document && document.createElement('div');\n\n\tvar doTA = {\n\t\tdiff: diff1,\n\t\tdiff2: diff2,\n\t\tdiff3: diff3,\n\t\tgetId: getUniqueId,\n\t\tinitCH: initCompileHash,\n\t\tcompile: compileHTML,\n\t\t// PS: parseStyle,\n\t\tC: {}, //Cached compiled functions\n\t\tD: {}, //Cached DOM to be used by ngDoTA, needed here to prevent unneccessary rendering\n\t\tH: {}, //HashMap for TextDiff\n\t\tW: {}, //Watched Functions\n\t\tU: {},\n\t\tN: newNode,\n\t\tX: 0\n\t};\n\n\t// pretty indent for debugging\n\tfunction indent(n, x) {\n\t\tvar ret = new Array(n + 2).join(' '); //4 spaces\n\t\treturn x ? ret.slice(0, -2 * x) : ret; //-2 spaces\n\t}\n\n\t// decode html entities\n\tfunction decodeEntities(text) {\n\t\treturn text.indexOf('&') < 0 ? text : text\n\t\t\t.replace(/>/g, '>').replace(/</g, '<')\n\t\t\t.replace(/&/g, '&').replace(/"/g, '\"');\n\t}\n\n\t// parse attributes from html open tag and make dict object\n\tfunction parseAttr(chunk, func) {\n\t\tvar attr = {}, tagName;\n\t\tvar pos = chunk.indexOf(' ');\n\t\tvar spPos;\n\t\tvar len, attrName, attrVal;\n\t\tvar valStart, valEndPos;\n\n\t\tif (pos !== -1) {\n\t\t\ttagName = chunk.slice(0, pos);\n\t\t\tlen = chunk.length;\n\n\t\t\t//console.log(222, [pos, chunk]);\n\t\t\twhile (++pos < len) {\n\t\t\t\tvar eqPos = chunk.indexOf('=', pos);\n\t\t\t\t// console.log('chunk', [chunk, pos, eqPos, chunk.slice(pos)]);\n\n\t\t\t\t// ** attribute without value (last attribute) **\n\t\t\t\tif (eqPos === -1) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tspPos = chunk.indexOf(' ', pos);\n\t\t\t\t\t\tif (spPos > 0) {\n\t\t\t\t\t\t\tattrName = chunk.slice(pos, spPos);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattrName = chunk.slice(pos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// console.log('eqPos === -1', [attrName, pos, chunk])\n\t\t\t\t\t\tif (attrName !== '/') {\n\t\t\t\t\t\t\tattr[attrName] = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpos = spPos + 1;\n\n\t\t\t\t\t} while (spPos > 0);\n\t\t\t\t\t//attr required will be required=\"\", while is valid syntax\n\t\t\t\t\t//http://www.w3.org/TR/html-markup/syntax.html#syntax-attr-empty\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\n\t\t\t\tspPos = chunk.indexOf(' ', pos);\n\t\t\t\t// console.log('chunk', [chunk, eqPos, pos, spPos, chunk.slice(pos, spPos)]);\n\n\t\t\t\tif (spPos > 0 && spPos < eqPos) {\n\t\t\t\t\tattr[chunk.slice(pos, spPos)] = \"\";\n\t\t\t\t\tpos = spPos;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t//console.log(33, [eqPos]);\n\t\t\t\tattrName = chunk.slice(pos, eqPos);\n\t\t\t\t//console.log(331, [attrName]);\n\n\t\t\t\tvalStart = chunk[eqPos + 1];\n\t\t\t\t//console.log(332, [valStart]);\n\n\t\t\t\t//if attribute value is start with quote\n\t\t\t\tif (valStart === '\"' || valStart === \"'\") {\n\t\t\t\t\tvalEndPos = chunk.indexOf(valStart, eqPos + 2);\n\t\t\t\t\tif (valEndPos < 0) { throw 'ERR:Invalid HTML: [' + chunk + ']'; }\n\n\t\t\t\t\tattrVal = chunk.slice(eqPos + 2, valEndPos);\n\t\t\t\t\tattr[attrName] =0>attrVal.indexOf(\"&\")?attrVal:attrVal.replace(/>/g,\">\").replace(/</g,\"<\").replace(/&/g,\"&\").replace(/"/g,'\"'); //INLINE;\n\t\t\t\t\tpos = valEndPos + 1;\n\t\t\t\t\t//console.log(311, [valEndPos, attrName, attrVal]);\n\t\t\t\t} else {\n\n\t\t\t\t\tvalEndPos = chunk.indexOf(' ', eqPos + 2);\n\n\t\t\t\t\t//when no more attributes\n\t\t\t\t\tif (valEndPos < 0) {\n\t\t\t\t\t\tattrVal = chunk.slice(eqPos + 1);\n\t\t\t\t\t\tattr[attrName] =0>attrVal.indexOf(\"&\")?attrVal:attrVal.replace(/>/g,\">\").replace(/</g,\"<\").replace(/&/g,\"&\").replace(/"/g,'\"'); //INLINE;\n\t\t\t\t\t\t//console.log(442, [attrVal]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tattrVal = chunk.slice(eqPos + 1, valEndPos);\n\t\t\t\t\t\tattr[attrName] =0>attrVal.indexOf(\"&\")?attrVal:attrVal.replace(/>/g,\">\").replace(/</g,\"<\").replace(/&/g,\"&\").replace(/"/g,'\"'); //INLINE;\n\t\t\t\t\t\t//console.log(313, [eqPos, valEndPos, attrVal]);\n\t\t\t\t\t\tpos = valEndPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar tagNameL = tagName.toLowerCase();\n\t\t\tif (tagNameL === 'input' || tagNameL === 'img' || tagNameL === 'hr') {\n\t\t\t\t//http://www.w3.org/TR/html-markup/syntax.html\n\t\t\t\t//area, base, br, col, command, embed, hr, img, input, keygen, link, meta, param, source, track, wbr\n\t\t\t\tfunc.openTag(tagName, attr, 1);\n\t\t\t\tfunc.voidTag();\n\t\t\t} else if (attrName === '/') {\n\t\t\t\tfunc.openTag(tagName, attr);\n\t\t\t\tfunc.closeTag(tagName);\n\t\t\t} else {\n\t\t\t\tfunc.openTag(tagName, attr);\n\t\t\t}\n\n\t\t// no attributes\n\t\t} else {\n\n\t\t\t// self closing, explicit\n\t\t\tif (chunk[chunk.length - 1] === '/') {\n\t\t\t\ttagName = chunk.slice(0, -1).toLowerCase();\n\n\t\t\t\tif (tagName === 'br' || tagName === 'hr') {\n\t\t\t\t\tfunc.openTag(tagName, attr, 1);\n\t\t\t\t\tfunc.voidTag();\n\t\t\t\t} else {\n\t\t\t\t\tfunc.openTag(tagName, attr);\n\t\t\t\t\tfunc.closeTag(tagName);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttagName = chunk.toLowerCase();\n\n\t\t\t\t// self closing, implicit\n\t\t\t\tif (tagName === 'br' || tagName === 'hr') {\n\t\t\t\t\tfunc.openTag(tagName, attr, 1);\n\t\t\t\t\tfunc.voidTag();\n\t\t\t\t} else {\n\t\t\t\t\tfunc.openTag(tagName, attr);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//http://jsperf.com/object-key-vs-array-indexof-lookup/6\n\t//var events = ' scroll change click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste '\n\tvar EVENTS = {\n\t\tscroll: 1, change: 1, input: 1, click: 1, dblclick: 1,\n\t\tmousedown: 1, mouseup: 1, mouseover: 1, mouseout: 1, mousemove: 1, mouseenter: 1, mouseleave: 1,\n\t\tkeydown: 1, keyup: 1, keypress: 1,\n\t\tsubmit: 1, focus: 1, blur: 1,\n\t\tcopy: 1, cut: 1, paste: 1\n\t};\n\n\t//no unicode supportedgit\n\t// var valid_chr = '_$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\t// var VALID_CHARS = {\"_\":1,\"$\":1,\"a\":1,\"b\":1,\"c\":1,\"d\":1,\"e\":1,\"f\":1,\"g\":1,\"h\":1,\"i\":1,\"j\":1,\"k\":1,\"l\":1,\"m\":1,\"n\":1,\"o\":1,\"p\":1,\"q\":1,\"r\":1,\"s\":1,\"t\":1,\"u\":1,\"v\":1,\"w\":1,\"x\":1,\"y\":1,\"z\":1,\"A\":1,\"B\":1,\"C\":1,\"D\":1,\"E\":1,\"F\":1,\"G\":1,\"H\":1,\"I\":1,\"J\":1,\"K\":1,\"L\":1,\"M\":1,\"N\":1,\"O\":1,\"P\":1,\"Q\":1,\"R\":1,\"S\":1,\"T\":1,\"U\":1,\"V\":1,\"W\":1,\"X\":1,\"Y\":1,\"Z\":1};\n\n\t// minimal stripped down html parser\n\tfunction parseHTML(html, func) {\n\t\tif (!html) { return; }\n\t\tvar prevPos = 0;\n\t\tif (html[1] === '?' && html[0] === '<') {\n\t\t\tprevPos = html.indexOf('?', 2);\n\t\t\tif (prevPos >= 1) {\n\t\t\t\tprevPos += 2;\n\t\t\t\tfunc.text(html.substring(0, prevPos));\n\t\t\t} else {\n\t\t\t\tprevPos = 0;\n\t\t\t}\n\t\t}\n\t\tvar pos = html.indexOf('<', prevPos);\n\t\tdo {\n\t\t\tif (html[pos] === '<') {\n\t\t\t\tpos++;\n\t\t\t\tif (html[pos] === '/') {\n\t\t\t\t\tprevPos = ++pos;\n\t\t\t\t\tpos = html.indexOf('>', prevPos);\n\t\t\t\t\t//close tag must be like </div>, but not <div />\n\t\t\t\t\t// console.log(['closetag', prevPos, pos, html.substring(prevPos, pos)])\n\t\t\t\t\tfunc.closeTag(html.substring(prevPos, pos));\n\t\t\t\t} else if (html[pos] === '!') {\n\t\t\t\t\tprevPos = pos;\n\t\t\t\t\tpos = html.indexOf('-->', prevPos);\n\t\t\t\t\t//console.log(['comment', prevPos, pos, html.substring(prevPos, pos + 2)]);\n\t\t\t\t\tfunc.comment(html.substring(prevPos, pos + 2));\n\t\t\t\t\tpos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tprevPos = pos;\n\t\t\t\t\tpos = html.indexOf('>', prevPos);\n\t\t\t\t\t// console.log(['opentag', prevPos, pos, html.substring(prevPos, pos), parseAttr(html.substring(prevPos, pos))])\n\t\t\t\t\tparseAttr(html.substring(prevPos, pos), func);\n\t\t\t\t}\n\t\t\t} else if (html[pos] === '>') { //&& html[pos + 1] !== '<'\n\t\t\t\tprevPos = ++pos;\n\t\t\t\tpos = html.indexOf('<', prevPos);\n\t\t\t\tif (pos > prevPos) {\n\t\t\t\t\t// console.log(['text', prevPos, pos, html.substring(prevPos, pos)])\n\t\t\t\t\tfunc.text(html.substring(prevPos, pos));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (prevPos === 0 && pos < 0 && html) {\n\t\t\t\t\tfunc.text(html);\n\t\t\t\t} else {\n\t\t\t\t\t/** */console.error('Parse ERR?', [prevPos, pos, html, html.substring(prevPos, pos), html.slice(pos)]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t} while (pos > 0);\n\t}\n\n\t//diff and patch dom with exact same structure\n\tfunction diff1(prevKey, html2) {\n\t\tvar html1 = doTA.H[prevKey];\n\t\tvar prevPos1 = 0, pos1 = html1.indexOf('<');\n\t\tvar prevPos2 = 0, pos2 = html2.indexOf('<');\n\t\tvar tagId = '', elem, part1, part2;\n\t\tvar posx, endPosx;\n\n\t\tdo {\n\t\t\tif (html1[pos1] === \"<\") {\n\t\t\t\tpos1++;\n\t\t\t\tpos2++;\n\t\t\t\tif (html1[pos1] === \"/\" || html1[pos1] === \"!\") {\n\t\t\t\t\t//don't patch comment node and close tag.\n\t\t\t\t\tpos1 = html1.indexOf('>', pos1);\n\t\t\t\t\tpos2 = html2.indexOf('>', pos2);\n\t\t\t\t} else {\n\t\t\t\t\tprevPos1 = pos1;\n\t\t\t\t\tprevPos2 = pos2;\n\t\t\t\t\tpos1 = html1.indexOf('>', prevPos1);\n\t\t\t\t\tpos2 = html2.indexOf('>', prevPos2);\n\t\t\t\t\tpart1 = html1.substring(prevPos1, pos1);\n\t\t\t\t\tpart2 = html2.substring(prevPos2, pos2);\n\t\t\t\t\t//attributes\n\t\t\t\t\tif (part1 !== part2) {\n\t\t\t\t\t\t// console.log('openTag', [part1, part2])\n\t\t\t\t\t\ttagId = parsePatchAttr(part1, part2);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//record id\n\t\t\t\t\t\t//tagId = getTagId(part1);\n\t\t\t\t\t\tposx = part1.indexOf(' id=\"');\n\t\t\t\t\t\t0 <= posx && (posx += 5, endPosx = part1.indexOf('\"', posx), tagId = part1.substring(posx, endPosx)); //jshint ignore: line\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t//text node\n\t\t\t} else if (html1[pos1] === '>') {\n\t\t\t\tprevPos1 = ++pos1;\n\t\t\t\tprevPos2 = ++pos2;\n\n\t\t\t\tpos1 = html1.indexOf('<', prevPos1);\n\t\t\t\tpos2 = html2.indexOf('<', prevPos2);\n\t\t\t\t//textNode, only support firstChild here\n\t\t\t\tif (pos2 > prevPos2) {\n\t\t\t\t\tvar text1 = html1.substring(prevPos1, pos1);\n\t\t\t\t\tvar text2 = html2.substring(prevPos2, pos2);\n\t\t\t\t\tif (text1 !== text2) {\n\t\t\t\t\t\telem = document.getElementById(tagId);\n\t\t\t\t\t\tif (elem) {\n\t\t\t\t\t\t\tif (elem.firstChild && elem.firstChild.nodeType === 3) {\n\t\t\t\t\t\t\t\t// console.log('textApplied', [text1, text2]);\n\t\t\t\t\t\t\t\telem.firstChild.nodeValue = text2;\n\t\t\t\t\t\t\t} //else to log something?\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.log('tag not found', [tagId]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} while(pos1 > 0);\n\t}\n\n\t// find position of outerHTML end\n\t// this function will be inline during building\n\tfunction getOuterHTMLEnd(HTML, START_POS) {\n\t\tvar LVL = 1, POS = START_POS;\n\t\tfor(;;) {\n\t\t\tPOS = HTML.indexOf('>', POS);\n\t\t\tif (HTML[POS - 1] === '/') { //self closing\n\t\t\t\tLVL--;\n\t\t\t\tif (LVL <= 0) break;\n\t\t\t}\n\t\t\tPOS = HTML.indexOf('<', POS);\n\t\t\tif (HTML[POS + 1] === '/') {\n\t\t\t\tLVL--;\n\t\t\t\tif (LVL <= 0) {\n\t\t\t\t\tPOS = HTML.indexOf('>', POS + 2);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (HTML[POS + 1] !== '!') {\n\t\t\t\tLVL++;\n\t\t\t}\n\t\t\t// console.log('LVL', LVL);\n\t\t}\n\n\t\t// console.log('getOutHTML', tagName, [tagName, pos2, pos2, ])\n\t\treturn ++POS;\n\t}\n\n\t// FlatDOM: diff html as text and patch dom nodes\n\tfunction diff2(prevKey, html2) {\n\t\tvar html1 = doTA.H[prevKey];\n\t\tvar prevPos1 = 0, pos1 = html1.indexOf('<');\n\t\tvar prevPos2 = 0, pos2 = html2.indexOf('<');\n\t\tvar tagId1, tagId2, elem1, part1, part2;\n\t\t// var tagNo1 = 0, tagNo2 = 0;\n\t\tvar tagStartPos1, tagStartPos2;\n\t\tvar LVL; //this is needed for fnInline\n\t\t// console.log(html1);\n\t\t// console.log(html2);\n\n\t\tfor (;;) {\n\t\t\t// console.log('before', [dirty1, dirty2], [tagId1, tagId2], [html1.substr(pos1, 20), html2.substr(pos2, 20)]);\n\n\t\t\tif (pos1 >= 0) {\n\t\t\t\tpos1 = html1.indexOf(' id=\"', pos1);\n\t\t\t\tif (pos1 > 0) {\n\t\t\t\t\tprevPos1 = pos1 + 5;\n\t\t\t\t\tpos1 = html1.indexOf('\"', prevPos1);\n\t\t\t\t\ttagId1 = html1.substring(prevPos1, pos1);\n\t\t\t\t\t// tagNo1 = tagId1^0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// console.log('middle', [tagId1, tagId2], [html1.substr(pos1, 20), html2.substr(pos2, 20)]);\n\n\t\t\tif (pos2 >= 0) {\n\t\t\t\tpos2 = html2.indexOf(' id=\"', pos2);\n\t\t\t\tif (pos2 > 0) {\n\t\t\t\t\tprevPos2 = pos2 + 5;\n\t\t\t\t\tpos2 = html2.indexOf('\"', prevPos2);\n\t\t\t\t\ttagId2 = html2.substring(prevPos2, pos2);\n\t\t\t\t\t// tagNo2 = tagId2^0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// console.log('after', [dirty1, dirty2], [tagId1, tagId2],\n\t\t\t//\t [pos1, pos2], [html1.substr(pos1, 20), html2.substr(pos2, 20)]);\n\n\t\t\t//exist inifite loop\n\t\t\tif (pos1 < 0 || pos2 < 0) break;\n\n\t\t\t//same node\n\t\t\tif (tagId1 === tagId2) {\n\t\t\t\ttagStartPos1 = ++pos1;\n\t\t\t\tpos1 = html1.indexOf('>', pos1);\n\t\t\t\tpart1 = html1.substring(tagStartPos1, pos1);\n\n\t\t\t\ttagStartPos2 = ++pos2;\n\t\t\t\tpos2 = html2.indexOf('>', pos2);\n\t\t\t\tpart2 = html2.substring(tagStartPos2, pos2);\n\n\t\t\t\t// console.log('same node', [part1, part2]);\n\n\t\t\t\t//attr really different\n\t\t\t\tif (part1 !== part2) {\n\t\t\t\t\telem1 = document.getElementById(tagId1);\n\t\t\t\t\tif (elem1) {\n\t\t\t\t\t\t//nodes to be inserted or deleted\n\t\t\t\t\t\tif ((part1.substr(1, 6) === 'hidden') !== (part2.substr(1, 6) === 'hidden')) {\n\t\t\t\t\t\t\ttagStartPos2 = html2.lastIndexOf('<', pos2 - 6);\n\t\t\t\t\t\t\tLVL=1,pos2=tagStartPos2;for(;;){pos2=html2.indexOf(\">\",pos2);if(\"/\"===html2.charAt(pos2-1)&&(LVL--,0>=LVL))break;pos2=html2.indexOf(\"<\",pos2);if(\"/\"===html2.charAt(pos2+1)){if(LVL--,0>=LVL){pos2=html2.indexOf(\">\",pos2+2);break}}else\"!\"!==html2.charAt(pos2+1)&&LVL++}pos2++; //INLINE\n\t\t\t\t\t\t\tnewNode.innerHTML = html2.substring(tagStartPos2, pos2);\n\n\t\t\t\t\t\t\t// tagStartPos1 = html1.lastIndexOf('<', pos1 - 6);\n\t\t\t\t\t\t\t// console.warn('replaceChild', [tagId2, tagId1], [\n\t\t\t\t\t\t\t//\t html2.substring(tagStartPos2, getOuterHTMLEnd(html2, tagStartPos2)),\n\t\t\t\t\t\t\t//\t html1.substring(tagStartPos1, getOuterHTMLEnd(html1, pos1))]);\n\n\t\t\t\t\t\t\telem1.parentNode.replaceChild(newNode.firstChild, elem1);\n\n\t\t\t\t\t\t\tLVL=1,pos1=pos1;for(;;){pos1=html1.indexOf(\">\",pos1);if(\"/\"===html1.charAt(pos1-1)&&(LVL--,0>=LVL))break;pos1=html1.indexOf(\"<\",pos1);if(\"/\"===html1.charAt(pos1+1)){if(LVL--,0>=LVL){pos1=html1.indexOf(\">\",pos1+2);break}}else\"!\"!==html1.charAt(pos1+1)&&LVL++}pos1++; //INLINE\n\n\t\t\t\t\t\t//only attribute changes\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparsePatchAttr(part1, part2, elem1);\n\t\t\t\t\t\t\t// console.warn('patch node', [tagId1, tagId2], [pos1, pos2], [tagStartPos1, tagStartPos2], [part1, part2])\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error('elem not found', [tagId1, tagId2], [part1, part2]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//clear node for textNode\n\t\t\t\t\telem1 = void 0;\n\t\t\t\t}\n\n\t\t\t\t//if blank text node, skip early\n\t\t\t\tif (html1[pos1 + 1] === '<' && html2[pos2 + 1] === '<') {\n\t\t\t\t\tpos1++;\n\t\t\t\t\tpos2++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tprevPos1 = pos1;\n\t\t\t\tpos1 = html1.indexOf('<', prevPos1);\n\t\t\t\tpart1 = html1.substring(prevPos1 + 1, pos1);\n\t\t\t\tprevPos2 = pos2;\n\t\t\t\tpos2 = html2.indexOf('<', prevPos2);\n\t\t\t\tpart2 = html2.substring(prevPos2 + 1, pos2);\n\n\t\t\t\t//for text node really diff\n\t\t\t\tif (part1 !== part2) {\n\t\t\t\t\t// console.log('text diff', [tagId1, tagId2], [part1, part2]);\n\t\t\t\t\tif (!elem1) {\n\t\t\t\t\t\telem1 = document.getElementById(tagId1);\n\t\t\t\t\t\tif (!elem1) {\n\t\t\t\t\t\t\tconsole.error('node not found', [tagId1, tagId2], [part1, part2], [html1.substr(pos1, 15), html2.substr(pos2, 15)], [html1, html2]);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// console.log('part1,2', [part1, part2]);\n\t\t\t\t\tif (elem1.firstChild) {\n\t\t\t\t\t\t//overwrite textNode value\n\t\t\t\t\t\tif (elem1.firstChild.nodeType === 3) {\n\t\t\t\t\t\t\telem1.firstChild.nodeValue = part2;\n\t\t\t\t\t\t\t// console.warn('textNode overwritten', elem1, elem1.firstChild)\n\n\t\t\t\t\t\t//not textNode, so, insertBefore\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem1.insertBefore(document.createTextNode(part2), elem1.firstChild);\n\t\t\t\t\t\t\t// console.warn('textNode inserted', elem1, elem1.firstChild)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t//no childNodes, so append one\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem1.appendChild(document.createTextNode(part2));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.error(\"different Id - not supported for now!\", [tagId1, tagId2]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t} //infinite loop\n\n\t}\n\n\t// diff3: no place holder nodes\n\tfunction diff3(prevKey, html2) {\n\t\tvar html1 = doTA.H[prevKey];\n\t\tvar part1, part2, elem1;\n\t\tvar prevPos1, lastPos1, pos1 = html1.indexOf('<');\n\t\tvar prevPos2, lastPos2, pos2 = html2.indexOf('<');\n\t\tvar tagId1, tagId2, prevTagId1, prevTagId2;\n\t\tvar tagNo1, tagNo2, subNo1, subNo2, dotPos1, dotPos2;\n\t\tvar tagStartPos1, tagStartPos2;\n\t\tvar LVL; // jshint ignore:line\n\t\t// console.log(html1);\n\t\t// console.log(html2);\n\t\t// var logger = [];\n\n\t\tfor (;;) {\n\t\t\t// console.log('before', [dirty1, dirty2], [tagId1, tagId2], [html1.substr(pos1, 20), html2.substr(pos2, 20)]);\n\n\t\t\tif (pos1 >= 0) {\n\t\t\t\tlastPos1 = pos1;\n\t\t\t\tpos1 = html1.indexOf(' id=\"', pos1);\n\t\t\t\tif (pos1 > 0) {\n\t\t\t\t\tprevPos1 = pos1 + 5;\n\t\t\t\t\tpos1 = html1.indexOf('\"', prevPos1);\n\t\t\t\t\tprevTagId1 = tagId1;\n\t\t\t\t\ttagId1 = html1.substring(prevPos1, pos1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// console.log('middle', [tagId1, tagId2], [html1.substr(pos1, 20), html2.substr(pos2, 20)]);\n\n\t\t\tif (pos2 >= 0) {\n\t\t\t\tlastPos2 = pos2;\n\t\t\t\tpos2 = html2.indexOf(' id=\"', pos2);\n\t\t\t\tif (pos2 > 0) {\n\t\t\t\t\tprevPos2 = pos2 + 5;\n\t\t\t\t\tpos2 = html2.indexOf('\"', prevPos2);\n\t\t\t\t\tprevTagId2 = tagId2;\n\t\t\t\t\ttagId2 = html2.substring(prevPos2, pos2);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// console.log('after', [dirty1, dirty2], [tagId1, tagId2],\n\t\t\t//\t [pos1, pos2], [html1.substr(pos1, 20), html2.substr(pos2, 20)]);\n\n\t\t\t//exist infinite loop\n\t\t\tif (pos1 < 0 && pos2 < 0) break;\n\n\t\t\t//same node\n\t\t\tif (tagId1 === tagId2) {\n\t\t\t\ttagStartPos1 = ++pos1;\n\t\t\t\tpos1 = html1.indexOf('>', pos1);\n\t\t\t\tpart1 = html1.substring(tagStartPos1, pos1);\n\n\t\t\t\ttagStartPos2 = ++pos2;\n\t\t\t\tpos2 = html2.indexOf('>', pos2);\n\t\t\t\tpart2 = html2.substring(tagStartPos2, pos2);\n\n\t\t\t\t// console.log('same node', [part1, part2]);\n\n\t\t\t\t//attr really different\n\t\t\t\tif (part1 !== part2) {\n\t\t\t\t\telem1 = document.getElementById(tagId1);\n\t\t\t\t\tif (elem1) {\n\t\t\t\t\t\t//nodes to be inserted or deleted\n\t\t\t\t\t\tif ((part1.substr(1, 6) === 'hidden') !== (part2.substr(1, 6) === 'hidden')) {\n\t\t\t\t\t\t\ttagStartPos2 = html2.lastIndexOf('<', pos2 - 6);\n\t\t\t\t\t\t\tLVL=1,pos2=tagStartPos2;for(;;){pos2=html2.indexOf(\">\",pos2);if(\"/\"===html2.charAt(pos2-1)&&(LVL--,0>=LVL))break;pos2=html2.indexOf(\"<\",pos2);if(\"/\"===html2.charAt(pos2+1)){if(LVL--,0>=LVL){pos2=html2.indexOf(\">\",pos2+2);break}}else\"!\"!==html2.charAt(pos2+1)&&LVL++}pos2++; //INLINE\n\t\t\t\t\t\t\tnewNode.innerHTML = html2.substring(tagStartPos2, pos2);\n\n\t\t\t\t\t\t\t// tagStartPos1 = html1.lastIndexOf('<', pos1 - 6);\n\t\t\t\t\t\t\t// console.warn('replaceChild', [tagId2, tagId1], [\n\t\t\t\t\t\t\t//\t html2.substring(tagStartPos2, getOuterHTMLEnd(html2, tagStartPos2)),\n\t\t\t\t\t\t\t//\t html1.substring(tagStartPos1, getOuterHTMLEnd(html1, pos1))]);\n\n\t\t\t\t\t\t\telem1.parentNode.replaceChild(newNode.firstChild, elem1);\n\n\t\t\t\t\t\t\tLVL=1,pos1=pos1;for(;;){pos1=html1.indexOf(\">\",pos1);if(\"/\"===html1.charAt(pos1-1)&&(LVL--,0>=LVL))break;pos1=html1.indexOf(\"<\",pos1);if(\"/\"===html1.charAt(pos1+1)){if(LVL--,0>=LVL){pos1=html1.indexOf(\">\",pos1+2);break}}else\"!\"!==html1.charAt(pos1+1)&&LVL++}pos1++; //INLINE\n\n\t\t\t\t\t\t//only attribute changes\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparsePatchAttr(part1, part2, elem1);\n\t\t\t\t\t\t\t// console.warn('patch node', [tagId1, tagId2], [pos1, pos2], [tagStartPos1, tagStartPos2], [part1, part2])\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error('elem not found', [tagId1, tagId2], [part1, part2]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//clear node for textNode\n\t\t\t\t\telem1 = void 0;\n\t\t\t\t}\n\n\t\t\t\t//if blank text node, skip early\n\t\t\t\tif (html1[pos1 + 1] === '<' && html2[pos2 + 1] === '<') {\n\t\t\t\t\tpos1++;\n\t\t\t\t\tpos2++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tprevPos1 = pos1;\n\t\t\t\tpos1 = html1.indexOf('<', prevPos1);\n\t\t\t\tpart1 = html1.substring(prevPos1 + 1, pos1);\n\t\t\t\tprevPos2 = pos2;\n\t\t\t\tpos2 = html2.indexOf('<', prevPos2);\n\t\t\t\tpart2 = html2.substring(prevPos2 + 1, pos2);\n\n\t\t\t\t//for text node really diff\n\t\t\t\tif (part1 !== part2) {\n\t\t\t\t\t// console.log('text diff', [tagId1, tagId2], [part1, part2]);\n\t\t\t\t\tif (!elem1) {\n\t\t\t\t\t\telem1 = document.getElementById(tagId1);\n\t\t\t\t\t\tif (!elem1) {\n\t\t\t\t\t\t\tconsole.error('node not found', [tagId1, tagId2], [part1, part2], [html1.substr(pos1, 15), html2.substr(pos2, 15)], [html1, html2]);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// console.log('part1,2', [part1, part2]);\n\t\t\t\t\tif (elem1.firstChild) {\n\t\t\t\t\t\t//overwrite textNode value\n\t\t\t\t\t\tif (elem1.firstChild.nodeType === 3) {\n\t\t\t\t\t\t\telem1.firstChild.nodeValue = part2;\n\t\t\t\t\t\t\t// console.warn('textNode overwritten', elem1, elem1.firstChild)\n\n\t\t\t\t\t\t//not textNode, so, insertBefore\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem1.insertBefore(document.createTextNode(part2), elem1.firstChild);\n\t\t\t\t\t\t\t// console.warn('textNode inserted', elem1, elem1.firstChild)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t//no childNodes, so append one\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem1.appendChild(document.createTextNode(part2));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t//when id is different\n\t\t\t} else {\n\n\t\t\t\tdotPos1 = tagId1.indexOf('.');\n\t\t\t\ttagNo1 = tagId1.slice(0, dotPos1) ^ 0;\n\t\t\t\tdotPos2 = tagId1.indexOf('.', ++dotPos1);\n\t\t\t\tsubNo1 = dotPos2 > 0 && tagId1.slice(dotPos1, dotPos2) ^ 0;\n\n\t\t\t\tdotPos2 = tagId2.indexOf('.');\n\t\t\t\ttagNo2 = tagId2.slice(0, dotPos2) ^ 0;\n\t\t\t\tdotPos1 = tagId2.indexOf('.', ++dotPos2);\n\t\t\t\tsubNo2 = dotPos1 > 0 && tagId2.slice(dotPos2, dotPos1) ^ 0;\n\n\t\t\t\tif (prevTagId1 === prevTagId2 && pos1 > 0 && pos2 > 0) {\n\n\t\t\t\t\t//[\"6.1\", \"5.7.1\"] [\"5.6.1\", \"5.6.1\"]\n\t\t\t\t\t//horizontal scroll left to right, appending nodes\n\t\t\t\t\tif (tagNo1 > tagNo2) {\n\n\t\t\t\t\t\t//removeChild bottom down 111.1 [\"111.1\", \"16.1\"] [\"15.6.1\", \"15.6.1\"] [10070, 2106]\n\t\t\t\t\t\tif (subNo2) {\n\t\t\t\t\t\t\t//[\"146.1\", \"145.12681.1\"] [\"145.1\", \"145.1\"] [\"<div id=\"145.12681.1\" class=\"cell\" style=\"width:125px\" col=\"2536\">0.7734284962061793</div>\"]\n\t\t\t\t\t\t\t//[\"116.1\", \"115.12.1\"] [\"115.11.1\", \"115.11.1\"] [\"<div id=\"115.12.1\" class=\"cell\" style=\"width:125px;\"></div>\"]\n\t\t\t\t\t\t\telem1 = document.getElementById(tagNo2 + '.' + prevKey);\n\t\t\t\t\t\t\tif (!elem1) {\n\t\t\t\t\t\t\t\t//resize bottom down - bigger\n\t\t\t\t\t\t\t\t//[111, 15] [false, false] [\"111.1\", \"15.1\"] [\"14.6.1\", \"14.6.1\"] [1896, 1871]\n\t\t\t\t\t\t\t\tconsole.error(\"no existing node 5\", [tagId1, tagId2], [prevTagId1, prevTagId2], [subNo1, subNo2], [pos1, pos2]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttagStartPos2 = html2.lastIndexOf('<', pos2 - 6);\n\t\t\t\t\t\t\t\tLVL=1,pos2=tagStartPos2;for(;;){pos2=html2.indexOf(\">\",pos2);if(\"/\"===html2.charAt(pos2-1)&&(LVL--,0>=LVL))break;pos2=html2.indexOf(\"<\",pos2);if(\"/\"===html2.charAt(pos2+1)){if(LVL--,0>=LVL){pos2=html2.indexOf(\">\",pos2+2);break}}else\"!\"!==html2.charAt(pos2+1)&&LVL++}pos2++; //INLINE\n\t\t\t\t\t\t\t\tnewNode.innerHTML = html2.substring(tagStartPos2, pos2);\n\n\t\t\t\t\t\t\t\telem1.appendChild(newNode.firstChild);\n\t\t\t\t\t\t\t\t// console.info(\"prevTagId2.appendChild\", [tagId1, tagId2], [prevTagId1, prevTagId2], [html2.substring(tagStartPos2, pos2)]);\n\n\t\t\t\t\t\t\t\tpos1 = lastPos1;\n\t\t\t\t\t\t\t\ttagId1 = prevTagId1;\n\t\t\t\t\t\t\t\ttagId2 = prevTagId2;\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//not impl [\"111.1\", \"15.1\"] [\"14.6.1\", \"14.6.1\"] [1896, 1871]\n\t\t\t\t\t\t// [\"36.1\", \"111.1\"] [\"35.6.1\", \"35.6.1\"] [6872, 6897]\n\t\t\t\t\t\t} else if (!subNo1) { //&& !subNo2\n\t\t\t\t\t\t\ttagStartPos2 = html2.lastIndexOf('<', pos2 - 6);\n\t\t\t\t\t\t\tLVL=1,pos2=tagStartPos2;for(;;){pos2=html2.indexOf(\">\",pos2);if(\"/\"===html2.charAt(pos2-1)&&(LVL--,0>=LVL))break;pos2=html2.indexOf(\"<\",pos2);if(\"/\"===html2.charAt(pos2+1)){if(LVL--,0>=LVL){pos2=html2.indexOf(\">\",pos2+2);break}}else\"!\"!==html2.charAt(pos2+1)&&LVL++}pos2++; //INLINE\n\t\t\t\t\t\t\tnewNode.innerHTML = html2.substring(tagStartPos2, pos2);\n\n\t\t\t\t\t\t\telem1 = document.getElementById(prevTagId2.slice(0, prevTagId2.indexOf('.') + 1) + prevKey);\n\t\t\t\t\t\t\telem1.parentNode.appendChild(newNode.firstChild);\n\t\t\t\t\t\t\t// console.info(\"prevTagId2.parentNode.appendChild\", [tagId1, tagId2], [prevTagId1, prevTagId2], [subNo1, subNo2], [html2.substring(tagStartPos2, pos2)]);\n\n\t\t\t\t\t\t\tpos1 = lastPos1;\n\t\t\t\t\t\t\ttagId1 = prevTagId1;\n\t\t\t\t\t\t\ttagId2 = prevTagId2;\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn(\"not impl\", [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// [5, 6] [24, false] [\"5.24.1\", \"6.1\"] [\"5.23.1\", \"5.23.1\"] [673, 770]\n\t\t\t\t\t} else if (tagNo1 < tagNo2) {\n\n\t\t\t\t\t\t// [5, 6] [24, false] [\"5.24.1\", \"6.1\"] [\"5.23.1\", \"5.23.1\"] [673, 770]\n\t\t\t\t\t\t//\t[\"35.1\", \"111.1\"] [\"34.6.1\", \"34.6.1\"] [6961, 6986]\n\t\t\t\t\t\tif (!subNo2) {\n\t\t\t\t\t\t\telem1 = document.getElementById(tagId1);\n\t\t\t\t\t\t\tif (!elem1) {\n\t\t\t\t\t\t\t\tconsole.warn(\"no existing node 4\", [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\telem1.parentNode.removeChild(elem1);\n\t\t\t\t\t\t\t\tif (pos1 > 0) {\n\t\t\t\t\t\t\t\t\tLVL=1,pos1=pos1;for(;;){pos1=html1.indexOf(\">\",pos1);if(\"/\"===html1.charAt(pos1-1)&&(LVL--,0>=LVL))break;pos1=html1.indexOf(\"<\",pos1);if(\"/\"===html1.charAt(pos1+1)){if(LVL--,0>=LVL){pos1=html1.indexOf(\">\",pos1+2);break}}else\"!\"!==html1.charAt(pos1+1)&&LVL++}pos1++; //INLINE\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// console.warn(\"removeChild bottom down\", tagId1, [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]);\n\t\t\t\t\t\t\t\t// logger.push([\"removeChild[first]\", tagId1, [tagId1, tagId2], [prevTagId1, prevTagId2], [html2.substring(tagStartPos2, pos2)]]);\n\t\t\t\t\t\t\t\tpos2 = lastPos2;\n\t\t\t\t\t\t\t\ttagId1 = prevTagId1;\n\t\t\t\t\t\t\t\ttagId2 = prevTagId2;\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn(\"not impl\", [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t//same level\n\t\t\t\t\t} else if (tagNo1 === tagNo2) {\n\n\t\t\t\t\t\t// [5, 5] [1, 2] [\"5.1.1\", \"5.2.1\"] [\"5.1\", \"5.1\"] [229, 227]\n\t\t\t\t\t\tif ( subNo1 < subNo2 ) {\n\t\t\t\t\t\t\telem1 = document.getElementById(tagId1);\n\t\t\t\t\t\t\tif (!elem1) {\n\t\t\t\t\t\t\t\tconsole.warn([\"no existing node 4\", [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\telem1.parentNode.removeChild(elem1);\n\t\t\t\t\t\t\t\tif (pos1 > 0) {\n\t\t\t\t\t\t\t\t\tLVL=1,pos1=pos1;for(;;){pos1=html1.indexOf(\">\",pos1);if(\"/\"===html1.charAt(pos1-1)&&(LVL--,0>=LVL))break;pos1=html1.indexOf(\"<\",pos1);if(\"/\"===html1.charAt(pos1+1)){if(LVL--,0>=LVL){pos1=html1.indexOf(\">\",pos1+2);break}}else\"!\"!==html1.charAt(pos1+1)&&LVL++}pos1++; //INLINE\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// console.warn(\"removeChild bottom down\", tagId1, [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]);\n\t\t\t\t\t\t\t\t// logger.push([\"removeChild[backward.last]\", tagId1, [tagId1, tagId2], [prevTagId1, prevTagId2], [html2.substring(tagStartPos2, pos2)]]);\n\t\t\t\t\t\t\t\tpos2 = lastPos2;\n\t\t\t\t\t\t\t\ttagId1 = prevTagId1;\n\t\t\t\t\t\t\t\ttagId2 = prevTagId2;\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//[5, 5] [19, 18] [\"5.19.1\", \"5.18.1\"] [\"5.1\", \"5.1\"] [229, 231]\n\t\t\t\t\t\t} else if ( subNo1 > subNo2 ) {\n\t\t\t\t\t\t\telem1 = document.getElementById(tagId1);\n\n\t\t\t\t\t\t\ttagStartPos2 = html2.lastIndexOf('<', pos2 - 6);\n\t\t\t\t\t\t\tLVL=1,pos2=tagStartPos2;for(;;){pos2=html2.indexOf(\">\",pos2);if(\"/\"===html2.charAt(pos2-1)&&(LVL--,0>=LVL))break;pos2=html2.indexOf(\"<\",pos2);if(\"/\"===html2.charAt(pos2+1)){if(LVL--,0>=LVL){pos2=html2.indexOf(\">\",pos2+2);break}}else\"!\"!==html2.charAt(pos2+1)&&LVL++}pos2++; //INLINE\n\t\t\t\t\t\t\tnewNode.innerHTML = html2.substring(tagStartPos2, pos2);\n\n\t\t\t\t\t\t\telem1.parentNode.insertBefore(newNode.firstChild, elem1);\n\t\t\t\t\t\t\t// logger.push([\"this.insertBefore[elem1]\", [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2], [html2.substring(tagStartPos2, pos2)]]);\n\n\t\t\t\t\t\t\tpos1 = lastPos1;\n\t\t\t\t\t\t\ttagId1 = prevTagId1;\n\t\t\t\t\t\t\ttagId2 = prevTagId2; //check later\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn('not impl', [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]);\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t} //same parent\n\t\t\t\t\telse {\n\t\t\t\t\t\tconsole.warn('not impl', [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]);\n\t\t\t\t\t}\n\n\t\t\t\t} //prevTagId1 === prevTagId2\n\n\n\n\t\t\t\t//end of previous html\n\t\t\t\telse if (pos1 < 0) {\n\n\t\t\t\t\t// ######## [\"28.9.1\", \"28.10.1\"] [\"28.8.1\", \"28.9.1\"] [-1, 16911]\n\t\t\t\t\tif ( tagNo1 === tagNo2) {\n\n\t\t\t\t\t\t// [\"28.9.1\", \"28.10.1\"] [\"28.8.1\", \"28.9.1\"] [-1, 16911]\n\t\t\t\t\t\tif (subNo1 < subNo2 ) {\n\t\t\t\t\t\t\telem1 = document.getElementById(tagNo2 + '.' + prevKey);\n\n\t\t\t\t\t\t\ttagStartPos2 = html2.lastIndexOf('<', pos2 - 6);\n\t\t\t\t\t\t\tLVL=1,pos2=tagStartPos2;for(;;){pos2=html2.indexOf(\">\",pos2);if(\"/\"===html2.charAt(pos2-1)&&(LVL--,0>=LVL))break;pos2=html2.indexOf(\"<\",pos2);if(\"/\"===html2.charAt(pos2+1)){if(LVL--,0>=LVL){pos2=html2.indexOf(\">\",pos2+2);break}}else\"!\"!==html2.charAt(pos2+1)&&LVL++}pos2++; //INLINE\n\t\t\t\t\t\t\tnewNode.innerHTML = html2.substring(tagStartPos2, pos2);\n\n\t\t\t\t\t\t\telem1.appendChild(newNode.firstChild);\n\t\t\t\t\t\t\t// console.info(\"this.appendChild\", [tagId1, tagId2], [prevTagId1, prevTagId2], [html2.substring(tagStartPos2, pos2)]);\n\n\t\t\t\t\t\t\ttagId1 = prevTagId1;\n\t\t\t\t\t\t\ttagId2 = prevTagId2;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn('not impl', [tagNo1, tagNo2], [subNo1, subNo2], [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2], [html2.substring(tagStartPos2, pos2)]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (tagNo1 < tagNo2) {\n\n\t\t\t\t\t\t//prevTagId2 is a children\n\t\t\t\t\t\t// [126, 127] [66, false] [\"126.66.1\", \"127.1\"] [\"126.61.1\", \"126.66.1\"] [-1, 13065]\n\t\t\t\t\t\tif (prevTagId2.indexOf('.') !== prevTagId2.lastIndexOf('.')) {\n\t\t\t\t\t\t\t//not impl1 pos1 < 0 [14, 15] [6, false] [\"14.6.1\", \"15.1\"] [\"14.6.1\", \"14.6.1\"] [-1, 1950]\n\t\t\t\t\t\t\telem1 = document.getElementById(prevTagId2.slice(0, prevTagId2.indexOf('.') + 1) + prevKey);\n\n\t\t\t\t\t\t\ttagStartPos2 = html2.lastIndexOf('<', pos2 - 6);\n\t\t\t\t\t\t\tLVL=1,pos2=tagStartPos2;for(;;){pos2=html2.indexOf(\">\",pos2);if(\"/\"===html2.charAt(pos2-1)&&(LVL--,0>=LVL))break;pos2=html2.indexOf(\"<\",pos2);if(\"/\"===html2.charAt(pos2+1)){if(LVL--,0>=LVL){pos2=html2.indexOf(\">\",pos2+2);break}}else\"!\"!==html2.charAt(pos2+1)&&LVL++}pos2++; //INLINE\n\t\t\t\t\t\t\tnewNode.innerHTML = html2.substring(tagStartPos2, pos2);\n\t\t\t\t\t\t\t// console.info(\"prevTagId2.parent.appendChild\", [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2], [html2.substring(tagStartPos2, pos2)]);\n\n\t\t\t\t\t\t\telem1.parentNode.appendChild(newNode.firstChild);\n\n\t\t\t\t\t\t\ttagId1 = prevTagId1;\n\t\t\t\t\t\t\ttagId2 = prevTagId2;\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\t//this is children but prevTagId2 is parent\n\t\t\t\t\t\t//not impl [143, 144] [false, 499946] [\"143.1\", \"144.499946.1\"] [\"143.1\", \"144.1\"] [-1, 37542]\n\t\t\t\t\t\t} else if (subNo2) {\n\t\t\t\t\t\t\telem1 = document.getElementById(prevTagId2);\n\n\t\t\t\t\t\t\ttagStartPos2 = html2.lastIndexOf('<', pos2 - 6);\n\t\t\t\t\t\t\tLVL=1,pos2=tagStartPos2;for(;;){pos2=html2.indexOf(\">\",pos2);if(\"/\"===html2.charAt(pos2-1)&&(LVL--,0>=LVL))break;pos2=html2.indexOf(\"<\",pos2);if(\"/\"===html2.charAt(pos2+1)){if(LVL--,0>=LVL){pos2=html2.indexOf(\">\",pos2+2);break}}else\"!\"!==html2.charAt(pos2+1)&&LVL++}pos2++; //INLINE\n\t\t\t\t\t\t\tnewNode.innerHTML = html2.substring(tagStartPos2, pos2);\n\t\t\t\t\t\t\t// console.info(\"prevTagId2.appendChild\", [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2], [html2.substring(tagStartPos2, pos2)]);\n\n\t\t\t\t\t\t\telem1.appendChild(newNode.firstChild);\n\n\t\t\t\t\t\t\ttagId1 = prevTagId1;\n\t\t\t\t\t\t\ttagId2 = prevTagId2;\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\t//this and prevTagId2 is not children\n\t\t\t\t\t\t//not impl [125, 126] [false, false] [\"125.1\", \"126.1\"] [\"125.1\", \"125.1\"] [-1, 3444] [\" class=\"row odd blue\" row=\"5\"></div><div id=\"126.1\"]\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t//////////// EXCEPTIONAL CASE : this is ambiguous, can't figure out new element a child or sibling of previousNode with current design :(\n\t\t\t\t\t\t\t//120 [\"119.1\", \"120.1\"] [\"118.1\", \"119.1\"] [119, 120] [-1, 3695]\n\n\t\t\t\t\t\t\telem1 = document.getElementById(prevTagId2);\n\n\t\t\t\t\t\t\ttagStartPos2 = html2.lastIndexOf('<', pos2 - 6);\n\t\t\t\t\t\t\tLVL=1,pos2=tagStartPos2;for(;;){pos2=html2.indexOf(\">\",pos2);if(\"/\"===html2.charAt(pos2-1)&&(LVL--,0>=LVL))break;pos2=html2.indexOf(\"<\",pos2);if(\"/\"===html2.charAt(pos2+1)){if(LVL--,0>=LVL){pos2=html2.indexOf(\">\",pos2+2);break}}else\"!\"!==html2.charAt(pos2+1)&&LVL++}pos2++; //INLINE\n\t\t\t\t\t\t\tnewNode.innerHTML = html2.substring(tagStartPos2, pos2);\n\t\t\t\t\t\t\t// console.info(\"prevTagId2.parent.appendChild\", [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2], [html2.substring(tagStartPos2, pos2)]);\n\n\t\t\t\t\t\t\telem1.parentNode.appendChild(newNode.firstChild);\n\n\t\t\t\t\t\t\ttagId1 = prevTagId1;\n\t\t\t\t\t\t\ttagId2 = prevTagId2;\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\t\t// console.warn('not impl', [tagNo1, tagNo2], [subNo1, subNo2], [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2], [html2.substring(tagStartPos2, pos2)]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn('not impl', [tagNo1, tagNo2], [subNo1, subNo2], [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2], [html2.substring(tagStartPos2, pos2)]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\t//end of new html\n\t\t\t\telse if (pos2 < 0) {\n\n\t\t\t\t\t//same base id\n\t\t\t\t\tif (tagNo1 === tagNo2) {\n\n\t\t\t\t\t\t// [28, 28] [undefined, 13] [\"28.1\", \"28.13.1\"] [\"28.1\", \"28.1\"] [-1, 12127]\n\t\t\t\t\t\tif (subNo1 < subNo2) {\n\t\t\t\t\t\t\telem1 = document.getElementById(prevTagId2);\n\n\t\t\t\t\t\t\ttagStartPos2 = html2.lastIndexOf('<', pos2 - 6);\n\t\t\t\t\t\t\tLVL=1,pos2=tagStartPos2;for(;;){pos2=html2.indexOf(\">\",pos2);if(\"/\"===html2.charAt(pos2-1)&&(LVL--,0>=LVL))break;pos2=html2.indexOf(\"<\",pos2);if(\"/\"===html2.charAt(pos2+1)){if(LVL--,0>=LVL){pos2=html2.indexOf(\">\",pos2+2);break}}else\"!\"!==html2.charAt(pos2+1)&&LVL++}pos2++; //INLINE\n\t\t\t\t\t\t\tnewNode.innerHTML = html2.substring(tagStartPos2, pos2);\n\n\t\t\t\t\t\t\telem1.appendChild(newNode.firstChild);\n\t\t\t\t\t\t\t// logger.push([\"appendChild[parent.last]2<0\", [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2], [html2.substring(tagStartPos2, pos2)]]);\n\n\t\t\t\t\t\t\ttagId1 = prevTagId1;\n\t\t\t\t\t\t\ttagId2 = prevTagId2;\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\t//[28, 28] [27, 26] [\"28.27.1\", \"28.26.1\"] [\"28.26.1\", \"28.25.1\"] [12548, -1]\n\t\t\t\t\t\t} else if (subNo1 > subNo2) {\n\n\t\t\t\t\t\t\telem1 = document.getElementById(tagId1);\n\t\t\t\t\t\t\tif (!elem1) {\n\t\t\t\t\t\t\t\tconsole.warn([\"no existing node 4\", [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\telem1.parentNode.removeChild(elem1);\n\t\t\t\t\t\t\t\tif (pos1 > 0) {\n\t\t\t\t\t\t\t\t\tLVL=1,pos1=pos1;for(;;){pos1=html1.indexOf(\">\",pos1);if(\"/\"===html1.charAt(pos1-1)&&(LVL--,0>=LVL))break;pos1=html1.indexOf(\"<\",pos1);if(\"/\"===html1.charAt(pos1+1)){if(LVL--,0>=LVL){pos1=html1.indexOf(\">\",pos1+2);break}}else\"!\"!==html1.charAt(pos1+1)&&LVL++}pos1++; //INLINE\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// console.warn(\"removeChild bottom down\", tagId1, [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]);\n\n\t\t\t\t\t\t\t\ttagId1 = prevTagId1;\n\t\t\t\t\t\t\t\ttagId2 = prevTagId2;\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn('not impl3 pos2 < 0', [tagNo1, tagNo2], [subNo1, subNo2], [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2], [html2.substring(tagStartPos2, pos2)]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t//not impl [\"146.1\", \"145.66.1\"] [\"145.66.1\", \"145.61.1\"] [39591, -1]\n\t\t\t\t\t//not impl [\"145.1\", \"144.66.1\"] [\"144.66.1\", \"144.61.1\"] [38200, -1]\n\t\t\t\t\t//not impl [\"144.1\", \"143.66.1\"] [\"143.66.1\", \"143.61.1\"] [36747, -1]\n\t\t\t\t\t//resize bottom up - make smaller\n\t\t\t\t\t} else if (tagNo1 > tagNo2) {\n\t\t\t\t\t\telem1 = document.getElementById(tagId1);\n\t\t\t\t\t\telem1.parentNode.removeChild(elem1);\n\t\t\t\t\t\tif (pos1 > 0) {\n\t\t\t\t\t\t\tLVL=1,pos1=pos1;for(;;){pos1=html1.indexOf(\">\",pos1);if(\"/\"===html1.charAt(pos1-1)&&(LVL--,0>=LVL))break;pos1=html1.indexOf(\"<\",pos1);if(\"/\"===html1.charAt(pos1+1)){if(LVL--,0>=LVL){pos1=html1.indexOf(\">\",pos1+2);break}}else\"!\"!==html1.charAt(pos1+1)&&LVL++}pos1++; //INLINE\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// console.warn(\"removeChild bottom down\", tagId1, [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]);\n\t\t\t\t\t\t// logger.push([\"removeChild[backward.last]\", tagId1, [tagId1, tagId2], [prevTagId1, prevTagId2], [html2.substring(tagStartPos2, pos2)]]);\n\n\t\t\t\t\t\ttagId1 = prevTagId1;\n\t\t\t\t\t\ttagId2 = prevTagId2;\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn('not impl', [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t////////////// THIS SHOULD NEVER REACH ///////////////\n\n\t\t\t\t// console.log('====')\n\t\t\t\t// logger.slice(-10).forEach(function(item){\n\t\t\t\t//\t console.info.apply(console, item)\n\t\t\t\t// })\n\t\t\t\tconsole.error(\"different Id - not supported for now!\", [tagNo1, tagNo2], [subNo1, subNo2], [tagId1, tagId2], [prevTagId1, prevTagId2], [pos1, pos2]);\n\t\t\t\tconsole.log([html1.substr(pos1 - 100, 100), html1.substr(pos1, 20)]);\n\t\t\t\tconsole.log([html2.substr(pos2 - 100, 100), html2.substr(pos2, 20)]);\n\t\t\t\t// console.log(html1);\n\t\t\t\t// console.log(html2)\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t} //infinite loop\n\n\t}\n\n\tvar camelCaseRE = /-(.)/g;\n\tfunction camelCase(str) {\n\t\treturn str.replace(camelCaseRE, function($0, $1){ return $1.toUpperCase(); });\n\t}\n\n\t// parse attributes from html open tag and patch DOM when different\n\tfunction parsePatchAttr(chunkA, chunkB, elem) {\n\t\tvar tagId;\n\t\tvar posA1, posA2, posB1, posB2;\n\t\tvar posDiff = 0;\n\t\tvar attrName, attrVal1, attrVal2;\n\t\t// var len1 = chunk1.length;\n\t\t// console.log('chunks', [chunkA, chunkB]);\n\n\t\t//extract id to tag, if no elem specified\n\t\tif (!elem) {\n\t\t\tposA1 = chunkA.indexOf(' id=\"', posA1);\n\t\t\tif (posA1 >= 0) {\n\t\t\t\tposA1 += 5;\n\t\t\t\tposA2 = chunkA.indexOf('\"', posA1);\n\t\t\t\ttagId = chunkA.slice(posA1, posA2);\n\t\t\t\telem = document.getElementById(tagId);\n\t\t\t\tif (!elem) {\n\t\t\t\t\tthrow console.error('tag not found', [posA1, posA2, tagId, elem, chunkA, chunkB]);\n\t\t\t\t}\n\t\t\t\tposA2 += 2;\n\t\t\t} else {\n\t\t\t\tthrow console.error('id not found', [posA1, posA1, chunkA, chunkB]);\n\t\t\t}\n\t\t} else {\n\t\t\t//first char is always space\n\t\t\tposA2 = 1;\n\t\t}\n\n\t\tfor(;;) {\n\t\t\t//attr name\n\t\t\tposA1 = chunkA.indexOf('=\"', posA2);\n\t\t\tif (posA1 < 0) break;\n\t\t\tattrName = chunkA.slice(posA2, posA1);\n\n\t\t\t//attr values\n\t\t\tposA2 = chunkA.indexOf('\"', posA1 + 2);\n\t\t\tattrVal1 = chunkA.slice(posA1 + 2, posA2);\n\n\t\t\tposB1 = posA1 + posDiff;\n\t\t\tposB2 = chunkB.indexOf('\"', posB1 + 2);\n\t\t\tattrVal2 = chunkB.slice(posB1 + 2, posB2);\n\n\t\t\tif (attrVal1 !== attrVal2) {\n\t\t\t\t// value as property\n\t\t\t\tif (attrName === 'value') {\n\t\t\t\t\telem[attrName] = attrVal2;\n\n\t\t\t\t// prefix with - as property, like -scrollLeft\n\t\t\t\t} else if (attrName[0] === '-') {\n\t\t\t\t\t//only if old value is same is element property to prevent loop (firefox)\n\t\t\t\t\tif (elem[attrName.substr(1)] == attrVal1) {\n\t\t\t\t\t\telem[attrName.substr(1)] = attrVal2;\n\t\t\t\t\t}\n\t\t\t\t\t//console.log('prop-', attrName.substr(1), attrVal1, attrVal2, elem[attrName.substr(1)]);\n\n\t\t\t\t} else {\n\t\t\t\t\t\telem.setAttribute(attrName, attrVal2);\n\t\t\t\t}\n\t\t\t\tposDiff = posB2 - posA2;\n\n\t\t\t}\n\n\t\t\tposA2 += 2;\n\t\t}\n\n\t\treturn tagId;\n\t}\n\n\t// extract value of id from part of html open tag\n\t// only id=\"xxx\" supported, this is internal use, so it's always double-quotes\n\t// inline this function during building\n\tfunction getTagId(partial, start) {\n\t\tvar pos = partial.indexOf(' id=\"', start), endPos;\n\t\tif (pos >= 0) {\n\t\t\tpos += 5;\n\t\t\tendPos = partial.indexOf('\"', pos);\n\t\t\treturn partial.substring(pos, endPos);\n\t\t}\n\t}\n\n\t// split filters into array, take care of | and || as different\n\tfunction splitFilters(input, pos) {\n\t\tvar prevPos = 0;\n\t\tvar ret = [];\n\t\twhile (pos !== -1) {\n\t\t\tif (input[pos + 1] === '|') {\n\t\t\t\tpos += 2;\n\t\t\t} else {\n\t\t\t\tret.push(input.substring(prevPos, pos));\n\t\t\t\tprevPos = ++pos;\n\t\t\t}\n\t\t\tpos = input.indexOf('|', pos);\n\t\t}\n\t\tif (prevPos < input.length) {\n\t\t\tret.push(input.substr(prevPos));\n\t\t}\n\t\treturn ret;\n\t}\n\n\t// function parseStyle(styleObj) {\n\t// \tvar ret = '';\n\t// \tfor (var x in styleObj) {\n\t// \t\tret += x + ':' + styleObj[x] + ';';\n\t// \t}\n\t// \treturn ret;\n\t// }\n\n\t// ToDo: check compile performance with regex\n\tvar ngClassRegex = /('[^']+'|\"[^\"]+\"|[\\w$]+)\\s*:\\s*((?:[$.\\w]+|\\([^)]+\\)|[^},])+)/g;\n\tvar varOrStringRegex = /'[^']*'|\"[^\"]*\"|[\\w$]+|[^\\w$'\"]+/g;\n\tvar quotedStringRegex = /\"[^\"]*\"|'[^']*'/g;\n\tvar whiteSpaceRegex = /\\s{2,}|\\n/g;\n\tvar removeUnneededQuotesRegex = /\\b([\\w_-]+=)\"([^\"'=\\s<>]+)\"(?=[\\s>])/g;\n\t// var lazyNgAttrRegex = /^(?:src|alt|title|href)/;\n\tvar $indexRegex = /\\$index/g;\n\tvar $parent$indexRegex = /(?:\\$parent\\.)+\\$index/g;\n\n\t// no-val attributes, for more exhaustive list - https://github.com/kangax/html-minifier/issues/63\n\t//var noValAttrRegex = /^(?:checked|selected|disabled|readonly|multiple|required|hidden)/;\n\n\t// export as doTA.compile\n\tfunction compileHTML(template, options) {\n\t\toptions = options || {};\n\t\tvar val_mod = options.loose ? \"||''\" : '';\n\t\tvar VarMap = {\n\t\t\ttrue: 1, false: 1, null: 1, undefined: 1, this: 1, new: 1,\n\t\t\tdoTA: 1, $index: 1, S: 1, F: 1, $attr: 1, X: 1, K: 1, M: 1, N: 1,\n\t\t\tMath: 1, Date: 1, String: 1, Object: 1, Array: 1,\n\t\t\tlocation: 1, window: 1, _: 1\n\t\t\t// Infinity: 1, NaN: 1,\n\t\t\t// alert: 1, confirm: 1, prompt: 1,\n\t\t\t//var: 1, in: 1\n\t\t\t//void: 1,\n\t\t};\n\t\tvar level = 0, ngRepeatLevel;\n\t\tvar ngIfLevel, skipLevel, ngIfCounterTmp, ngIfLevels = [], ngIfLevelMap = {};\n\t\tvar LevelMap = {}, LevelVarMap = {};\n\t\tvar KeyMap = [], keyLevel = 0;\n\t\tvar WatchMap = {}, Watched;\n\t\tvar doTAPass, doTAContinue;\n\t\tvar compiledFn;\n\t\tvar uniqueId = doTA.getId(options.render);\n\t\tvar idHash = {};\n\t\tvar FnText = '';\n\t\t//options that need to repeatedly calling\n\t\tvar optWatchDiff = options.watchDiff;\n\t\tvar optDiffLevel = +options.diffLevel;\n\t\tvar optModel = options.model;\n\t\tvar optBind = options.bind;\n\t\tvar optEvent = options.event;\n\t\tvar optKey = options.key;\n\t\tvar optParams = options.params;\n\t\tvar optComment = +options.comment;\n\t\tvar optStrip = +options.strip;\n\n\t\tif (optKey) {\n\t\t\tFnText += indent(level) + \"var R='';\\n\";\n\t\t} else {\n\t\t\tFnText += indent(level) + \"var \" +\n\t\t\t(optWatchDiff ? 'M,N=1,' : '') +\n\t\t\t\"R='';\\n\"; //ToDO: check performance on var declaration\n\t\t}\n\n\t\t//clean up extra white spaces and line break\n\t\ttemplate = template.replace(whiteSpaceRegex, ' ');\n\n\t\tif (optStrip) {\n\t\t\tif (optStrip === 2) {\n\t\t\t\ttemplate = template.replace(/>\\s+/g, '>').replace(/\\s+</g, '<');\n\t\t\t} else {\n\t\t\t\ttemplate = template.replace(/>\\s+</g, '><');\n\t\t\t}\n\t\t}\n\n\t\t// when encode is set, find strings and encode < and >, or parser will throw error.\n\t\tif (options.encode) {\n\t\t\ttemplate = template.replace(quotedStringRegex, function($0) {\n\t\t\t\treturn $0.replace(/[<>]/g, function($00) {\n\t\t\t\t\treturn {'>': '>', '<': '<'}[$00];\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// attach plain variables to scope variables\n\t\tfunction attachScope(v) {\n\t\t\t//console.log(VarMap, [v]);\n\t\t\tif (v) {\n\t\t\t\t//var DEBUG = /error/.test(v);\n\t\t\t\t//DEBUG && console.log(11, [v]);\n\n\t\t\t\t//ToDo: still buggy, this need to improve\n\t\t\t\tvar vv = '';\n\t\t\t\tvar matches = v.match(varOrStringRegex);\n\t\t\t\tvar match, match0;\n\t\t\t\t//DEBUG && console.log(12, matches);\n\t\t\t\tfor(var i = 0; i < matches.length; i++) {\n\t\t\t\t\tmatch = matches[i];\n\t\t\t\t\tmatch0 = match[0];\n\t\t\t\t\tif (\n\t\t\t\t\t\t(match0 === '$' || match0 === '_' || (match0 >= 'a' && match0 <= 'z') || (match0 >= 'A' && match0 <= 'Z')) &&\n\t\t\t\t\t\t!VarMap[match] &&\n\t\t\t\t\t\t(!i || matches[i-1][matches[i-1].length-1] !== '.')\n\t\t\t\t\t\t) {\n\t\t\t\t\t\tvv += 'S.' + match;\n\t\t\t\t\t} else if (match.indexOf('$index') >= 0) {\n\t\t\t\t\t\t//only support last level for now\n\t\t\t\t\t\tvv += match.replace($indexRegex, LevelVarMap[ngRepeatLevel]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvv += match;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//DEBUG && console.log(55, vv);\n\t\t\t\treturn vv;\n\t\t\t}\n\t\t\treturn v;\n\t\t}\n\n\t\t// escape single quotes with backslash\n\t\tfunction escapeSingleQuote(str) {\n\t\t\tvar quotePos = str.indexOf(\"'\");\n\t\t\tif (quotePos >= 0) {\n\t\t\t\tvar ret = '';\n\t\t\t\tvar prevQuotePos = 0;\n\t\t\t\tdo {\n\t\t\t\t\tret += str.substring(prevQuotePos, quotePos);\n\t\t\t\t\t//escaped quote\n\t\t\t\t\tif (str[quotePos - 1] !== '\\\\') {\n\t\t\t\t\t\tret += '\\\\';\n\t\t\t\t\t}\n\t\t\t\t\tprevQuotePos = quotePos;\n\t\t\t\t\tquotePos = str.indexOf(\"'\", prevQuotePos + 1);\n\t\t\t\t} while (quotePos > 0);\n\t\t\t\tret += str.substr(prevQuotePos);\n\t\t\t\treturn ret;\n\t\t\t} else {\n\t\t\t\treturn str;\n\t\t\t}\n\t\t}\n\n\t\t// interpolation\n\t\tfunction interpolate(str) {\n\t\t\tvar pos = str.indexOf('{{');\n\t\t\tif (pos >= 0) {\n\t\t\t\tvar prevPos = 0;\n\t\t\t\tvar ret = '';\n\t\t\t\tvar outsideStr, insideStr;\n\t\t\t\tdo {\n\t\t\t\t\toutsideStr = str.substring(prevPos, pos);\n\t\t\t\t\tret += escapeSingleQuote(outsideStr);\n\n\t\t\t\t\t//skip {{\n\t\t\t\t\tprevPos = pos + 2;\n\t\t\t\t\tpos = str.indexOf('}}', prevPos);\n\n\t\t\t\t\tinsideStr = str.substring(prevPos, pos);\n\t\t\t\t\tret += \"'+(\" + attachFilter(insideStr) + val_mod + \")+'\";\n\n\t\t\t\t\t//skip }} for next\n\t\t\t\t\tprevPos = pos + 2;\n\t\t\t\t\tpos = str.indexOf('{{', prevPos);\n\t\t\t\t} while (pos > 0);\n\n\t\t\t\t//remaining text outside interpolation\n\t\t\t\tret += escapeSingleQuote(str.substr(prevPos));\n\t\t\t\treturn ret;\n\t\t\t} else {\n\t\t\t\treturn escapeSingleQuote(str);\n\t\t\t}\n\t\t}\n\n\t\t// attach $filters\n\t\tfunction attachFilter($1) {\n\t\t\t//console.log(333,$1);\n\t\t\tvar pos = $1.indexOf('|');\n\t\t\tif (pos === -1) {\n\t\t\t\treturn attachScope($1);\n\t\t\t} else {\n\t\t\t\t//ToDo: check this line later\n\t\t\t\tvar v = splitFilters($1, pos);\n\t\t\t\tvar val = attachScope(v[0]);\n\t\t\t\tvar prevColonPos, colonPos;\n\t\t\t\tvar filter;\n\n\t\t\t\t//parse each filters\n\t\t\t\tfor(var i = 1; i < v.length; i++) {\n\t\t\t\t\tfilter = v[i];\n\t\t\t\t\tprevColonPos = 0;\n\n\t\t\t\t\tcolonPos = filter.indexOf(':');\n\t\t\t\t\t//filter with params\n\t\t\t\t\tif (colonPos > 0) {\n\t\t\t\t\t\tval = \"F('\" + filter.slice(prevColonPos, colonPos).trim() + \"')(\" + val;\n\t\t\t\t\t\tprevColonPos = ++colonPos;\n\t\t\t\t\t\tcolonPos = filter.indexOf(':', prevColonPos);\n\t\t\t\t\t\twhile (colonPos > 0) {\n\t\t\t\t\t\t\tval += ',' + attachScope(filter.slice(prevColonPos, colonPos));\n\t\t\t\t\t\t\tprevColonPos = ++colonPos;\n\t\t\t\t\t\t\tcolonPos = filter.indexOf(':', prevColonPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tval += ',' + attachScope(filter.substr(prevColonPos)) + ')';\n\n\t\t\t\t\t//filter without params\n\t\t\t\t\t} else {\n\t\t\t\t\t\tval = \"F('\" + filter.trim() + \"')(\" + val + ')';\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\treturn val;\n\t\t\t}\n\t\t}\n\n\t\tfunction apply$index(val) {\n\t\t\tvar count, tmpRepeatLevel;\n\n\t\t\tif (val.indexOf('$parent.$index') >= 0) {\n\t\t\t\ttmpRepeatLevel = ngRepeatLevel;\n\t\t\t\tval = val.replace($parent$indexRegex, function($0) {\n\t\t\t\t\tcount = $0.match(/\\$parent/g).length; //may need to rewrite with indexOf\n\t\t\t\t\twhile (count>0) {\n\t\t\t\t\t\twhile (tmpRepeatLevel >= 0 && LevelVarMap[--tmpRepeatLevel] === void 0) {}\n\t\t\t\t\t\t--count;\n\t\t\t\t\t}\n\t\t\t\t\treturn \"'+\" + LevelVarMap[tmpRepeatLevel] + \"+'\";\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (val.indexOf('$index') >= 0) {\n\t\t\t\treturn val.replace($indexRegex, \"'+\" + LevelVarMap[ngRepeatLevel] + \"+'\");\n\t\t\t}\n\t\t\treturn val;\n\t\t}\n\n\t\t//parse the element\n\t\tparseHTML(template, {\n\t\t\t//open tag with attributes\n\t\t\topenTag: function(tagName, attr, selfClosing) {\n\t\t\t\t// debug && console.log('openTag', [tagName, attr]);\n\t\t\t\tvar parsedAttr = {}, customId, noValAttr = '', attrClass = '';\n\t\t\t\tvar doTAPassThis, x;\n\n\t\t\t\t//skip parsing if dota-pass is specified (interpolation will still be expanded)\n\t\t\t\t// https://jsperf.com/hasownproperty-vs-in-vs-undefined/12\n\t\t\t\tif (attr['dota-pass'] !== void 0) {\n\t\t\t\t\tif (attr['dota-pass'] === 'this') {\n\t\t\t\t\t\tdoTAPass = doTAPassThis = 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoTAPass = level; doTAContinue = 0;\n\t\t\t\t\t}\n\t\t\t\t//re-enable dota parsing\n\t\t\t\t} else if (attr['dota-continue'] !== void 0) {\n\t\t\t\t\tdoTAContinue = level;\n\t\t\t\t\tattr['dota-continue'] = void 0;\n\t\t\t\t}\n\n\t\t\t\t//unless dota-pass or with dota-continue\n\t\t\t\tif (doTAPass === void 0 || doTAContinue) {\n\n\t\t\t\t\tif (optDiffLevel && attr.skip) {\n\t\t\t\t\t\tskipLevel = level;\n\t\t\t\t\t\tvar attrSkip = attr.skip;\n\t\t\t\t\t\tattr.skip = void 0;\n\t\t\t\t\t\tFnText += indent(level, 1) + 'var O'+ level + '=N+' + attrSkip + '; \\n';\n\t\t\t\t\t}\n\n\t\t\t\t\t//ng-repeat to while/for loop\n\t\t\t\t\tif (attr['ng-repeat']) {\n\t\t\t\t\t\t//console.log(21,[x], [val]);\n\t\t\t\t\t\tLevelMap[level] = LevelMap[level] ? LevelMap[level] + 1 : 1;\n\t\t\t\t\t\tvar NG_REPEAT = attr['ng-repeat'];\n\t\t\t\t\t\tvar inPos = NG_REPEAT.indexOf(' in ');\n\t\t\t\t\t\tvar repeatVar = NG_REPEAT.substr(0, inPos), repeatSrc = NG_REPEAT.substr(inPos + 4);\n\t\t\t\t\t\tvar commaPos = repeatVar.indexOf(',');\n\t\t\t\t\t\tvar pipePos = repeatSrc.indexOf('|'), repeatSrcNew;\n\t\t\t\t\t\tvar colonPos;\n\n\t\t\t\t\t\t//store variable name to use for $index later\n\t\t\t\t\t\t//this is ng-repeat specific, LevelMap[level] is same for ng-if too\n\n\t\t\t\t\t\tngRepeatLevel = level;\n\n\t\t\t\t\t\tif (pipePos > 0) {\n\t\t\t\t\t\t\trepeatSrcNew = attachFilter(repeatSrc);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trepeatSrcNew = attachScope(repeatSrc);\n\t\t\t\t\t\t\tcolonPos = repeatSrcNew.indexOf(':');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Range: \"i in 1:10\" ==> (for i = 1; i < 10; i++)\n\t\t\t\t\t\tif (colonPos >= 0) {\n\t\t\t\t\t\t\tvar start = repeatSrcNew.substr(0, colonPos) || 0, end, step;\n\t\t\t\t\t\t\tvar anotherColon = repeatSrcNew.indexOf(':', ++colonPos);\n\t\t\t\t\t\t\tif (anotherColon > 0) {\n\t\t\t\t\t\t\t\tend = repeatSrcNew.substring(colonPos, anotherColon);\n\t\t\t\t\t\t\t\tstep = repeatSrcNew.substr(anotherColon + 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tend = repeatSrcNew.substr(colonPos);\n\t\t\t\t\t\t\t\tstep = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// console.log([start, end, step, repeatSrcNew, colonPos]);\n\n\t\t\t\t\t\t\tFnText += indent(level, 1) + 'for(var ' +\n\t\t\t\t\t\t\t\trepeatVar + '=' + start + ';' +\n\t\t\t\t\t\t\t\trepeatVar + (step > 0 ? '<' : '>') + end + ';' + repeatVar + '+=' + step + '){\\n';\n\t\t\t\t\t\t\tLevelVarMap[level] = repeatVar;\n\t\t\t\t\t\t\tVarMap[repeatVar] = 1;\n\n\t\t\t\t\t\t// Object: \"k, v in {}\" ==> (for in {})\n\t\t\t\t\t\t} else if (commaPos > 0) {\n\t\t\t\t\t\t\tvar key = repeatVar.substr(0, commaPos);\n\t\t\t\t\t\t\tvar value = repeatVar.substr(commaPos + 1);\n\t\t\t\t\t\t\tFnText += indent(level, 1) + 'var ' +\n\t\t\t\t\t\t\t\tvalue + ',D' + level + '=' + repeatSrcNew + ';\\n';\n\t\t\t\t\t\t\tFnText += indent(level, 1) + 'for(var ' + key + ' in D' + level + '){\\n';\n\t\t\t\t\t\t\t//\t\t\t\t\t\t\t\t\t\t\t\t\t\t space is needed for manual uglify\t->\tvvv\n\t\t\t\t\t\t\tFnText += indent(level) + value + ' = ' + 'D' + level + '[' + key + ']; \\n';\n\t\t\t\t\t\t\tLevelVarMap[level] = key;\n\t\t\t\t\t\t\tVarMap[key] = VarMap[value] = 1;\n\n\t\t\t\t\t\t// Array: \"k in []\" ==> while loop\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar idx = 'i' + level, l = 'l'+ level;\n\t\t\t\t\t\t\tFnText += indent(level, 1) + 'var ' +\n\t\t\t\t\t\t\t\trepeatVar + ',D' + level + '=' + repeatSrcNew + ',' +\n\t\t\t\t\t\t\t\tidx + '=-1,' + l + '=D' + level + '.length;\\n';\n\t\t\t\t\t\t\tFnText += indent(level, 1) + 'while(++' + idx + '<' + l + '){\\n';\n\t\t\t\t\t\t\t//\t\t\t\t\t\t\t\t\t\t\t\tspace is needed for manual uglify\t->\tvvv\n\t\t\t\t\t\t\tFnText += indent(level) + repeatVar + '=D' + level + '[' + idx + ']; \\n';\n\t\t\t\t\t\t\tLevelVarMap[level] = idx;\n\t\t\t\t\t\t\tVarMap[repeatVar] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//remote attribute not to get forwarded to angular\n\t\t\t\t\t\tattr['ng-repeat'] = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (optDiffLevel === 3 && attr.key) {\n\t\t\t\t\t\tkeyLevel = level;\n\t\t\t\t\t\tKeyMap[level] = attr.key;\n\t\t\t\t\t\tFnText += indent(level, 1) + 'var ' + attr.key + '=N,M=1; \\n';\n\t\t\t\t\t\tattr.key = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t//re-render sub template\n\t\t\t\t\tif (attr.refresh) {\n\t\t\t\t\t\tcustomId = 1;\n\t\t\t\t\t\tvar oneTimeBinding = attr.refresh.indexOf('::');\n\t\t\t\t\t\tFnText += indent(level, 2) +\n\t\t\t\t\t\t\t(!Watched ? 'var ' + (optWatchDiff ? '': 'N=1,') + 'T=doTA.W[' + uniqueId + ']=[];' : '') +\n\t\t\t\t\t\t\t'var W={N:N,I:N+\"' + '.' + uniqueId + '\",W:\"' +\n\t\t\t\t\t\t\t(oneTimeBinding >=0 ? attr.refresh.substr(oneTimeBinding + 2) + '\",O:1': attr.refresh + '\"') +\n\t\t\t\t\t\t\t(attr.compile ? ',C:1' : '') +\n\t\t\t\t\t\t\t'};T.push(W);\\n';\n\t\t\t\t\t\tWatchMap[level] = Watched = 1;\n\t\t\t\t\t\tFnText += indent(level, 2) + 'W.F=function(S,F,$attr,X,N){var R=\"\";\\n';\n\t\t\t\t\t\t//attr.refresh = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (attr['ng-init']) {\n\t\t\t\t\t\tif (attr['ng-init'].slice(0, 4) === 'var ') {\n\t\t\t\t\t\t\tvar semiColonPos = attr['ng-init'].indexOf(';', 5);\n\t\t\t\t\t\t\tif (semiColonPos >= 0) {\n\t\t\t\t\t\t\t\tvar vars = attr['ng-init'].slice(4, semiColonPos);\n\t\t\t\t\t\t\t\t//var x,y,z;\n\t\t\t\t\t\t\t\tif (vars.indexOf(',') >= 0) {\n\t\t\t\t\t\t\t\t\tvar xvars = vars.split(',');\n\t\t\t\t\t\t\t\t\tfor (var i = 0, l = xvars.length; i < l; i++) {\n\t\t\t\t\t\t\t\t\t\tVarMap[xvars[i]] = 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//var x;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tVarMap[vars] = 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t//var x = 1;\n\t\t\t\t\t\t\t\tvar eqPos = attr['ng-init'].indexOf('=');\n\t\t\t\t\t\t\t\tif (eqPos >= 0) {\n\t\t\t\t\t\t\t\t\tvar vars = attr['ng-init'].slice(4, eqPos);\n\t\t\t\t\t\t\t\t\tVarMap[vars] = 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tFnText += indent(level) + attr['ng-init'].slice(0, semiColonPos) +\n\t\t\t\t\t\t\t\tattachScope(attr['ng-init'].slice(semiColonPos)) + '; \\n';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tFnText += indent(level) + attachScope(attr['ng-init']) + '; \\n';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tattr['ng-init'] = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t//ng-if to javascript if\n\t\t\t\t\tif (attr['ng-if']) {\n\t\t\t\t\t\tif (optDiffLevel) {\n\t\t\t\t\t\t\tngIfLevel = level;\n\t\t\t\t\t\t\tngIfLevels.push(level);\n\t\t\t\t\t\t\tngIfLevelMap[level] = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tLevelMap[level] = LevelMap[level] ? LevelMap[level] + 1 : 1;\n\t\t\t\t\t\tFnText += indent(level, 1) + 'if('+ attachScope(attr['ng-if']) +'){\\n';\n\t\t\t\t\t\t// console.log('ng-if starts here', level);\n\t\t\t\t\t\tattr['ng-if'] = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t//only if there nothing between tags\n\t\t\t\t\tif (optStrip) {\n\t\t\t\t\t\tif (attr.elif) {\n\t\t\t\t\t\t\tFnText += indent(level, 1) + 'else if('+ attachScope(attr.elif) +'){\\n';\n\t\t\t\t\t\t\tLevelMap[level] = LevelMap[level] ? LevelMap[level] + 1 : 1;\n\t\t\t\t\t\t\tattr.elif = void 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (attr['else'] !== void 0 && !optWatchDiff) {\n\t\t\t\t\t\t\tFnText += indent(level, 1) + 'else{\\n';\n\t\t\t\t\t\t\tLevelMap[level] = LevelMap[level] ? LevelMap[level] + 1 : 1;\n\t\t\t\t\t\t\tattr['else'] = void 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//remove +''+ from class, for unnecessary string concat\n\t\t\t\t\tif (attr.class) {\n\t\t\t\t\t\tattrClass = interpolate(attr.class);\n\t\t\t\t\t\tattr.class = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (attr['ng-class']) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tvar ngScopedClass = attachScope(attr['ng-class']);\n\t\t\t\t\t\twhile((match = ngClassRegex.exec(ngScopedClass)) !== null) {\n\t\t\t\t\t\t\tattrClass +=\n\t\t\t\t\t\t\t\t(\"'+(\" + match[2] + '?' +\n\t\t\t\t\t\t\t\t\t\"'\" + (attrClass ? ' ' : '') + match[1].replace(/['\"]/g, '') +\n\t\t\t\t\t\t\t\t\t\"':'')+'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tattr['ng-class'] = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (attr['ng-show']) {\n\t\t\t\t\t\tattrClass += \"'+(\" + attachScope(attr['ng-show']) +\n\t\t\t\t\t\t\t\"?'':'\" + (attrClass ? ' ' : '') + \"ng-hide')+'\";\n\t\t\t\t\t\tattr['ng-show'] = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (attr['ng-style']) {\n\t\t\t\t\t\tparsedAttr.style = (attr.style ? attr.style + ';' : '') + interpolate(attr['ng-style']);\n\t\t\t\t\t\tattr['ng-style'] = void 0;\n\t\t\t\t\t\tattr.style = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (attr['ng-hide']) {\n\t\t\t\t\t\tattrClass += \"'+(\" + attachScope(attr['ng-hide']) +\n\t\t\t\t\t\t\t\"?'\" + (attrClass ? ' ' : '') + \"ng-hide':'')+'\";\n\t\t\t\t\t\tattr['ng-hide'] = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (optModel && attr['ng-model']) {\n\t\t\t\t\t\tif (attr['ng-model'].indexOf('$index') >= 0) {\n\t\t\t\t\t\t\tparsedAttr['dota-model'] = apply$index(interpolate(attr['ng-model']));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparsedAttr['dota-model'] = interpolate(attr['ng-model']);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tattrClass += (attrClass ? ' ' : '') + 'dm' + uniqueId;\n\t\t\t\t\t\tattr['ng-model'] = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (optBind && attr['ng-bind']) {\n\t\t\t\t\t\tif (attr['ng-bind'].indexOf('$index') >= 0) {\n\t\t\t\t\t\t\tparsedAttr['dota-bind'] = apply$index(interpolate(attr['ng-bind']));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparsedAttr['dota-bind'] = interpolate(attr['ng-bind']);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tattrClass += (attrClass ? ' ' : '') + 'db' + uniqueId;\n\t\t\t\t\t\tattr['ng-bind'] = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (attr['ng-value']) {\n\t\t\t\t\t\tparsedAttr.value = \"'+(\" + attachFilter(attr['ng-value']) + \")+'\";\n\t\t\t\t\t\tattr['ng-value'] = void 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t//some cleanup\n\t\t\t\t\tif (attrClass) {\n\t\t\t\t\t\tattrClass = attrClass.replace(/\\+''\\+/g, '+');\n\t\t\t\t\t}\n\n\t\t\t\t\t// expand interpolations on attributes, and some more\n\t\t\t\t\tfor (x in attr) {\n\t\t\t\t\t\tvar attrVal = attr[x];\n\t\t\t\t\t\tif (attrVal === void 0) { continue; }\n\n\t\t\t\t\t\t// some ng- attributes\n\t\t\t\t\t\tif (x[0] === 'n' && x[1] === 'g' && x[2] === '-') {\n\t\t\t\t\t\t\t//some ng-attr are just don't need it here.\n\t\t\t\t\t\t\tvar attrName = x.substr(3);\n\t\t\t\t\t\t\t//something like ng-src, ng-href, etc.\n\t\t\t\t\t\t\tif (attrName === 'src' || attrName === 'alt' || attrName === 'title' || attrName === 'href') {\n\t\t\t\t\t\t\t\tx = attrName;\n\n\t\t\t\t\t\t\t//convert ng-events to dota-events, to be bind later with native events\n\t\t\t\t\t\t\t} else if (optEvent && EVENTS[attrName]) {\n\t\t\t\t\t\t\t\t//add class 'de' for one time querying\n\t\t\t\t\t\t\t\tif (attrClass) {\n\t\t\t\t\t\t\t\t\tif (attrClass[0] !== 'd' || attrClass[1] !== 'e') {\n\t\t\t\t\t\t\t\t\t\tattrClass = 'de' + uniqueId + ' ' + attrClass;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tattrClass = 'de' + uniqueId;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tx = 'de-' + attrName;\n\n\t\t\t\t\t\t\t} else if (attrName === 'required' || attrName === 'hidden' ||\n\t\t\t\t\t\t\tattrName === 'checked' || attrName === 'selected' ||\n\t\t\t\t\t\t\tattrName === 'disabled' || attrName === 'readonly' || attrName === 'multiple') {\n\t\t\t\t\t\t\t\tnoValAttr += \"'+(\" + attachScope(attrVal) + \"?' \" + attrName + \"=\\\"\\\"':'')+'\";\n\t\t\t\t\t\t\t\t//noValAttr will attach later\n\t\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (x[0] === '-') {\n\t\t\t\t\t\t\tx = '-' + camelCase(x.substr(1));\n\t\t\t\t\t\t\tparsedAttr[x] = \"'+(\" + attachScope(attrVal) + \")+'\";\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//ng-repeat loop variables are not available!\n\t\t\t\t\t\t// only way to acccess is to use $index like \"data[$index]\"\n\t\t\t\t\t\t// instead of \"item\" as in \"item in data\"\n\t\t\t\t\t\tparsedAttr[x] = apply$index(interpolate(attrVal));\n\t\t\t\t\t}\n\n\t\t\t\t// pass all attributes to angular, except interpolation and $index\n\t\t\t\t} else {\n\t\t\t\t\tif (doTAPassThis) {\n\t\t\t\t\t\tdoTAPass = void 0;\n\t\t\t\t\t}\n\t\t\t\t\t//still expand interpolation even if dota-pass is set\n\t\t\t\t\tfor (x in attr) {\n\t\t\t\t\t\tparsedAttr[x] = apply$index(interpolate(attr[x]));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//write tag back as string\n\t\t\t\tFnText += indent(level) + \"R+='<\" + tagName;\n\n\t\t\t\t//make id attr come before anything\n\t\t\t\tif (customId || optWatchDiff) {\n\t\t\t\t\tvar tagId = idHash[uniqueId + '.' + level] = parsedAttr.id || ( (\n\t\t\t\t\t\tkeyLevel < level && KeyMap[keyLevel] || optKey ?\n\t\t\t\t\t\t\"'+\" + (optKey || KeyMap[keyLevel]) + \"+'.'+M+++'.\" :\n\t\t\t\t\t\t\"'+N+++'.\"\n\t\t\t\t\t) + uniqueId);\n\t\t\t\t\tFnText += ' id=\"' + tagId + '\"';\n\t\t\t\t\tif (parsedAttr.id) {\n\t\t\t\t\t\tparsedAttr.id = void 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//write back attributes\n\t\t\t\tfor(var k in parsedAttr) {\n\t\t\t\t\tif ((x=parsedAttr[k]) && x.indexOf('\"') !== -1) {\n\t\t\t\t\t\tFnText += \" \" + k + '=\"' + x.replace(/\"/g, \"\\\\'\") + '\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tFnText += \" \" + k + '=\"' + x + '\"';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (attrClass) {\n\t\t\t\t\tFnText += ' class=\"' + attrClass + '\"';\n\t\t\t\t}\n\n\t\t\t\t//attach boolean attributes at last\n\t\t\t\tFnText += noValAttr + (selfClosing ? ' /' : '') + \">';\\n\";\n\n\t\t\t\tif (optWatchDiff) {\n\t\t\t\t\t// FnText += indent(level) + \"N++; \\n\";\n\t\t\t\t\tif (ngIfLevelMap[ngIfLevel] >= 0) {\n\t\t\t\t\t\tngIfLevelMap[ngIfLevel]++;\n\t\t\t\t\t\t// console.log('isPath ngIfCounter', [tagName, ngIfCounter]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//expand doTA templates with expand=1 option\n\t\t\t\tif (attr['render'] && attr.expand) {\n\t\t\t\t\tvar attrArray = [];\n\t\t\t\t\t//attach data-X attr, and scope-X attr\n\t\t\t\t\tfor(x in attr) {\n\t\t\t\t\t\tif (!x.indexOf('data-')) {\n\t\t\t\t\t\t\tattrArray.push('\"' + x.slice(5) + '\":\"' + attr[x] + '\"');\n\t\t\t\t\t\t} else if (!x.indexOf('scope-')) {\n\t\t\t\t\t\t\tattrArray.push('\"' + x.slice(6) + '\":S[\"' + attr[x] + '\"]');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tFnText += indent(level) + 'var P={' + attrArray.join(',') + '},U=\"' + attr['render'] + '\";\\n';\n\t\t\t\t\t//only expand if renderFn is ready in cache, but not in cache-dom (which unneeded)\n\t\t\t\t\tFnText += indent(level) + 'if(doTA.C[U]&&!doTA.D[U]){' +\n\t\t\t\t\t\t'R+=doTA.C[U](S,F,P)}; \\n';\n\t\t\t\t}\n\n\t\t\t\tlevel++;\n\t\t\t},\n\n\t\t\t//void tag no need to write closing tag\n\t\t\tvoidTag: function() {\n\t\t\t\tlevel--;\n\n\t\t\t\tif (optDiffLevel === 2 && level === ngIfLevel && ngIfLevelMap[ngIfLevel] >= 0) {\n\t\t\t\t\t// console.log('ngIfLevelMap1', ngIfLevel, ngIfLevels, ngIfLevelMap);\n\t\t\t\t\tif (ngIfLevelMap[ngIfLevel]) {\n\t\t\t\t\t\tFnText += indent(level, 1) + \"}else{\" +\n\t\t\t\t\t\t\t\"R+='<span id=\\\"'+N+'.\" + uniqueId + '\" hidden=\"\"></span>\\';' +\n\t\t\t\t\t\t\t\"N+=\" + ngIfLevelMap[ngIfLevel] + \";}; \\n\";\n\t\t\t\t\t}\n\t\t\t\t\t//save counter\n\t\t\t\t\tngIfCounterTmp = ngIfLevelMap[ngIfLevel];\n\t\t\t\t\t//clear counter\n\t\t\t\t\tngIfLevelMap[ngIfLevel] = void 0;\n\t\t\t\t\t//remove last level\n\t\t\t\t\tngIfLevel = ngIfLevels[--ngIfLevels.length - 1];\n\t\t\t\t\t//add up to previous level\n\t\t\t\t\tif (ngIfLevel) {\n\t\t\t\t\t\tngIfLevelMap[ngIfLevel] += ngIfCounterTmp;\n\t\t\t\t\t}\n\t\t\t\t\t// console.log('ngIfLevelMap2', ngIfLevel, ngIfLevels, ngIfLevelMap);\n\t\t\t\t\tif (LevelMap[level] > 0) {\n\t\t\t\t\t\tLevelMap[level]--;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//close \"if\", \"for\", \"while\" blocks\n\t\t\t\t//while is needed because loop and if can be in same tag\n\t\t\t\twhile (LevelMap[level] > 0) {\n\t\t\t\t\tFnText += indent(level, 1) + '}\\n';\n\t\t\t\t\tLevelMap[level]--;\n\t\t\t\t}\n\n\t\t\t\t//clear ng-repeat $index\n\t\t\t\tif (ngRepeatLevel === level) {\n\t\t\t\t\tLevelVarMap[level] = 0;\n\t\t\t\t\twhile (ngRepeatLevel >=0 && LevelVarMap[--ngRepeatLevel] === void 0) {}\n\t\t\t\t}\n\n\t\t\t\t//reset dota-pass when out of scope\n\t\t\t\tif (doTAPass >= level) {\n\t\t\t\t\tdoTAPass = void 0;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t//close tag\n\t\t\tcloseTag: function(tagName) {\n\t\t\t\tlevel--;\n\n\t\t\t\t//just write closing tag back\n\t\t\t\tFnText += indent(level) + \"R+='</\" + tagName + \">';\\n\";\n\n\t\t\t\t//ngIfCounter for most possible uniqueId generation; don't work with loop inside!\n\t\t\t\tif (optDiffLevel === 2 && level === ngIfLevel && ngIfLevelMap[ngIfLevel] >= 0) {\n\t\t\t\t\t// console.log('ngIfLevelMap1', ngIfLevel, ngIfLevels, ngIfLevelMap);\n\t\t\t\t\tif (ngIfLevelMap[ngIfLevel]) {\n\t\t\t\t\t\tFnText += indent(level, 1) + \"}else{\" +\n\t\t\t\t\t\t\t\"R+='<\" + tagName + \" id=\\\"'+N+'.\" + uniqueId + '\" hidden=\"\" ' +\n\t\t\t\t\t\t\t(tagName === 'img' || tagName === 'input' || tagName === 'br' || tagName === 'hr' ?\n\t\t\t\t\t\t\t'/>' : '></' + tagName + '>') + '\\';' +\n\t\t\t\t\t\t\t\"N+=\" + ngIfLevelMap[ngIfLevel] + \"} \\n\";\n\t\t\t\t\t}\n\t\t\t\t\t//save counter\n\t\t\t\t\tngIfCounterTmp = ngIfLevelMap[ngIfLevel];\n\t\t\t\t\t//clear counter\n\t\t\t\t\tngIfLevelMap[ngIfLevel] = void 0;\n\t\t\t\t\t//remove last level\n\t\t\t\t\tngIfLevel = ngIfLevels[--ngIfLevels.length - 1];\n\t\t\t\t\t//add up to previous level\n\t\t\t\t\tif (ngIfLevel) {\n\t\t\t\t\t\tngIfLevelMap[ngIfLevel] += ngIfCounterTmp;\n\t\t\t\t\t}\n\t\t\t\t\t// console.log('ngIfLevelMap2', ngIfLevel, ngIfLevels, ngIfLevelMap);\n\t\t\t\t\tif (LevelMap[level] > 0) {\n\t\t\t\t\t\tLevelMap[level]--;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// console.log('LevelMap1', LevelMap);\n\t\t\t\t//close \"if\", \"for\", \"while\" blocks\n\t\t\t\twhile (LevelMap[level] > 0) {\n\t\t\t\t\tFnText += indent(level, 1) + '}\\n';\n\t\t\t\t\tLevelMap[level]--;\n\t\t\t\t}\n\t\t\t\t// console.log('LevelMap2', LevelMap);\n\n\t\t\t\tif (optDiffLevel) {\n\t\t\t\t\tif (level === skipLevel) {\n\t\t\t\t\t\t// console.log('ngIfLevel', [level, skipLevel, ngRepeatLevel])\n\t\t\t\t\t\tFnText += indent(level, 1) + 'N=O' + level + '; \\n';\n\t\t\t\t\t}\n\t\t\t\t\tif (level === skipLevel) {\n\t\t\t\t\t\tskipLevel = void 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//clear ng-repeat $index\n\t\t\t\tif (ngRepeatLevel === level) {\n\t\t\t\t\tLevelVarMap[level] = 0;\n\t\t\t\t\twhile (ngRepeatLevel >=0 && LevelVarMap[--ngRepeatLevel] === void 0) {}\n\t\t\t\t}\n\n\t\t\t\t//add blank node if $watch block return nothing, mostly occur with ng-if\n\t\t\t\tif (WatchMap[level]) {\n\t\t\t\t\tFnText += indent(level, 1) +\n\t\t\t\t\t\t\"R=R||('<\" + tagName + ' id=\"' + idHash[uniqueId + '.' + level] +\n\t\t\t\t\t\t'\" style=\"display:none\"></' + tagName + '>\\');\\n';\n\t\t\t\t\tWatchMap[level] = 0;\n\t\t\t\t\tFnText += indent(level, 2) + 'return R;}; \\n';\n\t\t\t\t\tFnText += indent(level, 2) + 'R+=W.F(S,F,' + (optParams ? '$attr': '0') + ',0,N++); \\n';\n\t\t\t\t}\n\n\t\t\t\t//reset dota-pass when out of scope\n\t\t\t\tif (doTAPass >= level) {\n\t\t\t\t\tdoTAPass = void 0;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t//text node\n\t\t\ttext: function(text) {\n\t\t\t\t//console.log([text]);\n\t\t\t\tFnText += indent(level) + ('R+=\\'' + interpolate(text) + '\\';\\n')\n\t\t\t\t\t.replace(/\\+''|''\\+/g,'');\n\t\t\t},\n\n\t\t\t//comment node\n\t\t\tcomment: function(data) {\n\t\t\t\tif (optComment !== 0) {\n\t\t\t\t\t//console.log(111,[data]);\n\t\t\t\t\tFnText += indent(level) + \"R+='<\" + escapeSingleQuote(data) + \">';\\n\";\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (optWatchDiff && optDiffLevel !== 0) {\n\t\t\t//http://jsperf.com/hasownproperty-vs-in-vs-undefined/87\n\t\t\tFnText += indent(0) + 'if(X&&doTA.H[' + uniqueId + ']){doTA.diff' + (optDiffLevel || '') +\n\t\t\t\t'(' + uniqueId + ',R)}' +\n\t\t\t\t'doTA.H[' + uniqueId + ']=R;\\n';\n\t\t}\n\n\t\tFnText += indent(0) +'return R;\\n';\n\n\t\t//Default Optimization\n\t\t// - concat possible lines for performance\n\t\tFnText = FnText.replace(/;R\\+=/g,'+').replace(/'\\+'/g,'');\n\n\t\t//extra optimization, which might take some more CPU\n\t\tif (options.optimize && !optWatchDiff) {\n\t\t\tFnText = FnText.replace(removeUnneededQuotesRegex,'$1$2');\n\t\t}\n\n\t\t//print the whole function if debug\n\t\tif (options.debug) {\n\t\t\t/**/console.log(FnText);\n\t\t}\n\t\t// console.log(FnText);\n\n\t\t//try {\n\t\t\t/*jshint evil: true */\n\t\t\tif (optWatchDiff || optDiffLevel) {\n\t\t\t\t//$scope, $filter, $attr, isPatch, IdCounter, isKey, LoopIdCounter\n\t\t\t\tcompiledFn = new Function('S', 'F', '$attr', 'X', 'N', 'K', 'M', FnText);\n\t\t\t} else if (optParams) {\n\t\t\t\tcompiledFn = new Function('S', 'F', '$attr', FnText);\n\t\t\t} else {\n\t\t\t\tcompiledFn = new Function('S', 'F', FnText);\n\t\t\t}\n\t\t\t/*jshint evil: false */\n\n\t\t\tcompiledFn.id = uniqueId;\n\t\t\tif (Watched) {\n\t\t\t\tcompiledFn.W = 1;\n\t\t\t//\tcompiledFn = {W:[], F: compiledFn};\n\t\t\t}\n\t\t//} catch (err) {\n\t\t//\tif (typeof console !== \"undefined\") {\n\t\t//\t\t/**/console.log(\"doTA compile error:\\n\" + FnText);\n\t\t//\t}\n\t\t//\tthrow err;\n\t\t//}\n\n\t\t// just for less array usage on heap profiling\n\t\t// but this may trigger GC more\n\t\t// FnText = LevelMap = LevelVarMap = VarMap = ngIfLevels = ngIfLevelMap = WatchMap = idHash = void 0;\n\t\treturn compiledFn;\n\t}\n\n\tfunction initCompileHash(obj) {\n\t\tfor (var x in obj) {\n\t\t\tdoTA.U[x] = obj[x];\n\t\t\tif (obj[x] > doTA.X) {\n\t\t\t\tdoTA.X = obj[x];\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getUniqueId(key) {\n\t\tif (key) {\n\t\t\tif (doTA.U[key]) {\n\t\t\t\treturn doTA.U[key];\n\t\t\t} else {\n\t\t\t\tdoTA.U[key] = doTA.X;\n\t\t\t\treturn doTA.X++;\n\t\t\t}\n\t\t} else {\n\t\t\treturn doTA.X++;\n\t\t}\n\t}\n\n\t//warm-up most used functions\n\t// doTA.compile('<div class=\"x {{x}}\" ng-class=\"{x:1}\" ng-repeat=\"x in y\" ng-if=\"x\" ng-value=\"x\" ng-disabled=\"0\">x{{x}}</div><!--x--><div ng-repeat=\"k,v in y\">{{v|json:4}}</div>', {\n\t// \trender: 1});\n\t// doTA.compile('<div class=\"x {{x}}\" ng-class=\"{x:1}\" ng-repeat=\"x in y\" ng-if=\"x\" ng-value=\"x\" ng-disabled=\"0\">x{{x}}</div><!--x--><div ng-repeat=\"x in 1:10:2\">{{x}}</div>', {\n\t// \twatchDiff: 1, render: 1});\n\tdoTA.compile('<div class=\"x {{x}}\" ng-class=\"{x:1}\" ng-repeat=\"x in y\" ng-if=\"x\" ng-value=\"x\" ng-disabled=\"0\">x{{x}}</div><!--x-->', {\n\t\twatchDiff: 1, diffLevel: 2, render: 0});\n\t// doTA.compile('<div class=\"x {{x}}\" ng-class=\"{x:1}\" ng-repeat=\"x in y\" ng-if=\"x\" ng-value=\"x\" ng-disabled=\"0\">x{{x}}</div><!--x-->', {\n\t// \twatchDiff: 1, diffLevel: 3, render: 1});\n\twindow.doTA = doTA;\n\n\treturn doTA;\n}));\n"],"sourceRoot":"/source/"}