js2 0.0.8 → 0.0.9
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 +3 -0
- data/Manifest.txt +13 -28
- data/Rakefile +19 -19
- data/bin/js2 +48 -41
- data/lib/javascript/sel_marker.js2 +3 -3
- data/lib/js2/config.rb +6 -1
- data/lib/js2/{process/file_handler.rb → file_handler.rb} +15 -19
- data/lib/js2/foo.js2.haml +3 -0
- data/lib/js2/{process/haml_engine.rb → haml_engine.rb} +1 -1
- data/lib/js2/{parser/haml.rb → haml_parser.rb} +20 -7
- data/lib/js2/js2.js +108 -0
- data/lib/js2/js2bootstrap.js2 +455 -0
- data/lib/js2/parser.rb +3542 -0
- data/lib/js2/processor.rb +14 -65
- data/lib/js2/replace.rb +106 -0
- data/lib/js2/{decorator/test.rb → sel_decorator.rb} +11 -14
- data/{meta/c_tokenizer.rl.erb → lib/js2/tokenizer.rl.erb} +155 -123
- data/lib/js2/tree.rb +340 -0
- data/lib/js2/universe.rb +101 -0
- data/lib/js2.rb +31 -77
- data/lib/tasks/js2.rake +1 -1
- metadata +15 -29
- data/lib/js2/ast/class_node.rb +0 -105
- data/lib/js2/ast/comment_node.rb +0 -2
- data/lib/js2/ast/haml_node.rb +0 -22
- data/lib/js2/ast/include_node.rb +0 -11
- data/lib/js2/ast/inherited_node.rb +0 -7
- data/lib/js2/ast/member_node.rb +0 -18
- data/lib/js2/ast/method_node.rb +0 -29
- data/lib/js2/ast/module_node.rb +0 -6
- data/lib/js2/ast/node.rb +0 -14
- data/lib/js2/ast/nodes.rb +0 -123
- data/lib/js2/ast/stuff_node.rb +0 -6
- data/lib/js2/decorator/app.rb +0 -7
- data/lib/js2/decorator/cleanser.rb +0 -54
- data/lib/js2/decorator/standard.rb +0 -103
- data/lib/js2/parser/fast.rb +0 -3959
- data/lib/js2/process/universe.rb +0 -89
- data/lib/js2/test/selenium.rb +0 -109
- data/lib/js2/test/selenium_element.rb +0 -234
- data/lib/js2/test/selenium_helper.rb +0 -27
- data/lib/js2bootstrap.js2 +0 -274
- data/meta/replace.rb +0 -126
data/Changelog
CHANGED
data/Manifest.txt
CHANGED
@@ -11,37 +11,22 @@ examples/js2.yml
|
|
11
11
|
examples/test.yml
|
12
12
|
lib/javascript/sel_marker.js2
|
13
13
|
lib/javascript/test.js2
|
14
|
-
lib/
|
14
|
+
lib/tasks/js2.rake
|
15
15
|
lib/js2.rb
|
16
|
-
lib/js2/ast/class_node.rb
|
17
|
-
lib/js2/ast/comment_node.rb
|
18
|
-
lib/js2/ast/haml_node.rb
|
19
|
-
lib/js2/ast/include_node.rb
|
20
|
-
lib/js2/ast/inherited_node.rb
|
21
|
-
lib/js2/ast/member_node.rb
|
22
|
-
lib/js2/ast/method_node.rb
|
23
|
-
lib/js2/ast/module_node.rb
|
24
|
-
lib/js2/ast/node.rb
|
25
|
-
lib/js2/ast/nodes.rb
|
26
|
-
lib/js2/ast/stuff_node.rb
|
27
16
|
lib/js2/config.rb
|
28
17
|
lib/js2/daemon.rb
|
29
|
-
lib/js2/
|
30
|
-
lib/js2/
|
31
|
-
lib/js2/
|
32
|
-
lib/js2/
|
33
|
-
lib/js2/
|
34
|
-
lib/js2/
|
35
|
-
lib/js2/
|
36
|
-
lib/js2/process/haml_engine.rb
|
37
|
-
lib/js2/process/universe.rb
|
18
|
+
lib/js2/file_handler.rb
|
19
|
+
lib/js2/foo.js2.haml
|
20
|
+
lib/js2/haml_engine.rb
|
21
|
+
lib/js2/haml_parser.rb
|
22
|
+
lib/js2/js2.js
|
23
|
+
lib/js2/js2bootstrap.js2
|
24
|
+
lib/js2/parser.rb
|
38
25
|
lib/js2/processor.rb
|
39
|
-
lib/js2/
|
40
|
-
lib/js2/
|
41
|
-
lib/js2/
|
42
|
-
lib/
|
43
|
-
|
44
|
-
meta/replace.rb
|
26
|
+
lib/js2/replace.rb
|
27
|
+
lib/js2/sel_decorator.rb
|
28
|
+
lib/js2/tokenizer.rl.erb
|
29
|
+
lib/js2/tree.rb
|
30
|
+
lib/js2/universe.rb
|
45
31
|
bin/js2
|
46
32
|
website/index.txt
|
47
|
-
|
data/Rakefile
CHANGED
@@ -20,22 +20,22 @@ require 'newgem/tasks'
|
|
20
20
|
Dir['tasks/**/*.rake'].each { |t| load t }
|
21
21
|
|
22
22
|
|
23
|
-
task :default => [ :build_ragel, :test ] do
|
24
|
-
end
|
25
|
-
|
26
|
-
task :build_ragel do
|
27
|
-
puts "build_ragel"
|
28
|
-
system("cd meta/; ruby replace.rb; cd ../; ragel -C meta/final_tokenizer.rl; mv meta/final_tokenizer.c lib/js2/parser/fast.rb")
|
29
|
-
end
|
30
|
-
|
31
|
-
task :test do
|
32
|
-
puts "run test"
|
33
|
-
system("ruby test/test.rb")
|
34
|
-
end
|
35
|
-
|
36
|
-
namespace :js2 => :envionment do
|
37
|
-
task :build do
|
38
|
-
p = JS2::Processor.processor_from_file(RAILS_ROOT + '/config/js2.yml', RAILS_ENV)
|
39
|
-
p.write_files
|
40
|
-
end
|
41
|
-
end
|
23
|
+
#task :default => [ :build_ragel, :test ] do
|
24
|
+
#end
|
25
|
+
#
|
26
|
+
#task :build_ragel do
|
27
|
+
# puts "build_ragel"
|
28
|
+
# system("cd meta/; ruby replace.rb; cd ../; ragel -C meta/final_tokenizer.rl; mv meta/final_tokenizer.c lib/js2/parser/fast.rb")
|
29
|
+
#end
|
30
|
+
#
|
31
|
+
#task :test do
|
32
|
+
# puts "run test"
|
33
|
+
# system("ruby test/test.rb")
|
34
|
+
#end
|
35
|
+
#
|
36
|
+
#namespace :js2 => :envionment do
|
37
|
+
# task :build do
|
38
|
+
# p = JS2::Processor.processor_from_file(RAILS_ROOT + '/config/js2.yml', RAILS_ENV)
|
39
|
+
# p.write_files
|
40
|
+
# end
|
41
|
+
#end
|
data/bin/js2
CHANGED
@@ -9,70 +9,77 @@ options = Hash.new
|
|
9
9
|
|
10
10
|
dir = nil
|
11
11
|
|
12
|
-
# assume rails
|
13
|
-
if ARGV.empty? && File.directory?('public') && File.directory?('app') && File.directory?('vendor') && File.directory?('config')
|
14
12
|
|
15
|
-
|
13
|
+
usage = "Usage: js2 [options] <dir-with-js2>"
|
14
|
+
op = OptionParser.new do |opts|
|
15
|
+
opts.banner = usage
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
opts.on("--js2-haml-dir DIR", "Directory with js2.haml files") do |haml|
|
18
|
+
options[:js2_haml_dir] = haml
|
19
|
+
end
|
19
20
|
|
20
|
-
|
21
|
-
|
21
|
+
opts.on("--out-dir DIR", "Directory of js2 -> js output") do |out|
|
22
|
+
options[:write_dir] = out
|
23
|
+
end
|
22
24
|
|
23
|
-
|
25
|
+
opts.on("--vars VARS", "Example: var1=val1;var2=val2") do |out|
|
26
|
+
vars = Hash.new
|
27
|
+
out.split(/;/).each do |str|
|
28
|
+
pair = str.split(/=/)
|
29
|
+
vars[pair[0]] = pair[1]
|
30
|
+
end
|
31
|
+
options[:var] = vars
|
32
|
+
end
|
24
33
|
|
25
|
-
|
26
|
-
|
34
|
+
opts.on("-d", "--daemonize") do |d|
|
35
|
+
options[:daemonize] = true
|
36
|
+
end
|
27
37
|
|
28
|
-
|
38
|
+
opts.on('-h', "--help", "Help Screen") do
|
39
|
+
puts opts
|
40
|
+
exit
|
41
|
+
end
|
42
|
+
end
|
29
43
|
|
30
|
-
|
31
|
-
|
32
|
-
|
44
|
+
# assume rails
|
45
|
+
if ! options[:write_dir] && File.directory?('public') && File.directory?('app') && File.directory?('vendor') && File.directory?('config')
|
46
|
+
puts "Detected Rails setup: using auto config"
|
33
47
|
|
34
|
-
|
35
|
-
options[:js2_haml_dir] = haml
|
36
|
-
end
|
48
|
+
options[:js2_dir] = File.directory?('app/js2') ? './app/js2' : './js2'
|
37
49
|
|
38
|
-
|
39
|
-
options[:write_dir] = out
|
40
|
-
end
|
50
|
+
options[:write_dir] ||= './public/javascripts'
|
41
51
|
|
42
|
-
|
43
|
-
options[:daemonize] = true
|
44
|
-
end
|
52
|
+
options[:daemonize] = true
|
45
53
|
|
46
|
-
|
47
|
-
|
48
|
-
exit
|
49
|
-
end
|
50
|
-
end
|
54
|
+
options[:js2_haml_dir] = dir
|
55
|
+
end
|
51
56
|
|
52
|
-
begin
|
53
|
-
op.parse!(ARGV)
|
54
|
-
rescue OptionParser::ParseError => e
|
55
|
-
puts op
|
56
|
-
end
|
57
57
|
|
58
|
-
|
58
|
+
begin
|
59
|
+
op.parse!(ARGV)
|
60
|
+
rescue OptionParser::ParseError => e
|
61
|
+
puts op
|
59
62
|
end
|
60
63
|
|
61
64
|
if !dir && File.directory?("./public/javascripts")
|
62
65
|
dir = "./public/javascripts"
|
63
66
|
end
|
64
67
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
68
|
+
options[:js2_dir] ||= '.'
|
69
|
+
options[:js2_haml_dir] ||= '.'
|
70
|
+
options[:write_dir] ||= '.'
|
71
|
+
options[:vars] ||= {}
|
69
72
|
|
73
|
+
puts "Using js2 dir: #{options[:dir]}"
|
74
|
+
puts "Writing to: #{options[:write_dir]}"
|
75
|
+
puts "HAML dir (optional): #{options[:js2_haml_dir]}"
|
70
76
|
|
71
77
|
config = JS2::Config.new
|
72
78
|
|
73
|
-
config.js2_dir =
|
74
|
-
config.js2_haml_dir = options[:js2_haml_dir]
|
75
|
-
config.write_dir = options[:write_dir]
|
79
|
+
config.js2_dir = options[:js2_dir]
|
80
|
+
config.js2_haml_dir = options[:js2_haml_dir]
|
81
|
+
config.write_dir = options[:write_dir]
|
82
|
+
config.vars = options[:vars]
|
76
83
|
|
77
84
|
p = JS2::Processor.get(config)
|
78
85
|
if options[:daemonize]
|
@@ -104,11 +104,11 @@ class JS2.SelMarker {
|
|
104
104
|
|
105
105
|
function getRealClassScope (klass) {
|
106
106
|
if (klass.main && klass.main.factoryId) {
|
107
|
-
var namespace = klass.main.
|
108
|
-
var classname = klass.
|
107
|
+
var namespace = klass.main['class'].className.replace(/\.\w+$/, '');
|
108
|
+
var classname = klass['class'].className.match(/\.\w+$/)[0];
|
109
109
|
return namespace + classname;
|
110
110
|
} else {
|
111
|
-
return klass.
|
111
|
+
return klass.className;
|
112
112
|
}
|
113
113
|
}
|
114
114
|
|
data/lib/js2/config.rb
CHANGED
@@ -11,12 +11,15 @@ class JS2::Config
|
|
11
11
|
:test_mode => false,
|
12
12
|
:js2_haml_dir => './js2',
|
13
13
|
:haml_dir => './app/views',
|
14
|
-
:selenium => { }
|
14
|
+
:selenium => { },
|
15
|
+
:vars => { }
|
15
16
|
}
|
16
17
|
|
17
18
|
attr_accessor *DEFAULTS.keys
|
18
19
|
|
19
20
|
def initialize (hash = nil)
|
21
|
+
@vars = Hash.new
|
22
|
+
|
20
23
|
DEFAULTS.each_pair do |k,v|
|
21
24
|
self.send(k.to_s + '=', v)
|
22
25
|
end
|
@@ -29,6 +32,8 @@ class JS2::Config
|
|
29
32
|
k = k.to_s
|
30
33
|
self.send(k + '=', hash[k]) if hash.has_key?(k)
|
31
34
|
end
|
35
|
+
|
36
|
+
self.js2_dir = hash[:read_dir] if hash[:read_dir]
|
32
37
|
end
|
33
38
|
end
|
34
39
|
|
@@ -1,19 +1,14 @@
|
|
1
|
-
class JS2::
|
1
|
+
class JS2::FileHandler
|
2
2
|
def initialize (params = {})
|
3
3
|
@read_dir = params[:read_dir]
|
4
|
-
@write_dir = params[:write_dir]
|
5
|
-
@haml_dir = params[:haml_dir]
|
6
|
-
@view_dir = params[:view_dir]
|
4
|
+
@write_dir = params[:write_dir] || @read_dir
|
5
|
+
@haml_dir = params[:haml_dir] || @read_dir
|
6
|
+
@view_dir = params[:view_dir] || @read_dir
|
7
7
|
@yml_dir = params[:read_dir]
|
8
8
|
|
9
9
|
@mtimes = Hash.new
|
10
10
|
end
|
11
11
|
|
12
|
-
# depricated
|
13
|
-
def class_file
|
14
|
-
return @write_dir + '/classes.js'
|
15
|
-
end
|
16
|
-
|
17
12
|
def get_view_files
|
18
13
|
return [] unless @view_dir
|
19
14
|
return Dir.glob(@view_dir + '/**/*.haml')
|
@@ -33,22 +28,23 @@ class JS2::Process::FileHandler
|
|
33
28
|
return Dir.glob(@read_dir + '/**/*/*.js2') + Dir.glob(@read_dir + '/*.js2')
|
34
29
|
end
|
35
30
|
|
36
|
-
def write_file (filename, str)
|
37
|
-
to_write =
|
38
|
-
|
39
|
-
# hack just for bootstrap so that its written in the root dir
|
40
|
-
if filename.match(/js2bootstrap.js2$/)
|
41
|
-
to_write = @write_dir + '/js2bootstrap.js'
|
42
|
-
else
|
43
|
-
to_write = filename.sub(/^#{@read_dir}/, @write_dir).sub(/\.js2$/, '.js')
|
44
|
-
end
|
45
|
-
|
31
|
+
def write_file (filename, str, force = false)
|
32
|
+
to_write = get_js_filename(filename, force)
|
46
33
|
FileUtils.mkpath(File.dirname(to_write))
|
47
34
|
File.open(to_write, 'w') do |f|
|
48
35
|
f << str
|
49
36
|
end
|
50
37
|
end
|
51
38
|
|
39
|
+
def get_js_filename (filename, force = false)
|
40
|
+
to_write = filename.sub(/^#{@read_dir}/, @write_dir).sub(/\.js2$/, '.js')
|
41
|
+
|
42
|
+
if force
|
43
|
+
to_write = @write_dir + '/' + filename
|
44
|
+
end
|
45
|
+
return to_write
|
46
|
+
end
|
47
|
+
|
52
48
|
def write_compilation (filename, compilation)
|
53
49
|
to_write = filename.sub(/^#{@read_dir}/, @write_dir).sub(/\.js2$/, '.comp.js')
|
54
50
|
str = ""
|
@@ -1,15 +1,15 @@
|
|
1
1
|
begin
|
2
2
|
require 'rubygems'
|
3
3
|
require 'haml'
|
4
|
+
require 'erb'
|
4
5
|
require 'json'
|
5
|
-
rescue Exception
|
6
|
-
puts "HAML is not supported"
|
7
|
-
end
|
8
6
|
|
9
|
-
class JS2::
|
7
|
+
class JS2::HamlParser
|
8
|
+
attr_accessor :vars
|
10
9
|
|
11
|
-
def initialize (haml_engine)
|
12
|
-
@haml_engine = haml_engine
|
10
|
+
def initialize (haml_engine = nil, vars = nil)
|
11
|
+
@haml_engine = haml_engine || JS2::HamlEngine.new
|
12
|
+
@vars = vars || Hash.new
|
13
13
|
end
|
14
14
|
|
15
15
|
def parse_out_js (file)
|
@@ -32,7 +32,10 @@ class JS2::Parser::Haml
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def parse (file)
|
35
|
-
|
35
|
+
erb = ERB.new(File.read(file))
|
36
|
+
str = erb.result(binding)
|
37
|
+
|
38
|
+
lines = str.split(/\r?\n/)
|
36
39
|
result = Hash.new
|
37
40
|
|
38
41
|
klass = Hash.new
|
@@ -77,6 +80,9 @@ class JS2::Parser::Haml
|
|
77
80
|
end
|
78
81
|
|
79
82
|
return result
|
83
|
+
rescue Exception => e
|
84
|
+
puts file
|
85
|
+
raise e
|
80
86
|
end
|
81
87
|
|
82
88
|
private
|
@@ -87,6 +93,7 @@ class JS2::Parser::Haml
|
|
87
93
|
rescue Exception => e
|
88
94
|
puts "Error Processing SASS:"
|
89
95
|
puts string
|
96
|
+
puts e.backtrace.join("\n")
|
90
97
|
raise e
|
91
98
|
end
|
92
99
|
return css.gsub(/\n/, '').to_json
|
@@ -98,6 +105,7 @@ class JS2::Parser::Haml
|
|
98
105
|
rescue Exception => e
|
99
106
|
puts "Error Processing HAML:"
|
100
107
|
puts string
|
108
|
+
puts e.backtrace.join("\n")
|
101
109
|
raise e
|
102
110
|
end
|
103
111
|
|
@@ -129,4 +137,9 @@ class JS2::Parser::Haml
|
|
129
137
|
end
|
130
138
|
|
131
139
|
|
140
|
+
end
|
141
|
+
rescue Exception
|
142
|
+
puts "HAML is not supported"
|
143
|
+
|
144
|
+
|
132
145
|
end
|
data/lib/js2/js2.js
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
(function (scope) {
|
2
|
+
var JS2 = {};
|
3
|
+
scope.JS2 = JS2;
|
4
|
+
|
5
|
+
var ooUtils = {
|
6
|
+
extends: function (par) {
|
7
|
+
this.oo.parent = par;
|
8
|
+
this.oo.prime.prototype = par.oo.instance;
|
9
|
+
this.prototype = new this.oo.prime();
|
10
|
+
},
|
11
|
+
|
12
|
+
include: function (mod) {
|
13
|
+
var hash = mod.prototype;
|
14
|
+
var members = this.oo.members;
|
15
|
+
for (var k in hash) {
|
16
|
+
if (! members[k]) this.oo.prime.prototype[k] = newFly[k];
|
17
|
+
}
|
18
|
+
},
|
19
|
+
|
20
|
+
member: function (name, member) {
|
21
|
+
this.oo.members[name] = true;
|
22
|
+
this.oo.prime.prototype[name] = member;
|
23
|
+
},
|
24
|
+
|
25
|
+
staticMember: function (name, member) {
|
26
|
+
this[name] = member;
|
27
|
+
},
|
28
|
+
|
29
|
+
setHTMLCache: function (hash) {
|
30
|
+
// create temp class
|
31
|
+
var tempClass = function () {};
|
32
|
+
|
33
|
+
// look for super htmlCache
|
34
|
+
var par = this.oo.parent;
|
35
|
+
if (par) {
|
36
|
+
var parCache = par.oo.instance.htmlCache;
|
37
|
+
if (parCache) tempClass.prototype = parCache;
|
38
|
+
}
|
39
|
+
|
40
|
+
var htmlCache = new tempClass();
|
41
|
+
for (var k in hash) tempObj[k] = hash[k];
|
42
|
+
this.oo('member', 'htmlCache', htmlCache);
|
43
|
+
},
|
44
|
+
|
45
|
+
super: function (member) {
|
46
|
+
return this.oo.parent.instance[member];
|
47
|
+
},
|
48
|
+
|
49
|
+
property: function (names) {
|
50
|
+
for (var i=0; i<names.length; i++) {
|
51
|
+
var name = names[i];
|
52
|
+
var getter = 'get' + name.charAt(0).toUpperCase() + a.substr(1);
|
53
|
+
var setter = 'set' + name.charAt(0).toUpperCase() + a.substr(1);
|
54
|
+
if (!this.oo.members[getter]) this.oo('member', getter, function () { return this[name] });
|
55
|
+
if (!this.oo.members[setter]) this.oo('member', setter, function (val) { return this[name] = val });
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
};
|
60
|
+
|
61
|
+
// ROOT Object
|
62
|
+
(function (JS2) {
|
63
|
+
JS2.Object = function () {};
|
64
|
+
JS2.Object.meta = { instance: new JS2.Object(), methods: {} };
|
65
|
+
JS2.Object.prototype.initialize = function () { return function () {} };
|
66
|
+
JS2.Object.prototype.super = function (member) { return this.prototype.prototype[member]; };
|
67
|
+
})(JS2);
|
68
|
+
|
69
|
+
function createClass (name, par) {
|
70
|
+
var K = function () { this.initialize.apply(this, arguments); };
|
71
|
+
|
72
|
+
var prime = function () {};
|
73
|
+
K.prototype = new prime();
|
74
|
+
K.prototype.class = K;
|
75
|
+
K.prototype.initialize = prime; // hack
|
76
|
+
|
77
|
+
K.oo = function (method, param1, param2) {
|
78
|
+
ooUtils[method].apply(K, [ param1, param2 ]);
|
79
|
+
};
|
80
|
+
|
81
|
+
K.oo.prime = prime;
|
82
|
+
K.oo.includes = [];
|
83
|
+
K.oo.instance = new K();
|
84
|
+
K.oo.members = {};
|
85
|
+
|
86
|
+
return K;
|
87
|
+
}
|
88
|
+
|
89
|
+
function createNamespace (space, currentScope) {
|
90
|
+
var currentScope = currentScope || scope;
|
91
|
+
|
92
|
+
var splitted = space.split('.');
|
93
|
+
var name = [];
|
94
|
+
while (splitted.length) {
|
95
|
+
var part = splitted.shift();
|
96
|
+
name.push(part);
|
97
|
+
if (! currentScope[part]) currentScope[part] = createClass();
|
98
|
+
currentScope = currentScope[part];
|
99
|
+
currentScope.name = name.join('.');
|
100
|
+
}
|
101
|
+
}
|
102
|
+
|
103
|
+
JS2.OO = {};
|
104
|
+
JS2.OO.createClass = createNamespace;
|
105
|
+
|
106
|
+
|
107
|
+
})(window);
|
108
|
+
|