123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- "use strict";
- define( [ "module",
- "vwf/utility/xpath",
- "vwf/utility/color",
- "vwf/utility/coordinates"
- ], function( module,
- xpath,
- color,
- coordinates
- ) {
- var exports = {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- transform: function( object, transformation /* ( object, names, depth, finished ) */, names, depth ) {
- names = names || [];
- depth = depth || 0;
- var finished = false, item;
- var result = object = transformation( object, names, depth, function() { finished = true } );
- if ( typeof object === "object" && object !== null && ! finished ) {
- if ( object instanceof Array ) {
-
- for ( var index = 0; index < object.length; index++ ) {
- if ( ( item = this.transform( object[index], transformation,
- [ index ].concat( names ), depth + 1 ) ) !== object[index] ) {
-
-
- if ( result === object ) {
- result = [].concat( object );
- }
-
- result[index] = item;
- }
- }
- } else {
-
- Object.keys( object ).forEach( function( key ) {
- if ( ( item = this.transform( object[key], transformation,
- [ key ].concat( names ), depth + 1 ) ) !== object[key] ) {
-
-
- if ( result === object ) {
- result = {};
- Object.keys( object ).forEach( function( k ) {
- result[ k ] = object[ k ];
- } );
-
-
- var lengthDescriptor = Object.getOwnPropertyDescriptor( object, "length" );
- if ( lengthDescriptor && ! lengthDescriptor.enumerable ) {
- Object.defineProperty( result, "length", lengthDescriptor );
- }
- }
-
- result[key] = item;
- }
- }, this );
- }
- }
- return result;
- },
-
-
-
-
-
-
- transforms: {
-
-
-
-
-
-
-
-
-
-
- transit: function( object ) {
-
-
- function isArraylike( candidate ) {
- var arraylike = false;
-
-
-
- if ( typeof candidate == "object" && candidate != null && ! ( candidate instanceof Array ) ) {
- var typeString = Object.prototype.toString.call( candidate )
- arraylike = ( typeString.slice( -6 ) == "Array]" || typeString == "[object Arguments]" );
- }
- return arraylike;
- };
-
- return isArraylike( object ) ?
- Array.prototype.slice.call( object ) : object;
- },
-
-
-
-
-
-
-
-
-
-
-
-
- hash: function( object ) {
-
- object = exports.transforms.transit( object );
-
- if ( typeof object == "number" ) {
- return Number( object.toPrecision(15) );
- }
-
- else if ( typeof object == "object" && object != null && ! ( object instanceof Array ) ) {
- var ordered = {};
- Object.keys( object ).sort().forEach( function( key ) {
- ordered[key] = object[key];
- } );
- return ordered;
- }
- return object;
- },
- },
-
-
-
-
-
-
-
-
- exceptionMessage: function( error ) {
-
-
- if ( error.arguments && error.stack ) {
- return "\n " + error.stack;
- } else if ( window && window.opera ) {
- return error.toString();
- } else if ( error.stack ) {
- return "\n " + error.toString() + "\n" +
- error.stack.replace( /^/mg, " " );
- } else {
- return error.toString();
- }
- },
-
-
-
-
-
-
-
-
-
-
-
-
-
- resolveURI: function( uri, baseURI ) {
- var doc = document;
- if ( baseURI ) {
-
- var doc = document.implementation.createHTMLDocument( "resolveURI" );
-
- var base = doc.createElement( "base" );
- base.href = this.resolveURI( baseURI );
- var head = doc.getElementsByTagName( "head" )[0];
- head.appendChild( base );
- }
-
- var a = doc.createElement( "a" );
- a.href = uri;
- return a.href;
- },
-
-
- merge: function( target /* [, source1 [, source2 ... ] ] */ ) {
- for ( var index = 1; index < arguments.length; index++ ) {
- var source = arguments[index];
- Object.keys( source ).forEach( function( key ) {
- if ( source[key] !== undefined ) {
- target[key] = source[key];
- }
- } );
- }
- return target;
- },
- validObject: function( obj ) {
- var objType = ( {} ).toString.call( obj ).match( /\s([a-zA-Z]+)/ )[ 1 ].toLowerCase();
- return ( objType != 'null' && objType != 'undefined' );
- },
- hasFileType: function( value ) {
- return ( this.fileType( value ) !== undefined )
- },
- fileType: function( filename ) {
- var fileFormat = undefined;
- var temp = filename.split( '.' );
- if ( temp.length > 1 ) {
- fileFormat = temp.pop();
- if ( fileFormat.length > 5 ) {
- fileFormat = undefined;
- }
- }
- return fileFormat;
- },
- ifPrototypeGetId: function( appID, prototypes, nodeID, childID ) {
- var prototypeID = undefined;
- if ( ( nodeID == 0 && childID != appID ) || prototypes[ nodeID ] !== undefined ) {
- if ( nodeID != 0 || childID != appID ) {
- prototypeID = nodeID ? nodeID : childID;
- if ( prototypes[ prototypeID ] !== undefined ) {
- prototypeID = childID;
- }
- return prototypeID;
- }
- }
- return undefined;
- },
- isString: function( s ) {
- return ( typeof( s ) === 'string' || s instanceof String );
- },
- isFunction: function( obj ) {
- return ( typeof obj === 'function' || obj instanceof Function );
- },
-
-
- xpath: xpath,
-
-
- color: color,
-
-
- coordinates: coordinates,
- };
- return exports;
- } );
|