From f5419521f058c7e48e732acfc10c060d9472e6e6 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Mon, 17 Oct 2022 09:38:20 +0100 Subject: [PATCH] DEV: Support colocation of component templates in plugins (#18598) This allows plugins to colocate component JS and HBS under `/plugins/{name}/assets/javascripts/discourse/components`. `discourse-presence` is updated to use this new pattern, which also serves as an integration test for this part of the build pipeline. --- .../colocated-template-compiler.js | 19 +++++++++++++++++++ .../javascripts/discourse-plugins/index.js | 3 +++ .../components/composer-presence-display.hbs | 0 .../components/topic-presence-display.hbs | 0 .../before-composer-controls/presence.hbs | 0 .../topic-above-footer-buttons/presence.hbs | 0 6 files changed, 22 insertions(+) create mode 100644 app/assets/javascripts/discourse-plugins/colocated-template-compiler.js rename plugins/discourse-presence/assets/javascripts/discourse/{templates => }/components/composer-presence-display.hbs (100%) rename plugins/discourse-presence/assets/javascripts/discourse/{templates => }/components/topic-presence-display.hbs (100%) rename plugins/discourse-presence/assets/javascripts/discourse/{templates => }/connectors/before-composer-controls/presence.hbs (100%) rename plugins/discourse-presence/assets/javascripts/discourse/{templates => }/connectors/topic-above-footer-buttons/presence.hbs (100%) diff --git a/app/assets/javascripts/discourse-plugins/colocated-template-compiler.js b/app/assets/javascripts/discourse-plugins/colocated-template-compiler.js new file mode 100644 index 00000000000..2cc0759cf38 --- /dev/null +++ b/app/assets/javascripts/discourse-plugins/colocated-template-compiler.js @@ -0,0 +1,19 @@ +const ColocatedTemplateProcessor = require("ember-cli-htmlbars/lib/colocated-broccoli-plugin"); + +module.exports = class DiscoursePluginColocatedTemplateProcessor extends ( + ColocatedTemplateProcessor +) { + detectRootName() { + const entries = this.currentEntries().filter((e) => !e.isDirectory()); + + const path = entries[0]?.relativePath; + + const match = path?.match( + /^discourse\/plugins\/(?[^/]+)\/discourse\// + ); + + if (match) { + return `discourse/plugins/${match.groups.name}/discourse`; + } + } +}; diff --git a/app/assets/javascripts/discourse-plugins/index.js b/app/assets/javascripts/discourse-plugins/index.js index 0f3612cbfe3..996f6f08d9b 100644 --- a/app/assets/javascripts/discourse-plugins/index.js +++ b/app/assets/javascripts/discourse-plugins/index.js @@ -7,6 +7,7 @@ const mergeTrees = require("broccoli-merge-trees"); const fs = require("fs"); const concat = require("broccoli-concat"); const RawHandlebarsCompiler = require("discourse-hbr/raw-handlebars-compiler"); +const DiscoursePluginColocatedTemplateProcessor = require("./colocated-template-compiler"); function fixLegacyExtensions(tree) { return new Funnel(tree, { @@ -169,6 +170,8 @@ module.exports = { tree = namespaceModules(tree, pluginName); tree = RawHandlebarsCompiler(tree); + + tree = new DiscoursePluginColocatedTemplateProcessor(tree); tree = this.compileTemplates(tree); tree = this.processedAddonJsFiles(tree); diff --git a/plugins/discourse-presence/assets/javascripts/discourse/templates/components/composer-presence-display.hbs b/plugins/discourse-presence/assets/javascripts/discourse/components/composer-presence-display.hbs similarity index 100% rename from plugins/discourse-presence/assets/javascripts/discourse/templates/components/composer-presence-display.hbs rename to plugins/discourse-presence/assets/javascripts/discourse/components/composer-presence-display.hbs diff --git a/plugins/discourse-presence/assets/javascripts/discourse/templates/components/topic-presence-display.hbs b/plugins/discourse-presence/assets/javascripts/discourse/components/topic-presence-display.hbs similarity index 100% rename from plugins/discourse-presence/assets/javascripts/discourse/templates/components/topic-presence-display.hbs rename to plugins/discourse-presence/assets/javascripts/discourse/components/topic-presence-display.hbs diff --git a/plugins/discourse-presence/assets/javascripts/discourse/templates/connectors/before-composer-controls/presence.hbs b/plugins/discourse-presence/assets/javascripts/discourse/connectors/before-composer-controls/presence.hbs similarity index 100% rename from plugins/discourse-presence/assets/javascripts/discourse/templates/connectors/before-composer-controls/presence.hbs rename to plugins/discourse-presence/assets/javascripts/discourse/connectors/before-composer-controls/presence.hbs diff --git a/plugins/discourse-presence/assets/javascripts/discourse/templates/connectors/topic-above-footer-buttons/presence.hbs b/plugins/discourse-presence/assets/javascripts/discourse/connectors/topic-above-footer-buttons/presence.hbs similarity index 100% rename from plugins/discourse-presence/assets/javascripts/discourse/templates/connectors/topic-above-footer-buttons/presence.hbs rename to plugins/discourse-presence/assets/javascripts/discourse/connectors/topic-above-footer-buttons/presence.hbs