Added nextUid() function for unified way of generating IDs in angular

This commit is contained in:
Misko Hevery 2011-04-12 13:40:23 -07:00
parent 20ce797906
commit 2a12f7dcaa
2 changed files with 47 additions and 0 deletions

View file

@ -114,6 +114,7 @@ var $$element = '$element',
angularCallbacks = extensionMap(angular, 'callbacks'),
nodeName_,
rngScript = /^(|.*\/)angular(-.*?)?(\.min)?.js(\?[^#]*)?(#(.*))?$/,
uid = ['0', '0', '0'];
DATE_ISOSTRING_LN = 24;
/**
@ -189,6 +190,36 @@ function formatError(arg) {
return arg;
}
/**
* @description
* A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric
* characters such as '012ABC'. The reason why we are not using simply a number counter is that
* the number string gets longer over time, and it can also overflow, where as the the nextId
* will grow much slower, it is a string, and it will never overflow.
*
* @returns an unique alpha-numeric string
*/
function nextUid() {
var index = uid.length;
var digit;
while(index) {
index--;
digit = uid[index].charCodeAt(0);
if (digit == 57 /*'9'*/) {
uid[index] = 'A';
return uid.join('');
}
if (digit == 90 /*'Z'*/) {
uid[index] = '0';
} else {
uid[index] = String.fromCharCode(digit + 1);
return uid.join('');
}
}
uid.unshift('0');
return uid.join('');
}
/**
* @workInProgress

View file

@ -582,4 +582,20 @@ describe('angular', function(){
});
}
});
describe('nextUid()', function(){
it('should return new id per call', function(){
var seen = {};
var count = 100;
while(count--) {
var current = nextUid();
expect(current.match(/[\d\w]+/)).toBeTruthy();
expect(seen[current]).toBeFalsy();
seen[current] = true;
}
});
});
});