/**
* @ignore
* process form config
* @author yiminghe@gmail.com
*/
KISSY.add('io/form', function (S, IO, Dom, FormSerializer) {
var win = S.Env.host,
slice = Array.prototype.slice,
FormData = win['FormData'];
IO.on('start', function (e) {
var io = e.io,
form,
d,
dataType,
formParam,
data,
tmpForm,
c = io.config;
// serialize form if needed
if (tmpForm = c.form) {
form = Dom.get(tmpForm);
data = c.data;
var isUpload = false;
var files = {};
var inputs = Dom.query('input', form);
for (var i = 0, l = inputs.length; i < l; i++) {
var input = inputs[i];
if (input.type.toLowerCase() == 'file') {
isUpload = true;
if (!FormData) {
break;
}
var selected = slice.call(input.files, 0);
files[Dom.attr(input, 'name')] = selected.length > 1 ? selected : (selected[0]||null);
}
}
if (isUpload && FormData) {
c.files = c.files || {};
S.mix(c.files, files);
// browser set contentType automatically for FileData
delete c.contentType;
}
// 上传有其他方法
if (!isUpload || FormData) {
// when get need encode
// when FormData exists, only collect non-file type input
formParam = FormSerializer.getFormData(form);
if (c.hasContent) {
formParam = S.param(formParam, undefined, undefined, c.serializeArray);
if (data) {
c.data += '&' + formParam;
} else {
c.data = formParam;
}
} else {
// get 直接加到 url
c.uri.query.add(formParam);
}
} else {
// for old-ie
dataType = c.dataType;
d = dataType[0];
if (d == '*') {
d = 'text';
}
dataType.length = 2;
dataType[0] = 'iframe';
dataType[1] = d;
}
}
});
return IO;
}, {
requires: ['./base', 'dom', './form-serializer']
});