function Screen(dom) { var root = document.getElementById('screen'); return { appendText: appendText, clear: clear, 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) { root.removeChild(elem); } else { dom.clear(root); } } 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', maxlength: size, size: size }); show(elem); return elem; } function markAsRead(yes) { if(yes == undefined) { yes = true; } getTextZone().classList[yes ? 'add' : 'remove']('read'); } function menu(name, entries) { var domEntries = []; for(var i = 0; i < entries.length; i++) { domEntries.push(dom.make('li', { class: [entries].concat(i == 0 ? ['selected'] : []), textContent: entries[i].label }, [])); } var ul = dom.make('ul', {class: ['menu', 'framed'], id: name}, 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); } }