PageRenderTime 56ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/public/scripts/users.js

https://bitbucket.org/mpuckett/iostudio-whiteboard
JavaScript | 102 lines | 93 code | 9 blank | 0 comment | 3 complexity | 6f902ddd288df3cc9a992ec785692aae MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause, MIT
  1. var UserModel = Backbone.Model.extend({
  2. defaults: {
  3. 'name': 'Anonymous'
  4. },
  5. initialize: function () {
  6. }
  7. });
  8. var UsersCollection = Backbone.Collection.extend({
  9. model: UserModel
  10. });
  11. var UsersListView = Backbone.View.extend({
  12. el: '#users-list',
  13. events: {
  14. 'click .self img': function (e) {
  15. this.trigger('_requireMediaUpload');
  16. },
  17. 'click .self .name': function (e) {
  18. var user = {
  19. id: $(e.target).closest('.user').attr('data-id'),
  20. name: prompt("What's your name?")
  21. };
  22. this.trigger('_update', user);
  23. }
  24. },
  25. template: (function () { return $('#template-user').html() }()),
  26. render: function (user) {
  27. return Mustache.render(this.template, user);
  28. },
  29. add: function (user) {
  30. var html = this.render(user);
  31. this.$el.append(html);
  32. },
  33. remove: function (user) {
  34. var $el = this.$el.find('#user-'+user.id);
  35. $el.remove();
  36. },
  37. update: function (user) {
  38. var $el = this.$el.find('#user-'+user.id);
  39. var html = this.render(user);
  40. $el.replaceWith( html );
  41. }
  42. });
  43. var UsersController = Backbone.Controller.extend({
  44. initialize: function () {
  45. var t = this;
  46. var usersCollection = this.usersCollection = new UsersCollection();
  47. var usersListView = this.usersListView = new UsersListView();
  48. usersListView.on('_requireMediaUpload', function () {
  49. t.trigger('_requireMediaUpload');
  50. });
  51. usersListView.on('_update', function (user) {
  52. t.edit(user)
  53. });
  54. usersCollection.on('add', function (user) {
  55. usersListView.add(user.toJSON());
  56. });
  57. usersCollection.on('remove', function (user) {
  58. usersListView.remove(user.toJSON());
  59. });
  60. usersCollection.on('change', function (user) {
  61. usersListView.update(user.toJSON());
  62. });
  63. },
  64. add: function (user) {
  65. this.usersCollection.add(user);
  66. },
  67. remove: function (user) {
  68. this.usersCollection.remove(user);
  69. },
  70. update: function (user) {
  71. var userModel = this.usersCollection.where({id:user.id})[0];
  72. if (userModel) {
  73. userModel.update(user);
  74. }
  75. },
  76. get: function (id) {
  77. var model = this.usersCollection.get(id);
  78. if (model) {
  79. return model.toJSON();
  80. } else {
  81. return { name: '[No Name]' };
  82. }
  83. },
  84. edit: function (user) {
  85. var t = this;
  86. var userModel = t.usersCollection.where({id:user.id})[0].toJSON();
  87. delete user.id;
  88. _.each(user, function (value, attribute) {
  89. userModel[attribute] = value;
  90. });
  91. t.trigger('_userUpdated', userModel);
  92. }
  93. });