Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojox.uuid._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.uuid._base"] = true;dojo.provide("dojox.uuid._base");// Public constants:dojox.uuid.NIL_UUID = "00000000-0000-0000-0000-000000000000";dojox.uuid.version = {// Enumeration for the different UUID versions.UNKNOWN: 0,TIME_BASED: 1,DCE_SECURITY: 2,NAME_BASED_MD5: 3,RANDOM: 4,NAME_BASED_SHA1: 5 };dojox.uuid.variant = {// Enumeration for the different UUID variants.NCS: "0",DCE: "10",MICROSOFT: "110",UNKNOWN: "111" };dojox.uuid.assert = function(/*Boolean*/ booleanValue, /*String?*/ message){// summary:// Throws an exception if the assertion fails.// description:// If the asserted condition is true, this method does nothing. If the// condition is false, we throw an error with a error message.// booleanValue: Must be true for the assertion to succeed.// message: A string describing the assertion.// throws: Throws an Error if 'booleanValue' is false.if(!booleanValue){if(!message){message = "An assert statement failed.\n" +"The method dojox.uuid.assert() was called with a 'false' value.\n";}throw new Error(message);}};dojox.uuid.generateNilUuid = function(){// summary:// This function returns the Nil UUID: "00000000-0000-0000-0000-000000000000".// description:// The Nil UUID is described in section 4.1.7 of// RFC 4122: http://tools.ietf.org/html/rfc4122#section-4.1.7// examples:// var string = dojox.uuid.generateNilUuid();return dojox.uuid.NIL_UUID;; // String};dojox.uuid.isValid = function(/*String*/ uuidString){// summary:// Returns true if the UUID was initialized with a valid value.uuidString = uuidString.toString();var valid = (dojo.isString(uuidString) &&(uuidString.length == 36) &&(uuidString == uuidString.toLowerCase()));if(valid){var arrayOfParts = uuidString.split("-");valid = ((arrayOfParts.length == 5) &&(arrayOfParts[0].length == 8) &&(arrayOfParts[1].length == 4) &&(arrayOfParts[2].length == 4) &&(arrayOfParts[3].length == 4) &&(arrayOfParts[4].length == 12));var HEX_RADIX = 16;for (var i in arrayOfParts) {var part = arrayOfParts[i];var integer = parseInt(part, HEX_RADIX);valid = valid && isFinite(integer);}}return valid; // boolean};dojox.uuid.getVariant = function(/*String*/ uuidString){// summary:// Returns a variant code that indicates what type of UUID this is.// Returns one of the enumerated dojox.uuid.variant values.// example:// var variant = dojox.uuid.getVariant("3b12f1df-5232-4804-897e-917bf397618a");// dojox.uuid.assert(variant == dojox.uuid.variant.DCE);// example:// "3b12f1df-5232-4804-897e-917bf397618a"// ^// |// (variant "10__" == DCE)if(!dojox.uuid._ourVariantLookupTable){var variant = dojox.uuid.variant;var lookupTable = [];lookupTable[0x0] = variant.NCS; // 0000lookupTable[0x1] = variant.NCS; // 0001lookupTable[0x2] = variant.NCS; // 0010lookupTable[0x3] = variant.NCS; // 0011lookupTable[0x4] = variant.NCS; // 0100lookupTable[0x5] = variant.NCS; // 0101lookupTable[0x6] = variant.NCS; // 0110lookupTable[0x7] = variant.NCS; // 0111lookupTable[0x8] = variant.DCE; // 1000lookupTable[0x9] = variant.DCE; // 1001lookupTable[0xA] = variant.DCE; // 1010lookupTable[0xB] = variant.DCE; // 1011lookupTable[0xC] = variant.MICROSOFT; // 1100lookupTable[0xD] = variant.MICROSOFT; // 1101lookupTable[0xE] = variant.UNKNOWN; // 1110lookupTable[0xF] = variant.UNKNOWN; // 1111dojox.uuid._ourVariantLookupTable = lookupTable;}uuidString = uuidString.toString();var variantCharacter = uuidString.charAt(19);var HEX_RADIX = 16;var variantNumber = parseInt(variantCharacter, HEX_RADIX);dojox.uuid.assert((variantNumber >= 0) && (variantNumber <= 16));return dojox.uuid._ourVariantLookupTable[variantNumber]; // dojox.uuid.variant};dojox.uuid.getVersion = function(/*String*/ uuidString){// summary:// Returns a version number that indicates what type of UUID this is.// Returns one of the enumerated dojox.uuid.version values.// example:// var version = dojox.uuid.getVersion("b4308fb0-86cd-11da-a72b-0800200c9a66");// dojox.uuid.assert(version == dojox.uuid.version.TIME_BASED);// exceptions:// Throws an Error if this is not a DCE Variant UUID.var errorMessage = "dojox.uuid.getVersion() was not passed a DCE Variant UUID.";dojox.uuid.assert(dojox.uuid.getVariant(uuidString) == dojox.uuid.variant.DCE, errorMessage);uuidString = uuidString.toString();// "b4308fb0-86cd-11da-a72b-0800200c9a66"// ^// |// (version 1 == TIME_BASED)var versionCharacter = uuidString.charAt(14);var HEX_RADIX = 16;var versionNumber = parseInt(versionCharacter, HEX_RADIX);return versionNumber; // dojox.uuid.version};dojox.uuid.getNode = function(/*String*/ uuidString){// summary:// If this is a version 1 UUID (a time-based UUID), getNode() returns a// 12-character string with the "node" or "pseudonode" portion of the UUID,// which is the rightmost 12 characters.// exceptions:// Throws an Error if this is not a version 1 UUID.var errorMessage = "dojox.uuid.getNode() was not passed a TIME_BASED UUID.";dojox.uuid.assert(dojox.uuid.getVersion(uuidString) == dojox.uuid.version.TIME_BASED, errorMessage);uuidString = uuidString.toString();var arrayOfStrings = uuidString.split('-');var nodeString = arrayOfStrings[4];return nodeString; // String (a 12-character string, which will look something like "917bf397618a")};dojox.uuid.getTimestamp = function(/*String*/ uuidString, /*String?*/ returnType){// summary:// If this is a version 1 UUID (a time-based UUID), this method returns// the timestamp value encoded in the UUID. The caller can ask for the// timestamp to be returned either as a JavaScript Date object or as a// 15-character string of hex digits.// returnType: Any of these five values: "string", String, "hex", "date", Date// returns:// Returns the timestamp value as a JavaScript Date object or a 15-character string of hex digits.// examples:// var uuidString = "b4308fb0-86cd-11da-a72b-0800200c9a66";// var date, string, hexString;// date = dojox.uuid.getTimestamp(uuidString); // returns a JavaScript Date// date = dojox.uuid.getTimestamp(uuidString, Date); //// string = dojox.uuid.getTimestamp(uuidString, String); // "Mon, 16 Jan 2006 20:21:41 GMT"// hexString = dojox.uuid.getTimestamp(uuidString, "hex"); // "1da86cdb4308fb0"// exceptions:// Throws an Error if this is not a version 1 UUID.var errorMessage = "dojox.uuid.getTimestamp() was not passed a TIME_BASED UUID.";dojox.uuid.assert(dojox.uuid.getVersion(uuidString) == dojox.uuid.version.TIME_BASED, errorMessage);uuidString = uuidString.toString();if(!returnType){returnType = null};switch(returnType){case "string":case String:return dojox.uuid.getTimestamp(uuidString, Date).toUTCString(); // String (e.g. "Mon, 16 Jan 2006 20:21:41 GMT")break;case "hex":// Return a 15-character string of hex digits containing the// timestamp for this UUID, with the high-order bits first.var arrayOfStrings = uuidString.split('-');var hexTimeLow = arrayOfStrings[0];var hexTimeMid = arrayOfStrings[1];var hexTimeHigh = arrayOfStrings[2];// Chop off the leading "1" character, which is the UUID// version number for time-based UUIDs.hexTimeHigh = hexTimeHigh.slice(1);var timestampAsHexString = hexTimeHigh + hexTimeMid + hexTimeLow;dojox.uuid.assert(timestampAsHexString.length == 15);return timestampAsHexString; // String (e.g. "1da86cdb4308fb0")break;case null: // no returnType was specified, so default to Datecase "date":case Date:// Return a JavaScript Date object.var GREGORIAN_CHANGE_OFFSET_IN_HOURS = 3394248;var HEX_RADIX = 16;var arrayOfParts = uuidString.split('-');var timeLow = parseInt(arrayOfParts[0], HEX_RADIX);var timeMid = parseInt(arrayOfParts[1], HEX_RADIX);var timeHigh = parseInt(arrayOfParts[2], HEX_RADIX);var hundredNanosecondIntervalsSince1582 = timeHigh & 0x0FFF;hundredNanosecondIntervalsSince1582 <<= 16;hundredNanosecondIntervalsSince1582 += timeMid;// What we really want to do next is shift left 32 bits, but the// result will be too big to fit in an int, so we'll multiply by 2^32,// and the result will be a floating point approximation.hundredNanosecondIntervalsSince1582 *= 0x100000000;hundredNanosecondIntervalsSince1582 += timeLow;var millisecondsSince1582 = hundredNanosecondIntervalsSince1582 / 10000;// Again, this will be a floating point approximation.// We can make things exact later if we need to.var secondsPerHour = 60 * 60;var hoursBetween1582and1970 = GREGORIAN_CHANGE_OFFSET_IN_HOURS;var secondsBetween1582and1970 = hoursBetween1582and1970 * secondsPerHour;var millisecondsBetween1582and1970 = secondsBetween1582and1970 * 1000;var millisecondsSince1970 = millisecondsSince1582 - millisecondsBetween1582and1970;var timestampAsDate = new Date(millisecondsSince1970);return timestampAsDate; // Datebreak;default:// we got passed something other than a valid returnTypedojox.uuid.assert(false, "dojox.uuid.getTimestamp was not passed a valid returnType: " + returnType);break;}};}