Spin parts into components

This commit is contained in:
Omar Roth 2018-06-01 17:26:00 -05:00
parent a2e23f7022
commit e865a801aa
7 changed files with 54 additions and 73 deletions

View File

@ -13,6 +13,10 @@ macro templated(filename)
render "src/views/#{{{filename}}}.ecr", "src/views/layout.ecr"
end
macro rendered(filename)
render "src/views/#{{{filename}}}.ecr"
end
class Config
YAML.mapping({
crawl_threads: Int32,

View File

@ -386,34 +386,32 @@ get "/search" do |env|
html = client.get("/results?q=#{URI.escape(query)}&page=#{page}&sp=EgIQAVAU").body
html = XML.parse_html(html)
videos = Array(Hash(String, String)).new
videos = [] of Video
html.xpath_nodes(%q(//ol[@class="item-section"]/li)).each do |item|
root = item.xpath_node(%q(div[contains(@class,"yt-lockup-video")]/div))
if root
video = {} of String => String
id = root.xpath_node(%q(div[contains(@class,"yt-lockup-thumbnail")]/a/@href))
if id
id = id.content.lchop("/watch?v=")
end
id ||= ""
video["id"] = id
title = root.xpath_node(%q(div[@class="yt-lockup-content"]/h3/a))
if title
video["title"] = title.content
title = title.content
end
video["title"] ||= ""
title ||= ""
author = root.xpath_node(%q(div[@class="yt-lockup-content"]/div/a))
if author
video["author"] = author.content
video["ucid_url"] = author["href"]
ucid = author["href"].rpartition("/")[-1]
author = author.content
end
video["author"] ||= ""
video["ucid_url"] ||= ""
author ||= ""
ucid ||= ""
video = Video.new(id, HTTP::Params.parse(""), Time.now, title, 0_i64, 0, 0, 0.0, Time.now, "", nil, author, ucid)
videos << video
end
end

View File

@ -0,0 +1,14 @@
<div class="pure-u-1 pure-u-md-1-4">
<div class="h-box">
<a style="width:100%;" href="/watch?v=<%= video.id %>">
<img style="width:100%;" src="https://i.ytimg.com/vi/<%= video.id %>/mqdefault.jpg"/>
<p style="height:100%"><%= video.title %></p>
</a>
<p>
<b><a style="width:100%;" href="/channel/<%= video.ucid %>"><%= video.author %></a></b>
</p>
<p>
<h5>Shared <%= video.published.to_s("%B %-d, %Y at %r UTC") %></h5>
</p>
</div>
</div>

View File

@ -0,0 +1,11 @@
<div class="pure-u-1 pure-u-md-1-4">
<div class="h-box">
<a style="width:100%;" href="/watch?v=<%= video.id %>">
<img style="width:100%;" src="https://i.ytimg.com/vi/<%= video.id %>/mqdefault.jpg"/>
<p><%= video.title %></p>
</a>
<p>
<b><a style="width:100%;" href="/channel/<%= video.ucid %>"><%= video.author %></a></b>
</p>
</div>
</div>

View File

@ -3,19 +3,9 @@
<% end %>
<% top_videos.each_slice(4) do |slice| %>
<div class="pure-g">
<% slice.each do |video| %>
<div class="pure-u-1 pure-u-md-1-4">
<div class="h-box">
<a style="width:100%;" href="/watch?v=<%= video.id %>">
<img style="width:100%;" src="https://i.ytimg.com/vi/<%= video.id %>/mqdefault.jpg"/>
<p><%= video.title %></p>
</a>
<p>
<b><a style="width:100%;" href="https://youtube.com/channel/<%= video.info["ucid"] %>"><%= video.info["author"] %></a></b>
</p>
</div>
<div class="pure-g">
<% slice.each do |video| %>
<%= rendered "components/video" %>
<% end %>
</div>
<% end %>
</div>
<% end %>

View File

@ -5,17 +5,7 @@
<% videos.each_slice(4) do |slice| %>
<div class="pure-g">
<% slice.each do |video| %>
<div class="pure-u-1 pure-u-md-1-4">
<div class="h-box">
<a style="width:100%;" href="/watch?v=<%= video["id"] %>">
<img style="width:100%;" src="https://i.ytimg.com/vi/<%= video["id"] %>/mqdefault.jpg"/>
<p><%= video["title"] %></p>
</a>
<p>
<b><a style="width:100%;" href="https://youtube.com<%= video["ucid_url"]%>"><%= video["author"] %></a></b>
</p>
</div>
</div>
<%= rendered "components/video" %>
<% end %>
</div>
<% end %>

View File

@ -3,48 +3,22 @@
<% end %>
<% if !notifications.empty? %>
<% notifications.each_slice(4) do |slice| %>
<div class="pure-g">
<% slice.each do |video| %>
<div class="pure-u-1 pure-u-md-1-4">
<div class="h-box">
<a style="width:100%;" href="/watch?v=<%= video.id %>">
<img style="width:100%;" src="https://i.ytimg.com/vi/<%= video.id %>/mqdefault.jpg"/>
<p style="height:100%"><%= video.title %></p>
</a>
<p>
<b><a style="width:100%;" href="https://youtube.com/channel/<%= video.ucid %>"><%= video.author %></a></b>
</p>
<p>
<h5>Shared <%= video.published.to_s("%B %-d, %Y at %r UTC") %></h5>
</p>
<% notifications.each_slice(4) do |slice| %>
<div class="pure-g">
<% slice.each do |video| %>
<%= rendered "components/subscription_video" %>
<% end %>
</div>
</div>
<% end %>
</div>
<% end %>
<hr style="margin-left:1em; margin-right:1em;">
<hr style="margin-left:1em; margin-right:1em;">
<% end %>
<% videos.each_slice(4) do |slice| %>
<div class="pure-g">
<% slice.each do |video| %>
<div class="pure-u-1 pure-u-md-1-4">
<div class="h-box">
<a style="width:100%;" href="/watch?v=<%= video.id %>">
<img style="width:100%;" src="https://i.ytimg.com/vi/<%= video.id %>/mqdefault.jpg"/>
<p style="height:100%"><%= video.title %></p>
</a>
<p>
<b><a style="width:100%;" href="https://youtube.com/channel/<%= video.ucid %>"><%= video.author %></a></b>
</p>
<p>
<h5>Shared <%= video.published.to_s("%B %-d, %Y at %r UTC") %></h5>
</p>
</div>
<div class="pure-g">
<% slice.each do |video| %>
<%= rendered "components/subscription_video" %>
<% end %>
</div>
<% end %>
</div>
<% end %>
<div class="pure-g">