mirror of
https://github.com/discourse/discourse.git
synced 2025-05-24 13:51:09 +08:00
FEATURE: Embed topics list on remote sites via Javascript API. (#8008)
This adds support for a `<d-topics-list>` tag you can embed in your site that will be rendered as a list of discourse topics. Any attributes on the tag will be passed as filters. For example: `<d-topics-list discourse-url="URL" category="1234">` will filter to category 1234. To use this feature, enable the `embed topics list` site setting. Then on the site you want to embed, include the following javascript: `<script src="http://URL/javascripts/embed-topics.js"></script>` Where `URL` is your discourse forum's URL. Then include the `<d-topics-list discourse-url="URL">` tag in your HTML document and it will be replaced with the list of topics.
This commit is contained in:
@ -70,6 +70,33 @@ describe EmbedController do
|
||||
end
|
||||
end
|
||||
|
||||
context "#topics" do
|
||||
it "raises an error when not enabled" do
|
||||
get '/embed/topics?embed_id=de-1234'
|
||||
expect(response.status).to eq(400)
|
||||
end
|
||||
|
||||
context "when enabled" do
|
||||
before do
|
||||
SiteSetting.embed_topics_list = true
|
||||
end
|
||||
|
||||
it "raises an error with a weird id" do
|
||||
get '/embed/topics?discourse_embed_id=../asdf/-1234', headers: headers
|
||||
expect(response.status).to eq(400)
|
||||
end
|
||||
|
||||
it "returns a list of topics" do
|
||||
topic = Fabricate(:topic)
|
||||
get '/embed/topics?discourse_embed_id=de-1234', headers: headers
|
||||
expect(response.status).to eq(200)
|
||||
expect(response.headers['X-Frame-Options']).to eq("ALLOWALL")
|
||||
expect(response.body).to match("data-embed-id=\"de-1234\"")
|
||||
expect(response.body).to match("data-topic-id=\"#{topic.id}\"")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "with a host" do
|
||||
let!(:embeddable_host) { Fabricate(:embeddable_host) }
|
||||
let(:headers) { { 'REFERER' => embed_url } }
|
||||
|
Reference in New Issue
Block a user