- Added: meteor add accounts-ui accounts-password
- For testing: sanjo:jasmine and various velocity packages
- meteor add sanjo:jasmine
- meteor add velocity:html-reporter
- meteor add velocity:console-reporter
- NOT working on cloud9. Here are some SO questions that might help:
- http://stackoverflow.com/questions/29208003/how-do-you-change-the-iframe-address-used-by-meteor-velocity
- http://stackoverflow.com/questions/29621203/what-configuration-of-cloud9-works-with-running-meteor-velocity-and-mocha
- http://stackoverflow.com/questions/26866008/mocha-web-client-side-tests-not-running-with-velocity-for-meteor-application
- For debugging: meteortoys:allthings (uninstalled presently)
- Try hitting Ctrl-M while running the application
- Should it come time for real(ish) randomness: https://atmospherejs.com/meteor/random
- Should it come time to have a “site” with many pieces (and URLs that maintain state for the user): iron.router
- Send e-mail. Yay: https://atmospherejs.com/meteor/email
- For the gallery of responses: https://atmospherejs.com/nolimits4web/swiper
Session variable holds current game. For now, just grabs the only game.
Note: check out these useful array operations:
- field.3: https://docs.mongodb.org/manual/tutorial/query-documents/#match-a-specific-element-of-an-array
- $elemMatch: https://docs.mongodb.org/manual/tutorial/query-documents/#single-element-satisfies-the-criteria
- $: the first array element satisfying some set of conditions
Games:
- _id (autogenerated)
- players (array of user ids)
- turn: null if not begun or turn ID
Turns:
- _id (autogenerated)
- round (number)
- judgeId (player id)
- challenge (null/non-present or completed challenge as string)
- displayOrder (array of player IDs; hidable!)
- responses (array of {text: null or text, done: null/Boolean})
- votes (array of null or # (displayOrder) of length 6; null if not cast)
- done (null/non-present/false or true)
Actual design used:
Player:
- _id (Meteor.userId())
Turns (exactly 1 row):
- _id (autogenerated)
- judgeId (player id)
- challenge (null/non-present or completed challenge as string)
- isDoneVote (null/non-present/false or true)
Responses:
- _id (Meteor.userId() of respondent)
- text (null or text of response)
- votes (number of votes given to this response)
- isSubmitted (whether complete)
Original design:
Player:
- id: id
- order: order #
Turn:
- judge: player id
- challenge: prompt (null -> none yet)
- responses: 2+ responses (not present -> none yet; else, look at isSubmitted)
- isVotingComplete: is voting complete?
Response:
- judge: player id (judge)
- respondent: player id (respondent)
- judgingOrder: judging order #
- response: response text (null or row is not present? -> none yet)
- votes: vote count
- isSubmitted: is submitted?
Interface:
Start: “Join” button; first to join becomes the owner/judge
Judge:
- If no challenge: create challenge interface DONE: makeChallenge
- If not all responses back: pending interface DONE: judgeAwaitsResponses
- If all responses back: voting interface DONE: voteOnResponses
- If voting complete: display end-game DONE: endGame
Player:
- If no challenge: pending screen DONE: wait
- If voting is not complete:
- Show the challenge
- Ask for a response (unsubmit if edit)
- Submit button
- Submitted: [# submitted]/[# players]
- If voting is complete: display end-game
Game:
- _id
- name
- password (clear!)
- expected number of players
- 3+ players (until = expected number, pre-game; then set order and current turn)
- vote count
- win threshold
- turn (current turn _id; also encodes round # and judge ID)
- creation time
- last update time
Player:
- id
- name
GamePerPlayer:
- _id = { game: game _id, player: player _id }
- order #
- score (cache; recoverable from other records)
Turn:
- _id = { game: game _id, round: #, judge: player _id}
- prompt (null -> none yet)
- creation time
- last update time
- deadline time (or none; only for responses? or judge loses 6 points if misses deadline?)
Response:
- id = { turn: turn _id (includes judge!), player: player _id}
- response (non-null)
- order #
- vote count
- submitted?
- creation time
- last update time, response
- last update time, vote
Interface:
Start: tabbed pane of options:
- join game
- create game
- watch game
Join game: List of games with expected number of players and players already joined. Plus special parameters. Search box to search by various things.
Create game: Basic form with number of slots, etc. for initial configuration. Once created, goes in the table.
Watch game: DON’T BOTHER until later.
Note: displaying who has responded interacts badly with the timeout. In that case, would want to display how many have responded.
Once in a game, for the judge: At the top, show the round # and player #.
Below:
- Before prompt created
- A design box for the challenge with a “Send challenge!” button at bottom.
- Before all responses received
- The challenge and a row of status indicators for the players, grayed if they haven’t gone yet.
- After all responses received
- The challenge and a scrollable (swipeable) display of responses; tapping one pops it out for full visibility? Drag gold stars onto the submissions. Initially have “vote count” stars. Also drag back off.
- After votes distributed, if another turn
- everyone but next judge sees the challenge, the scrollable display of responses (now with identities overlaid) and the gold stars for votes; next judge sees the start above
Non-judge, same but:
- Before prompt created
- just the judge’s icon, greyed out below
- Before all responses received
- response design area and submit button, once submitted, becomes withdraw submission button; also display at bottom showing who has responded (your own slot is your submit button?)
- After all responses received
- The challenge and a scrollable (swipeable) display of responses (randomly reordered); tapping one pops it out for full visibility? Live feed of gold stars?
End game:
- Show round #, scrolling list of challenges (clickable to view the individual challenges), and list of players/scores