##// END OF EJS Templates
hgweb: eliminate extra complexity in process_dates definition...
Alexander Plavin -
r19834:80633eac default
parent child Browse files
Show More
@@ -1,442 +1,440 b''
1 // mercurial.js - JavaScript utility functions
1 // mercurial.js - JavaScript utility functions
2 //
2 //
3 // Rendering of branch DAGs on the client side
3 // Rendering of branch DAGs on the client side
4 // Display of elapsed time
4 // Display of elapsed time
5 // Show or hide diffstat
5 // Show or hide diffstat
6 //
6 //
7 // Copyright 2008 Dirkjan Ochtman <dirkjan AT ochtman DOT nl>
7 // Copyright 2008 Dirkjan Ochtman <dirkjan AT ochtman DOT nl>
8 // Copyright 2006 Alexander Schremmer <alex AT alexanderweb DOT de>
8 // Copyright 2006 Alexander Schremmer <alex AT alexanderweb DOT de>
9 //
9 //
10 // derived from code written by Scott James Remnant <scott@ubuntu.com>
10 // derived from code written by Scott James Remnant <scott@ubuntu.com>
11 // Copyright 2005 Canonical Ltd.
11 // Copyright 2005 Canonical Ltd.
12 //
12 //
13 // This software may be used and distributed according to the terms
13 // This software may be used and distributed according to the terms
14 // of the GNU General Public License, incorporated herein by reference.
14 // of the GNU General Public License, incorporated herein by reference.
15
15
16 var colors = [
16 var colors = [
17 [ 1.0, 0.0, 0.0 ],
17 [ 1.0, 0.0, 0.0 ],
18 [ 1.0, 1.0, 0.0 ],
18 [ 1.0, 1.0, 0.0 ],
19 [ 0.0, 1.0, 0.0 ],
19 [ 0.0, 1.0, 0.0 ],
20 [ 0.0, 1.0, 1.0 ],
20 [ 0.0, 1.0, 1.0 ],
21 [ 0.0, 0.0, 1.0 ],
21 [ 0.0, 0.0, 1.0 ],
22 [ 1.0, 0.0, 1.0 ]
22 [ 1.0, 0.0, 1.0 ]
23 ];
23 ];
24
24
25 function Graph() {
25 function Graph() {
26
26
27 this.canvas = document.getElementById('graph');
27 this.canvas = document.getElementById('graph');
28 if (window.G_vmlCanvasManager) this.canvas = window.G_vmlCanvasManager.initElement(this.canvas);
28 if (window.G_vmlCanvasManager) this.canvas = window.G_vmlCanvasManager.initElement(this.canvas);
29 this.ctx = this.canvas.getContext('2d');
29 this.ctx = this.canvas.getContext('2d');
30 this.ctx.strokeStyle = 'rgb(0, 0, 0)';
30 this.ctx.strokeStyle = 'rgb(0, 0, 0)';
31 this.ctx.fillStyle = 'rgb(0, 0, 0)';
31 this.ctx.fillStyle = 'rgb(0, 0, 0)';
32 this.cur = [0, 0];
32 this.cur = [0, 0];
33 this.line_width = 3;
33 this.line_width = 3;
34 this.bg = [0, 4];
34 this.bg = [0, 4];
35 this.cell = [2, 0];
35 this.cell = [2, 0];
36 this.columns = 0;
36 this.columns = 0;
37 this.revlink = '';
37 this.revlink = '';
38
38
39 this.reset = function() {
39 this.reset = function() {
40 this.bg = [0, 4];
40 this.bg = [0, 4];
41 this.cell = [2, 0];
41 this.cell = [2, 0];
42 this.columns = 0;
42 this.columns = 0;
43 document.getElementById('nodebgs').innerHTML = '';
43 document.getElementById('nodebgs').innerHTML = '';
44 document.getElementById('graphnodes').innerHTML = '';
44 document.getElementById('graphnodes').innerHTML = '';
45 }
45 }
46
46
47 this.scale = function(height) {
47 this.scale = function(height) {
48 this.bg_height = height;
48 this.bg_height = height;
49 this.box_size = Math.floor(this.bg_height / 1.2);
49 this.box_size = Math.floor(this.bg_height / 1.2);
50 this.cell_height = this.box_size;
50 this.cell_height = this.box_size;
51 }
51 }
52
52
53 function colorPart(num) {
53 function colorPart(num) {
54 num *= 255
54 num *= 255
55 num = num < 0 ? 0 : num;
55 num = num < 0 ? 0 : num;
56 num = num > 255 ? 255 : num;
56 num = num > 255 ? 255 : num;
57 var digits = Math.round(num).toString(16);
57 var digits = Math.round(num).toString(16);
58 if (num < 16) {
58 if (num < 16) {
59 return '0' + digits;
59 return '0' + digits;
60 } else {
60 } else {
61 return digits;
61 return digits;
62 }
62 }
63 }
63 }
64
64
65 this.setColor = function(color, bg, fg) {
65 this.setColor = function(color, bg, fg) {
66
66
67 // Set the colour.
67 // Set the colour.
68 //
68 //
69 // If color is a string, expect an hexadecimal RGB
69 // If color is a string, expect an hexadecimal RGB
70 // value and apply it unchanged. If color is a number,
70 // value and apply it unchanged. If color is a number,
71 // pick a distinct colour based on an internal wheel;
71 // pick a distinct colour based on an internal wheel;
72 // the bg parameter provides the value that should be
72 // the bg parameter provides the value that should be
73 // assigned to the 'zero' colours and the fg parameter
73 // assigned to the 'zero' colours and the fg parameter
74 // provides the multiplier that should be applied to
74 // provides the multiplier that should be applied to
75 // the foreground colours.
75 // the foreground colours.
76 var s;
76 var s;
77 if(typeof color == "string") {
77 if(typeof color == "string") {
78 s = "#" + color;
78 s = "#" + color;
79 } else { //typeof color == "number"
79 } else { //typeof color == "number"
80 color %= colors.length;
80 color %= colors.length;
81 var red = (colors[color][0] * fg) || bg;
81 var red = (colors[color][0] * fg) || bg;
82 var green = (colors[color][1] * fg) || bg;
82 var green = (colors[color][1] * fg) || bg;
83 var blue = (colors[color][2] * fg) || bg;
83 var blue = (colors[color][2] * fg) || bg;
84 red = Math.round(red * 255);
84 red = Math.round(red * 255);
85 green = Math.round(green * 255);
85 green = Math.round(green * 255);
86 blue = Math.round(blue * 255);
86 blue = Math.round(blue * 255);
87 s = 'rgb(' + red + ', ' + green + ', ' + blue + ')';
87 s = 'rgb(' + red + ', ' + green + ', ' + blue + ')';
88 }
88 }
89 this.ctx.strokeStyle = s;
89 this.ctx.strokeStyle = s;
90 this.ctx.fillStyle = s;
90 this.ctx.fillStyle = s;
91 return s;
91 return s;
92
92
93 }
93 }
94
94
95 this.edge = function(x0, y0, x1, y1, color, width) {
95 this.edge = function(x0, y0, x1, y1, color, width) {
96
96
97 this.setColor(color, 0.0, 0.65);
97 this.setColor(color, 0.0, 0.65);
98 if(width >= 0)
98 if(width >= 0)
99 this.ctx.lineWidth = width;
99 this.ctx.lineWidth = width;
100 this.ctx.beginPath();
100 this.ctx.beginPath();
101 this.ctx.moveTo(x0, y0);
101 this.ctx.moveTo(x0, y0);
102 this.ctx.lineTo(x1, y1);
102 this.ctx.lineTo(x1, y1);
103 this.ctx.stroke();
103 this.ctx.stroke();
104
104
105 }
105 }
106
106
107 this.render = function(data) {
107 this.render = function(data) {
108
108
109 var backgrounds = '';
109 var backgrounds = '';
110 var nodedata = '';
110 var nodedata = '';
111
111
112 for (var i in data) {
112 for (var i in data) {
113
113
114 var parity = i % 2;
114 var parity = i % 2;
115 this.cell[1] += this.bg_height;
115 this.cell[1] += this.bg_height;
116 this.bg[1] += this.bg_height;
116 this.bg[1] += this.bg_height;
117
117
118 var cur = data[i];
118 var cur = data[i];
119 var node = cur[1];
119 var node = cur[1];
120 var edges = cur[2];
120 var edges = cur[2];
121 var fold = false;
121 var fold = false;
122
122
123 var prevWidth = this.ctx.lineWidth;
123 var prevWidth = this.ctx.lineWidth;
124 for (var j in edges) {
124 for (var j in edges) {
125
125
126 line = edges[j];
126 line = edges[j];
127 start = line[0];
127 start = line[0];
128 end = line[1];
128 end = line[1];
129 color = line[2];
129 color = line[2];
130 var width = line[3];
130 var width = line[3];
131 if(width < 0)
131 if(width < 0)
132 width = prevWidth;
132 width = prevWidth;
133 var branchcolor = line[4];
133 var branchcolor = line[4];
134 if(branchcolor)
134 if(branchcolor)
135 color = branchcolor;
135 color = branchcolor;
136
136
137 if (end > this.columns || start > this.columns) {
137 if (end > this.columns || start > this.columns) {
138 this.columns += 1;
138 this.columns += 1;
139 }
139 }
140
140
141 if (start == this.columns && start > end) {
141 if (start == this.columns && start > end) {
142 var fold = true;
142 var fold = true;
143 }
143 }
144
144
145 x0 = this.cell[0] + this.box_size * start + this.box_size / 2;
145 x0 = this.cell[0] + this.box_size * start + this.box_size / 2;
146 y0 = this.bg[1] - this.bg_height / 2;
146 y0 = this.bg[1] - this.bg_height / 2;
147 x1 = this.cell[0] + this.box_size * end + this.box_size / 2;
147 x1 = this.cell[0] + this.box_size * end + this.box_size / 2;
148 y1 = this.bg[1] + this.bg_height / 2;
148 y1 = this.bg[1] + this.bg_height / 2;
149
149
150 this.edge(x0, y0, x1, y1, color, width);
150 this.edge(x0, y0, x1, y1, color, width);
151
151
152 }
152 }
153 this.ctx.lineWidth = prevWidth;
153 this.ctx.lineWidth = prevWidth;
154
154
155 // Draw the revision node in the right column
155 // Draw the revision node in the right column
156
156
157 column = node[0]
157 column = node[0]
158 color = node[1]
158 color = node[1]
159
159
160 radius = this.box_size / 8;
160 radius = this.box_size / 8;
161 x = this.cell[0] + this.box_size * column + this.box_size / 2;
161 x = this.cell[0] + this.box_size * column + this.box_size / 2;
162 y = this.bg[1] - this.bg_height / 2;
162 y = this.bg[1] - this.bg_height / 2;
163 var add = this.vertex(x, y, color, parity, cur);
163 var add = this.vertex(x, y, color, parity, cur);
164 backgrounds += add[0];
164 backgrounds += add[0];
165 nodedata += add[1];
165 nodedata += add[1];
166
166
167 if (fold) this.columns -= 1;
167 if (fold) this.columns -= 1;
168
168
169 }
169 }
170
170
171 document.getElementById('nodebgs').innerHTML += backgrounds;
171 document.getElementById('nodebgs').innerHTML += backgrounds;
172 document.getElementById('graphnodes').innerHTML += nodedata;
172 document.getElementById('graphnodes').innerHTML += nodedata;
173
173
174 }
174 }
175
175
176 }
176 }
177
177
178
178
179 process_dates = (function(document, RegExp, Math, isNaN, Date, _false, _true){
179 function process_dates(){
180
180
181 // derived from code from mercurial/templatefilter.py
181 // derived from code from mercurial/templatefilter.py
182
182
183 var scales = {
183 var scales = {
184 'year': 365 * 24 * 60 * 60,
184 'year': 365 * 24 * 60 * 60,
185 'month': 30 * 24 * 60 * 60,
185 'month': 30 * 24 * 60 * 60,
186 'week': 7 * 24 * 60 * 60,
186 'week': 7 * 24 * 60 * 60,
187 'day': 24 * 60 * 60,
187 'day': 24 * 60 * 60,
188 'hour': 60 * 60,
188 'hour': 60 * 60,
189 'minute': 60,
189 'minute': 60,
190 'second': 1
190 'second': 1
191 };
191 };
192
192
193 function format(count, string){
193 function format(count, string){
194 var ret = count + ' ' + string;
194 var ret = count + ' ' + string;
195 if (count > 1){
195 if (count > 1){
196 ret = ret + 's';
196 ret = ret + 's';
197 }
197 }
198 return ret;
198 return ret;
199 }
199 }
200
200
201 function shortdate(date){
201 function shortdate(date){
202 var ret = date.getFullYear() + '-';
202 var ret = date.getFullYear() + '-';
203 // getMonth() gives a 0-11 result
203 // getMonth() gives a 0-11 result
204 var month = date.getMonth() + 1;
204 var month = date.getMonth() + 1;
205 if (month <= 9){
205 if (month <= 9){
206 ret += '0' + month;
206 ret += '0' + month;
207 } else {
207 } else {
208 ret += month;
208 ret += month;
209 }
209 }
210 ret += '-';
210 ret += '-';
211 var day = date.getDate();
211 var day = date.getDate();
212 if (day <= 9){
212 if (day <= 9){
213 ret += '0' + day;
213 ret += '0' + day;
214 } else {
214 } else {
215 ret += day;
215 ret += day;
216 }
216 }
217 return ret;
217 return ret;
218 }
218 }
219
219
220 function age(datestr){
220 function age(datestr){
221 var now = new Date();
221 var now = new Date();
222 var once = new Date(datestr);
222 var once = new Date(datestr);
223 if (isNaN(once.getTime())){
223 if (isNaN(once.getTime())){
224 // parsing error
224 // parsing error
225 return datestr;
225 return datestr;
226 }
226 }
227
227
228 var delta = Math.floor((now.getTime() - once.getTime()) / 1000);
228 var delta = Math.floor((now.getTime() - once.getTime()) / 1000);
229
229
230 var future = _false;
230 var future = false;
231 if (delta < 0){
231 if (delta < 0){
232 future = _true;
232 future = true;
233 delta = -delta;
233 delta = -delta;
234 if (delta > (30 * scales.year)){
234 if (delta > (30 * scales.year)){
235 return "in the distant future";
235 return "in the distant future";
236 }
236 }
237 }
237 }
238
238
239 if (delta > (2 * scales.year)){
239 if (delta > (2 * scales.year)){
240 return shortdate(once);
240 return shortdate(once);
241 }
241 }
242
242
243 for (unit in scales){
243 for (unit in scales){
244 var s = scales[unit];
244 var s = scales[unit];
245 var n = Math.floor(delta / s);
245 var n = Math.floor(delta / s);
246 if ((n >= 2) || (s == 1)){
246 if ((n >= 2) || (s == 1)){
247 if (future){
247 if (future){
248 return format(n, unit) + ' from now';
248 return format(n, unit) + ' from now';
249 } else {
249 } else {
250 return format(n, unit) + ' ago';
250 return format(n, unit) + ' ago';
251 }
251 }
252 }
252 }
253 }
253 }
254 }
254 }
255
255
256 return function(){
257 var nodes = document.getElementsByTagName('*');
256 var nodes = document.getElementsByTagName('*');
258 var ageclass = new RegExp('\\bage\\b');
257 var ageclass = new RegExp('\\bage\\b');
259 var dateclass = new RegExp('\\bdate\\b');
258 var dateclass = new RegExp('\\bdate\\b');
260 for (var i=0; i<nodes.length; ++i){
259 for (var i=0; i<nodes.length; ++i){
261 var node = nodes[i];
260 var node = nodes[i];
262 var classes = node.className;
261 var classes = node.className;
263 if (ageclass.test(classes)){
262 if (ageclass.test(classes)){
264 var agevalue = age(node.textContent);
263 var agevalue = age(node.textContent);
265 if (dateclass.test(classes)){
264 if (dateclass.test(classes)){
266 // We want both: date + (age)
265 // We want both: date + (age)
267 node.textContent += ' ('+agevalue+')';
266 node.textContent += ' ('+agevalue+')';
268 } else {
267 } else {
269 node.title = node.textContent;
268 node.title = node.textContent;
270 node.textContent = agevalue;
269 node.textContent = agevalue;
271 }
270 }
272 }
271 }
273 }
272 }
274 }
273 }
275 })(document, RegExp, Math, isNaN, Date, false, true)
276
274
277 function toggleDiffstat() {
275 function toggleDiffstat() {
278 var curdetails = document.getElementById('diffstatdetails').style.display;
276 var curdetails = document.getElementById('diffstatdetails').style.display;
279 var curexpand = curdetails == 'none' ? 'inline' : 'none';
277 var curexpand = curdetails == 'none' ? 'inline' : 'none';
280 document.getElementById('diffstatdetails').style.display = curexpand;
278 document.getElementById('diffstatdetails').style.display = curexpand;
281 document.getElementById('diffstatexpand').style.display = curdetails;
279 document.getElementById('diffstatexpand').style.display = curdetails;
282 }
280 }
283
281
284 function toggleLinewrap() {
282 function toggleLinewrap() {
285 function getLinewrap() {
283 function getLinewrap() {
286 var nodes = document.getElementsByClassName('sourcelines');
284 var nodes = document.getElementsByClassName('sourcelines');
287 // if there are no such nodes, error is thrown here
285 // if there are no such nodes, error is thrown here
288 return nodes[0].classList.contains('wrap');
286 return nodes[0].classList.contains('wrap');
289 }
287 }
290
288
291 function setLinewrap(enable) {
289 function setLinewrap(enable) {
292 var nodes = document.getElementsByClassName('sourcelines');
290 var nodes = document.getElementsByClassName('sourcelines');
293 for (var i = 0; i < nodes.length; i++) {
291 for (var i = 0; i < nodes.length; i++) {
294 if (enable) {
292 if (enable) {
295 nodes[i].classList.add('wrap');
293 nodes[i].classList.add('wrap');
296 } else {
294 } else {
297 nodes[i].classList.remove('wrap');
295 nodes[i].classList.remove('wrap');
298 }
296 }
299 }
297 }
300
298
301 var links = document.getElementsByClassName('linewraplink');
299 var links = document.getElementsByClassName('linewraplink');
302 for (var i = 0; i < links.length; i++) {
300 for (var i = 0; i < links.length; i++) {
303 links[i].innerHTML = enable ? 'on' : 'off';
301 links[i].innerHTML = enable ? 'on' : 'off';
304 }
302 }
305 }
303 }
306
304
307 setLinewrap(!getLinewrap());
305 setLinewrap(!getLinewrap());
308 }
306 }
309
307
310 function format(str, replacements) {
308 function format(str, replacements) {
311 return str.replace(/%(\w+)%/g, function(match, p1) {
309 return str.replace(/%(\w+)%/g, function(match, p1) {
312 return String(replacements[p1]);
310 return String(replacements[p1]);
313 });
311 });
314 }
312 }
315
313
316 function makeRequest(url, method, onstart, onsuccess, onerror, oncomplete) {
314 function makeRequest(url, method, onstart, onsuccess, onerror, oncomplete) {
317 xfr = new XMLHttpRequest();
315 xfr = new XMLHttpRequest();
318 xfr.onreadystatechange = function() {
316 xfr.onreadystatechange = function() {
319 if (xfr.readyState === 4) {
317 if (xfr.readyState === 4) {
320 try {
318 try {
321 if (xfr.status === 200) {
319 if (xfr.status === 200) {
322 onsuccess(xfr.responseText);
320 onsuccess(xfr.responseText);
323 } else {
321 } else {
324 throw 'server error';
322 throw 'server error';
325 }
323 }
326 } catch (e) {
324 } catch (e) {
327 onerror(e);
325 onerror(e);
328 } finally {
326 } finally {
329 oncomplete();
327 oncomplete();
330 }
328 }
331 }
329 }
332 };
330 };
333
331
334 xfr.open(method, url);
332 xfr.open(method, url);
335 xfr.send();
333 xfr.send();
336 onstart();
334 onstart();
337 return xfr;
335 return xfr;
338 }
336 }
339
337
340 function removeByClassName(className) {
338 function removeByClassName(className) {
341 var nodes = document.getElementsByClassName(className);
339 var nodes = document.getElementsByClassName(className);
342 while (nodes.length) {
340 while (nodes.length) {
343 nodes[0].parentNode.removeChild(nodes[0]);
341 nodes[0].parentNode.removeChild(nodes[0]);
344 }
342 }
345 }
343 }
346
344
347 function docFromHTML(html) {
345 function docFromHTML(html) {
348 var doc = document.implementation.createHTMLDocument('');
346 var doc = document.implementation.createHTMLDocument('');
349 doc.documentElement.innerHTML = html;
347 doc.documentElement.innerHTML = html;
350 return doc;
348 return doc;
351 }
349 }
352
350
353 function appendFormatHTML(element, formatStr, replacements) {
351 function appendFormatHTML(element, formatStr, replacements) {
354 element.insertAdjacentHTML('beforeend', format(formatStr, replacements));
352 element.insertAdjacentHTML('beforeend', format(formatStr, replacements));
355 }
353 }
356
354
357 function ajaxScrollInit(urlFormat,
355 function ajaxScrollInit(urlFormat,
358 nextPageVar,
356 nextPageVar,
359 nextPageVarGet,
357 nextPageVarGet,
360 containerSelector,
358 containerSelector,
361 messageFormat,
359 messageFormat,
362 mode) {
360 mode) {
363 updateInitiated = false;
361 updateInitiated = false;
364 container = document.querySelector(containerSelector);
362 container = document.querySelector(containerSelector);
365
363
366 function scrollHandler() {
364 function scrollHandler() {
367 if (updateInitiated) {
365 if (updateInitiated) {
368 return;
366 return;
369 }
367 }
370
368
371 var scrollHeight = document.documentElement.scrollHeight;
369 var scrollHeight = document.documentElement.scrollHeight;
372 var clientHeight = document.documentElement.clientHeight;
370 var clientHeight = document.documentElement.clientHeight;
373 var scrollTop = document.body.scrollTop
371 var scrollTop = document.body.scrollTop
374 || document.documentElement.scrollTop;
372 || document.documentElement.scrollTop;
375
373
376 if (scrollHeight - (scrollTop + clientHeight) < 50) {
374 if (scrollHeight - (scrollTop + clientHeight) < 50) {
377 updateInitiated = true;
375 updateInitiated = true;
378 removeByClassName('scroll-loading-error');
376 removeByClassName('scroll-loading-error');
379 container.lastElementChild.classList.add('scroll-separator');
377 container.lastElementChild.classList.add('scroll-separator');
380
378
381 if (!nextPageVar) {
379 if (!nextPageVar) {
382 var message = {
380 var message = {
383 class: 'scroll-loading-info',
381 class: 'scroll-loading-info',
384 text: 'No more entries'
382 text: 'No more entries'
385 };
383 };
386 appendFormatHTML(container, messageFormat, message);
384 appendFormatHTML(container, messageFormat, message);
387 return;
385 return;
388 }
386 }
389
387
390 makeRequest(
388 makeRequest(
391 format(urlFormat, {next: nextPageVar}),
389 format(urlFormat, {next: nextPageVar}),
392 'GET',
390 'GET',
393 function onstart() {
391 function onstart() {
394 var message = {
392 var message = {
395 class: 'scroll-loading',
393 class: 'scroll-loading',
396 text: 'Loading...'
394 text: 'Loading...'
397 };
395 };
398 appendFormatHTML(container, messageFormat, message);
396 appendFormatHTML(container, messageFormat, message);
399 },
397 },
400 function onsuccess(htmlText) {
398 function onsuccess(htmlText) {
401 nextPageVar = nextPageVarGet(htmlText, nextPageVar);
399 nextPageVar = nextPageVarGet(htmlText, nextPageVar);
402
400
403 if (mode == 'graph') {
401 if (mode == 'graph') {
404 var addHeight = htmlText.match(/^<canvas id="graph".*height="(\d+)"><\/canvas>$/m)[1];
402 var addHeight = htmlText.match(/^<canvas id="graph".*height="(\d+)"><\/canvas>$/m)[1];
405 addHeight = parseInt(addHeight);
403 addHeight = parseInt(addHeight);
406 graph.canvas.height = addHeight;
404 graph.canvas.height = addHeight;
407
405
408 var dataStr = htmlText.match(/^\s*var data = (.*);$/m)[1];
406 var dataStr = htmlText.match(/^\s*var data = (.*);$/m)[1];
409 var data = JSON.parse(dataStr)
407 var data = JSON.parse(dataStr)
410 graph.reset();
408 graph.reset();
411 graph.render(data);
409 graph.render(data);
412 } else {
410 } else {
413 var doc = docFromHTML(htmlText);
411 var doc = docFromHTML(htmlText);
414 var nodes = doc.querySelector(containerSelector).children;
412 var nodes = doc.querySelector(containerSelector).children;
415 while (nodes.length) {
413 while (nodes.length) {
416 var node = nodes[0];
414 var node = nodes[0];
417 node = document.adoptNode(node);
415 node = document.adoptNode(node);
418 container.appendChild(node);
416 container.appendChild(node);
419 }
417 }
420 process_dates();
418 process_dates();
421 }
419 }
422 },
420 },
423 function onerror(errorText) {
421 function onerror(errorText) {
424 var message = {
422 var message = {
425 class: 'scroll-loading-error',
423 class: 'scroll-loading-error',
426 text: 'Error: ' + errorText
424 text: 'Error: ' + errorText
427 };
425 };
428 appendFormatHTML(container, messageFormat, message);
426 appendFormatHTML(container, messageFormat, message);
429 },
427 },
430 function oncomplete() {
428 function oncomplete() {
431 removeByClassName('scroll-loading');
429 removeByClassName('scroll-loading');
432 updateInitiated = false;
430 updateInitiated = false;
433 scrollHandler();
431 scrollHandler();
434 }
432 }
435 );
433 );
436 }
434 }
437 }
435 }
438
436
439 window.addEventListener('scroll', scrollHandler);
437 window.addEventListener('scroll', scrollHandler);
440 window.addEventListener('resize', scrollHandler);
438 window.addEventListener('resize', scrollHandler);
441 scrollHandler();
439 scrollHandler();
442 }
440 }
General Comments 0
You need to be logged in to leave comments. Login now