81 lines
2.5 KiB
JavaScript
81 lines
2.5 KiB
JavaScript
Misuzu.FormUtils = {};
|
|
Misuzu.FormUtils.extractFormData = function(form, resetSource) {
|
|
var formData = new FormData;
|
|
|
|
for(var i = 0; i < form.length; ++i) {
|
|
if(form[i].type.toLowerCase() === 'checkbox' && !form[i].checked)
|
|
continue;
|
|
formData.append(form[i].name, form[i].value || '');
|
|
}
|
|
|
|
if(resetSource)
|
|
Misuzu.FormUtils.resetFormData(form);
|
|
|
|
return formData;
|
|
};
|
|
Misuzu.FormUtils.resetFormData = function(form, defaults) {
|
|
defaults = defaults || [];
|
|
|
|
for(var i = 0; i < form.length; ++i) {
|
|
var input = form[i];
|
|
|
|
switch(input.type.toLowerCase()) {
|
|
case 'checkbox':
|
|
input.checked = false;
|
|
break;
|
|
|
|
case 'hidden':
|
|
var hiddenDefault = defaults.find(function(fhd) { return fhd.Name.toLowerCase() === input.name.toLowerCase(); });
|
|
if(hiddenDefault)
|
|
input.value = hiddenDefault.Value;
|
|
break;
|
|
|
|
default:
|
|
input.value = '';
|
|
}
|
|
}
|
|
};
|
|
Misuzu.FormUtils.initDataRequestMethod = function() {
|
|
var links = document.links;
|
|
|
|
for(var i = 0; i < links.length; ++i) {
|
|
if(!links[i].href || !links[i].dataset || !links[i].dataset.mszMethod)
|
|
continue;
|
|
|
|
links[i].addEventListener('click', function(ev) {
|
|
Misuzu.FormUtils.handleDataRequestMethod(this, this.dataset.mszMethod, this.href);
|
|
ev.preventDefault();
|
|
});
|
|
}
|
|
};
|
|
Misuzu.FormUtils.handleDataRequestMethod = function(elem, method, url) {
|
|
var split = url.split('?', 2),
|
|
target = split[0],
|
|
query = split[1] || null;
|
|
|
|
if(elem.getAttribute('disabled'))
|
|
return;
|
|
elem.setAttribute('disabled', 'disabled');
|
|
|
|
var xhr = new XMLHttpRequest;
|
|
xhr.onreadystatechange = function(ev) {
|
|
if(xhr.readyState !== 4)
|
|
return;
|
|
elem.removeAttribute('disabled');
|
|
|
|
if(xhr.status === 301 || xhr.status === 302 || xhr.status === 307 || xhr.status === 308) {
|
|
location.assign(xhr.getResponseHeader('X-Misuzu-Location'));
|
|
return;
|
|
}
|
|
|
|
if(xhr.status >= 400 && xhr.status <= 599) {
|
|
alert(xhr.responseText);
|
|
return;
|
|
}
|
|
};
|
|
xhr.open(method, target);
|
|
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
|
xhr.setRequestHeader('X-Misuzu-CSRF', Misuzu.CSRF.getToken());
|
|
xhr.setRequestHeader('X-Misuzu-XHR', '1');
|
|
xhr.send(query);
|
|
};
|