freifunkmanager/webroot/js/gui.js

65 lines
1.3 KiB
JavaScript
Raw Normal View History

import * as domlib from './domlib';
import {MenuView} from './element/menu';
import Navigo from '../node_modules/navigo/lib/navigo';
import View from './view';
import {singelton as notify} from './element/notify';
2017-05-16 19:18:35 +02:00
const router = new Navigo(null, true, '#'),
elMain = domlib.newEl('main'),
2018-07-17 23:54:11 +02:00
elMenu = new MenuView(),
GUI_RENDER_DEBOUNCER_TIME = 100;
2017-05-16 19:18:35 +02:00
export {router};
2017-05-16 19:18:35 +02:00
let init = false,
currentView = new View();
2017-05-16 19:18:35 +02:00
2018-07-17 23:54:11 +02:00
function renderView () {
if (!document.body) {
return;
2017-05-16 19:18:35 +02:00
}
if (!init) {
elMenu.bind(document.body);
notify.bind(document.body);
2017-05-16 19:18:35 +02:00
document.body.appendChild(elMain);
2017-05-16 19:18:35 +02:00
init = true;
}
currentView.render();
2017-05-16 19:18:35 +02:00
notify.render();
elMenu.render();
2017-05-16 19:18:35 +02:00
router.resolve();
}
2017-05-16 19:18:35 +02:00
2018-07-17 23:54:11 +02:00
let renderDebounceTimer = null,
numRenderCallsSkipped = 0;
export function render () {
if (renderDebounceTimer == null) {
2018-07-17 23:54:11 +02:00
renderView();
renderDebounceTimer = window.setTimeout(() => {
renderDebounceTimer = null;
if (numRenderCallsSkipped > 0) {
console.log("skipped " + numRenderCallsSkipped + " render calls; calling render() now");
numRenderCallsSkipped = 0;
render();
}
}, GUI_RENDER_DEBOUNCER_TIME);
} else {
console.log("skip rendering");
numRenderCallsSkipped++;
2018-07-17 23:54:11 +02:00
}
}
export function setView (toView) {
currentView.unbind();
currentView = toView;
currentView.bind(elMain);
currentView.render();
}