(function () { 'use strict'; if (!Element.prototype.matches) { Element.prototype.matches = Element.prototype.msMatchesSelector; } function $qs(qs) { return document.querySelector(qs); } function $on(selector, eventname, cb) { if (!$on._events[eventname]) { $on._events[eventname] = $on._dispatcher(eventname); document.addEventListener(eventname, $on._events[eventname]); } if (!$on._handlers[eventname]) { $on._handlers[eventname] = {}; } if (!$on._handlers[eventname][selector]) { $on._handlers[eventname][selector] = []; } $on._handlers[eventname][selector].push(cb); } $on._events = {}; $on._handlers = {}; $on._dispatcher = function (eventname) { return function (ev) { //console.log('event: ' + ev.type); if (!$on._handlers[eventname]) { console.warn('no handlers for event'); return; } var matches = Object.keys($on._handlers[eventname]).some(function (selector) { if (ev.target.matches(selector)) { $on._handlers[eventname][selector].forEach(function (cb) { cb(ev); }); return true; } }); if (!matches) { console.warn("no handlers for selector"); } }; }; $on('body', 'click', function () { console.log('woo-hoo, that tickles my body!'); }); var auth = localStorage.getItem('auth'); $qs('input.js-jwt').value = auth || ''; $on('button.js-jwt', 'click', function (/*ev*/) { auth = $qs('input.js-jwt').value; return window.fetch( '/api/verify-auth' , { method: 'GET' , headers: new window.Headers({ 'Authorization': 'Bearer ' + auth }) } ).then(function (resp) { return resp.json().then(function (data) { if (data.error) { console.error(data.error); window.alert('Bad HTTP Response: ' + data.error.message); throw new Error('Bad HTTP Response: ' + data.error.message); } console.log(data); localStorage.setItem('auth', auth); }); }); }); $on('input.js-zone', 'keyup', function (ev) { $qs('code.js-zone').innerHTML = ev.target.value || ':zone'; // $qs('a.js-zone').setAttribute('data-href', ...) $qs('a.js-zone').href = $qs('a.js-zone').dataset.href.replace(/:zone/, ev.target.value || ':zone'); }); $on('input.js-name', 'keyup', function (ev) { $qs('code.js-name').innerHTML = ev.target.value || ':name'; $qs('a.js-name').href = $qs('a.js-name').dataset.href.replace(/:name/, ev.target.value || ':name'); }); }());