mirror of
https://github.com/hkalexling/Mango.git
synced 2025-08-02 19:05:32 -04:00
Add the /tags/:tag page
This commit is contained in:
parent
c6ee5409f8
commit
1eace2c64c
@ -68,29 +68,8 @@ class Library
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# This is a hack to bypass a compiler bug
|
# Helper function from src/util/util.cr
|
||||||
ary = titles
|
sort_titles titles, opt.not_nil!, username
|
||||||
|
|
||||||
case opt.not_nil!.method
|
|
||||||
when .time_modified?
|
|
||||||
ary.sort! { |a, b| (a.mtime <=> b.mtime).or \
|
|
||||||
compare_numerically a.title, b.title }
|
|
||||||
when .progress?
|
|
||||||
ary.sort! do |a, b|
|
|
||||||
(a.load_percentage(username) <=> b.load_percentage(username)).or \
|
|
||||||
compare_numerically a.title, b.title
|
|
||||||
end
|
|
||||||
else
|
|
||||||
unless opt.method.auto?
|
|
||||||
Logger.warn "Unknown sorting method #{opt.not_nil!.method}. Using " \
|
|
||||||
"Auto instead"
|
|
||||||
end
|
|
||||||
ary.sort! { |a, b| compare_numerically a.title, b.title }
|
|
||||||
end
|
|
||||||
|
|
||||||
ary.reverse! unless opt.not_nil!.ascend
|
|
||||||
|
|
||||||
ary
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def deep_titles
|
def deep_titles
|
||||||
|
@ -114,6 +114,31 @@ class MainRouter < Router
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
get "/tags/:tag" do |env|
|
||||||
|
begin
|
||||||
|
username = get_username env
|
||||||
|
tag = env.params.url["tag"]
|
||||||
|
|
||||||
|
sort_opt = SortOptions.new
|
||||||
|
get_sort_opt
|
||||||
|
|
||||||
|
title_ids = Storage.default.get_tag_titles tag
|
||||||
|
|
||||||
|
raise "Tag #{tag} not found" if title_ids.empty?
|
||||||
|
|
||||||
|
titles = title_ids.map { |id| @context.library.get_title id }
|
||||||
|
.select Title
|
||||||
|
|
||||||
|
titles = sort_titles titles, sort_opt, username
|
||||||
|
percentage = titles.map &.load_percentage username
|
||||||
|
|
||||||
|
layout "tags"
|
||||||
|
rescue e
|
||||||
|
@context.error e
|
||||||
|
env.response.status_code = 404
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
get "/api" do |env|
|
get "/api" do |env|
|
||||||
render "src/views/api.html.ecr"
|
render "src/views/api.html.ecr"
|
||||||
end
|
end
|
||||||
|
@ -67,3 +67,28 @@ def env_is_true?(key : String) : Bool
|
|||||||
return false unless val
|
return false unless val
|
||||||
val.downcase.in? "1", "true"
|
val.downcase.in? "1", "true"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sort_titles(titles : Array(Title), opt : SortOptions, username : String)
|
||||||
|
ary = titles
|
||||||
|
|
||||||
|
case opt.method
|
||||||
|
when .time_modified?
|
||||||
|
ary.sort! { |a, b| (a.mtime <=> b.mtime).or \
|
||||||
|
compare_numerically a.title, b.title }
|
||||||
|
when .progress?
|
||||||
|
ary.sort! do |a, b|
|
||||||
|
(a.load_percentage(username) <=> b.load_percentage(username)).or \
|
||||||
|
compare_numerically a.title, b.title
|
||||||
|
end
|
||||||
|
else
|
||||||
|
unless opt.method.auto?
|
||||||
|
Logger.warn "Unknown sorting method #{opt.not_nil!.method}. Using " \
|
||||||
|
"Auto instead"
|
||||||
|
end
|
||||||
|
ary.sort! { |a, b| compare_numerically a.title, b.title }
|
||||||
|
end
|
||||||
|
|
||||||
|
ary.reverse! unless opt.not_nil!.ascend
|
||||||
|
|
||||||
|
ary
|
||||||
|
end
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<span style="position:relative; bottom:3px; margin-right:5px;">Tags: </span>
|
<span style="position:relative; bottom:3px; margin-right:5px;">Tags: </span>
|
||||||
<template x-for="tag in tags" :key="tag">
|
<template x-for="tag in tags" :key="tag">
|
||||||
<span class="uk-label uk-label-primary" style="padding:2px 5px; margin:0 5px 5px 5px; text-transform:none;">
|
<span class="uk-label uk-label-primary" style="padding:2px 5px; margin:0 5px 5px 5px; text-transform:none;">
|
||||||
<a class="uk-link-reset" @click="rm($event)" :id="`${tag}-rm`"><span uk-icon="close" style="margin-right: 5px; position: relative; bottom: 1.5px;"></span></a><a class="uk-link-reset" x-text="tag" :href="`<%= base_url %>tag/${tag}`"></a>
|
<a class="uk-link-reset" @click="rm($event)" :id="`${tag}-rm`"><span uk-icon="close" style="margin-right: 5px; position: relative; bottom: 1.5px;"></span></a><a class="uk-link-reset" x-text="tag" :href="`<%= base_url %>tags/${tag}`"></a>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<a class="uk-link-reset" style="position:relative; bottom:3px;" :uk-icon="inputShown ? 'close' : 'plus'" @click="toggleInput($nextTick)"></a>
|
<a class="uk-link-reset" style="position:relative; bottom:3px;" :uk-icon="inputShown ? 'close' : 'plus'" @click="toggleInput($nextTick)"></a>
|
||||||
|
30
src/views/tags.html.ecr
Normal file
30
src/views/tags.html.ecr
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<h2 class=uk-title>Tag: <%= tag %></h2>
|
||||||
|
<p class="uk-text-meta"><%= titles.size %> titles tagged</p>
|
||||||
|
<div class="uk-grid-small" uk-grid>
|
||||||
|
<div class="uk-margin-bottom uk-width-3-4@s">
|
||||||
|
<form class="uk-search uk-search-default">
|
||||||
|
<span uk-search-icon></span>
|
||||||
|
<input class="uk-search-input" type="search" placeholder="Search">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="uk-margin-bottom uk-width-1-4@s">
|
||||||
|
<% hash = {
|
||||||
|
"auto" => "Auto",
|
||||||
|
"time_modified" => "Date Modified",
|
||||||
|
"progress" => "Progress"
|
||||||
|
} %>
|
||||||
|
<%= render_component "sort-form" %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="uk-child-width-1-4@m uk-child-width-1-2" uk-grid>
|
||||||
|
<% titles.each_with_index do |item, i| %>
|
||||||
|
<% progress = percentage[i] %>
|
||||||
|
<%= render_component "card" %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<% content_for "script" do %>
|
||||||
|
<%= render_component "dots-scripts" %>
|
||||||
|
<script src="<%= base_url %>js/search.js"></script>
|
||||||
|
<script src="<%= base_url %>js/sort-items.js"></script>
|
||||||
|
<% end %>
|
Loading…
x
Reference in New Issue
Block a user