function Room(domElem, lib) { var players = {}; var logins = []; return { populate: populate, enter: enter, leave: leave }; function Player(name) { var player = { dom: document.createElement('li'), position: null }; player.dom.textContent = name; return player; } function populate(playersList) { lib.clearElement(domElem); for(var i = 0; i < playersList.length; i++) { enter(playersList[i].login || "anon"); } } function enter(name) { var player = Player(name); players[name] = player; player.position = lib.insert(name, logins); beforePlayer = logins[player.position]; domElem.insertBefore(player.dom, beforePlayer && players[beforePlayer].dom); logins.splice(player.position, 0, name); } function leave(name) { domElem.removeChild(players[name].dom); logins.splice(players[name].position, 1); } }