From 677b382e3944ab6074cc5decf86c7d4855a1941f Mon Sep 17 00:00:00 2001 From: Richard Date: Sat, 3 Jan 2026 17:16:13 +0000 Subject: [PATCH 1/7] Use include_condition for add_to_serializer --- plugin.rb | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/plugin.rb b/plugin.rb index 19d8bd8..59cdd1b 100644 --- a/plugin.rb +++ b/plugin.rb @@ -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 From a35b6d01b10317572bf98442a7f637a93c6af56a Mon Sep 17 00:00:00 2001 From: Richard Date: Sat, 3 Jan 2026 17:50:14 +0000 Subject: [PATCH 2/7] Use api.addTrackedPostProperties instead of api.includePostAttributes --- assets/javascripts/discourse/initializers/initialize-ratings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/javascripts/discourse/initializers/initialize-ratings.js b/assets/javascripts/discourse/initializers/initialize-ratings.js index 1f75a86..87d5a89 100644 --- a/assets/javascripts/discourse/initializers/initialize-ratings.js +++ b/assets/javascripts/discourse/initializers/initialize-ratings.js @@ -33,7 +33,7 @@ export default { withPluginApi("0.10.0", (api) => { const currentUser = api.getCurrentUser(); - api.includePostAttributes("ratings"); + api.addTrackedPostProperties("ratings"); api.decorateWidget("poster-name:after", function (helper) { const post = helper.getModel(); From 1c940947ed51d125cd3d5e9ab1be1289eb096f95 Mon Sep 17 00:00:00 2001 From: Richard Date: Sat, 3 Jan 2026 17:56:05 +0000 Subject: [PATCH 3/7] Fix deprecated icons --- assets/javascripts/discourse/components/rating-object.hbs | 4 ++-- assets/javascripts/discourse/components/rating-type.hbs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) 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 From 8c988849f31427165bbc62df33dc2401e4f1794d Mon Sep 17 00:00:00 2001 From: Richard Date: Sat, 3 Jan 2026 18:25:57 +0000 Subject: [PATCH 4/7] Replace widgets with connector component --- .../post-ratings.gjs | 21 +++++++++++++++++++ .../initializers/initialize-ratings.js | 19 ----------------- assets/stylesheets/common/ratings.scss | 8 +++++-- 3 files changed, 27 insertions(+), 21 deletions(-) create mode 100644 assets/javascripts/discourse/connectors/post-meta-data-poster-name-user-link/post-ratings.gjs 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..b2a45b8 --- /dev/null +++ b/assets/javascripts/discourse/connectors/post-meta-data-poster-name-user-link/post-ratings.gjs @@ -0,0 +1,21 @@ +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/initializers/initialize-ratings.js b/assets/javascripts/discourse/initializers/initialize-ratings.js index 87d5a89..4ec0301 100644 --- a/assets/javascripts/discourse/initializers/initialize-ratings.js +++ b/assets/javascripts/discourse/initializers/initialize-ratings.js @@ -35,25 +35,6 @@ export default { api.addTrackedPostProperties("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.modifyClass("model:composer", { pluginId: PLUGIN_ID, editingPostWithRatings: and("editingPost", "post.ratings.length"), 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; From 00249861dd15a1d33542b1ce45782934a8f863c9 Mon Sep 17 00:00:00 2001 From: Richard Date: Sat, 3 Jan 2026 23:27:02 +0000 Subject: [PATCH 5/7] Use new path style --- .../{admin-plugins-ratings.js => admin-plugins/ratings.js} | 2 +- .../{admin-plugins-ratings.js => admin-plugins/ratings.js} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename assets/javascripts/discourse/controllers/{admin-plugins-ratings.js => admin-plugins/ratings.js} (97%) rename assets/javascripts/discourse/routes/{admin-plugins-ratings.js => admin-plugins/ratings.js} (90%) 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/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"; From f2837d3c611b830587060eba798392f4b6eeea4d Mon Sep 17 00:00:00 2001 From: Richard Date: Sat, 3 Jan 2026 23:27:45 +0000 Subject: [PATCH 6/7] Bump version to indicate something stable --- plugin.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin.rb b/plugin.rb index 59cdd1b..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 From dc5ac2fa3f0d7fdf883d7265169e9c9d6b6194a3 Mon Sep 17 00:00:00 2001 From: Marcos Date: Sun, 4 Jan 2026 22:50:47 -0400 Subject: [PATCH 7/7] fix linting and prettier --- .../post-meta-data-poster-name-user-link/post-ratings.gjs | 1 - assets/javascripts/discourse/initializers/initialize-ratings.js | 1 - 2 files changed, 2 deletions(-) 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 index b2a45b8..48e4f58 100644 --- 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 @@ -3,7 +3,6 @@ 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; } diff --git a/assets/javascripts/discourse/initializers/initialize-ratings.js b/assets/javascripts/discourse/initializers/initialize-ratings.js index 4ec0301..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";