annotate default/node_modules/tablesaw/src/lib/shoestring-custom.js @ 0:1d038bc9b3d2 default tip

Up:default
author Liny <dev@neowd.com>
date Sat, 31 May 2025 09:21:51 +0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1 /*! Shoestring - v2.0.0 - 2017-02-14
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
2 * http://github.com/filamentgroup/shoestring/
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
3 * Copyright (c) 2017 Scott Jehl, Filament Group, Inc; Licensed MIT & GPLv2 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4 (function( factory ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 if( typeof define === 'function' && define.amd ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 // AMD. Register as an anonymous module.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7 define( [ 'shoestring' ], factory );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8 } else if (typeof module === 'object' && module.exports) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9 // Node/CommonJS
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10 module.exports = factory();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12 // Browser globals
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13 factory();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15 }(function () {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 var win = typeof window !== "undefined" ? window : this;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17 var doc = win.document;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21 * The shoestring object constructor.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23 * @param {string,object} prim The selector to find or element to wrap.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24 * @param {object} sec The context in which to match the `prim` selector.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25 * @returns shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26 * @this window
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28 function shoestring( prim, sec ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 var pType = typeof( prim ),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30 ret = [],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31 sel;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33 // return an empty shoestring object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 if( !prim ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 return new Shoestring( ret );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38 // ready calls
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 if( prim.call ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40 return shoestring.ready( prim );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 // handle re-wrapping shoestring objects
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44 if( prim.constructor === Shoestring && !sec ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 return prim;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48 // if string starting with <, make html
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 if( pType === "string" && prim.indexOf( "<" ) === 0 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 var dfrag = doc.createElement( "div" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52 dfrag.innerHTML = prim;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54 // TODO depends on children (circular)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 return shoestring( dfrag ).children().each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56 dfrag.removeChild( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 // if string, it's a selector, use qsa
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61 if( pType === "string" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62 if( sec ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63 return shoestring( sec ).find( prim );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
66 sel = doc.querySelectorAll( prim );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68 return new Shoestring( sel, prim );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71 // array like objects or node lists
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 if( Object.prototype.toString.call( pType ) === '[object Array]' ||
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73 (win.NodeList && prim instanceof win.NodeList) ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 return new Shoestring( prim, prim );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78 // if it's an array, use all the elements
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79 if( prim.constructor === Array ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80 return new Shoestring( prim, prim );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 // otherwise assume it's an object the we want at an index
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84 return new Shoestring( [prim], prim );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 var Shoestring = function( ret, prim ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 this.length = 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89 this.selector = prim;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 shoestring.merge(this, ret);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93 // TODO only required for tests
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94 Shoestring.prototype.reverse = [].reverse;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
96 // For adding element set methods
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
97 shoestring.fn = Shoestring.prototype;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
98
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99 shoestring.Shoestring = Shoestring;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
100
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101 // For extending objects
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102 // TODO move to separate module when we use prototypes
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103 shoestring.extend = function( first, second ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 for( var i in second ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105 if( second.hasOwnProperty( i ) ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
106 first[ i ] = second[ i ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
107 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
108 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
109
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
110 return first;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
111 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
112
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
113 // taken directly from jQuery
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
114 shoestring.merge = function( first, second ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
115 var len, j, i;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
116
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
117 len = +second.length,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
118 j = 0,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
119 i = first.length;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
120
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
121 for ( ; j < len; j++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
122 first[ i++ ] = second[ j ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
123 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
124
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
125 first.length = i;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
126
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
127 return first;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
128 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
129
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
130 // expose
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
131 win.shoestring = shoestring;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
132
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
133
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
134
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
135 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
136 * Iterates over `shoestring` collections.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
137 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
138 * @param {function} callback The callback to be invoked on each element and index
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
139 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
140 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
141 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
142 shoestring.fn.each = function( callback ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
143 return shoestring.each( this, callback );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
144 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
145
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
146 shoestring.each = function( collection, callback ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
147 var val;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
148 for( var i = 0, il = collection.length; i < il; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
149 val = callback.call( collection[i], i, collection[i] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
150 if( val === false ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
151 break;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
152 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
153 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
154
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
155 return collection;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
156 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
157
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
158
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
159
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
160 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
161 * Check for array membership.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
162 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
163 * @param {object} needle The thing to find.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
164 * @param {object} haystack The thing to find the needle in.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
165 * @return {boolean}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
166 * @this window
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
167 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
168 shoestring.inArray = function( needle, haystack ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
169 var isin = -1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
170 for( var i = 0, il = haystack.length; i < il; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
171 if( haystack.hasOwnProperty( i ) && haystack[ i ] === needle ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
172 isin = i;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
173 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
174 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
175 return isin;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
176 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
177
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
178
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
179
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
180 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
181 * Bind callbacks to be run when the DOM is "ready".
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
182 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
183 * @param {function} fn The callback to be run
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
184 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
185 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
186 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
187 shoestring.ready = function( fn ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
188 if( ready && fn ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
189 fn.call( doc );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
190 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
191 else if( fn ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
192 readyQueue.push( fn );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
193 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
194 else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
195 runReady();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
196 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
197
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
198 return [doc];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
199 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
200
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
201 // TODO necessary?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
202 shoestring.fn.ready = function( fn ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
203 shoestring.ready( fn );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
204 return this;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
205 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
206
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
207 // Empty and exec the ready queue
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
208 var ready = false,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
209 readyQueue = [],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
210 runReady = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
211 if( !ready ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
212 while( readyQueue.length ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
213 readyQueue.shift().call( doc );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
214 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
215 ready = true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
216 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
217 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
218
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
219 // If DOM is already ready at exec time, depends on the browser.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
220 // From: https://github.com/mobify/mobifyjs/blob/526841be5509e28fc949038021799e4223479f8d/src/capture.js#L128
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
221 if (doc.attachEvent ? doc.readyState === "complete" : doc.readyState !== "loading") {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
222 runReady();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
223 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
224 doc.addEventListener( "DOMContentLoaded", runReady, false );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
225 doc.addEventListener( "readystatechange", runReady, false );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
226 win.addEventListener( "load", runReady, false );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
227 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
228
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
229
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
230
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
231 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
232 * Checks the current set of elements against the selector, if one matches return `true`.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
233 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
234 * @param {string} selector The selector to check.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
235 * @return {boolean}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
236 * @this {shoestring}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
237 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
238 shoestring.fn.is = function( selector ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
239 var ret = false, self = this, parents, check;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
240
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
241 // assume a dom element
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
242 if( typeof selector !== "string" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
243 // array-like, ie shoestring objects or element arrays
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
244 if( selector.length && selector[0] ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
245 check = selector;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
246 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
247 check = [selector];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
248 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
249
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
250 return _checkElements(this, check);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
251 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
252
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
253 parents = this.parent();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
254
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
255 if( !parents.length ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
256 parents = shoestring( doc );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
257 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
258
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
259 parents.each(function( i, e ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
260 var children;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
261
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
262 children = e.querySelectorAll( selector );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
263
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
264 ret = _checkElements( self, children );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
265 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
266
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
267 return ret;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
268 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
269
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
270 function _checkElements(needles, haystack){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
271 var ret = false;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
272
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
273 needles.each(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
274 var j = 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
275
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
276 while( j < haystack.length ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
277 if( this === haystack[j] ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
278 ret = true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
279 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
280
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
281 j++;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
282 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
283 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
284
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
285 return ret;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
286 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
287
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
288
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
289
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
290 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
291 * Get data attached to the first element or set data values on all elements in the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
292 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
293 * @param {string} name The data attribute name.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
294 * @param {any} value The value assigned to the data attribute.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
295 * @return {any|shoestring}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
296 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
297 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
298 shoestring.fn.data = function( name, value ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
299 if( name !== undefined ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
300 if( value !== undefined ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
301 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
302 if( !this.shoestringData ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
303 this.shoestringData = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
304 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
305
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
306 this.shoestringData[ name ] = value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
307 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
308 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
309 else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
310 if( this[ 0 ] ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
311 if( this[ 0 ].shoestringData ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
312 return this[ 0 ].shoestringData[ name ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
313 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
314 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
315 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
316 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
317 else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
318 return this[ 0 ] ? this[ 0 ].shoestringData || {} : undefined;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
319 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
320 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
321
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
322
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
323 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
324 * Remove data associated with `name` or all the data, for each element in the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
325 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
326 * @param {string} name The data attribute name.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
327 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
328 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
329 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
330 shoestring.fn.removeData = function( name ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
331 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
332 if( name !== undefined && this.shoestringData ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
333 this.shoestringData[ name ] = undefined;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
334 delete this.shoestringData[ name ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
335 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
336 this[ 0 ].shoestringData = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
337 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
338 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
339 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
340
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
341
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
342
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
343 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
344 * An alias for the `shoestring` constructor.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
345 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
346 win.$ = shoestring;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
347
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
348
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
349
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
350 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
351 * Add a class to each DOM element in the set of elements.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
352 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
353 * @param {string} className The name of the class to be added.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
354 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
355 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
356 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
357 shoestring.fn.addClass = function( className ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
358 var classes = className.replace(/^\s+|\s+$/g, '').split( " " );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
359
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
360 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
361 for( var i = 0, il = classes.length; i < il; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
362 if( this.className !== undefined &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
363 (this.className === "" ||
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
364 !this.className.match( new RegExp( "(^|\\s)" + classes[ i ] + "($|\\s)"))) ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
365 this.className += " " + classes[ i ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
366 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
367 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
368 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
369 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
370
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
371
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
372
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
373 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
374 * Add elements matching the selector to the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
375 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
376 * @param {string} selector The selector for the elements to add from the DOM
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
377 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
378 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
379 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
380 shoestring.fn.add = function( selector ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
381 var ret = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
382 this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
383 ret.push( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
384 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
385
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
386 shoestring( selector ).each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
387 ret.push( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
388 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
389
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
390 return shoestring( ret );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
391 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
392
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
393
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
394
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
395 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
396 * Insert an element or HTML string as the last child of each element in the set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
397 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
398 * @param {string|HTMLElement} fragment The HTML or HTMLElement to insert.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
399 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
400 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
401 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
402 shoestring.fn.append = function( fragment ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
403 if( typeof( fragment ) === "string" || fragment.nodeType !== undefined ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
404 fragment = shoestring( fragment );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
405 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
406
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
407 return this.each(function( i ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
408 for( var j = 0, jl = fragment.length; j < jl; j++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
409 this.appendChild( i > 0 ? fragment[ j ].cloneNode( true ) : fragment[ j ] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
410 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
411 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
412 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
413
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
414
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
415
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
416 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
417 * Insert the current set as the last child of the elements matching the selector.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
418 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
419 * @param {string} selector The selector after which to append the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
420 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
421 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
422 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
423 shoestring.fn.appendTo = function( selector ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
424 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
425 shoestring( selector ).append( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
426 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
427 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
428
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
429
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
430
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
431 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
432 * Get the value of the first element of the set or set the value of all the elements in the set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
433 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
434 * @param {string} name The attribute name.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
435 * @param {string} value The new value for the attribute.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
436 * @return {shoestring|string|undefined}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
437 * @this {shoestring}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
438 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
439 shoestring.fn.attr = function( name, value ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
440 var nameStr = typeof( name ) === "string";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
441
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
442 if( value !== undefined || !nameStr ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
443 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
444 if( nameStr ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
445 this.setAttribute( name, value );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
446 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
447 for( var i in name ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
448 if( name.hasOwnProperty( i ) ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
449 this.setAttribute( i, name[ i ] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
450 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
451 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
452 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
453 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
454 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
455 return this[ 0 ] ? this[ 0 ].getAttribute( name ) : undefined;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
456 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
457 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
458
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
459
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
460
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
461 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
462 * Insert an element or HTML string before each element in the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
463 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
464 * @param {string|HTMLElement} fragment The HTML or HTMLElement to insert.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
465 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
466 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
467 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
468 shoestring.fn.before = function( fragment ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
469 if( typeof( fragment ) === "string" || fragment.nodeType !== undefined ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
470 fragment = shoestring( fragment );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
471 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
472
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
473 return this.each(function( i ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
474 for( var j = 0, jl = fragment.length; j < jl; j++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
475 this.parentNode.insertBefore( i > 0 ? fragment[ j ].cloneNode( true ) : fragment[ j ], this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
476 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
477 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
478 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
479
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
480
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
481
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
482 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
483 * Get the children of the current collection.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
484 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
485 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
486 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
487 shoestring.fn.children = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
488 var ret = [],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
489 childs,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
490 j;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
491 this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
492 childs = this.children;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
493 j = -1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
494
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
495 while( j++ < childs.length-1 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
496 if( shoestring.inArray( childs[ j ], ret ) === -1 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
497 ret.push( childs[ j ] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
498 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
499 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
500 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
501 return shoestring(ret);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
502 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
503
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
504
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
505
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
506 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
507 * Find an element matching the selector in the set of the current element and its parents.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
508 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
509 * @param {string} selector The selector used to identify the target element.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
510 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
511 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
512 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
513 shoestring.fn.closest = function( selector ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
514 var ret = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
515
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
516 if( !selector ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
517 return shoestring( ret );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
518 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
519
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
520 this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
521 var element, $self = shoestring( element = this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
522
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
523 if( $self.is(selector) ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
524 ret.push( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
525 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
526 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
527
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
528 while( element.parentElement ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
529 if( shoestring(element.parentElement).is(selector) ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
530 ret.push( element.parentElement );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
531 break;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
532 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
533
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
534 element = element.parentElement;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
535 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
536 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
537
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
538 return shoestring( ret );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
539 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
540
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
541
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
542
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
543 shoestring.cssExceptions = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
544 'float': [ 'cssFloat' ]
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
545 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
546
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
547
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
548
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
549 (function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
550 var cssExceptions = shoestring.cssExceptions;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
551
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
552 // IE8 uses marginRight instead of margin-right
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
553 function convertPropertyName( str ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
554 return str.replace( /\-([A-Za-z])/g, function ( match, character ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
555 return character.toUpperCase();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
556 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
557 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
558
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
559 function _getStyle( element, property ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
560 return win.getComputedStyle( element, null ).getPropertyValue( property );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
561 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
562
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
563 var vendorPrefixes = [ '', '-webkit-', '-ms-', '-moz-', '-o-', '-khtml-' ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
564
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
565 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
566 * Private function for getting the computed style of an element.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
567 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
568 * **NOTE** Please use the [css](../css.js.html) method instead.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
569 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
570 * @method _getStyle
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
571 * @param {HTMLElement} element The element we want the style property for.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
572 * @param {string} property The css property we want the style for.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
573 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
574 shoestring._getStyle = function( element, property ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
575 var convert, value, j, k;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
576
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
577 if( cssExceptions[ property ] ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
578 for( j = 0, k = cssExceptions[ property ].length; j < k; j++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
579 value = _getStyle( element, cssExceptions[ property ][ j ] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
580
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
581 if( value ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
582 return value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
583 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
584 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
585 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
586
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
587 for( j = 0, k = vendorPrefixes.length; j < k; j++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
588 convert = convertPropertyName( vendorPrefixes[ j ] + property );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
589
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
590 // VendorprefixKeyName || key-name
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
591 value = _getStyle( element, convert );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
592
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
593 if( convert !== property ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
594 value = value || _getStyle( element, property );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
595 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
596
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
597 if( vendorPrefixes[ j ] ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
598 // -vendorprefix-key-name
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
599 value = value || _getStyle( element, vendorPrefixes[ j ] + property );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
600 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
601
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
602 if( value ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
603 return value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
604 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
605 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
606
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
607 return undefined;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
608 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
609 })();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
610
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
611
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
612
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
613 (function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
614 var cssExceptions = shoestring.cssExceptions;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
615
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
616 // IE8 uses marginRight instead of margin-right
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
617 function convertPropertyName( str ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
618 return str.replace( /\-([A-Za-z])/g, function ( match, character ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
619 return character.toUpperCase();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
620 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
621 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
622
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
623 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
624 * Private function for setting the style of an element.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
625 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
626 * **NOTE** Please use the [css](../css.js.html) method instead.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
627 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
628 * @method _setStyle
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
629 * @param {HTMLElement} element The element we want to style.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
630 * @param {string} property The property being used to style the element.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
631 * @param {string} value The css value for the style property.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
632 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
633 shoestring._setStyle = function( element, property, value ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
634 var convertedProperty = convertPropertyName(property);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
635
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
636 element.style[ property ] = value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
637
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
638 if( convertedProperty !== property ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
639 element.style[ convertedProperty ] = value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
640 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
641
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
642 if( cssExceptions[ property ] ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
643 for( var j = 0, k = cssExceptions[ property ].length; j<k; j++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
644 element.style[ cssExceptions[ property ][ j ] ] = value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
645 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
646 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
647 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
648 })();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
649
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
650
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
651
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
652 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
653 * Get the compute style property of the first element or set the value of a style property
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
654 * on all elements in the set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
655 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
656 * @method _setStyle
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
657 * @param {string} property The property being used to style the element.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
658 * @param {string|undefined} value The css value for the style property.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
659 * @return {string|shoestring}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
660 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
661 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
662 shoestring.fn.css = function( property, value ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
663 if( !this[0] ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
664 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
665 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
666
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
667 if( typeof property === "object" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
668 return this.each(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
669 for( var key in property ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
670 if( property.hasOwnProperty( key ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
671 shoestring._setStyle( this, key, property[key] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
672 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
673 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
674 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
675 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
676 // assignment else retrieve first
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
677 if( value !== undefined ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
678 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
679 shoestring._setStyle( this, property, value );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
680 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
681 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
682
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
683 return shoestring._getStyle( this[0], property );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
684 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
685 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
686
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
687
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
688
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
689 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
690 * Returns the indexed element wrapped in a new `shoestring` object.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
691 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
692 * @param {integer} index The index of the element to wrap and return.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
693 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
694 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
695 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
696 shoestring.fn.eq = function( index ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
697 if( this[index] ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
698 return shoestring( this[index] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
699 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
700
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
701 return shoestring([]);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
702 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
703
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
704
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
705
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
706 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
707 * Filter out the current set if they do *not* match the passed selector or
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
708 * the supplied callback returns false
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
709 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
710 * @param {string,function} selector The selector or boolean return value callback used to filter the elements.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
711 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
712 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
713 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
714 shoestring.fn.filter = function( selector ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
715 var ret = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
716
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
717 this.each(function( index ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
718 var wsel;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
719
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
720 if( typeof selector === 'function' ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
721 if( selector.call( this, index ) !== false ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
722 ret.push( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
723 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
724 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
725 if( !this.parentNode ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
726 var context = shoestring( doc.createDocumentFragment() );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
727
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
728 context[ 0 ].appendChild( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
729 wsel = shoestring( selector, context );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
730 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
731 wsel = shoestring( selector, this.parentNode );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
732 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
733
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
734 if( shoestring.inArray( this, wsel ) > -1 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
735 ret.push( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
736 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
737 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
738 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
739
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
740 return shoestring( ret );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
741 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
742
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
743
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
744
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
745 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
746 * Find descendant elements of the current collection.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
747 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
748 * @param {string} selector The selector used to find the children
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
749 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
750 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
751 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
752 shoestring.fn.find = function( selector ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
753 var ret = [],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
754 finds;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
755 this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
756 finds = this.querySelectorAll( selector );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
757
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
758 for( var i = 0, il = finds.length; i < il; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
759 ret = ret.concat( finds[i] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
760 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
761 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
762 return shoestring( ret );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
763 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
764
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
765
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
766
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
767 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
768 * Returns the first element of the set wrapped in a new `shoestring` object.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
769 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
770 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
771 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
772 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
773 shoestring.fn.first = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
774 return this.eq( 0 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
775 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
776
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
777
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
778
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
779 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
780 * Returns the raw DOM node at the passed index.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
781 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
782 * @param {integer} index The index of the element to wrap and return.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
783 * @return {HTMLElement|undefined|array}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
784 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
785 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
786 shoestring.fn.get = function( index ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
787
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
788 // return an array of elements if index is undefined
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
789 if( index === undefined ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
790 var elements = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
791
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
792 for( var i = 0; i < this.length; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
793 elements.push( this[ i ] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
794 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
795
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
796 return elements;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
797 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
798 return this[ index ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
799 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
800 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
801
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
802
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
803
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
804 var set = function( html ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
805 if( typeof html === "string" || typeof html === "number" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
806 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
807 this.innerHTML = "" + html;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
808 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
809 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
810 var h = "";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
811 if( typeof html.length !== "undefined" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
812 for( var i = 0, l = html.length; i < l; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
813 h += html[i].outerHTML;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
814 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
815 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
816 h = html.outerHTML;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
817 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
818 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
819 this.innerHTML = h;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
820 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
821 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
822 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
823 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
824 * Gets or sets the `innerHTML` from all the elements in the set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
825 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
826 * @param {string|undefined} html The html to assign
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
827 * @return {string|shoestring}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
828 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
829 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
830 shoestring.fn.html = function( html ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
831 if( typeof html !== "undefined" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
832 return set.call( this, html );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
833 } else { // get
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
834 var pile = "";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
835
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
836 this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
837 pile += this.innerHTML;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
838 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
839
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
840 return pile;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
841 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
842 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
843
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
844
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
845
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
846 (function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
847 function _getIndex( set, test ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
848 var i, result, element;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
849
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
850 for( i = result = 0; i < set.length; i++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
851 element = set.item ? set.item(i) : set[i];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
852
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
853 if( test(element) ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
854 return result;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
855 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
856
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
857 // ignore text nodes, etc
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
858 // NOTE may need to be more permissive
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
859 if( element.nodeType === 1 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
860 result++;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
861 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
862 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
863
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
864 return -1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
865 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
866
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
867 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
868 * Find the index in the current set for the passed selector.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
869 * Without a selector it returns the index of the first node within the array of its siblings.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
870 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
871 * @param {string|undefined} selector The selector used to search for the index.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
872 * @return {integer}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
873 * @this {shoestring}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
874 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
875 shoestring.fn.index = function( selector ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
876 var self, children;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
877
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
878 self = this;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
879
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
880 // no arg? check the children, otherwise check each element that matches
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
881 if( selector === undefined ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
882 children = ( ( this[ 0 ] && this[0].parentNode ) || doc.documentElement).childNodes;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
883
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
884 // check if the element matches the first of the set
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
885 return _getIndex(children, function( element ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
886 return self[0] === element;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
887 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
888 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
889
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
890 // check if the element matches the first selected node from the parent
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
891 return _getIndex(self, function( element ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
892 return element === (shoestring( selector, element.parentNode )[ 0 ]);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
893 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
894 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
895 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
896 })();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
897
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
898
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
899
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
900 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
901 * Insert the current set before the elements matching the selector.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
902 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
903 * @param {string} selector The selector before which to insert the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
904 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
905 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
906 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
907 shoestring.fn.insertBefore = function( selector ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
908 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
909 shoestring( selector ).before( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
910 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
911 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
912
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
913
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
914
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
915 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
916 * Returns the last element of the set wrapped in a new `shoestring` object.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
917 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
918 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
919 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
920 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
921 shoestring.fn.last = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
922 return this.eq( this.length - 1 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
923 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
924
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
925
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
926
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
927 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
928 * Returns a `shoestring` object with the set of siblings of each element in the original set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
929 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
930 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
931 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
932 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
933 shoestring.fn.next = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
934
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
935 var result = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
936
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
937 // TODO need to implement map
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
938 this.each(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
939 var children, item, found;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
940
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
941 // get the child nodes for this member of the set
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
942 children = shoestring( this.parentNode )[0].childNodes;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
943
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
944 for( var i = 0; i < children.length; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
945 item = children.item( i );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
946
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
947 // found the item we needed (found) which means current item value is
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
948 // the next node in the list, as long as it's viable grab it
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
949 // NOTE may need to be more permissive
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
950 if( found && item.nodeType === 1 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
951 result.push( item );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
952 break;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
953 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
954
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
955 // find the current item and mark it as found
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
956 if( item === this ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
957 found = true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
958 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
959 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
960 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
961
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
962 return shoestring( result );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
963 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
964
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
965
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
966
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
967 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
968 * Removes elements from the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
969 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
970 * @param {string} selector The selector to use when removing the elements.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
971 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
972 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
973 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
974 shoestring.fn.not = function( selector ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
975 var ret = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
976
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
977 this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
978 var found = shoestring( selector, this.parentNode );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
979
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
980 if( shoestring.inArray(this, found) === -1 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
981 ret.push( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
982 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
983 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
984
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
985 return shoestring( ret );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
986 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
987
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
988
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
989
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
990 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
991 * Returns the set of first parents for each element in the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
992 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
993 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
994 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
995 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
996 shoestring.fn.parent = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
997 var ret = [],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
998 parent;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
999
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1000 this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1001 // no parent node, assume top level
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1002 // jQuery parent: return the document object for <html> or the parent node if it exists
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1003 parent = (this === doc.documentElement ? doc : this.parentNode);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1004
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1005 // if there is a parent and it's not a document fragment
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1006 if( parent && parent.nodeType !== 11 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1007 ret.push( parent );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1008 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1009 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1010
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1011 return shoestring(ret);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1012 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1013
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1014
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1015
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1016 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1017 * Add an HTML string or element before the children of each element in the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1018 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1019 * @param {string|HTMLElement} fragment The HTML string or element to add.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1020 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1021 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1022 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1023 shoestring.fn.prepend = function( fragment ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1024 if( typeof( fragment ) === "string" || fragment.nodeType !== undefined ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1025 fragment = shoestring( fragment );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1026 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1027
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1028 return this.each(function( i ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1029
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1030 for( var j = 0, jl = fragment.length; j < jl; j++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1031 var insertEl = i > 0 ? fragment[ j ].cloneNode( true ) : fragment[ j ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1032 if ( this.firstChild ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1033 this.insertBefore( insertEl, this.firstChild );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1034 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1035 this.appendChild( insertEl );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1036 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1037 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1038 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1039 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1040
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1041
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1042
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1043 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1044 * Returns a `shoestring` object with the set of *one* siblingx before each element in the original set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1045 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1046 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1047 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1048 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1049 shoestring.fn.prev = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1050
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1051 var result = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1052
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1053 // TODO need to implement map
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1054 this.each(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1055 var children, item, found;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1056
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1057 // get the child nodes for this member of the set
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1058 children = shoestring( this.parentNode )[0].childNodes;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1059
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1060 for( var i = children.length -1; i >= 0; i-- ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1061 item = children.item( i );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1062
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1063 // found the item we needed (found) which means current item value is
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1064 // the next node in the list, as long as it's viable grab it
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1065 // NOTE may need to be more permissive
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1066 if( found && item.nodeType === 1 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1067 result.push( item );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1068 break;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1069 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1070
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1071 // find the current item and mark it as found
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1072 if( item === this ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1073 found = true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1074 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1075 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1076 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1077
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1078 return shoestring( result );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1079 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1080
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1081
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1082
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1083 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1084 * Returns a `shoestring` object with the set of *all* siblings before each element in the original set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1085 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1086 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1087 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1088 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1089 shoestring.fn.prevAll = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1090
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1091 var result = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1092
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1093 this.each(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1094 var $previous = shoestring( this ).prev();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1095
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1096 while( $previous.length ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1097 result.push( $previous[0] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1098 $previous = $previous.prev();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1099 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1100 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1101
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1102 return shoestring( result );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1103 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1104
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1105
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1106
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1107 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1108 * Remove an attribute from each element in the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1109 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1110 * @param {string} name The name of the attribute.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1111 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1112 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1113 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1114 shoestring.fn.removeAttr = function( name ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1115 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1116 this.removeAttribute( name );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1117 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1118 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1119
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1120
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1121
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1122 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1123 * Remove a class from each DOM element in the set of elements.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1124 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1125 * @param {string} className The name of the class to be removed.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1126 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1127 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1128 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1129 shoestring.fn.removeClass = function( cname ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1130 var classes = cname.replace(/^\s+|\s+$/g, '').split( " " );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1131
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1132 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1133 var newClassName, regex;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1134
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1135 for( var i = 0, il = classes.length; i < il; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1136 if( this.className !== undefined ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1137 regex = new RegExp( "(^|\\s)" + classes[ i ] + "($|\\s)", "gmi" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1138 newClassName = this.className.replace( regex, " " );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1139
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1140 this.className = newClassName.replace(/^\s+|\s+$/g, '');
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1141 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1142 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1143 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1144 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1145
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1146
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1147
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1148 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1149 * Remove the current set of elements from the DOM.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1150 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1151 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1152 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1153 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1154 shoestring.fn.remove = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1155 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1156 if( this.parentNode ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1157 this.parentNode.removeChild( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1158 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1159 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1160 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1161
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1162
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1163
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1164 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1165 * Replace each element in the current set with that argument HTML string or HTMLElement.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1166 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1167 * @param {string|HTMLElement} fragment The value to assign.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1168 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1169 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1170 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1171 shoestring.fn.replaceWith = function( fragment ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1172 if( typeof( fragment ) === "string" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1173 fragment = shoestring( fragment );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1174 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1175
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1176 var ret = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1177
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1178 if( fragment.length > 1 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1179 fragment = fragment.reverse();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1180 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1181 this.each(function( i ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1182 var clone = this.cloneNode( true ),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1183 insertEl;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1184 ret.push( clone );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1185
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1186 // If there is no parentNode, this is pointless, drop it.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1187 if( !this.parentNode ){ return; }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1188
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1189 if( fragment.length === 1 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1190 insertEl = i > 0 ? fragment[ 0 ].cloneNode( true ) : fragment[ 0 ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1191 this.parentNode.replaceChild( insertEl, this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1192 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1193 for( var j = 0, jl = fragment.length; j < jl; j++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1194 insertEl = i > 0 ? fragment[ j ].cloneNode( true ) : fragment[ j ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1195 this.parentNode.insertBefore( insertEl, this.nextSibling );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1196 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1197 this.parentNode.removeChild( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1198 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1199 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1200
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1201 return shoestring( ret );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1202 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1203
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1204
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1205
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1206 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1207 * Get all of the sibling elements for each element in the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1208 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1209 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1210 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1211 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1212 shoestring.fn.siblings = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1213
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1214 if( !this.length ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1215 return shoestring( [] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1216 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1217
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1218 var sibs = [], el = this[ 0 ].parentNode.firstChild;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1219
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1220 do {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1221 if( el.nodeType === 1 && el !== this[ 0 ] ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1222 sibs.push( el );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1223 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1224
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1225 el = el.nextSibling;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1226 } while( el );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1227
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1228 return shoestring( sibs );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1229 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1230
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1231
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1232
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1233 var getText = function( elem ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1234 var node,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1235 ret = "",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1236 i = 0,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1237 nodeType = elem.nodeType;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1238
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1239 if ( !nodeType ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1240 // If no nodeType, this is expected to be an array
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1241 while ( (node = elem[i++]) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1242 // Do not traverse comment nodes
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1243 ret += getText( node );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1244 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1245 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1246 // Use textContent for elements
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1247 // innerText usage removed for consistency of new lines (jQuery #11153)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1248 if ( typeof elem.textContent === "string" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1249 return elem.textContent;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1250 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1251 // Traverse its children
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1252 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1253 ret += getText( elem );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1254 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1255 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1256 } else if ( nodeType === 3 || nodeType === 4 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1257 return elem.nodeValue;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1258 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1259 // Do not include comment or processing instruction nodes
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1260
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1261 return ret;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1262 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1263
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1264 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1265 * Recursively retrieve the text content of the each element in the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1266 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1267 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1268 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1269 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1270 shoestring.fn.text = function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1271
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1272 return getText( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1273 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1274
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1275
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1276
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1277
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1278 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1279 * Get the value of the first element or set the value of all elements in the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1280 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1281 * @param {string} value The value to set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1282 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1283 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1284 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1285 shoestring.fn.val = function( value ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1286 var el;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1287 if( value !== undefined ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1288 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1289 if( this.tagName === "SELECT" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1290 var optionSet, option,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1291 options = this.options,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1292 values = [],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1293 i = options.length,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1294 newIndex;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1295
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1296 values[0] = value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1297 while ( i-- ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1298 option = options[ i ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1299 if ( (option.selected = shoestring.inArray( option.value, values ) >= 0) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1300 optionSet = true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1301 newIndex = i;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1302 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1303 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1304 // force browsers to behave consistently when non-matching value is set
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1305 if ( !optionSet ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1306 this.selectedIndex = -1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1307 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1308 this.selectedIndex = newIndex;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1309 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1310 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1311 this.value = value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1312 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1313 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1314 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1315 el = this[0];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1316
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1317 if( el.tagName === "SELECT" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1318 if( el.selectedIndex < 0 ){ return ""; }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1319 return el.options[ el.selectedIndex ].value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1320 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1321 return el.value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1322 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1323 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1324 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1325
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1326
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1327
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1328 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1329 * Private function for setting/getting the offset property for height/width.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1330 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1331 * **NOTE** Please use the [width](width.js.html) or [height](height.js.html) methods instead.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1332 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1333 * @param {shoestring} set The set of elements.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1334 * @param {string} name The string "height" or "width".
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1335 * @param {float|undefined} value The value to assign.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1336 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1337 * @this window
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1338 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1339 shoestring._dimension = function( set, name, value ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1340 var offsetName;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1341
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1342 if( value === undefined ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1343 offsetName = name.replace(/^[a-z]/, function( letter ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1344 return letter.toUpperCase();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1345 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1346
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1347 return set[ 0 ][ "offset" + offsetName ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1348 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1349 // support integer values as pixels
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1350 value = typeof value === "string" ? value : value + "px";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1351
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1352 return set.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1353 this.style[ name ] = value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1354 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1355 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1356 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1357
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1358
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1359
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1360 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1361 * Gets the width value of the first element or sets the width for the whole set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1362 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1363 * @param {float|undefined} value The value to assign.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1364 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1365 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1366 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1367 shoestring.fn.width = function( value ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1368 return shoestring._dimension( this, "width", value );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1369 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1370
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1371
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1372
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1373 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1374 * Wraps the child elements in the provided HTML.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1375 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1376 * @param {string} html The wrapping HTML.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1377 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1378 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1379 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1380 shoestring.fn.wrapInner = function( html ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1381 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1382 var inH = this.innerHTML;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1383
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1384 this.innerHTML = "";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1385 shoestring( this ).append( shoestring( html ).html( inH ) );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1386 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1387 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1388
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1389
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1390
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1391 function initEventCache( el, evt ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1392 if ( !el.shoestringData ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1393 el.shoestringData = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1394 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1395 if ( !el.shoestringData.events ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1396 el.shoestringData.events = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1397 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1398 if ( !el.shoestringData.loop ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1399 el.shoestringData.loop = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1400 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1401 if ( !el.shoestringData.events[ evt ] ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1402 el.shoestringData.events[ evt ] = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1403 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1404 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1405
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1406 function addToEventCache( el, evt, eventInfo ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1407 var obj = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1408 obj.isCustomEvent = eventInfo.isCustomEvent;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1409 obj.callback = eventInfo.callfunc;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1410 obj.originalCallback = eventInfo.originalCallback;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1411 obj.namespace = eventInfo.namespace;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1412
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1413 el.shoestringData.events[ evt ].push( obj );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1414
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1415 if( eventInfo.customEventLoop ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1416 el.shoestringData.loop[ evt ] = eventInfo.customEventLoop;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1417 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1418 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1419
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1420 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1421 * Bind a callback to an event for the currrent set of elements.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1422 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1423 * @param {string} evt The event(s) to watch for.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1424 * @param {object,function} data Data to be included with each event or the callback.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1425 * @param {function} originalCallback Callback to be invoked when data is define.d.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1426 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1427 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1428 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1429 shoestring.fn.bind = function( evt, data, originalCallback ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1430
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1431 if( typeof data === "function" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1432 originalCallback = data;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1433 data = null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1434 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1435
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1436 var evts = evt.split( " " );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1437
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1438 // NOTE the `triggeredElement` is purely for custom events from IE
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1439 function encasedCallback( e, namespace, triggeredElement ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1440 var result;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1441
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1442 if( e._namespace && e._namespace !== namespace ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1443 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1444 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1445
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1446 e.data = data;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1447 e.namespace = e._namespace;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1448
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1449 var returnTrue = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1450 return true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1451 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1452
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1453 e.isDefaultPrevented = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1454 return false;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1455 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1456
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1457 var originalPreventDefault = e.preventDefault;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1458 var preventDefaultConstructor = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1459 if( originalPreventDefault ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1460 return function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1461 e.isDefaultPrevented = returnTrue;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1462 originalPreventDefault.call(e);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1463 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1464 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1465 return function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1466 e.isDefaultPrevented = returnTrue;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1467 e.returnValue = false;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1468 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1469 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1470 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1471
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1472 // thanks https://github.com/jonathantneal/EventListener
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1473 e.target = triggeredElement || e.target || e.srcElement;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1474 e.preventDefault = preventDefaultConstructor();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1475 e.stopPropagation = e.stopPropagation || function () {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1476 e.cancelBubble = true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1477 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1478
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1479 result = originalCallback.apply(this, [ e ].concat( e._args ) );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1480
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1481 if( result === false ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1482 e.preventDefault();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1483 e.stopPropagation();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1484 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1485
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1486 return result;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1487 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1488
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1489 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1490 var domEventCallback,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1491 customEventCallback,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1492 customEventLoop,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1493 oEl = this;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1494
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1495 for( var i = 0, il = evts.length; i < il; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1496 var split = evts[ i ].split( "." ),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1497 evt = split[ 0 ],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1498 namespace = split.length > 0 ? split[ 1 ] : null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1499
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1500 domEventCallback = function( originalEvent ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1501 if( oEl.ssEventTrigger ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1502 originalEvent._namespace = oEl.ssEventTrigger._namespace;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1503 originalEvent._args = oEl.ssEventTrigger._args;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1504
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1505 oEl.ssEventTrigger = null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1506 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1507 return encasedCallback.call( oEl, originalEvent, namespace );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1508 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1509 customEventCallback = null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1510 customEventLoop = null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1511
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1512 initEventCache( this, evt );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1513
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1514 this.addEventListener( evt, domEventCallback, false );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1515
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1516 addToEventCache( this, evt, {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1517 callfunc: customEventCallback || domEventCallback,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1518 isCustomEvent: !!customEventCallback,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1519 customEventLoop: customEventLoop,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1520 originalCallback: originalCallback,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1521 namespace: namespace
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1522 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1523 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1524 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1525 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1526
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1527 shoestring.fn.on = shoestring.fn.bind;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1528
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1529
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1530
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1531
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1532 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1533 * Unbind a previous bound callback for an event.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1534 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1535 * @param {string} event The event(s) the callback was bound to..
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1536 * @param {function} callback Callback to unbind.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1537 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1538 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1539 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1540 shoestring.fn.unbind = function( event, callback ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1541
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1542
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1543 var evts = event ? event.split( " " ) : [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1544
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1545 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1546 if( !this.shoestringData || !this.shoestringData.events ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1547 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1548 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1549
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1550 if( !evts.length ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1551 unbindAll.call( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1552 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1553 var split, evt, namespace;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1554 for( var i = 0, il = evts.length; i < il; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1555 split = evts[ i ].split( "." ),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1556 evt = split[ 0 ],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1557 namespace = split.length > 0 ? split[ 1 ] : null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1558
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1559 if( evt ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1560 unbind.call( this, evt, namespace, callback );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1561 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1562 unbindAll.call( this, namespace, callback );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1563 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1564 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1565 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1566 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1567 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1568
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1569 function unbind( evt, namespace, callback ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1570 var bound = this.shoestringData.events[ evt ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1571 if( !(bound && bound.length) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1572 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1573 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1574
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1575 var matched = [], j, jl;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1576 for( j = 0, jl = bound.length; j < jl; j++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1577 if( !namespace || namespace === bound[ j ].namespace ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1578 if( callback === undefined || callback === bound[ j ].originalCallback ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1579 this.removeEventListener( evt, bound[ j ].callback, false );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1580 matched.push( j );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1581 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1582 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1583 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1584
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1585 for( j = 0, jl = matched.length; j < jl; j++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1586 this.shoestringData.events[ evt ].splice( j, 1 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1587 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1588 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1589
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1590 function unbindAll( namespace, callback ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1591 for( var evtKey in this.shoestringData.events ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1592 unbind.call( this, evtKey, namespace, callback );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1593 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1594 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1595
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1596 shoestring.fn.off = shoestring.fn.unbind;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1597
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1598
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1599 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1600 * Bind a callback to an event for the currrent set of elements, unbind after one occurence.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1601 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1602 * @param {string} event The event(s) to watch for.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1603 * @param {function} callback Callback to invoke on the event.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1604 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1605 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1606 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1607 shoestring.fn.one = function( event, callback ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1608 var evts = event.split( " " );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1609
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1610 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1611 var thisevt, cbs = {}, $t = shoestring( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1612
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1613 for( var i = 0, il = evts.length; i < il; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1614 thisevt = evts[ i ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1615
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1616 cbs[ thisevt ] = function( e ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1617 var $t = shoestring( this );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1618
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1619 for( var j in cbs ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1620 $t.unbind( j, cbs[ j ] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1621 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1622
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1623 return callback.apply( this, [ e ].concat( e._args ) );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1624 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1625
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1626 $t.bind( thisevt, cbs[ thisevt ] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1627 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1628 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1629 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1630
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1631
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1632
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1633 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1634 * Trigger an event on the first element in the set, no bubbling, no defaults.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1635 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1636 * @param {string} event The event(s) to trigger.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1637 * @param {object} args Arguments to append to callback invocations.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1638 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1639 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1640 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1641 shoestring.fn.triggerHandler = function( event, args ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1642 var e = event.split( " " )[ 0 ],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1643 el = this[ 0 ],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1644 ret;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1645
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1646 // See this.fireEvent( 'on' + evts[ i ], document.createEventObject() ); instead of click() etc in trigger.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1647 if( doc.createEvent && el.shoestringData && el.shoestringData.events && el.shoestringData.events[ e ] ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1648 var bindings = el.shoestringData.events[ e ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1649 for (var i in bindings ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1650 if( bindings.hasOwnProperty( i ) ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1651 event = doc.createEvent( "Event" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1652 event.initEvent( e, true, true );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1653 event._args = args;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1654 args.unshift( event );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1655
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1656 ret = bindings[ i ].originalCallback.apply( event.target, args );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1657 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1658 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1659 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1660
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1661 return ret;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1662 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1663
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1664
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1665
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1666 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1667 * Trigger an event on each of the DOM elements in the current set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1668 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1669 * @param {string} event The event(s) to trigger.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1670 * @param {object} args Arguments to append to callback invocations.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1671 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1672 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1673 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1674 shoestring.fn.trigger = function( event, args ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1675 var evts = event.split( " " );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1676
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1677 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1678 var split, evt, namespace;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1679 for( var i = 0, il = evts.length; i < il; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1680 split = evts[ i ].split( "." ),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1681 evt = split[ 0 ],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1682 namespace = split.length > 0 ? split[ 1 ] : null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1683
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1684 if( evt === "click" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1685 if( this.tagName === "INPUT" && this.type === "checkbox" && this.click ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1686 this.click();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1687 return false;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1688 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1689 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1690
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1691 if( doc.createEvent ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1692 var event = doc.createEvent( "Event" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1693 event.initEvent( evt, true, true );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1694 event._args = args;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1695 event._namespace = namespace;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1696
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1697 this.dispatchEvent( event );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1698 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1699 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1700 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1701 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1702
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1703
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1704
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1705 return shoestring;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1706 }));