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', config.direction], 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); } }