From 47b109b353b3c28f00cfc3d98cee1f77260a1091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Jan=20Niemier?= Date: Sat, 30 Jan 2016 17:58:30 +0100 Subject: [PATCH] Fetch changes from Ximik fork --- lib/assets/javascripts/vanilla-ujs/confirm.js | 2 +- lib/assets/javascripts/vanilla-ujs/form.js | 20 ++++++++++++++++ .../javascripts/vanilla-ujs/liteajax.js | 24 +++++++++++++------ 3 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 lib/assets/javascripts/vanilla-ujs/form.js diff --git a/lib/assets/javascripts/vanilla-ujs/confirm.js b/lib/assets/javascripts/vanilla-ujs/confirm.js index a42a845..bdde2ff 100644 --- a/lib/assets/javascripts/vanilla-ujs/confirm.js +++ b/lib/assets/javascripts/vanilla-ujs/confirm.js @@ -3,7 +3,7 @@ document.addEventListener('click', function (event) { element = event.target; - if (matches.call(element, 'a[data-confirm], button[data-confirm]')) { + if (matches.call(element, 'a[data-confirm], button[data-confirm], input[data-confirm]')) { message = element.getAttribute('data-confirm'); if (!confirm(message)) { event.stopPropagation(); diff --git a/lib/assets/javascripts/vanilla-ujs/form.js b/lib/assets/javascripts/vanilla-ujs/form.js new file mode 100644 index 0000000..8639376 --- /dev/null +++ b/lib/assets/javascripts/vanilla-ujs/form.js @@ -0,0 +1,20 @@ +document.addEventListener('submit', function(event) { + + var form = event.target; + + if (matches.call(form, 'form[data-remote]')) { + url = form.action; + method = form.method || form.getAttribute('data-method').toUpperCase() || 'POST'; + data = new FormData(form); + + if (CSRF.param() && CSRF.token()) { + data[CSRF.param()] = CSRF.token(); + } + + if (LiteAjax.ajax({ url: url, method: method, data: data })){ + event.preventDefault(); + } else { + return true; + } + } +}); diff --git a/lib/assets/javascripts/vanilla-ujs/liteajax.js b/lib/assets/javascripts/vanilla-ujs/liteajax.js index c213886..54f0524 100644 --- a/lib/assets/javascripts/vanilla-ujs/liteajax.js +++ b/lib/assets/javascripts/vanilla-ujs/liteajax.js @@ -3,8 +3,7 @@ var LiteAjax = (function () { LiteAjax.options = { method: 'GET', - url: window.location.href, - async: true, + url: window.location.href }; LiteAjax.ajax = function (url, options) { @@ -15,12 +14,16 @@ var LiteAjax = (function () { options = options || {}; url = url || options.url || location.href || ''; + var data = options.data; - var xhr; - - xhr = new XMLHttpRequest(); + var xhr = new XMLHttpRequest(); xhr.addEventListener('load', function () { + responseType = xhr.getResponseHeader('content-type'); + if(responseType === 'text/javascript; charset=utf-8') { + eval(xhr.response); + } + var event = new CustomEvent('ajaxComplete', {detail: xhr}); document.dispatchEvent(event); }); @@ -41,10 +44,17 @@ var LiteAjax = (function () { }); } - xhr.open(options.method || 'GET', url, options.async); + xhr.open(options.method || 'GET', url); + xhr.setRequestHeader('X-Requested-With', 'XmlHttpRequest'); + + if(options.json) { + xhr.setRequestHeader('Content-type', 'application/json'); + data = JSON.stringify(data); + } + var beforeSend = new CustomEvent('ajax:before', {detail: xhr}); document.dispatchEvent(beforeSend); - xhr.send(options.data); + xhr.send(data); return xhr; };