-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathdom-comparator.min.js
13 lines (10 loc) · 47.8 KB
/
dom-comparator.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
/*!
The MIT License (MIT)
http://opensource.org/licenses/MIT
Copyright (c) 2014 Wingify Software Pvt. Ltd.
http://wingify.com
*/
var VWO = window.VWO || {};
!function(exports,global){function stripNodes(node){var ans=node.replace(/(?:\r\n|\r|\n)/g,"");ans=ans.replace(/\>\s+\</g,"><");for(var out="",l=ans.length,i=0;l>i;){if('"'==ans[i])for(out+=ans[i];;){if(i+=1,'"'==ans[i]){out+=ans[i];break}if(l>i+1&&"'"==ans[i+1])out+=ans[i],out+="\\";else if(" "!=ans[i])out+=ans[i];else if(-1==ans[i+1].search(/[^A-Z0-9a-z\s]/)){out+=ans[i];continue}}else l>i+1&&"'"==ans[i+1]?(out+=ans[i],out+="\\"):out+=ans[i];i+=1}return out}global.closure=exports;var $=window.vwo_$||window.$,_=window.vwo__||window._,VWO=window.VWOInjected||window.VWO||{};VWO.DOMComparator=function(params){VWO.DOMNodePool.clear(),$.extend(!0,this,params),this.nodeA&&(this.elA=this.nodeA.el),this.nodeB&&(this.elB=this.nodeB.el);var h,leA=this.elA.length,leB=this.elB.length;for(h=0;leA>h;h++)this.elA[h].data&&(this.elA.splice(h,1),h--,leA--);for(h=0;leB>h;h++)this.elB[h].data&&(this.elB.splice(h,1),h--,leB--);var outA=stripNodes($(this.elA).outerHTML()),outB=stripNodes($(this.elB).outerHTML());this.nodeA=VWO.DOMNodePool.create({el:$("<him id='DOMComparisonResult'>"+outA+"</him>").get(0)}),this.nodeB=VWO.DOMNodePool.create({el:$("<him id='DOMComparisonResult'>"+outB+"</him>").get(0)}),this.elAClone=$("<him id='DOMComparisonResult'>"+outA+"</him>").get(0)},VWO.DOMComparator.create=function(params){return new VWO.DOMComparator(params)},VWO.DOMComparator.prototype={elA:null,elB:null,nodeA:null,nodeB:null,analyzeMatches:function(){var matches=VWO.DOMMatchFinder.create({nodeA:this.nodeA,nodeB:this.nodeB}).compare().matches,nodeADescendants=this.nodeA.descendants(),nodeBDescendants=this.nodeB.descendants();for(var i in matches)if(matches.hasOwnProperty(i)){var j=matches[i],comparison=VWO.DOMNodeComparator.create({nodeA:nodeADescendants[i],nodeB:nodeBDescendants[j]}),matchScore=comparison.finalScore();matchScore&&(nodeADescendants[i].matchedWith=nodeBDescendants[j],nodeBDescendants[j].matchedWith=nodeADescendants[i],nodeBDescendants[j].matchScore=comparison.finalScore(),nodeBDescendants[j].matchDifference=comparison.difference())}},detectInserts:function(){var finalTree=this.nodeB.descendants(),finalOperationsList=[];return _(finalTree).each(function(node){var adjacentNode,nodeI;if(!node.matchedWith&&(!node.parent()||node.parent().matchedWith)){for(adjacentNode=null,nodeI=node;(nodeI=nodeI.nextSibling())&&!nodeI.matchedWith;);var insertedNode=node.copy();nodeI&&nodeI.matchedWith?(adjacentNode=nodeI.matchedWith,adjacentNode.parent().addChildAt(insertedNode,node.index())):(adjacentNode=node.parent().matchedWith,adjacentNode.addChild(insertedNode));var parentSelectorPath=insertedNode.parent().selectorPath(),indexInParent=insertedNode.index();insertedNode.isInserted=!0,finalOperationsList.push({name:"insertNode",selectorPath:null,content:{html:insertedNode.outerHTML(),parentSelectorPath:parentSelectorPath,indexInParent:indexInParent,existsInDOM:!0}})}}),finalOperationsList},detectTextNodeChanges:function(){var initialTree=this.nodeA.descendants(),finalOperationsList=[];return _(initialTree).each(function(node){if(node.matchedWith&&1!==node.matchedWith.matchScore){var matchDifference=node.matchedWith.matchDifference;if(node.nodeType()!==Node.ELEMENT_NODE&&matchDifference.newInnerText){var parentSelectorPath=node.parent().selectorPath(),indexInParent=node.index();finalOperationsList.push({name:"change"+(node.nodeType()===Node.TEXT_NODE?"Text":"Comment"),selectorPath:null,content:{text:matchDifference.newInnerText,parentSelectorPath:parentSelectorPath,indexInParent:indexInParent}}),node.el.textContent=matchDifference.newInnerText}}}),finalOperationsList},detectAttributeChanges:function(){var initialTree=this.nodeA.descendants(),finalOperationsList=[];return _(initialTree).each(function(node){if(node.matchedWith&&1!==node.matchedWith.matchScore){var oldattr,matchDifference=node.matchedWith.matchDifference,attr=$.extend({},matchDifference.addedAttributes,matchDifference.changedAttributes);_(attr).keys().length&&(oldattr={},_(attr).each(function(attr,key){oldattr[key]=node.$().attr(key)}),node.$().attr(attr),finalOperationsList.push({name:"attr",selectorPath:node.selectorPath(),content:attr}));var removedAttr=matchDifference.removedAttributes;_(removedAttr).keys().length&&(oldattr={},_(removedAttr).each(function(attr,key){oldattr[key]=node.$().attr(key),node.$().removeAttr(key)}),finalOperationsList.push({name:"removeAttr",selectorPath:node.selectorPath(),content:matchDifference.removedAttributes}))}}),VWO.DOMNodePool.uncacheAll(),VWO.DOMNodePool.cacheAll(),finalOperationsList},detectStyleChanges:function(){var initialTree=this.nodeA.descendants(),finalOperationsList=[];return _(initialTree).each(function(node){if(node.matchedWith&&1!==node.matchedWith.matchScore){var oldcss,matchDifference=node.matchedWith.matchDifference,css=$.extend({},matchDifference.addedStyles,matchDifference.changedStyles);_(css).keys().length&&(oldcss={},_(css).each(function(css,key){oldcss[key]=node.$().css(key)}),node.$().css(css),finalOperationsList.push({name:"css",selectorPath:node.selectorPath(),content:css}));var removedCss=matchDifference.removedStyles;_(removedCss).keys().length&&(oldcss={},_(removedCss).each(function(css,key){oldcss[key]=node.$().css(key),node.$().css(key,"")}),_(removedCss).each(function(css){node.$().css(css,"")}),finalOperationsList.push({name:"removeCss",selectorPath:node.selectorPath(),content:removedCss}))}}),VWO.DOMNodePool.uncacheAll(),VWO.DOMNodePool.cacheAll(),finalOperationsList},detectRearranges:function(){var initialTree=this.nodeA.descendants(),finalOperationsList=[];return _(initialTree).each(function(node){var adjacentNode,nodeI;if(node.matchedWith&&!(node.parent()&&node.parent().matchedWith&&node.parent().matchedWith===node.matchedWith.parent()&&node.index()===node.matchedWith.index()||!node.parent()&&!node.matchedWith.parent())){adjacentNode=null;var oldParentSelectorPath=node.parent().selectorPath(),oldIndexInParent=node.index();for(nodeI=node.matchedWith;(nodeI=nodeI.nextSibling())&&!nodeI.matchedWith;);if(nodeI&&nodeI.matchedWith)adjacentNode=nodeI.matchedWith,adjacentNode.parent().addChildAt(node,adjacentNode.index());else{var parentNodeOfMatch=node.matchedWith.parent();adjacentNode=parentNodeOfMatch.matchedWith?parentNodeOfMatch.matchedWith:parentNodeOfMatch,adjacentNode.addChild(node)}var parentSelectorPath=node.parent().selectorPath(),indexInParent=node.index();finalOperationsList.push({name:"rearrange",selectorPath:null,content:{parentSelectorPath:parentSelectorPath,indexInParent:indexInParent,oldParentSelectorPath:oldParentSelectorPath,oldIndexInParent:oldIndexInParent,existsInDOM:!0}}),VWO.DOMNodePool.uncacheAll(),VWO.DOMNodePool.cacheAll()}}),finalOperationsList},detectRemoves:function(){var initialTree=this.nodeA.descendants(),finalOperationsList=[];return _(initialTree).each(function(node){if(!(node.matchedWith||node.isInserted||node.parent()&&!node.parent().matchedWith)){var parentSelectorPath=node.parent().selectorPath(),indexInParent=node.index();node.parent().removeChild(node),finalOperationsList.push({name:"deleteNode",selectorPath:null,content:{html:node.outerHTML(),parentSelectorPath:parentSelectorPath,indexInParent:indexInParent,existsInDOM:!1}})}}),finalOperationsList},detectRemovesInB:function(){var initialTree=this.nodeB.descendants(),finalOperationsList=[];return _(initialTree).each(function(node){if(!(node.matchedWith||node.isInserted||node.parent()&&!node.parent().matchedWith)){var parentSelectorPath=node.parent().selectorPath(),indexInParent=node.index();node.parent().removeChild(node),finalOperationsList.push({name:"deleteNodeInB",selectorPath:null,content:{html:node.outerHTML(),node:node,parentSelectorPath:parentSelectorPath,indexInParent:indexInParent,existsInDOM:!1}})}}),VWO.DOMNodePool.uncacheAll(),VWO.DOMNodePool.cacheAll(),finalOperationsList},verifyComparison:function(){return console.log("comparison successful: "+this.nodeA.equals(this.nodeB)),this.nodeA.equals(this.nodeB)},compare:function(){function getActualIndex(parentSelectorPath,indexInParent){var parentNode=VWO.DOMNode.create({el:self.nodeB.el.parentNode.querySelector(parentSelectorPath)});if(0>indexInParent)return-1;var childNode=parentNode.children()[indexInParent];return Array.prototype.slice.apply(parentNode.el.childNodes).indexOf(childNode.el)}var self=this;this.analyzeMatches();var final_results=[],result1=[this.detectRemovesInB(),this.detectRearranges()];VWO.DOMNodePool.uncacheAll(),VWO.DOMNodePool.cacheAll(),result1=_(result1).flatten();for(var output=[],index,path,html,text,val,attr,css,index1,index2,path1,path2,l=result1.length,i=l-1;i>=0;i--){var op=result1[i];if("deleteNodeInB"==op.name){index=getActualIndex(op.content.parentSelectorPath,op.content.indexInParent-1),path=op.content.parentSelectorPath.split("DOMComparisonResult > ")[1],path||(path=op.content.parentSelectorPath),html=op.content.html,output[i]=-1==index?"$("+JSON.stringify(path)+").prepend("+JSON.stringify(html)+");":"$($("+JSON.stringify(path)+").get(0).childNodes["+index+"]).after("+JSON.stringify(html)+");";var ctx=self.nodeB.el,$=function(selector){return"HIM#DOMComparisonResult"==selector?jQuery(ctx):jQuery(selector,ctx)};eval(output[i])}else final_results.push(result1[i])}VWO.DOMNodePool.uncacheAll(),VWO.DOMNodePool.cacheAll();var result=[this.detectInserts(),this.detectRemoves(),this.detectTextNodeChanges(),this.detectAttributeChanges(),this.detectStyleChanges()];result=_(result).flatten();var le=result.length;for(i=0;le>i;i++)final_results.push(result[i]);return console.log(final_results),this.verifyComparison(),result.toJqueryCode=function toJqueryCode(){function getActualIndex(parentSelectorPath,indexInParent){var parentNode=VWO.DOMNode.create({el:self.elAClone.parentNode.querySelector(parentSelectorPath)});if(0>indexInParent)return-1;var childNode=parentNode.children()[indexInParent];return Array.prototype.slice.apply(parentNode.el.childNodes).indexOf(childNode.el)}for(var output=[],index,path,html,text,val,attr,css,index1,index2,path1,path2,i=0,l=this.length;l>i;i++){var op=this[i];switch(op.name){case"insertNode":index=getActualIndex(op.content.parentSelectorPath,op.content.indexInParent-1),path=op.content.parentSelectorPath.split("DOMComparisonResult > ")[1],html=op.content.html,output[i]=-1==index?"$("+JSON.stringify(path)+").append("+JSON.stringify(html)+");":"$($("+JSON.stringify(path)+").get(0).childNodes["+index+"]).after("+JSON.stringify(html)+");";break;case"rearrange":index1=getActualIndex(op.content.parentSelectorPath,op.content.indexInParent-1),index2=getActualIndex(op.content.oldParentSelectorPath,op.content.oldIndexInParent),path1=op.content.parentSelectorPath.split("DOMComparisonResult > ")[1],path2=op.content.oldParentSelectorPath.split("DOMComparisonResult > ")[1];var node="$("+path2+").get(0).childNodes["+index2+"]";output[i]=-1==index1?"$("+JSON.stringify(path1)+").append("+node+");":"$($("+JSON.stringify(path1)+").get(0).childNodes["+index1+"]).after("+node+");";case"deleteNode":index=getActualIndex(op.content.parentSelectorPath,op.content.indexInParent),path=op.content.parentSelectorPath.split("DOMComparisonResult > ")[1],html=op.content.html,output[i]="$($("+JSON.stringify(path)+").get(0).childNodes["+index+"]).remove();";break;case"changeText":case"changeComment":index=getActualIndex(op.content.parentSelectorPath,op.content.indexInParent),path=op.content.parentSelectorPath.split("DOMComparisonResult > ")[1],text=op.content.text,output[i]="$($("+JSON.stringify(path)+").get(0).childNodes["+index+"]).remove();";var ctx=self.elAClone,$=function(selector){return jQuery(selector,ctx)};eval(output[i]),output[i]="$("+JSON.stringify(path)+").append("+JSON.stringify(text)+");";break;case"attr":case"css":path=op.selectorPath.split("DOMComparisonResult > ")[1],val=op.content,output[i]="$("+JSON.stringify(path)+")."+op.name+"("+JSON.stringify(val)+");";break;case"removeAttr":path=op.selectorPath.split("DOMComparisonResult > ")[1],attr=Object.keys(op.content),output[i]="$("+JSON.stringify(path)+")"+attr.map(function(attr){return".removeAttr("+JSON.stringify(attr)+")"}).join("")+";";break;case"removeCss":path=op.selectorPath.split("DOMComparisonResult > ")[1],css=Object.keys(op.content),output[i]="$("+JSON.stringify(path)+")"+css.map(function(css){return".css("+JSON.stringify(css)+', "")'}).join("")+";"}var ctx=self.elAClone,$=function(selector){return jQuery(selector,ctx)};eval(output[i])}return self.elAClone},final_results}};var $=window.vwo_$||window.$,_=window.vwo__||window._,VWO=window.VWOInjected||window.VWO||{};VWO.DOMMatchFinder=function(params){$.extend(!0,this,params)},VWO.DOMMatchFinder.create=function(params){return new VWO.DOMMatchFinder(params)},VWO.DOMMatchFinder.prototype={nodeA:null,nodeB:null,matches:null,stringA:function(){return this.nodeA.outerHTML().replace(/\r\n|\r|\n/gi,"\n")},stringB:function(){return this.nodeB.outerHTML().replace(/\r\n|\r|\n/gi,"\n")},compare:function(){function allIndexOf(str,toSearch){for(var indices=[],pos=str.indexOf(toSearch);-1!==pos;pos=str.indexOf(toSearch,pos+1))indices.push(pos);return indices}var i,stringA1=this.stringA(),stringB1=this.stringB(),stringA_original=this.stringA(),stringB_original=this.stringB(),splitOn="\n",A_len=stringA1.length,B_len=stringB1.length,start_comment_flag=0,stringA="",stringB="";for(i=0;A_len>i;i++)A_len>i+3&&"<"==stringA1[i]&&"!"==stringA1[i+1]&&"-"==stringA1[i+2]&&"-"==stringA1[i+3]?(start_comment_flag=1,i+=3):A_len>i+2&&1==start_comment_flag&&"-"==stringA1[i]&&"-"==stringA1[i+1]&&">"==stringA1[i+2]?(start_comment_flag=0,i+=2):0==start_comment_flag&&(stringA+=stringA1[i]);for(start_comment_flag=0,i=0;B_len>i;i++)B_len>i+3&&"<"==stringB1[i]&&"!"==stringB1[i+1]&&"-"==stringB1[i+2]&&"-"==stringB1[i+3]?(start_comment_flag=1,i+=3):B_len>i+2&&1==start_comment_flag&&"-"==stringB1[i]&&"-"==stringB1[i+1]&&">"==stringB1[i+2]?(start_comment_flag=0,i+=2):0==start_comment_flag&&(stringB+=stringB1[i]);var f=function(i){return 10>i?" "+i:i.toString()},couA=0,couB=0,result=VWO.StringComparator.create({stringA:stringA,stringB:stringB,matchA:{},matchB:{},couA:0,couB:0,ignoreA:[],ignoreB:[],splitOn:splitOn}).compare(),diffUnion=result.diffUnion,nodeMatches={},stringsInA=result.stringsInA,stringsInB=result.stringsInB;for(i=0;i<result.stringsUnchanged.length;i++){var string=result.stringsUnchanged[i],indexInA=string.indexInA,indexInB=string.indexInB,pointers=VWO.DOMNodeStringPointer.create({haystack:(indexInA>0?splitOn:"")+stringsInA[indexInA]+(indexInA<stringsInA.length-1?splitOn:"")}).allNodePointers(),startIndexInA=stringsInA.slice(0,indexInA).join(splitOn).length-1,startIndexInB=stringsInB.slice(0,indexInB).join(splitOn).length-1;startIndexInA=startIndexInA.clamp(0),startIndexInB=startIndexInB.clamp(0);for(var num,j=0,jl=pointers.length;jl>j;j++){var pointerInA,pointerInB;num=jl>j+1&&pointers[j+1].index-pointers[j].index==1?0:splitOn.length,pointerInA=VWO.DOMNodeStringPointer.create({index:startIndexInA+pointers[j].index+num,haystack:stringA}),pointerInB=VWO.DOMNodeStringPointer.create({index:startIndexInB+pointers[j].index+num,haystack:stringB}),nodeMatches[pointerInA.masterIndex()]=pointerInB.masterIndex()}}var innerNodeMatches={},stringsLastAddedInB=[];for(i=0;i<diffUnion.length;i++)if(diff=diffUnion[i],diff.indexInA>=0&&diff.indexInB>=0&&(stringsLastAddedInB=[]),diff.indexInA<0&&stringsLastAddedInB.push(diff),diff.indexInB<0){if(!stringsLastAddedInB.length)continue;var stringInStringInA=diff.string,stringInStringInB=stringsLastAddedInB[0].string;indexInA=diff.indexInA,indexInB=stringsLastAddedInB[0].indexInB;var c1,c2,valA=[],valB=[],len_A=stringA.length,len_B=stringB.length,co=1,f=0;for(valA[0]=0,i=0;len_A>i;i++)c1=stringA[i],c2=c1.charCodeAt(0),c2>47&&58>c2||c2>64&&91>c2||c2>96&&123>c2||32==c2||95==c2?f&&(valA[co]=i,co+=1,f=0):f=1;for(couA=co,f=0,co=1,valB[0]=0,i=0;len_B>i;i++)c1=stringB[i],c2=c1.charCodeAt(0),c2>47&&58>c2||c2>64&&91>c2||c2>96&&123>c2||32==c2||95==c2?f&&(valB[co]=i,co+=1,f=0):f=1;couB=co;var str,sA,indB,pB=this.nodeB,num_childsB=pB.children().length,ignoreB=[],coB=0,recForB=function(num_childsB,pB){if(0!=num_childsB){var y;for(y=0;num_childsB>y;y++)recForB(pB.children()[y].children().length,pB.children()[y])}else{if(sA=pB.el.outerHTML,sA?indB=stringA.indexOf(sA):(sA=pB.el.nodeValue,indB=stringA.indexOf(sA)),-1!=indB)return;if(-1!=sA.indexOf("class")||-1!=sA.indexOf("href")||-1!=sA.indexOf("style"))return;for(;pB.parent()&&(pB=pB.parent(),str=pB.el.outerHTML,-1==str.indexOf("class")&&-1==str.indexOf("href")&&-1==str.indexOf("style"))&&(sA=pB.el.outerHTML,indB=stringA.indexOf(sA),-1==indB&&pB.parent()&&1==pB.parent().children().length);)prev=sA;var matching=[];matching.push({InB:[stringB.indexOf(sA),stringB.indexOf(sA)+sA.length]});var st,en,j,indexB1,indexB2,matching_len=matching.length;for(i=0;matching_len>i;i++){for(st=matching[i].InB[0],j=0;j<valB.length;j++)if(valB[j]>st){indexB1=j;break}for(en=matching[i].InB[1],j=0;j<valB.length;j++)if(valB[j]>en){indexB2=j-1;break}var lo=indexB2-indexB1+1;for(j=0;lo>j;j++)ignoreB[coB]=indexB1,indexB1++,coB++}}};recForB(num_childsB,pB);var pA=this.nodeA,num_childsA=pA.children().length,ignoreA=[],coA=0,recForA=function(num_childsA,pA){if(0!=num_childsA){var y;for(y=0;num_childsA>y;y++)recForA(pA.children()[y].children().length,pA.children()[y])}else{if(sA=pA.el.outerHTML,sA?indB=stringB.indexOf(sA):(sA=pA.el.nodeValue,indB=stringB.indexOf(sA)),-1!=indB)return;if(-1!=sA.indexOf("class")||-1!=sA.indexOf("href")||-1!=sA.indexOf("style"))return;for(;pA.parent()&&(pA=pA.parent(),str=pA.el.outerHTML,-1==str.indexOf("class")&&-1==str.indexOf("href")&&-1==str.indexOf("style"))&&(sA=pA.el.outerHTML,indB=stringB.indexOf(sA),-1==indB&&pA.parent()&&1==pA.parent().children().length);)prev=sA;var matching=[];matching.push({InA:[stringA.indexOf(sA),stringA.indexOf(sA)+sA.length]});var st,en,j,indexA1,indexA2,matching_len=matching.length;for(i=0;matching_len>i;i++){for(st=matching[i].InA[0],j=0;j<valA.length;j++)if(valA[j]>st){indexA1=j;break}for(en=matching[i].InA[1],j=0;j<valA.length;j++)if(valA[j]>en){indexA2=j-1;break}var lo=indexA2-indexA1+1;for(j=0;lo>j;j++)ignoreA[coA]=indexA1,indexA1++,coA++}}};recForA(num_childsA,pA);var p=this.nodeA,num_childs=p.children().length,matchesInA={},matchesInB={},rec=function(num_childs,p){if(0!=num_childs){var x;for(x=0;num_childs>x;x++){var matching=[];sA=p.children()[x].el.outerHTML;var instances=allIndexOf(stringB,sA);if(1!=instances.length)rec(p.children()[x].children().length,p.children()[x]);else{matching.push({InA:[stringA.indexOf(sA),stringA.indexOf(sA)+sA.length],InB:[stringB.indexOf(sA),stringB.indexOf(sA)+sA.length]});var st,en,j,indexA1,indexA2,indexB1,indexB2,matching_len=matching.length;for(i=0;matching_len>i;i++){for(st=matching[i].InA[0],j=0;j<valA.length;j++)if(valA[j]>st){indexA1=j;break}for(en=matching[i].InA[1],j=0;j<valA.length;j++)if(valA[j]>en){indexA2=j-1;break}for(st=matching[i].InB[0],j=0;j<valB.length;j++)if(valB[j]>st){indexB1=j;break}for(en=matching[i].InB[1],j=0;j<valB.length;j++)if(valB[j]>en){indexB2=j-1;break}var lo=indexA2-indexA1+1;for(j=0;lo>j;j++)matchesInA[indexA1]=indexB1,matchesInB[indexB1]=indexA1,indexA1++,indexB1++}}}}};rec(num_childs,p);var splitOnRegExpA=/[^a-z0-9_ \r\n]+/gi,splitOnRegExpB=/[^a-z0-9_ \r\n]+/gi,innerResult=VWO.StringComparator.create({stringA:stringInStringInA,stringB:stringInStringInB,matchA:matchesInA,matchB:matchesInB,couA:couA,couB:couB,ignoreA:ignoreA,ignoreB:ignoreB,splitOn:/[^a-z0-9_ \r\n]+/gi}).compare();console.log(innerResult);var indexInStringInA,indexInStringInB,matchInA,matchInB,matchRatio=0,unchangedRanges=[];for(j=0;j<innerResult.diffUnion.length;j++){var innerDiff=innerResult.diffUnion[j];if(innerDiff.indexInA>=0&&(matchInA=splitOnRegExpA.exec(stringInStringInA),indexInStringInA=matchInA?valA[innerDiff.indexInA]:stringInStringInA.length-innerDiff.string.length),innerDiff.indexInB>=0&&(matchInB=splitOnRegExpB.exec(stringInStringInB),indexInStringInB=matchInB?valB[innerDiff.indexInB]:stringInStringInB.length-innerDiff.string.length),innerDiff.indexInA>=0&&innerDiff.indexInB>=0){if(!innerDiff.string.length)continue;unchangedRanges.push({rangeInA:[indexInStringInA,indexInStringInA+innerDiff.string.length],rangeInB:[indexInStringInB,indexInStringInB+innerDiff.string.length]}),innerDiff.string.length>1&&(matchRatio+=innerDiff.string.length/stringInStringInB.length)}}if(matchRatio>3/stringInStringInB.length)for(stringsLastAddedInB.shift(),j=0;j<unchangedRanges.length;j++){var rangeInA=unchangedRanges[j].rangeInA,rangeInB=unchangedRanges[j].rangeInB;if(!(rangeInA[0]<0)){startIndexInA=stringsInA.slice(0,indexInA).join(splitOn).length,startIndexInB=stringsInB.slice(0,indexInB).join(splitOn).length,startIndexInA=startIndexInA.clamp(0),startIndexInB=startIndexInB.clamp(0),console.log(rangeInA[0],rangeInB[0]);for(var pointersInString=VWO.DOMNodeStringPointer.create({haystack:unchangedRanges[j].string}).allNodePointers(),k=0,kl=pointersInString.length;kl>k;k++){var num=1;rangeInA[1]-rangeInA[0]==1&&(num=0);var pointerInStringInA=VWO.DOMNodeStringPointer.create({index:startIndexInA+rangeInA[0]+pointersInString[k].index+num,haystack:stringA}),pointerInStringInB=VWO.DOMNodeStringPointer.create({index:startIndexInB+rangeInB[0]+pointersInString[k].index+num,haystack:stringB}),mi1=pointerInStringInA.masterIndex(),mi2=pointerInStringInB.masterIndex();innerNodeMatches[mi1]=mi2;var a=pointersInString[k],b=pointerInStringInA,c=pointerInStringInB;console.log(unchangedRanges[j].string,"-->>",a.nodeName(),a.haystack.substr(a.index,5),"->",mi1,b.nodeName(),b.haystack.substr(b.index,5),"->",mi2,c.nodeName(),c.haystack.substr(c.index,5))}}}}return nodeMatches=_(nodeMatches).chain().invert().invert().value(),innerNodeMatches=_(innerNodeMatches).chain().invert().invert().value(),console.log("nodeMatchesCount:",_(nodeMatches).keys().length),console.log("nodeMatches:",nodeMatches),console.log("innerNodeMatchesCount:",_(innerNodeMatches).keys().length),console.log("innerNodeMatches:",innerNodeMatches),console.log("totalCount:",_($.extend(nodeMatches,innerNodeMatches)).keys().length),this.matches=nodeMatches,this.stringA=stringA_original,this.stringB=stringB_original,this}};var $=window.vwo_$||window.$,_=window.vwo__||window._,VWO=window.VWOInjected||window.VWO||{};VWO.DOMNodeComparator=function(params){$.extend(!0,this,params)},VWO.DOMNodeComparator.create=function(params){return new VWO.DOMNodeComparator(params)},VWO.DOMNodeComparator.prototype={nodeA:null,nodeB:null,indexScore:function(){return Number(this.nodeA.masterIndex()===this.nodeB.masterIndex())},nodeTypeScore:function(){return Number(this.nodeA.nodeType()===this.nodeB.nodeType())},innerTextScore:function(){return Number(this.nodeA.innerText()===this.nodeB.innerText())},innerHTMLScore:function(){return Number(this.nodeA.innerHTML()===this.nodeB.innerHTML())},nodeNameScore:function(){return this.nodeTypeScore()?this.nodeA.nodeType()!==Node.ELEMENT_NODE?0:Number(this.nodeA.nodeName()===this.nodeB.nodeName()):0},parentScore:function(){return this.nodeA.parent()&&this.nodeB.parent()?.5+VWO.DOMNodeComparator.create({nodeA:this.nodeA.parent(),nodeB:this.nodeB.parent()}).parentScore()/2:0},nextSiblingScore:function(){return this.nodeA.nextSibling()&&!this.nodeB.nextSibling()?0:!this.nodeA.nextSibling()&&this.nodeB.nextSibling()?0:this.nodeA.nextSibling()||this.nodeB.nextSibling()?.5+VWO.DOMNodeComparator.create({nodeA:this.nodeA.nextSibling(),nodeB:this.nodeB.nextSibling()}).nextSiblingScore()/2:1},previousSiblingScore:function(){return this.nodeA.previousSibling()&&!this.nodeB.previousSibling()?0:!this.nodeA.previousSibling()&&this.nodeB.previousSibling()?0:this.nodeA.previousSibling()||this.nodeB.previousSibling()?.5+VWO.DOMNodeComparator.create({nodeA:this.nodeA.previousSibling(),nodeB:this.nodeB.previousSibling()}).previousSiblingScore()/2:1},siblingsScore:function(){return(this.nextSiblingScore()+this.previousSiblingScore())/2},adjacentElementsScore:function(){return(this.previousSiblingScore()+this.nextSiblingScore()+this.parentScore())/3},childrenScore:function(){if(this.nodeA.children().length&&!this.nodeB.children().length)return 0;if(!this.nodeA.children().length&&this.nodeB.children().length)return 0;if(!this.nodeA.children().length&&!this.nodeB.children().length)return 1;var score=0;return this.nodeA.children().forEach(function(childInNodeA){score+=Number(Boolean(this.nodeB.children().filter(function(childInNodeB){return childInNodeB.nodeName()===childInNodeA.nodeName()})[0]))}.bind(this)),score/this.nodeA.children().length},attributeScore:function(){if(!this.nodeNameScore())return 0;var nodeA=this.nodeA,nodeB=this.nodeB,nodeAAttributeKeys=_.keys(nodeA.attributes()),nodeBAttributeKeys=_.keys(nodeB.attributes()),totalAttributes=_.union(nodeBAttributeKeys,nodeAAttributeKeys).length;if(!totalAttributes)return 1;var addedAttributes=_(this.addedAttributes()).keys().length,removedAttributes=_(this.removedAttributes()).keys().length,changedAttributes=_(this.changedAttributes()).keys().length;return(totalAttributes-addedAttributes-removedAttributes-changedAttributes)/totalAttributes||0},addedAttributes:function(){if(!this.nodeNameScore())return{};var nodeA=this.nodeA,nodeB=this.nodeB,nodeAAttributeKeys=_.keys(nodeA.attributes()),nodeBAttributeKeys=_.keys(nodeB.attributes()),addedAttributeKeys=_.difference(nodeBAttributeKeys,nodeAAttributeKeys);return _.pick.apply(_,[nodeB.attributes()].concat(addedAttributeKeys))},changedAttributes:function(){if(!this.nodeNameScore())return{};var nodeA=this.nodeA,nodeB=this.nodeB,nodeAAttributes=nodeA.attributes(),nodeBAttributes=nodeB.attributes(),nodeAAttributeKeys=_.keys(nodeAAttributes),nodeBAttributeKeys=_.keys(nodeBAttributes),commonAttributeKeys=_.intersection(nodeBAttributeKeys,nodeAAttributeKeys),changedAttributeKeys=commonAttributeKeys.filter(function(item){return nodeAAttributes[item]!==nodeBAttributes[item]});return _.pick.apply(_,[nodeBAttributes].concat(changedAttributeKeys))},removedAttributes:function(){if(!this.nodeNameScore())return{};var nodeA=this.nodeA,nodeB=this.nodeB,nodeAAttributeKeys=_.keys(nodeA.attributes()),nodeBAttributeKeys=_.keys(nodeB.attributes()),removedAttributeKeys=_.difference(nodeAAttributeKeys,nodeBAttributeKeys);return _.pick.apply(_,[nodeA.attributes()].concat(removedAttributeKeys))},styleScore:function(){if(!this.nodeNameScore())return 0;var nodeA=this.nodeA,nodeB=this.nodeB,nodeAStyleKeys=_.keys(nodeA.styles()),nodeBStyleKeys=_.keys(nodeB.styles()),totalStyles=_.union(nodeBStyleKeys,nodeAStyleKeys).length;if(!totalStyles)return 1;var addedStyles=_(this.addedStyles()).keys().length,removedStyles=_(this.removedStyles()).keys().length,changedStyles=_(this.changedStyles()).keys().length;return(totalStyles-addedStyles-removedStyles-changedStyles)/totalStyles||0},addedStyles:function(){if(!this.nodeNameScore())return{};var nodeA=this.nodeA,nodeB=this.nodeB,nodeAStyleKeys=_.keys(nodeA.styles()),nodeBStyleKeys=_.keys(nodeB.styles()),addedStyleKeys=_.difference(nodeBStyleKeys,nodeAStyleKeys);return _.pick.apply(_,[nodeB.styles()].concat(addedStyleKeys))},changedStyles:function(){if(!this.nodeNameScore())return{};var nodeA=this.nodeA,nodeB=this.nodeB,nodeAStyles=nodeA.styles(),nodeBStyles=nodeB.styles(),nodeAStyleKeys=_.keys(nodeAStyles),nodeBStyleKeys=_.keys(nodeBStyles),commonStyleKeys=_.intersection(nodeBStyleKeys,nodeAStyleKeys),changedStyleKeys=commonStyleKeys.filter(function(item){return nodeAStyles[item]!==nodeBStyles[item]});return _.pick.apply(_,[nodeBStyles].concat(changedStyleKeys))},removedStyles:function(){if(!this.nodeNameScore())return{};var nodeA=this.nodeA,nodeB=this.nodeB,nodeAStyleKeys=_.keys(nodeA.styles()),nodeBStyleKeys=_.keys(nodeB.styles()),removedStyleKeys=_.difference(nodeAStyleKeys,nodeBStyleKeys);return _.pick.apply(_,[nodeA.styles()].concat(removedStyleKeys))},newInnerText:function(){return!this.nodeTypeScore()||this.nodeA.nodeType()===Node.ELEMENT_NODE||this.innerTextScore()?null:this.nodeB.innerText()},finalScore:function(){var nodeA=this.nodeA,nodeB=this.nodeB;if(!nodeA||!nodeB)return 0;var indexScore=this.indexScore(),nodeTypeScore=this.nodeTypeScore(),nodeNameScore=this.nodeNameScore(),attributeScore=this.attributeScore(),styleScore=this.styleScore(),innerHTMLScore=this.innerHTMLScore(),innerTextScore=this.innerTextScore();return nodeTypeScore&&nodeA.nodeType()===Node.TEXT_NODE?innerTextScore?1:indexScore?.9:0:nodeNameScore?"INPUT"===nodeA.nodeName().toUpperCase()&&nodeA.attributes().type!==nodeB.attributes().type?0:innerHTMLScore?(8+indexScore+(2*attributeScore+styleScore)/3)/10:(indexScore+8*innerHTMLScore+(2*attributeScore+styleScore)/3)/10:0},difference:function(){return{addedAttributes:this.addedAttributes(),removedAttributes:this.removedAttributes(),changedAttributes:this.changedAttributes(),addedStyles:this.addedStyles(),removedStyles:this.removedStyles(),changedStyles:this.changedStyles(),newInnerText:this.newInnerText()}}};var $=window.vwo_$||window.$,_=window.vwo__||window._,VWO=window.VWOInjected||window.VWO||{};VWO.DOMNodeStringPointer=function(params){$.extend(!0,this,params)},VWO.DOMNodeStringPointer.create=function(params){return new VWO.DOMNodeStringPointer(params)},VWO.DOMNodeStringPointer.prototype={haystack:"",index:0,_pointerWithIndex:function(i){return VWO.DOMNodeStringPointer.create({haystack:this.haystack,index:i})},allNodePointers:function(){var pointers=[],pointer=this._pointerWithIndex(0);for(pointers.push(pointer);pointer=pointer.nextPointer();)pointers.push(pointer);return pointers},nodeType:function(){var i=this.index,haystack=this.haystack;return haystack.lastIndexOf("<!--",i)>haystack.lastIndexOf("-->",i)||"-->"===haystack.substr(i,3)?Node.COMMENT_NODE:haystack.lastIndexOf("<![CDATA[",i)>haystack.lastIndexOf("]]>",i)||"]]>"===haystack.substr(i,3)?Node.CDATA_SECTION_NODE:haystack.lastIndexOf("<",i)>haystack.lastIndexOf(">",i)||">"===haystack.charAt(i)?Node.ELEMENT_NODE:Node.TEXT_NODE},nodeName:function(){var i=this.index,haystack=this.haystack,nodeType=this.nodeType();if(nodeType===Node.ELEMENT_NODE){var j=haystack.lastIndexOf("<",i)+1,k=haystack.indexOf(" ",j),l=haystack.indexOf(">",j),nodeName=haystack.substring(j,Math.min(-1===k?l:k,-1===l?k:l));return"/"===nodeName.charAt(0)&&(nodeName=nodeName.substr(1)),"DIV"===$("<div/>").get(0).nodeName&&(nodeName=nodeName.toUpperCase()),nodeName}return nodeType},pointsToClosingTag:function(){if(this.nodeType()!==Node.ELEMENT_NODE)return!1;var j=this.haystack.lastIndexOf("<",this.index);return"/"===this.haystack.charAt(j+1)},pointsToEmptyTag:function(){var emptyTags=/area|base|br|col|hr|img|input|link|meta|param/i;return emptyTags.test(this.nodeName())},previousPointer:function(){var j,pointer,i=this.index,haystack=this.haystack,nodeType=this.nodeType();return nodeType===Node.TEXT_NODE?(j=haystack.lastIndexOf(">",i),pointer=this._pointerWithIndex(j)):nodeType===Node.COMMENT_NODE?(j=haystack.lastIndexOf("<!--",i),pointer=this._pointerWithIndex(j-1)):nodeType===Node.CDATA_SECTION_NODE?(j=haystack.lastIndexOf("<![CDATA[",i),pointer=this._pointerWithIndex(j-1)):(j=haystack.lastIndexOf("<",i),pointer=this._pointerWithIndex(j-1)),pointer.index<0||pointer.index>=haystack.length?null:pointer},previousSiblingPointer:function(){var j,pointer,i=this.index,haystack=this.haystack,nodeType=this.nodeType(),nodeName=this.nodeName();if(nodeType===Node.TEXT_NODE)j=haystack.lastIndexOf(">",i),pointer=this._pointerWithIndex(j);else if(nodeType===Node.COMMENT_NODE)j=haystack.lastIndexOf("<!--",i),pointer=this._pointerWithIndex(j-1);else if(nodeType===Node.CDATA_SECTION_NODE)j=haystack.lastIndexOf("<![CDATA[",i),pointer=this._pointerWithIndex(j-1);else if(j=haystack.lastIndexOf("<",i),this.pointsToClosingTag()){for(var k=j+1,closingTags=[],l=0;closingTags&&(k=haystack.toLowerCase().lastIndexOf("<"+nodeName.toLowerCase(),k-1),closingTags=haystack.substring(k,j).match(new RegExp("<\\/"+nodeName,"gi")),!closingTags||l++!=closingTags.length););pointer=this._pointerWithIndex(k-1)}else pointer=this._pointerWithIndex(j-1);
return pointer.index<0?null:pointer.nodeType()!==Node.ELEMENT_NODE||pointer.pointsToEmptyTag()||"/"===haystack.charAt(haystack.lastIndexOf("<",pointer.index)+1)?pointer:null},nextPointer:function(){var j,pointer,i=this.index,haystack=this.haystack,nodeType=this.nodeType();if(nodeType===Node.TEXT_NODE)j=haystack.indexOf("<",i),pointer=this._pointerWithIndex(j);else if(nodeType===Node.COMMENT_NODE){if(j=haystack.indexOf("-->",i),-1===j)return null;pointer=this._pointerWithIndex(j+3)}else if(nodeType===Node.CDATA_SECTION_NODE){if(j=haystack.indexOf("]]>",i),-1===j)return null;pointer=this._pointerWithIndex(j+3)}else{if(j=haystack.indexOf(">",i),-1===j)return null;pointer=this._pointerWithIndex(j+1)}return pointer.index<0||pointer.index>=haystack.length?null:pointer},nextSiblingPointer:function(){var j,pointer,i=this.index,haystack=this.haystack,nodeType=this.nodeType(),nodeName=this.nodeName();if(nodeType===Node.TEXT_NODE)j=haystack.indexOf("<",i),pointer=this._pointerWithIndex(j);else if(nodeType===Node.COMMENT_NODE){if(j=haystack.indexOf("-->",i),-1===j)return null;pointer=this._pointerWithIndex(j+3)}else if(nodeType===Node.CDATA_SECTION_NODE){if(j=haystack.indexOf("]]>",i),-1===j)return null;pointer=this._pointerWithIndex(j+3)}else{if(j=haystack.indexOf(">",i),-1===j)return null;if(this.pointsToClosingTag())pointer=this._pointerWithIndex(j+1);else{for(var k=j-1,openingTags=[],l=0;openingTags&&(k=haystack.toLowerCase().indexOf("</"+nodeName.toLowerCase(),k+1),k=haystack.indexOf(">",k),openingTags=haystack.substring(j,k).match(new RegExp("<"+nodeName,"gi")),!openingTags||l++!=openingTags.length););pointer=this._pointerWithIndex(k+1)}}return pointer.index<0||pointer.index>=haystack.length?null:pointer.nodeType()!==Node.ELEMENT_NODE||!pointer.pointsToEmptyTag()&&"/"!==haystack.charAt(haystack.indexOf("<",pointer.index)+1)?pointer:null},parentPointer:function(){var j,i=this.index,haystack=this.haystack,nodeType=this.nodeType(),nodeName=this.nodeName(),prev=this.previousSiblingPointer();if(prev)return prev.parentPointer();var pointer;if(nodeType===Node.TEXT_NODE)j=haystack.lastIndexOf(">",i),pointer=this._pointerWithIndex(j);else if(nodeType===Node.COMMENT_NODE)j=haystack.lastIndexOf("<!--",i),pointer=this._pointerWithIndex(j-1);else if(nodeType===Node.CDATA_SECTION_NODE)j=haystack.lastIndexOf("<![CDATA[",i),pointer=this._pointerWithIndex(j-1);else{j=haystack.lastIndexOf("<",i),pointer=this._pointerWithIndex(j-1);var isClosingTag="/"===haystack.charAt(j+1);if(isClosingTag){for(var k=j+1,closingTags=[],l=0;closingTags&&(k=haystack.toLowerCase().lastIndexOf("<"+nodeName.toLowerCase(),k-1),closingTags=haystack.substring(k,j).match(new RegExp("<\\/"+nodeName,"gi")),!closingTags||l++!=closingTags.length););pointer=this._pointerWithIndex(k-1)}else pointer=this._pointerWithIndex(j-1)}return pointer.index<0||pointer.index>=haystack.length?null:"/"===haystack.charAt(haystack.lastIndexOf("<",pointer.index)+1)?null:pointer},masterIndex:function(){for(var i=0,prev=this;prev=prev.previousSiblingPointer();)i++;var parent=this.parentPointer();return parent?parent.masterIndex()+":"+i:i.toString()}};var $=window.vwo_$||window.$,_=window.vwo__||window._,VWO=window.VWOInjected||window.VWO||{};VWO.DOMNodePool={content:[],create:function(params){return this.content.filter(function(domNode){return domNode.el===params.el})[0]||VWO.DOMNode.create(params)},uncacheAll:function(){this.content.forEach(function(domNode){domNode.uncache()})},cacheAll:function(){this.content.forEach(function(domNode){domNode.cache()})},pushObject:function(obj){return this.content.push(obj)},clear:function(){this.content=[]}},VWO.DOMNode=function(params){$.extend(!0,this,params),VWO.DOMNodePool.pushObject(this),this.cache()},VWO.DOMNode.create=function(params){return new VWO.DOMNode(params)},VWO.DOMNode.prototype={ignoreWhitespace:!0,ignoreComments:!0,cache:function(){var fn=["index","parent","previousSibling","previousElementSibling","nextSibling","nextElementSibling","adjacentElementNode","vwoMarker","nodeType","nodeName","innerText","innerHTML","outerHTML","attributes","styles","children","ancestors","descendants","masterIndex","selectorPath"];for(var i in fn)fn.hasOwnProperty(i)&&(this[fn[i]]=this[fn[i]].cache())},uncache:function(){var fn=["index","parent","previousSibling","previousElementSibling","nextSibling","nextElementSibling","adjacentElementNode","vwoMarker","nodeType","nodeName","innerText","innerHTML","outerHTML","attributes","styles","children","ancestors","descendants","masterIndex","selectorPath"];for(var i in fn)fn.hasOwnProperty(i)&&"function"==typeof this[fn[i]].uncache&&(this[fn[i]]=this[fn[i]].uncache())},index:function(){return this.parent()?this.parent().children().indexOf(this):0},parent:function(){return this.$().parent().length?VWO.DOMNodePool.create({el:this.$().parent().get(0)}):null},previousElementSibling:function(){return this.$().prev().get(0)?VWO.DOMNodePool.create({el:this.$().prev().get(0)}):null},previousSibling:function(){if(!this.el.previousSibling)return null;var previousSibling=VWO.DOMNodePool.create({el:this.el.previousSibling});return this.ignoreWhitespace&&this.el.previousSibling instanceof Text&&!this.el.previousSibling.textContent.trim()?previousSibling.previousSibling():this.ignoreComments&&this.el.previousSibling instanceof Comment?previousSibling.previousSibling():previousSibling},nextElementSibling:function(){return this.$().next().get(0)?VWO.DOMNodePool.create({el:this.$().next().get(0)}):null},nextSibling:function(){if(!this.el.nextSibling)return null;var nextSibling=VWO.DOMNodePool.create({el:this.el.nextSibling});return this.ignoreWhitespace&&this.el.nextSibling instanceof Text&&!this.el.nextSibling.textContent.trim()?nextSibling.nextSibling():this.ignoreComments&&this.el.nextSibling instanceof Comment?nextSibling.nextSibling():nextSibling},proximity:0,relationship:null,adjacentElementNode:function(){var $adjacent=this.$().adjacent();if(!$adjacent)return null;var adjacentNode=VWO.DOMNodePool.create({el:$adjacent.get(0)});return adjacentNode.relationship=$adjacent.relationship,adjacentNode.proximity=$adjacent.proximity,adjacentNode},el:null,vwoMarker:function(){return VWO.ElementMarkerStore.getMarkerForElement(this.el)},nodeType:function(){return this.el.nodeType},nodeName:function(){return this.el.nodeName},innerText:function(){var el=this.el;return el.innerText||el.textContent},innerHTML:function(){var el=this.el;return el.innerHTML||el.textContent},outerHTML:function(){var el=this.el;return el.outerHTML||$("<div></div>").append($(el).clone(!0)).html()},attributes:function(){if(this.nodeType()!==Node.ELEMENT_NODE)return{};for(var el=this.el,attributes={},i=0;i<el.attributes.length;i++){var attr=el.attributes[i];"style"!==attr.name&&(attributes[attr.name]=attr.value)}return attributes},styles:function(){if(this.nodeType()!==Node.ELEMENT_NODE)return{};for(var el=this.el,stylesHash={},i=0;i<el.attributes.length;i++){var attr=el.attributes[i];if("style"===attr.name)for(var styles=attr.value.trim().split(";"),j=0;j<styles.length;j++){var style=styles[j].trim();style&&(style=style.split(":"),stylesHash[style[0].trim()]=style[1].trim())}}return stylesHash},children:function(){for(var el=this.el,children=[],node=el.firstChild;node;node=node.nextSibling)this.ignoreWhitespace&&node instanceof Text&&!node.textContent.trim()||this.ignoreComments&&node instanceof Comment||children.push(VWO.DOMNodePool.create({el:node,ignoreWhitespace:this.ignoreWhitespace,ignoreComments:this.ignoreComments}));return this._children=children},ancestors:function(){return this.parent()?[this.parent()].concat(this.parent().ancestors()):[]},descendants:function(){var descendants={},masterIndex=this.masterIndex(),children=this.children();descendants[masterIndex]=this;for(var i=0,l=children&&children.length;l>i;i++)$.extend(descendants,children[i].descendants());return descendants},masterIndex:function(){var parent=this.parent(),parentMasterIndex=parent&&parent.masterIndex();return null===parentMasterIndex||void 0===parentMasterIndex?this.index().toString():parentMasterIndex+":"+this.index().toString()},selectorPath:function(){return $(this.el).selectorPath()},copy:function(){return VWO.DOMNode.create({el:$(this.el).clone().get(0)})},$:function(selector,target){return arguments.length?(target=target||this.el,$(selector,target)):$(this.el)},addChild:function(node){return this.addChildAt(node,this.children().length)},removeChild:function(node){var index=this.children().indexOf(node);if(0>index)throw new Error("removeChild: node is not a child of this node.");return this.removeChildAt(index)},addChildAt:function(node,index){if(node.ignoreWhitespace=this.ignoreWhitespace,node.ignoreComments=this.ignoreComments,0>index||index>this.children().length)throw new RangeError("addChildAt: index is out of bounds.");var nextSibling=this.children()[index];return nextSibling?nextSibling.$().before(node.$()):this.$().append(node.$()),VWO.DOMNodePool.uncacheAll(),VWO.DOMNodePool.cacheAll(),node},removeChildAt:function(index){var node=this.children()[index];if(!node)throw new RangeError("removeChildAt: index is out of bounds.");return node.$().remove(),VWO.DOMNodePool.uncacheAll(),VWO.DOMNodePool.cacheAll(),node},swapChildren:function(nodeA,nodeB){var indexA=this.children().indexOf(nodeA),indexB=this.children().indexOf(nodeB);if(0>indexA||indexA>this.children().length)throw new Error("swapChildren: nodeA is not a child of this node.");if(0>indexB||indexB>this.children().length)throw new Error("swapChildren: nodeB is not a child of this node.");this.swapChildrenAt(indexA,indexB)},swapChildrenAt:function(indexA,indexB){var nodeA=this.children()[indexA],nodeB=this.children()[indexB];if(!nodeA)throw new RangeError("swapChildrenAt: indexA is out of bounds.");if(!nodeB)throw new RangeError("swapChildrenAt: indexB is out of bounds.");var children=this.children();children[indexB]=nodeA,children[indexA]=nodeB;var elA=nodeA.el,elB=nodeB.el,elASibling=elA.nextSibling===elB?elA:elA.nextSibling;elB.parentNode.insertBefore(elA,elB),elA.parentNode.insertBefore(elB,elASibling)},equals:function(domNode){if(domNode.nodeName()!==this.nodeName()||!_(domNode.attributes()).isEqual(this.attributes()))return!1;for(var i=0,il=this.children().length;il>i;i++){if(!domNode.children()[i])return!1;if(!domNode.children()[i].equals(this.children()[i]))return!1}return!0},isWhitespace:function(){return this.isText()&&!this.innerText().trim()},isComment:function(){return this.nodeType()===Node.COMMENT_NODE},isText:function(){return this.nodeType()===Node.TEXT_NODE},matchedWith:null,matchScore:null,matchDifference:null,isInserted:!1};var $=window.vwo_$||window.$,_=window.vwo__||window._,VWO=window.VWOInjected||window.VWO||{};VWO.StringComparator=function(params){$.extend(!0,this,params)},VWO.StringComparator.create=function(params){return new VWO.StringComparator(params)},VWO.StringComparisonResult=function(string,indexInA,indexInB){this.indexInA=indexInA,this.indexInB=indexInB,this.string=string},VWO.StringComparator.prototype={stringA:null,stringB:null,splitOn:null,stringsInA:[],stringsInB:[],stringsAddedInB:[],stringsDeletedFromA:[],stringsUnchanged:[],diffUnion:[],compare:function(){this.stringsInA=[],this.stringsInB=[],this.stringsAddedInB=[],this.stringsDeletedFromA=[],this.stringsUnchanged=[],this.diffUnion=[];var indexInA,countOfStringsInA,indexInB,countOfStringsInB,match={from:null,to:null,next:null,prev:null},stringA=this.stringA,stringB=this.stringB,matchesInA1={},matchesInB1={},matchesInA2=this.matchA,matchesInB2=this.matchB,stringsInA=stringA.split(this.splitOn),stringsInB=stringB.split(this.splitOn);this.stringsInA=stringsInA,this.stringsInB=stringsInB;var ignoreA=this.ignoreA,ignoreB=this.ignoreB;for(indexInA=0,countOfStringsInA=stringsInA.length;countOfStringsInA>indexInA;indexInA++)if(matchesInA2[indexInA])match.from=indexInA,match.to=matchesInA2[indexInA],match.next={},match.next.prev=match,match=match.next;else if(-1==ignoreA.indexOf(indexInA))for(indexInB=0,countOfStringsInB=stringsInB.length;countOfStringsInB>indexInB;indexInB++)if(stringsInA[indexInA]===stringsInB[indexInB]){if("number"==typeof matchesInB1[indexInB]||"number"==typeof matchesInB2[indexInB])continue;if(-1!=ignoreB.indexOf(indexInB))continue;var prevMatch=match.prev;if(prevMatch&&prevMatch.to>indexInB)continue;match.from=indexInA,match.to=indexInB,match.next={},match.next.prev=match,match=match.next,matchesInA1[indexInA]=indexInB,matchesInB1[indexInB]=indexInA;break}var i,j,matchesInA={},matchesInB={};for(i=0,lA=this.couA;lA+1>i;i++)"number"==typeof matchesInA1[i]&&(matchesInA[i]=matchesInA1[i]),"number"==typeof matchesInA2[i]&&(matchesInA[i]=matchesInA2[i]);for(j=0,lB=this.couB;lB+1>j;j++)"number"==typeof matchesInB1[j]&&(matchesInB[j]=matchesInB1[j]),"number"==typeof matchesInB2[j]&&(matchesInB[j]=matchesInB2[j]);var lastMatchIndexInB=-1;for(indexInA=0,countOfStringsInA=stringsInA.length;countOfStringsInA>indexInA;indexInA++){for(indexInB=lastMatchIndexInB+1,countOfStringsInB=stringsInB.length;"undefined"==typeof matchesInB[indexInB]&&countOfStringsInB>indexInB;indexInB++)this.stringsAddedInB.push(new VWO.StringComparisonResult(stringsInB[indexInB],-1,indexInB)),this.diffUnion.push(this.stringsAddedInB[this.stringsAddedInB.length-1]),lastMatchIndexInB=indexInB;"number"==typeof matchesInA[indexInA]?(this.stringsUnchanged.push(new VWO.StringComparisonResult(stringsInA[indexInA],indexInA,matchesInA[indexInA])),this.diffUnion.push(this.stringsUnchanged[this.stringsUnchanged.length-1]),lastMatchIndexInB=matchesInA[indexInA]):"undefined"==typeof matchesInA[indexInA]&&(this.stringsDeletedFromA.push(new VWO.StringComparisonResult(stringsInA[indexInA],indexInA,-1)),this.diffUnion.push(this.stringsDeletedFromA[this.stringsDeletedFromA.length-1]))}return this}};var VWO=window.VWOInjected||window.VWO||{},jQuery_fn=jQuery.fn;Function.prototype.cache=function(){var cachedValue,callee=this,fn=function(){return void 0!==cachedValue?cachedValue:cachedValue=callee.apply(this,Array.prototype.slice.call(arguments))};return fn.uncache=function(){return callee},fn},String.prototype.trim=function(){return this.rtrim().ltrim()},String.prototype.ltrim=function(){return this.replace(/^[ \r\n]*/,"")},String.prototype.rtrim=function(){return this.replace(/[ \n\r]*$/,"")},String.prototype.nthIndexOf=function(needle,index){for(var pos=this.indexOf(needle,0);index-->0&&-1!==pos;)pos=this.indexOf(needle,pos+1);return pos};var STR_PAD_LEFT=1,STR_PAD_RIGHT=2,STR_PAD_BOTH=3;String.prototype.lpad=function(len,pad){return this.pad(len,pad,STR_PAD_LEFT)},String.prototype.rpad=function(len,pad){return this.pad(len,pad,STR_PAD_RIGHT)},String.prototype.pad=function pad(len,pad,dir){var str=this;if("undefined"==typeof len&&(len=0),"undefined"==typeof pad&&(pad=" "),"undefined"==typeof dir&&(dir=STR_PAD_RIGHT),len+1>=str.length)switch(dir){case STR_PAD_LEFT:str=new Array(len+1-str.length).join(pad)+str;break;case STR_PAD_BOTH:var padlen=len-str.length,right=Math.ceil(padlen/2),left=padlen-right;str=new Array(left+1).join(pad)+str+new Array(right+1).join(pad);break;default:str+=new Array(len+1-str.length).join(pad)}return str},Number.prototype.clamp=function(min,max){return"number"!=typeof min&&(min=-1/0),"number"!=typeof max&&(max=1/0),Math.max(min,Math.min(max,this))},Number.prototype.isWithinRange=function(min,max){return this>min&&max>this},jQuery_fn.nodeName=function(){var USE_LOWERCASE=!1,el=this.get(0);return el?USE_LOWERCASE?el.nodeName&&el.nodeName.toLowerCase():el.nodeName&&el.nodeName.toUpperCase():null},jQuery_fn.selectorPath=function(){if(!this.length)return"";if(this.nodeName().match(/^(body|head)$/i))return this.nodeName();if(this.get(0).nodeType!==Node.ELEMENT_NODE)return"";var currentPath=this.nodeName();if(currentPath.match(/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/)[0]!==currentPath&&(currentPath="*"),this.attr("id")){var id=this.attr("id");"string"!=typeof id&&(id=this.get(0).getAttribute(id)),"string"==typeof id&&$(currentPath+"#"+id).length<=1&&(id=id.replace(/(:|\.)/g,"\\$1"),currentPath+="#"+id)}return this.prev().length?this.prev().selectorPath()+" + "+currentPath:this.parent().length?this.parent().selectorPath()+" > "+currentPath+":first-child":currentPath},jQuery_fn.existsInDOM=function(){return this.parents("html").length>0},jQuery_fn.isAncestorOf=function(el){return $(el).parents().is(this)},jQuery_fn.isDescendantOf=function(el){return $(el).isAncestorOf(this)},jQuery_fn.outerHTML=function(){var content,$t=$(this);return $t[0]&&"outerHTML"in $t[0]?(content="",$t.each(function(){content+=this.outerHTML}),content):(content=$t.wrap("<div></div>").parent().html(),$t.unwrap(),content)}}({},function(){return this}());
//# sourceMappingURL=dom-comparator.min.js.map