diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 75256ea49d0..71d3e9e683c 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -465,9 +465,9 @@ class ApplicationController < ActionController::Base data.merge! DiscoursePluginRegistry.custom_html end - DiscoursePluginRegistry.html_builders.each do |name, blk| + DiscoursePluginRegistry.html_builders.each do |name, _| if name.start_with?("client:") - data[name.sub(/^client:/, '')] = blk.call(self) + data[name.sub(/^client:/, '')] = DiscoursePluginRegistry.build_html(name, self) end end diff --git a/lib/discourse_plugin_registry.rb b/lib/discourse_plugin_registry.rb index 9e404c16c52..52ca1df2eda 100644 --- a/lib/discourse_plugin_registry.rb +++ b/lib/discourse_plugin_registry.rb @@ -137,11 +137,13 @@ class DiscoursePluginRegistry end def self.register_html_builder(name, &block) - html_builders[name] = block + html_builders[name] ||= [] + html_builders[name] << block end def self.build_html(name, ctx = nil) - html_builders[name]&.call(ctx) + builders = html_builders[name] || [] + builders.map { |b| b.call(ctx) }.join("\n") end def javascripts diff --git a/spec/components/discourse_plugin_registry_spec.rb b/spec/components/discourse_plugin_registry_spec.rb index b2809390127..68542ac0eb1 100644 --- a/spec/components/discourse_plugin_registry_spec.rb +++ b/spec/components/discourse_plugin_registry_spec.rb @@ -51,6 +51,13 @@ describe DiscoursePluginRegistry do DiscoursePluginRegistry.reset! expect(DiscoursePluginRegistry.build_html(:my_html)).to be_blank end + + it "can register multiple builders" do + DiscoursePluginRegistry.register_html_builder(:my_html) { "one" } + DiscoursePluginRegistry.register_html_builder(:my_html) { "two" } + expect(DiscoursePluginRegistry.build_html(:my_html)).to eq("one\ntwo") + DiscoursePluginRegistry.reset! + end end context '.register_css' do