client/src/screen.js

77 lines
1.5 KiB
JavaScript

function Screen(dom) {
var root = document.getElementById('screen');
return {
appendText: appendText,
clear: clear,
frame: frame,
markAsRead: markAsRead,
menu: menu,
select: select,
show: show,
text: text
};
function appendText(message) {
getTextZone().children[0].textContent += message;
}
function clear(elem) {
if(elem != undefined) {
root.removeChild(elem);
} else {
dom.clear(root);
}
}
function frame(n) {
root.className = "frame" + n;
}
function getTextZone() {
var textZone = root.getElementsByClassName('text')[0];
if(textZone == undefined) {
textZone = dom.make('div', {class: ['text', 'framed']}, [
dom.make('p')
]);
root.appendChild(textZone);
}
return textZone
}
function markAsRead(yes) {
if(yes == undefined) {
yes = false;
}
getTextZone().classList[yes ? 'add' : 'remove']('read');
}
function menu(entries) {
var domEntries = [];
for(var i = 0; i < entries.length; i++) {
domEntries.push(dom.make('li', {
class: i == 0 ? 'selected' : [],
textContent: entries[i].label
}, []));
}
var ul = dom.make('ul', {class: ['menu', 'framed']}, domEntries);
root.appendChild(ul);
return ul;
}
function select(cursor) {
var ul = root.getElementsByClassName('menu')[0];
ul.getElementsByClassName('selected')[0].className = '';
ul.children[cursor].className = 'selected';
}
function show(elem) {
root.appendChild(elem);
}
function text(message) {
getTextZone().children[0].textContent = message;
markAsRead(message.length > 0);
}
}