1 // Copyright (c) 2008 Tony Garnock-Jones <tonyg@lshift.net>
2 // Copyright (c) 2008 LShift Ltd. <query@lshift.net>
4 // Permission is hereby granted, free of charge, to any person
5 // obtaining a copy of this software and associated documentation files
6 // (the "Software"), to deal in the Software without restriction,
7 // including without limitation the rights to use, copy, modify, merge,
8 // publish, distribute, sublicense, and/or sell copies of the Software,
9 // and to permit persons to whom the Software is furnished to do so,
10 // subject to the following conditions:
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19 // BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 renderRepository: function (repo) {
28 var i, j, item, parent, column, row;
30 var worklist = repo.childlessRevisions();
31 while (worklist.length) {
32 item = worklist.shift();
35 var parents = repo.lookupParents(item);
36 for (i = 0; i < parents.length; i++) {
38 if (childCount[parent] == undefined) {
39 childCount[parent] = repo.lookupChildren(parent).length;
41 childCount[parent] = childCount[parent] - 1;
42 if (childCount[parent] === 0) {
43 worklist.push(parent);
51 function allocateSlot(item) {
52 var column = assignments[item];
53 if (typeof(column) != 'number') {
55 for (var j = 0; j < slots.length; j++) {
56 if (slots[j] === null) {
61 if (column === null) {
63 column = slots.length - 1;
69 var finalAssignments = [];
73 for (i = 0; i < ordering.length; i++) {
75 var hasKid = typeof(assignments[item]) == 'number';
76 column = allocateSlot(item);
77 var parentIds = repo.lookupParents(item);
78 var parentColumns = [];
81 for (j = 0; j < parentIds.length; j++) {
82 parent = parentIds[j];
84 ? (typeof(assignments[parent]) == 'number'
85 ? allocateSlot(parent)
87 : allocateSlot(parent);
88 parentColumns.push(c2);
90 assignments[parent] = c2;
93 finalAssignments.push(column);
96 for (j = 0; j < slots.length; j++) {
97 var oldCell = (oldrow.length >= j ? oldrow[j] : 0);
99 row[j] = (oldCell & 4) ? 1 : 0;
101 row[j] = (oldCell & (1 | 4 | 8)) ? 1 : 0;
104 row[column] = 16 | (hasKid ? 1 : 0);
105 for (j = 0; j < parentColumns.length; j++) {
106 var parentColumn = parentColumns[j];
107 var n1 = Math.min(parentColumn, column) + 1;
108 var n2 = Math.max(parentColumn, column);
109 for (var k = n1; k < n2; k++) {
112 if (parentColumn == column) {
113 row[parentColumn] = row[parentColumn] | 4;
115 row[parentColumn] = row[parentColumn] | (column > parentColumn ? 8 : 4);
116 row[column] = row[column] | (column > parentColumn ? 2 : 8);
124 for (i = 0; i < ordering.length; i++) {
126 column = finalAssignments[i];
130 var result = {revId: item, pictures: []};
131 for (j = 0; j < row.length; j++) {
133 result.pictures.push((v & 16 ? "blob_" : "stick_") + (v & 15) + ".png");
135 results.push(result);
141 simpleRenderRepository: function (repo) {
142 var ordering = DrawDvcs.renderRepository(repo);
144 for (var i = 0; i < ordering.length; i++) {
145 var item = ordering[i];
146 var rev = repo.lookupRev(item.revId);
147 var pictures = item.pictures;
148 for (var j = 0; j < pictures.length; j++) {
149 html = html + "<img src='img/" + pictures[j] + "' />";
151 html = html+" "+item.revId+" ("+rev.branch+") "+(rev.metadata||{}).summary+"<br />\n";
153 return "<p style='line-height: 0px; white-space: nowrap;'>" + html + "</p>";