nibjs 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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>
|