| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 | var h = require('cyclejs').h;var util = require('../util');var cx = util.classNames;function renderLogin(props) {  var disconnected = props.status === 'disconnected';  var error = props.error;  var hasRoom = props.room != null;  return (    h("div.row", [      error ? h("div.alert.alert-danger", [        h("strong", [ "Oops!" ]), ' ' + error + "."      ]) : null,      h("div#login", [        disconnected ? h("form.form-inline#login-form", [          h("input#username.form-control", {              "name": "username",              "type": "text",              "placeholder": "Username"          }),          h("br"),          h("br"),          h("button.btn", { "type": "submit" }, [ hasRoom ? 'Join Room' : 'Create New Room' ])        ]) : null      ])    ])  )}function renderChat(props) {  var height = window.innerHeight - 300;  var element = document.getElementById('messages');  var scrollTop = util.propHook(function(node) {    setTimeout(function() {      node.scrollTop = node.scrollHeight;    }, 100);  });  var messages = props.messages;  return (    h("div#main.col-md-9", [      h("div#messages", { scrollTop: scrollTop, style: { height: height+'px' } }, [        h("table", messages.map(function(message) {          var classes = cx('message', message.kind, {            me: message.user === props.username          });          return h("tr"+classes, [            h("td.user", [ message.user ]),            h("td", [ message.message ])          ]);        }))      ]),      h("input#talk.form-control", {          "type": "text",          "value": props.chat      })    ])  )}function renderSidebar() {  return (    h("div.col-md-3", {        "ng-controller": "GameCtrl"    }, [      h("button.btn.btn-primary", {          "ng-show": "game.pendingRound",          "ng-click": "game.startRound()"      }, [ "Start" ]),      h("div", {          "ng-if": "game.roundRunning()"      }, [        h("h2", [ h("ng-pluralize", {            "count": "game.timer.count",            "when": "{'0': 'Time\\'s up!', 'one': '1 second', 'other': '{} seconds'}"        }) ]),        h("h2", [ h("ng-pluralize", {            "count": "game.points",            "when": "{'one': '1 point', 'other': '{} points'}"        }) ]),        h("hr")      ]),      h("div", {          "ng-if": "game.roundRunning()"      }, [        h("h3", {            "ng-show": "game.isPlayer()"        }, [ "you are the giver" ]),        h("h3", { "ng-show": "game.isMonitor()"        }, [ "you are a monitor" ]),        h("h3", {            "ng-show": "game.isGuesser()"        }, [ "you are a guesser" ]),        h("button.btn.btn-warning", {            "ng-show": "game.isPlayer()",            "ng-click": "game.pass()"        }, [ "Pass" ]),        h("button.btn.btn-danger", {            "ng-show": "game.isMonitor()",            "ng-click": "game.taboo()"        }, [ "Uh-uh!" ]),        h("button.btn.btn-success", {            "ng-show": "game.isMonitor() || game.isPlayer()",            "ng-click": "game.correct()"        }, [ "Correct" ])      ]),      h("div", {          "ng-show": "game.card"      }, [        h("h2", [ "Card" ]),        h("h3", [ "{{game.card.word}}" ]),        h("ul.taboo", [          h("li", {              "ng-repeat": "word in game.card.taboo"          }, [ "{{word}}" ])        ])      ]),      h("h2", [ "Team A" ]),      h("ul.members", [        h("li", {            "ng-repeat": "member in game.teamA.members"        }, [ "{{member}}" ])      ]),      h("h2", [ "Team B" ]),      h("ul.members", [        h("li", {            "ng-repeat": "member in game.teamB.members"        }, [ "{{member}}" ])      ])    ])  )}function renderMain(props) {  return h("div.row", [    renderChat(props)  ])}module.exports = function(props) {  var isConnected = props.status === 'connected';  return (    h("div", [      h("div.page-header", [        h("h1", isConnected ?          [ "Welcome ", h("small", [ "You are playing as "+props.username ]) ]          :          [ "Welcome ", h("small", [ "login to play" ]) ]         )      ]),      isConnected ? renderMain(props) : renderLogin(props)    ])  );}
 |