mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-05-15 10:13:10 +00:00
Added nextUid() function for unified way of generating IDs in angular
This commit is contained in:
parent
20ce797906
commit
2a12f7dcaa
2 changed files with 47 additions and 0 deletions
|
|
@ -114,6 +114,7 @@ var $$element = '$element',
|
||||||
angularCallbacks = extensionMap(angular, 'callbacks'),
|
angularCallbacks = extensionMap(angular, 'callbacks'),
|
||||||
nodeName_,
|
nodeName_,
|
||||||
rngScript = /^(|.*\/)angular(-.*?)?(\.min)?.js(\?[^#]*)?(#(.*))?$/,
|
rngScript = /^(|.*\/)angular(-.*?)?(\.min)?.js(\?[^#]*)?(#(.*))?$/,
|
||||||
|
uid = ['0', '0', '0'];
|
||||||
DATE_ISOSTRING_LN = 24;
|
DATE_ISOSTRING_LN = 24;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -189,6 +190,36 @@ function formatError(arg) {
|
||||||
return 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
|
* @workInProgress
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue