X Tutup
var form = document.forms[0] var button = document.querySelector('button[type=submit]') var deleteButton = document.querySelector('button[type=button]') form.onsubmit = function () { if (button.getAttribute('data-state')) return false button.setAttribute('data-state', 'hold') ajaxWave({ url: 'save-contact' + location.search, postdata: formData(form), callback: function (wave, request) { if (request.status == 200 && wave.json) { button.setAttribute('data-state', 'thanks') location = wave.json.go } else { button.setAttribute('data-state', 'whoops') alert(wave.text || wave.whoops) button.removeAttribute('data-state') } }, }) } deleteButton.onclick = function () { var button = this if (button.getAttribute('data-state')) return false button.setAttribute('data-state', 'confirm') if (!confirm('Really, delete this?')) { button.removeAttribute('data-state') return false } button.setAttribute('data-state', 'hold') ajaxWave({ url: 'delete-contact' + location.search, postdata: '', callback: function (wave, request) { if (request.status == 200 && wave.json) { button.setAttribute('data-state', 'thanks') location = './' } else { button.setAttribute('data-state', 'whoops') alert(wave.text || wave.whoops) button.removeAttribute('data-state') } }, }) } function formData(form) { var data = '' for (var i = 0; i < form.elements.length; i++) { var e = form.elements[i] if (e.tagName != 'BUTTON' && !e.disabled && e.name && (e.tagName != 'INPUT' || e.type != 'radio' && e.type != 'checkbox' || e.checked)) if (e.tagName == 'select') { for (var j = 0; j < e.options.length; j++) if (e.options[j].selected) data += '&' + encodeURIComponent(e.name) + '=' + encodeURIComponent(e.options[j].value) } else data += '&' + encodeURIComponent(e.name) + '=' + encodeURIComponent(e.value) } return data.substring(1) } function ajaxWave(o) { if (!o.timeout) o.timeout = 1000 * 20 var request = new XMLHttpRequest() var wave = {} request.onreadystatechange = function () { if (request.readyState != 4) return clearTimeout(timer) if (!wave.whoops) // check timeout reached if (request.status && request.status < 12000) { wave.ctype = request.getResponseHeader('Content-Type') if (wave.ctype) wave.ctype = wave.ctype.replace(/\s*;[\s\S]*/, '') wave.whoops = 'HTTP ' + request.status + ' error' if (wave.ctype == 'application/json') { try { wave.json = JSON.parse(request.responseText) } catch (e) { wave.whoops = 'JSON parse error' } } else if (wave.ctype == 'text/plain') wave.text = request.responseText else if (wave.ctype == 'text/html') wave.html = request.responseText } else wave.whoops = 'Internet Connection Failure' if (o.callback) o.callback(wave, request) } request.open(o.postdata != null ? 'POST' : 'GET', o.url, true) if (typeof o.postdata == 'string') request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8') if (o.beforeSend) o.beforeSend(request) request.send(o.postdata) var timer = setTimeout(function () { wave.whoops = 'Timeout of ' + (o.timeout / 1000) + ' seconds.' request.abort() }, o.timeout) return request }
X Tutup