Advertisement
hellsgate

Untitled

Mar 19th, 2014
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.21 KB | None | 0 0
  1. (function(){
  2. /*
  3. * script for js/css parallel loading with dependancies management
  4. * @author Jonathan Gotti < jgotti at jgotti dot net >
  5. * @licence dual licence mit / gpl
  6. * @since 2012-04-12
  7. * @todo add prefetching using text/cache for js files
  8. * @changelog
  9. * á á á á á á- 2013-01-25 - add parrallel loading inside single load call
  10. * á á á á á á- 2012-06-29 - some minifier optimisations
  11. * á á á á á á- 2012-04-20 - now sharp part of url will be used as tag id
  12. * á á á á á á á á á á á á - add options for checking already loaded scripts at load time
  13. * á á á á á á- 2012-04-19 - add addAliases method
  14. */
  15. /** gEval credits goes to my javascript idol John Resig, this is a simplified jQuery.globalEval */
  16. var gEval = function(js){ ( window.execScript || function(js){ window[ "eval" ].call(window,js);} )(js); }
  17. , isA = áfunction(a,b){ return a instanceof (b || Array);}
  18. //-- some minifier optimisation
  19. , D = document
  20. , getElementsByTagName = 'getElementsByTagName'
  21. , replace = 'replace'
  22. , match = 'match'
  23. , length = 'length'
  24. , readyState = 'readyState'
  25. , onreadystatechange = 'onreadystatechange'
  26. //-- get the current script tag for further evaluation of it's eventual content
  27. ,scripts = D[getElementsByTagName]("script")
  28. ,script = scripts[ scripts[length] - 1 ].innerHTML[replace](/^\s+|\s+$/g,'')
  29. ;
  30. //avoid multiple inclusion to override current loader but allow tag content evaluation
  31. if( typeof ljs !== 'undefined' ){ script && gEval(script); return; }
  32.  
  33. var checkLoaded = scripts[ scripts[length] - 1 ].src[match](/checkLoaded/)?true:false
  34. //-- keep trace of header as we will make multiple access to it
  35. , header á = D[getElementsByTagName]("head")[0] || D.documentElement
  36. , appendElmt = function(type,attrs,cb){
  37. var e = D.createElement(type), i;
  38. if( cb ){ //-- this is not intended to be used for link
  39. if(e[readyState]){
  40. e[onreadystatechange] = function(){
  41. if (e[readyState] === "loaded" || e[readyState] === "complete"){
  42. e[onreadystatechange] = null;
  43. cb();
  44. }
  45. };
  46. }else{
  47. e.onload = cb;
  48. }
  49. }
  50. for( i in attrs ){ e[i]=attrs[i]; }
  51. header.appendChild(e);
  52. // return e; // unused at this time so drop it
  53. }
  54. , load = function(url,cb){
  55. if( this.aliases && this.aliases[url] ){
  56. var args = this.aliases[url].slice(0);
  57. isA(args) || (args=[args]);
  58. cb && args.push(cb);
  59. return this.load.apply(this,args);
  60. }
  61. if( isA(url) ){ // parallelized request
  62. for( var l=url.length; l--;){
  63. this.load(url[l]);
  64. }
  65. cb && url.push(cb); // relaunch the dependancie queue
  66. return this.load.apply(this,url);
  67. }
  68. if( url[match](/\.css\b/) ){
  69. return this.loadcss(url,cb);
  70. }
  71. return this.loadjs(url,cb);
  72. }
  73. , loaded = {} á// will handle already loaded urls
  74. , loader á= {
  75. aliases:{}
  76. , staticPath: function(){
  77.  
  78. }
  79. , loadjs: function(url,cb){
  80. var id =(url[match]('#')?url[replace](/^[^#]+#/,''):null);
  81. id && (url = url[replace](/#.*$/,''));
  82. if( loaded[url] === true ){ // already loaded exec cb if any
  83. cb && cb();
  84. return this;
  85. }else if( loaded[url]!== undefined ){ // already asked for loading we append callback if any else return
  86. if( cb ){
  87. loaded[url] = function(ocb,cb){ return function(){ ocb && ocb(); cb && cb(); } }(loaded[url],cb);
  88. }
  89. return this;
  90. }
  91. // first time we ask this script
  92. loaded[url] = function(cb){ return function(){loaded[url]=true; cb && cb();}}(cb);
  93. appendElmt('script',{type:'text/javascript',src:url,id:id},function(){ loaded[url]() });
  94. return this;
  95. }
  96. , loadcss: function(url,cb){
  97. var id á=(url[match]('#')?url[replace](/^[^#]+#/,''):null);
  98. id && (url = url[replace](/#.*$/,''));
  99. if(! loaded[url]){
  100. appendElmt('link',{type:'text/css',rel:'stylesheet',href:url,id:id},function(){ loaded[url]=true; });
  101. }
  102. loaded[url] = true;
  103. cb && cb();
  104. return this;
  105. }
  106. , load: function(){
  107. var argv=arguments,argc = argv[length];
  108. if( argc === 1 && isA(argv[0],Function) ){
  109. argv[0]();
  110. return this;
  111. }
  112. load.call(this,argv[0], argc <= 1 ? undefined : function(){ loader.load.apply(loader,[].slice.call(argv,1))} )
  113. return this;
  114. }
  115. , addAliases:function(aliases){
  116. for(var i in aliases ){
  117. this.aliases[i]= isA(aliases[i]) ? aliases[i].slice(0) : aliases[i];
  118. }
  119. return this;
  120. }
  121. }
  122. ;
  123. if( checkLoaded ){
  124. var i,l,links;
  125. for(i=0,l=scripts[length];i<l;i++){
  126. loaded[scripts[i].src]=true;
  127. }
  128. links = D[getElementsByTagName]('link');
  129. for(i=0,l=links[length];i<l;i++){
  130. (links[i].rel==="stylesheet" || links[i].type==='text/css') && (loaded[links[i].href]=true);
  131. }
  132. }
  133. //export ljs
  134. ljs = loader;
  135. // eval inside tag code if any
  136. script && gEval(script);
  137. })();
  138.  
  139. /*
  140. Sprintf implementation, to be used within the framework for east to handle templating of strings.
  141. */
  142. /*! sprintf.jsá
  143. | Copyright (c) 2007-2013 Alexandru Marasteanu <hello at alexei dot ro>á
  144. | 3 clause BSD licenseá
  145. */
  146. (function(ctx) {
  147. á ávar sprintf = function() {
  148. á á á áif (!sprintf.cache.hasOwnProperty(arguments[0])) {
  149. á á á á á ásprintf.cache[arguments[0]] = sprintf.parse(arguments[0]);
  150. á á á á}
  151. á á á áreturn sprintf.format.call(null, sprintf.cache[arguments[0]], arguments);
  152. á á};
  153.  
  154. á ásprintf.format = function(parse_tree, argv) {
  155. á á á ávar cursor = 1,
  156. á á á á á átree_length = parse_tree.length,
  157. á á á á á ánode_type = '',
  158. á á á á á áarg, output = [],
  159. á á á á á ái, k, match, pad, pad_character, pad_length;
  160. á á á áfor (i = 0; i < tree_length; i++) {
  161. á á á á á ánode_type = get_type(parse_tree[i]);
  162. á á á á á áif (node_type === 'string') {
  163. á á á á á á á áoutput.push(parse_tree[i]);
  164. á á á á á á} else if (node_type === 'array') {
  165. á á á á á á á ámatch = parse_tree[i]; // convenience purposes only
  166. á á á á á á á áif (match[2]) { // keyword argument
  167. á á á á á á á á á áarg = argv[cursor];
  168. á á á á á á á á á áfor (k = 0; k < match[2].length; k++) {
  169. á á á á á á á á á á á áif (!arg.hasOwnProperty(match[2][k])) {
  170. á á á á á á á á á á á á á áthrow (sprintf('[sprintf] property "%s" does not exist', match[2][k]));
  171. á á á á á á á á á á á á}
  172. á á á á á á á á á á á áarg = arg[match[2][k]];
  173. á á á á á á á á á á}
  174. á á á á á á á á} else if (match[1]) { // positional argument (explicit)
  175. á á á á á á á á á áarg = argv[match[1]];
  176. á á á á á á á á} else { // positional argument (implicit)
  177. á á á á á á á á á áarg = argv[cursor++];
  178. á á á á á á á á}
  179.  
  180. á á á á á á á áif (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {
  181. á á á á á á á á á áthrow (sprintf('[sprintf] expecting number but found %s', get_type(arg)));
  182. á á á á á á á á}
  183. á á á á á á á áswitch (match[8]) {
  184. á á á á á á á á á ácase 'b':
  185. á á á á á á á á á á á áarg = arg.toString(2);
  186. á á á á á á á á á á á ábreak;
  187. á á á á á á á á á ácase 'c':
  188. á á á á á á á á á á á áarg = String.fromCharCode(arg);
  189. á á á á á á á á á á á ábreak;
  190. á á á á á á á á á ácase 'd':
  191. á á á á á á á á á á á áarg = parseInt(arg, 10);
  192. á á á á á á á á á á á ábreak;
  193. á á á á á á á á á ácase 'e':
  194. á á á á á á á á á á á áarg = match[7] ? arg.toExponential(match[7]) : arg.toExponential();
  195. á á á á á á á á á á á ábreak;
  196. á á á á á á á á á ácase 'f':
  197. á á á á á á á á á á á áarg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg);
  198. á á á á á á á á á á á ábreak;
  199. á á á á á á á á á ácase 'o':
  200. á á á á á á á á á á á áarg = arg.toString(8);
  201. á á á á á á á á á á á ábreak;
  202. á á á á á á á á á ácase 's':
  203. á á á á á á á á á á á áarg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg);
  204. á á á á á á á á á á á ábreak;
  205. á á á á á á á á á ácase 'u':
  206. á á á á á á á á á á á áarg = arg >>> 0;
  207. á á á á á á á á á á á ábreak;
  208. á á á á á á á á á ácase 'x':
  209. á á á á á á á á á á á áarg = arg.toString(16);
  210. á á á á á á á á á á á ábreak;
  211. á á á á á á á á á ácase 'X':
  212. á á á á á á á á á á á áarg = arg.toString(16).toUpperCase();
  213. á á á á á á á á á á á ábreak;
  214. á á á á á á á á}
  215. á á á á á á á áarg = (/[def]/.test(match[8]) && match
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement