diff --git a/app/assets/stylesheets/ltags/LiquidTags.scss b/app/assets/stylesheets/ltags/LiquidTags.scss index ab8f1fb83..50fe6850d 100644 --- a/app/assets/stylesheets/ltags/LiquidTags.scss +++ b/app/assets/stylesheets/ltags/LiquidTags.scss @@ -11,6 +11,7 @@ @import 'RedditTag'; @import 'ReplitTag'; @import 'StackexchangeTag'; +@import 'SpeakerdeckTag'; @import 'TagTag'; @import 'TweetTag'; @import 'TwitterTimelineTag'; diff --git a/app/assets/stylesheets/ltags/SpeakerdeckTag.scss b/app/assets/stylesheets/ltags/SpeakerdeckTag.scss new file mode 100644 index 000000000..2a1e01497 --- /dev/null +++ b/app/assets/stylesheets/ltags/SpeakerdeckTag.scss @@ -0,0 +1,10 @@ +.ltag_speakerdeck { + border: 0px; + background: padding-box padding-box rgba(0, 0, 0, 0.1); + margin: 0px; + padding: 0px; + border-radius: 6px; + box-shadow: rgba(0, 0, 0, 0.2) 0px 5px 40px; + width: 560px; + height: 420px; +} diff --git a/app/liquid_tags/speakerdeck_tag.rb b/app/liquid_tags/speakerdeck_tag.rb index 57b83ac99..601d710c0 100644 --- a/app/liquid_tags/speakerdeck_tag.rb +++ b/app/liquid_tags/speakerdeck_tag.rb @@ -1,9 +1,14 @@ class SpeakerdeckTag < LiquidTagBase PARTIAL = "liquids/speakerdeck".freeze + REGISTRY_REGEXP = %r{https://speakerdeck.com/player/(?\w{,32})} + VALID_ID_REGEXP = /\A(?\w{,32})\Z/ + REGEXP_OPTIONS = [REGISTRY_REGEXP, VALID_ID_REGEXP].freeze - def initialize(_tag_name, id, _parse_context) + def initialize(_tag_name, input, _parse_context) super - @id = parse_id(id) + + stripped_input = strip_tags(input) + @id = parse_input(stripped_input) end def render(_context) @@ -17,16 +22,14 @@ class SpeakerdeckTag < LiquidTagBase private - def parse_id(input) - input_no_space = input.delete(" ") - raise StandardError, I18n.t("liquid_tags.speakerdeck_tag.invalid_speakerdeck_id") unless valid_id?(input_no_space) + def parse_input(input) + match = pattern_match_for(input, REGEXP_OPTIONS) + raise StandardError, I18n.t("liquid_tags.speakerdeck_tag.invalid_speakerdeck_id") unless match - input_no_space - end - - def valid_id?(id) - id =~ /\A[a-z\d]{32}\Z/i + match[:id] end end Liquid::Template.register_tag("speakerdeck", SpeakerdeckTag) + +UnifiedEmbed.register(SpeakerdeckTag, regexp: SpeakerdeckTag::REGISTRY_REGEXP) diff --git a/app/views/liquids/_speakerdeck.html.erb b/app/views/liquids/_speakerdeck.html.erb index 18336e36b..b56001f4c 100644 --- a/app/views/liquids/_speakerdeck.html.erb +++ b/app/views/liquids/_speakerdeck.html.erb @@ -1,21 +1,9 @@ -<%# Padding bottom set for 16:9 aspect ratio https://benmarshall.me/responsive-iframes/ %> -
- -
+ diff --git a/spec/liquid_tags/unified_embed/registry_spec.rb b/spec/liquid_tags/unified_embed/registry_spec.rb index 91ea76b4b..3e1026b5d 100644 --- a/spec/liquid_tags/unified_embed/registry_spec.rb +++ b/spec/liquid_tags/unified_embed/registry_spec.rb @@ -183,6 +183,11 @@ RSpec.describe UnifiedEmbed::Registry do .to eq(SoundcloudTag) end + it "returns SpeakerdeckTag for a speakerdeck url" do + expect(described_class.find_liquid_tag_for(link: "https://speakerdeck.com/player/87fa761026bf013092b722000a1d8877")) + .to eq(SpeakerdeckTag) + end + it "returns SpotifyTag for a valid spotify url" do valid_spotify_url_formats.each do |url| expect(described_class.find_liquid_tag_for(link: url))