js2 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/Changelog +3 -0
  2. data/Manifest.txt +13 -28
  3. data/Rakefile +19 -19
  4. data/bin/js2 +48 -41
  5. data/lib/javascript/sel_marker.js2 +3 -3
  6. data/lib/js2/config.rb +6 -1
  7. data/lib/js2/{process/file_handler.rb → file_handler.rb} +15 -19
  8. data/lib/js2/foo.js2.haml +3 -0
  9. data/lib/js2/{process/haml_engine.rb → haml_engine.rb} +1 -1
  10. data/lib/js2/{parser/haml.rb → haml_parser.rb} +20 -7
  11. data/lib/js2/js2.js +108 -0
  12. data/lib/js2/js2bootstrap.js2 +455 -0
  13. data/lib/js2/parser.rb +3542 -0
  14. data/lib/js2/processor.rb +14 -65
  15. data/lib/js2/replace.rb +106 -0
  16. data/lib/js2/{decorator/test.rb → sel_decorator.rb} +11 -14
  17. data/{meta/c_tokenizer.rl.erb → lib/js2/tokenizer.rl.erb} +155 -123
  18. data/lib/js2/tree.rb +340 -0
  19. data/lib/js2/universe.rb +101 -0
  20. data/lib/js2.rb +31 -77
  21. data/lib/tasks/js2.rake +1 -1
  22. metadata +15 -29
  23. data/lib/js2/ast/class_node.rb +0 -105
  24. data/lib/js2/ast/comment_node.rb +0 -2
  25. data/lib/js2/ast/haml_node.rb +0 -22
  26. data/lib/js2/ast/include_node.rb +0 -11
  27. data/lib/js2/ast/inherited_node.rb +0 -7
  28. data/lib/js2/ast/member_node.rb +0 -18
  29. data/lib/js2/ast/method_node.rb +0 -29
  30. data/lib/js2/ast/module_node.rb +0 -6
  31. data/lib/js2/ast/node.rb +0 -14
  32. data/lib/js2/ast/nodes.rb +0 -123
  33. data/lib/js2/ast/stuff_node.rb +0 -6
  34. data/lib/js2/decorator/app.rb +0 -7
  35. data/lib/js2/decorator/cleanser.rb +0 -54
  36. data/lib/js2/decorator/standard.rb +0 -103
  37. data/lib/js2/parser/fast.rb +0 -3959
  38. data/lib/js2/process/universe.rb +0 -89
  39. data/lib/js2/test/selenium.rb +0 -109
  40. data/lib/js2/test/selenium_element.rb +0 -234
  41. data/lib/js2/test/selenium_helper.rb +0 -27
  42. data/lib/js2bootstrap.js2 +0 -274
  43. data/meta/replace.rb +0 -126
data/Changelog CHANGED
@@ -1,3 +1,6 @@
1
+ == 0.0.9 2009-12-23
2
+ * large 1st move to runtime js2
3
+
1
4
  == 0.0.8 2009-12-23
2
5
  * fixed unique file problem in compilition files
3
6
 
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/js2bootstrap.js2
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/decorator/app.rb
30
- lib/js2/decorator/cleanser.rb
31
- lib/js2/decorator/standard.rb
32
- lib/js2/decorator/test.rb
33
- lib/js2/parser/fast.rb
34
- lib/js2/parser/haml.rb
35
- lib/js2/process/file_handler.rb
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/test/selenium.rb
40
- lib/js2/test/selenium_element.rb
41
- lib/js2/test/selenium_helper.rb
42
- lib/tasks/js2.rake
43
- meta/c_tokenizer.rl.erb
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
- puts "Detected Rails setup: using auto config"
13
+ usage = "Usage: js2 [options] <dir-with-js2>"
14
+ op = OptionParser.new do |opts|
15
+ opts.banner = usage
16
16
 
17
- dir = File.directory?('app/js2') ? './app/js2' : './js2'
18
- puts "Using js2 dir: #{dir}"
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
- options[:write_dir] = './public/javascripts'
21
- puts "Writing to: #{options[:write_dir]}"
21
+ opts.on("--out-dir DIR", "Directory of js2 -> js output") do |out|
22
+ options[:write_dir] = out
23
+ end
22
24
 
23
- options[:daemonize] = true
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
- options[:js2_haml_dir] = dir
26
- puts "HAML dir (optional): #{options[:js2_haml_dir]}"
34
+ opts.on("-d", "--daemonize") do |d|
35
+ options[:daemonize] = true
36
+ end
27
37
 
28
- else
38
+ opts.on('-h', "--help", "Help Screen") do
39
+ puts opts
40
+ exit
41
+ end
42
+ end
29
43
 
30
- usage = "Usage: js2 [options] <dir-with-js2>"
31
- op = OptionParser.new do |opts|
32
- opts.banner = usage
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
- opts.on("--js2-haml-dir DIR", "Directory with js2.haml files") do |haml|
35
- options[:js2_haml_dir] = haml
36
- end
48
+ options[:js2_dir] = File.directory?('app/js2') ? './app/js2' : './js2'
37
49
 
38
- opts.on("--out-dir DIR", "Directory of js2 -> js output") do |out|
39
- options[:write_dir] = out
40
- end
50
+ options[:write_dir] ||= './public/javascripts'
41
51
 
42
- opts.on("-d", "--daemonize") do |d|
43
- options[:daemonize] = true
44
- end
52
+ options[:daemonize] = true
45
53
 
46
- opts.on('-h', "--help", "Help Screen") do
47
- puts opts
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
- dir = ARGV.pop
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
- unless dir
66
- puts op
67
- exit
68
- end
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 = dir
74
- config.js2_haml_dir = options[:js2_haml_dir] || dir
75
- config.write_dir = options[:write_dir] || 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._klass.replace(/\.\w+$/, '');
108
- var classname = klass._klass.match(/\.\w+$/)[0];
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._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::Process::FileHandler
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 = nil
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 = ""
@@ -0,0 +1,3 @@
1
+ Foo
2
+ main
3
+ %div
@@ -8,7 +8,7 @@ rescue Exception
8
8
  end
9
9
 
10
10
 
11
- class JS2::Process::HamlEngine
11
+ class JS2::HamlEngine
12
12
  def hamlize (string)
13
13
  return Haml::Engine.new(string, { :ugly => true }).render(self).gsub(/\n/, '')
14
14
  end
@@ -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::Parser::Haml
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
- lines = File.read(file).split(/\r?\n/)
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
+