Advertisement
Guest User

Untitled

a guest
Dec 18th, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. (function(window, undefined) {
  2. var dependencies = {},
  3. instances = {};
  4.  
  5. var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
  6. function stripComments(functionString) {
  7. return functionString.replace(STRIP_COMMENTS, '');
  8. }
  9.  
  10. var FN_NEW_LINE_REPLACE = /[\s\r\n]+/;
  11. function oneline(functionString) {
  12. return functionString.replace(FN_NEW_LINE_REPLACE, '');
  13. }
  14.  
  15. var STRIP_WHITESPACE = /[\s\t]/g;
  16. function trimWhitespace(functionString) {
  17. return functionString.replace(STRIP_WHITESPACE, '');
  18. }
  19.  
  20. var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
  21. function parseArgs(functionString) {
  22. return functionString.match(FN_ARGS)[1];
  23. }
  24.  
  25. var FN_ARG_SPLIT = /,/;
  26. function getArgs(functionString) {
  27. if (functionString) {
  28. return functionString.split(FN_ARG_SPLIT);
  29. } else {
  30. return [];
  31. }
  32. }
  33.  
  34. /**
  35. * [$injector description]
  36. * @type {[type]}
  37. */
  38. window.$injector = {
  39. /**
  40. * [annotate description]
  41. * @param {[type]} constructorFn [description]
  42. * @return {[type]} [description]
  43. */
  44. annotate: function(constructorFn) {
  45. var sanitizedFn = stripComments(constructorFn.toString());
  46. var onelinedFn = oneline(sanitizedFn);
  47. var condensedFn = trimWhitespace(onelinedFn);
  48. var argString = parseArgs(condensedFn);
  49. var args = getArgs(argString);
  50.  
  51. constructorFn.$inject_ = args;
  52. },
  53.  
  54. /**
  55. * [provide description]
  56. * @param {[type]} name [description]
  57. * @param {[type]} constructorFn [description]
  58. * @return {[type]} [description]
  59. */
  60. provide: function(name, constructorFn) {
  61. this.annotate(constructorFn);
  62. dependencies[name] = constructorFn;
  63. return constructorFn;
  64. },
  65.  
  66. /**
  67. * [get description]
  68. * @param {[type]} name [description]
  69. * @return {[type]} [description]
  70. */
  71. get: function(name) {
  72. var instance = instances[name];
  73. if (instance) {
  74. return instance;
  75. }
  76.  
  77. var constructorFn = dependencies[name];
  78. if (constructorFn) {
  79. var deps = [];
  80.  
  81. for (var a = 0; a < constructorFn.$inject_.length; a++) {
  82. var dependency = this.get(constructorFn.$inject_[a]);
  83. deps.push(dependency);
  84. }
  85.  
  86. var fn = new constructorFn();
  87. constructorFn.apply(fn, deps);
  88. instances[name] = fn;
  89. return fn;
  90. } else {
  91. throw new Error('Dependency [' + name + '] not registered in graph.');
  92. }
  93. }
  94. };
  95. })(window);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement