listen_port = 8333 sys = require 'sys' fs = require 'fs' http = require 'http' url = require 'url' less = require 'less' coffee = require 'coffee-script' css_handler = (args, out, request, url_parts) -> fs.readFile 'style.less', 'utf8', (err, data) -> if err return out.end 'Server failed to read style.less' less.render data, (err, css) -> if err return out.end "Server failed to make css: #{err}" out.end css js_handler = (args, out, request, url_parts) -> fs.readFile 'client.coffee', 'utf8', (err, data) -> if err return out.end 'Server failed to read client.coffee' out.end coffee.compile data html_handler = (args, out, request, url_parts) -> fs.readFile 'index.html', 'utf8', (err, data) -> if err return out.end 'Server failed to read index.html' out.end data clean_pathname_regex = new RegExp('[^a-zA-Z/_.-]') clean_pathname_regex2 = new RegExp('/[.]') clean_pathname_regex3 = new RegExp('^[.-]') clean_pathname = (str) -> str = str.replace clean_pathname_regex, '_' str = str.replace clean_pathname_regex2, '/_' return str.replace clean_pathname_regex3, '_' # serve javascript files from within /usr/share/javascript javascript_handler = (args, out, request, url_parts) -> filename = clean_pathname "/usr/share/#{url_parts.pathname}" fs.readFile filename, 'utf8', (err, data) -> if err out.writeHead 404 return out.end "Server failed to read #{filename}" out.writeHead 200, 'Content-Type': 'text/javascript' out.end data http_server = http.createServer (req, res) -> url_parts = url.parse req.url, true if url_parts.query is undefined url_parts.query = {} rel_path = url_parts.pathname.substr 1 if rel_path.substr(0, 11) is 'javascript/' return javascript_handler url_parts.query, res, req, url_parts else if rel_path.substr(rel_path.length - 4) is '.css' res.writeHead 200, 'Content-Type': 'text/css' return css_handler url_parts.query, res, req, url_parts else if rel_path.substr rel_path.length - 3 is '.js' res.writeHead 200, 'Content-Type': 'text/javascript' return js_handler url_parts.query, res, req, url_parts return html_handler url_parts.query, res, req, url_parts http_server.listen listen_port, "127.0.0.1" console.log "Server running at http://127.0.0.1:#{listen_port}/"