[ Index ]

PHP Cross Reference of Drupal 6 (yi-drupal)

title

Body

[close]

/sites/all/libraries/jquery.ui/external/jsdiff/ -> jsdiff.js (source)

   1  /*

   2   * Javascript Diff Algorithm

   3   *  By John Resig (http://ejohn.org/)

   4   *  Modified by Chu Alan "sprite"

   5   *

   6   * More Info:

   7   *  http://ejohn.org/projects/javascript-diff-algorithm/

   8   */
   9  
  10  function escape(s) {
  11      var n = s;
  12      n = n.replace(/&/g, "&");
  13      n = n.replace(/</g, "&lt;");
  14      n = n.replace(/>/g, "&gt;");
  15      n = n.replace(/"/g, "&quot;");
  16  
  17      return n;
  18  }
  19  
  20  function diffString( o, n ) {
  21    o = o.replace(/\s+$/, '');
  22    n = n.replace(/\s+$/, '');
  23  
  24    var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/) );
  25    var str = "";
  26  
  27    var oSpace = o.match(/\s+/g);
  28    if (oSpace == null) {
  29      oSpace = ["\n"];
  30    } else {
  31      oSpace.push("\n");
  32    }
  33    var nSpace = n.match(/\s+/g);
  34    if (nSpace == null) {
  35      nSpace = ["\n"];
  36    } else {
  37      nSpace.push("\n");
  38    }
  39  
  40    if (out.n.length == 0) {
  41        for (var i = 0; i < out.o.length; i++) {
  42          str += '<del>' + escape(out.o[i]) + oSpace[i] + "</del>";
  43        }
  44    } else {
  45      if (out.n[0].text == null) {
  46        for (n = 0; n < out.o.length && out.o[n].text == null; n++) {
  47          str += '<del>' + escape(out.o[n]) + oSpace[n] + "</del>";
  48        }
  49      }
  50  
  51      for ( var i = 0; i < out.n.length; i++ ) {
  52        if (out.n[i].text == null) {
  53          str += '<ins>' + escape(out.n[i]) + nSpace[i] + "</ins>";
  54        } else {
  55          var pre = "";
  56  
  57          for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
  58            pre += '<del>' + escape(out.o[n]) + oSpace[n] + "</del>";
  59          }
  60          str += " " + out.n[i].text + nSpace[i] + pre;
  61        }
  62      }
  63    }
  64    
  65    return str;
  66  }
  67  
  68  function randomColor() {
  69      return "rgb(" + (Math.random() * 100) + "%, " + 
  70                      (Math.random() * 100) + "%, " + 
  71                      (Math.random() * 100) + "%)";
  72  }
  73  function diffString2( o, n ) {
  74    o = o.replace(/\s+$/, '');
  75    n = n.replace(/\s+$/, '');
  76  
  77    var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/) );
  78  
  79    var oSpace = o.match(/\s+/g);
  80    if (oSpace == null) {
  81      oSpace = ["\n"];
  82    } else {
  83      oSpace.push("\n");
  84    }
  85    var nSpace = n.match(/\s+/g);
  86    if (nSpace == null) {
  87      nSpace = ["\n"];
  88    } else {
  89      nSpace.push("\n");
  90    }
  91  
  92    var os = "";
  93    var colors = new Array();
  94    for (var i = 0; i < out.o.length; i++) {
  95        colors[i] = randomColor();
  96  
  97        if (out.o[i].text != null) {
  98            os += '<span style="background-color: ' +colors[i]+ '">' + 
  99                  escape(out.o[i].text) + oSpace[i] + "</span>";
 100        } else {
 101            os += "<del>" + escape(out.o[i]) + oSpace[i] + "</del>";
 102        }
 103    }
 104  
 105    var ns = "";
 106    for (var i = 0; i < out.n.length; i++) {
 107        if (out.n[i].text != null) {
 108            ns += '<span style="background-color: ' +colors[out.n[i].row]+ '">' + 
 109                  escape(out.n[i].text) + nSpace[i] + "</span>";
 110        } else {
 111            ns += "<ins>" + escape(out.n[i]) + nSpace[i] + "</ins>";
 112        }
 113    }
 114  
 115    return { o : os , n : ns };
 116  }
 117  
 118  function diff( o, n ) {
 119    var ns = new Object();
 120    var os = new Object();
 121    
 122    for ( var i = 0; i < n.length; i++ ) {
 123      if ( ns[ n[i] ] == null )
 124        ns[ n[i] ] = { rows: new Array(), o: null };
 125      ns[ n[i] ].rows.push( i );
 126    }
 127    
 128    for ( var i = 0; i < o.length; i++ ) {
 129      if ( os[ o[i] ] == null )
 130        os[ o[i] ] = { rows: new Array(), n: null };
 131      os[ o[i] ].rows.push( i );
 132    }
 133    
 134    for ( var i in ns ) {
 135      if ( ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1 ) {
 136        n[ ns[i].rows[0] ] = { text: n[ ns[i].rows[0] ], row: os[i].rows[0] };
 137        o[ os[i].rows[0] ] = { text: o[ os[i].rows[0] ], row: ns[i].rows[0] };
 138      }
 139    }
 140    
 141    for ( var i = 0; i < n.length - 1; i++ ) {
 142      if ( n[i].text != null && n[i+1].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null && 
 143           n[i+1] == o[ n[i].row + 1 ] ) {
 144        n[i+1] = { text: n[i+1], row: n[i].row + 1 };
 145        o[n[i].row+1] = { text: o[n[i].row+1], row: i + 1 };
 146      }
 147    }
 148    
 149    for ( var i = n.length - 1; i > 0; i-- ) {
 150      if ( n[i].text != null && n[i-1].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null && 
 151           n[i-1] == o[ n[i].row - 1 ] ) {
 152        n[i-1] = { text: n[i-1], row: n[i].row - 1 };
 153        o[n[i].row-1] = { text: o[n[i].row-1], row: i - 1 };
 154      }
 155    }
 156    
 157    return { o: o, n: n };
 158  }
 159  


Generated: Mon Jul 9 18:01:44 2012 Cross-referenced by PHPXref 0.7