UNPKG

universal-diff

Version:

universal diff & merge algorithm realized with Javascript (between arbitrary scequences)

96 lines (82 loc) 10.9 kB
<!DOCTYPE html> <html> <head> <title></title> <style type="text/css"> textarea{ height: 400px; width: 40%; } </style> </head> <body> <textarea id="in1"> if(i===0){for(e in t.par){t.pars.push([e,t.par[e]].join("="))}}else{for(e=0;e<i;e++){r=t.filter[e];t.pars.push([r,t.par[r]].join("="))}}t.pars=t.pars.join("&");window.jsQa=new Image(1,1);jsQa.src=t.url+t.pars;t.cookieSet(t.flag,t.hash(t.pars),0,"/",lib.SITE_DOMAIN);t.callback()}catch(o){return""}}};(function(){var t=new lib.action.Qa;try{t.init({url:window.location.protocol+"//msg.iqiyi.com/jpb.gif"})}catch(e){}})();(function(){var t=new lib.action.Qa;var e=t.cookieGet("QC001")=="1";var i=t.cookieGet("QC005");var r;if(e||!i||window.location.protocol=="https:"||lib.SITE_DOMAIN.match(/pps/)){return}t.cookieSet("QC001","1",24,"/",lib.SITE_DOMAIN);var o="324";var n={qiyi_cookie:i};var a={sid:i,p:"iqiyi"};var s="http://nsclick.baidu.com/v.gif",c=[],h="BD_QIYI_LOG_"+(new Date).getTime(),f=window[h]=new Image;c.push("pid="+o);for(r in n){c.push(r+"="+encodeURIComponent(n[r]))}f.src=s+"?"+c.join("&")+"&t="+(new Date).getTime();var u="http://cpro.baidu.com/cpro/ui/html/sync.htm",l=[],d="BD_QIYI_LOG_"+(new Date).getTime(),p=window[d]=new Image;for(r in a){l.push(r+"="+encodeURIComponent(a[r]))}p.src=u+"?"+l.join("&")+"&t="+(new Date).getTime()})();(function(){var t=function(){var t=2;var e=window.location.hostname.split(".");e=e.slice(e.length-t);return e.join(".")}();var e=t.match(/pps/);var i="http://msg.iqiyi.com/b?t=20&p=10&p1=101"+("&pf="+(e?"20":"")+"1");var r=function(t,e){t=t||{};if(e.indexOf("?")==-1){e+="?"}else{e+="&"}var i=+new Date;t._=i;for(var r in t){if(t.hasOwnProperty(r)){e+=encodeURIComponent(r)+"="+encodeURIComponent(t[r])+"&"}}if(e[e.length-1]==="&"){e=e.slice(0,-1)}var n=new Image;n.src=e};function n(){var t=[];var e="block-";var i,r,n,o;var a="A".charCodeAt();var s=function(t){return document.getElementById(t)};var c=String.fromCharCode;var u;for(u=0;u<26;u++){i=c(a+u);n=e+i;o=s(n);if(o){o["__bid__"]=i;t.push(o)}}for(u=0;u<26;u++){r=c(a+u);var h=false;for(var f=0;f<26;f++){i=c(a+f);n=e+r+i;o=s(n);if(o){h=true;o["__bid__"]=r+i;t.push(o)}}if(!h){break}}return t}function o(){var t=[];var e="block-";var i=document.getElementsByTagName("qchunk"),r,n;for(var o=0,a=i.length;o<a;o++){r=i[o];n=r.id||"";if(n.substr(0,e.length).toLowerCase()==e){r["__bid__"]=n.substr(e.length);t.push(r)}}return t}var a=function(t){t=t||window.event;var e=t.target||t.srcElement;var n=document.documentElement&&document.documentElement.scrollTop||document.body.scrollTop;var o=document.documentElement&&document.documentElement.scrollLeft||document.body.scrollLeft;var a=document.documentElement&&document.documentElement.scrollWidth||document.body.scrollWidth;var s=document.documentElement&&document.documentElement.scrollHeight||document.body.scrollHeight;var c=document.documentElement&&document.documentElement.clientHeight||document.body.clientHeight;var u=document.documentElement&&document.documentElement.clientWidth||document.body.clientWidth;var h=Math.max(s,c);var f=Math.max(a,u);var l=this["__bid__"]||"";var d=g(this.getAttribute("data-pb"),"&");var p,m,v;do{p=e;m=p.getAttribute("rseat");v=p.tagName.toUpperCase();e=e.parentNode;if(p==this){break}}while(!m&&v!=="A"&&v!=="IMG");var _=g(p.getAttribute("data-pb"),"&");var b,I,y;if(m){_.rseat=m}if(v==="A"){b=p.title||"";I="a";y=p.getAttribute("href")||""}else if(v==="IMG"){b=p.alt||"";I="i";y=""}else{b=p.title||"";I="e";y=""}var k,C,E;E=g(document.cookie,";");k=E["P00003"]||"";C=E["QC005"]||E["QC006"]||"";var M={block:l,rt:I,r:b,rlink:y,pu:decodeURIComponent(k),u:decodeURIComponent(C),re:f+"*"+h,clkx:t.clientX+o,clky:t.clientY+n};r(w(M,d,_),i)};var s=n();var c=o();var u,h;for(var f=0,l=s.length;f<l;f++){if(c.indexOf(s[f])==-1){c.push(s[f])}}if(c.length===0){u=document.getElementsByTagName("body")[0];h=a.bind(u);if(u.addEventListener){u.addEventListener("mousedown",h,false)}else{u.attachEvent("onmousedown",h)}}else{for(var d=0,p=c.length;d<p;d++){var m=c[d];var v=a.bind(m);if(m.addEventListener){m.addEventListener("mousedown",v,false)}else{m.attachEvent("onmousedown",v)}}}function g(t,e){var i={};e=e||"&";if(t){var r=t.split(e),n;for(var o=0,a=r.length;o<a;o++){n=r[o];if(n){n=n.split(/\s*=\s*/g);if(n[0]){i[n[0].replace(/^\s*|\s*$/g,"")]=n[1]||""}}}}return i}function w(t,e){var i=t||{};var r;for(var n=1,o=arguments.length;n<o;n++){r=arguments[n];if(r){for(var a in r){if(r.hasOwnProperty(a)){i[a]=r[a]}}}}return i}})(); </textarea> <textarea id="in2"> if(i===0){for(e in t.par){t.pars.push([e,t.par[e]].join("="))}}else{for(e=0;e<i;e++){r=t.filter[e];t.pars.push([r,t.par[r]].join("="))}}t.pars=t.pars.join("&");window.jsQa=new Image(1,1);jsQa.src=t.url+t.pars;t.cookieSet(t.flag,t.hash(t.pars),0,"/",lib.SITE_DOMAIN);t.callback()}catch(o){return""}}};(function(){var t=new lib.action.Qa;try{t.init({url:window.location.protocol+"//msg.iqiyi.com/jpb.gif"})}catch(e){}})();(function(){var t=new lib.action.Qa;var e=t.cookieGet("QC001")=="1";var i=t.cookieGet("QC005");var r;if(e||!i||window.location.protocol=="https:"||lib.SITE_DOMAIN.match(/pps/)){return}t.cookieSet("QC001","1",2xxx4,"/",lib.SITE_DOMAIN);var o="324";var n={qiyi_cookie:i};var a={sid:i,p:"iqiyi"};var s="http://nsclick.baidu.com/v.gif",c=[],h="BD_QIYI_LOG_"+(new Date).getTime(),f=window[h]=new Image;c.push("pid="+o);for(r in n){c.push(r+"="+encodeURIComponent(n[r]))}f.src=s+"?"+c.join("&")+"&t="+(new Date).getTime();var u="http://cpro.baidu.com/cpro/ui/html/sync.htm",l=[],d="BD_QIYI_LOG_"+(new Date).getTime(),p=window[d]=new Image;for(r in a){l.push(r+"="+encodeURIComponent(a[r]))}p.src=u+"?"+l.join("&")+"&t="+(new Date).getTime()})();(function(){var t=function(){var t=2;var e=window.location.hostname.split(".");e=e.slice(e.length-t);return e.join(".")}();var e=t.match(/pps/);var i="http://msg.iqiyi.com/b?t=20&p=10&p1=101"+("&pf="+(e?"20":"")+"1");var r=function(t,e){t=t||{};if(e.indexOf("?")==-1){e+="?"}else{e+="&"}var i=+new Date;t._=i;for(var r in t){if(t.hasOwnProperty(r)){e+=encodeURIComponent(r)+"="+encodeURIComponent(t[r])+"&"}}if(e[e.length-1]==="&"){e=e.slice(0,-1)}var n=new Image;n.src=e};function n(){var t=[];var e="block-";var i,r,n,o;var a="A".charCodeAt();var s=function(t){return document.getElementById(t)};var c=String.fromCharCode;var u;for(u=0;u<26;u++){i=c(a+u);n=e+i;o=s(n);if(o){o["__bid__"]=i;t.push(o)}}for(u=0;u<26;u++){r=c(a+u);var h=false;for(var f=0;f<26;f++){i=c(a+f);n=e+r+i;o=s(n);if(o){h=true;o["__bid__"]=r+i;t.push(o)}}if(!h){break}}return t}function o(){var t=[];var e="block-";var i=document.getElementsByTagName("qchunk"),r,n;for(var o=0,a=i.length;o<a;o++){r=i[o];n=r.id||"";if(n.substr(0,e.length).toLowerCase()==e){r["__bid__"]=n.substr(exxx.length);t.push(r)}}return t}var a=function(t){t=t||window.event;var e=t.target||t.srcElement;var n=document.documentElement&&document.documentElement.scrollTop||document.body.scrollTop;var o=document.documentElement&&document.documentElement.scrollLeft||document.body.scrollLeft;var a=document.documentElement&&document.documentElement.scrollWidth||document.body.scrollWidth;var s=document.documentElement&&document.documentElement.scrollHeight||document.body.scrollHeight;var c=document.documentElement&&document.documentElement.clientHeight||document.body.clientHeight;var u=document.documentElement&&document.documentElement.clientWidth||document.body.clientWidth;var h=Math.max(s,c);var f=Math.max(a,u);var l=this["__bid__"]||"";var d=g(this.getAttribute("data-pb"),"&");var pxxx,m,v;do{p=e;m=p.getAttribute("rseat");v=p.tagName.toUpperCase();e=e.parentNode;if(p==this){break}}while(!m&&v!=="A"&&v!=="IMG");var _=g(p.getAttribute("data-pb"),"&");var b,I,y;if(m){_.rseat=m}if(v==="A"){b=p.title||"";I="a";y=p.getAttribute("href")||""}else if(v==="IMG"){b=p.alt||"";I="i";y=""}else{b=p.title||"";I="e";y=""}var k,C,E;E=g(document.cookie,";");k=E["P00003"]||"";C=E["QC005"]||E["QC006"]||"";var M={block:l,rt:I,r:b,rlink:y,pu:decodeURIComponent(k),u:decodeURIComponent(C),re:f+"*"+h,clkx:t.clientX+o,clky:t.clientY+n};r(w(M,d,_),i)};var s=n();var c=o();var u,h;for(var f=0,l=s.length;f<l;f++){if(c.indexOf(s[f])==-1){c.push(s[f])}}if(c.length===0){u=document.getElementsByTagName("boxxxdy")[0];h=a.bind(u);if(u.addEventListener){u.addEventListener("mousedown",h,false)}else{u.attachEvent("onmousedown",h)}}else{for(var d=0,p=c.length;d<p;d++){var m=c[d];var v=a.bind(m);if(m.addEventListener){m.addEventListener("mousedown",v,false)}else{m.attachEvent("onmousedown",v)}}}function g(t,e){var i={};e=e||"&";if(t){var r=t.split(e),n;for(var o=0,a=r.length;o<a;o++){n=r[o];if(n){n=n.split(/\s*=\s*/g);if(n[0]){i[n[0].replace(/^\s*|\s*$/g,"")]=n[1]||""}}}}return i}function w(t,e){var i=t||{};var r;for(var n=1,o=arguments.length;n<o;n++){r=arguments[n];if(r){for(var a in r){if(r.hasOwnProperty(a)){i[a]=r[a]}}}}return i}})();</textarea> <script type="text/javascript" src="../dist/diff.js"></script> <script type="text/javascript"> var test = function(s1, s2, splitter, silently){ var t = Date.now(); var compareResult = diff.compareStr(s1, s2, splitter); if(!silently){ console.log(s1, s2); console.debug(Date.now() - t + ' ms'); console.log(compareResult); } if(diff.mergeStr(s1, compareResult) !== s2){ window.errorPair = [s1, s2]; console.warn(window.errorPair); throw new Error('Wrong! see in window.errorPair.'); }else{ console.info('ok'); } }; // do random tests /*var makeStr = function(len){ var s = ''; while(s.length < len){ s += Math.random(); } return s.slice(0, len); }; var randomTestTimer = setInterval(function(){ for(var l = 200; l > 0; l--){ try{ test(makeStr(l), makeStr(l), '', true); }catch(e){ clearInterval(randomTestTimer); throw e; } } console.info('FINISHED'); }, 1000);*/ // do test with given input var in1 = document.getElementById('in1'), in2 = document.getElementById('in2'); var doTest = function(){ test(in1.value, in2.value, ''); }; // do test with participle var participle = function(cnt){ var arr = []; for(var i = 1, l = cnt.length, pos = 0; i < l; i++){ var isPlainPattern = /[\w\_\$]+/, isPrevPlain = isPlainPattern.test(cnt[i-1]), isPlain = isPlainPattern.test(cnt[i]); if( !(isPrevPlain && isPlain) ){ arr.push(cnt.slice(pos, i)); pos = i; } if(i === l-1){ arr.push(cnt.slice(pos)); } } return arr; }; </script> </body> </html>