Follow.coffee 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. class Follow extends Class
  2. constructor: (@elem) ->
  3. @menu = new Menu(@elem)
  4. @feeds = {}
  5. @follows = {}
  6. @elem.off "click"
  7. @elem.on "click", =>
  8. if Page.server_info.rev > 850
  9. if @elem.hasClass "following"
  10. @showFeeds()
  11. else
  12. @followDefaultFeeds()
  13. for title, [query, menu_item, is_default_feed, param] of @feeds
  14. if not menu_item.hasClass "selected"
  15. @showFeeds()
  16. break
  17. else
  18. Page.cmd "wrapperNotification", ["info", "Please update your ZeroNet client to use this feature"]
  19. return false
  20. init: =>
  21. if not @feeds
  22. return
  23. Page.cmd "feedListFollow", [], (@follows) =>
  24. for title, [query, menu_item, is_default_feed, param] of @feeds
  25. if @follows[title] and param in @follows[title][1]
  26. menu_item.addClass("selected")
  27. else
  28. menu_item.removeClass("selected")
  29. @updateListitems()
  30. @elem.css "display", "inline-block"
  31. setTimeout ( =>
  32. if typeof(Page.site_info.feed_follow_num) != "undefined" and Page.site_info.feed_follow_num == null # Has not manipulated followings yet
  33. @followDefaultFeeds()
  34. ), 100
  35. addFeed: (title, query, is_default_feed=false, param="") ->
  36. menu_item = @menu.addItem title, @handleMenuClick
  37. @feeds[title] = [query, menu_item, is_default_feed, param]
  38. handleMenuClick: (item) =>
  39. item.toggleClass("selected")
  40. @updateListitems()
  41. @saveFeeds()
  42. return true
  43. showFeeds: ->
  44. @menu.show()
  45. followDefaultFeeds: ->
  46. for title, [query, menu_item, is_default_feed, param] of @feeds
  47. if is_default_feed
  48. menu_item.addClass "selected"
  49. @log "Following", title, menu_item
  50. @updateListitems()
  51. @saveFeeds()
  52. updateListitems: ->
  53. if @menu.elem.find(".selected").length > 0
  54. @elem.addClass "following"
  55. else
  56. @elem.removeClass "following"
  57. saveFeeds: ->
  58. Page.cmd "feedListFollow", [], (follows) =>
  59. @follows = follows
  60. for title, [query, menu_item, is_default_feed, param] of @feeds
  61. if follows[title]
  62. params = (item for item in follows[title][1] when item != param) # Remove current param from follow list
  63. else
  64. params = []
  65. if menu_item.hasClass "selected" # Add if selected
  66. params.push(param)
  67. if params.length == 0 # Empty params
  68. delete follows[title]
  69. else
  70. follows[title] = [query, params]
  71. Page.cmd "feedFollow", [follows]
  72. window.Follow = Follow