js2 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog +2 -4
- data/Manifest.txt +3 -0
- data/lib/javascript/bootstrap.js +42 -0
- data/lib/javascript/observer.js2 +59 -0
- data/lib/js2.rb +1 -1
- metadata +4 -2
data/Changelog
CHANGED
data/Manifest.txt
CHANGED
@@ -10,6 +10,8 @@ Rakefile
|
|
10
10
|
examples/js2.yml
|
11
11
|
examples/test.yml
|
12
12
|
lib/javascript/sel_marker.js2
|
13
|
+
lib/javascript/bootstrap.js
|
14
|
+
lib/javascript/observer.js2
|
13
15
|
lib/javascript/test.js2
|
14
16
|
lib/js2.rb
|
15
17
|
lib/js2/ast/class_node.rb
|
@@ -43,3 +45,4 @@ meta/c_tokenizer.rl.erb
|
|
43
45
|
meta/replace.rb
|
44
46
|
bin/js2
|
45
47
|
website/index.txt
|
48
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
var JS2 = {};
|
2
|
+
JS2.createClass = function (name) {
|
3
|
+
var splitName = name.split('.');
|
4
|
+
var namespace = window;
|
5
|
+
while (splitName.length) {
|
6
|
+
var subName = splitName.shift();
|
7
|
+
if (! namespace[subName]) {
|
8
|
+
namespace =
|
9
|
+
namespace[subName] =
|
10
|
+
function () { if (this.initialize) this.initialize.apply(this, arguments) };
|
11
|
+
} else {
|
12
|
+
namespace = namespace[subName];
|
13
|
+
}
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
JS2.getClass = function (name) {
|
18
|
+
var splitName = name.split('.');
|
19
|
+
var namespace = window;
|
20
|
+
|
21
|
+
while (splitName.length) {
|
22
|
+
var subName = splitName.shift();
|
23
|
+
if (namespace[subName]) {
|
24
|
+
namespace = namespace[subName];
|
25
|
+
} else {
|
26
|
+
return null;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
return namespace;
|
31
|
+
}
|
32
|
+
|
33
|
+
function _super () {
|
34
|
+
var method = arguments.callee.caller._super;
|
35
|
+
if (! method) return;
|
36
|
+
var self = arguments[0];
|
37
|
+
var args = [];
|
38
|
+
for (var i=1,len=arguments.length;i<len;i++) {
|
39
|
+
args.push(arguments[i]);
|
40
|
+
}
|
41
|
+
return method.apply(self, args);
|
42
|
+
}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
class JS2.Observer {
|
2
|
+
function initialize (owner) {
|
3
|
+
this.lookupBefore = {};
|
4
|
+
this.lookupAfter = {};
|
5
|
+
|
6
|
+
this.replaced = {};
|
7
|
+
this.replacedValues = {};
|
8
|
+
}
|
9
|
+
|
10
|
+
function replaceFunction (owner, eventName) {
|
11
|
+
if (this.replaced[eventName]) return;
|
12
|
+
|
13
|
+
this.replacedValues[eventName] = owner[eventName];
|
14
|
+
this.replaced[eventName] = true;
|
15
|
+
owner[eventName] = this.getTrigger(eventName);
|
16
|
+
}
|
17
|
+
|
18
|
+
function trigger (owner, eventName, args) {
|
19
|
+
var beforeChain = this.lookupBefore[eventName];
|
20
|
+
if (beforeChain) this.executeChain(beforeChain, args);
|
21
|
+
|
22
|
+
var funct = this.replacedValues[eventName];
|
23
|
+
if (funct) funct.apply(owner, args);
|
24
|
+
|
25
|
+
var afterChain = this.lookupAfter[eventName];
|
26
|
+
if (afterChain) this.executeChain(afterChain, args);
|
27
|
+
}
|
28
|
+
|
29
|
+
function addListener (eventName, funct, before) {
|
30
|
+
var lookup = before ? this.lookupBefore : this.lookupAfter;
|
31
|
+
|
32
|
+
var chain = lookup[eventName] = lookup[eventName] || [];
|
33
|
+
chain.push(funct);
|
34
|
+
}
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
function getTrigger (eventName) {
|
39
|
+
return function () { this.__observer.trigger(this, eventName, arguments); };
|
40
|
+
}
|
41
|
+
|
42
|
+
function executeChain (chain, args) {
|
43
|
+
foreach (var f:i in chain) if (f) f.apply(this, args);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
module JS2.Observable {
|
48
|
+
function addListener (eventName, funct, before) {
|
49
|
+
if (! this.__observer) this.__observer = new Factual.Core.Observer();
|
50
|
+
|
51
|
+
var id = this.__observer.addListener(eventName, funct, before);
|
52
|
+
this.__observer.replaceFunction(this, eventName);
|
53
|
+
return id;
|
54
|
+
}
|
55
|
+
|
56
|
+
function triggerEvent (eventName, args) {
|
57
|
+
if (this.__observer) this.__observer.trigger(this, eventName, args);
|
58
|
+
}
|
59
|
+
}
|
data/lib/js2.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: js2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Su
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-12-
|
12
|
+
date: 2009-12-04 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -68,6 +68,8 @@ files:
|
|
68
68
|
- examples/js2.yml
|
69
69
|
- examples/test.yml
|
70
70
|
- lib/javascript/sel_marker.js2
|
71
|
+
- lib/javascript/bootstrap.js
|
72
|
+
- lib/javascript/observer.js2
|
71
73
|
- lib/javascript/test.js2
|
72
74
|
- lib/js2.rb
|
73
75
|
- lib/js2/ast/class_node.rb
|