Created
February 25, 2010 18:57
-
-
Save isaacs/314903 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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