root / trunk / web / dojo / dojox / rails.js @ 9
History | View | Annotate | Download (3.43 KB)
1 | 9 | andrej.cim | /*
|
---|---|---|---|
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 | } |