7 coffee = require 'coffee-script'
9 css_handler = (args, out, request, url_parts) ->
10 fs.readFile 'style.less', 'utf8', (err, data) ->
12 return out.end 'Server failed to read style.less'
13 less.render data, (err, css) ->
15 return out.end "Server failed to make css: #{err}"
18 js_handler = (args, out, request, url_parts) ->
19 fs.readFile 'client.coffee', 'utf8', (err, data) ->
21 return out.end 'Server failed to read client.coffee'
22 out.end coffee.compile data
24 html_handler = (args, out, request, url_parts) ->
25 fs.readFile 'index.html', 'utf8', (err, data) ->
27 return out.end 'Server failed to read index.html'
30 clean_pathname_regex = new RegExp('[^a-zA-Z/_.-]')
31 clean_pathname_regex2 = new RegExp('/[.]')
32 clean_pathname_regex3 = new RegExp('^[.-]')
33 clean_pathname = (str) ->
34 str = str.replace clean_pathname_regex, '_'
35 str = str.replace clean_pathname_regex2, '/_'
36 return str.replace clean_pathname_regex3, '_'
38 # serve javascript files from within /usr/share/javascript
39 javascript_handler = (args, out, request, url_parts) ->
40 filename = clean_pathname "/usr/share/#{url_parts.pathname}"
41 fs.readFile filename, 'utf8', (err, data) ->
44 return out.end "Server failed to read #{filename}"
45 out.writeHead 200, 'Content-Type': 'text/javascript'
49 http_server = http.createServer (req, res) ->
50 url_parts = url.parse req.url, true
51 if url_parts.query is undefined
54 rel_path = url_parts.pathname.substr 1
56 if rel_path.substr(0, 11) is 'javascript/'
57 return javascript_handler url_parts.query, res, req, url_parts
58 else if rel_path.substr(rel_path.length - 4) is '.css'
59 res.writeHead 200, 'Content-Type': 'text/css'
60 return css_handler url_parts.query, res, req, url_parts
61 else if rel_path.substr rel_path.length - 3 is '.js'
62 res.writeHead 200, 'Content-Type': 'text/javascript'
63 return js_handler url_parts.query, res, req, url_parts
65 return html_handler url_parts.query, res, req, url_parts
67 http_server.listen listen_port, "127.0.0.1"
68 console.log "Server running at http://127.0.0.1:#{listen_port}/"