Skip to content

Commit 2ca435a

Browse files
committed
Buildable version of Ninjascript
1 parent 9ac3cb4 commit 2ca435a

15 files changed

+104
-92
lines changed

Diff for: Rakefile

+11-3
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ namespace :build do
112112
erb = ERB.new(File::read('src/header-comment.js.erb'))
113113
File::open(file.to_s, "w") do |file|
114114
build_date = PACKAGE_CONFIG["BUILD_DATE"]
115-
copyright_year = COPYRIGHT_YEAR["COPYRIGHT_YEAR"]
115+
copyright_year = PACKAGE_CONFIG["COPYRIGHT_YEAR"]
116116
version = PACKAGE_CONFIG["VERSION"]
117117
file.write( erb.result binding)
118118
end
@@ -131,15 +131,23 @@ namespace :build do
131131
end
132132

133133
file "generated/javascript/ninjascript.js" => %w{tmp/header-comments.js generated/javascript} + sourcefiles do |file|
134+
puts sourcefiles
134135
tmpfile = File::join("tmp", file.to_s.gsub(File::Separator, "_"))
135-
sh "libs/requirejs/build/buildj.sh name=main out=#{tmpfile} baseUrl=src/javascript includeRequire=true optimize=none"
136+
sh "java -jar #{BUILDTOOLS_DIR}/compiler.jar \
137+
--closure_entry_point 'ninjascript.loaded' \
138+
--create_source_map 'generated/javascript/ninjascript-sourcemap-js' \
139+
--formatting PRETTY_PRINT \
140+
--manage_closure_dependencies \
141+
#{sourcefiles.map{|file| "--js #{file} "}} \
142+
--js_output_file #{tmpfile}"
143+
136144
sh "cat tmp/header-comments.js #{tmpfile} > #{file}"
137145
end
138146

139147
file "generated/javascript/ns.min.js" =>
140148
%w{generated/javascript/ninjascript.js tmp/header-comments.js} do |file|
141149
tmpfile = File::join("tmp", file.to_s.gsub(File::Separator, "_"))
142-
sh "java -jar libs/compiler.jar --js generated/javascript/ninjascript.js --js_output_file #{tmpfile}"
150+
sh "java -jar #{BUILDTOOLS_DIR}/compiler.jar --js generated/javascript/ninjascript.js --js_output_file #{tmpfile}"
143151
sh "cat tmp/header-comments.js #{tmpfile} > #{file}"
144152
end
145153

Diff for: cycle-finder.rb

+3-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
2-
31
dir = ARGV[0]
42

