nitro 0.24.0 → 0.25.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +279 -0
- data/ProjectInfo +7 -7
- data/doc/AUTHORS +4 -2
- data/doc/RELEASES +96 -1
- data/lib/nitro.rb +5 -2
- data/lib/nitro/adapter/cgi.rb +1 -1
- data/lib/nitro/adapter/webrick.rb +7 -5
- data/lib/nitro/caching/output.rb +3 -2
- data/lib/nitro/cgi/utils.rb +8 -4
- data/lib/nitro/compiler.rb +9 -5
- data/lib/nitro/compiler/include.rb +42 -0
- data/lib/nitro/compiler/markup.rb +1 -1
- data/lib/nitro/compiler/morphing.rb +120 -50
- data/lib/nitro/compiler/squeeze.rb +2 -2
- data/lib/nitro/context.rb +9 -0
- data/lib/nitro/controller.rb +8 -4
- data/lib/nitro/dispatcher.rb +5 -5
- data/lib/nitro/dispatcher/nice.rb +16 -5
- data/lib/nitro/element.rb +30 -8
- data/lib/nitro/helper.rb +56 -0
- data/lib/nitro/{mixin → helper}/benchmark.rb +1 -1
- data/lib/nitro/{mixin → helper}/buffer.rb +1 -2
- data/lib/nitro/{mixin → helper}/debug.rb +1 -1
- data/lib/nitro/{mixin/helper.rb → helper/default.rb} +4 -4
- data/lib/nitro/{mixin → helper}/form.rb +3 -3
- data/lib/nitro/{mixin → helper}/javascript.rb +17 -1
- data/lib/nitro/{mixin → helper}/pager.rb +1 -1
- data/lib/nitro/{mixin → helper}/rss.rb +3 -3
- data/lib/nitro/{mixin → helper}/table.rb +1 -1
- data/lib/nitro/{mixin → helper}/xhtml.rb +2 -2
- data/lib/nitro/{mixin → helper}/xml.rb +1 -1
- data/lib/nitro/render.rb +16 -8
- data/lib/nitro/scaffold.rb +6 -6
- data/lib/nitro/server/runner.rb +12 -0
- data/lib/nitro/session/drbserver.rb +16 -1
- data/proto/public/js/builder.js +97 -0
- data/proto/public/js/controls.js +18 -5
- data/proto/public/js/dragdrop.js +8 -5
- data/proto/public/js/effects.js +185 -4
- data/proto/public/js/prototype.js +432 -178
- data/proto/public/js/scriptaculous.js +6 -2
- data/proto/public/js/slider.js +226 -0
- data/proto/public/js/unittest.js +363 -0
- data/proto/public/media/nitro.png +0 -0
- data/{script → proto/script}/scgi_ctl +0 -0
- data/{script → proto/script}/scgi_service +16 -8
- data/proto/src/skin.rb +24 -0
- data/{lib → src}/part/admin.rb +0 -0
- data/src/part/admin/controller.rb +47 -0
- data/{lib → src}/part/admin/skin.rb +0 -0
- data/src/part/admin/template/denied.xhtml +1 -0
- data/{lib → src}/part/admin/template/index.xhtml +0 -0
- data/test/nitro/{mixin → helper}/tc_pager.rb +2 -2
- data/test/nitro/{mixin → helper}/tc_rss.rb +3 -3
- data/test/nitro/{mixin → helper}/tc_table.rb +3 -3
- data/test/nitro/{mixin → helper}/tc_xhtml.rb +3 -3
- data/test/nitro/tc_caching.rb +4 -1
- data/test/nitro/tc_controller.rb +2 -2
- data/test/nitro/tc_element.rb +30 -0
- data/test/nitro/tc_helper.rb +36 -0
- data/test/nitro/tc_render.rb +1 -1
- metadata +70 -38
- data/lib/nitro/mixin/markup.rb +0 -122
- data/lib/part/admin/controller.rb +0 -28
- data/proto/README +0 -11
- data/proto/doc/README +0 -1
- data/proto/scgi.rb +0 -333
@@ -1,8 +1,8 @@
|
|
1
|
-
/* Prototype JavaScript framework, version 1.4.
|
1
|
+
/* Prototype JavaScript framework, version 1.4.0_rc2
|
2
2
|
* (c) 2005 Sam Stephenson <sam@conio.net>
|
3
3
|
*
|
4
4
|
* THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff
|
5
|
-
* against the source tree, available from the Prototype darcs repository.
|
5
|
+
* against the source tree, available from the Prototype darcs repository.
|
6
6
|
*
|
7
7
|
* Prototype is freely distributable under the terms of an MIT-style license.
|
8
8
|
*
|
@@ -11,15 +11,15 @@
|
|
11
11
|
/*--------------------------------------------------------------------------*/
|
12
12
|
|
13
13
|
var Prototype = {
|
14
|
-
Version: '1.4.
|
15
|
-
|
14
|
+
Version: '1.4.0_rc2',
|
15
|
+
|
16
16
|
emptyFunction: function() {},
|
17
17
|
K: function(x) {return x}
|
18
18
|
}
|
19
19
|
|
20
20
|
var Class = {
|
21
21
|
create: function() {
|
22
|
-
return function() {
|
22
|
+
return function() {
|
23
23
|
this.initialize.apply(this, arguments);
|
24
24
|
}
|
25
25
|
}
|
@@ -69,7 +69,7 @@ Object.extend(Number.prototype, {
|
|
69
69
|
succ: function() {
|
70
70
|
return this + 1;
|
71
71
|
},
|
72
|
-
|
72
|
+
|
73
73
|
times: function(iterator) {
|
74
74
|
$R(0, this, true).each(iterator);
|
75
75
|
return this;
|
@@ -110,10 +110,10 @@ PeriodicalExecuter.prototype = {
|
|
110
110
|
|
111
111
|
onTimerEvent: function() {
|
112
112
|
if (!this.currentlyExecuting) {
|
113
|
-
try {
|
113
|
+
try {
|
114
114
|
this.currentlyExecuting = true;
|
115
|
-
this.callback();
|
116
|
-
} finally {
|
115
|
+
this.callback();
|
116
|
+
} finally {
|
117
117
|
this.currentlyExecuting = false;
|
118
118
|
}
|
119
119
|
}
|
@@ -130,7 +130,7 @@ function $() {
|
|
130
130
|
if (typeof element == 'string')
|
131
131
|
element = document.getElementById(element);
|
132
132
|
|
133
|
-
if (arguments.length == 1)
|
133
|
+
if (arguments.length == 1)
|
134
134
|
return element;
|
135
135
|
|
136
136
|
elements.push(element);
|
@@ -138,7 +138,6 @@ function $() {
|
|
138
138
|
|
139
139
|
return elements;
|
140
140
|
}
|
141
|
-
|
142
141
|
Object.extend(String.prototype, {
|
143
142
|
stripTags: function() {
|
144
143
|
return this.replace(/<\/?[^>]+>/gi, '');
|
@@ -156,7 +155,7 @@ Object.extend(String.prototype, {
|
|
156
155
|
div.innerHTML = this.stripTags();
|
157
156
|
return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
|
158
157
|
},
|
159
|
-
|
158
|
+
|
160
159
|
toQueryParams: function() {
|
161
160
|
var pairs = this.match(/^\??(.*)$/)[1].split('&');
|
162
161
|
return pairs.inject({}, function(params, pairString) {
|
@@ -165,7 +164,27 @@ Object.extend(String.prototype, {
|
|
165
164
|
return params;
|
166
165
|
});
|
167
166
|
},
|
168
|
-
|
167
|
+
|
168
|
+
toArray: function() {
|
169
|
+
return this.split('');
|
170
|
+
},
|
171
|
+
|
172
|
+
camelize: function() {
|
173
|
+
var oStringList = this.split('-');
|
174
|
+
if (oStringList.length == 1) return oStringList[0];
|
175
|
+
|
176
|
+
var camelizedString = this.indexOf('-') == 0
|
177
|
+
? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
|
178
|
+
: oStringList[0];
|
179
|
+
|
180
|
+
for (var i = 1, len = oStringList.length; i < len; i++) {
|
181
|
+
var s = oStringList[i];
|
182
|
+
camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
|
183
|
+
}
|
184
|
+
|
185
|
+
return camelizedString;
|
186
|
+
},
|
187
|
+
|
169
188
|
inspect: function() {
|
170
189
|
return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";
|
171
190
|
}
|
@@ -173,7 +192,6 @@ Object.extend(String.prototype, {
|
|
173
192
|
|
174
193
|
String.prototype.parseQuery = String.prototype.toQueryParams;
|
175
194
|
|
176
|
-
|
177
195
|
var $break = new Object();
|
178
196
|
var $continue = new Object();
|
179
197
|
|
@@ -192,25 +210,25 @@ var Enumerable = {
|
|
192
210
|
if (e != $break) throw e;
|
193
211
|
}
|
194
212
|
},
|
195
|
-
|
213
|
+
|
196
214
|
all: function(iterator) {
|
197
215
|
var result = true;
|
198
216
|
this.each(function(value, index) {
|
199
|
-
if (!(result &= (iterator || Prototype.K)(value, index)))
|
217
|
+
if (!(result &= (iterator || Prototype.K)(value, index)))
|
200
218
|
throw $break;
|
201
219
|
});
|
202
220
|
return result;
|
203
221
|
},
|
204
|
-
|
222
|
+
|
205
223
|
any: function(iterator) {
|
206
224
|
var result = true;
|
207
225
|
this.each(function(value, index) {
|
208
|
-
if (result &= (iterator || Prototype.K)(value, index))
|
226
|
+
if (result &= (iterator || Prototype.K)(value, index))
|
209
227
|
throw $break;
|
210
228
|
});
|
211
229
|
return result;
|
212
230
|
},
|
213
|
-
|
231
|
+
|
214
232
|
collect: function(iterator) {
|
215
233
|
var results = [];
|
216
234
|
this.each(function(value, index) {
|
@@ -218,7 +236,7 @@ var Enumerable = {
|
|
218
236
|
});
|
219
237
|
return results;
|
220
238
|
},
|
221
|
-
|
239
|
+
|
222
240
|
detect: function (iterator) {
|
223
241
|
var result;
|
224
242
|
this.each(function(value, index) {
|
@@ -229,7 +247,7 @@ var Enumerable = {
|
|
229
247
|
});
|
230
248
|
return result;
|
231
249
|
},
|
232
|
-
|
250
|
+
|
233
251
|
findAll: function(iterator) {
|
234
252
|
var results = [];
|
235
253
|
this.each(function(value, index) {
|
@@ -238,7 +256,7 @@ var Enumerable = {
|
|
238
256
|
});
|
239
257
|
return results;
|
240
258
|
},
|
241
|
-
|
259
|
+
|
242
260
|
grep: function(pattern, iterator) {
|
243
261
|
var results = [];
|
244
262
|
this.each(function(value, index) {
|
@@ -248,7 +266,7 @@ var Enumerable = {
|
|
248
266
|
})
|
249
267
|
return results;
|
250
268
|
},
|
251
|
-
|
269
|
+
|
252
270
|
include: function(object) {
|
253
271
|
var found = false;
|
254
272
|
this.each(function(value) {
|
@@ -259,21 +277,21 @@ var Enumerable = {
|
|
259
277
|
});
|
260
278
|
return found;
|
261
279
|
},
|
262
|
-
|
280
|
+
|
263
281
|
inject: function(memo, iterator) {
|
264
282
|
this.each(function(value, index) {
|
265
283
|
memo = iterator(memo, value, index);
|
266
284
|
});
|
267
285
|
return memo;
|
268
286
|
},
|
269
|
-
|
287
|
+
|
270
288
|
invoke: function(method) {
|
271
289
|
var args = $A(arguments).slice(1);
|
272
290
|
return this.collect(function(value) {
|
273
291
|
return value[method].apply(value, args);
|
274
292
|
});
|
275
293
|
},
|
276
|
-
|
294
|
+
|
277
295
|
max: function(iterator) {
|
278
296
|
var result;
|
279
297
|
this.each(function(value, index) {
|
@@ -283,7 +301,7 @@ var Enumerable = {
|
|
283
301
|
});
|
284
302
|
return result;
|
285
303
|
},
|
286
|
-
|
304
|
+
|
287
305
|
min: function(iterator) {
|
288
306
|
var result;
|
289
307
|
this.each(function(value, index) {
|
@@ -293,16 +311,16 @@ var Enumerable = {
|
|
293
311
|
});
|
294
312
|
return result;
|
295
313
|
},
|
296
|
-
|
314
|
+
|
297
315
|
partition: function(iterator) {
|
298
316
|
var trues = [], falses = [];
|
299
317
|
this.each(function(value, index) {
|
300
|
-
((iterator || Prototype.K)(value, index) ?
|
318
|
+
((iterator || Prototype.K)(value, index) ?
|
301
319
|
trues : falses).push(value);
|
302
320
|
});
|
303
321
|
return [trues, falses];
|
304
322
|
},
|
305
|
-
|
323
|
+
|
306
324
|
pluck: function(property) {
|
307
325
|
var results = [];
|
308
326
|
this.each(function(value, index) {
|
@@ -310,7 +328,7 @@ var Enumerable = {
|
|
310
328
|
});
|
311
329
|
return results;
|
312
330
|
},
|
313
|
-
|
331
|
+
|
314
332
|
reject: function(iterator) {
|
315
333
|
var results = [];
|
316
334
|
this.each(function(value, index) {
|
@@ -319,7 +337,7 @@ var Enumerable = {
|
|
319
337
|
});
|
320
338
|
return results;
|
321
339
|
},
|
322
|
-
|
340
|
+
|
323
341
|
sortBy: function(iterator) {
|
324
342
|
return this.collect(function(value, index) {
|
325
343
|
return {value: value, criteria: iterator(value, index)};
|
@@ -328,11 +346,11 @@ var Enumerable = {
|
|
328
346
|
return a < b ? -1 : a > b ? 1 : 0;
|
329
347
|
}).pluck('value');
|
330
348
|
},
|
331
|
-
|
349
|
+
|
332
350
|
toArray: function() {
|
333
351
|
return this.collect(Prototype.K);
|
334
352
|
},
|
335
|
-
|
353
|
+
|
336
354
|
zip: function() {
|
337
355
|
var iterator = Prototype.K, args = $A(arguments);
|
338
356
|
if (typeof args.last() == 'function')
|
@@ -344,7 +362,7 @@ var Enumerable = {
|
|
344
362
|
return value;
|
345
363
|
});
|
346
364
|
},
|
347
|
-
|
365
|
+
|
348
366
|
inspect: function() {
|
349
367
|
return '#<Enumerable:' + this.toArray().inspect() + '>';
|
350
368
|
}
|
@@ -357,7 +375,6 @@ Object.extend(Enumerable, {
|
|
357
375
|
member: Enumerable.include,
|
358
376
|
entries: Enumerable.toArray
|
359
377
|
});
|
360
|
-
|
361
378
|
var $A = Array.from = function(iterable) {
|
362
379
|
if (iterable.toArray) {
|
363
380
|
return iterable.toArray();
|
@@ -376,74 +393,86 @@ Object.extend(Array.prototype, {
|
|
376
393
|
for (var i = 0; i < this.length; i++)
|
377
394
|
iterator(this[i]);
|
378
395
|
},
|
379
|
-
|
396
|
+
|
380
397
|
first: function() {
|
381
398
|
return this[0];
|
382
399
|
},
|
383
|
-
|
400
|
+
|
384
401
|
last: function() {
|
385
402
|
return this[this.length - 1];
|
386
403
|
},
|
387
|
-
|
404
|
+
|
388
405
|
compact: function() {
|
389
406
|
return this.select(function(value) {
|
390
407
|
return value != undefined || value != null;
|
391
408
|
});
|
392
409
|
},
|
393
|
-
|
410
|
+
|
394
411
|
flatten: function() {
|
395
412
|
return this.inject([], function(array, value) {
|
396
413
|
return array.concat(value.constructor == Array ?
|
397
414
|
value.flatten() : [value]);
|
398
415
|
});
|
399
416
|
},
|
400
|
-
|
417
|
+
|
401
418
|
without: function() {
|
402
419
|
var values = $A(arguments);
|
403
420
|
return this.select(function(value) {
|
404
421
|
return !values.include(value);
|
405
422
|
});
|
406
423
|
},
|
407
|
-
|
424
|
+
|
425
|
+
indexOf: function(object) {
|
426
|
+
for (var i = 0; i < this.length; i++)
|
427
|
+
if (this[i] == object) return i;
|
428
|
+
return false;
|
429
|
+
},
|
430
|
+
|
431
|
+
reverse: function() {
|
432
|
+
var result = [];
|
433
|
+
for (var i = this.length; i > 0; i--)
|
434
|
+
result.push(this[i-1]);
|
435
|
+
return result;
|
436
|
+
},
|
437
|
+
|
408
438
|
inspect: function() {
|
409
439
|
return '[' + this.map(Object.inspect).join(', ') + ']';
|
410
440
|
}
|
411
441
|
});
|
412
|
-
|
413
442
|
var Hash = {
|
414
443
|
_each: function(iterator) {
|
415
444
|
for (key in this) {
|
416
445
|
var value = this[key];
|
417
446
|
if (typeof value == 'function') continue;
|
418
|
-
|
447
|
+
|
419
448
|
var pair = [key, value];
|
420
449
|
pair.key = key;
|
421
450
|
pair.value = value;
|
422
451
|
iterator(pair);
|
423
452
|
}
|
424
453
|
},
|
425
|
-
|
454
|
+
|
426
455
|
keys: function() {
|
427
456
|
return this.pluck('key');
|
428
457
|
},
|
429
|
-
|
458
|
+
|
430
459
|
values: function() {
|
431
460
|
return this.pluck('value');
|
432
461
|
},
|
433
|
-
|
462
|
+
|
434
463
|
merge: function(hash) {
|
435
464
|
return $H(hash).inject($H(this), function(mergedHash, pair) {
|
436
465
|
mergedHash[pair.key] = pair.value;
|
437
466
|
return mergedHash;
|
438
467
|
});
|
439
468
|
},
|
440
|
-
|
469
|
+
|
441
470
|
toQueryString: function() {
|
442
471
|
return this.map(function(pair) {
|
443
472
|
return pair.map(encodeURIComponent).join('=');
|
444
473
|
}).join('&');
|
445
474
|
},
|
446
|
-
|
475
|
+
|
447
476
|
inspect: function() {
|
448
477
|
return '#<Hash:{' + this.map(function(pair) {
|
449
478
|
return pair.map(Object.inspect).join(': ');
|
@@ -457,7 +486,6 @@ function $H(object) {
|
|
457
486
|
Object.extend(hash, Hash);
|
458
487
|
return hash;
|
459
488
|
}
|
460
|
-
|
461
489
|
var Range = Class.create();
|
462
490
|
Object.extend(Range.prototype, Enumerable);
|
463
491
|
Object.extend(Range.prototype, {
|
@@ -466,7 +494,7 @@ Object.extend(Range.prototype, {
|
|
466
494
|
this.end = end;
|
467
495
|
this.exclusive = exclusive;
|
468
496
|
},
|
469
|
-
|
497
|
+
|
470
498
|
_each: function(iterator) {
|
471
499
|
var value = this.start;
|
472
500
|
do {
|
@@ -474,9 +502,9 @@ Object.extend(Range.prototype, {
|
|
474
502
|
value = value.succ();
|
475
503
|
} while (this.include(value));
|
476
504
|
},
|
477
|
-
|
505
|
+
|
478
506
|
include: function(value) {
|
479
|
-
if (value < this.start)
|
507
|
+
if (value < this.start)
|
480
508
|
return false;
|
481
509
|
if (this.exclusive)
|
482
510
|
return value < this.end;
|
@@ -496,13 +524,13 @@ var Ajax = {
|
|
496
524
|
function() {return new XMLHttpRequest()}
|
497
525
|
) || false;
|
498
526
|
},
|
499
|
-
|
527
|
+
|
500
528
|
activeRequestCount: 0
|
501
529
|
}
|
502
530
|
|
503
531
|
Ajax.Responders = {
|
504
532
|
responders: [],
|
505
|
-
|
533
|
+
|
506
534
|
_each: function(iterator) {
|
507
535
|
this.responders._each(iterator);
|
508
536
|
},
|
@@ -511,11 +539,11 @@ Ajax.Responders = {
|
|
511
539
|
if (!this.include(responderToAdd))
|
512
540
|
this.responders.push(responderToAdd);
|
513
541
|
},
|
514
|
-
|
542
|
+
|
515
543
|
unregister: function(responderToRemove) {
|
516
544
|
this.responders = this.responders.without(responderToRemove);
|
517
545
|
},
|
518
|
-
|
546
|
+
|
519
547
|
dispatch: function(callback, request, transport, json) {
|
520
548
|
this.each(function(responder) {
|
521
549
|
if (responder[callback] && typeof responder[callback] == 'function') {
|
@@ -534,7 +562,7 @@ Ajax.Responders.register({
|
|
534
562
|
onCreate: function() {
|
535
563
|
Ajax.activeRequestCount++;
|
536
564
|
},
|
537
|
-
|
565
|
+
|
538
566
|
onComplete: function() {
|
539
567
|
Ajax.activeRequestCount--;
|
540
568
|
}
|
@@ -553,7 +581,7 @@ Ajax.Base.prototype = {
|
|
553
581
|
|
554
582
|
responseIsSuccess: function() {
|
555
583
|
return this.transport.status == undefined
|
556
|
-
|| this.transport.status == 0
|
584
|
+
|| this.transport.status == 0
|
557
585
|
|| (this.transport.status >= 200 && this.transport.status < 300);
|
558
586
|
},
|
559
587
|
|
@@ -563,7 +591,7 @@ Ajax.Base.prototype = {
|
|
563
591
|
}
|
564
592
|
|
565
593
|
Ajax.Request = Class.create();
|
566
|
-
Ajax.Request.Events =
|
594
|
+
Ajax.Request.Events =
|
567
595
|
['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
|
568
596
|
|
569
597
|
Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
|
@@ -579,12 +607,12 @@ Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
|
|
579
607
|
|
580
608
|
try {
|
581
609
|
this.url = url;
|
582
|
-
if (this.options.method == 'get')
|
583
|
-
this.url += '?' + parameters;
|
584
|
-
|
610
|
+
if (this.options.method == 'get' && parameters.length > 0)
|
611
|
+
this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;
|
612
|
+
|
585
613
|
Ajax.Responders.dispatch('onCreate', this, this.transport);
|
586
|
-
|
587
|
-
this.transport.open(this.options.method, this.url,
|
614
|
+
|
615
|
+
this.transport.open(this.options.method, this.url,
|
588
616
|
this.options.asynchronous);
|
589
617
|
|
590
618
|
if (this.options.asynchronous) {
|
@@ -598,21 +626,23 @@ Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
|
|
598
626
|
this.transport.send(this.options.method == 'post' ? body : null);
|
599
627
|
|
600
628
|
} catch (e) {
|
629
|
+
(this.options.onException || Prototype.emptyFunction)(this, e);
|
630
|
+
Ajax.Responders.dispatch('onException', this, e);
|
601
631
|
}
|
602
632
|
},
|
603
633
|
|
604
634
|
setRequestHeaders: function() {
|
605
|
-
var requestHeaders =
|
635
|
+
var requestHeaders =
|
606
636
|
['X-Requested-With', 'XMLHttpRequest',
|
607
637
|
'X-Prototype-Version', Prototype.Version];
|
608
638
|
|
609
639
|
if (this.options.method == 'post') {
|
610
|
-
requestHeaders.push('Content-type',
|
640
|
+
requestHeaders.push('Content-type',
|
611
641
|
'application/x-www-form-urlencoded');
|
612
642
|
|
613
643
|
/* Force "Connection: close" for Mozilla browsers to work around
|
614
644
|
* a bug where XMLHttpReqeuest sends an incorrect Content-length
|
615
|
-
* header. See Mozilla Bugzilla #246651.
|
645
|
+
* header. See Mozilla Bugzilla #246651.
|
616
646
|
*/
|
617
647
|
if (this.transport.overrideMimeType)
|
618
648
|
requestHeaders.push('Connection', 'close');
|
@@ -630,7 +660,7 @@ Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
|
|
630
660
|
if (readyState != 1)
|
631
661
|
this.respondToReadyState(this.transport.readyState);
|
632
662
|
},
|
633
|
-
|
663
|
+
|
634
664
|
evalJSON: function() {
|
635
665
|
try {
|
636
666
|
var json = this.transport.getResponseHeader('X-JSON'), object;
|
@@ -719,7 +749,7 @@ Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
|
|
719
749
|
this.onComplete = this.options.onComplete;
|
720
750
|
|
721
751
|
this.frequency = (this.options.frequency || 2);
|
722
|
-
this.decay = 1;
|
752
|
+
this.decay = (this.options.decay || 1);
|
723
753
|
|
724
754
|
this.updater = {};
|
725
755
|
this.container = container;
|
@@ -736,17 +766,17 @@ Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
|
|
736
766
|
stop: function() {
|
737
767
|
this.updater.onComplete = undefined;
|
738
768
|
clearTimeout(this.timer);
|
739
|
-
(this.onComplete ||
|
769
|
+
(this.onComplete || Prototype.emptyFunction).apply(this, arguments);
|
740
770
|
},
|
741
771
|
|
742
772
|
updateComplete: function(request) {
|
743
773
|
if (this.options.decay) {
|
744
|
-
this.decay = (request.responseText == this.lastText ?
|
774
|
+
this.decay = (request.responseText == this.lastText ?
|
745
775
|
this.decay * this.options.decay : 1);
|
746
776
|
|
747
777
|
this.lastText = request.responseText;
|
748
778
|
}
|
749
|
-
this.timer = setTimeout(this.onTimerEvent.bind(this),
|
779
|
+
this.timer = setTimeout(this.onTimerEvent.bind(this),
|
750
780
|
this.decay * this.frequency * 1000);
|
751
781
|
},
|
752
782
|
|
@@ -754,11 +784,10 @@ Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
|
|
754
784
|
this.updater = new Ajax.Updater(this.container, this.url, this.options);
|
755
785
|
}
|
756
786
|
});
|
757
|
-
|
758
787
|
document.getElementsByClassName = function(className, parentElement) {
|
759
|
-
var children = (
|
788
|
+
var children = ($(parentElement) || document.body).getElementsByTagName('*');
|
760
789
|
return $A(children).inject([], function(elements, child) {
|
761
|
-
if (
|
790
|
+
if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
|
762
791
|
elements.push(child);
|
763
792
|
return elements;
|
764
793
|
});
|
@@ -774,11 +803,11 @@ Object.extend(Element, {
|
|
774
803
|
visible: function(element) {
|
775
804
|
return $(element).style.display != 'none';
|
776
805
|
},
|
777
|
-
|
806
|
+
|
778
807
|
toggle: function() {
|
779
808
|
for (var i = 0; i < arguments.length; i++) {
|
780
809
|
var element = $(arguments[i]);
|
781
|
-
Element[Element.visible(element) ? '
|
810
|
+
Element[Element.visible(element) ? 'hide' : 'show'](element);
|
782
811
|
}
|
783
812
|
},
|
784
813
|
|
@@ -788,7 +817,7 @@ Object.extend(Element, {
|
|
788
817
|
element.style.display = 'none';
|
789
818
|
}
|
790
819
|
},
|
791
|
-
|
820
|
+
|
792
821
|
show: function() {
|
793
822
|
for (var i = 0; i < arguments.length; i++) {
|
794
823
|
var element = $(arguments[i]);
|
@@ -800,12 +829,12 @@ Object.extend(Element, {
|
|
800
829
|
element = $(element);
|
801
830
|
element.parentNode.removeChild(element);
|
802
831
|
},
|
803
|
-
|
832
|
+
|
804
833
|
getHeight: function(element) {
|
805
834
|
element = $(element);
|
806
|
-
return element.offsetHeight;
|
835
|
+
return element.offsetHeight;
|
807
836
|
},
|
808
|
-
|
837
|
+
|
809
838
|
classNames: function(element) {
|
810
839
|
return new Element.ClassNames(element);
|
811
840
|
},
|
@@ -824,26 +853,107 @@ Object.extend(Element, {
|
|
824
853
|
if (!(element = $(element))) return;
|
825
854
|
return Element.classNames(element).remove(className);
|
826
855
|
},
|
827
|
-
|
856
|
+
|
828
857
|
// removes whitespace-only text node children
|
829
858
|
cleanWhitespace: function(element) {
|
830
859
|
element = $(element);
|
831
860
|
for (var i = 0; i < element.childNodes.length; i++) {
|
832
861
|
var node = element.childNodes[i];
|
833
|
-
if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
|
862
|
+
if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
|
834
863
|
Element.remove(node);
|
835
864
|
}
|
836
865
|
},
|
837
|
-
|
866
|
+
|
838
867
|
empty: function(element) {
|
839
868
|
return $(element).innerHTML.match(/^\s*$/);
|
840
869
|
},
|
841
|
-
|
870
|
+
|
842
871
|
scrollTo: function(element) {
|
843
872
|
element = $(element);
|
844
873
|
var x = element.x ? element.x : element.offsetLeft,
|
845
874
|
y = element.y ? element.y : element.offsetTop;
|
846
875
|
window.scrollTo(x, y);
|
876
|
+
},
|
877
|
+
|
878
|
+
getStyle: function(element, style) {
|
879
|
+
element = $(element);
|
880
|
+
var value = element.style[style.camelize()];
|
881
|
+
if (!value) {
|
882
|
+
if (document.defaultView && document.defaultView.getComputedStyle) {
|
883
|
+
var css = document.defaultView.getComputedStyle(element, null);
|
884
|
+
value = css ? css.getPropertyValue(style) : null;
|
885
|
+
} else if (element.currentStyle) {
|
886
|
+
value = element.currentStyle[style.camelize()];
|
887
|
+
}
|
888
|
+
}
|
889
|
+
|
890
|
+
if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
|
891
|
+
if (Element.getStyle(element, 'position') == 'static') value = 'auto';
|
892
|
+
|
893
|
+
return value == 'auto' ? null : value;
|
894
|
+
},
|
895
|
+
|
896
|
+
getDimensions: function(element) {
|
897
|
+
element = $(element);
|
898
|
+
if (Element.getStyle(element, 'display') != 'none')
|
899
|
+
return {width: element.offsetWidth, height: element.offsetHeight};
|
900
|
+
|
901
|
+
// All *Width and *Height properties give 0 on elements with display none,
|
902
|
+
// so enable the element temporarily
|
903
|
+
var els = element.style;
|
904
|
+
var originalVisibility = els.visibility;
|
905
|
+
var originalPosition = els.position;
|
906
|
+
els.visibility = 'hidden';
|
907
|
+
els.position = 'absolute';
|
908
|
+
els.display = '';
|
909
|
+
var originalWidth = element.clientWidth;
|
910
|
+
var originalHeight = element.clientHeight;
|
911
|
+
els.display = 'none';
|
912
|
+
els.position = originalPosition;
|
913
|
+
els.visibility = originalVisibility;
|
914
|
+
return {width: originalWidth, height: originalHeight};
|
915
|
+
},
|
916
|
+
|
917
|
+
makePositioned: function(element) {
|
918
|
+
element = $(element);
|
919
|
+
var pos = Element.getStyle(element, 'position');
|
920
|
+
if (pos == 'static' || !pos) {
|
921
|
+
element._madePositioned = true;
|
922
|
+
element.style.position = 'relative';
|
923
|
+
// Opera returns the offset relative to the positioning context, when an
|
924
|
+
// element is position relative but top and left have not been defined
|
925
|
+
if (window.opera) {
|
926
|
+
element.style.top = 0;
|
927
|
+
element.style.left = 0;
|
928
|
+
}
|
929
|
+
}
|
930
|
+
},
|
931
|
+
|
932
|
+
undoPositioned: function(element) {
|
933
|
+
element = $(element);
|
934
|
+
if (element._madePositioned) {
|
935
|
+
element._madePositioned = undefined;
|
936
|
+
element.style.position =
|
937
|
+
element.style.top =
|
938
|
+
element.style.left =
|
939
|
+
element.style.bottom =
|
940
|
+
element.style.right = '';
|
941
|
+
}
|
942
|
+
},
|
943
|
+
|
944
|
+
makeClipping: function(element) {
|
945
|
+
element = $(element);
|
946
|
+
if (element._overflow) return;
|
947
|
+
element._overflow = element.style.overflow;
|
948
|
+
if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
|
949
|
+
element.style.overflow = 'hidden';
|
950
|
+
},
|
951
|
+
|
952
|
+
undoClipping: function(element) {
|
953
|
+
element = $(element);
|
954
|
+
if (element._overflow) return;
|
955
|
+
element.style.overflow = element._overflow;
|
956
|
+
element._overflow = undefined;
|
847
957
|
}
|
848
958
|
});
|
849
959
|
|
@@ -860,14 +970,13 @@ Abstract.Insertion.prototype = {
|
|
860
970
|
initialize: function(element, content) {
|
861
971
|
this.element = $(element);
|
862
972
|
this.content = content;
|
863
|
-
|
973
|
+
|
864
974
|
if (this.adjacency && this.element.insertAdjacentHTML) {
|
865
975
|
try {
|
866
976
|
this.element.insertAdjacentHTML(this.adjacency, this.content);
|
867
977
|
} catch (e) {
|
868
978
|
if (this.element.tagName.toLowerCase() == 'tbody') {
|
869
|
-
this.
|
870
|
-
this.insertContent();
|
979
|
+
this.insertContent(this.contentFromAnonymousTable());
|
871
980
|
} else {
|
872
981
|
throw e;
|
873
982
|
}
|
@@ -875,15 +984,14 @@ Abstract.Insertion.prototype = {
|
|
875
984
|
} else {
|
876
985
|
this.range = this.element.ownerDocument.createRange();
|
877
986
|
if (this.initializeRange) this.initializeRange();
|
878
|
-
this.
|
879
|
-
this.insertContent();
|
987
|
+
this.insertContent([this.range.createContextualFragment(this.content)]);
|
880
988
|
}
|
881
989
|
},
|
882
|
-
|
990
|
+
|
883
991
|
contentFromAnonymousTable: function() {
|
884
992
|
var div = document.createElement('div');
|
885
993
|
div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
|
886
|
-
return div.childNodes[0].childNodes[0].childNodes
|
994
|
+
return $A(div.childNodes[0].childNodes[0].childNodes);
|
887
995
|
}
|
888
996
|
}
|
889
997
|
|
@@ -894,9 +1002,11 @@ Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin')
|
|
894
1002
|
initializeRange: function() {
|
895
1003
|
this.range.setStartBefore(this.element);
|
896
1004
|
},
|
897
|
-
|
898
|
-
insertContent: function() {
|
899
|
-
|
1005
|
+
|
1006
|
+
insertContent: function(fragments) {
|
1007
|
+
fragments.each((function(fragment) {
|
1008
|
+
this.element.parentNode.insertBefore(fragment, this.element);
|
1009
|
+
}).bind(this));
|
900
1010
|
}
|
901
1011
|
});
|
902
1012
|
|
@@ -906,9 +1016,11 @@ Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
|
|
906
1016
|
this.range.selectNodeContents(this.element);
|
907
1017
|
this.range.collapse(true);
|
908
1018
|
},
|
909
|
-
|
910
|
-
insertContent: function() {
|
911
|
-
|
1019
|
+
|
1020
|
+
insertContent: function(fragments) {
|
1021
|
+
fragments.reverse().each((function(fragment) {
|
1022
|
+
this.element.insertBefore(fragment, this.element.firstChild);
|
1023
|
+
}).bind(this));
|
912
1024
|
}
|
913
1025
|
});
|
914
1026
|
|
@@ -918,9 +1030,11 @@ Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'),
|
|
918
1030
|
this.range.selectNodeContents(this.element);
|
919
1031
|
this.range.collapse(this.element);
|
920
1032
|
},
|
921
|
-
|
922
|
-
insertContent: function() {
|
923
|
-
|
1033
|
+
|
1034
|
+
insertContent: function(fragments) {
|
1035
|
+
fragments.each((function(fragment) {
|
1036
|
+
this.element.appendChild(fragment);
|
1037
|
+
}).bind(this));
|
924
1038
|
}
|
925
1039
|
});
|
926
1040
|
|
@@ -929,10 +1043,12 @@ Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
|
|
929
1043
|
initializeRange: function() {
|
930
1044
|
this.range.setStartAfter(this.element);
|
931
1045
|
},
|
932
|
-
|
933
|
-
insertContent: function() {
|
934
|
-
|
935
|
-
this.element.
|
1046
|
+
|
1047
|
+
insertContent: function(fragments) {
|
1048
|
+
fragments.each((function(fragment) {
|
1049
|
+
this.element.parentNode.insertBefore(fragment,
|
1050
|
+
this.element.nextSibling);
|
1051
|
+
}).bind(this));
|
936
1052
|
}
|
937
1053
|
});
|
938
1054
|
|
@@ -949,30 +1065,29 @@ Element.ClassNames.prototype = {
|
|
949
1065
|
return name.length > 0;
|
950
1066
|
})._each(iterator);
|
951
1067
|
},
|
952
|
-
|
1068
|
+
|
953
1069
|
set: function(className) {
|
954
1070
|
this.element.className = className;
|
955
1071
|
},
|
956
|
-
|
1072
|
+
|
957
1073
|
add: function(classNameToAdd) {
|
958
1074
|
if (this.include(classNameToAdd)) return;
|
959
1075
|
this.set(this.toArray().concat(classNameToAdd).join(' '));
|
960
1076
|
},
|
961
|
-
|
1077
|
+
|
962
1078
|
remove: function(classNameToRemove) {
|
963
1079
|
if (!this.include(classNameToRemove)) return;
|
964
1080
|
this.set(this.select(function(className) {
|
965
1081
|
return className != classNameToRemove;
|
966
1082
|
}));
|
967
1083
|
},
|
968
|
-
|
1084
|
+
|
969
1085
|
toString: function() {
|
970
1086
|
return this.toArray().join(' ');
|
971
1087
|
}
|
972
1088
|
}
|
973
1089
|
|
974
1090
|
Object.extend(Element.ClassNames.prototype, Enumerable);
|
975
|
-
|
976
1091
|
var Field = {
|
977
1092
|
clear: function() {
|
978
1093
|
for (var i = 0; i < arguments.length; i++)
|
@@ -982,17 +1097,17 @@ var Field = {
|
|
982
1097
|
focus: function(element) {
|
983
1098
|
$(element).focus();
|
984
1099
|
},
|
985
|
-
|
1100
|
+
|
986
1101
|
present: function() {
|
987
1102
|
for (var i = 0; i < arguments.length; i++)
|
988
1103
|
if ($(arguments[i]).value == '') return false;
|
989
1104
|
return true;
|
990
1105
|
},
|
991
|
-
|
1106
|
+
|
992
1107
|
select: function(element) {
|
993
1108
|
$(element).select();
|
994
1109
|
},
|
995
|
-
|
1110
|
+
|
996
1111
|
activate: function(element) {
|
997
1112
|
$(element).focus();
|
998
1113
|
$(element).select();
|
@@ -1005,18 +1120,18 @@ var Form = {
|
|
1005
1120
|
serialize: function(form) {
|
1006
1121
|
var elements = Form.getElements($(form));
|
1007
1122
|
var queryComponents = new Array();
|
1008
|
-
|
1123
|
+
|
1009
1124
|
for (var i = 0; i < elements.length; i++) {
|
1010
1125
|
var queryComponent = Form.Element.serialize(elements[i]);
|
1011
1126
|
if (queryComponent)
|
1012
1127
|
queryComponents.push(queryComponent);
|
1013
1128
|
}
|
1014
|
-
|
1129
|
+
|
1015
1130
|
return queryComponents.join('&');
|
1016
1131
|
},
|
1017
|
-
|
1132
|
+
|
1018
1133
|
getElements: function(form) {
|
1019
|
-
|
1134
|
+
form = $(form);
|
1020
1135
|
var elements = new Array();
|
1021
1136
|
|
1022
1137
|
for (tagName in Form.Element.Serializers) {
|
@@ -1026,19 +1141,19 @@ var Form = {
|
|
1026
1141
|
}
|
1027
1142
|
return elements;
|
1028
1143
|
},
|
1029
|
-
|
1144
|
+
|
1030
1145
|
getInputs: function(form, typeName, name) {
|
1031
|
-
|
1146
|
+
form = $(form);
|
1032
1147
|
var inputs = form.getElementsByTagName('input');
|
1033
|
-
|
1148
|
+
|
1034
1149
|
if (!typeName && !name)
|
1035
1150
|
return inputs;
|
1036
|
-
|
1151
|
+
|
1037
1152
|
var matchingInputs = new Array();
|
1038
1153
|
for (var i = 0; i < inputs.length; i++) {
|
1039
1154
|
var input = inputs[i];
|
1040
1155
|
if ((typeName && input.type != typeName) ||
|
1041
|
-
(name && input.name != name))
|
1156
|
+
(name && input.name != name))
|
1042
1157
|
continue;
|
1043
1158
|
matchingInputs.push(input);
|
1044
1159
|
}
|
@@ -1064,7 +1179,7 @@ var Form = {
|
|
1064
1179
|
},
|
1065
1180
|
|
1066
1181
|
focusFirstElement: function(form) {
|
1067
|
-
|
1182
|
+
form = $(form);
|
1068
1183
|
var elements = Form.getElements(form);
|
1069
1184
|
for (var i = 0; i < elements.length; i++) {
|
1070
1185
|
var element = elements[i];
|
@@ -1082,21 +1197,21 @@ var Form = {
|
|
1082
1197
|
|
1083
1198
|
Form.Element = {
|
1084
1199
|
serialize: function(element) {
|
1085
|
-
|
1200
|
+
element = $(element);
|
1086
1201
|
var method = element.tagName.toLowerCase();
|
1087
1202
|
var parameter = Form.Element.Serializers[method](element);
|
1088
|
-
|
1203
|
+
|
1089
1204
|
if (parameter)
|
1090
|
-
return encodeURIComponent(parameter[0]) + '=' +
|
1091
|
-
encodeURIComponent(parameter[1]);
|
1205
|
+
return encodeURIComponent(parameter[0]) + '=' +
|
1206
|
+
encodeURIComponent(parameter[1]);
|
1092
1207
|
},
|
1093
|
-
|
1208
|
+
|
1094
1209
|
getValue: function(element) {
|
1095
|
-
|
1210
|
+
element = $(element);
|
1096
1211
|
var method = element.tagName.toLowerCase();
|
1097
1212
|
var parameter = Form.Element.Serializers[method](element);
|
1098
|
-
|
1099
|
-
if (parameter)
|
1213
|
+
|
1214
|
+
if (parameter)
|
1100
1215
|
return parameter[1];
|
1101
1216
|
}
|
1102
1217
|
}
|
@@ -1109,7 +1224,7 @@ Form.Element.Serializers = {
|
|
1109
1224
|
case 'password':
|
1110
1225
|
case 'text':
|
1111
1226
|
return Form.Element.Serializers.textarea(element);
|
1112
|
-
case 'checkbox':
|
1227
|
+
case 'checkbox':
|
1113
1228
|
case 'radio':
|
1114
1229
|
return Form.Element.Serializers.inputSelector(element);
|
1115
1230
|
}
|
@@ -1124,12 +1239,12 @@ Form.Element.Serializers = {
|
|
1124
1239
|
textarea: function(element) {
|
1125
1240
|
return [element.name, element.value];
|
1126
1241
|
},
|
1127
|
-
|
1242
|
+
|
1128
1243
|
select: function(element) {
|
1129
|
-
return Form.Element.Serializers[element.type == 'select-one' ?
|
1244
|
+
return Form.Element.Serializers[element.type == 'select-one' ?
|
1130
1245
|
'selectOne' : 'selectMany'](element);
|
1131
1246
|
},
|
1132
|
-
|
1247
|
+
|
1133
1248
|
selectOne: function(element) {
|
1134
1249
|
var value = '', opt, index = element.selectedIndex;
|
1135
1250
|
if (index >= 0) {
|
@@ -1140,7 +1255,7 @@ Form.Element.Serializers = {
|
|
1140
1255
|
}
|
1141
1256
|
return [element.name, value];
|
1142
1257
|
},
|
1143
|
-
|
1258
|
+
|
1144
1259
|
selectMany: function(element) {
|
1145
1260
|
var value = new Array();
|
1146
1261
|
for (var i = 0; i < element.length; i++) {
|
@@ -1168,15 +1283,15 @@ Abstract.TimedObserver.prototype = {
|
|
1168
1283
|
this.frequency = frequency;
|
1169
1284
|
this.element = $(element);
|
1170
1285
|
this.callback = callback;
|
1171
|
-
|
1286
|
+
|
1172
1287
|
this.lastValue = this.getValue();
|
1173
1288
|
this.registerCallback();
|
1174
1289
|
},
|
1175
|
-
|
1290
|
+
|
1176
1291
|
registerCallback: function() {
|
1177
1292
|
setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
|
1178
1293
|
},
|
1179
|
-
|
1294
|
+
|
1180
1295
|
onTimerEvent: function() {
|
1181
1296
|
var value = this.getValue();
|
1182
1297
|
if (this.lastValue != value) {
|
@@ -1207,14 +1322,14 @@ Abstract.EventObserver.prototype = {
|
|
1207
1322
|
initialize: function(element, callback) {
|
1208
1323
|
this.element = $(element);
|
1209
1324
|
this.callback = callback;
|
1210
|
-
|
1325
|
+
|
1211
1326
|
this.lastValue = this.getValue();
|
1212
1327
|
if (this.element.tagName.toLowerCase() == 'form')
|
1213
1328
|
this.registerFormCallbacks();
|
1214
1329
|
else
|
1215
1330
|
this.registerCallback(this.element);
|
1216
1331
|
},
|
1217
|
-
|
1332
|
+
|
1218
1333
|
onElementEvent: function() {
|
1219
1334
|
var value = this.getValue();
|
1220
1335
|
if (this.lastValue != value) {
|
@@ -1222,22 +1337,22 @@ Abstract.EventObserver.prototype = {
|
|
1222
1337
|
this.lastValue = value;
|
1223
1338
|
}
|
1224
1339
|
},
|
1225
|
-
|
1340
|
+
|
1226
1341
|
registerFormCallbacks: function() {
|
1227
1342
|
var elements = Form.getElements(this.element);
|
1228
1343
|
for (var i = 0; i < elements.length; i++)
|
1229
1344
|
this.registerCallback(elements[i]);
|
1230
1345
|
},
|
1231
|
-
|
1346
|
+
|
1232
1347
|
registerCallback: function(element) {
|
1233
1348
|
if (element.type) {
|
1234
1349
|
switch (element.type.toLowerCase()) {
|
1235
|
-
case 'checkbox':
|
1350
|
+
case 'checkbox':
|
1236
1351
|
case 'radio':
|
1237
1352
|
element.target = this;
|
1238
1353
|
element.prev_onclick = element.onclick || Prototype.emptyFunction;
|
1239
1354
|
element.onclick = function() {
|
1240
|
-
this.prev_onclick();
|
1355
|
+
this.prev_onclick();
|
1241
1356
|
this.target.onElementEvent();
|
1242
1357
|
}
|
1243
1358
|
break;
|
@@ -1249,12 +1364,12 @@ Abstract.EventObserver.prototype = {
|
|
1249
1364
|
element.target = this;
|
1250
1365
|
element.prev_onchange = element.onchange || Prototype.emptyFunction;
|
1251
1366
|
element.onchange = function() {
|
1252
|
-
this.prev_onchange();
|
1367
|
+
this.prev_onchange();
|
1253
1368
|
this.target.onElementEvent();
|
1254
1369
|
}
|
1255
1370
|
break;
|
1256
1371
|
}
|
1257
|
-
}
|
1372
|
+
}
|
1258
1373
|
}
|
1259
1374
|
}
|
1260
1375
|
|
@@ -1271,8 +1386,6 @@ Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
|
|
1271
1386
|
return Form.serialize(this.element);
|
1272
1387
|
}
|
1273
1388
|
});
|
1274
|
-
|
1275
|
-
|
1276
1389
|
if (!window.Event) {
|
1277
1390
|
var Event = new Object();
|
1278
1391
|
}
|
@@ -1298,19 +1411,19 @@ Object.extend(Event, {
|
|
1298
1411
|
},
|
1299
1412
|
|
1300
1413
|
pointerX: function(event) {
|
1301
|
-
return event.pageX || (event.clientX +
|
1414
|
+
return event.pageX || (event.clientX +
|
1302
1415
|
(document.documentElement.scrollLeft || document.body.scrollLeft));
|
1303
1416
|
},
|
1304
1417
|
|
1305
1418
|
pointerY: function(event) {
|
1306
|
-
return event.pageY || (event.clientY +
|
1419
|
+
return event.pageY || (event.clientY +
|
1307
1420
|
(document.documentElement.scrollTop || document.body.scrollTop));
|
1308
1421
|
},
|
1309
1422
|
|
1310
1423
|
stop: function(event) {
|
1311
|
-
if (event.preventDefault) {
|
1312
|
-
event.preventDefault();
|
1313
|
-
event.stopPropagation();
|
1424
|
+
if (event.preventDefault) {
|
1425
|
+
event.preventDefault();
|
1426
|
+
event.stopPropagation();
|
1314
1427
|
} else {
|
1315
1428
|
event.returnValue = false;
|
1316
1429
|
event.cancelBubble = true;
|
@@ -1328,7 +1441,7 @@ Object.extend(Event, {
|
|
1328
1441
|
},
|
1329
1442
|
|
1330
1443
|
observers: false,
|
1331
|
-
|
1444
|
+
|
1332
1445
|
_observeAndCache: function(element, name, observer, useCapture) {
|
1333
1446
|
if (!this.observers) this.observers = [];
|
1334
1447
|
if (element.addEventListener) {
|
@@ -1339,7 +1452,7 @@ Object.extend(Event, {
|
|
1339
1452
|
element.attachEvent('on' + name, observer);
|
1340
1453
|
}
|
1341
1454
|
},
|
1342
|
-
|
1455
|
+
|
1343
1456
|
unloadCache: function() {
|
1344
1457
|
if (!Event.observers) return;
|
1345
1458
|
for (var i = 0; i < Event.observers.length; i++) {
|
@@ -1352,24 +1465,24 @@ Object.extend(Event, {
|
|
1352
1465
|
observe: function(element, name, observer, useCapture) {
|
1353
1466
|
var element = $(element);
|
1354
1467
|
useCapture = useCapture || false;
|
1355
|
-
|
1468
|
+
|
1356
1469
|
if (name == 'keypress' &&
|
1357
1470
|
(navigator.appVersion.match(/Konqueror|Safari|KHTML/)
|
1358
1471
|
|| element.attachEvent))
|
1359
1472
|
name = 'keydown';
|
1360
|
-
|
1473
|
+
|
1361
1474
|
this._observeAndCache(element, name, observer, useCapture);
|
1362
1475
|
},
|
1363
1476
|
|
1364
1477
|
stopObserving: function(element, name, observer, useCapture) {
|
1365
1478
|
var element = $(element);
|
1366
1479
|
useCapture = useCapture || false;
|
1367
|
-
|
1480
|
+
|
1368
1481
|
if (name == 'keypress' &&
|
1369
1482
|
(navigator.appVersion.match(/Konqueror|Safari|KHTML/)
|
1370
1483
|
|| element.detachEvent))
|
1371
1484
|
name = 'keydown';
|
1372
|
-
|
1485
|
+
|
1373
1486
|
if (element.removeEventListener) {
|
1374
1487
|
element.removeEventListener(name, observer, useCapture);
|
1375
1488
|
} else if (element.detachEvent) {
|
@@ -1380,24 +1493,22 @@ Object.extend(Event, {
|
|
1380
1493
|
|
1381
1494
|
/* prevent memory leaks in IE */
|
1382
1495
|
Event.observe(window, 'unload', Event.unloadCache, false);
|
1383
|
-
|
1384
1496
|
var Position = {
|
1385
|
-
|
1386
1497
|
// set to true if needed, warning: firefox performance problems
|
1387
1498
|
// NOT neeeded for page scrolling, only if draggable contained in
|
1388
1499
|
// scrollable elements
|
1389
|
-
includeScrollOffsets: false,
|
1500
|
+
includeScrollOffsets: false,
|
1390
1501
|
|
1391
1502
|
// must be called before calling withinIncludingScrolloffset, every time the
|
1392
1503
|
// page is scrolled
|
1393
1504
|
prepare: function() {
|
1394
|
-
this.deltaX = window.pageXOffset
|
1395
|
-
|| document.documentElement.scrollLeft
|
1396
|
-
|| document.body.scrollLeft
|
1505
|
+
this.deltaX = window.pageXOffset
|
1506
|
+
|| document.documentElement.scrollLeft
|
1507
|
+
|| document.body.scrollLeft
|
1397
1508
|
|| 0;
|
1398
|
-
this.deltaY = window.pageYOffset
|
1399
|
-
|| document.documentElement.scrollTop
|
1400
|
-
|| document.body.scrollTop
|
1509
|
+
this.deltaY = window.pageYOffset
|
1510
|
+
|| document.documentElement.scrollTop
|
1511
|
+
|| document.body.scrollTop
|
1401
1512
|
|| 0;
|
1402
1513
|
},
|
1403
1514
|
|
@@ -1405,7 +1516,7 @@ var Position = {
|
|
1405
1516
|
var valueT = 0, valueL = 0;
|
1406
1517
|
do {
|
1407
1518
|
valueT += element.scrollTop || 0;
|
1408
|
-
valueL += element.scrollLeft || 0;
|
1519
|
+
valueL += element.scrollLeft || 0;
|
1409
1520
|
element = element.parentNode;
|
1410
1521
|
} while (element);
|
1411
1522
|
return [valueL, valueT];
|
@@ -1421,6 +1532,31 @@ var Position = {
|
|
1421
1532
|
return [valueL, valueT];
|
1422
1533
|
},
|
1423
1534
|
|
1535
|
+
positionedOffset: function(element) {
|
1536
|
+
var valueT = 0, valueL = 0;
|
1537
|
+
do {
|
1538
|
+
valueT += element.offsetTop || 0;
|
1539
|
+
valueL += element.offsetLeft || 0;
|
1540
|
+
element = element.offsetParent;
|
1541
|
+
if (element) {
|
1542
|
+
p = Element.getStyle(element, 'position');
|
1543
|
+
if (p == 'relative' || p == 'absolute') break;
|
1544
|
+
}
|
1545
|
+
} while (element);
|
1546
|
+
return [valueL, valueT];
|
1547
|
+
},
|
1548
|
+
|
1549
|
+
offsetParent: function(element) {
|
1550
|
+
if (element.offsetParent) return element.offsetParent;
|
1551
|
+
if (element == document.body) return element;
|
1552
|
+
|
1553
|
+
while ((element = element.parentNode) && element != document.body)
|
1554
|
+
if (Element.getStyle(element, 'position') != 'static')
|
1555
|
+
return element;
|
1556
|
+
|
1557
|
+
return document.body;
|
1558
|
+
},
|
1559
|
+
|
1424
1560
|
// caches x/y coordinate pair to use with overlap
|
1425
1561
|
within: function(element, x, y) {
|
1426
1562
|
if (this.includeScrollOffsets)
|
@@ -1431,7 +1567,7 @@ var Position = {
|
|
1431
1567
|
|
1432
1568
|
return (y >= this.offset[1] &&
|
1433
1569
|
y < this.offset[1] + element.offsetHeight &&
|
1434
|
-
x >= this.offset[0] &&
|
1570
|
+
x >= this.offset[0] &&
|
1435
1571
|
x < this.offset[0] + element.offsetWidth);
|
1436
1572
|
},
|
1437
1573
|
|
@@ -1444,18 +1580,18 @@ var Position = {
|
|
1444
1580
|
|
1445
1581
|
return (this.ycomp >= this.offset[1] &&
|
1446
1582
|
this.ycomp < this.offset[1] + element.offsetHeight &&
|
1447
|
-
this.xcomp >= this.offset[0] &&
|
1583
|
+
this.xcomp >= this.offset[0] &&
|
1448
1584
|
this.xcomp < this.offset[0] + element.offsetWidth);
|
1449
1585
|
},
|
1450
1586
|
|
1451
1587
|
// within must be called directly before
|
1452
|
-
overlap: function(mode, element) {
|
1453
|
-
if (!mode) return 0;
|
1454
|
-
if (mode == 'vertical')
|
1455
|
-
return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
|
1588
|
+
overlap: function(mode, element) {
|
1589
|
+
if (!mode) return 0;
|
1590
|
+
if (mode == 'vertical')
|
1591
|
+
return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
|
1456
1592
|
element.offsetHeight;
|
1457
1593
|
if (mode == 'horizontal')
|
1458
|
-
return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
|
1594
|
+
return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
|
1459
1595
|
element.offsetWidth;
|
1460
1596
|
},
|
1461
1597
|
|
@@ -1468,5 +1604,123 @@ var Position = {
|
|
1468
1604
|
target.style.left = offsets[0] + 'px';
|
1469
1605
|
target.style.width = source.offsetWidth + 'px';
|
1470
1606
|
target.style.height = source.offsetHeight + 'px';
|
1607
|
+
},
|
1608
|
+
|
1609
|
+
page: function(forElement) {
|
1610
|
+
var valueT = 0, valueL = 0;
|
1611
|
+
|
1612
|
+
var element = forElement;
|
1613
|
+
do {
|
1614
|
+
valueT += element.offsetTop || 0;
|
1615
|
+
valueL += element.offsetLeft || 0;
|
1616
|
+
|
1617
|
+
// Safari fix
|
1618
|
+
if (element.offsetParent==document.body)
|
1619
|
+
if (Element.getStyle(element,'position')=='absolute') break;
|
1620
|
+
|
1621
|
+
} while (element = element.offsetParent);
|
1622
|
+
|
1623
|
+
element = forElement;
|
1624
|
+
do {
|
1625
|
+
valueT -= element.scrollTop || 0;
|
1626
|
+
valueL -= element.scrollLeft || 0;
|
1627
|
+
} while (element = element.parentNode);
|
1628
|
+
|
1629
|
+
return [valueL, valueT];
|
1630
|
+
},
|
1631
|
+
|
1632
|
+
clone: function(source, target) {
|
1633
|
+
var options = Object.extend({
|
1634
|
+
setLeft: true,
|
1635
|
+
setTop: true,
|
1636
|
+
setWidth: true,
|
1637
|
+
setHeight: true,
|
1638
|
+
offsetTop: 0,
|
1639
|
+
offsetLeft: 0
|
1640
|
+
}, arguments[2] || {})
|
1641
|
+
|
1642
|
+
// find page position of source
|
1643
|
+
source = $(source);
|
1644
|
+
var p = Position.page(source);
|
1645
|
+
|
1646
|
+
// find coordinate system to use
|
1647
|
+
target = $(target);
|
1648
|
+
var delta = [0, 0];
|
1649
|
+
var parent = null;
|
1650
|
+
// delta [0,0] will do fine with position: fixed elements,
|
1651
|
+
// position:absolute needs offsetParent deltas
|
1652
|
+
if (Element.getStyle(target,'position') == 'absolute') {
|
1653
|
+
parent = Position.offsetParent(target);
|
1654
|
+
delta = Position.page(parent);
|
1655
|
+
}
|
1656
|
+
|
1657
|
+
// correct by body offsets (fixes Safari)
|
1658
|
+
if (parent == document.body) {
|
1659
|
+
delta[0] -= document.body.offsetLeft;
|
1660
|
+
delta[1] -= document.body.offsetTop;
|
1661
|
+
}
|
1662
|
+
|
1663
|
+
// set position
|
1664
|
+
if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
|
1665
|
+
if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
|
1666
|
+
if(options.setWidth) target.style.width = source.offsetWidth + 'px';
|
1667
|
+
if(options.setHeight) target.style.height = source.offsetHeight + 'px';
|
1668
|
+
},
|
1669
|
+
|
1670
|
+
absolutize: function(element) {
|
1671
|
+
element = $(element);
|
1672
|
+
if (element.style.position == 'absolute') return;
|
1673
|
+
Position.prepare();
|
1674
|
+
|
1675
|
+
var offsets = Position.positionedOffset(element);
|
1676
|
+
var top = offsets[1];
|
1677
|
+
var left = offsets[0];
|
1678
|
+
var width = element.clientWidth;
|
1679
|
+
var height = element.clientHeight;
|
1680
|
+
|
1681
|
+
element._originalLeft = left - parseFloat(element.style.left || 0);
|
1682
|
+
element._originalTop = top - parseFloat(element.style.top || 0);
|
1683
|
+
element._originalWidth = element.style.width;
|
1684
|
+
element._originalHeight = element.style.height;
|
1685
|
+
|
1686
|
+
element.style.position = 'absolute';
|
1687
|
+
element.style.top = top + 'px';;
|
1688
|
+
element.style.left = left + 'px';;
|
1689
|
+
element.style.width = width + 'px';;
|
1690
|
+
element.style.height = height + 'px';;
|
1691
|
+
},
|
1692
|
+
|
1693
|
+
relativize: function(element) {
|
1694
|
+
element = $(element);
|
1695
|
+
if (element.style.position == 'relative') return;
|
1696
|
+
Position.prepare();
|
1697
|
+
|
1698
|
+
element.style.position = 'relative';
|
1699
|
+
var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
|
1700
|
+
var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
|
1701
|
+
|
1702
|
+
element.style.top = top + 'px';
|
1703
|
+
element.style.left = left + 'px';
|
1704
|
+
element.style.height = element._originalHeight;
|
1705
|
+
element.style.width = element._originalWidth;
|
1471
1706
|
}
|
1472
1707
|
}
|
1708
|
+
|
1709
|
+
// Safari returns margins on body which is incorrect if the child is absolutely
|
1710
|
+
// positioned. For performance reasons, redefine Position.cumulativeOffset for
|
1711
|
+
// KHTML/WebKit only.
|
1712
|
+
if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
|
1713
|
+
Position.cumulativeOffset = function(element) {
|
1714
|
+
var valueT = 0, valueL = 0;
|
1715
|
+
do {
|
1716
|
+
valueT += element.offsetTop || 0;
|
1717
|
+
valueL += element.offsetLeft || 0;
|
1718
|
+
if (element.offsetParent == document.body)
|
1719
|
+
if (Element.getStyle(element, 'position') == 'absolute') break;
|
1720
|
+
|
1721
|
+
element = element.offsetParent;
|
1722
|
+
} while (element);
|
1723
|
+
|
1724
|
+
return [valueL, valueT];
|
1725
|
+
}
|
1726
|
+
}
|