MessageList.coffee 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. class MessageList extends Class
  2. constructor: (@message_lists) ->
  3. @title = "Unknown"
  4. @loading = false
  5. @loaded = false
  6. @messages = []
  7. @message_db = {}
  8. getMessages: ->
  9. return @messages
  10. setActiveMessage: (message) ->
  11. if @message_lists.message_active
  12. @message_lists.message_active.active = false
  13. message.active = true
  14. @message_lists.message_active = message
  15. addMessage: (message_row, index=-1) ->
  16. message = new Message(@, message_row)
  17. @message_db[message_row.key] = message
  18. if index >= 0
  19. @messages.splice index, 0, message
  20. else
  21. @messages.push message
  22. deleteMessage: (message) ->
  23. message.deleted = true
  24. index = @messages.indexOf(message)
  25. if index > -1
  26. @messages.splice(index, 1)
  27. syncMessages: (message_rows) ->
  28. @messages = []
  29. for message_row in message_rows
  30. current_obj = @message_db[message_row.key]
  31. if current_obj
  32. current_obj.row = message_row
  33. @messages.push current_obj
  34. else
  35. @addMessage(message_row)
  36. render: =>
  37. messages = if Page.site_info?.cert_user_id then @getMessages() else []
  38. if messages.length > 0
  39. return h("div.MessageList", {"key": @title, "enterAnimation": Animation.show},
  40. messages.map (message) ->
  41. message.renderList()
  42. )
  43. else if @loading
  44. return h("div.MessageList.empty", {"key": @title+".loading", "enterAnimation": Animation.show, "afterCreate": Animation.show, "delay": 1}, [
  45. "#{@title}: Loading...",
  46. h("span.cursor", ["_"])
  47. ])
  48. else
  49. return h("div.MessageList.empty", {"key": @title+".empty", "enterAnimation": Animation.show, "afterCreate": Animation.show}, [
  50. "#{@title}: No messages",
  51. h("span.cursor", ["_"])
  52. ])
  53. window.MessageList = MessageList