Skip to content

Instantly share code, notes, and snippets.

@isaacs
Created February 25, 2010 18:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save isaacs/314903 to your computer and use it in GitHub Desktop.
Save isaacs/314903 to your computer and use it in GitHub Desktop.
function( request, response ) {
/* Determine Encoding */
var isGzip = /gzip/.test( request.headers['accept-encoding'] ) ? true : false;
/* Extract Scope */
var sandbox = /\.+(.+)\.sb+/.exec( request.headers.host );
if ( sandbox !== null ) {
var scope = sandbox[1];
} else {
var scope = config.defaults.scope;
}
/* Query String Parsing */
var itemStack = request.url.split( '%7C' );
/* Extract header piece */
var fileStack = []
if ( itemStack.length > 1 ) {
/* Multi */
var header = n.u.arrayReset( itemStack[0].split( '/' ) );
var skin = header[0];
delete itemStack[0];
fileStack = n.u.arrayReset( itemStack );
} else {
/* Single */
var pieces = n.u.arrayReset( itemStack[0].split( '/' ) );
var skin = pieces[0];
delete pieces[0];
if ( n.u.isNumber( pieces[1] ) ) { delete pieces[1]; }
fileStack[0] = n.u.arrayReset( pieces ).join( '/' );
}
/* Check Cache */
var cacheString = escape( escape( request.url ) );
if ( cacheData = getCache( scope, cacheString ) ) {
n.sys.puts( 'CACHE' );
sendResponse( response, cacheData, true );
return false;
} else {
/* Verify requested file extensions (should be .css) */
for ( i in fileStack ) {
if ( n.path.extname( fileStack[i] ) != '.css' ) {
delete fileStack[i];
}
}
fileStack = n.u.arrayReset( fileStack );
if ( !fileStack.length ) {
//response.sendHeader( 404 );
response.close();
return false;
}
n.sys.puts( 'LIVE' );
var targetSkin = config.paths.repository;
targetSkin = targetSkin.replace( /\[SCOPE\]/, scope );
targetSkin = targetSkin.replace( /\[SKIN\]/, skin );
n.path.exists( targetSkin, function( exists ) {
/* Blow out if incorrect skin */
if ( !exists ) {
n.sys.puts( 'Invalid skin: ' + skin );
response.sendHeader( 404 );
response.close();
return false;
}
var dataStack = []
var fileCount = fileStack.length;
var fileTarget;
var rawSize = 0;
var compressedSize = 0;
/* Read Files */
for ( i in fileStack ) {
var pathPieces = fileStack[i].split( '/' );
fileTarget = n.path.join( targetSkin, pathPieces.join( '/' ) );
( function ( _target ) {
n.path.exists( fileTarget, function( exists ) {
if ( !exists ) {
n.sys.puts( 'Invalid file: ' + n.path.basename( _target ) );
response.sendHeader( 404 );
response.close();
return false;
}
n.fs.readFile( _target, function( err, data ) {
/* Parse SKIN tags */
data = data.replace( /\[SKIN\]/g, skin );
/* Parse SCOPE tags */
data = data.replace( /\[SCOPE\]/g, ( skin == config.defaults.scope ? '' : scope + '.sb.' ) );
/* Compress */
data = data.replace( /(\/\*.*\*\/)|(\n|\r)+|\t*/g, '' );
data = data.replace( /\s{2,}/g, ' ' );
data = data.replace( /(\s)*:(\s)*/g, ':' );
data = data.replace( /(\s)+\./g, ' .' );
data = data.replace( /(\s|\n|\r)*\{(\s|\n|\r)*/g, '{' );
data = data.replace( /(\s|\n|\r)*\}(\s|\n|\r)*/g, '}' );
data = data.replace( /;(\s)+/g, ';' );
data = data.replace( /,(\s)+/g, ',' );
data = data.replace( /(\s)+!/g, '!' );
data = '/* --- ' + n.path.basename( _target ) + ' --- */\n' + data;
dataStack.push( data );
fileCount--;
if ( fileCount == 0 ) {
var finalData = copyright + dataStack.join( '\n' );
setCache( scope, cacheString, finalData );
sendResponse( response, finalData, isGzip );
return false;
}
} );
} );
} )( fileTarget );
}
} );
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment