~etherpad/etherpad/ubuntu-lucid-backport

« back to all changes in this revision

Viewing changes to etherpad/src/static/js/broadcast_revisions.js

  • Committer: James Page
  • Date: 2011-04-13 08:00:43 UTC
  • Revision ID: james.page@canonical.com-20110413080043-eee2nq7y1v7cv2mp
* Refactoring to use native Ubuntu Java libraries. 
* debian/control:
  - use openjdk instead of sun's java
  - update maintainer
* debian/etherpad.init.orig, debian/etherpad.upstart:
  - move the init script out of the way
  - create a basic upstart script
  - note that the open office document conversion daemon was dropped
    from the upstart configuration; if this behavior is desired, please
    create a separate upstart job for it
* debian/rules:
  - just use basic dh_installinit, as it will pick up the new upstart job
* New release
* Changed maintainer to Packaging
* Fixed installation scripts
* Initial Release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * Copyright 2009 Google Inc.
 
3
 * 
 
4
 * Licensed under the Apache License, Version 2.0 (the "License");
 
5
 * you may not use this file except in compliance with the License.
 
6
 * You may obtain a copy of the License at
 
7
 * 
 
8
 *      http://www.apache.org/licenses/LICENSE-2.0
 
9
 * 
 
10
 * Unless required by applicable law or agreed to in writing, software
 
11
 * distributed under the License is distributed on an "AS-IS" BASIS,
 
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
13
 * See the License for the specific language governing permissions and
 
14
 * limitations under the License.
 
15
 */
 
16
 
 
17
// revision info is a skip list whos entries represent a particular revision
 
18
// of the document.  These revisions are connected together by various
 
19
// changesets,  or deltas, between any two revisions.
 
20
function Revision(revNum) {
 
21
  this.rev = revNum;
 
22
  this.changesets = [];
 
23
}
 
24
 
 
25
Revision.prototype.addChangeset = function(destIndex, changeset, timeDelta) {
 
26
  var changesetWrapper = {
 
27
    deltaRev: destIndex-this.rev,
 
28
    deltaTime: timeDelta,
 
29
    getValue: function() {
 
30
      return changeset;
 
31
    }
 
32
  };
 
33
  this.changesets.push(changesetWrapper);
 
34
  this.changesets.sort(function(a, b) {
 
35
    return (b.deltaRev - a.deltaRev)
 
36
  });
 
37
}
 
38
 
 
39
revisionInfo = {};
 
40
revisionInfo.addChangeset = function(fromIndex, toIndex, changeset, backChangeset, timeDelta) {
 
41
  var startRevision = revisionInfo[fromIndex] || revisionInfo.createNew(fromIndex);
 
42
  var endRevision = revisionInfo[toIndex] || revisionInfo.createNew(toIndex);
 
43
  startRevision.addChangeset(toIndex, changeset, timeDelta);
 
44
  endRevision.addChangeset(fromIndex, backChangeset, -1 * timeDelta);
 
45
}
 
46
 
 
47
revisionInfo.latest = clientVars.totalRevs || -1;
 
48
 
 
49
revisionInfo.createNew = function(index) {
 
50
  revisionInfo[index] = new Revision(index);
 
51
  if(index > revisionInfo.latest) {
 
52
    revisionInfo.latest = index;
 
53
  }
 
54
 
 
55
  return revisionInfo[index];
 
56
}
 
57
 
 
58
// assuming that there is a path from fromIndex to toIndex, and that the links
 
59
// are laid out in a skip-list format
 
60
revisionInfo.getPath = function(fromIndex, toIndex) {
 
61
  var changesets = [];
 
62
  var spans = [];
 
63
  var times = [];
 
64
  var elem = revisionInfo[fromIndex] || revisionInfo.createNew(fromIndex);
 
65
  if(elem.changesets.length != 0 && fromIndex != toIndex) {
 
66
    var reverse = !(fromIndex < toIndex)
 
67
    while(((elem.rev < toIndex) && !reverse) ||
 
68
          ((elem.rev > toIndex) && reverse)) {
 
69
      var couldNotContinue = false;
 
70
      var oldRev = elem.rev;
 
71
 
 
72
      for(var i = reverse ? elem.changesets.length - 1 : 0;
 
73
          reverse?i>=0:i<elem.changesets.length;
 
74
          i += reverse ? -1 : 1) {
 
75
        if(((elem.changesets[i].deltaRev < 0) && !reverse) ||
 
76
           ((elem.changesets[i].deltaRev > 0) && reverse)) {
 
77
          couldNotContinue = true;
 
78
          break;
 
79
        }
 
80
 
 
81
        if(((elem.rev + elem.changesets[i].deltaRev <= toIndex) && !reverse) ||
 
82
           ((elem.rev + elem.changesets[i].deltaRev >= toIndex) && reverse)) {
 
83
          var topush = elem.changesets[i];
 
84
          changesets.push(topush.getValue());
 
85
          spans.push(elem.changesets[i].deltaRev);
 
86
          times.push(topush.deltaTime);
 
87
          elem = revisionInfo[elem.rev + elem.changesets[i].deltaRev];
 
88
          break;
 
89
        }
 
90
      }
 
91
 
 
92
      if(couldNotContinue || oldRev == elem.rev) break;
 
93
    }
 
94
  }
 
95
 
 
96
  var status = 'partial';
 
97
  if(elem.rev == toIndex)
 
98
    status = 'complete';
 
99
 
 
100
  return {
 
101
    'fromRev':fromIndex,
 
102
    'rev': elem.rev,
 
103
    'status': status,
 
104
    'changesets': changesets,
 
105
    'spans' : spans,
 
106
    'times' : times
 
107
  };
 
108
}
 
109
 
 
110
// revisionInfo.addChangeset(0, 5, "abcde")
 
111
// revisionInfo.addChangeset(5, 10, "fghij")
 
112
// revisionInfo.addChangeset(10, 11, "k")
 
113
// revisionInfo.addChangeset(11, 12, "l")
 
114
// revisionInfo.addChangeset(12, 13, "m")
 
115
// revisionInfo.addChangeset(13, 14, "n")
 
116
// revisionInfo.addChangeset(14, 15, "o")
 
117
// revisionInfo.addChangeset(15, 20, "pqrst")
 
118
//
 
119
// print (revisionInfo.getPath(15, 0))