3 ms·
The example that really made sense for me was from "Smooth Coffeescript" in which the author writes an entire nodejs app in one file. Here, I'll show you: http:
by gcr 15y ago
The example that really made sense for me was from "Smooth Coffeescript" in which the author writes an entire nodejs app in one file. Here, I'll show you: http://autotelicum.github.com/Smooth-CoffeeScript/ http://autotelicum.github.com/Smooth-CoffeeScript/
webpage = kup.render ->
doctype 5
html ->
head ->
meta charset: 'utf-8'
title 'My drawing | My awesome website'
style '''
body {font-family: sans-serif}
header , nav, section , footer {display: block}
'''
coffeescript ->
draw = (ctx, x, y) ->
circle = (ctx, x, y) ->
ctx.beginPath()
ctx.arc x, y, 100, 0, 2*Math.PI, false
ctx.stroke()
ctx.strokeStyle = 'rgba(255,40,20,0.7)'
circle ctx, x, y
for angle in [0...2*Math.PI] by 1/3*Math.PI
circle ctx, x+100*Math.cos(angle),
y+100*Math.sin(angle)
window.onload = ->
canvas = document.getElementById 'drawCanvas'
context = canvas.getContext '2d'
draw context , 300, 200
body ->
header -> h1 'Seed of Life'
canvas id: 'drawCanvas', width: 600, height: 400
http = require 'http'
server = http.createServer (req, res) ->
show "#{req.client.remoteAddress} #{req.method} #{req.url}"
res.writeHead 200, 'Content -Type': 'text/html'
res.write webpage
res.end()
server.listen 3389
show 'Server running at'
show server.address()
Notice something missing?
- There's no separate file for the HTML template
- There's no separate file for the javascript inside
- There's no separate file for the web server
It's just "node circles.coffee" and you're good to go. CoffeeKup makes this sort of one-shot webapp experiment scripts particularly easy. Now you don't need an entire folder for each of your sandbox projects.
- benbeltran 15y agoI see how this is cool, but weren't we trying to separate style information from the program logic? ... This seems like a step back into PHP spaghetti code.
- pygy_ 15y agoThe style is applied through CSS. The CoffeScript is unobtrusive. The template and the sever logic are distinct (but there's an indentation error in the request handling code). It's about logical, not necessarily physical separation. For small apps, having everything in one place is actually very convenient. See also _why's Camping: http://camping.rubyforge.org/ http://camping.rubyforge.org/ (nowadays maintained by judofyr a.k.a. Magnus Holm)
- catch23 15y agoYeah, but this only goes well for smallish projects. If you have files that start to reach 2000 lines, the last thing you'll want is a mixture of model, view, and controller logic in a single file. PHP had this back in 1999, and I don't think we want to go there again.
- gcr 15y agoProject organization is your responsibility. How is this different from other modern frameworks? That CoffeeKup allows you to organize your projects as you see fit should be a point for its favor, not against. (That is, unless you use Rails and believe in underlying organizational standards for everything. ;) )
- extension 15y agoSo separate them. They can still use the same language.
- DanielRibeiro 15y agoBonus points: it works on bookmarklets, browser plugins and greasemonkey scripts. Even more added points: it can be refactored like any other code.