mirror of
https://github.com/discourse/discourse.git
synced 2025-02-01 09:00:44 +08:00
FEATURE: Allow embedded view to include a header (#20150)
This commits adds the ability to add a header to the embedded comments view. One use case for this is to allow `postMessage` communication between the comments iframe and the parent frame, for example, when toggling the theme of the parent webpage.
This commit is contained in:
parent
9e1fcb2a79
commit
a86112fc25
|
@ -67,7 +67,12 @@ const Theme = RestModel.extend({
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
common: [...common, "embedded_scss", "color_definitions"],
|
common: [
|
||||||
|
...common,
|
||||||
|
"color_definitions",
|
||||||
|
"embedded_scss",
|
||||||
|
"embedded_header",
|
||||||
|
],
|
||||||
desktop: common,
|
desktop: common,
|
||||||
mobile: common,
|
mobile: common,
|
||||||
settings: ["yaml"],
|
settings: ["yaml"],
|
||||||
|
|
|
@ -13,7 +13,16 @@ class RemoteTheme < ActiveRecord::Base
|
||||||
class ImportError < StandardError
|
class ImportError < StandardError
|
||||||
end
|
end
|
||||||
|
|
||||||
ALLOWED_FIELDS = %w[scss embedded_scss head_tag header after_header body_tag footer]
|
ALLOWED_FIELDS = %w[
|
||||||
|
scss
|
||||||
|
embedded_scss
|
||||||
|
embedded_header
|
||||||
|
head_tag
|
||||||
|
header
|
||||||
|
after_header
|
||||||
|
body_tag
|
||||||
|
footer
|
||||||
|
]
|
||||||
|
|
||||||
GITHUB_REGEXP = %r{\Ahttps?://github\.com/}
|
GITHUB_REGEXP = %r{\Ahttps?://github\.com/}
|
||||||
GITHUB_SSH_REGEXP = %r{\Assh://git@github\.com:}
|
GITHUB_SSH_REGEXP = %r{\Assh://git@github\.com:}
|
||||||
|
|
|
@ -337,7 +337,7 @@ class ThemeField < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.html_fields
|
def self.html_fields
|
||||||
@html_fields ||= %w[body_tag head_tag header footer after_header]
|
@html_fields ||= %w[body_tag head_tag header footer after_header embedded_header]
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.scss_fields
|
def self.scss_fields
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
<%= yield :head %>
|
<%= yield :head %>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<%= theme_lookup("embedded_header") %>
|
||||||
<%= yield %>
|
<%= yield %>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -5097,6 +5097,9 @@ en:
|
||||||
embedded_scss:
|
embedded_scss:
|
||||||
text: "Embedded CSS"
|
text: "Embedded CSS"
|
||||||
title: "Enter custom CSS to deliver with embedded version of comments"
|
title: "Enter custom CSS to deliver with embedded version of comments"
|
||||||
|
embedded_header:
|
||||||
|
text: "Embedded Header"
|
||||||
|
title: "Enter HTML to display above the embedded version of comments"
|
||||||
color_definitions:
|
color_definitions:
|
||||||
text: "Color Definitions"
|
text: "Color Definitions"
|
||||||
title: "Enter custom color definitions (advanced users only)"
|
title: "Enter custom color definitions (advanced users only)"
|
||||||
|
|
|
@ -212,6 +212,30 @@ RSpec.describe EmbedController do
|
||||||
expect(response.body).to include(".test-osama-15")
|
expect(response.body).to include(".test-osama-15")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "includes HTML from embedded_header field" do
|
||||||
|
theme = Fabricate(:theme)
|
||||||
|
theme.set_default!
|
||||||
|
|
||||||
|
ThemeField.create!(
|
||||||
|
theme_id: theme.id,
|
||||||
|
name: "embedded_header",
|
||||||
|
target_id: 0,
|
||||||
|
type_id: 0,
|
||||||
|
value: "<strong class='custom-text'>hey there!</strong>\n",
|
||||||
|
)
|
||||||
|
|
||||||
|
topic_embed = Fabricate(:topic_embed, embed_url: embed_url)
|
||||||
|
post = Fabricate(:post, topic: topic_embed.topic)
|
||||||
|
|
||||||
|
get "/embed/comments", params: { embed_url: embed_url }, headers: headers
|
||||||
|
|
||||||
|
html = Nokogiri::HTML5.fragment(response.body)
|
||||||
|
custom_header = html.at(".custom-text")
|
||||||
|
|
||||||
|
expect(custom_header.name).to eq("strong")
|
||||||
|
expect(custom_header.text).to eq("hey there!")
|
||||||
|
end
|
||||||
|
|
||||||
context "with success" do
|
context "with success" do
|
||||||
after do
|
after do
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(200)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user