117 lines
2.4 KiB
JavaScript
117 lines
2.4 KiB
JavaScript
function Screen(dom) {
|
|
var root = document.getElementById('screen');
|
|
var menus = [];
|
|
|
|
return {
|
|
appendText: appendText,
|
|
clear: clear,
|
|
currentMenu: currentMenu,
|
|
frame: frame,
|
|
input: input,
|
|
markAsRead: markAsRead,
|
|
menu: menu,
|
|
select: select,
|
|
show: show,
|
|
text: text
|
|
};
|
|
|
|
function appendText(message) {
|
|
getTextZone().children[0].textContent += message;
|
|
}
|
|
|
|
function clear(elem) {
|
|
if(elem == 'text') {
|
|
var textElem = findTextZone();
|
|
if(textElem != undefined) {
|
|
root.removeChild(textElem);
|
|
}
|
|
} else if(elem != undefined) {
|
|
if(currentMenu() == elem) {
|
|
menus.pop();
|
|
}
|
|
root.removeChild(elem);
|
|
} else {
|
|
dom.clear(root);
|
|
}
|
|
}
|
|
|
|
function currentMenu() {
|
|
return menus[menus.length - 1];
|
|
}
|
|
|
|
function frame(n) {
|
|
root.className = "frame" + n;
|
|
}
|
|
|
|
function findTextZone() {
|
|
return root.getElementsByClassName('text')[0];
|
|
}
|
|
|
|
function getTextZone() {
|
|
var textZone = findTextZone();
|
|
if(textZone == undefined) {
|
|
textZone = dom.make('div', {class: ['text', 'framed']}, [
|
|
dom.make('p')
|
|
]);
|
|
root.appendChild(textZone);
|
|
}
|
|
return textZone
|
|
}
|
|
|
|
function input(size) {
|
|
var elem = dom.make('input', {
|
|
type: 'text',
|
|
class: ['framed', 'center'],
|
|
maxlength: size,
|
|
size: size
|
|
});
|
|
show(elem);
|
|
return elem;
|
|
}
|
|
|
|
function markAsRead(yes) {
|
|
if(yes == undefined) {
|
|
yes = true;
|
|
}
|
|
getTextZone().classList[yes ? 'add' : 'remove']('read');
|
|
}
|
|
|
|
function menu(config) {
|
|
var domEntries = [];
|
|
var selected = config.selected || 0;
|
|
for(var i = 0; i < config.entries.length; i++) {
|
|
var classes = i == selected ? 'selected' : [];
|
|
if(config.entries[i].label != undefined) {
|
|
domEntry = dom.make('li', {
|
|
class: classes,
|
|
textContent: config.entries[i].label
|
|
}, []);
|
|
} else if(config.entries[i].picto != undefined) {
|
|
domEntry = dom.make('li', {
|
|
class: classes,
|
|
}, [dom.make('img', config.entries[i].picto, [])]);
|
|
}
|
|
domEntries.push(domEntry);
|
|
}
|
|
var ul = dom.make('ul', {class: ['menu', 'framed'], id: config.name + 'Menu'}, domEntries);
|
|
root.appendChild(ul);
|
|
menus.push(ul);
|
|
return ul;
|
|
}
|
|
|
|
function select(cursor) {
|
|
var ul = currentMenu();
|
|
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);
|
|
}
|
|
}
|