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
@@ -0,0 +1,7 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require File.expand_path('../../commons', __FILE__)
|
3
|
+
here = File.dirname(__FILE__)
|
4
|
+
lib = File.join(here, 'lib')
|
5
|
+
options = %q{--coffee --no-coffee-compile --libname=embedded-coffee}
|
6
|
+
output = File.join(here, 'embedded-coffee.coffee')
|
7
|
+
nibjs(options, __output(output), lib)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
NibJS.define 'embedded-coffee', (nibjs)->
|
2
|
+
nibjs.register './App', (exports, require)->
|
3
|
+
{StringUtils} = require('./StringUtils')
|
4
|
+
|
5
|
+
exports.App = {
|
6
|
+
|
7
|
+
runTests: ()->
|
8
|
+
$("body").append StringUtils.pre("Check 'nibjs --coffee --no-coffee-compile'")
|
9
|
+
true
|
10
|
+
|
11
|
+
}
|
12
|
+
|
13
|
+
nibjs.register './index', (exports, require)->
|
14
|
+
exports.StringUtils = require('./StringUtils').StringUtils
|
15
|
+
exports.App = require('./App').App
|
16
|
+
|
17
|
+
nibjs.register './StringUtils', (exports, require)->
|
18
|
+
exports.StringUtils = {
|
19
|
+
|
20
|
+
pre: (what)->
|
21
|
+
"<pre>#{what}</pre>"
|
22
|
+
|
23
|
+
}
|
24
|
+
|
25
|
+
nibjs.require './index'
|
Binary file
|
@@ -0,0 +1,68 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
5
|
+
<title>NibJS - Embedded 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/coffee-script.js" type="text/javascript"></script>
|
10
|
+
<script src="../public/nibjs.js" type="text/javascript"></script>
|
11
|
+
<script src="embedded-coffee.coffee" type="text/coffeescript"></script>
|
12
|
+
<script>
|
13
|
+
/* this is what we should have without coffeescript's issue 1054
|
14
|
+
https://github.com/jashkenas/coffee-script/issues/#issue/1054 */
|
15
|
+
function run(){
|
16
|
+
//
|
17
|
+
// this is how you require your application. App will now contain whatever
|
18
|
+
// your index.js has exported.
|
19
|
+
//
|
20
|
+
App = NibJS.require('embedded-coffee').App;
|
21
|
+
|
22
|
+
//
|
23
|
+
// Let me profit from your browser and run the integration tests :-)
|
24
|
+
//
|
25
|
+
TestSuite.runOne(App);
|
26
|
+
}
|
27
|
+
|
28
|
+
// this function will wait until the package has been built
|
29
|
+
function wait() {
|
30
|
+
try{ NibJS } catch (err){ setTimeout(wait, 100); return; }
|
31
|
+
if (NibJS.hasPackage('embedded-coffee')) {
|
32
|
+
run();
|
33
|
+
} else {
|
34
|
+
setTimeout(wait, 100);
|
35
|
+
}
|
36
|
+
}
|
37
|
+
$(document).ready(function(){ wait(); });
|
38
|
+
</script>
|
39
|
+
|
40
|
+
<!-- This is some to be able to run integration tests -->
|
41
|
+
<link rel="stylesheet" type="text/css" href="../public/style.css">
|
42
|
+
<script src="../public/TestSuite.js" type="text/javascript"></script>
|
43
|
+
|
44
|
+
</head>
|
45
|
+
<body>
|
46
|
+
<a id="forkme" href="http://github.com/blambeau/nib.js"></a>
|
47
|
+
<div id="content">
|
48
|
+
<div id="feedback"><img src="../public/test-pending.gif"/></div>
|
49
|
+
<h2>Or even embedding CoffeeScript directly in the browser!</h2>
|
50
|
+
<p class="comment">
|
51
|
+
In addition to the previous example, the coffeescript source of this example is compiled by the browser
|
52
|
+
instead of being prepared by nibjs at packaging time. This coffeescript/nibjs feature is useful when coffee
|
53
|
+
compiler is not easily available on the server.
|
54
|
+
</p>
|
55
|
+
<div style="text-align:center">
|
56
|
+
<img src="illustrate.png" width="80%">
|
57
|
+
</div>
|
58
|
+
<p class="comment">
|
59
|
+
Please be aware that making so is not really recommended for production use...
|
60
|
+
</p>
|
61
|
+
</div>
|
62
|
+
<div id="navigation">
|
63
|
+
<a href="../2-coffee/index.html" class="button" id="leftnav"></a>
|
64
|
+
<a href="../4-coffee-join/index.html" class="button" id="rightnav"></a>
|
65
|
+
<div style="clear:both"></div>
|
66
|
+
</div>
|
67
|
+
</body>
|
68
|
+
</html>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require File.expand_path('../../commons', __FILE__)
|
3
|
+
here = File.dirname(__FILE__)
|
4
|
+
lib = File.join(here, 'lib')
|
5
|
+
options = %q{--coffee --join --libname=coffee-join}
|
6
|
+
output = File.join(here, 'coffee-join.js')
|
7
|
+
nibjs(options, __output(output), lib)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
NibJS.define('coffee-join', function(nibjs) {
|
2
|
+
nibjs.register('./index', function(exports, require) {
|
3
|
+
var App, StringUtils;
|
4
|
+
App = {
|
5
|
+
runTests: function() {
|
6
|
+
$("body").append(StringUtils.pre("'nibjs --join' option is for you!"));
|
7
|
+
return true;
|
8
|
+
}
|
9
|
+
};
|
10
|
+
StringUtils = {
|
11
|
+
pre: function(what) {
|
12
|
+
return "<pre>" + what + "</pre>";
|
13
|
+
}
|
14
|
+
};
|
15
|
+
exports.StringUtils = StringUtils;
|
16
|
+
return exports.App = App;
|
17
|
+
});
|
18
|
+
return nibjs.require('./index');
|
19
|
+
});
|
Binary file
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
5
|
+
<title>NibJS - Join 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-join.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-join').App;
|
18
|
+
console.log(App);
|
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>Do exports.XXX and require('./XXX') look painful?</h2>
|
36
|
+
<p class="comment">
|
37
|
+
Sometimes, you simply want to maintain your code source "as if it were in a single file"
|
38
|
+
but still splitting different features in different files... In that case, you would like
|
39
|
+
to avoid having to exports and require everything everytime.
|
40
|
+
</p>
|
41
|
+
<div style="text-align:center">
|
42
|
+
<img src="illustrate.png" width="80%">
|
43
|
+
</div>
|
44
|
+
<p class="comment">
|
45
|
+
This should only be used if your code 1) has no name clash accross different files and 2)
|
46
|
+
has no particular dependency order.
|
47
|
+
</p>
|
48
|
+
</div>
|
49
|
+
<div id="navigation">
|
50
|
+
<a href="../3-embedded-coffee/index.html" class="button" id="leftnav"></a>
|
51
|
+
<a href="../5-standalone/index.html" class="button" id="rightnav"></a>
|
52
|
+
<div style="clear:both"></div>
|
53
|
+
</div>
|
54
|
+
</body>
|
55
|
+
</html>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require File.expand_path('../../commons', __FILE__)
|
3
|
+
here = File.dirname(__FILE__)
|
4
|
+
lib = File.join(here, 'lib')
|
5
|
+
options = %q{--coffee --join --standalone --libname=standalone}
|
6
|
+
output = File.join(here, 'standalone.js')
|
7
|
+
nibjs(options, __output(output), lib)
|
Binary file
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
5
|
+
<title>NibJS - Join 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="standalone.js" type="text/javascript"></script>
|
10
|
+
<script>
|
11
|
+
$(document).ready(function(){
|
12
|
+
//
|
13
|
+
// this is how you require your application. App will now contain whatever
|
14
|
+
// your index.js has exported.
|
15
|
+
//
|
16
|
+
App = NibJS.require('standalone').App;
|
17
|
+
console.log(App);
|
18
|
+
//
|
19
|
+
// Let me profit from your browser and run the integration tests :-)
|
20
|
+
//
|
21
|
+
TestSuite.runOne(App);
|
22
|
+
});
|
23
|
+
</script>
|
24
|
+
|
25
|
+
<!-- This is some to be able to run integration tests -->
|
26
|
+
<link rel="stylesheet" type="text/css" href="../public/style.css">
|
27
|
+
<script src="../public/TestSuite.js" type="text/javascript"></script>
|
28
|
+
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
<a id="forkme" href="http://github.com/blambeau/nib.js"></a>
|
32
|
+
<div id="content">
|
33
|
+
<div id="feedback"><img src="../public/test-pending.gif"/></div>
|
34
|
+
<h2>Your users don't even need NibJS as runtime dependency!</h2>
|
35
|
+
<p class="comment">
|
36
|
+
By default, you need to include <code>nibjs.js</code> to your webpage in order
|
37
|
+
to implement the CommonJS module specification. However if you plan to redistribute
|
38
|
+
your library, having NibJS as dependency may not be friendly for your own users.
|
39
|
+
</p>
|
40
|
+
<div style="text-align:center">
|
41
|
+
<img src="illustrate.png" width="80%">
|
42
|
+
</div>
|
43
|
+
<p class="comment">
|
44
|
+
In that case packaging a self-contained .js file containing NibJS itself makes sense:
|
45
|
+
</p>
|
46
|
+
</div>
|
47
|
+
<div id="navigation">
|
48
|
+
<a href="../4-coffee-join/index.html" class="button" id="leftnav"></a>
|
49
|
+
<div style="clear:both"></div>
|
50
|
+
</div>
|
51
|
+
</body>
|
52
|
+
</html>
|
@@ -0,0 +1,94 @@
|
|
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);
|
75
|
+
|
76
|
+
NibJS.define('standalone', function(nibjs) {
|
77
|
+
nibjs.register('./index', function(exports, require) {
|
78
|
+
var App, StringUtils;
|
79
|
+
App = {
|
80
|
+
runTests: function() {
|
81
|
+
$("body").append(StringUtils.pre("This is why 'nibjs --standalone' exists!"));
|
82
|
+
return true;
|
83
|
+
}
|
84
|
+
};
|
85
|
+
StringUtils = {
|
86
|
+
pre: function(what) {
|
87
|
+
return "<pre>" + what + "</pre>";
|
88
|
+
}
|
89
|
+
};
|
90
|
+
exports.StringUtils = StringUtils;
|
91
|
+
return exports.App = App;
|
92
|
+
});
|
93
|
+
return nibjs.require('./index');
|
94
|
+
});
|
data/examples/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# NibJS - Examples
|
2
|
+
|
3
|
+
This folder contains typical use cases in using nib.js, one in each subfolder.
|
4
|
+
Each example is self-contained, and respects the following folder structure:
|
5
|
+
|
6
|
+
x-example/
|
7
|
+
build # run to (re-)build the example
|
8
|
+
example.js # generated by build using nibjs command
|
9
|
+
index.html # to be opened in your prefered browser
|
10
|
+
lib/
|
11
|
+
... # java/coffee script source files
|
12
|
+
|
13
|
+
Examples are kept built in the sources, so that they can be executed immediately
|
14
|
+
in a browser. In other words, opening any x-example/index.html file in a browser
|
15
|
+
should work. Otherwise, please report the bug on github.
|
16
|
+
|
17
|
+
Please report any error on "github":https://github.com/blambeau/nib.js/issues
|
18
|
+
|
19
|
+
## 1-basic
|
20
|
+
|
21
|
+
Demonstrates a simple use case where you maintain an application as well as some
|
22
|
+
utility modules and compile them as a single self-contained .js file ready for
|
23
|
+
inclusion in the browser (you don't even need to include nibjs itself in your
|
24
|
+
html file). NibJS is invoked as follows (see 1-basic/build):
|
25
|
+
|
26
|
+
nibjs --libname=basic --standalone --output=basic.js lib
|
27
|
+
|
28
|
+
## 2-coffee
|
29
|
+
|
30
|
+
Same as the previous example, but written in coffeescript. NibJS invocation:
|
31
|
+
|
32
|
+
nibjs --coffee --libname=coffee --standalone --output=coffee.js lib
|
33
|
+
|
34
|
+
## Credits
|
35
|
+
|
36
|
+
Icons used in examples are from www.veryicon.com, distributed under LGPL
|
37
|
+
licence with following licence information:
|
38
|
+
|
39
|
+
TITLE: Crystal Project Icons
|
40
|
+
AUTHOR: Everaldo Coelho
|
41
|
+
SITE: http://www.everaldo.com
|
42
|
+
CONTACT: everaldo@everaldo.com
|
43
|
+
LICENSE: LGPL
|