workflow.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. var GRID_PUBLIC_ID
  2. ,KNOWN_VERSION = 0
  3. ,GRID
  4. ,SELECTED = []
  5. ,CURRENTINPUT = null;
  6. function lazyGetPseudonyme(cb) {
  7. var pseudo = window["sessionStorage"].getItem("pseudonyme_" +GRID_PUBLIC_ID);
  8. if (pseudo) {
  9. cb(pseudo);
  10. } else {
  11. doGet("/api/register?grid=" +GRID_PUBLIC_ID, function(status, pseudo) {
  12. if (status && pseudo) {
  13. window["sessionStorage"].setItem("pseudonyme_" +GRID_PUBLIC_ID, pseudo);
  14. cb(pseudo);
  15. } else {
  16. cb(null);
  17. }
  18. });
  19. }
  20. }
  21. function keyPressHandler(cell, key) {
  22. cell.dom.classList.add(R.klass.cell.pending);
  23. doGet("/api/put?grid=" +GRID_PUBLIC_ID +"&key=" +key +"&x=" +cell.x +"&y=" +cell.y +"&me=" +GRID.playerSelf.idEncoded, function(status, resp) {
  24. cell.dom.classList.remove(R.klass.cell.pending);
  25. if (status === 403 && !cell.data.found) {
  26. cell.dom.classList.add(R.klass.cell.wrong);
  27. } else if (status === 204) {
  28. pollNow();
  29. } else {
  30. // out of sync ?
  31. pollNow();
  32. }
  33. });
  34. }
  35. function updateOnPollResult(resp) {
  36. if (resp["players"]) {
  37. GRID.updatePlayers(resp["players"]);
  38. onPlayersUpdated();
  39. console.log("players updated");
  40. }
  41. if (resp["grid"]) {
  42. GRID.update(resp["grid"]);
  43. uiCreateGrid();
  44. }
  45. KNOWN_VERSION = Math.max(KNOWN_VERSION, resp["v"] || 0);
  46. }
  47. function unselect() {
  48. SELECTED.forEach(function (cell) {
  49. cell.dom.classList.remove(R.klass.cell.selected);
  50. });
  51. if (CURRENTINPUT) {
  52. CURRENTINPUT.dom.classList.remove(R.klass.cell.currentInput);
  53. CURRENTINPUT = null;
  54. }
  55. SELECTED = [];
  56. }
  57. function select(x, y) {
  58. var cell = UI_CELLS[x +y *GRID.width];
  59. SELECTED.push(cell);
  60. cell.dom.classList.add(R.klass.cell.selected);
  61. }
  62. document.addEventListener('DOMContentLoaded', function() {
  63. GRID_PUBLIC_ID = (document.location.hash.substr(1));
  64. if (GRID_PUBLIC_ID == "") {
  65. document.location.href = "/";
  66. return;
  67. }
  68. document.addEventListener('click', gridClickDelegate);
  69. document.addEventListener('keypress', function(e) {
  70. if (CURRENTINPUT && !CURRENTINPUT.data.found) {
  71. if (e.key.length === 1) {
  72. var key = e.key.charAt(0).toUpperCase();
  73. if (key.match(/[A-Z]/)) {
  74. CURRENTINPUT.data.letter = key;
  75. keyPressHandler(CURRENTINPUT, key);
  76. onGridUpdated();
  77. }
  78. } else if (e.key.toUpperCase() == "DELETE") {
  79. CURRENTINPUT.data.letter = null;
  80. onGridUpdated();
  81. } else if (e.key.toUpperCase() == "BACKSPACE") {
  82. CURRENTINPUT.data.letter = null;
  83. //TODO go back
  84. onGridUpdated();
  85. }
  86. }
  87. console.log(e);
  88. });
  89. initPolling();
  90. });