root / trunk / web / dojo / dojox / rails.js @ 9
History | View | Annotate | Download (3.43 KB)
1 |
/*
|
---|---|
2 |
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
3 |
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
4 |
see: http://dojotoolkit.org/license for details
|
5 |
*/
|
6 |
|
7 |
|
8 |
if(!dojo._hasResource["dojox.rails"]){ |
9 |
dojo._hasResource["dojox.rails"]=true; |
10 |
dojo.provide("dojox.rails");
|
11 |
dojo.require("dojo.NodeList-traverse");
|
12 |
dojox.rails.live=function(_1,_2,fn){ |
13 |
if(dojo.isIE&&_2.match(/^(on)?submit$/i)){ |
14 |
dojox.rails.live(_1,"click",function(_3){ |
15 |
var _4=_3.target,_5=_4.tagName.toLowerCase();
|
16 |
if((_5=="input"||_5=="button")&&dojo.attr(_4,"type").toLowerCase()=="submit"){ |
17 |
var _6=dojo.query(_4).closest("form"); |
18 |
if(_6.length){
|
19 |
var h=dojo.connect(_6[0],"submit",function(_7){ |
20 |
dojo.disconnect(h); |
21 |
fn.call(_7.target,_7); |
22 |
}); |
23 |
} |
24 |
} |
25 |
}); |
26 |
}else{
|
27 |
dojo.connect(dojo.body(),_2,function(_8){
|
28 |
var nl=dojo.query(_8.target).closest(_1);
|
29 |
if(nl.length){
|
30 |
fn.call(nl[0],_8);
|
31 |
} |
32 |
}); |
33 |
} |
34 |
}; |
35 |
dojo.ready((function(d,dr,dg){
|
36 |
return function(){ |
37 |
var q=d.query,_9=dr.live,_a=q("meta[name=csrf-token]").attr("content"),_b=q("meta[name=csrf-param]").attr("content"); |
38 |
var _c=function(_d,_e){ |
39 |
var _f="<form style=\"display:none\" method=\"post\" action=\""+_d+"\">"+"<input type=\"hidden\" name=\"_method\" value=\""+_e+"\" />"+"<input type=\"hidden\" name=\""+_b+"\" value=\""+_a+"\" />"+"</form>"; |
40 |
return dojo.place(_f,dojo.body());
|
41 |
}; |
42 |
var _10=function(_11){ |
43 |
d.forEach(_11,function(_12){
|
44 |
if(!d.attr(_12,"disabled")){ |
45 |
var _13=_12.tagName.toLowerCase()=="input"?"value":"innerHTML"; |
46 |
var _14=d.attr(_12,"data-disable-with"); |
47 |
var _15=d.attr(_12,_13);
|
48 |
d.attr(_12,"disabled",true); |
49 |
d.attr(_12,"data-original-value",_15);
|
50 |
d.attr(_12,_13,_14); |
51 |
} |
52 |
}); |
53 |
}; |
54 |
var _16={"text":"text","json":"application/json","json-comment-optional":"text","json-comment-filtered":"text","javascript":"application/javascript","xml":"text/xml"}; |
55 |
var _17=function(evt){ |
56 |
var el=evt.target,tag=el.tagName.toLowerCase();
|
57 |
var _18=tag.toLowerCase()=="form"?d.formToObject(el):{},_19=d.attr(el,"data-type")||"javascript",_1a=(d.attr(el,"method")||d.attr(el,"data-method")||"get").toLowerCase(),url=d.attr(el,"action")||d.attr(el,"href"); |
58 |
if(tag!="form"&&_1a!="get"){ |
59 |
el=_c(url,_1a); |
60 |
_1a="POST";
|
61 |
} |
62 |
evt.preventDefault(); |
63 |
d.publish("ajax:before",[el]);
|
64 |
var _1b=d.xhr(_1a,{url:url,headers:{"Accept":_16[_19]},content:_18,handleAs:_19,load:function(_1c,_1d){ |
65 |
d.publish("ajax:success",[el,_1c,_1d]);
|
66 |
},error:function(_1e,_1f){ |
67 |
d.publish("ajax:failure",[el,_1e,_1f]);
|
68 |
},handle:function(_20,_21){ |
69 |
d.publish("ajax:complete",[el,_20,_21]);
|
70 |
}}); |
71 |
d.publish("ajax:after",[el]);
|
72 |
}; |
73 |
var _22=function(el){ |
74 |
q("*[data-disable-with][disabled]",el).forEach(function(_23){ |
75 |
var _24=_23.tagName.toLowerCase()=="input"?"value":"innerHTML"; |
76 |
var _25=d.attr(_23,"data-original-value"); |
77 |
d.attr(_23,"disabled",false); |
78 |
d.attr(_23,"data-original-value",null); |
79 |
d.attr(_23,_24,_25); |
80 |
}); |
81 |
}; |
82 |
var _26=function(evt){ |
83 |
var el=evt.target,_27=_c(el.href,dojo.attr(el,"data-method")); |
84 |
evt.preventDefault(); |
85 |
_27.submit(); |
86 |
}; |
87 |
var _28=function(evt){ |
88 |
var el=evt.target,_29=q("*[data-disable-with]",el); |
89 |
if(_29.length){
|
90 |
_10(_29); |
91 |
} |
92 |
if(d.attr(el,"data-remote")){ |
93 |
evt.preventDefault(); |
94 |
_17(evt); |
95 |
} |
96 |
}; |
97 |
var _2a=function(evt){ |
98 |
var _2b=dg.confirm(d.attr(evt.target,"data-confirm")); |
99 |
if(!_2b){
|
100 |
evt.preventDefault(); |
101 |
}else{
|
102 |
if(d.attr(evt.target,"data-remote")){ |
103 |
_17(evt); |
104 |
} |
105 |
} |
106 |
}; |
107 |
_9("*[data-confirm]","click",_2a); |
108 |
d.subscribe("ajax:complete",_22);
|
109 |
_9("a[data-remote]:not([data-confirm])","click",_17); |
110 |
_9("a[data-method]:not([data-remote])","click",_26); |
111 |
_9("form","submit",_28); |
112 |
}; |
113 |
})(dojo,dojox.rails,dojo.global)); |
114 |
} |