From 4d62c49e2012e3158afac70bc4b758ead36797aa Mon Sep 17 00:00:00 2001 From: Godfrey Chan <godfreykfc@gmail.com> Date: Thu, 13 Jul 2023 10:57:45 -0700 Subject: [PATCH] DEV: move raw handlebars to /raw-templates/ (#22574) The primary motivation is to simplify `eagerLoadRawTemplateModules` which curently introspects the module dependencies (the `imports` at runtime). This is no longer supported in Embroider as the AMD shims do not have any dependencies (since it's managed internally with webpack). --- .../discourse-common/addon/lib/raw-templates.js | 8 +++----- .../discourse-hbr/raw-handlebars-compiler.js | 4 ++-- app/assets/javascripts/discourse-plugins/index.js | 11 +++++++++-- .../badge-selector-autocomplete.hbr | 0 .../category-selector-autocomplete.hbr | 0 .../category-tag-autocomplete.hbr | 0 .../emoji-selector-autocomplete.hbr | 0 .../app/{templates => raw-templates}/flat-button.hbr | 0 .../group-selector-autocomplete.hbr | 0 .../hashtag-autocomplete.hbr | 0 .../list/action-list.hbr | 0 .../list/activity-column.hbr | 0 .../list/category-column.hbr | 0 .../list/participant-groups.hbr | 0 .../list/post-count-or-badges.hbr | 0 .../list/posters-column.hbr | 0 .../list/posts-count-column.hbr | 0 .../list/topic-excerpt.hbr | 0 .../list/topic-list-item.hbr | 0 .../list/unread-indicator.hbr | 0 .../list/visited-line.hbr | 0 .../mobile/list/topic-list-item.hbr | 0 .../post/poster-avatar.hbr | 0 .../topic-list-header-column.hbr | 0 .../topic-list-header.hbr | 0 .../topic-post-badges.hbr | 0 .../{templates => raw-templates}/topic-status.hbr | 0 .../user-selector-autocomplete.hbr | 0 lib/theme_javascript_compiler.rb | 12 +++++++++--- 29 files changed, 23 insertions(+), 12 deletions(-) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/badge-selector-autocomplete.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/category-selector-autocomplete.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/category-tag-autocomplete.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/emoji-selector-autocomplete.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/flat-button.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/group-selector-autocomplete.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/hashtag-autocomplete.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/list/action-list.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/list/activity-column.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/list/category-column.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/list/participant-groups.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/list/post-count-or-badges.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/list/posters-column.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/list/posts-count-column.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/list/topic-excerpt.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/list/topic-list-item.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/list/unread-indicator.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/list/visited-line.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/mobile/list/topic-list-item.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/post/poster-avatar.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/topic-list-header-column.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/topic-list-header.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/topic-post-badges.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/topic-status.hbr (100%) rename app/assets/javascripts/discourse/app/{templates => raw-templates}/user-selector-autocomplete.hbr (100%) diff --git a/app/assets/javascripts/discourse-common/addon/lib/raw-templates.js b/app/assets/javascripts/discourse-common/addon/lib/raw-templates.js index b979d7c8fff..5a8bd75e100 100644 --- a/app/assets/javascripts/discourse-common/addon/lib/raw-templates.js +++ b/app/assets/javascripts/discourse-common/addon/lib/raw-templates.js @@ -1,4 +1,5 @@ import { getResolverOption } from "discourse-common/resolver"; +import require from "require"; export const __DISCOURSE_RAW_TEMPLATES = {}; @@ -45,11 +46,8 @@ export function buildRawConnectorCache(findOutlets) { } export function eagerLoadRawTemplateModules() { - for (const [key, value] of Object.entries(requirejs.entries)) { - if ( - key.includes("/templates/") && - value.deps.includes("discourse-common/lib/raw-templates") - ) { + for (const key of Object.keys(requirejs.entries)) { + if (key.includes("/raw-templates/")) { require(key); } } diff --git a/app/assets/javascripts/discourse-hbr/raw-handlebars-compiler.js b/app/assets/javascripts/discourse-hbr/raw-handlebars-compiler.js index 06dce159431..ec2091aeac8 100644 --- a/app/assets/javascripts/discourse-hbr/raw-handlebars-compiler.js +++ b/app/assets/javascripts/discourse-hbr/raw-handlebars-compiler.js @@ -141,9 +141,9 @@ TemplateCompiler.prototype.processString = function (string, relativePath) { if (pluginName) { filename = relativePath .replace(`discourse/plugins/${pluginName}/`, "") - .replace(/^(discourse\/)?templates\//, "javascripts/"); + .replace(/^(discourse\/)?raw-templates\//, "javascripts/"); } else { - filename = relativePath.replace(/^templates\//, ""); + filename = relativePath.replace(/^raw-templates\//, ""); } filename = filename.replace(/\.hbr$/, ""); diff --git a/app/assets/javascripts/discourse-plugins/index.js b/app/assets/javascripts/discourse-plugins/index.js index dbf4f56c6be..a30535a4b49 100644 --- a/app/assets/javascripts/discourse-plugins/index.js +++ b/app/assets/javascripts/discourse-plugins/index.js @@ -15,9 +15,16 @@ function fixLegacyExtensions(tree) { getDestinationPath: function (relativePath) { if (relativePath.endsWith(".es6")) { return relativePath.slice(0, -4); - } else if (relativePath.endsWith(".raw.hbs")) { - return relativePath.replace(".raw.hbs", ".hbr"); + } else if (relativePath.includes("/templates/")) { + if (relativePath.endsWith(".raw.hbs")) { + relativePath = relativePath.replace(".raw.hbs", ".hbr"); + } + + if (relativePath.endsWith(".hbr")) { + return relativePath.replace("/templates/", "/raw-templates/"); + } } + return relativePath; }, }); diff --git a/app/assets/javascripts/discourse/app/templates/badge-selector-autocomplete.hbr b/app/assets/javascripts/discourse/app/raw-templates/badge-selector-autocomplete.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/badge-selector-autocomplete.hbr rename to app/assets/javascripts/discourse/app/raw-templates/badge-selector-autocomplete.hbr diff --git a/app/assets/javascripts/discourse/app/templates/category-selector-autocomplete.hbr b/app/assets/javascripts/discourse/app/raw-templates/category-selector-autocomplete.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/category-selector-autocomplete.hbr rename to app/assets/javascripts/discourse/app/raw-templates/category-selector-autocomplete.hbr diff --git a/app/assets/javascripts/discourse/app/templates/category-tag-autocomplete.hbr b/app/assets/javascripts/discourse/app/raw-templates/category-tag-autocomplete.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/category-tag-autocomplete.hbr rename to app/assets/javascripts/discourse/app/raw-templates/category-tag-autocomplete.hbr diff --git a/app/assets/javascripts/discourse/app/templates/emoji-selector-autocomplete.hbr b/app/assets/javascripts/discourse/app/raw-templates/emoji-selector-autocomplete.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/emoji-selector-autocomplete.hbr rename to app/assets/javascripts/discourse/app/raw-templates/emoji-selector-autocomplete.hbr diff --git a/app/assets/javascripts/discourse/app/templates/flat-button.hbr b/app/assets/javascripts/discourse/app/raw-templates/flat-button.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/flat-button.hbr rename to app/assets/javascripts/discourse/app/raw-templates/flat-button.hbr diff --git a/app/assets/javascripts/discourse/app/templates/group-selector-autocomplete.hbr b/app/assets/javascripts/discourse/app/raw-templates/group-selector-autocomplete.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/group-selector-autocomplete.hbr rename to app/assets/javascripts/discourse/app/raw-templates/group-selector-autocomplete.hbr diff --git a/app/assets/javascripts/discourse/app/templates/hashtag-autocomplete.hbr b/app/assets/javascripts/discourse/app/raw-templates/hashtag-autocomplete.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/hashtag-autocomplete.hbr rename to app/assets/javascripts/discourse/app/raw-templates/hashtag-autocomplete.hbr diff --git a/app/assets/javascripts/discourse/app/templates/list/action-list.hbr b/app/assets/javascripts/discourse/app/raw-templates/list/action-list.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/list/action-list.hbr rename to app/assets/javascripts/discourse/app/raw-templates/list/action-list.hbr diff --git a/app/assets/javascripts/discourse/app/templates/list/activity-column.hbr b/app/assets/javascripts/discourse/app/raw-templates/list/activity-column.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/list/activity-column.hbr rename to app/assets/javascripts/discourse/app/raw-templates/list/activity-column.hbr diff --git a/app/assets/javascripts/discourse/app/templates/list/category-column.hbr b/app/assets/javascripts/discourse/app/raw-templates/list/category-column.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/list/category-column.hbr rename to app/assets/javascripts/discourse/app/raw-templates/list/category-column.hbr diff --git a/app/assets/javascripts/discourse/app/templates/list/participant-groups.hbr b/app/assets/javascripts/discourse/app/raw-templates/list/participant-groups.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/list/participant-groups.hbr rename to app/assets/javascripts/discourse/app/raw-templates/list/participant-groups.hbr diff --git a/app/assets/javascripts/discourse/app/templates/list/post-count-or-badges.hbr b/app/assets/javascripts/discourse/app/raw-templates/list/post-count-or-badges.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/list/post-count-or-badges.hbr rename to app/assets/javascripts/discourse/app/raw-templates/list/post-count-or-badges.hbr diff --git a/app/assets/javascripts/discourse/app/templates/list/posters-column.hbr b/app/assets/javascripts/discourse/app/raw-templates/list/posters-column.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/list/posters-column.hbr rename to app/assets/javascripts/discourse/app/raw-templates/list/posters-column.hbr diff --git a/app/assets/javascripts/discourse/app/templates/list/posts-count-column.hbr b/app/assets/javascripts/discourse/app/raw-templates/list/posts-count-column.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/list/posts-count-column.hbr rename to app/assets/javascripts/discourse/app/raw-templates/list/posts-count-column.hbr diff --git a/app/assets/javascripts/discourse/app/templates/list/topic-excerpt.hbr b/app/assets/javascripts/discourse/app/raw-templates/list/topic-excerpt.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/list/topic-excerpt.hbr rename to app/assets/javascripts/discourse/app/raw-templates/list/topic-excerpt.hbr diff --git a/app/assets/javascripts/discourse/app/templates/list/topic-list-item.hbr b/app/assets/javascripts/discourse/app/raw-templates/list/topic-list-item.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/list/topic-list-item.hbr rename to app/assets/javascripts/discourse/app/raw-templates/list/topic-list-item.hbr diff --git a/app/assets/javascripts/discourse/app/templates/list/unread-indicator.hbr b/app/assets/javascripts/discourse/app/raw-templates/list/unread-indicator.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/list/unread-indicator.hbr rename to app/assets/javascripts/discourse/app/raw-templates/list/unread-indicator.hbr diff --git a/app/assets/javascripts/discourse/app/templates/list/visited-line.hbr b/app/assets/javascripts/discourse/app/raw-templates/list/visited-line.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/list/visited-line.hbr rename to app/assets/javascripts/discourse/app/raw-templates/list/visited-line.hbr diff --git a/app/assets/javascripts/discourse/app/templates/mobile/list/topic-list-item.hbr b/app/assets/javascripts/discourse/app/raw-templates/mobile/list/topic-list-item.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/mobile/list/topic-list-item.hbr rename to app/assets/javascripts/discourse/app/raw-templates/mobile/list/topic-list-item.hbr diff --git a/app/assets/javascripts/discourse/app/templates/post/poster-avatar.hbr b/app/assets/javascripts/discourse/app/raw-templates/post/poster-avatar.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/post/poster-avatar.hbr rename to app/assets/javascripts/discourse/app/raw-templates/post/poster-avatar.hbr diff --git a/app/assets/javascripts/discourse/app/templates/topic-list-header-column.hbr b/app/assets/javascripts/discourse/app/raw-templates/topic-list-header-column.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/topic-list-header-column.hbr rename to app/assets/javascripts/discourse/app/raw-templates/topic-list-header-column.hbr diff --git a/app/assets/javascripts/discourse/app/templates/topic-list-header.hbr b/app/assets/javascripts/discourse/app/raw-templates/topic-list-header.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/topic-list-header.hbr rename to app/assets/javascripts/discourse/app/raw-templates/topic-list-header.hbr diff --git a/app/assets/javascripts/discourse/app/templates/topic-post-badges.hbr b/app/assets/javascripts/discourse/app/raw-templates/topic-post-badges.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/topic-post-badges.hbr rename to app/assets/javascripts/discourse/app/raw-templates/topic-post-badges.hbr diff --git a/app/assets/javascripts/discourse/app/templates/topic-status.hbr b/app/assets/javascripts/discourse/app/raw-templates/topic-status.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/topic-status.hbr rename to app/assets/javascripts/discourse/app/raw-templates/topic-status.hbr diff --git a/app/assets/javascripts/discourse/app/templates/user-selector-autocomplete.hbr b/app/assets/javascripts/discourse/app/raw-templates/user-selector-autocomplete.hbr similarity index 100% rename from app/assets/javascripts/discourse/app/templates/user-selector-autocomplete.hbr rename to app/assets/javascripts/discourse/app/raw-templates/user-selector-autocomplete.hbr diff --git a/lib/theme_javascript_compiler.rb b/lib/theme_javascript_compiler.rb index f67009bec3c..c4d15e67558 100644 --- a/lib/theme_javascript_compiler.rb +++ b/lib/theme_javascript_compiler.rb @@ -97,8 +97,14 @@ class ThemeJavascriptCompiler tree.transform_keys! do |filename| if filename.ends_with? ".js.es6" filename.sub(/\.js\.es6\z/, ".js") - elsif filename.ends_with? ".raw.hbs" - filename.sub(/\.raw\.hbs\z/, ".hbr") + elsif filename.include? "/templates/" + filename = filename.sub(/\.raw\.hbs\z/, ".hbr") if filename.ends_with? ".raw.hbs" + + if filename.ends_with? ".hbr" + filename.sub(%r{/templates/}, "/raw-templates/") + else + filename + end else filename end @@ -168,7 +174,7 @@ class ThemeJavascriptCompiler elsif extension == "hbs" append_ember_template(module_name, content) elsif extension == "hbr" - append_raw_template(module_name.sub("discourse/templates/", ""), content) + append_raw_template(module_name.sub("discourse/raw-templates/", ""), content) else append_js_error(filename, "unknown file extension '#{extension}' (#{filename})") end