envjs 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,8 @@
1
+ === 0.3.3 / 2010-04-21
2
+
3
+ * fix case where option parent missing (during parse)
4
+ * handle preventDefault (at least simple cases)
5
+
1
6
  === 0.3.2 / 2010-04-21
2
7
 
3
8
  * don't error out on empty options and handle options within optgroups
data/lib/envjs/env.js CHANGED
@@ -2153,169 +2153,172 @@ $w.removeEventListener = function(type, fn){
2153
2153
 
2154
2154
 
2155
2155
  function __dispatchEvent__(target, event, bubbles){
2156
- try{
2157
- $debug("dispatching event " + event.type);
2156
+ try{
2157
+ $debug("dispatching event " + event.type);
2158
2158
 
2159
- //the window scope defines the $event object, for IE(^^^) compatibility;
2160
- $event = event;
2159
+ //the window scope defines the $event object, for IE(^^^) compatibility;
2160
+ $event = event;
2161
2161
 
2162
- if (bubbles == undefined || bubbles == null)
2163
- bubbles = true;
2162
+ if (bubbles == undefined || bubbles == null)
2163
+ bubbles = true;
2164
2164
 
2165
- if (!event.target) {
2166
- //$debug("no event target : "+event.target);
2167
- event.target = target;
2168
- }
2169
- //$debug("event target: " + event.target);
2170
- var handled = false;
2171
- if ( event.type && (target.nodeType ||
2172
- target.window === window || // compares outer objects under TM (inner == outer, but !== (currently)
2173
- target === window ||
2174
- target.__proto__ === window ||
2175
- target.$thisWindowsProxyObject === window)) {
2176
- //$debug("nodeType: " + target.nodeType);
2177
- if ( target.uuid && $events[target.uuid][event.type] ) {
2178
- var _this = target;
2179
- $debug('calling event handlers '+$events[target.uuid][event.type].length);
2180
- $events[target.uuid][event.type].forEach(function(fn){
2181
- $debug('calling event handler '+fn+' on target '+_this);
2182
- handled = (fn(event) == false) || handled;
2183
- });
2165
+ if (!event.target) {
2166
+ //$debug("no event target : "+event.target);
2167
+ event.target = target;
2184
2168
  }
2185
-
2186
- if (target["on" + event.type]) {
2187
- $debug('calling event handler on'+event.type+' on target '+target);
2188
- handled = (target["on" + event.type](event) == false) || handled;
2189
- }
2190
-
2191
- // SMP FIX: cancel/stop prop
2192
-
2193
- // print(event.type,target,handled);
2169
+ //$debug("event target: " + event.target);
2170
+ var handled = false;
2171
+ if ( event.type && (target.nodeType ||
2172
+ target.window === window || // compares outer objects under TM (inner == outer, but !== (currently)
2173
+ target === window ||
2174
+ target.__proto__ === window ||
2175
+ target.$thisWindowsProxyObject === window)) {
2176
+ //$debug("nodeType: " + target.nodeType);
2177
+ if ( target.uuid && $events[target.uuid][event.type] ) {
2178
+ var _this = target;
2179
+ $debug('calling event handlers '+$events[target.uuid][event.type].length);
2180
+ $events[target.uuid][event.type].forEach(function(fn){
2181
+ $debug('calling event handler '+fn+' on target '+_this);
2182
+ handled = (fn(event) == false) || handled;
2183
+ });
2184
+ }
2185
+
2186
+ if (target["on" + event.type]) {
2187
+ $debug('calling event handler on'+event.type+' on target '+target);
2188
+ handled = (target["on" + event.type](event) == false) || handled;
2189
+ }
2194
2190
 
2195
- if (!handled && event.type == "click" && target instanceof HTMLAnchorElement && target.href ) {
2196
- // window.location = target.href;
2191
+ // SMP FIX: cancel/stop prop
2192
+ if (!handled && event.$preventDefault) {
2193
+ handled = true;
2194
+ }
2195
+
2196
+ // print(event.type,target,handled);
2197
2197
 
2198
- var url = target.href;
2198
+ if (!handled && event.type == "click" && target instanceof HTMLAnchorElement && target.href ) {
2199
+ // window.location = target.href;
2199
2200
 
2200
- var skip = false;
2201
+ var url = target.href;
2201
2202
 
2202
- if (url[0] === "#") {
2203
- // print("return anchor only");
2204
- skip = true;
2205
- }
2203
+ var skip = false;
2206
2204
 
2207
- if (!skip) {
2208
- var now = window.location.href.replace(/^file:\/\//,"").replace(/#.*/,"");
2209
- var to = $master.first_script_window && $master.first_script_window.location.href;
2210
- // var to = $env.location(url,window.location.href != "about:blank" ? window.location.href: undefined);
2211
- // I'm not sure why this code is here ... looking at the FSW
2212
- // print("nu",now,url,to);
2213
- to = to || $env.location(url,window.location.href);
2214
- // print("nu",now,url,to);
2215
- if (to && to.indexOf(now)===0 && to[now.length]==="#") {
2216
- skip = true;
2217
- }
2218
- }
2219
- if (!skip) {
2220
- if (url && url.indexOf(now)===0 && url[now.length]==="#") {
2221
- // print("return diff anchor only");
2222
- skip = true;
2223
- }
2224
- }
2225
- if (!skip) {
2226
- // print($location, window.location.href === $location, $location.indexOf("#")>0);
2227
- if (url === window.location.href && $location.indexOf("#")>0) {
2228
- // print('returning same with anchor');
2229
- skip = true;
2230
- }
2231
- }
2232
-
2233
- if (!skip){
2234
- $env.reload(window, target.href, {referer: window.location.href});
2235
- }
2236
- }
2205
+ if (url[0] === "#") {
2206
+ // print("return anchor only");
2207
+ skip = true;
2208
+ }
2237
2209
 
2238
- if (!handled && event.type == "click" &&
2239
- target.form &&
2240
- ( target instanceof HTMLInputElement || target instanceof HTMLTypeValueInputs ) &&
2241
- ( ( target.tagName === "INPUT" &&
2242
- (target.type === "submit" ||
2243
- target.type === "image" ) ) ||
2244
- ( target.tagName === "BUTTON" &&
2245
- ( !target.type ||
2246
- target.type === "submit" ) ) ) ) {
2247
- target.form.clk = target;
2248
- try{
2249
- target.form.submit();
2250
- // __submit__(target.form);
2251
- }catch(e){
2252
- print("oopse",e);
2253
- print(e.stack);
2254
- e.backtrace && print(e.backtrace().join("\n"));
2255
- throw e;
2256
- };
2257
- delete target.form.clk;
2258
- }
2210
+ if (!skip) {
2211
+ var now = window.location.href.replace(/^file:\/\//,"").replace(/#.*/,"");
2212
+ var to = $master.first_script_window && $master.first_script_window.location.href;
2213
+ // var to = $env.location(url,window.location.href != "about:blank" ? window.location.href: undefined);
2214
+ // I'm not sure why this code is here ... looking at the FSW
2215
+ // print("nu",now,url,to);
2216
+ to = to || $env.location(url,window.location.href);
2217
+ // print("nu",now,url,to);
2218
+ if (to && to.indexOf(now)===0 && to[now.length]==="#") {
2219
+ skip = true;
2220
+ }
2221
+ }
2222
+ if (!skip) {
2223
+ if (url && url.indexOf(now)===0 && url[now.length]==="#") {
2224
+ // print("return diff anchor only");
2225
+ skip = true;
2226
+ }
2227
+ }
2228
+ if (!skip) {
2229
+ // print($location, window.location.href === $location, $location.indexOf("#")>0);
2230
+ if (url === window.location.href && $location.indexOf("#")>0) {
2231
+ // print('returning same with anchor');
2232
+ skip = true;
2233
+ }
2234
+ }
2259
2235
 
2260
- // print(event.type,target.type,target.constructor+"");
2261
- // print("A",handled,event.type,target,target.type);
2262
- if (!handled && event.type == "click" && target instanceof HTMLInputElement && ( target.type == "checkbox" || target.type == "radio" ) ) {
2263
- target.checked = target.checked ? "" : "checked";
2264
- }
2236
+ if (!skip){
2237
+ $env.reload(window, target.href, {referer: window.location.href});
2238
+ }
2239
+ }
2265
2240
 
2266
- if (!handled && (event.type == "submit") && target instanceof HTMLFormElement) {
2267
- $env.unload($w);
2268
- var proxy = $w.window;
2269
- var data;
2270
- var boundary;
2271
- if (target.enctype === "multipart/form-data") {
2272
- boundary = (new Date).getTime();
2273
- }
2274
- data = $master["static"].__formSerialize__(target,undefined,boundary);
2275
- var options = {method: target.method || "get", referer: this.location.href};
2276
- if (options.method === "post" || options.method === "put") {
2277
- options.data = data;
2278
- var undef;
2279
- data = undef;
2280
- }
2281
- if (boundary) {
2282
- options["Content-Type"] = "multipart/form-data; boundary="+boundary;
2283
- } else {
2284
- options["Content-Type"] = 'application/x-www-form-urlencoded';
2285
- }
2286
- var action = target.action || window.location.href;
2287
- if (data) {
2288
- if (action.indexOf("?") < 0) {
2289
- action = action + "?";
2241
+ if (!handled && event.type == "click" &&
2242
+ target.form &&
2243
+ ( target instanceof HTMLInputElement || target instanceof HTMLTypeValueInputs ) &&
2244
+ ( ( target.tagName === "INPUT" &&
2245
+ (target.type === "submit" ||
2246
+ target.type === "image" ) ) ||
2247
+ ( target.tagName === "BUTTON" &&
2248
+ ( !target.type ||
2249
+ target.type === "submit" ) ) ) ) {
2250
+ target.form.clk = target;
2251
+ try{
2252
+ target.form.submit();
2253
+ // __submit__(target.form);
2254
+ }catch(e){
2255
+ print("oopse",e);
2256
+ print(e.stack);
2257
+ e.backtrace && print(e.backtrace().join("\n"));
2258
+ throw e;
2259
+ };
2260
+ delete target.form.clk;
2290
2261
  }
2291
- if (action[action.length-1] != "?") {
2292
- action = action + "&";
2262
+
2263
+ // print(event.type,target.type,target.constructor+"");
2264
+ // print("A",handled,event.type,target,target.type);
2265
+ if (!handled && event.type == "click" && target instanceof HTMLInputElement && ( target.type == "checkbox" || target.type == "radio" ) ) {
2266
+ target.checked = target.checked ? "" : "checked";
2293
2267
  }
2294
- var params = unescape(data).split("&");
2295
- var new_params = [];
2296
- for(var pi=0; pi < params.length; pi++) {
2297
- var pair = params[pi].split("=");
2298
- new_params.push(escape(pair[0])+"="+escape(pair[1]));
2268
+
2269
+ if (!handled && (event.type == "submit") && target instanceof HTMLFormElement) {
2270
+ $env.unload($w);
2271
+ var proxy = $w.window;
2272
+ var data;
2273
+ var boundary;
2274
+ if (target.enctype === "multipart/form-data") {
2275
+ boundary = (new Date).getTime();
2276
+ }
2277
+ data = $master["static"].__formSerialize__(target,undefined,boundary);
2278
+ var options = {method: target.method || "get", referer: this.location.href};
2279
+ if (options.method === "post" || options.method === "put") {
2280
+ options.data = data;
2281
+ var undef;
2282
+ data = undef;
2283
+ }
2284
+ if (boundary) {
2285
+ options["Content-Type"] = "multipart/form-data; boundary="+boundary;
2286
+ } else {
2287
+ options["Content-Type"] = 'application/x-www-form-urlencoded';
2288
+ }
2289
+ var action = target.action || window.location.href;
2290
+ if (data) {
2291
+ if (action.indexOf("?") < 0) {
2292
+ action = action + "?";
2293
+ }
2294
+ if (action[action.length-1] != "?") {
2295
+ action = action + "&";
2296
+ }
2297
+ var params = unescape(data).split("&");
2298
+ var new_params = [];
2299
+ for(var pi=0; pi < params.length; pi++) {
2300
+ var pair = params[pi].split("=");
2301
+ new_params.push(escape(pair[0])+"="+escape(pair[1]));
2302
+ }
2303
+ action = action + new_params.join("&");
2304
+ }
2305
+ $env.reload(proxy, action, options );
2299
2306
  }
2300
- action = action + new_params.join("&");
2301
- }
2302
- $env.reload(proxy, action, options );
2303
- }
2304
2307
 
2305
- }else{
2306
- //$debug("non target: " + event.target + " \n this->"+target);
2307
- }
2308
- if (!handled && bubbles && target.parentNode){
2309
- //$debug('bubbling to parentNode '+target.parentNode);
2310
- __dispatchEvent__(target.parentNode, event, bubbles);
2308
+ }else{
2309
+ //$debug("non target: " + event.target + " \n this->"+target);
2310
+ }
2311
+ if (!handled && bubbles && target.parentNode){
2312
+ //$debug('bubbling to parentNode '+target.parentNode);
2313
+ __dispatchEvent__(target.parentNode, event, bubbles);
2314
+ }
2315
+ }catch(e){
2316
+ $warn("Exception while dispatching events: "+e);
2317
+ // print("oops e",e.stack);
2318
+ // print("oops e",e.backtrace && e.backtrace().join("\n"));
2319
+ // try { throw new Error("here"); } catch(x) { print("oops e",x.stack); }
2320
+ throw e;
2311
2321
  }
2312
- }catch(e){
2313
- $warn("Exception while dispatching events: "+e);
2314
- // print("oops e",e.stack);
2315
- // print("oops e",e.backtrace && e.backtrace().join("\n"));
2316
- // try { throw new Error("here"); } catch(x) { print("oops e",x.stack); }
2317
- throw e;
2318
- }
2319
2322
  };
2320
2323
 
2321
2324
  $env.__removeEventListener__ = __removeEventListener__;
data/lib/envjs/static.js CHANGED
@@ -6770,7 +6770,7 @@ __extend__(HTMLOptionElement.prototype, {
6770
6770
  }
6771
6771
  HTMLInputCommon.prototype.setAttribute.call(this, 'selected', selectedValue);
6772
6772
  var parent = this.parentNode;
6773
- while (parent.tagName === "OPTGROUP") {
6773
+ while (parent && parent.tagName === "OPTGROUP") {
6774
6774
  parent = parent.parentNode;
6775
6775
  }
6776
6776
  if (value) {
@@ -22073,6 +22073,7 @@ var Event = function(options){
22073
22073
  $target = options.target?options.target:null,
22074
22074
  $timestamp = options.timestamp?options.timestamp:new Date().getTime().toString(),
22075
22075
  $type = options.type?options.type:"";
22076
+ this.$preventDefault = false;
22076
22077
  return __extend__(this,{
22077
22078
  get bubbles(){return $bubbles;},
22078
22079
  get cancelable(){return $cancelable;},
@@ -22087,8 +22088,15 @@ var Event = function(options){
22087
22088
  $bubbles=bubbles?bubbles:$bubbles;
22088
22089
  $cancelable=cancelable?cancelable:$cancelable;
22089
22090
  },
22090
- preventDefault: function(){return;/* TODO */},
22091
- stopPropagation: function(){return;/* TODO */}
22091
+ stopPropagation: function(){
22092
+ if($cancelable){
22093
+ this.$cancelled = true;
22094
+ $bubbles = false;
22095
+ }
22096
+ },
22097
+ preventDefault: function(){
22098
+ this.$preventDefault = true;
22099
+ }
22092
22100
  });
22093
22101
  };
22094
22102
 
data/lib/envjs.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Envjs
2
2
 
3
- VERSION = "0.3.2"
3
+ VERSION = "0.3.3"
4
4
 
5
5
  def self.js_exception_stack e
6
6
  result = %(Exception: )+e.to_s
data/src/event/event.js CHANGED
@@ -17,6 +17,7 @@ var Event = function(options){
17
17
  $target = options.target?options.target:null,
18
18
  $timestamp = options.timestamp?options.timestamp:new Date().getTime().toString(),
19
19
  $type = options.type?options.type:"";
20
+ this.$preventDefault = false;
20
21
  return __extend__(this,{
21
22
  get bubbles(){return $bubbles;},
22
23
  get cancelable(){return $cancelable;},
@@ -31,8 +32,15 @@ var Event = function(options){
31
32
  $bubbles=bubbles?bubbles:$bubbles;
32
33
  $cancelable=cancelable?cancelable:$cancelable;
33
34
  },
34
- preventDefault: function(){return;/* TODO */},
35
- stopPropagation: function(){return;/* TODO */}
35
+ stopPropagation: function(){
36
+ if($cancelable){
37
+ this.$cancelled = true;
38
+ $bubbles = false;
39
+ }
40
+ },
41
+ preventDefault: function(){
42
+ this.$preventDefault = true;
43
+ }
36
44
  });
37
45
  };
38
46
 
data/src/html/option.js CHANGED
@@ -29,7 +29,7 @@ __extend__(HTMLOptionElement.prototype, {
29
29
  }
30
30
  HTMLInputCommon.prototype.setAttribute.call(this, 'selected', selectedValue);
31
31
  var parent = this.parentNode;
32
- while (parent.tagName === "OPTGROUP") {
32
+ while (parent && parent.tagName === "OPTGROUP") {
33
33
  parent = parent.parentNode;
34
34
  }
35
35
  if (value) {
data/src/window/event.js CHANGED
@@ -50,169 +50,172 @@ $w.removeEventListener = function(type, fn){
50
50
 
51
51
 
52
52
  function __dispatchEvent__(target, event, bubbles){
53
- try{
54
- $debug("dispatching event " + event.type);
53
+ try{
54
+ $debug("dispatching event " + event.type);
55
55
 
56
- //the window scope defines the $event object, for IE(^^^) compatibility;
57
- $event = event;
56
+ //the window scope defines the $event object, for IE(^^^) compatibility;
57
+ $event = event;
58
58
 
59
- if (bubbles == undefined || bubbles == null)
60
- bubbles = true;
59
+ if (bubbles == undefined || bubbles == null)
60
+ bubbles = true;
61
61
 
62
- if (!event.target) {
63
- //$debug("no event target : "+event.target);
64
- event.target = target;
65
- }
66
- //$debug("event target: " + event.target);
67
- var handled = false;
68
- if ( event.type && (target.nodeType ||
69
- target.window === window || // compares outer objects under TM (inner == outer, but !== (currently)
70
- target === window ||
71
- target.__proto__ === window ||
72
- target.$thisWindowsProxyObject === window)) {
73
- //$debug("nodeType: " + target.nodeType);
74
- if ( target.uuid && $events[target.uuid][event.type] ) {
75
- var _this = target;
76
- $debug('calling event handlers '+$events[target.uuid][event.type].length);
77
- $events[target.uuid][event.type].forEach(function(fn){
78
- $debug('calling event handler '+fn+' on target '+_this);
79
- handled = (fn(event) == false) || handled;
80
- });
81
- }
82
-
83
- if (target["on" + event.type]) {
84
- $debug('calling event handler on'+event.type+' on target '+target);
85
- handled = (target["on" + event.type](event) == false) || handled;
62
+ if (!event.target) {
63
+ //$debug("no event target : "+event.target);
64
+ event.target = target;
86
65
  }
66
+ //$debug("event target: " + event.target);
67
+ var handled = false;
68
+ if ( event.type && (target.nodeType ||
69
+ target.window === window || // compares outer objects under TM (inner == outer, but !== (currently)
70
+ target === window ||
71
+ target.__proto__ === window ||
72
+ target.$thisWindowsProxyObject === window)) {
73
+ //$debug("nodeType: " + target.nodeType);
74
+ if ( target.uuid && $events[target.uuid][event.type] ) {
75
+ var _this = target;
76
+ $debug('calling event handlers '+$events[target.uuid][event.type].length);
77
+ $events[target.uuid][event.type].forEach(function(fn){
78
+ $debug('calling event handler '+fn+' on target '+_this);
79
+ handled = (fn(event) == false) || handled;
80
+ });
81
+ }
82
+
83
+ if (target["on" + event.type]) {
84
+ $debug('calling event handler on'+event.type+' on target '+target);
85
+ handled = (target["on" + event.type](event) == false) || handled;
86
+ }
87
87
 
88
- // SMP FIX: cancel/stop prop
89
-
90
- // print(event.type,target,handled);
91
-
92
- if (!handled && event.type == "click" && target instanceof HTMLAnchorElement && target.href ) {
93
- // window.location = target.href;
94
-
95
- var url = target.href;
96
-
97
- var skip = false;
98
-
99
- if (url[0] === "#") {
100
- // print("return anchor only");
101
- skip = true;
102
- }
103
-
104
- if (!skip) {
105
- var now = window.location.href.replace(/^file:\/\//,"").replace(/#.*/,"");
106
- var to = $master.first_script_window && $master.first_script_window.location.href;
107
- // var to = $env.location(url,window.location.href != "about:blank" ? window.location.href: undefined);
108
- // I'm not sure why this code is here ... looking at the FSW
109
- // print("nu",now,url,to);
110
- to = to || $env.location(url,window.location.href);
111
- // print("nu",now,url,to);
112
- if (to && to.indexOf(now)===0 && to[now.length]==="#") {
113
- skip = true;
114
- }
115
- }
116
- if (!skip) {
117
- if (url && url.indexOf(now)===0 && url[now.length]==="#") {
118
- // print("return diff anchor only");
119
- skip = true;
120
- }
121
- }
122
- if (!skip) {
123
- // print($location, window.location.href === $location, $location.indexOf("#")>0);
124
- if (url === window.location.href && $location.indexOf("#")>0) {
125
- // print('returning same with anchor');
126
- skip = true;
127
- }
128
- }
129
-
130
- if (!skip){
131
- $env.reload(window, target.href, {referer: window.location.href});
132
- }
133
- }
134
-
135
- if (!handled && event.type == "click" &&
136
- target.form &&
137
- ( target instanceof HTMLInputElement || target instanceof HTMLTypeValueInputs ) &&
138
- ( ( target.tagName === "INPUT" &&
139
- (target.type === "submit" ||
140
- target.type === "image" ) ) ||
141
- ( target.tagName === "BUTTON" &&
142
- ( !target.type ||
143
- target.type === "submit" ) ) ) ) {
144
- target.form.clk = target;
145
- try{
146
- target.form.submit();
147
- // __submit__(target.form);
148
- }catch(e){
149
- print("oopse",e);
150
- print(e.stack);
151
- e.backtrace && print(e.backtrace().join("\n"));
152
- throw e;
153
- };
154
- delete target.form.clk;
155
- }
156
-
157
- // print(event.type,target.type,target.constructor+"");
158
- // print("A",handled,event.type,target,target.type);
159
- if (!handled && event.type == "click" && target instanceof HTMLInputElement && ( target.type == "checkbox" || target.type == "radio" ) ) {
160
- target.checked = target.checked ? "" : "checked";
161
- }
162
-
163
- if (!handled && (event.type == "submit") && target instanceof HTMLFormElement) {
164
- $env.unload($w);
165
- var proxy = $w.window;
166
- var data;
167
- var boundary;
168
- if (target.enctype === "multipart/form-data") {
169
- boundary = (new Date).getTime();
170
- }
171
- data = $master["static"].__formSerialize__(target,undefined,boundary);
172
- var options = {method: target.method || "get", referer: this.location.href};
173
- if (options.method === "post" || options.method === "put") {
174
- options.data = data;
175
- var undef;
176
- data = undef;
177
- }
178
- if (boundary) {
179
- options["Content-Type"] = "multipart/form-data; boundary="+boundary;
180
- } else {
181
- options["Content-Type"] = 'application/x-www-form-urlencoded';
182
- }
183
- var action = target.action || window.location.href;
184
- if (data) {
185
- if (action.indexOf("?") < 0) {
186
- action = action + "?";
88
+ // SMP FIX: cancel/stop prop
89
+ if (!handled && event.$preventDefault) {
90
+ handled = true;
187
91
  }
188
- if (action[action.length-1] != "?") {
189
- action = action + "&";
92
+
93
+ // print(event.type,target,handled);
94
+
95
+ if (!handled && event.type == "click" && target instanceof HTMLAnchorElement && target.href ) {
96
+ // window.location = target.href;
97
+
98
+ var url = target.href;
99
+
100
+ var skip = false;
101
+
102
+ if (url[0] === "#") {
103
+ // print("return anchor only");
104
+ skip = true;
105
+ }
106
+
107
+ if (!skip) {
108
+ var now = window.location.href.replace(/^file:\/\//,"").replace(/#.*/,"");
109
+ var to = $master.first_script_window && $master.first_script_window.location.href;
110
+ // var to = $env.location(url,window.location.href != "about:blank" ? window.location.href: undefined);
111
+ // I'm not sure why this code is here ... looking at the FSW
112
+ // print("nu",now,url,to);
113
+ to = to || $env.location(url,window.location.href);
114
+ // print("nu",now,url,to);
115
+ if (to && to.indexOf(now)===0 && to[now.length]==="#") {
116
+ skip = true;
117
+ }
118
+ }
119
+ if (!skip) {
120
+ if (url && url.indexOf(now)===0 && url[now.length]==="#") {
121
+ // print("return diff anchor only");
122
+ skip = true;
123
+ }
124
+ }
125
+ if (!skip) {
126
+ // print($location, window.location.href === $location, $location.indexOf("#")>0);
127
+ if (url === window.location.href && $location.indexOf("#")>0) {
128
+ // print('returning same with anchor');
129
+ skip = true;
130
+ }
131
+ }
132
+
133
+ if (!skip){
134
+ $env.reload(window, target.href, {referer: window.location.href});
135
+ }
190
136
  }
191
- var params = unescape(data).split("&");
192
- var new_params = [];
193
- for(var pi=0; pi < params.length; pi++) {
194
- var pair = params[pi].split("=");
195
- new_params.push(escape(pair[0])+"="+escape(pair[1]));
137
+
138
+ if (!handled && event.type == "click" &&
139
+ target.form &&
140
+ ( target instanceof HTMLInputElement || target instanceof HTMLTypeValueInputs ) &&
141
+ ( ( target.tagName === "INPUT" &&
142
+ (target.type === "submit" ||
143
+ target.type === "image" ) ) ||
144
+ ( target.tagName === "BUTTON" &&
145
+ ( !target.type ||
146
+ target.type === "submit" ) ) ) ) {
147
+ target.form.clk = target;
148
+ try{
149
+ target.form.submit();
150
+ // __submit__(target.form);
151
+ }catch(e){
152
+ print("oopse",e);
153
+ print(e.stack);
154
+ e.backtrace && print(e.backtrace().join("\n"));
155
+ throw e;
156
+ };
157
+ delete target.form.clk;
196
158
  }
197
- action = action + new_params.join("&");
198
- }
199
- $env.reload(proxy, action, options );
200
- }
201
159
 
202
- }else{
203
- //$debug("non target: " + event.target + " \n this->"+target);
204
- }
205
- if (!handled && bubbles && target.parentNode){
206
- //$debug('bubbling to parentNode '+target.parentNode);
207
- __dispatchEvent__(target.parentNode, event, bubbles);
160
+ // print(event.type,target.type,target.constructor+"");
161
+ // print("A",handled,event.type,target,target.type);
162
+ if (!handled && event.type == "click" && target instanceof HTMLInputElement && ( target.type == "checkbox" || target.type == "radio" ) ) {
163
+ target.checked = target.checked ? "" : "checked";
164
+ }
165
+
166
+ if (!handled && (event.type == "submit") && target instanceof HTMLFormElement) {
167
+ $env.unload($w);
168
+ var proxy = $w.window;
169
+ var data;
170
+ var boundary;
171
+ if (target.enctype === "multipart/form-data") {
172
+ boundary = (new Date).getTime();
173
+ }
174
+ data = $master["static"].__formSerialize__(target,undefined,boundary);
175
+ var options = {method: target.method || "get", referer: this.location.href};
176
+ if (options.method === "post" || options.method === "put") {
177
+ options.data = data;
178
+ var undef;
179
+ data = undef;
180
+ }
181
+ if (boundary) {
182
+ options["Content-Type"] = "multipart/form-data; boundary="+boundary;
183
+ } else {
184
+ options["Content-Type"] = 'application/x-www-form-urlencoded';
185
+ }
186
+ var action = target.action || window.location.href;
187
+ if (data) {
188
+ if (action.indexOf("?") < 0) {
189
+ action = action + "?";
190
+ }
191
+ if (action[action.length-1] != "?") {
192
+ action = action + "&";
193
+ }
194
+ var params = unescape(data).split("&");
195
+ var new_params = [];
196
+ for(var pi=0; pi < params.length; pi++) {
197
+ var pair = params[pi].split("=");
198
+ new_params.push(escape(pair[0])+"="+escape(pair[1]));
199
+ }
200
+ action = action + new_params.join("&");
201
+ }
202
+ $env.reload(proxy, action, options );
203
+ }
204
+
205
+ }else{
206
+ //$debug("non target: " + event.target + " \n this->"+target);
207
+ }
208
+ if (!handled && bubbles && target.parentNode){
209
+ //$debug('bubbling to parentNode '+target.parentNode);
210
+ __dispatchEvent__(target.parentNode, event, bubbles);
211
+ }
212
+ }catch(e){
213
+ $warn("Exception while dispatching events: "+e);
214
+ // print("oops e",e.stack);
215
+ // print("oops e",e.backtrace && e.backtrace().join("\n"));
216
+ // try { throw new Error("here"); } catch(x) { print("oops e",x.stack); }
217
+ throw e;
208
218
  }
209
- }catch(e){
210
- $warn("Exception while dispatching events: "+e);
211
- // print("oops e",e.stack);
212
- // print("oops e",e.backtrace && e.backtrace().join("\n"));
213
- // try { throw new Error("here"); } catch(x) { print("oops e",x.stack); }
214
- throw e;
215
- }
216
219
  };
217
220
 
218
221
  $env.__removeEventListener__ = __removeEventListener__;
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 2
9
- version: 0.3.2
8
+ - 3
9
+ version: 0.3.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - John Resig
@@ -34,34 +34,20 @@ dependencies:
34
34
  version: 2.0.0.pre3
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: gemcutter
39
- prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- segments:
45
- - 0
46
- - 5
47
- - 0
48
- version: 0.5.0
49
- type: :development
50
- version_requirements: *id002
51
37
  - !ruby/object:Gem::Dependency
52
38
  name: hoe
53
39
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ requirement: &id002 !ruby/object:Gem::Requirement
55
41
  requirements:
56
42
  - - ">="
57
43
  - !ruby/object:Gem::Version
58
44
  segments:
59
45
  - 2
60
- - 5
46
+ - 6
61
47
  - 0
62
- version: 2.5.0
48
+ version: 2.6.0
63
49
  type: :development
64
- version_requirements: *id003
50
+ version_requirements: *id002
65
51
  description: |-
66
52
  A browser environment for javascript interpreters.
67
53