diff --git a/assets/javascripts/discourse/components/rating-object.hbs b/assets/javascripts/discourse/components/rating-object.hbs index 8ddf48a..2cd7758 100644 --- a/assets/javascripts/discourse/components/rating-object.hbs +++ b/assets/javascripts/discourse/components/rating-object.hbs @@ -51,12 +51,12 @@ action=this.updateObject actionParam=this.object label="admin.ratings.type.update" - icon="save" + icon="check" disabled=this.saveDisabled }} {{/if}} - {{d-button action=this.destroyObject actionParam=this.object icon="times"}} + {{d-button action=this.destroyObject actionParam=this.object icon="xmark"}} {{#if this.error}} diff --git a/assets/javascripts/discourse/components/rating-type.hbs b/assets/javascripts/discourse/components/rating-type.hbs index 34e8e55..43f8c63 100644 --- a/assets/javascripts/discourse/components/rating-type.hbs +++ b/assets/javascripts/discourse/components/rating-type.hbs @@ -37,11 +37,11 @@ action=this.updateType actionParam=this.type label="admin.ratings.type.update" - icon="save" + icon="check" disabled=this.updateDisabled }} {{/if}} - {{d-button action=this.destroyType actionParam=this.type icon="times"}} + {{d-button action=this.destroyType actionParam=this.type icon="xmark"}} {{/if}} \ No newline at end of file diff --git a/assets/javascripts/discourse/connectors/post-meta-data-poster-name-user-link/post-ratings.gjs b/assets/javascripts/discourse/connectors/post-meta-data-poster-name-user-link/post-ratings.gjs new file mode 100644 index 0000000..48e4f58 --- /dev/null +++ b/assets/javascripts/discourse/connectors/post-meta-data-poster-name-user-link/post-ratings.gjs @@ -0,0 +1,20 @@ +import Component from "@glimmer/component"; +import { htmlSafe } from "@ember/template"; +import { ratingListHtml } from "../../lib/rating-utilities"; + +export default class PostRatings extends Component { + get showRatings() { + return this.args.post.ratings && this.args.post.ratings.length > 0; + } + + get ratingList() { + return htmlSafe(ratingListHtml(this.args.post.ratings)); + } + + +} diff --git a/assets/javascripts/discourse/controllers/admin-plugins-ratings.js b/assets/javascripts/discourse/controllers/admin-plugins/ratings.js similarity index 97% rename from assets/javascripts/discourse/controllers/admin-plugins-ratings.js rename to assets/javascripts/discourse/controllers/admin-plugins/ratings.js index 2a219b3..49a5e20 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-ratings.js +++ b/assets/javascripts/discourse/controllers/admin-plugins/ratings.js @@ -3,7 +3,7 @@ import { action } from "@ember/object"; import { notEmpty } from "@ember/object/computed"; import { service } from "@ember/service"; import { i18n } from "discourse-i18n"; -import RatingType from "../models/rating-type"; +import RatingType from "../../models/rating-type"; export default class AdminPluginsRatingsController extends Controller { @service dialog; diff --git a/assets/javascripts/discourse/initializers/initialize-ratings.js b/assets/javascripts/discourse/initializers/initialize-ratings.js index 1f75a86..9a6e9b6 100644 --- a/assets/javascripts/discourse/initializers/initialize-ratings.js +++ b/assets/javascripts/discourse/initializers/initialize-ratings.js @@ -13,7 +13,6 @@ import { withPluginApi } from "discourse/lib/plugin-api"; import Category from "discourse/models/category"; import Composer from "discourse/models/composer"; import { i18n } from "discourse-i18n"; -import { ratingListHtml } from "../lib/rating-utilities"; const PLUGIN_ID = "discourse-ratings"; @@ -33,26 +32,7 @@ export default { withPluginApi("0.10.0", (api) => { const currentUser = api.getCurrentUser(); - api.includePostAttributes("ratings"); - - api.decorateWidget("poster-name:after", function (helper) { - const post = helper.getModel(); - - if (post && post.topic && post.topic.show_ratings && post.ratings) { - return helper.rawHtml(ratingListHtml(post.ratings)); - } - }); - - api.reopenWidget("poster-name", { - buildClasses() { - const post = this.findAncestorModel(); - let classes = []; - if (post && post.topic && post.topic.show_ratings && post.ratings) { - classes.push("has-ratings"); - } - return classes; - }, - }); + api.addTrackedPostProperties("ratings"); api.modifyClass("model:composer", { pluginId: PLUGIN_ID, diff --git a/assets/javascripts/discourse/routes/admin-plugins-ratings.js b/assets/javascripts/discourse/routes/admin-plugins/ratings.js similarity index 90% rename from assets/javascripts/discourse/routes/admin-plugins-ratings.js rename to assets/javascripts/discourse/routes/admin-plugins/ratings.js index 8c36039..e035d32 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-ratings.js +++ b/assets/javascripts/discourse/routes/admin-plugins/ratings.js @@ -4,8 +4,8 @@ import { service } from "@ember/service"; import { all } from "rsvp"; import DiscourseRoute from "discourse/routes/discourse"; import { i18n } from "discourse-i18n"; -import RatingObject from "../models/rating-object"; -import RatingType from "../models/rating-type"; +import RatingObject from "../../models/rating-object"; +import RatingType from "../../models/rating-type"; const noneType = "none"; diff --git a/assets/stylesheets/common/ratings.scss b/assets/stylesheets/common/ratings.scss index cbacf45..a4ca83e 100644 --- a/assets/stylesheets/common/ratings.scss +++ b/assets/stylesheets/common/ratings.scss @@ -19,8 +19,12 @@ } } -.topic-meta-data .names.has-ratings { - align-items: flex-start; +.topic-meta-data .names .rating-list { + margin-left: 1em; + .rating-type { + // there is a .names span.first { font-weight: bold; } in core... :sobs: + font-weight: normal; + } .rating { margin: 0 5px 0 0; diff --git a/plugin.rb b/plugin.rb index 19d8bd8..5787d99 100644 --- a/plugin.rb +++ b/plugin.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true # name: discourse-ratings # about: A Discourse plugin that lets you use topics to rate things -# version: 0.2.3 -# authors: Angus McLeod, Faizaan Gagan +# version: 1.0 +# authors: Pavilion # url: https://github.com/paviliondev/discourse-ratings # contact_emails: development@pavilion.tech @@ -182,12 +182,7 @@ ) end - add_to_serializer(:post, :ratings, respect_plugin_enabled: false) do - DiscourseRatings::Rating.serialize(object.ratings) - end - - add_to_serializer(:post, :include_ratings?) do - # we need to explictly check for plugin enabled when defining custom include method + add_to_serializer(:post, :ratings, respect_plugin_enabled: false, include_condition: -> { SiteSetting.rating_enabled && ( !SiteSetting.rating_hide_except_own_entry || @@ -196,6 +191,8 @@ (scope.current_user.staff? || scope.current_user.id === object.user.id) ) ) + }) do + DiscourseRatings::Rating.serialize(object.ratings) end ###### Topic ###### @@ -230,10 +227,10 @@ object.topic.ratings.present? end - add_to_serializer(:topic_view, :user_can_rate) { object.topic.user_can_rate(scope.current_user) } - - add_to_serializer(:topic_view, :include_user_can_rate?) do + add_to_serializer(:topic_view, :user_can_rate, include_condition: -> { scope.current_user && object.topic.rating_enabled? + }) do + object.topic.user_can_rate(scope.current_user) end ::Topic.singleton_class.prepend TopicRatingsExtension