You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
2.7 KiB

  1. # frozen_string_literal: true
  2. class REST::StatusSerializer < ActiveModel::Serializer
  3. attributes :id, :created_at, :in_reply_to_id, :in_reply_to_account_id,
  4. :sensitive, :spoiler_text, :visibility, :language,
  5. :uri, :content, :url, :reblogs_count, :favourites_count
  6. attribute :favourited, if: :current_user?
  7. attribute :reblogged, if: :current_user?
  8. attribute :muted, if: :current_user?
  9. attribute :pinned, if: :pinnable?
  10. belongs_to :reblog, serializer: REST::StatusSerializer
  11. belongs_to :application
  12. belongs_to :account, serializer: REST::AccountSerializer
  13. has_many :media_attachments, serializer: REST::MediaAttachmentSerializer
  14. has_many :mentions
  15. has_many :tags
  16. has_many :emojis
  17. def current_user?
  18. !current_user.nil?
  19. end
  20. def uri
  21. TagManager.instance.uri_for(object)
  22. end
  23. def content
  24. Formatter.instance.format(object)
  25. end
  26. def url
  27. TagManager.instance.url_for(object)
  28. end
  29. def favourited
  30. if instance_options && instance_options[:relationships]
  31. instance_options[:relationships].favourites_map[object.id] || false
  32. else
  33. current_user.account.favourited?(object)
  34. end
  35. end
  36. def reblogged
  37. if instance_options && instance_options[:relationships]
  38. instance_options[:relationships].reblogs_map[object.id] || false
  39. else
  40. current_user.account.reblogged?(object)
  41. end
  42. end
  43. def muted
  44. if instance_options && instance_options[:relationships]
  45. instance_options[:relationships].mutes_map[object.conversation_id] || false
  46. else
  47. current_user.account.muting_conversation?(object.conversation)
  48. end
  49. end
  50. def pinned
  51. if instance_options && instance_options[:relationships]
  52. instance_options[:relationships].pins_map[object.id] || false
  53. else
  54. current_user.account.pinned?(object)
  55. end
  56. end
  57. def pinnable?
  58. current_user? &&
  59. current_user.account_id == object.account_id &&
  60. !object.reblog? &&
  61. %w(public unlisted).include?(object.visibility)
  62. end
  63. class ApplicationSerializer < ActiveModel::Serializer
  64. attributes :name, :website
  65. end
  66. class MentionSerializer < ActiveModel::Serializer
  67. attributes :id, :username, :url, :acct
  68. def id
  69. object.account_id
  70. end
  71. def username
  72. object.account_username
  73. end
  74. def url
  75. TagManager.instance.url_for(object.account)
  76. end
  77. def acct
  78. object.account_acct
  79. end
  80. end
  81. class TagSerializer < ActiveModel::Serializer
  82. include RoutingHelper
  83. attributes :name, :url
  84. def url
  85. tag_url(object)
  86. end
  87. end
  88. class CustomEmojiSerializer < ActiveModel::Serializer
  89. include RoutingHelper
  90. attributes :shortcode, :url
  91. def url
  92. full_asset_url(object.image.url)
  93. end
  94. end
  95. end