nibjs 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +11 -0
- data/Gemfile.lock +1 -1
- data/Manifest.txt +2 -1
- data/README.md +10 -0
- data/Rakefile +1 -1
- data/dist/nibjs-1.0.0.js +74 -0
- data/dist/nibjs-1.0.0.min.js +7 -0
- data/dist/nibjs-1.1.0.js +74 -0
- data/dist/nibjs-1.1.0.min.js +7 -0
- data/examples/1-basic/basic.js +27 -0
- data/examples/1-basic/build +7 -0
- data/examples/1-basic/illustrate.png +0 -0
- data/examples/1-basic/index.html +56 -0
- data/examples/1-basic/lib/App.js +9 -0
- data/examples/1-basic/lib/StringUtils.js +7 -0
- data/examples/1-basic/lib/index.js +2 -0
- data/examples/2-coffee/build +7 -0
- data/examples/2-coffee/coffee.js +24 -0
- data/examples/2-coffee/illustrate.png +0 -0
- data/examples/2-coffee/index.html +57 -0
- data/examples/2-coffee/lib/App.coffee +9 -0
- data/examples/2-coffee/lib/StringUtils.coffee +6 -0
- data/examples/2-coffee/lib/index.coffee +2 -0
- data/examples/3-embedded-coffee/build +7 -0
- data/examples/3-embedded-coffee/embedded-coffee.coffee +25 -0
- data/examples/3-embedded-coffee/illustrate.png +0 -0
- data/examples/3-embedded-coffee/index.html +68 -0
- data/examples/3-embedded-coffee/lib/App.coffee +9 -0
- data/examples/3-embedded-coffee/lib/StringUtils.coffee +6 -0
- data/examples/3-embedded-coffee/lib/index.coffee +2 -0
- data/examples/4-coffee-join/build +7 -0
- data/examples/4-coffee-join/coffee-join.js +19 -0
- data/examples/4-coffee-join/illustrate.png +0 -0
- data/examples/4-coffee-join/index.html +55 -0
- data/examples/4-coffee-join/lib/App.coffee +7 -0
- data/examples/4-coffee-join/lib/StringUtils.coffee +6 -0
- data/examples/4-coffee-join/lib/index.coffee +2 -0
- data/examples/5-standalone/build +7 -0
- data/examples/5-standalone/illustrate.png +0 -0
- data/examples/5-standalone/index.html +52 -0
- data/examples/5-standalone/lib/App.coffee +7 -0
- data/examples/5-standalone/lib/StringUtils.coffee +6 -0
- data/examples/5-standalone/lib/index.coffee +2 -0
- data/examples/5-standalone/standalone.js +94 -0
- data/examples/README.md +43 -0
- data/examples/commons.rb +11 -0
- data/{test/integration/integration_test.rb → examples/handler.rb} +5 -12
- data/examples/illustrate.png +0 -0
- data/examples/illustrations.graffle +4382 -0
- data/examples/index.html +32 -0
- data/examples/public/TestSuite.coffee +43 -0
- data/examples/public/TestSuite.js +53 -0
- data/examples/public/coffee-script.js +8 -0
- data/examples/public/forkme.png +0 -0
- data/examples/public/leftnav.png +0 -0
- data/examples/public/leftnav_bw.png +0 -0
- data/examples/public/nibjs.js +74 -0
- data/examples/public/rightnav.png +0 -0
- data/examples/public/rightnav_bw.png +0 -0
- data/examples/public/style.css +82 -0
- data/examples/public/test-false.png +0 -0
- data/examples/public/test-pending.gif +0 -0
- data/examples/public/test-true.png +0 -0
- data/lib/nibjs/main.rb +104 -79
- data/lib/nibjs/version.rb +1 -1
- data/nibjs.noespec +1 -1
- data/src/nibjs.coffee +104 -107
- data/tasks/analytics.txt +10 -0
- data/tasks/examples.rake +25 -0
- data/tasks/gh-pages.rake +15 -0
- data/tasks/test.rake +2 -3
- data/test/command/footer.js +1 -0
- data/test/command/sc_coffee_6.exp +106 -0
- data/test/command/sc_coffee_7.exp +151 -0
- data/test/command/sc_common_6.exp +1 -0
- data/test/command/sc_common_7.exp +33 -0
- data/test/command/sc_common_8.exp +107 -0
- data/test/command/sc_common_9.exp +7 -0
- data/test/command/scenarios.rb +24 -0
- data/test/jasmine/assumption_spec.coffee +23 -0
- data/test/jasmine/nibjs_spec.coffee +14 -15
- data/test/nibjs.js +33 -33
- metadata +81 -14
- data/test/integration/index.html +0 -42
- data/test/integration/integration_test.coffee +0 -29
- data/test/integration/integration_test.js +0 -34
- data/test/integration/jquery-1.4.4.min.js +0 -167
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
# 1.1.0 / 2011-02-23
|
2
|
+
|
3
|
+
* Enhancements
|
4
|
+
|
5
|
+
* Added examples acting as both documentation, gh-pages and integration tests
|
6
|
+
* Added --footer and --standalone options
|
7
|
+
* Added alias for --autorequire as -a
|
8
|
+
* Added alias for --uglify as -u
|
9
|
+
* Added alias for --join as -j
|
10
|
+
* Major boolean options (uglify, join, autorequire) have a [no-] counterpart
|
11
|
+
|
1
12
|
# 1.0.0 / 2011-02-22
|
2
13
|
|
3
14
|
* Enhancements
|
data/Gemfile.lock
CHANGED
data/Manifest.txt
CHANGED
data/README.md
CHANGED
@@ -62,3 +62,13 @@ Let assume that your project has the structure below.
|
|
62
62
|
https://github.com/jashkenas/coffee-script/issues/#issue/1054 */
|
63
63
|
var mylib = NibJS.require('mylib')
|
64
64
|
</script>
|
65
|
+
|
66
|
+
### See also
|
67
|
+
|
68
|
+
This project is related to CommonJS Module specification. In a sense, it is an offline
|
69
|
+
"compiler" implementation of the version 1.0 of that specification (not even complete).
|
70
|
+
I'll strongly consider any patch that would lead to respecting such specification more
|
71
|
+
correctly!
|
72
|
+
|
73
|
+
* http://wiki.commonjs.org/wiki/Modules/1.0
|
74
|
+
* http://wiki.commonjs.org/wiki/Modules/CompiledModules
|
data/Rakefile
CHANGED
data/dist/nibjs-1.0.0.js
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
/**
|
2
|
+
* nib.js - [Java/Coffee]script application packager from node.js conventions
|
3
|
+
*
|
4
|
+
* Copyright 2011, Bernard Lambeau
|
5
|
+
* Released under the MIT License
|
6
|
+
* http://github.com/blambeau/nib.js
|
7
|
+
*/
|
8
|
+
(function(exports){
|
9
|
+
var Builder;
|
10
|
+
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
11
|
+
exports.NibJS = {
|
12
|
+
pkgBuilders: [],
|
13
|
+
packages: [],
|
14
|
+
define: function(name, buildFn) {
|
15
|
+
return NibJS.pkgBuilders[name] = buildFn;
|
16
|
+
},
|
17
|
+
require: function(name) {
|
18
|
+
var _base, _ref;
|
19
|
+
return (_ref = (_base = NibJS.packages)[name]) != null ? _ref : _base[name] = NibJS._build_one(name);
|
20
|
+
},
|
21
|
+
_build_one: function(name) {
|
22
|
+
var builder;
|
23
|
+
builder = new Builder;
|
24
|
+
return NibJS.pkgBuilders[name](builder);
|
25
|
+
},
|
26
|
+
pending: [],
|
27
|
+
running: [],
|
28
|
+
ready: function(fn) {
|
29
|
+
return NibJS.pending.push(fn);
|
30
|
+
},
|
31
|
+
start: function() {
|
32
|
+
var fn, _i, _len, _ref;
|
33
|
+
_ref = NibJS.pending;
|
34
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
35
|
+
fn = _ref[_i];
|
36
|
+
NibJS.running.push(fn());
|
37
|
+
}
|
38
|
+
return NibJS.pending = [];
|
39
|
+
},
|
40
|
+
isRunning: function(fn) {
|
41
|
+
var c, _i, _len, _ref;
|
42
|
+
_ref = NibJS.running;
|
43
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
44
|
+
c = _ref[_i];
|
45
|
+
if (c === fn) {
|
46
|
+
return true;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
return false;
|
50
|
+
}
|
51
|
+
};
|
52
|
+
Builder = (function() {
|
53
|
+
function Builder() {
|
54
|
+
this.build_file = __bind(this.build_file, this);;
|
55
|
+
this.require = __bind(this.require, this);;
|
56
|
+
this.register = __bind(this.register, this);; this.builders = [];
|
57
|
+
this.built = [];
|
58
|
+
}
|
59
|
+
Builder.prototype.register = function(file, builder) {
|
60
|
+
return this.builders[file] = builder;
|
61
|
+
};
|
62
|
+
Builder.prototype.require = function(file) {
|
63
|
+
var _base, _ref;
|
64
|
+
return (_ref = (_base = this.built)[file]) != null ? _ref : _base[file] = this.build_file(file);
|
65
|
+
};
|
66
|
+
Builder.prototype.build_file = function(file) {
|
67
|
+
var exports;
|
68
|
+
exports = {};
|
69
|
+
this.builders[file](exports, this.require);
|
70
|
+
return exports;
|
71
|
+
};
|
72
|
+
return Builder;
|
73
|
+
})();
|
74
|
+
}).call(this, this)
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/**
|
2
|
+
* nib.js - [Java/Coffee]script application packager from node.js conventions
|
3
|
+
*
|
4
|
+
* Copyright 2011, Bernard Lambeau
|
5
|
+
* Released under the MIT License
|
6
|
+
* http://github.com/blambeau/nib.js
|
7
|
+
*/(function(a){var b,c=function(a,b){return function(){return a.apply(b,arguments)}};a.NibJS={pkgBuilders:[],packages:[],define:function(a,b){return NibJS.pkgBuilders[a]=b},require:function(a){var b,c;return(c=(b=NibJS.packages)[a])!=null?c:b[a]=NibJS._build_one(a)},_build_one:function(a){var c;c=new b;return NibJS.pkgBuilders[a](c)},pending:[],running:[],ready:function(a){return NibJS.pending.push(a)},start:function(){var a,b,c,d;d=NibJS.pending;for(b=0,c=d.length;b<c;b++)a=d[b],NibJS.running.push(a());return NibJS.pending=[]},isRunning:function(a){var b,c,d,e;e=NibJS.running;for(c=0,d=e.length;c<d;c++){b=e[c];if(b===a)return!0}return!1}},b=function(){function a(){this.build_file=c(this.build_file,this),this.require=c(this.require,this),this.register=c(this.register,this),this.builders=[],this.built=[]}a.prototype.register=function(a,b){return this.builders[a]=b},a.prototype.require=function(a){var b,c;return(c=(b=this.built)[a])!=null?c:b[a]=this.build_file(a)},a.prototype.build_file=function(a){var b;b={},this.builders[a](b,this.require);return b};return a}()}).call(this,this)
|
data/dist/nibjs-1.1.0.js
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
/**
|
2
|
+
* nib.js - [Java/Coffee]script application packager from node.js conventions
|
3
|
+
*
|
4
|
+
* Copyright 2011, Bernard Lambeau
|
5
|
+
* Released under the MIT License
|
6
|
+
* http://github.com/blambeau/nib.js
|
7
|
+
*/
|
8
|
+
(function(exports){
|
9
|
+
var Builder, Exception;
|
10
|
+
var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
|
11
|
+
for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }
|
12
|
+
function ctor() { this.constructor = child; }
|
13
|
+
ctor.prototype = parent.prototype;
|
14
|
+
child.prototype = new ctor;
|
15
|
+
child.__super__ = parent.prototype;
|
16
|
+
return child;
|
17
|
+
}, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
18
|
+
exports.NibJS = {
|
19
|
+
pkgBuilders: [],
|
20
|
+
packages: [],
|
21
|
+
hasPackage: function(name) {
|
22
|
+
return (NibJS.pkgBuilders[name] != null) || (NibJS.packages[name] != null);
|
23
|
+
},
|
24
|
+
define: function(name, buildFn) {
|
25
|
+
return NibJS.pkgBuilders[name] = buildFn;
|
26
|
+
},
|
27
|
+
require: function(name) {
|
28
|
+
var _base, _ref;
|
29
|
+
return (_ref = (_base = NibJS.packages)[name]) != null ? _ref : _base[name] = NibJS._build_one(name);
|
30
|
+
},
|
31
|
+
_build_one: function(name) {
|
32
|
+
var builder;
|
33
|
+
if (NibJS.pkgBuilders[name]) {
|
34
|
+
builder = new Builder;
|
35
|
+
return NibJS.pkgBuilders[name](builder);
|
36
|
+
} else {
|
37
|
+
throw new Exception("NibJS error: no module '" + name + "' has been previously registered.");
|
38
|
+
}
|
39
|
+
}
|
40
|
+
};
|
41
|
+
Exception = (function() {
|
42
|
+
__extends(Exception, Error);
|
43
|
+
function Exception(message) {
|
44
|
+
this.message = message;
|
45
|
+
}
|
46
|
+
return Exception;
|
47
|
+
})();
|
48
|
+
Builder = (function() {
|
49
|
+
function Builder() {
|
50
|
+
this.build_file = __bind(this.build_file, this);;
|
51
|
+
this.require = __bind(this.require, this);;
|
52
|
+
this.register = __bind(this.register, this);; this.builders = [];
|
53
|
+
this.built = [];
|
54
|
+
}
|
55
|
+
Builder.prototype.register = function(file, builder) {
|
56
|
+
return this.builders[file] = builder;
|
57
|
+
};
|
58
|
+
Builder.prototype.require = function(file) {
|
59
|
+
var _base, _ref;
|
60
|
+
return (_ref = (_base = this.built)[file]) != null ? _ref : _base[file] = this.build_file(file);
|
61
|
+
};
|
62
|
+
Builder.prototype.build_file = function(file) {
|
63
|
+
var file_exp;
|
64
|
+
if (this.builders[file] != null) {
|
65
|
+
file_exp = {};
|
66
|
+
this.builders[file](file_exp, this.require);
|
67
|
+
return file_exp;
|
68
|
+
} else {
|
69
|
+
throw new Exception("NibJS error: no such file " + file);
|
70
|
+
}
|
71
|
+
};
|
72
|
+
return Builder;
|
73
|
+
})();
|
74
|
+
}).call(this, this);
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/**
|
2
|
+
* nib.js - [Java/Coffee]script application packager from node.js conventions
|
3
|
+
*
|
4
|
+
* Copyright 2011, Bernard Lambeau
|
5
|
+
* Released under the MIT License
|
6
|
+
* http://github.com/blambeau/nib.js
|
7
|
+
*/(function(a){var b,c,d=Object.prototype.hasOwnProperty,e=function(a,b){function e(){this.constructor=a}for(var c in b)d.call(b,c)&&(a[c]=b[c]);e.prototype=b.prototype,a.prototype=new e,a.__super__=b.prototype;return a},f=function(a,b){return function(){return a.apply(b,arguments)}};a.NibJS={pkgBuilders:[],packages:[],hasPackage:function(a){return NibJS.pkgBuilders[a]!=null||NibJS.packages[a]!=null},define:function(a,b){return NibJS.pkgBuilders[a]=b},require:function(a){var b,c;return(c=(b=NibJS.packages)[a])!=null?c:b[a]=NibJS._build_one(a)},_build_one:function(a){var d;if(NibJS.pkgBuilders[a]){d=new b;return NibJS.pkgBuilders[a](d)}throw new c("NibJS error: no module '"+a+"' has been previously registered.")}},c=function(){function a(a){this.message=a}e(a,Error);return a}(),b=function(){function a(){this.build_file=f(this.build_file,this),this.require=f(this.require,this),this.register=f(this.register,this),this.builders=[],this.built=[]}a.prototype.register=function(a,b){return this.builders[a]=b},a.prototype.require=function(a){var b,c;return(c=(b=this.built)[a])!=null?c:b[a]=this.build_file(a)},a.prototype.build_file=function(a){var b;if(this.builders[a]!=null){b={},this.builders[a](b,this.require);return b}throw new c("NibJS error: no such file "+a)};return a}()}).call(this,this)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
NibJS.define('basic', function(nibjs) {
|
2
|
+
nibjs.register('./App', function(exports, require) {
|
3
|
+
var StringUtils = require('./StringUtils').StringUtils;
|
4
|
+
exports.App = {
|
5
|
+
|
6
|
+
runTests: function(){
|
7
|
+
$("body").append(StringUtils.pre("nibjs --output jsapp.js lib"));
|
8
|
+
return true;
|
9
|
+
}
|
10
|
+
|
11
|
+
};
|
12
|
+
});
|
13
|
+
nibjs.register('./index', function(exports, require) {
|
14
|
+
exports.StringUtils = require('./StringUtils').StringUtils;
|
15
|
+
exports.App = require('./App').App;
|
16
|
+
});
|
17
|
+
nibjs.register('./StringUtils', function(exports, require) {
|
18
|
+
exports.StringUtils = {
|
19
|
+
|
20
|
+
pre: function(what) {
|
21
|
+
return "<pre>" + what + "</pre>";
|
22
|
+
}
|
23
|
+
|
24
|
+
};
|
25
|
+
});
|
26
|
+
return nibjs.require('./index');
|
27
|
+
});
|
Binary file
|
@@ -0,0 +1,56 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
5
|
+
<title>NibJS - Basic Example</title>
|
6
|
+
|
7
|
+
<!-- This is your application -->
|
8
|
+
<script src="http://code.jquery.com/jquery-1.5.min.js" type="text/javascript"></script>
|
9
|
+
<script src="../public/nibjs.js" type="text/javascript"></script>
|
10
|
+
<script src="basic.js" type="text/javascript"></script>
|
11
|
+
<script>
|
12
|
+
$(document).ready(function(){
|
13
|
+
//
|
14
|
+
// this is how you require your application. App will now contain whatever
|
15
|
+
// your index.js has exported.
|
16
|
+
//
|
17
|
+
App = NibJS.require('basic').App;
|
18
|
+
|
19
|
+
//
|
20
|
+
// Let me profit from your browser and run the integration tests :-)
|
21
|
+
//
|
22
|
+
TestSuite.runOne(App);
|
23
|
+
});
|
24
|
+
</script>
|
25
|
+
|
26
|
+
<!-- This is some to be able to run integration tests -->
|
27
|
+
<link rel="stylesheet" type="text/css" href="../public/style.css">
|
28
|
+
<script src="../public/TestSuite.js" type="text/javascript"></script>
|
29
|
+
|
30
|
+
</head>
|
31
|
+
<body>
|
32
|
+
<a id="forkme" href="http://github.com/blambeau/nib.js"></a>
|
33
|
+
<div id="content">
|
34
|
+
<div id="feedback"><img src="../public/test-pending.gif"/></div>
|
35
|
+
<h2>Package your javascript in one single command</h2>
|
36
|
+
<p class="comment">
|
37
|
+
NibJS comes with a simple <code>nibjs</code> commandline tool that packages your app
|
38
|
+
offline. NibJS makes <b>no assumption about the server side technology</b>. It performs a
|
39
|
+
smart concatenation of .js files, while binding and respecting <code>exports</code> and
|
40
|
+
<code>require</code> conventions!
|
41
|
+
</p>
|
42
|
+
<div style="text-align:center">
|
43
|
+
<img src="illustrate.png" width="80%">
|
44
|
+
</div>
|
45
|
+
<p class="comment">
|
46
|
+
The basic use case is really simple, you want to concatenate <code>lib/**/*.js</code>
|
47
|
+
files, while respecting CommonJS conventions about <code>exports</code> and <code>require</code>.
|
48
|
+
</p>
|
49
|
+
</div>
|
50
|
+
<div id="navigation">
|
51
|
+
<a href="../index.html" class="button" id="leftnav"></a>
|
52
|
+
<a href="../2-coffee/index.html" class="button" id="rightnav"></a>
|
53
|
+
<div style="clear:both"></div>
|
54
|
+
</div>
|
55
|
+
</body>
|
56
|
+
</html>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
NibJS.define('coffee', function(nibjs) {
|
2
|
+
nibjs.register('./App', function(exports, require) {
|
3
|
+
var StringUtils;
|
4
|
+
StringUtils = require('./StringUtils').StringUtils;
|
5
|
+
return exports.App = {
|
6
|
+
runTests: function() {
|
7
|
+
$("body").append(StringUtils.pre("Have a look at 'nibjs --coffee'"));
|
8
|
+
return true;
|
9
|
+
}
|
10
|
+
};
|
11
|
+
});
|
12
|
+
nibjs.register('./index', function(exports, require) {
|
13
|
+
exports.StringUtils = require('./StringUtils').StringUtils;
|
14
|
+
return exports.App = require('./App').App;
|
15
|
+
});
|
16
|
+
nibjs.register('./StringUtils', function(exports, require) {
|
17
|
+
return exports.StringUtils = {
|
18
|
+
pre: function(what) {
|
19
|
+
return "<pre>" + what + "</pre>";
|
20
|
+
}
|
21
|
+
};
|
22
|
+
});
|
23
|
+
return nibjs.require('./index');
|
24
|
+
});
|
Binary file
|
@@ -0,0 +1,57 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
5
|
+
<title>NibJS - Coffee Example</title>
|
6
|
+
|
7
|
+
<!-- This is your application -->
|
8
|
+
<script src="http://code.jquery.com/jquery-1.5.min.js" type="text/javascript"></script>
|
9
|
+
<script src="../public/nibjs.js" type="text/javascript"></script>
|
10
|
+
<script src="coffee.js" type="text/javascript"></script>
|
11
|
+
<script>
|
12
|
+
$(document).ready(function(){
|
13
|
+
//
|
14
|
+
// this is how you require your application. App will now contain whatever
|
15
|
+
// your index.js has exported.
|
16
|
+
//
|
17
|
+
App = NibJS.require('coffee').App;
|
18
|
+
|
19
|
+
//
|
20
|
+
// Let me profit from your browser and run the integration tests :-)
|
21
|
+
//
|
22
|
+
TestSuite.runOne(App);
|
23
|
+
});
|
24
|
+
</script>
|
25
|
+
|
26
|
+
<!-- This is some to be able to run integration tests -->
|
27
|
+
<link rel="stylesheet" type="text/css" href="../public/style.css">
|
28
|
+
<script src="../public/TestSuite.js" type="text/javascript"></script>
|
29
|
+
|
30
|
+
</head>
|
31
|
+
<body>
|
32
|
+
<a id="forkme" href="http://github.com/blambeau/nib.js"></a>
|
33
|
+
<div id="content">
|
34
|
+
<div id="feedback"><img src="../public/test-pending.gif"/></div>
|
35
|
+
<h2>Why not writing source code in CoffeeScript instead?</h2>
|
36
|
+
<p class="comment">
|
37
|
+
CoffeeScript compiles to JavaScript but has a lot of friendly syntactic and semantic
|
38
|
+
features, like
|
39
|
+
<a href="http://jashkenas.github.com/coffee-script/#strings">string interpolation</a>,
|
40
|
+
<a href="http://jashkenas.github.com/coffee-script/#destructuring">destructuring assignment</a> and
|
41
|
+
<a href="http://jashkenas.github.com/coffee-script/#expressions">everything is an expression</a>.
|
42
|
+
</p>
|
43
|
+
<div style="text-align:center">
|
44
|
+
<img src="illustrate.png" width="80%">
|
45
|
+
</div>
|
46
|
+
<p class="comment">
|
47
|
+
So it makes sense to be able to maintain the sources in CoffeeScript instead of Javascript while
|
48
|
+
keeping the packaging option!
|
49
|
+
</p>
|
50
|
+
</div>
|
51
|
+
<div id="navigation">
|
52
|
+
<a href="../1-basic/index.html" class="button" id="leftnav"></a>
|
53
|
+
<a href="../3-embedded-coffee/index.html" class="button" id="rightnav"></a>
|
54
|
+
<div style="clear:both"></div>
|
55
|
+
</div>
|
56
|
+
</body>
|
57
|
+
</html>
|