fmd.js
Version:
another module writing system
79 lines (54 loc) • 1.94 kB
JavaScript
/**
* @module fmd/id2url
* @author Edgar <mail@edgar.im>
* @version v0.4
* @date 170213
* */
fmd( 'id2url', ['global','event','config'],
function( global, event, config ){
'use strict';
var rAbsolute = /^https?:\/\//i;
var TIME_STAMP = ( new Date() ).getTime();
config.set({
baseUrl: (function(){
var rDomain = /^\w+\:\/\/[\w\-\.:]+\//i,
scripts = global.document.getElementsByTagName('script'),
selfScript = scripts[scripts.length-1],
src = selfScript.hasAttribute ? selfScript.src : selfScript.getAttribute( 'src', 4 ),
selfUrl = src ? src.match( rDomain ) : null;
return selfUrl ? selfUrl[0] : '';
})()
});
config.register({
key: 'stamp',
name: 'object'
});
var addBaseUrl = function( asset ){
rAbsolute.test( asset.url ) || ( asset.url = config.get('baseUrl') + asset.url );
},
addExtname = function( asset ){
var url = asset.url;
url.lastIndexOf('.') < url.lastIndexOf('/') && ( asset.url += '.js' );
},
addStamp = function( asset ){
var t = config.get('hasStamp') ? TIME_STAMP : null,
stampMap = config.get( 'stamp' );
if ( stampMap ){
for ( var key in stampMap ){
if ( ( new RegExp( key ) ).test( asset.id ) ){
t = stampMap[key];
break;
}
}
}
t && ( asset.url += '?fmd.stamp=' + t );
},
id2url = function( asset ){
event.emit( 'resolve', asset );
addBaseUrl( asset );
addExtname( asset );
event.emit( 'stamp', asset );
};
event.on( 'stamp', addStamp );
event.on( 'id2url', id2url );
} );