1function doku_ajax(call, params) { 2 var ajax = new sack(DOKU_BASE + 'lib/plugins/ajaxloader/ajax.php'); 3 if (!params) { 4 params = {}; 5 } else if (params.tagName && params.tagName.toLowerCase() === 'form') { 6 params = serialize_form(params); 7 } 8 if (call) { 9 params.call = call; 10 } 11 var oldrunAJAX = ajax.runAJAX; 12 13 /* Always apply given params before making a call. sack.runAJAX resets 14 the param string. */ 15 ajax.runAJAX = function(more_params) { 16 if (typeof more_params === 'object') { 17 for (val in more_params) { 18 if (more_params.hasOwnProperty(val)) { 19 params[val] = more_params[val]; 20 } 21 } 22 more_params = ''; 23 } else if (this.URLString.length > 0) { 24 var strcache = this.URLString; 25 this.URLString = ''; 26 } 27 for (val in params) { 28 if (params.hasOwnProperty(val)) { 29 ajax.setVar(val, params[val]); 30 } 31 } 32 if (typeof strcache !== undefined) { 33 this.URLString += '&' + strcache; 34 } 35 return oldrunAJAX.call(this, more_params); 36 }; 37 return ajax; 38} 39 40function serialize_form(form) { 41 var data = {}; 42 var inps = form.elements; 43 // FIXME: Perform more extensive form processing: 44 // http://www.w3.org/TR/html401/interact/forms.html#h-17.13 45 for (var i = 0 ; i < inps.length ; ++i) { 46 var name = inps[i].name || inps[i].id; 47 if (!name) { 48 continue; 49 } 50 data[name] = inps[i].value; 51 } 52 return data; 53} 54