53
provides = {}
@@ -12,7 +10,7 @@
1210
if match = /goog.require\(['"]([^)]*)['"]\)/.match(line)
1311
required << match[1]
1412
elsif match = /goog.provide\(['"]([^)]*)['"]\)/.match(line)
15-
raise "Double provide!: #{provide}/#{match[0]}" unless provide.nil?
13+
raise "Double provide in #{path}!: #{provide}/#{match[0]}" unless provide.nil?
1614
provide = match[1]
1715
end
1816
end
@@ -24,9 +22,6 @@
2422
reqs.uniq!
2523

2624
require 'pp'
27-
pp provides
28-
29-
pp reqs
3025

3126
missing_reqs = reqs - provides.keys
3227
unless missing_reqs.empty?
@@ -50,14 +45,11 @@
5045
tree.last.filled << req
5146
need = provides[req] - tree.last.filled
5247

53-
if need.empty?
54-
tree.pop
55-
next
56-
end
57-
5848
if need.include? provided
5949
raise "Cycle detected: #{(tree.map(&:prov) + [req]).inspect} => #{provided}"
6050
end
6151
tree.push Step.new(req, need, tree.last.filled.dup + [req])
6252
end
6353
end
54+
55+
puts "All looks well"

Diff for: src/javascript/behavior-binding.js

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
goog.provide('ninjascript.BehaviorBinding')
22

33
goog.require('ninjascript.utils')
4-
goog.require('ninjascript.Tools')
54

65
ninjascript.BehaviorBinding = function(tools){
76
var parentClass = function(){

Diff for: src/javascript/behavior-rule-builder.js

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
goog.provide('ninjascript.BehaviorRuleBuilder');
2+
goog.require('ninjascript.utils');
3+
4+
ninjascript.BehaviorRuleBuilder = function() {
5+
this.ninja = null
6+
this.rules = []
7+
this.finder = null
8+
this.behaviors = []
9+
}
10+
11+
;(function(){
12+
var prototype = ninjascript.BehaviorRuleBuilder.prototype;
13+
var Utils = ninjascript.utils;
14+
15+
prototype.normalizeFinder = function(finder) {
16+
if(typeof finder == "string") {
17+
return function(root){
18+
return ninjascript.sizzle( finder, root )
19+
}
20+
} else {
21+
return finder
22+
}
23+
}
24+
25+
prototype.normalizeBehavior = function(behavior) {
26+
if(behavior instanceof ninjascript.behaviors.Abstract) {
27+
return behavior
28+
} else if(typeof behavior == "function"){
29+
return behavior.call(this.ninja)
30+
} else {
31+
return new ninjascript.behaviors.Basic(behavior)
32+
}
33+
}
34+
35+
prototype.buildRules = function(behavior) {
36+
this.rules = []
37+
this.finder = this.normalizeFinder(this.finder)
38+
39+
if(Utils.isArray(behavior)) {
40+
this.behaviors = behavior
41+
} else {
42+
this.behaviors = [behavior]
43+
}
44+
45+
var i, len = this.behaviors.length
46+
while(this.behaviors.length > 0) {
47+
var behavior = this.behaviors.shift();
48+
behavior = this.normalizeBehavior(behavior);
49+
if(Utils.isArray(behavior)){
50+
this.behaviors = this.behaviors.concat(behavior)
51+
} else {
52+
var rule = new ninjascript.BehaviorRule
53+
rule.finder = this.finder
54+
rule.behavior = behavior
55+
this.rules.push(rule)
56+
}
57+
}
58+
}
59+
})()

Diff for: src/javascript/behavior-rule.js

+1-56
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,13 @@
11
goog.provide('ninjascript.BehaviorRule');
2-
goog.provide('ninjascript.BehaviorRuleBuilder');
2+
goog.require('ninjascript.BehaviorRuleBuilder');
33
goog.require('ninjascript.behaviors.Basic');
44
goog.require('ninjascript.sizzle');
5-
goog.require('ninjascript.utils');
65

76
ninjascript.BehaviorRule = function() {
87
this.finder = function(root){ return [] }
98
this.behavior = null
109
}
1110

12-
ninjascript.BehaviorRuleBuilder = function() {
13-
this.ninja = null
14-
this.rules = []
15-
this.finder = null
16-
this.behaviors = []
17-
}
18-
1911
ninjascript.BehaviorRule.build = function(ninja, finder, behavior) {
2012
builder = new ninjascript.BehaviorRuleBuilder
2113
builder.ninja = ninja
@@ -54,50 +46,3 @@ ninjascript.BehaviorRule.build = function(ninja, finder, behavior) {
5446
return antecedant
5547
}
5648
})()
57-
58-
;(function(prototype, Utils){
59-
prototype.normalizeFinder = function(finder) {
60-
if(typeof finder == "string") {
61-
return function(root){
62-
return ninjascript.sizzle( finder, root )
63-
}
64-
} else {
65-
return finder
66-
}
67-
}
68-
69-
prototype.normalizeBehavior = function(behavior) {
70-
if(behavior instanceof ninjascript.behaviors.Abstract) {
71-
return behavior
72-
} else if(typeof behavior == "function"){
73-
return behavior.call(this.ninja)
74-
} else {
75-
return new ninjascript.behaviors.Basic(behavior)
76-
}
77-
}
78-
79-
prototype.buildRules = function(behavior) {
80-
this.rules = []
81-
this.finder = this.normalizeFinder(this.finder)
82-
83-
if(Utils.isArray(behavior)) {
84-
this.behaviors = behavior
85-
} else {
86-
this.behaviors = [behavior]
87-
}
88-
89-
var i, len = this.behaviors.length
90-
while(this.behaviors.length > 0) {
91-
var behavior = this.behaviors.shift();
92-
behavior = this.normalizeBehavior(behavior);
93-
if(Utils.isArray(behavior)){
94-
this.behaviors = this.behaviors.concat(behavior)
95-
} else {
96-
var rule = new ninjascript.BehaviorRule
97-
rule.finder = this.finder
98-
rule.behavior = behavior
99-
this.rules.push(rule)
100-
}
101-
}
102-
}
103-
})(ninjascript.BehaviorRuleBuilder.prototype, ninjascript.utils)

Diff for: src/javascript/extensible.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,15 @@ goog.provide('ninjascript.Extensible');
33
ninjascript.Extensible = function(){
44
};
55

6-
ninjascript.Extensible.package = function(targets, callback){
6+
/* This class-level function sets up access functions on a throwaway object and
7+
* passes it into a callback method. Extensions to Ninjascript call
8+
* ninjascript.plugin with a callback function that can then call
9+
* hooks.behaviors or hooks.tools to add methods to those prototypes.
10+
*
11+
* c.f. the packaged-behaviors directory for examples of use
12+
*
13+
*/
14+
ninjascript.Extensible.addPackage = function(targets, callback){
715
var hooks = {}
816
var buildHookingFunction = function(target){
917
return function(extension){

Diff for: src/javascript/ninjascript.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,13 @@ ninjascript.NinjaScript.prototype = new ninjascript.Extensible
2424

2525
var log = ninjascript.Logger.log
2626

27-
prototype.package = function(callback) {
27+
//XXX Needed here, or in package?
28+
prototype.plugin = function(callback) {
2829
var targets = {
2930
Ninja: this,
30-
tools: this.tools,
31+
tools: this.tools
3132
}
32-
return ninjascript.Extensible.package(targets, callback)
33+
return ninjascript.Extensible.addPackage(targets, callback)
3334
}
3435

3536
prototype.configure = function(opts) {

Diff for: src/javascript/packaged-behaviors/confirm.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
goog.provide('ninjascript.packagedBehaviors.confirm');
22

3-
goog.require('ninjascript.package');
3+
goog.require('ninjascript.plugin');
44

55
(function(){
6-
ninjascript.package(function(hooks){
6+
ninjascript.plugin(function(hooks){
77
hooks.behaviors({
88
confirms: function(configs) {
99

Diff for: src/javascript/packaged-behaviors/placeholder.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
goog.provide('ninjascript.packagedBehaviors.placeholder');
22

3-
goog.require('ninjascript.package');
3+
goog.require('ninjascript.plugin');
44

55
(function() {
66
var behaviors = {}
@@ -197,7 +197,7 @@ goog.require('ninjascript.package');
197197
return behaviors
198198
}
199199

200-
ninjascript.package( function(hooks){
200+
ninjascript.plugin( function(hooks){
201201
hooks.Ninja(behaviors)
202202
})
203203
})()

Diff for: src/javascript/packaged-behaviors/standard.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
goog.provide('ninjascript.packagedBehaviors.standard');
22

3-
goog.require('ninjascript.package');
3+
goog.require('ninjascript.plugin');
44
goog.require('ninjascript.utils');
55
goog.require('ninjascript.Logger');
66

77
(function() {
88
var Utils = ninjascript.utils
99
var log = ninjascript.Logger.log
1010

11-
ninjascript.package(function(hooks){
11+
ninjascript.plugin(function(hooks){
1212
hooks.ninja({
1313
/**
1414
* Ninja.submitsAsAjax(configs) -> null

Diff for: src/javascript/packaged-behaviors/trigger-on.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
goog.provide('ninjascript.packagedBehaviors.triggerOn');
22

3-
goog.require('ninjascript.package');
3+
goog.require('ninjascript.plugin');
44

55
// There's several things happening here is ways that should be more configurable:
66
// * A standard overlayAndSubmit
@@ -60,7 +60,7 @@ goog.require('ninjascript.package');
6060
// scope than what { "selector": behavior } allows for...
6161
//
6262
;(function() {
63-
ninjascript.package(function(hooks) { hooks.behaviors({
63+
ninjascript.plugin(function(hooks) { hooks.behaviors({
6464
cascadeEvent: function(configs){
6565
},
6666
removed: function(){

Diff for: src/javascript/packaged-behaviors/utility.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
goog.provide('ninjascript.packagedBehaviors.utility');
22

3-
goog.require('ninjascript.package');
3+
goog.require('ninjascript.plugin');
44

55
(function() {
6-
ninjascript.package(function(hooks){
6+
ninjascript.plugin(function(hooks){
77
hooks.behaviors({
88
suppressChangeEvents: function() {
99
return new this.types.does({
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
goog.provide('ninjascript.package')
1+
goog.provide('ninjascript.plugin')
22

33
goog.require('ninjascript.Extensible')
44
goog.require('ninjascript.NinjaScript')
55
goog.require('ninjascript.Tools')
66

7-
ninjascript.package = function(callback){
7+
ninjascript.plugin = function(callback){
88
var targets = {
99
Ninja: ninjascript.NinjaScript.prototype,
1010
tools: ninjascript.Tools.prototype
1111
}
12-
ninjascript.Extensible.package(targets, callback)
12+
ninjascript.Extensible.addPackage(targets, callback)
1313
}

Diff for: src/javascript/tools/ajax-submitter.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ goog.require('ninjascript.Logger')
55
goog.require('ninjascript.tools.JSONDispatcher')
66
goog.require('ninjascript.tools.Overlay')
77

8-
goog.require('ninjascript.package')
8+
goog.require('ninjascript.plugin')
99

1010
ninjascript.tools.AjaxSubmitter = function() {
1111
this.formData = []
@@ -68,7 +68,7 @@ ninjascript.tools.AjaxSubmitter = function() {
6868
Ninja.tools.message("Server prototype.error = " + xhr.statusText, "error")
6969
}
7070

71-
ninjascript.package(function(hooks){
71+
ninjascript.plugin(function(hooks){
7272
hooks.tools({
7373
ajaxSubmitter: function() {
7474
return new ninjascript.tools.AjaxSubmitter()

Diff for: src/javascript/tools/overlay.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
goog.provide('ninjascript.tools.Overlay')
22

33
goog.require('ninjascript.utils')
4-
goog.require('ninjascript.package')
4+
goog.require('ninjascript.plugin')
55

66
ninjascript.tools.Overlay = function(list) {
77
var elements = this.convertToElementArray(list)
@@ -67,7 +67,7 @@ ninjascript.tools.Overlay = function(list) {
6767
this.set.remove()
6868
}
6969

70-
ninjascript.package(function(hooks){
70+
ninjascript.plugin(function(hooks){
7171
hooks.tools({
7272
overlay: function() {
7373
return new ninjascript.tools.Overlay(jQuery.makeArray(arguments))

0 commit comments

Comments
 (0)