mirror of
https://github.com/iv-org/invidious.git
synced 2026-09-07 09:33:04 -05:00
Link hashtags in video titles
This commit is contained in:
parent
9d1291a0b8
commit
f6e671fae1
@ -3,6 +3,18 @@ require "../spec_helper"
|
|||||||
CONFIG = Config.from_yaml(File.open("config/config.example.yml"))
|
CONFIG = Config.from_yaml(File.open("config/config.example.yml"))
|
||||||
|
|
||||||
Spectator.describe "Helper" do
|
Spectator.describe "Helper" do
|
||||||
|
describe "#parse_video_title" do
|
||||||
|
it "links hashtags in video titles" do
|
||||||
|
expect(parse_video_title("Video title #music"))
|
||||||
|
.to eq(%(Video title <a href="/hashtag/music">#music</a>))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "escapes video titles before linking hashtags" do
|
||||||
|
expect(parse_video_title(%(<b>#music</b>)))
|
||||||
|
.to eq(%(<b><a href="/hashtag/music">#music</a></b>))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "#produce_channel_search_continuation" do
|
describe "#produce_channel_search_continuation" do
|
||||||
it "correctly produces token for searching a specific channel" do
|
it "correctly produces token for searching a specific channel" do
|
||||||
expect(produce_channel_search_continuation("UCXuqSBlHAE6Xw-yeJA0Tunw", "", 100)).to eq("4qmFsgJqEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaIEVnWnpaV0Z5WTJnd0FUZ0JZQUY2QkVkS2IxaTRBUUE9WgCaAilicm93c2UtZmVlZFVDWHVxU0JsSEFFNlh3LXllSkEwVHVud3NlYXJjaA%3D%3D")
|
expect(produce_channel_search_continuation("UCXuqSBlHAE6Xw-yeJA0Tunw", "", 100)).to eq("4qmFsgJqEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaIEVnWnpaV0Z5WTJnd0FUZ0JZQUY2QkVkS2IxaTRBUUE9WgCaAilicm93c2UtZmVlZFVDWHVxU0JsSEFFNlh3LXllSkEwVHVud3NlYXJjaA%3D%3D")
|
||||||
|
|||||||
@ -20,6 +20,16 @@ def elapsed_text(elapsed)
|
|||||||
"#{(millis * 1000).round(2)}µs"
|
"#{(millis * 1000).round(2)}µs"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def parse_video_title(title : String) : String
|
||||||
|
HTML.escape(title).gsub(/(^|[[:space:]])#([A-Za-z0-9_]+)/) do |match|
|
||||||
|
prefix = match.starts_with?("#") ? "" : match[0].to_s
|
||||||
|
hashtag = match[prefix.size + 1..]
|
||||||
|
href = URI.encode_path("/hashtag/#{hashtag}")
|
||||||
|
|
||||||
|
%(#{prefix}<a href="#{href}">##{hashtag}</a>)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def decode_length_seconds(string)
|
def decode_length_seconds(string)
|
||||||
length_seconds = string.gsub(/[^0-9:]/, "")
|
length_seconds = string.gsub(/[^0-9:]/, "")
|
||||||
return 0_i32 if length_seconds.empty?
|
return 0_i32 if length_seconds.empty?
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
<% ucid = video.ucid %>
|
<% ucid = video.ucid %>
|
||||||
<% title = HTML.escape(video.title) %>
|
<% title = HTML.escape(video.title) %>
|
||||||
|
<% title_html = parse_video_title(video.title) %>
|
||||||
<% author = HTML.escape(video.author) %>
|
<% author = HTML.escape(video.author) %>
|
||||||
|
|
||||||
|
|
||||||
@ -77,7 +78,7 @@ we're going to need to do it here in order to allow for translations.
|
|||||||
|
|
||||||
<div class="h-box">
|
<div class="h-box">
|
||||||
<h1>
|
<h1>
|
||||||
<%= title %>
|
<%= title_html %>
|
||||||
<% if params.listen %>
|
<% if params.listen %>
|
||||||
<a title="<%=I18n.translate(locale, "Video mode")%>" id="link-iv-listen" data-base-url="/watch?<%= env.params.query %>&listen=0" href="/watch?<%= env.params.query %>&listen=0">
|
<a title="<%=I18n.translate(locale, "Video mode")%>" id="link-iv-listen" data-base-url="/watch?<%= env.params.query %>&listen=0" href="/watch?<%= env.params.query %>&listen=0">
|
||||||
<i class="icon ion-ios-videocam"></i>
|
<i class="icon ion-ios-videocam"></i>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user