root / trunk / web / dojo / dojox / rails.js @ 10
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 |
} |