88 lines
2.5 KiB
JavaScript
88 lines
2.5 KiB
JavaScript
(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');
|
|
});
|
|
|
|
}());
|