diff --git a/lib/qiita/markdown.rb b/lib/qiita/markdown.rb index 8c78cf2..70be420 100644 --- a/lib/qiita/markdown.rb +++ b/lib/qiita/markdown.rb @@ -18,6 +18,7 @@ require "qiita/markdown/embed/speeker_deck" require "qiita/markdown/embed/docswell" require "qiita/markdown/embed/figma" +require "qiita/markdown/embed/stack_blitz" require "qiita/markdown/transformers/filter_attributes" require "qiita/markdown/transformers/filter_script" require "qiita/markdown/transformers/filter_iframe" diff --git a/lib/qiita/markdown/embed/stack_blitz.rb b/lib/qiita/markdown/embed/stack_blitz.rb new file mode 100644 index 0000000..ab1dd2f --- /dev/null +++ b/lib/qiita/markdown/embed/stack_blitz.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Qiita + module Markdown + module Embed + module StackBlitz + SCRIPT_HOST = "stackblitz.com" + end + end + end +end diff --git a/lib/qiita/markdown/transformers/filter_iframe.rb b/lib/qiita/markdown/transformers/filter_iframe.rb index 02920df..cc0aa30 100644 --- a/lib/qiita/markdown/transformers/filter_iframe.rb +++ b/lib/qiita/markdown/transformers/filter_iframe.rb @@ -11,6 +11,7 @@ class FilterIframe Embed::Docswell::SCRIPT_HOSTS, Embed::Figma::SCRIPT_HOST, Embed::GoogleDrive::SCRIPT_HOST, + Embed::StackBlitz::SCRIPT_HOST, ].flatten.freeze def self.call(**args) diff --git a/spec/qiita/markdown/processor_spec.rb b/spec/qiita/markdown/processor_spec.rb index 30df7b0..02b7d22 100644 --- a/spec/qiita/markdown/processor_spec.rb +++ b/spec/qiita/markdown/processor_spec.rb @@ -1747,6 +1747,43 @@ end end + context "with HTML embed code for StackBlitz" do + shared_examples "embed code stackblitz example" do + let(:markdown) do + <<~MARKDOWN + + MARKDOWN + end + let(:url) { "#{scheme}//stackblitz.com/embed/example" } + + if allowed + it "does not sanitize embed code" do + should eq <<~HTML + + HTML + end + else + it "forces width attribute on iframe" do + should eq <<~HTML + + HTML + end + end + end + + context "with scheme" do + let(:scheme) { "https:" } + + include_examples "embed code stackblitz example" + end + + context "without scheme" do + let(:scheme) { "" } + + include_examples "embed code stackblitz example" + end + end + context "with embed code for Tweet" do let(:markdown) do <<-MARKDOWN.strip_heredoc