PageRenderTime 65ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/web-app/js/chat.js

https://github.com/delfianto/rams-web-app
JavaScript | 113 lines | 81 code | 30 blank | 2 comment | 11 complexity | 372829fc78f172d615d38a98216d2ebc MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause
  1. $(function () {
  2. if (window.localStorage.getItem("chat-simple") != null) {
  3. var messages = window.localStorage.getItem("chat-simple").split(",");
  4. for (var i = 0; i < messages.length; i++) {
  5. localStorage.removeItem("chat-simple-" + messages[i]);
  6. }
  7. }
  8. var Message = Backbone.Model.extend({
  9. defaults: function () {
  10. return {
  11. text: "empty...",
  12. order: Messages.nextOrder()
  13. };
  14. },
  15. initialize: function () {
  16. if (!this.get("text")) {
  17. this.set({"text": this.defaults().text});
  18. }
  19. }
  20. });
  21. var MessageList = Backbone.Collection.extend({
  22. model: Message,
  23. localStorage: new Backbone.LocalStorage("chat-simple"),
  24. nextOrder: function () {
  25. if (!this.length) return 1;
  26. return this.last().get('order') + 1;
  27. },
  28. comparator: function (message) {
  29. return message.get('order');
  30. }
  31. });
  32. var Messages = new MessageList;
  33. var MessageView = Backbone.View.extend({
  34. className: 'chat-message',
  35. template: _.template($('#message-template').html()),
  36. initialize: function () {
  37. this.listenTo(this.model, 'change', this.render);
  38. },
  39. // Re-render the titles of the todo item.
  40. render: function () {
  41. this.$el.html(this.template(this.model.toJSON()));
  42. return this;
  43. }
  44. });
  45. var AppView = Backbone.View.extend({
  46. el: $("#chat"),
  47. events: {
  48. "keypress #new-message": "createOnEnter",
  49. "click #new-message-btn": "createOnClick"
  50. },
  51. initialize: function () {
  52. this.input = this.$("#new-message");
  53. this.listenTo(Messages, 'add', this.addOne);
  54. this.listenTo(Messages, 'all', this.render);
  55. Messages.fetch();
  56. },
  57. addOne: function (message) {
  58. var view = new MessageView({model: message});
  59. this.$("#chat-messages").append(view.render().el);
  60. },
  61. createOnEnter: function (e) {
  62. if (Messages.length < 10) {
  63. if (e.keyCode != 13) return;
  64. if (!this.input.val()) return;
  65. Messages.create({text: this.input.val()});
  66. this.input.val('');
  67. var view = this.$("#chat-messages")[0];
  68. view.scrollTop = view.scrollHeight;
  69. }
  70. },
  71. createOnClick: function (e) {
  72. if (Messages.length < 10) {
  73. if (!this.input.val()) return;
  74. Messages.create({text: this.input.val()});
  75. this.input.val('');
  76. var view = this.$("#chat-messages")[0];
  77. view.scrollTop = view.scrollHeight;
  78. }
  79. }
  80. });
  81. // Finally, we kick things off by creating the **App**.
  82. var App = new AppView;
  83. });