marley 0.7.1 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2117 +0,0 @@
1
- /* Prevel Library v1.0.0
2
- * http://github.com/chernikovalexey/Prevel
3
- *
4
- * Copyright 2011-2012, Alexey Chernikov
5
- * Dual licensed under the:
6
- * - GNU LGPL (http://opensource.org/licenses/lgpl-license.php)
7
- * - MIT License (http://opensource.org/licenses/mit-license.php)
8
- *
9
- * =====
10
- *
11
- * Contains YASS v0.3.9
12
- * http://yass.webo.in
13
- *
14
- * Copyright 2008-2009, Nikolay Matsievsky (sunnybear)
15
- * Dual licensed under the:
16
- * - MIT License (http://opensource.org/licenses/mit-license.php)
17
- * - GNU GPL (http://opensource.org/licenses/gpl-license.php)
18
- **/
19
-
20
- (function(win, doc, proto, ael, ge, cn, nn, u, newRegExp, n, ef, uf) {
21
-
22
- /* Module: Core.js
23
- * Requirements: -
24
- **/
25
-
26
- (function() {
27
-
28
- // Short names for almost all types
29
- var types = {
30
- 'function': 'fn',
31
- object: 'obj',
32
- number: 'int',
33
- string: 'str',
34
- 'boolean': 'bool',
35
- regexp: 'regexp',
36
- date: 'date',
37
- undefined: u,
38
- array: 'arr'
39
- };
40
-
41
- var op = Object[proto];
42
-
43
- // Cached checks
44
- var accessors =
45
- !!op.__lookupGetter__ &&
46
- !!op.__lookupSetter__ &&
47
- !!op.__defineGetter__;
48
-
49
- var trim = !!''.trim,
50
- indexOf = !![].indexOf,
51
- toString = op.toString,
52
- json = win.JSON && win.JSON.parse;
53
-
54
- // Local copy of `pl`
55
- var pl = (function() {
56
- return function(o, context, index) {
57
- return pl.fn ? new pl.fn.init(o, context, index) : uf;
58
- };
59
- })();
60
-
61
- pl.extend = function(Child, Parent, flag) {
62
- if(!Parent) {
63
- Parent = Child;
64
- Child = pl;
65
- }
66
-
67
- var init = Child;
68
-
69
- // If accessors are supported, they will be considered in extending
70
- if(accessors) {
71
- var getter, setter;
72
- for(var key in Parent) {
73
- getter = Parent.__lookupGetter__(key);
74
- setter = Parent.__lookupSetter__(key);
75
-
76
- if(getter || setter) {
77
- if(getter) Child.__defineGetter__(key, getter);
78
- if(setter) Child.__defineSetter__(key, setter);
79
- } else if((!Child[key]) || (Child[key] && flag)) {
80
- Child[key] = Parent[key];
81
- }
82
- }
83
- } else {
84
- for(var key in Parent) {
85
- // It can reassign the parameter if flag equals true
86
- if((!Child[key]) || (Child[key] && flag)) {
87
- Child[key] = Parent[key];
88
- }
89
- }
90
- }
91
-
92
- if(init === pl.fn) {
93
- pl.implement(pl.fn.init, pl.fn);
94
- }
95
-
96
- init = u;
97
- return Child;
98
- };
99
-
100
- // User agent
101
- var ua = win.navigator.userAgent.toLowerCase();
102
-
103
- var opera = /opera/i.test(ua),
104
- chrome = /chrome/i.test(ua);
105
- var browsers = {
106
- opera: opera,
107
- ie: !opera && /msie/i.test(ua),
108
- ie6: !opera && /msie 6/i.test(ua),
109
- ie7: !opera && /msie 7/i.test(ua),
110
- ie8: !opera && /msie 8/i.test(ua),
111
- firefox: /firefox/i.test(ua),
112
- chrome: chrome,
113
- safari_khtml: !chrome && /khtml/i.test(ua),
114
- safari: !chrome && /webkit|safari/i.test(ua)
115
- };
116
-
117
- pl.extend({navigator: []});
118
- for(var key in browsers) {
119
- if(browsers[key]) {
120
- pl.navigator.push(key);
121
- }
122
- }
123
-
124
- // Public
125
- pl.extend({
126
- // Extend the Object.prototype
127
- implement: function(Child, Parent, flag) {
128
- return pl.extend(Child[proto], Parent, flag);
129
- },
130
-
131
- // Uses native method, if it's available
132
- isArray: Array.isArray || function(o) {
133
- return pl.type(o, 'arr');
134
- },
135
-
136
- type: function(o, is) {
137
- var t = o === n ?
138
- nn :
139
- o === uf ? u : (class2type[toString.call(o)] || 'obj');
140
- return is ? is === t : t;
141
- },
142
-
143
- empty: function(o) {
144
- // Separate check for an object
145
- if(pl.type(o, 'obj')) {
146
- for(var key in o) return false;
147
- return true;
148
- }
149
- return (pl.type(o, nn) || pl.type(o, u)) || !o.length;
150
- },
151
-
152
- trim: function(text) {
153
- // Uses native method, if it's availiable
154
- text = text || '';
155
- return trim ? text.trim() : text.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
156
- },
157
-
158
- each: function(arr, func) {
159
- var key = -1;
160
- var len = arr.length;
161
- while(++key < len) {
162
- func.call(arr[key], key, arr[key]);
163
- }
164
- },
165
-
166
- // Moved from Core Extension
167
- filter: function(array, reservation) {
168
- var output = [];
169
- pl.each(array, function(k, val) {
170
- if(reservation(val)) {
171
- output.push(val);
172
- }
173
- });
174
- return output;
175
- },
176
-
177
- inArray: function(a, c, b, r) {
178
- if(indexOf) return c.indexOf(a, b);
179
- for(b = b > 0 || -1, r = -1; ++b < c.length && !~r; r = c[b] === a ? b : r);
180
- return r;
181
- },
182
-
183
- error: function(msg) {
184
- throw new Error(msg);
185
- return false;
186
- },
187
-
188
- JSON: function(data) {
189
- // Use native function if possible
190
- return json ?
191
- win.JSON.parse(data) :
192
- (!(/[^,:{}[]0-9.-+Eaeflnr-u nrt]/.test(
193
- data.replace(/"(.|[^"])*"/g, ''))) && eval('(' + data + ')')
194
- );
195
- },
196
-
197
- browser: function(name) {
198
- return name ? !!~pl.inArray(name, pl.navigator) : pl.navigator[0];
199
- }
200
- });
201
-
202
- var class2type = {};
203
- pl.each('Array Boolean Number String Function Date RegExp Object'.split(' '), function(key, val) {
204
- class2type['[object ' + val + ']'] = types[val.toLowerCase()];
205
- });
206
-
207
- // Add `pl` to the global scope
208
- win.pl = pl;
209
-
210
- })();
211
-
212
- /* Module: Manipulate.js
213
- * Requirements: Core.js
214
- **/
215
-
216
- (function() {
217
-
218
- pl.extend({
219
- create: function(o, params) {
220
- var ns = doc.createElement(o);
221
-
222
- // To avoid using pl().attr() which is a module
223
- for(var key in params) {
224
- ns[pl.fixAttr ? pl.fixAttr[key] || key : key] = params[key];
225
- }
226
- return ns;
227
- },
228
-
229
- parent: function(elem, step) {
230
- return step > 0 ? pl.parent(elem.parentNode, --step) : elem;
231
- },
232
-
233
- __self__: uf
234
- });
235
-
236
- // ======
237
- // Public
238
-
239
- // Add `fn` to `pl`, at first (to reduce nested level)
240
- pl.extend({
241
- fn: {},
242
- find: function(selector, root) { // If there is no Prevel Find
243
- return doc.querySelectorAll(root ? root + ' ' + selector : selector);
244
- }
245
- });
246
-
247
- pl.extend(pl.fn, {
248
- init: (function() {
249
- return function(o, params, index) {
250
- var _int;
251
- switch(pl.type(o)) {
252
- case 'str':
253
- var ne = o.match(newRegExp);
254
- if(ne) {
255
- _int = [pl.create(ne[1], params)];
256
- } else {
257
- switch(pl.type(params)) {
258
- case 'str': // Get `o` from the context
259
- switch(pl.type(index)) {
260
- case 'int':
261
- _int = [pl.find(o, params)[index]];
262
- break;
263
- default:
264
- case u:
265
- _int = pl.find(o);
266
- break;
267
- }
268
- break;
269
- case 'int': // Work only with the element №{params}
270
- _int = [pl.find(o)[params]];
271
- break;
272
- default:
273
- case u: // Just find all the `o`
274
- _int = pl.find(o);
275
- break;
276
- }
277
- }
278
- break;
279
- case 'fn':
280
- pl.events.ready(o);
281
- break;
282
- case 'obj':
283
- _int = o[0] ? o : [o];
284
- break;
285
- }
286
-
287
- this.elements = _int;
288
- this.selector = arguments;
289
- pl.__self__ = this;
290
- return this;
291
- };
292
- })(),
293
-
294
- len: function() {
295
- return this.elements.length;
296
- },
297
-
298
- last: function() {
299
- var l = this.elements.length;
300
- this.elements = [
301
- l && !pl.type(this.elements[l - 1], u) ? this.elements[l - 1] : n
302
- ];
303
- return this;
304
- },
305
-
306
- get: function(index) {
307
- var e = this.elements;
308
- return e.length === 1 ? e[0] : (!pl.type(index, u) ? e[index] : e);
309
- },
310
-
311
- // Recursion's faster than loop here
312
- parent: function(step) {
313
- this.elements = [pl.parent(this.elements[0], step || 1)];
314
- return this;
315
- },
316
-
317
- remove: function() {
318
- pl.each(this.elements, function() {
319
- this.parentNode.removeChild(this);
320
- });
321
- return this;
322
- },
323
-
324
- each: function(fn) {
325
- pl.each(pl.__self__.elements, function() {
326
- fn.call(this);
327
- });
328
- return this;
329
- }
330
- });
331
-
332
- })();
333
-
334
- /* Module: Css.js
335
- * Requirements: Core.js, Manipulate.js
336
- **/
337
-
338
- (function() {
339
-
340
- pl.extend({
341
- camelCase: function(str) {
342
- if(!str.match('-')) return str;
343
- var parts = str.split('-');
344
- return parts[0] + parts[1].charAt(0).toUpperCase() + parts[1].substr(1);
345
- },
346
-
347
- curCSS: {
348
- rmvPostFix: {
349
- zIndex: true,
350
- fontWeight: true,
351
- opacity: true,
352
- zoom: true,
353
- lineHeight: true
354
- },
355
-
356
- // Get computed style
357
- get: function(o, style) {
358
- return o.currentStyle ? o.currentStyle[style] :
359
- win.getComputedStyle(o, n).getPropertyValue(style);
360
- }
361
- }
362
- });
363
-
364
- pl.extend(pl.fn, {
365
- css: function(style, set) {
366
- if(set) {
367
- style = pl.camelCase(style);
368
-
369
- if(pl.type(set, 'int') && !pl.curCSS.rmvPostFix[style]) {
370
- set += 'px';
371
- }
372
-
373
- pl.each(this.elements, function() {
374
- this.style[style] = set;
375
- });
376
- } else {
377
- if(pl.type(style, 'str')) {
378
- return pl.curCSS.get(this.elements[0], style);
379
- } else {
380
- for(var key in style) {
381
- pl.fn.css.call(this, key, style[key]);
382
- }
383
- }
384
- }
385
- return this;
386
- }
387
- });
388
-
389
- })();
390
-
391
- /* Module: Attr.js
392
- * Requirements: Core.js, Manipulate.js
393
- **/
394
-
395
- (function() {
396
-
397
- pl.extend({
398
- fixAttr: {
399
- 'class': 'className',
400
- 'float': 'cssFloat',
401
- 'for': 'htmlFor'
402
- }
403
- });
404
-
405
- pl.extend(pl.fn, {
406
- addClass: function(c) {
407
- pl.each(this.elements, function() {
408
- // If this class already exists
409
- if(~pl.inArray(c, this[cn].split(' '))) return;
410
- this[cn] += (this[cn] ? ' ' : '') + c;
411
- });
412
- return this;
413
- },
414
-
415
- hasClass: function(c) {
416
- return this.elements[0] && this.elements[0][cn] ?
417
- !!~pl.inArray(c, this.elements[0][cn].split(' ')) :
418
- false;
419
- },
420
-
421
- removeClass: function(c) {
422
- pl.each(this.elements, function() {
423
- if(!this[cn]) return;
424
- var cl = this[cn].split(' '),
425
- from = pl.inArray(c, cl);
426
-
427
- // If this class does not exist
428
- if(!~from) return;
429
-
430
- cl.splice(from, 1);
431
-
432
- this[cn] = (pl.empty(cl) ? cl.slice(from, 1) : cl).join(' ');
433
- });
434
- return this;
435
- },
436
-
437
- attr: function(attr, set) {
438
- attr = pl.fixAttr[attr] || attr;
439
-
440
- if(!pl.type(set, 'undef')) {
441
- pl.each(this.elements, function() {
442
- this[attr] = set;
443
- });
444
- } else {
445
- if(pl.type(attr, 'str')) {
446
- return this.elements[0][attr];
447
- } else {
448
- for(var key in attr) {
449
- pl.fn.attr.call(this, key, attr[key]);
450
- }
451
- }
452
- }
453
- return this;
454
- },
455
-
456
- removeAttr: function(attr) {
457
- attr = pl.fixAttr[attr] || attr;
458
-
459
- pl.each(this.elements, function() {
460
- this[attr] = n;
461
- });
462
- return this;
463
- }
464
- });
465
-
466
- })();
467
-
468
- /* Module: Ajax.js
469
- * Requirements: Core.js
470
- **/
471
-
472
- (function() {
473
-
474
- pl.extend({
475
- // Convert object to a 'param-string'
476
- toParams: function(o) {
477
- var pieces = [];
478
- for(var key in o) {
479
- pieces.push(
480
- encodeURIComponent(key) + '=' + encodeURIComponent(o[key])
481
- );
482
- }
483
- return pieces.join('&');
484
- },
485
-
486
- ajax: function(params) {
487
- var Request;
488
- var requestPrepare = function() {
489
- if(win.XMLHttpRequest) { // Modern browsers
490
- Request = new XMLHttpRequest();
491
-
492
- if(Request.overrideMimeType) {
493
- Request.overrideMimeType('text/html');
494
- }
495
- } else if(win.ActiveXObject) { // Obsolete IE
496
- try {
497
- Request = new ActiveXObject('Msxml2.XMLHTTP');
498
- } catch(e) {
499
- try {
500
- Request = new ActiveXObject('Microsoft.XMLHTTP');
501
- } catch(er) {}
502
- }
503
- }
504
-
505
- if(!Request) {
506
- pl.error('Could not create a XMLHttpRequest instance.');
507
- }
508
-
509
- // Fix related with `attachEvent`
510
- Request.onreadystatechange = function(e) {
511
- if(Request.readyState === 1) {
512
- (params.load || ef)();
513
- } else if(Request.readyState === 4) {
514
- if(Request.status > 199 && Request.status < 300) {
515
- (params.success || ef)(
516
- params.dataType === 'json' ? // Parse JSON if necessary
517
- pl.JSON(Request.responseText) :
518
- Request.responseText,
519
- Request.status
520
- );
521
- } else {
522
- (params.error || ef)(Request.status, Request.responseText);
523
- }
524
- }
525
-
526
- params.always = params.always || ef;
527
-
528
- try {
529
- params.always(Request.readyState, Request.status, Request.responseText);
530
- } catch(e) {
531
- params.always(Request.readyState);
532
- }
533
- };
534
- };
535
-
536
- // Common headers
537
- var headers = function(type) {
538
- // To identify that it's XHR
539
- Request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
540
-
541
- if(type) {
542
- Request.setRequestHeader(
543
- 'Content-type',
544
- 'application/x-www-form-urlencoded; charset=' +
545
- (params.charset || 'utf-8')
546
- );
547
- }
548
- };
549
-
550
- params.data = pl.toParams(params.data || {});
551
- params.async = params.async || true;
552
- requestPrepare();
553
-
554
- if(params.type === 'POST') {
555
- Request.open('POST', params.url, params.async);
556
- headers(1);
557
- Request.send(params.data);
558
- } else {
559
- Request.open('GET', params.url + '&' + params.data, params.async);
560
- headers();
561
- Request.send(n);
562
- }
563
- }
564
- });
565
-
566
- })();
567
-
568
-
569
- /* Module: Events.js
570
- * Requirements: Core.js, Manipulate.js
571
- **/
572
-
573
- (function() {
574
-
575
- pl.extend({
576
- events: {
577
- // DOMContentLoaded
578
- ready: (function() {
579
- this.readyList = []; // Functions to be called
580
- this.bindReady = function(handler) {
581
- var called = false;
582
-
583
- function ready() {
584
- if(called) return;
585
- called = true;
586
- handler();
587
- }
588
-
589
- if(doc[ael]) {
590
- pl.events.attaches.bind(doc, 'DOMContentLoaded', ready);
591
- } else if(doc.attachEvent) {
592
- if(doc.documentElement.doScroll && win === win.top) {
593
- function tryScroll() {
594
- if(called) return;
595
- if(!doc.body) return;
596
- try {
597
- doc.documentElement.doScroll('left');
598
- ready();
599
- } catch(e) {
600
- setTimeout(tryScroll, 0);
601
- }
602
- }
603
- tryScroll();
604
- }
605
-
606
- pl.events.attaches.bind(doc, 'readystatechange', function() {
607
- if(doc.readyState === 'complete') {
608
- ready();
609
- }
610
- });
611
- }
612
-
613
- pl.events.attaches.bind(win, 'load', ready);
614
- };
615
-
616
- var that = this;
617
-
618
- return function(handler) {
619
- if(!that.readyList.length) {
620
- that.bindReady(function() {
621
- pl.each(that.readyList, function(k) {
622
- this();
623
- });
624
- });
625
- }
626
-
627
- that.readyList.push(handler);
628
- };
629
- })(),
630
-
631
- mend: function(event) {
632
- event = event || win.event;
633
-
634
- if(event.fixed) {
635
- return event;
636
- }
637
- event.fixed = true;
638
-
639
- event.preventDefault = event.preventDefault || function() {
640
- this.returnValue = false;
641
- };
642
- event.stopPropagation = event.stopPropagation || function() {
643
- this.cancelBubble = true;
644
- };
645
-
646
- if(!event.target) {
647
- event.target = event.srcElement;
648
- }
649
-
650
- if(event.pageX == n && event.clientX != n) {
651
- var html = doc.documentElement,
652
- body = doc.body;
653
- event.pageX =
654
- event.clientX +
655
- (html && html.scrollLeft || body && body.scrollLeft || 0) -
656
- (html.clientLeft || 0);
657
- event.pageY =
658
- event.clientY +
659
- (html && html.scrollTop || body && body.scrollTop || 0) -
660
- (html.clientTop || 0);
661
- }
662
-
663
- if(pl.type(event.which, u)) {
664
- event.which = (event.button & 1 ?
665
- 1 :
666
- (event.button & 2 ?
667
- 3 :
668
- (event.button & 4 ? 2 : 0)
669
- )
670
- );
671
- }
672
-
673
- return event;
674
- },
675
-
676
- // Cross-browser event adding and removing
677
- // http://javascript.ru/tutorial/events/crossbrowser
678
- attaches: (function() {
679
- var turns = 0;
680
-
681
- function handleCommon(e) {
682
- e = pl.events.mend(e);
683
-
684
- var handlerList = this.evt[e.type];
685
-
686
- for(var key in handlerList) {
687
- var updated = handlerList[key].call(this, e);
688
-
689
- if(updated === false) {
690
- e.preventDefault();
691
- e.stopPropagation();
692
- }
693
- }
694
- }
695
-
696
- return {
697
- bind: function(el, evt, fn) {
698
- if(el.setInterval && !el.frameElement) {
699
- if(el !== win) el = win;
700
-
701
- if(~pl.inArray(evt, pl.__fwe__)) {
702
- return (window.onload = function() {
703
- pl(doc.body).bind(evt, fn);
704
- });
705
- }
706
- }
707
-
708
- if(!fn.turnID) {
709
- fn.turnID = ++turns;
710
- }
711
-
712
- if(!el.evt) {
713
- el.evt = {};
714
-
715
- el.handleEvt = function(e) {
716
- if(!pl.type(pl.events.attaches, u)) {
717
- return handleCommon.call(el, e);
718
- }
719
- };
720
- }
721
-
722
- if(!el.evt[evt]) {
723
- el.evt[evt] = {};
724
-
725
- if(el[ael]) {
726
- el[ael](evt, el.handleEvt, false);
727
- } else {
728
- el.attachEvent('on' + evt, el.handleEvt);
729
- }
730
- }
731
-
732
- el.evt[evt][fn.turnID] = fn;
733
- },
734
-
735
- unbind: function(el, evt, fn) {
736
- var handlerList = el.evt;
737
-
738
- if(pl.type(fn, u)) {
739
- if(!handlerList) return;
740
- for(var handle in handlerList) {
741
- if(pl.type(evt, u) || evt === handle) {
742
- for(var key in handlerList[handle]) {
743
- pl.events.attaches.unbind(el, handle, handlerList[handle][key]);
744
- }
745
- }
746
- }
747
- return;
748
- }
749
-
750
- handlerList = handlerList && handlerList[evt];
751
- if(!handlerList) return;
752
-
753
- delete handlerList[fn.turnID];
754
-
755
- for(var key in handlerList) return;
756
-
757
- if(el.removeEventListener) {
758
- el.removeEventListener(evt, el.handleEvt, false);
759
- } else {
760
- el.detachEvent('on' + evt, el.handleEvt);
761
- }
762
-
763
- delete el.evt[evt];
764
-
765
- for(var key in el.evt) return;
766
-
767
- try {
768
- delete el.handleEvt;
769
- delete el.evt;
770
- } catch(e) {
771
- el.removeAttribute('handleEvt');
772
- el.removeAttribute('evt');
773
- }
774
- }
775
- };
776
- })(),
777
-
778
- routeEvent: function(evt, fn, flag) {
779
- if(pl.type(evt, 'obj')) {
780
- for(var key in evt) {
781
- pl.events.routeEvent(key, evt[key], flag);
782
- }
783
- } else if((fn && evt) || (!fn && evt) || (!fn && !evt)) {
784
- if(flag) {
785
- pl.each(pl.__self__.elements, function() {
786
- pl.events.attaches.bind(this, evt, fn);
787
- });
788
- } else {
789
- pl.each(pl.__self__.elements, function() {
790
- pl.events.attaches.unbind(this, evt, fn);
791
- });
792
- }
793
- }
794
- return pl.__self__;
795
- }
796
- },
797
-
798
- __fwe__: [
799
- 'click', 'mouseover', 'mouseout',
800
- 'keyup', 'keydown', 'dblclick',
801
- 'mousedown', 'mouseup', 'keypress'
802
- ]
803
- });
804
-
805
- pl.extend(pl.fn, {
806
- bind: function(evt, fn) {
807
- // Delegate to the common method
808
- return pl.events.routeEvent(evt, fn, 1);
809
- },
810
-
811
- unbind: function(evt, fn) {
812
- // The same as in pl().bind()
813
- return pl.events.routeEvent(evt, fn, 0);
814
- }
815
- });
816
-
817
- })();
818
-
819
- /* Module: Find.js
820
- * Requirements: Core.js
821
- * Copyright 2008-2009, Nikolay Matsievsky (sunnybear) - http://yass.webo.in
822
- **/
823
-
824
- (function() {
825
-
826
- var classSupport = !!doc[ge + 'sByClassName'],
827
- qsSupport = !!doc.querySelectorAll;
828
-
829
- pl.find = (function(_) {
830
- pl.extend(_, {
831
- attr: {
832
- '': function(child, attr) {
833
- return !!child.getAttribute(attr);
834
- },
835
- '=': function(child, attr, value) {
836
- return (attr = child.getAttribute(attr)) && attr === value;
837
- },
838
- '&=': function(child, attr, value) {
839
- return
840
- (attr = child.getAttribute(attr)) &&
841
- (new RegExp('(^| +)' + value + '($| +)').test(attr));
842
- },
843
- '^=': function(child, attr, value) {
844
- return
845
- (attr = child.getAttribute(attr) + '') && !attr.indexOf(value);
846
- },
847
- '$=': function(child, attr, value) {
848
- return
849
- (attr = child.getAttribute(attr) + '') &&
850
- attr.indexOf(value) === attr.length - value.length;
851
- },
852
- '*=': function(child, attr, value) {
853
- return
854
- (attr = child.getAttribute(attr) + '') &&
855
- attr.indexOf(value) != -1;
856
- },
857
- '|=': function(child, attr, value) {
858
- return
859
- (attr = child.getAttribute(attr) + '') &&
860
- (attr === value || !!attr.indexOf(value + '-'));
861
- },
862
- '!=': function(child, attr, value) {
863
- return
864
- !(attr = child.getAttribute(attr)) ||
865
- !(new RegExp('(^| +)' + value + '($| +)').test(attr)) ||
866
- true;
867
- }
868
- },
869
-
870
- mods: {
871
- 'first-child': function(child) {
872
- return child.parentNode.getElementsByTagName('*')[0] !== child;
873
- },
874
- 'last-child': function(child) {
875
- var brother = child;
876
- while((brother = brother.nextSibling) && brother.nodeType != 1) {}
877
- return !!brother;
878
- },
879
- root: function(child) {
880
- return child.nodeName.toLowerCase() !== 'html';
881
- },
882
- 'nth-child': function(child, ind) {
883
- var i = child.nodeIndex || 0,
884
- a = ind[3] = ind[3] ? (ind[2] === '%' ? -1 : 1) * ind[3] : 0,
885
- b = ind[1];
886
-
887
- if(i) {
888
- return !( (i + a) % b);
889
- } else {
890
- var brother = child.parentNode.firstChild;
891
- i++;
892
-
893
- do {
894
- if(
895
- brother.nodeType == 1 &&
896
- (brother.nodeIndex = ++i) &&
897
- child === brother &&
898
- ((i + a) % b)
899
- ) {
900
- return 0;
901
- }
902
- } while(brother = brother.nextSibling);
903
- return 1;
904
- }
905
- },
906
- 'nth-last-child': function(child, ind) {
907
- var i = child.nodeIndexLast || 0,
908
- a = ind[3] ? (ind[2] === '%' ? -1 : 1) * ind[3] : 0,
909
- b = ind[1];
910
- if(i) {
911
- return !( (i + a) % b);
912
- } else {
913
- var brother = child.parentNode.lastChild;
914
- i++;
915
- do {
916
- if(
917
- brother.nodeType == 1 &&
918
- (brother.nodeLastIndex = i++) &&
919
- child === brother &&
920
- ((i + a) % b)
921
- ) {
922
- return 0;
923
- }
924
- } while(brother = brother.previousSibling);
925
- return 1;
926
- }
927
- },
928
- empty: function(child) {
929
- return !!child.firstChild;
930
- },
931
- parent: function(child) {
932
- return !child.firstChild;
933
- },
934
- 'only-child': function(child) {
935
- return child.parentNode[ge + 'sByTagName']('*').length != 1;
936
- },
937
- checked: function(child) {
938
- return !child.checked;
939
- },
940
- lang: function(child, ind) {
941
- return child.lang !== ind && doc.documentElement.lang !== ind;
942
- },
943
- enabled: function(child) {
944
- return child.disabled || child.type === 'hidden';
945
- },
946
- disabled: function(child) {
947
- return !child.disabled;
948
- },
949
- selected: function(elem){
950
- child.parentNode.selectedIndex;
951
- return !child.selected;
952
- }
953
- }
954
- });
955
-
956
- return function(selector, root) {
957
- if(root) {
958
- selector = root + ' ' + selector;
959
- }
960
-
961
- root = doc;
962
- var sets = [];
963
-
964
- if(selector === 'body *') {
965
- return doc.body[ge + 'sByTagName']('*');
966
- } else if(/^[\w[:#.][\w\]*^|=!]*$/.test(selector)) {
967
- var idx = 0;
968
-
969
- switch(selector.charAt(0)) {
970
- case '#':
971
- idx = selector.slice(1);
972
- sets = doc[ge + 'ById'](idx);
973
-
974
- if(pl.browser('ie') && sets.id !== idx) {
975
- sets = doc.all[idx];
976
- }
977
-
978
- sets = sets ? [sets] : [];
979
- break;
980
- case '.':
981
- var klass = selector.slice(1);
982
-
983
- if(classSupport) {
984
- sets = (
985
- idx = (sets = root[ge + 'sByClassName'](klass)).length
986
- ) ? sets : [];
987
- } else {
988
- klass = ' ' + klass + ' ';
989
- var nodes = root[ge + 'sByTagName']('*'),
990
- i = 0,
991
- node;
992
-
993
- while(node = nodes[i++]) {
994
- if((' ' + node[cn] + ' ').indexOf(klass) != -1) {
995
- sets[idx++] = node;
996
- }
997
- }
998
- sets = idx ? sets : [];
999
- }
1000
- break;
1001
- case ':':
1002
- var node,
1003
- nodes = root[ge + 'sByTagName']('*'),
1004
- i = 0,
1005
- ind = selector.replace(/[^(]*\(([^)]*)\)/, "$1"),
1006
- mod = selector.replace(/\(.*/,'');
1007
-
1008
- while(node = nodes[i++]) {
1009
- if(_.mods[mod] && !_.mods[mod](node, ind)) {
1010
- sets[idx++] = node;
1011
- }
1012
- }
1013
- sets = idx ? sets : [];
1014
- break;
1015
- case '[':
1016
- var nodes = root[ge + 'sByTagName']('*'),
1017
- node,
1018
- i = 0,
1019
- attrs = /\[([^!~^*|$ [:=]+)([$^*|]?=)?([^ :\]]+)?\]/.exec(
1020
- selector
1021
- ),
1022
- attr = attrs[1],
1023
- eql = attrs[2] || '',
1024
- value = attrs[3];
1025
-
1026
- while(node = nodes[i++]) {
1027
- console.log('216:', eql);
1028
-
1029
- if(
1030
- _.attr[eql] &&
1031
- (
1032
- _.attr[eql](node, attr, value) ||
1033
- (
1034
- attr === 'class' &&
1035
- _.attr[eql](node, cn, value)
1036
- )
1037
- )
1038
- ) {
1039
- sets[idx++] = node;
1040
- }
1041
- }
1042
- sets = idx ? sets : [];
1043
- break;
1044
- default:
1045
- sets = (
1046
- idx = (sets = root[ge + 'sByTagName'](selector)).length
1047
- ) ? sets : [];
1048
- break;
1049
- }
1050
- } else {
1051
- if(qsSupport && !~selector.indexOf('!=')) {
1052
- sets = root.querySelectorAll(
1053
- selector.replace(/=([^\]]+)/, '="$1"')
1054
- );
1055
- } else {
1056
- var groups = selector.split(/ *, */),
1057
- gl = groups.length - 1,
1058
- concat = !!gl,
1059
- group, singles, singles_length, single, i, ancestor,
1060
- nodes, tag, id, klass, attr, eql, mod, ind, newNodes,
1061
- idx, J, child, last, childs, item, h;
1062
-
1063
- while(group = groups[gl--]) {
1064
- singles_length = (
1065
- singles = group
1066
- .replace(/(\([^)]*)\+/,"$1%")
1067
- .replace(/(\[[^\]]+)~/,"$1&")
1068
- .replace(/(~|>|\+)/," $1 ")
1069
- .split(/ +/)
1070
- ).length;
1071
- i = 0;
1072
- ancestor = ' ';
1073
- nodes = [root];
1074
-
1075
- while(single = singles[i++]) {
1076
- if(
1077
- single !== ' ' &&
1078
- single !== '>' &&
1079
- single !== '~' &&
1080
- single !== '+' &&
1081
- nodes
1082
- ) {
1083
- single = single.match(/([^[:.#]+)?(?:#([^[:.#]+))?(?:\.([^[:.]+))?(?:\[([^!&^*|$[:=]+)([!$^*|&]?=)?([^:\]]+)?\])?(?:\:([^(]+)(?:\(([^)]+)\))?)?/);
1084
- tag = single[1] || '*';
1085
- id = single[2];
1086
- klass = single[3] ? ' ' + single[3] + ' ' : '';
1087
- attr = single[4];
1088
- eql = single[5] || '';
1089
- mod = single[7];
1090
- ind =
1091
- mod === 'nth-child' ||
1092
- mod === 'nth-last-child' ?
1093
- /(?:(-?\d*)n)?(?:(%|-)(\d*))?/.exec(
1094
- single[8] === 'even' &&
1095
- '2n' ||
1096
- single[8] === 'odd' &&
1097
- '2n%1' ||
1098
- !/\D/.test(single[8]) &&
1099
- '0n%' + single[8] ||
1100
- single[8]
1101
- ) :
1102
- single[8];
1103
-
1104
- newNodes = [];
1105
- idx = J = 0;
1106
- last = i == singles_length;
1107
-
1108
- while(child = nodes[J++]) {
1109
- switch(ancestor) {
1110
- case ' ':
1111
- childs = child[ge + 'sByTagName'](tag);
1112
- h = 0;
1113
-
1114
- console.log('304: ...');
1115
-
1116
- while(item = childs[h++]) {
1117
- if(
1118
- (!id || item.id === id) &&
1119
- (
1120
- !klass ||
1121
- (' ' + item[cn] + ' ')
1122
- .indexOf(klass) != -1
1123
- ) && (
1124
- !attr ||
1125
- (
1126
- _.attr[eql] &&
1127
- (
1128
- _.attr[eql](item, attr, single[6]) ||
1129
- (
1130
- attr === 'class' &&
1131
- _.attr[eql](
1132
- item, cn, single[6]
1133
- )
1134
- )
1135
- )
1136
- )
1137
- ) &&
1138
- !item.yeasss &&
1139
- !(
1140
- _.mods[mod] ?
1141
- _.mods[mod](item, ind) :
1142
- mod
1143
- )
1144
- ) {
1145
- console.log('Passed.');
1146
-
1147
- if(last) {
1148
- item.yeasss = 1;
1149
- }
1150
- newNodes[idx++] = item;
1151
- }
1152
- }
1153
- break;
1154
- case '~':
1155
- tag = tag.toLowerCase();
1156
-
1157
- while(
1158
- (child = child.nextSibling) &&
1159
- !child.yeasss
1160
- ) {
1161
- if(
1162
- child.nodeType == 1 &&
1163
- (
1164
- tag === '*' ||
1165
- child.nodeName.toLowerCase() === tag
1166
- ) &&
1167
- (!id || child.id === id) &&
1168
- (
1169
- !klass ||
1170
- (' ' + child[cn] + ' ')
1171
- .indexOf(klass) != -1
1172
- ) && (
1173
- !attr ||
1174
- (
1175
- _.attr[eql] &&
1176
- (
1177
- _.attr[eql](item, attr, single[6]) ||
1178
- (
1179
- attr === 'class' &&
1180
- _.attr[eql](
1181
- item, cn, single[6]
1182
- )
1183
- )
1184
- )
1185
- )
1186
- ) &&
1187
- !child.yeasss &&
1188
- !(
1189
- _.mods[mod] ?
1190
- _.mods[mod](child, ind) :
1191
- mod
1192
- )
1193
- ) {
1194
- if(last) {
1195
- child.yeasss = 1;
1196
- }
1197
- newNodes[idx++] = child;
1198
- }
1199
- }
1200
- break;
1201
- case '+':
1202
- while(
1203
- (child = child.nextSibling) &&
1204
- child.nodeType != 1
1205
- ) {}
1206
- if(
1207
- child &&
1208
- (
1209
- child.nodeName.toLowerCase() ===
1210
- tag.toLowerCase() ||
1211
- tag === '*'
1212
- ) && (
1213
- !id ||
1214
- child.id === id
1215
- ) && (
1216
- !klass ||
1217
- (' ' + item[cn] + ' ')
1218
- .indexOf(klass) != -1
1219
- ) && (
1220
- !attr ||
1221
- (
1222
- _.attr[eql] &&
1223
- (
1224
- _.attr[eql](item, attr, single[6]) ||
1225
- (
1226
- attr === 'class' &&
1227
- _.attr[eql](
1228
- item, cn, single[6]
1229
- )
1230
- )
1231
- )
1232
- )
1233
- ) &&
1234
- !child.yeasss &&
1235
- !(
1236
- _.mods[mod] ?
1237
- _.mods[mod](child, ind) :
1238
- mod
1239
- )
1240
- ) {
1241
- if(last) {
1242
- child.yeasss = 1;
1243
- }
1244
- newNodes[idx++] = child;
1245
- }
1246
- break;
1247
- case '>':
1248
- childs = child[ge + 'sByTagName'](tag);
1249
- i = 0;
1250
- while(item = childs[i++]) {
1251
- if(
1252
- item.parentNode === child &&
1253
- (!id || item.id === id) &&
1254
- (
1255
- !klass ||
1256
- (' ' + item[cn] + ' ')
1257
- .indexOf(klass) != -1
1258
- ) && (
1259
- !attr ||
1260
- (
1261
- _.attr[eql] &&
1262
- (
1263
- _.attr[eql](item, attr, single[6]) ||
1264
- (
1265
- attr === 'class' &&
1266
- _.attr[eql](
1267
- item, cn, single[6]
1268
- )
1269
- )
1270
- )
1271
- )
1272
- ) &&
1273
- !item.yeasss &&
1274
- !(
1275
- _.mods[mod] ?
1276
- _.mods[mod](item, ind) :
1277
- mod
1278
- )
1279
- ) {
1280
- if(last) {
1281
- item.yeasss = 1;
1282
- }
1283
- newNodes[idx++] = item;
1284
- }
1285
- }
1286
- break;
1287
- }
1288
- }
1289
- nodes = newNodes;
1290
- } else {
1291
- ancestor = single;
1292
- }
1293
- }
1294
-
1295
- if(concat) {
1296
- if(!nodes.concat) {
1297
- newNodes = [];
1298
- h = 0;
1299
-
1300
- while(item = nodes[h]) {
1301
- newNodes[h++] = item;
1302
- }
1303
- nodes = newNodes;
1304
- }
1305
- sets = nodes.concat(sets.length == 1 ? sets[0] : sets);
1306
- } else {
1307
- sets = nodes;
1308
- }
1309
- }
1310
- idx = sets.length;
1311
-
1312
- while(idx--) {
1313
- sets[idx].yeasss = sets[idx].nodeIndex =
1314
- sets[idx].nodeIndexLast = n;
1315
- }
1316
- }
1317
- }
1318
-
1319
- return sets;
1320
- };
1321
- })({});
1322
-
1323
- })();
1324
-
1325
- /* Module: Visibility.js
1326
- * Requirements: Core.js, Manipulate.js, Css.js
1327
- **/
1328
-
1329
- (function() {
1330
-
1331
- pl.extend(pl.fn, {
1332
- show: function() {
1333
- pl.each(this.elements, function() {
1334
- this.style.display = this.plrd ? this.plrd : '';
1335
- if(pl.curCSS.get(this, 'display') === 'none') {
1336
- this.style.display = 'block';
1337
- }
1338
- });
1339
- return this;
1340
- },
1341
-
1342
- hide: function() {
1343
- pl.each(this.elements, function() {
1344
- this.plrd = this.plrd || pl.curCSS.get(this, 'display');
1345
- if(this.plrd === 'none') {
1346
- this.plrd = 'block';
1347
- }
1348
- this.style.display = 'none';
1349
- });
1350
- return this;
1351
- }
1352
- });
1353
-
1354
- })();
1355
-
1356
- /* Module: Insert.js
1357
- * Requirements: Core.js, Manipulate.js
1358
- **/
1359
-
1360
- (function() {
1361
-
1362
- pl.extend({
1363
- innerText: pl.browser('ie') ? 'innerText' : 'textContent',
1364
-
1365
- innerContent: {
1366
- midst: function(e, method, ins, to) {
1367
- var init = e;
1368
- var e = init.elements[0];
1369
-
1370
- if(pl.type(ins, u)) {
1371
- return e[method];
1372
- } else {
1373
- if(pl.type(ins, 'obj')) {
1374
- var temp = doc.createElement('div');
1375
- temp.appendChild(ins);
1376
- ins = temp.innerHTML;
1377
- }
1378
-
1379
- pl.each(init.elements, function() {
1380
- if(!to) {
1381
- this[method] = ins;
1382
- } else if(~to) {
1383
- this[method] += ins;
1384
- } else {
1385
- this[method] = ins + this[method];
1386
- }
1387
- });
1388
- return init;
1389
- }
1390
- },
1391
-
1392
- edge: function(_this, args, table, dir, fn) {
1393
- var a = pl.clean(args);
1394
- for(var i = (dir < 0 ? a.length - 1 : 0); i != (dir < 0 ? dir : a.length); i += dir) {
1395
- fn(_this, a[i]);
1396
- }
1397
- }
1398
- },
1399
-
1400
- clean: function(a) {
1401
- var r = [];
1402
- var len = a.length;
1403
-
1404
- for(var i = 0; i < len; ++i) {
1405
- if(pl.type(a[i], 'str')) {
1406
- var table = '';
1407
-
1408
- if(!a[i].indexOf('<thead') || !a[i].indexOf('<tbody')) {
1409
- table = 'thead';
1410
- a[i] = '<table>' + a[i] + '</table>';
1411
- } else if(!a[i].indexOf('<tr')) {
1412
- table = 'tr';
1413
- a[i] = '<table>' + a[i] + '</table>';
1414
- } else if(!a[i].indexOf('<td') || !a[i].indexOf('<th')) {
1415
- table = 'td';
1416
- a[i] = '<table><tbody><tr>' + a[i] + '</tr></tbody></table>';
1417
- }
1418
-
1419
- var div = doc.createElement('div');
1420
- div.innerHTML = a[i];
1421
-
1422
- if(table) {
1423
- div = div.firstChild;
1424
- if(table !== 'thead') div = div.firstChild;
1425
- if(table === 'td') div = div.firstChild;
1426
- }
1427
-
1428
- var cn_len = div.childNodes.length;
1429
- for(var j = 0; j < cn_len; ++j) {
1430
- r.push(div.childNodes[j]);
1431
- }
1432
- } else if(a[i] !== n) {
1433
- r.push(a[i].nodeType ? a[i] : doc.createTextNode(a[i].toString()));
1434
- }
1435
- }
1436
-
1437
- return r;
1438
- }
1439
- });
1440
-
1441
- pl.extend(pl.fn, {
1442
- html: function(ins, to) {
1443
- // Delegate to the common method
1444
- return pl.innerContent.midst(this, 'innerHTML', ins, to);
1445
- },
1446
-
1447
- text: function(ins, to) {
1448
- // The same as in pl().html()
1449
- return pl.innerContent.midst(this, pl.innerText, ins, to);
1450
- },
1451
-
1452
- after: function() {
1453
- var args = arguments;
1454
- pl.each(this.elements, function() {
1455
- pl.innerContent.edge(this, args, false, -1, function(o, a) {
1456
- o.parentNode.insertBefore(a, o.nextSibling);
1457
- });
1458
- });
1459
- return this;
1460
- },
1461
-
1462
- before: function() {
1463
- var args = arguments;
1464
- pl.each(this.elements, function() {
1465
- pl.innerContent.edge(this, args, false, 1, function(o, a) {
1466
- o.parentNode.insertBefore(a, o);
1467
- });
1468
- });
1469
- return this;
1470
- },
1471
-
1472
- append: function() {
1473
- var args = arguments;
1474
- pl.each(this.elements, function() {
1475
- pl.innerContent.edge(this, args, true, 1, function(o, a) {
1476
- o.appendChild(a);
1477
- });
1478
- });
1479
- return this;
1480
- },
1481
-
1482
- prepend: function() {
1483
- var args = arguments;
1484
- pl.each(this.elements, function() {
1485
- pl.innerContent.edge(this, args, true, -1, function(o, a){
1486
- o.insertBefore(a, o.firstChild);
1487
- });
1488
- });
1489
- return this;
1490
- },
1491
-
1492
- appendTo: function(selector, context, index) {
1493
- pl.each(this.elements, function() {
1494
- pl(selector, context, index).append(this);
1495
- });
1496
- return this;
1497
- },
1498
-
1499
- prependTo: function(selector, context, index) {
1500
- pl.each(this.elements, function() {
1501
- pl(selector, context, index).prepend(this);
1502
- });
1503
- return this;
1504
- }
1505
- });
1506
-
1507
- })();
1508
-
1509
- /* Prevel Ajax Extension
1510
- * Requirements: Core.js, Ajax.js
1511
- **/
1512
-
1513
- (function(win, doc, undefined) {
1514
-
1515
- pl.extend({
1516
- get: function(params, callback, type) {
1517
- pl.ajax(pl.type(params, 'obj') ? params : {
1518
- url: params,
1519
- success: callback,
1520
- dataType: type
1521
- });
1522
- },
1523
-
1524
- post: function(params, data, callback, type) {
1525
- pl.ajax(pl.type(params, 'obj') ? pl.extend(params, {type: 'POST'}) : {
1526
- url: params,
1527
- type: 'POST',
1528
- data: data,
1529
- success: callback,
1530
- dataType: type
1531
- });
1532
- },
1533
-
1534
- put: function(params) {
1535
- params.data = params.data || {};
1536
- params.data.action = 'put';
1537
- pl.post(params);
1538
- },
1539
-
1540
- del: function(params) {
1541
- params.data = params.data || {};
1542
- params.data.action = 'delete';
1543
- pl.post(params);
1544
- },
1545
-
1546
- // Adding and removing
1547
- ajaxDefaults: function(params) {
1548
- pl.each(['ajax', 'get', 'post', 'put', 'del'], function(k, val) {
1549
- if(params === 'remove') {
1550
- pl[val] = pl['_' + val];
1551
- pl['_' + val] = undefined;
1552
- } else {
1553
- pl['_' + val] = pl[val];
1554
- pl[val] = function(p) {
1555
- pl['_' + val](pl.extend(p, params));
1556
- };
1557
- }
1558
- });
1559
- },
1560
-
1561
- serialize: function(form) {
1562
- var o = {};
1563
- pl('form#' + form + ' input, form#' + form + ' textarea').each(function() {
1564
- if(this.type !== 'submit') {
1565
- o[this.name] = this.value;
1566
- }
1567
- });
1568
- return o;
1569
- }
1570
- });
1571
-
1572
- })(window, document);
1573
-
1574
- /* Prevel Core Extension
1575
- * Requirements: Core.js
1576
- **/
1577
-
1578
- (function(win, doc, undefined) {
1579
-
1580
- var proto = 'prototype',
1581
- slice = Array[proto].slice,
1582
- stringify = win.JSON && win.JSON.stringify;
1583
-
1584
- pl.extend({
1585
- map: function(array, fn) {
1586
- var output = [];
1587
- pl.each(array, function() {
1588
- output.push(fn(this));
1589
- });
1590
- return output;
1591
- },
1592
-
1593
- every: function(array, reservation) {
1594
- var flag = true;
1595
- pl.each(array, function(k, val) {
1596
- if(!reservation(val)) {
1597
- flag = false;
1598
- }
1599
- });
1600
- return flag;
1601
- },
1602
-
1603
- some: function(array, reservation) {
1604
- var flag = false;
1605
- pl.each(array, function(k, val) {
1606
- if(reservation(val)) {
1607
- flag = true;
1608
- }
1609
- });
1610
- return flag;
1611
- },
1612
-
1613
- unique: function(array) {
1614
- var a = [];
1615
- var l = array.length;
1616
- for(var i = 0; i < l; ++i) {
1617
- for(var j = i + 1; j < l; ++j) {
1618
- if(array[i] === array[j]) {
1619
- j = ++i;
1620
- }
1621
- }
1622
- a.push(array[i]);
1623
- }
1624
- return a;
1625
- },
1626
-
1627
- // Is window
1628
- isWin: function(Obj) {
1629
- return pl.type(Obj, 'obj') && 'setInterval' in Obj;
1630
- },
1631
-
1632
- // Attach script or css
1633
- attach: function(params) {
1634
- var add;
1635
- params.load = params.load || function() {};
1636
-
1637
- if(params.url.substr(-3) === '.js') {
1638
- add = pl('<script>', pl.extend({
1639
- src: params.url,
1640
- type: params.type || 'text/javascript'
1641
- }, params.charset ? {charset: params.charset} : {})).get();
1642
-
1643
- var _load = params.load;
1644
- params.load = function() {
1645
- _load(params.url, +new Date());
1646
- };
1647
-
1648
- // attachEvent doesn't support adding events to objects, so
1649
- // it's not possible to use `pl.events.attaches.bind`
1650
- add.onreadystatechange = function(e) {
1651
- if(e.readyState === 'complete') {
1652
- params.load();
1653
- }
1654
- };
1655
- add.onload = params.load;
1656
- } else {
1657
- add = pl('<link>', {
1658
- href: params.url,
1659
- rel: 'stylesheet',
1660
- type: 'text/css'
1661
- }).get();
1662
-
1663
- var sheet, cssRules;
1664
- if('sheet' in add) {
1665
- sheet = 'sheet';
1666
- cssRules = 'cssRules';
1667
- } else {
1668
- sheet = 'styleSheet';
1669
- cssRules = 'rules';
1670
- }
1671
-
1672
- var timeout = setInterval(function() {
1673
- try {
1674
- if(add[sheet] && add[sheet][cssRules].length) {
1675
- clearInterval(timeout);
1676
- params.load.call(params.url, +new Date());
1677
- }
1678
- } catch(e) {}
1679
- }, 10);
1680
- }
1681
-
1682
- pl('head').append(add);
1683
- return this;
1684
- },
1685
-
1686
- proxy: function(context, source) {
1687
- if(!pl.type(context, 'fn')) {
1688
- return undefined;
1689
- }
1690
-
1691
- return function() {
1692
- return context.apply(
1693
- source,
1694
- slice.call(arguments, 2).concat(slice.call(arguments))
1695
- );
1696
- };
1697
- },
1698
-
1699
- stringify: stringify ? win.JSON.stringify : function(obj) {
1700
- var t = pl.type(obj);
1701
- if(t === 'null') {
1702
- return String(obj);
1703
- } else {
1704
- var n, v, json = [], arr = pl.type(obj, 'arr');
1705
-
1706
- for(n in obj) {
1707
- v = obj[n];
1708
- t = pl.type(v);
1709
-
1710
- if(t === 'str') {
1711
- v = '"' + v + '"';
1712
- } else if(t === 'obj') {
1713
- v = pl.stringify(v);
1714
- }
1715
-
1716
- json.push((arr ? '' : '"' + n + '":') + String(v));
1717
- }
1718
- return (arr ? '[' : '{') + String(json) + (arr ? ']' : '}');
1719
- }
1720
- }
1721
- });
1722
-
1723
- })(window, document);
1724
-
1725
- /* Prevel Observer Extension
1726
- * (provides basic implementation of "observer" pattern)
1727
- *
1728
- * Requirements: Core.js
1729
- **/
1730
-
1731
- (function() {
1732
-
1733
- pl.extend({
1734
- Observer: function(fns) {
1735
- this.fns = fns ? (pl.type(fns, 'fn') ? [fns] : fns) : [];
1736
-
1737
- this.subscribe = function(fn) {
1738
- this.fns.push(fn);
1739
- };
1740
-
1741
- this.unsubscribe = function(fn) {
1742
- var pos = pl.inArray(fn, this.fns);
1743
-
1744
- if(~pos) {
1745
- this.fns.splice(pos, 1);
1746
- }
1747
- };
1748
-
1749
- this.clean = function() {
1750
- this.fns = [];
1751
- };
1752
-
1753
- this.has = function(fn) {
1754
- return !!~pl.inArray(fn, this.fns);
1755
- };
1756
-
1757
- this.publish = function(that, args) {
1758
- if(!pl.type(args, 'arr')) {
1759
- args = [args];
1760
- }
1761
-
1762
- pl.each(this.fns, function() {
1763
- this.apply(that, args);
1764
- });
1765
- };
1766
- }
1767
- });
1768
-
1769
- })();
1770
-
1771
- /* Prevel Dom Extension
1772
- * Requirements: Core.js, Manipulate.js, Attr.js, Insert.js
1773
- **/
1774
-
1775
- (function(win, doc, undefined) {
1776
-
1777
- /* NOTE:
1778
- * this.elements (in pl() instance) always exists, so checking if this.elements equals true
1779
- * is senseless, it will be always true. Much better will be checking if it's empty or
1780
- * trying to compare the first element with false values (false, null, undefined).
1781
- *
1782
- * Examples:
1783
- * this.elements[0] || ...
1784
- * pl.empty(this.elements)
1785
- * this.elements[0] !== undefined
1786
- **/
1787
-
1788
- pl.extend({
1789
- selectedBy: function(elem, selector) {
1790
- var elems = pl(selector).get();
1791
- return elems === elem || pl.filter(elems, function(el) {
1792
- return el === elem;
1793
- }).length > 0;
1794
- },
1795
-
1796
- related: function(elem, fn, mod) {
1797
- if(pl.type(mod, 'undef')) {
1798
- mod = 1;
1799
- }
1800
-
1801
- var get;
1802
- var ret = pl();
1803
- ret.selector = [elem.id, fn, mod];
1804
-
1805
- if(pl.type(mod, 'int')) {
1806
- get = function(e, step) {
1807
- return step > 0 ? get(e[fn], --step) : e;
1808
- };
1809
- } else {
1810
- get = function(e, selector) {
1811
- var ret = [];
1812
- var rel, i;
1813
-
1814
- if(rel = e[fn]) {
1815
- if(!selector || pl.selectedBy(rel, selector)) {
1816
- ret.push(rel);
1817
- }
1818
-
1819
- if(i = get(rel, selector)) {
1820
- return ret.concat(i);
1821
- }
1822
-
1823
- return ret;
1824
- }
1825
- };
1826
- }
1827
-
1828
- ret.elements = get(elem, mod);
1829
- return ret;
1830
- }
1831
- });
1832
-
1833
- pl.extend(pl.fn, {
1834
- toggleClass: function(c) {
1835
- pl.each(this.elements, function() {
1836
- pl(this)[pl(this).hasClass(c) ? 'removeClass' : 'addClass'](c);
1837
- });
1838
- return this;
1839
- },
1840
-
1841
- blur: function() {
1842
- pl.each(this.elements, function() {
1843
- this.blur();
1844
- });
1845
- return this;
1846
- },
1847
-
1848
- focus: function() {
1849
- pl.each(this.elements, function() {
1850
- this.focus();
1851
- });
1852
- return this;
1853
- },
1854
-
1855
- empty: function() {
1856
- return pl(this.elements).html('');
1857
- },
1858
-
1859
- tag: function(is) {
1860
- var tn = this.elements[0].tagName.toLowerCase();
1861
- return is ? is === tn : tn;
1862
- },
1863
-
1864
- val: function(insert) {
1865
- if(!pl.type(insert, 'undef')) {
1866
- pl.each(this.elements, function() {
1867
- this.value = insert;
1868
- });
1869
- return this;
1870
- } else {
1871
- return this.elements[0].value;
1872
- }
1873
- },
1874
-
1875
- prev: function(iterations) {
1876
- return pl.related(this.elements[0], 'previousSibling', iterations);
1877
- },
1878
-
1879
- next: function(iterations) {
1880
- return pl.related(this.elements[0], 'nextSibling', iterations);
1881
- },
1882
-
1883
- children: function(selector) {
1884
- var children = pl.related(this.elements[0] || this, 'children');
1885
- if(selector) {
1886
- children.elements = pl.filter(children.elements, function(e) {
1887
- return pl.selectedBy(e, selector);
1888
- });
1889
- }
1890
- return children;
1891
- },
1892
-
1893
- find: function(selector) {
1894
- var children = pl.related(this.elements[0] || this, 'children');
1895
- var list = [];
1896
- pl.each(children.elements, function(k, v) {
1897
- if(pl.selectedBy(this, selector)) {
1898
- list.push(v);
1899
- } else if(pl.type(v, 'obj')) {
1900
- var found = pl(this).find(selector).get();
1901
- found = pl.type(found, 'arr') ? found : [found];
1902
- list = list.concat(found);
1903
- }
1904
- });
1905
-
1906
- children.elements = list;
1907
- return children;
1908
- },
1909
-
1910
- parents: function(selector) {
1911
- return pl.related(this.elements[0] || this, 'parentNode', selector || '*');
1912
- },
1913
-
1914
- replaceWith: function(el, options) {
1915
- el = pl.type(el, 'str') ? pl(el, options || {}).get() : el;
1916
- pl.each(this.elements, function() {
1917
- this.parentNode.replaceChild(el, this);
1918
- });
1919
- return this;
1920
- },
1921
-
1922
- wrap: function(w, options) {
1923
- w = pl.type(w, 'str') ? pl(w, options || {}).get() : w;
1924
- pl.each(this.elements, function() {
1925
- pl(this).replaceWith(w).appendTo(w);
1926
- });
1927
- return this;
1928
- }
1929
- });
1930
-
1931
- })(this, document);
1932
-
1933
- /* Prevel Storage Extension
1934
- * (provides functionality for interacting with cookies, localstorage, ...)
1935
- *
1936
- * Requirements: Core.js
1937
- **/
1938
-
1939
- (function(win, doc, undefined) {
1940
-
1941
- var prefixes = {
1942
- localStorage: 'ls_',
1943
- sessionStorage: 'ss_'
1944
- },
1945
-
1946
- cookieAsSession = 60 * 60 * 24,
1947
- cookieAsStorage = cookieAsSession * 31 * 12 * 4,
1948
-
1949
- stringify = pl.stringify ?
1950
- pl.stringify :
1951
- win.JSON && win.JSON.stringify ?
1952
- win.JSON.stringify :
1953
- function(o) {return o;};
1954
-
1955
- pl.extend({
1956
- getStorage: function(name, type) {
1957
- var support = !!type;
1958
- return support ? type.getItem(name) : pl.storage.cookie(prefixes[String(type)] + name);
1959
- },
1960
-
1961
- setStorage: function(name, val, type) {
1962
- var support = !!type;
1963
-
1964
- if(support) {
1965
- if(pl.type(val, 'obj')) {
1966
- val = stringify(val);
1967
- }
1968
-
1969
- type.setItem(name, val);
1970
- } else {
1971
- pl.storage.cookie.set(prefixes[String(type)] + name, val, {
1972
- expires: type === 'localStorage' ? cookieAsStorage : cookieAsSession
1973
- });
1974
- }
1975
-
1976
- return storage[type];
1977
- },
1978
-
1979
- delStorage: function(name, type) {
1980
- var support = !!type;
1981
-
1982
- if(support) {
1983
- type.removeItem(name);
1984
- } else {
1985
- pl.storage.cookie.del(prefixes[String(type)] + name);
1986
- }
1987
-
1988
- return storage[type];
1989
- }
1990
- });
1991
-
1992
- // Main Router
1993
- var storage = (function() {
1994
- return function(name) {
1995
- return new storage.complexGet(name);
1996
- };
1997
- })();
1998
-
1999
- pl.extend(storage, {
2000
- // Storage Cookie Router
2001
- cookie: (function() {
2002
- return function(name) {
2003
- return new storage.cookie.get(name);
2004
- };
2005
- })(),
2006
-
2007
- // Storage LocalStorage Router
2008
- ls: (function() {
2009
- return function(name) {
2010
- return new storage.ls.get(name);
2011
- };
2012
- })(),
2013
-
2014
- session: (function() {
2015
- return function(name) {
2016
- return new storage.session.get(name);
2017
- };
2018
- })(),
2019
-
2020
- // Complex storage (based on all the technics)
2021
- complexGet: function(name) {
2022
- var token = [
2023
- storage.cookie(name),
2024
- storage.ls(name),
2025
- storage.session(name)
2026
- ];
2027
-
2028
- var ret, _break = false;
2029
- pl.each(token, function(key, val) {
2030
- if(_break) return;
2031
- if(val) {
2032
- ret = val;
2033
- _break = true;
2034
- }
2035
- });
2036
- return ret;
2037
- },
2038
- set: function(name, val) {
2039
- storage.cookie.set(name, val, {expires: cookieAsStorage});
2040
- storage.session.set(name, val);
2041
- return storage.ls.set(name, val);
2042
- },
2043
- del: function(name) {
2044
- storage.cookie.del(name);
2045
- storage.ls.del(name);
2046
- storage.session.del(name);
2047
- }
2048
- });
2049
-
2050
- // Storage Cookie Model
2051
- pl.extend(storage.cookie, {
2052
- get: function(name) {
2053
- var matches = doc.cookie.match(new RegExp(
2054
- '(?:^|; )' +
2055
- name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') +
2056
- '=([^;]*)'
2057
- ));
2058
- return matches ? decodeURIComponent(matches[1]) : null;
2059
- },
2060
- set: function(name, val, options) {
2061
- options = options || {};
2062
- var exp = options.expires;
2063
- if(exp) {
2064
- if(exp.toUTCString) {
2065
- exp = exp.toUTCString();
2066
- } else if(pl.type(exp, 'int')) {
2067
- exp = exp * 1000 + (+new Date());
2068
- }
2069
- options.expires = exp;
2070
- }
2071
-
2072
- var cookie = [name + '=' + encodeURIComponent(val)];
2073
- for(var o in options) {
2074
- cookie.push(options[o] === true ? o : o + '=' + options[o]);
2075
- }
2076
- doc.cookie = cookie.join('; ');
2077
-
2078
- return storage.cookie;
2079
- },
2080
- del: function(name) {
2081
- return storage.cookie.set(name, '', {expires: -1});
2082
- }
2083
- });
2084
-
2085
- // Local Storage Model
2086
- pl.extend(storage.ls, {
2087
- get: function(name) {
2088
- return pl.getStorage(name, localStorage);
2089
- },
2090
- set: function(name, val) {
2091
- return pl.setStorage(name, val, localStorage);
2092
- },
2093
- del: function(name) {
2094
- return pl.delStorage(name, localStorage);
2095
- }
2096
- });
2097
-
2098
- // Session Storage Model
2099
- pl.extend(storage.session, {
2100
- get: function(name) {
2101
- return pl.getStorage(name, sessionStorage);
2102
- },
2103
- set: function(name, val) {
2104
- return pl.setStorage(name, val, sessionStorage);
2105
- },
2106
- del: function(name) {
2107
- return pl.delStorage(name, sessionStorage);
2108
- }
2109
- });
2110
-
2111
- pl.extend({storage: storage});
2112
-
2113
- })(this, document);
2114
-
2115
- })(this, document, 'prototype', 'addEventListener',
2116
- 'getElement', 'className', 'null', 'undef',
2117
- '<([A-z]+[1-6]*)>', null, function() {});