Mercurial > nebulaweb3
diff default/node_modules/shoestring/src/shoestring.js @ 0:1d038bc9b3d2 default tip
Up:default
author | Liny <dev@neowd.com> |
---|---|
date | Sat, 31 May 2025 09:21:51 +0800 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/default/node_modules/shoestring/src/shoestring.js Sat May 31 09:21:51 2025 +0800 @@ -0,0 +1,128 @@ +//>>excludeStart("exclude", pragmas.exclude); +define([], function(){ + //>>excludeEnd("exclude"); + + /** + * The shoestring object constructor. + * + * @param {string,object} prim The selector to find or element to wrap. + * @param {object} sec The context in which to match the `prim` selector. + * @returns shoestring + * @this window + */ + function shoestring( prim, sec ){ + var pType = typeof( prim ), + ret = [], + sel; + + // return an empty shoestring object + if( !prim ){ + return new Shoestring( ret ); + } + + // ready calls + if( prim.call ){ + return shoestring.ready( prim ); + } + + // handle re-wrapping shoestring objects + if( prim.constructor === Shoestring && !sec ){ + return prim; + } + + // if string starting with <, make html + if( pType === "string" && prim.indexOf( "<" ) === 0 ){ + var dfrag = doc.createElement( "div" ); + + dfrag.innerHTML = prim; + + // TODO depends on children (circular) + return shoestring( dfrag ).children().each(function(){ + dfrag.removeChild( this ); + }); + } + + // if string, it's a selector, use qsa + if( pType === "string" ){ + if( sec ){ + return shoestring( sec ).find( prim ); + } + +//>>includeStart("development", pragmas.development); + try { +//>>includeEnd("development"); + sel = doc.querySelectorAll( prim ); +//>>includeStart("development", pragmas.development); + } catch( e ) { + shoestring.error( 'queryselector', prim ); + } +//>>includeEnd("development"); + + return new Shoestring( sel, prim ); + } + + // array like objects or node lists + if( Object.prototype.toString.call( pType ) === '[object Array]' || + (win.NodeList && prim instanceof win.NodeList) ){ + + return new Shoestring( prim, prim ); + } + + // if it's an array, use all the elements + if( prim.constructor === Array ){ + return new Shoestring( prim, prim ); + } + + // otherwise assume it's an object the we want at an index + return new Shoestring( [prim], prim ); + } + + var Shoestring = function( ret, prim ) { + this.length = 0; + this.selector = prim; + shoestring.merge(this, ret); + }; + + // TODO only required for tests + Shoestring.prototype.reverse = [].reverse; + + // For adding element set methods + shoestring.fn = Shoestring.prototype; + + shoestring.Shoestring = Shoestring; + + // For extending objects + // TODO move to separate module when we use prototypes + shoestring.extend = function( first, second ){ + for( var i in second ){ + if( second.hasOwnProperty( i ) ){ + first[ i ] = second[ i ]; + } + } + + return first; + }; + + // taken directly from jQuery + shoestring.merge = function( first, second ) { + var len, j, i; + + len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }; + + // expose + win.shoestring = shoestring; + +//>>excludeStart("exclude", pragmas.exclude); +}); +//>>excludeEnd("exclude");