|
2 | 2 | $js - asynchronous module definition framework
|
3 | 3 | or just simple lightweight javascript dependencies manager
|
4 | 4 |
|
5 |
| - @version 4.8 |
| 5 | + @version 5.0 |
6 | 6 | @link http://github.com/redcatphp/js/
|
7 | 7 | @author Jo Surikat <jo@surikat.pro>
|
8 | 8 | @website http://redcatphp.com
|
|
32 | 32 | return true;
|
33 | 33 | };
|
34 | 34 | var ts = (new Date().getTime()).toString();
|
35 |
| - var cacheFix = function(fileName,dev,min,ext,cdn){ |
36 |
| - if(dev||min){ |
37 |
| - var relative = fileName.indexOf('//')<0||(cdn&&fileName.indexOf(cdn)===0); |
38 |
| - if(min){ |
39 |
| - if(relative&&fileName.indexOf('.min.'+ext)<0&&fileName.indexOf('.'+ext)){ |
40 |
| - var p = fileName.lastIndexOf('.'+ext); |
41 |
| - if(p>-1) |
42 |
| - fileName = fileName.substr(0,p)+'.min'+fileName.substr(p); |
43 |
| - } |
| 35 | + var devOverride = function(u,ext){ |
| 36 | + var ref, dev; |
| 37 | + if(ext=='js') ref = $js; |
| 38 | + else ref = $css; |
| 39 | + dev = ref.dev; |
| 40 | + if(dev){ |
| 41 | + if(ref.inProdFiles.indexOf(u)!==-1){ |
| 42 | + dev = false; |
44 | 43 | }
|
45 |
| - else{ |
46 |
| - if(relative&&fileName.indexOf('_t=')<0) |
47 |
| - fileName += (fileName.indexOf('?')<0?'?':'&')+'_t='+ts; |
| 44 | + } |
| 45 | + else{ |
| 46 | + if(ref.inDevFiles.indexOf(u)!==-1){ |
| 47 | + dev = true; |
| 48 | + } |
| 49 | + } |
| 50 | + return dev; |
| 51 | + }; |
| 52 | + var cacheFix = function(fileName,dev,min,ext,cdn){ |
| 53 | + if(!min&&!dev) return fileName; |
| 54 | + if(!fileName.indexOf('//')<0||(cdn&&fileName.indexOf(cdn)===0)) return; //relative |
| 55 | + if(dev){ |
| 56 | + if(fileName.indexOf('_t=')<0) |
| 57 | + fileName += (fileName.indexOf('?')<0?'?':'&')+'_t='+ts; |
| 58 | + } |
| 59 | + else if(min){ |
| 60 | + if(fileName.indexOf('.min.'+ext)<0&&fileName.indexOf('.'+ext)){ |
| 61 | + var p = fileName.lastIndexOf('.'+ext); |
| 62 | + if(p>-1) |
| 63 | + fileName = fileName.substr(0,p)+'.min'+fileName.substr(p); |
48 | 64 | }
|
49 | 65 | }
|
50 | 66 | return fileName;
|
|
96 | 112 | };
|
97 | 113 | return callback;
|
98 | 114 | };
|
99 |
| - var createScript = function(u){ |
| 115 | + var createScript = function(u,dev){ |
100 | 116 | var callback = makeSrcCallback(u);
|
101 | 117 | var s = d.createElement('script');
|
102 | 118 | d.type = 'text/javascript';
|
103 | 119 | d.body.appendChild(s);
|
104 | 120 | s.onload = callback;
|
105 | 121 | s.onreadystatechange = function(){if(callback&&this.readyState==='loaded'){callback();}}; //old browsers
|
106 | 122 | s.setAttribute('async','async');
|
107 |
| - s.src = cacheFix(u,$js.dev,$js.min,'js',$js.cdn); |
| 123 | + s.src = cacheFix(u,dev,$js.min,'js',$js.cdn); |
108 | 124 | };
|
109 | 125 | var resolve = function(u, c){
|
110 | 126 | if(typeof(c)=='function') c();
|
|
124 | 140 | c();
|
125 | 141 | return;
|
126 | 142 | }
|
| 143 | + var dev = devOverride(u,'js'); |
127 | 144 | u = getSrc(u);
|
128 | 145 | if(!requiring[u]){
|
129 | 146 | requiring[u] = [];
|
130 |
| - createScript(u); |
| 147 | + createScript(u,dev); |
131 | 148 | }
|
132 | 149 | if(typeof(c)=='function')
|
133 | 150 | requiring[u].push(c);
|
|
542 | 559 | httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
|
543 | 560 | }
|
544 | 561 | }
|
545 |
| - httpRequest.open('HEAD', cacheFix(url,$js.dev,$js.min,'js',$js.cdn), true); |
| 562 | + httpRequest.open('HEAD', cacheFix(url,devOverride(s,'js'),$js.min,'js',$js.cdn), true); |
546 | 563 | httpRequest.onreadystatechange = function(){
|
547 | 564 | if(httpRequest.readyState==4){
|
548 | 565 | if(httpRequest.status!=404){
|
|
640 | 657 | js.pathSuffix = '.js';
|
641 | 658 | js.min = false;
|
642 | 659 | js.cdn = false;
|
| 660 | + js.inProdFiles = []; |
| 661 | + js.inDevFiles = []; |
643 | 662 |
|
644 | 663 | //methods
|
645 | 664 | js.alias = function(alias,concrete){
|
|
774 | 793 | $js.dependencies(o.dependencies);
|
775 | 794 | if(o.call)
|
776 | 795 | $js(o.call);
|
| 796 | + if(o.inProdFiles) |
| 797 | + $js.inProdFiles = o.inProdFiles; |
| 798 | + if(o.inDevFiles) |
| 799 | + $js.inDevFiles = o.inDevFiles; |
777 | 800 | };
|
778 | 801 | js.intercept = function(){
|
779 | 802 | var interceptor = {};
|
|
827 | 850 | style.rel = 'stylesheet';
|
828 | 851 | if(media)
|
829 | 852 | style.media = media;
|
830 |
| - style.href = cacheFix(fileName,$css.dev,$css.min,'css',$css.cdn); |
| 853 | + style.href = cacheFix(fileName,devOverride(s,'css'),$css.min,'css',$css.cdn); |
831 | 854 | d.getElementsByTagName('head')[0].appendChild(style);
|
832 | 855 | }
|
833 | 856 | }
|
|
838 | 861 | css.pathSuffix = '.css';
|
839 | 862 | css.min = false;
|
840 | 863 | css.cdn = false;
|
| 864 | + css.inProdFiles = []; |
| 865 | + css.inDevFiles = []; |
841 | 866 | return css;
|
842 | 867 | })();
|
843 | 868 |
|
|
0 commit comments