// // hanami-ujs (0.1.0) // vanilla-ujs (1.3.0) // // Mon Feb 12 10:45:37 UTC 2018 //

// // source: confirm.js // document.addEventListener('click', function (event) {

var message, element;

element = event.target;

if (matches.call(element, 'a[data-confirm], button[data-confirm], input[data-confirm]')) {
  message = element.getAttribute('data-confirm');
  if (!confirm(message)) {
    event.stopPropagation();
    event.stopImmediatePropagation();
    event.preventDefault();
    return false;
  }

  return;
}

}, false);

// // source: csrf.js // var CSRF = {

token: function () {
  var token = document.querySelector('meta[name="csrf-token"]');
  return token && token.getAttribute('content');
},
param: function () {
  var param = document.querySelector('meta[name="csrf-param"]');
  return param && param.getAttribute('content');
}

};

var sameOrigin = function (url) {

var a = document.createElement('a'), origin;
a.href = url;
origin = a.href.split('/', 3).join('/');

return window.location.href.indexOf(origin) === 0;

};

window.CSRF = CSRF;

document.addEventListener('ajax:before', function (e) {

var token = CSRF.token(), xhr = e.detail;
if (token)
  xhr.setRequestHeader('X-CSRF-Token', token);

});

document.addEventListener('submit', function (e) {

var token = CSRF.token(),
    param = CSRF.param(),
    form  = e.target;

if (matches.call(form, 'form')) {
  if (matches.call(form, 'form[data-remote]'))
    return true;
  if (!form.method || form.method.toUpperCase() == 'GET')
    return true;
  if (!sameOrigin(form.action))
    return true;

  if (param && token && !form.querySelector('input[name='+param+']')) {
    var input = document.createElement('input');
    input.setAttribute('type', 'hidden');
    input.setAttribute('name', param);
    input.setAttribute('value', token);

    form.appendChild(input);
  }

  return true;
}

});

// // source: disable.js // document.addEventListener('click', function (event) {

var message, element;

// do not disable on right click. Work on left and middle click
if (event.which == 3) {
  return;
}

element = event.target;

// do not disable if the element is a submit button and its form has invalid input elements.
// since failed validations prevent the form from being submitted, we would lock the form permanently
// by disabling the submit button even though the form was never submitted

if(element.getAttribute("type") === "submit" && element.form.querySelector(":invalid") !== null) {
  return;
}

if (matches.call(element, 'a[data-disable-with], button[data-disable-with], input[data-disable-with]')) {
  message = element.getAttribute('data-disable-with');
  if(!!element.value){
    element.value = message;
  }else{
    element.innerHTML = message;
  }
  // timeout is needed because Safari stops the submit if the button is immediately disabled
  setTimeout(function(){
    element.setAttribute('disabled', 'disabled');
  }, 0);
}

}, false);

// // source: form.js // document.addEventListener('submit', function(event) {

var form = event.target;

if (matches.call(form, 'form[data-remote]')) {
  var url = form.action;
  var method = (form.method || form.getAttribute('data-method') || 'POST').toUpperCase();
  var data = new FormData(form);

  if (CSRF.param() && CSRF.token()) {
    data[CSRF.param()] = CSRF.token();
  }

  if (LiteAjax.ajax({ url: url, method: method, data: data, target: form })){
    event.preventDefault();
  } else {
    return true;
  }
}

});

// // source: liteajax.js // var LiteAjax = (function () {

var LiteAjax = {};

LiteAjax.options = {
  method: 'GET',
  url: window.location.href
};

LiteAjax.ajax = function (url, options) {
  if (typeof url == 'object') {
    options = url;
    url = undefined;
  }

  options = options || {};

  if(!options.accepts) {
    options.accepts = 'text/javascript, application/javascript, ' +
                      'application/ecmascript, application/x-ecmascript';
  }

  url = url || options.url || location.href || '';
  var data = options.data;
  var target = options.target || document;
  var xhr = new XMLHttpRequest();

  xhr.addEventListener('load', function () {
    var responseType = xhr.getResponseHeader('content-type');
    if(responseType === 'text/javascript; charset=utf-8') {
      eval(xhr.response);
    }

    var event = new CustomEvent('ajax:complete', {detail: xhr, bubbles: true});
    target.dispatchEvent(event);
  });

  if (typeof options.success == 'function')
    xhr.addEventListener('load', function (event) {
      if (xhr.status >= 200 && xhr.status < 300)
        options.success(xhr);
    });

  if (typeof options.error == 'function') {
    xhr.addEventListener('load', function (event) {
      if (xhr.status < 200 || xhr.status >= 300)
        options.error(xhr);
    });
    xhr.addEventListener('error', function (event) {
      options.error(xhr);
    });
  }

  xhr.open(options.method || 'GET', url);
  xhr.setRequestHeader('X-Requested-With', 'XmlHttpRequest');
  xhr.setRequestHeader('Accept', '*/*;q=0.5, ' + options.accepts);

  if(options.json) {
    xhr.setRequestHeader('Content-type', 'application/json');
    data = JSON.stringify(data);
  }

  var beforeSend = new CustomEvent('ajax:before', {detail: xhr, bubbles: true});
  target.dispatchEvent(beforeSend);
  xhr.send(data);

  return xhr;
};

return LiteAjax;

})();

// // source: method.js // document.addEventListener('click', function(event) {

var element, url, method, data, handler;

// Only left click allowed. Firefox triggers click event on right click/contextmenu.
if (event.button !== 0) {
  return;
}

element = event.target;

if (matches.call(element, 'a[data-method]')) {
  url = element.getAttribute('href');
  method = element.getAttribute('data-method').toUpperCase();
  data = {};

  if (CSRF.param() && CSRF.token()) {
    data[CSRF.param()] = CSRF.token();
  }

  if (matches.call(element, 'a[data-remote]')) {
    handler = xhr;
  } else {
    handler = submit;
  }

  if (handler({ url: url, method: method, data: data, target: element })) {
    event.preventDefault();
  } else {
    return true;
  }
}

function submit(options) {
  var form, input, param;

  if (options.method == 'GET') {
    return false;
  }

  form = document.createElement('form');
  form.method = 'POST';
  form.action = options.url;
  form.style.display = 'none';

  for (param in options.data) {
    if (Object.prototype.hasOwnProperty.call(options.data, param)) {
      input = document.createElement('input');
      input.setAttribute('type', 'hidden');
      input.setAttribute('name', param);
      input.setAttribute('value', options.data[param]);
      form.appendChild(input);
    }
  }

  if (options.method != 'POST') {
    input = document.createElement('input');
    input.setAttribute('type', 'hidden');
    input.setAttribute('name', '_method');
    input.setAttribute('value', options.method);
    form.appendChild(input);
  }

  document.body.appendChild(form);
  form.submit();
  return true;
}

function xhr(options) {
  LiteAjax.ajax(options);
  return true;
}

}, false);

// // source: polyfills.js // var matches = (function(doc) {

return doc.matchesSelector ||
  doc.webkitMatchesSelector ||
  doc.mozMatchesSelector ||
  doc.oMatchesSelector ||
  doc.msMatchesSelector;

})(document.documentElement);

var CustomEvent = function (event, params) {

params = params || {bubbles: false, cancelable: false, detail: undefined};
var evt = document.createEvent('CustomEvent');
evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
return evt;

};

CustomEvent.prototype = window.CustomEvent.prototype;

window.CustomEvent = CustomEvent;