|
173 | 173 | var href = rails.href(link),
|
174 | 174 | method = link.data('method'),
|
175 | 175 | target = link.attr('target'),
|
| 176 | + params = link.data('params'), |
176 | 177 | csrfToken = $('meta[name=csrf-token]').attr('content'),
|
177 | 178 | csrfParam = $('meta[name=csrf-param]').attr('content'),
|
178 | 179 | form = $('<form method="post" action="' + href + '"></form>'),
|
179 |
| - metadataInput = '<input name="_method" value="' + method + '" type="hidden" />'; |
| 180 | + dataInputs = '<input name="_method" value="' + method + '" type="hidden" />'; |
180 | 181 |
|
181 | 182 | if (csrfParam !== undefined && csrfToken !== undefined) {
|
182 |
| - metadataInput += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />'; |
| 183 | + dataInputs += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />'; |
| 184 | + } |
| 185 | + |
| 186 | + if (params) { |
| 187 | + |
| 188 | + function buildParamsInputs(key, value) { |
| 189 | + switch (typeof value) { |
| 190 | + case 'array': |
| 191 | + var result = []; |
| 192 | + for (var i = 0, l = value.length; i < l; i++) { |
| 193 | + result.push( buildParamsInputs(key === null ? i : key + '[' + i + ']', value[i]) ); |
| 194 | + } |
| 195 | + return result.join(''); |
| 196 | + case 'object': |
| 197 | + var result = []; |
| 198 | + for (var i in value) { |
| 199 | + result.push( buildParamsInputs(key === null ? i : key + '[' + i + ']', value[i]) ); |
| 200 | + } |
| 201 | + return result.join(''); |
| 202 | + default: |
| 203 | + return '<input name="' + key + '" value="' + String(value).replace(/"/g, '"') + '" type="hidden" />'; |
| 204 | + } |
| 205 | + } |
| 206 | + |
| 207 | + dataInputs += buildParamsInputs(null, params); |
183 | 208 | }
|
184 | 209 |
|
185 | 210 | if (target) { form.attr('target', target); }
|
186 | 211 |
|
187 |
| - form.hide().append(metadataInput).appendTo('body'); |
| 212 | + form.hide().append(dataInputs).appendTo('body'); |
188 | 213 | form.submit();
|
189 | 214 | },
|
190 | 215 |
|
|
0 commit comments