From 087ee8c5e22c74f0df9974e6c3fe766930778731 Mon Sep 17 00:00:00 2001 From: Rafael dos Santos Silva Date: Tue, 11 Apr 2023 12:22:34 -0300 Subject: [PATCH] DEV: Experimental JS plugin API for topic summary HTML (#20963) --- .../discourse/app/lib/plugin-api.js | 23 +++++++++++++++++++ .../app/widgets/toggle-topic-summary.js | 16 ++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/discourse/app/lib/plugin-api.js b/app/assets/javascripts/discourse/app/lib/plugin-api.js index aae7d031a61..fb42aa6d2b5 100644 --- a/app/assets/javascripts/discourse/app/lib/plugin-api.js +++ b/app/assets/javascripts/discourse/app/lib/plugin-api.js @@ -69,6 +69,7 @@ import { addQuickAccessProfileItem } from "discourse/widgets/quick-access-profil import { addTagsHtmlCallback } from "discourse/lib/render-tags"; import { addToolbarCallback } from "discourse/components/d-editor"; import { addTopicParticipantClassesCallback } from "discourse/widgets/topic-map"; +import { addTopicSummaryCallback } from "discourse/widgets/toggle-topic-summary"; import { addTopicTitleDecorator } from "discourse/components/topic-title"; import { addUserMenuGlyph } from "discourse/widgets/user-menu"; import { addUsernameSelectorDecorator } from "discourse/helpers/decorate-username-selector"; @@ -1022,6 +1023,28 @@ class PluginApi { addTopicParticipantClassesCallback(callback); } + /** + * EXPERIMENTAL. Do not use. + * Adds a callback to be topic summary widget markup that can be used, for example, + * to add an extra button to the topic summary widget. + * + * Example: + * + * api.addTopicSummaryCallback((html, attrs, widget) => { + * html.push( + * widget.attach("button", { + * className: "btn btn-primary", + * icon: "magic", + * title: "discourse_ai.ai_helper.title", + * label: "discourse_ai.ai_helper.title", + * action: "showAiSummary", + * }) + * ); + **/ + addTopicSummaryCallback(callback) { + addTopicSummaryCallback(callback); + } + /** * * Adds a callback to be executed on the "transformed" post that is passed to the post diff --git a/app/assets/javascripts/discourse/app/widgets/toggle-topic-summary.js b/app/assets/javascripts/discourse/app/widgets/toggle-topic-summary.js index 82f9dae5ca4..b6f36f6bada 100644 --- a/app/assets/javascripts/discourse/app/widgets/toggle-topic-summary.js +++ b/app/assets/javascripts/discourse/app/widgets/toggle-topic-summary.js @@ -31,10 +31,16 @@ createWidget("toggle-summary-description", { }, }); +let topicSummaryCallbacks = null; +export function addTopicSummaryCallback(callback) { + topicSummaryCallbacks = topicSummaryCallbacks || []; + topicSummaryCallbacks.push(callback); +} + export default createWidget("toggle-topic-summary", { tagName: "section.information.toggle-summary", html(attrs) { - return [ + let html = [ this.attach("toggle-summary-description", attrs), this.attach("button", { className: "btn btn-primary", @@ -44,5 +50,13 @@ export default createWidget("toggle-topic-summary", { action: attrs.topicSummaryEnabled ? "cancelFilter" : "showSummary", }), ]; + + if (topicSummaryCallbacks) { + topicSummaryCallbacks.forEach((callback) => { + html = callback(html, attrs, this); + }); + } + + return html; }, });