PageRenderTime 57ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

/src/blokus/static/js/models.js

https://bitbucket.org/bahman/comp3001-group-blokus
JavaScript | 97 lines | 83 code | 13 blank | 1 comment | 7 complexity | 55dd92ba0419cf4da265cf8b9adcedcc MD5 | raw file
Possible License(s): BSD-3-Clause
  1. // Define the models and collections used by blokus
  2. (function ($, _, Backbone) {
  3. function getIdFromUrl (url) {
  4. return Number((url.charAt(url.length-1) === "/" ? url.slice(0, url.length-1) : url).split("/").pop());
  5. }
  6. var Model = Backbone.Model.extend({
  7. url: function () {
  8. if (this.resourceUrl) return this.resourceUrl + (this.hasOwnProperty("id") ? this.id + "/" : "");
  9. else if (this.collection) return this.collection.resourceUrl + (this.hasOwnProperty("id") ? this.id + "/" : "");
  10. else throw "Does not have resource url or collection";
  11. }
  12. }),
  13. Collection = Backbone.Collection.extend({
  14. url: function () { return this.resourceUrl + "?limit=0"; },
  15. parse: function(response) { return response.objects; }
  16. });
  17. var User = Model.extend({ resourceUrl: blokus.urls.user }),
  18. UserProfile = Model.extend({ resourceUrl: blokus.urls.userProfile }),
  19. Game = Model.extend({
  20. resourceUrl: blokus.urls.game,
  21. url: function () {
  22. return this.resourceUrl + (this.hasOwnProperty("id") ? this.id + "/" : "") +
  23. (this.has("number_of_moves") ? "?state=" + this.get("number_of_moves") : "");
  24. },
  25. parse: function (model) {
  26. var this_ = this;
  27. if(!this.players) {
  28. this.players = new blokus.PlayerCollection(model.players);
  29. } else {
  30. _(model.players).each(function (player) {
  31. this_.players.get(player.id).set(player);
  32. });
  33. }
  34. _(this.players.models).each(function (player) {
  35. var pieces = player.pieces = new blokus.PieceCollection(player.get("pieces"));
  36. _(pieces.models).each(function (piece) {
  37. piece.set({ master_id: getIdFromUrl(piece.get("master")), player_id: getIdFromUrl(piece.get("player")) });
  38. });
  39. player.set({ user_id: getIdFromUrl(player.get("user")) });
  40. });
  41. return model;
  42. },
  43. getPlayerOfColour: function (colour) {
  44. return _(this.players.models).find(function (player) {
  45. return player.get("colour") === colour;
  46. });
  47. },
  48. getPlayerTurn: function () {
  49. return this.getPlayerOfColour(this.get("colour_turn"));
  50. }
  51. }),
  52. PieceMaster = Model.extend({ resourceUrl: blokus.urls.pieceMaster }),
  53. Piece = Model.extend({
  54. defaults: { rotation: 0, flip: 0 },
  55. initialize: function () {
  56. var this_ = this;
  57. this.bind("change", function () {
  58. this_.set({
  59. player: blokus.urls.player + this_.get("player_id") + "/",
  60. master: blokus.urls.pieceMaster + this_.get("master_id") + "/"
  61. });
  62. });
  63. }
  64. }),
  65. Player = Model.extend({
  66. resourceUrl: blokus.urls.player,
  67. getId: function () { return getIdFromUrl(this.get("user")); },
  68. isLoggedInPlayer: function () { return getIdFromUrl(this.get("user")) == blokus.user.get("id"); },
  69. });
  70. _(window.blokus).extend({
  71. User: User,
  72. UserProfile: UserProfile,
  73. Game: Game,
  74. PieceMaster: PieceMaster,
  75. Piece: Piece,
  76. Player: Player,
  77. UserCollection: Collection.extend({ model: User, resourceUrl: blokus.urls.user }),
  78. UserProfileCollection: Collection.extend({ model: UserProfile, resourceUrl: blokus.urls.user }),
  79. GameCollection: Collection.extend({ model: Game, resourceUrl: blokus.urls.game }),
  80. PieceMasterCollection: Collection.extend({ model: PieceMaster, resourceUrl: blokus.urls.pieceMaster }),
  81. PieceCollection: Collection.extend({ model: Piece, resourceUrl: blokus.urls.piece }),
  82. PlayerCollection: Backbone.Collection.extend({ model: Player, resourceUrl: blokus.urls.player })
  83. });
  84. }(jQuery, _, Backbone));