diff options
| author | TheFrenchGhosty <47571719+TheFrenchGhosty@users.noreply.github.com> | 2021-01-20 12:56:41 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-20 12:56:41 +0000 |
| commit | 1ad4685bb7f1cf0c344408ef01f528f4926f2e94 (patch) | |
| tree | 9e6300a44aa509433c42c55fc703c4ce1d4e9163 /src | |
| parent | d8629e61d615e2c0c7fc4d4ee1d88324170b2cb8 (diff) | |
| parent | 15ba3325d9eee4e8b30828bf6d239f4999a36e0b (diff) | |
| download | invidious-1ad4685bb7f1cf0c344408ef01f528f4926f2e94.tar.gz invidious-1ad4685bb7f1cf0c344408ef01f528f4926f2e94.tar.bz2 invidious-1ad4685bb7f1cf0c344408ef01f528f4926f2e94.zip | |
Merge pull request #1629 from tenpura-shrimp/searchui
Add ui for search sort and filter
Diffstat (limited to 'src')
| -rw-r--r-- | src/invidious/routes/playlists.cr | 2 | ||||
| -rw-r--r-- | src/invidious/routes/search.cr | 8 | ||||
| -rw-r--r-- | src/invidious/search.cr | 2 | ||||
| -rw-r--r-- | src/invidious/views/search.ecr | 97 |
4 files changed, 106 insertions, 3 deletions
diff --git a/src/invidious/routes/playlists.cr b/src/invidious/routes/playlists.cr index 6c899054..c5023c08 100644 --- a/src/invidious/routes/playlists.cr +++ b/src/invidious/routes/playlists.cr @@ -267,7 +267,7 @@ class Invidious::Routes::Playlists < Invidious::Routes::BaseRoute query = env.params.query["q"]? if query begin - search_query, count, items = process_search_query(query, page, user, region: nil) + search_query, count, items, operators = process_search_query(query, page, user, region: nil) videos = items.select { |item| item.is_a? SearchVideo }.map { |item| item.as(SearchVideo) } rescue ex videos = [] of SearchVideo diff --git a/src/invidious/routes/search.cr b/src/invidious/routes/search.cr index 48446161..a993a17a 100644 --- a/src/invidious/routes/search.cr +++ b/src/invidious/routes/search.cr @@ -48,11 +48,17 @@ class Invidious::Routes::Search < Invidious::Routes::BaseRoute user = env.get? "user" begin - search_query, count, videos = process_search_query(query, page, user, region: nil) + search_query, count, videos, operators = process_search_query(query, page, user, region: nil) rescue ex return error_template(500, ex) end + operator_hash = {} of String => String + operators.each do |operator| + key, value = operator.downcase.split(":") + operator_hash[key] = value + end + env.set "search", query templated "search" end diff --git a/src/invidious/search.cr b/src/invidious/search.cr index 85fd024a..1c4bc74e 100644 --- a/src/invidious/search.cr +++ b/src/invidious/search.cr @@ -445,5 +445,5 @@ def process_search_query(query, page, user, region) count, items = search(search_query, page, search_params, region).as(Tuple) end - {search_query, count, items} + {search_query, count, items, operators} end diff --git a/src/invidious/views/search.ecr b/src/invidious/views/search.ecr index bc13b7ea..3fa9242b 100644 --- a/src/invidious/views/search.ecr +++ b/src/invidious/views/search.ecr @@ -2,6 +2,102 @@ <title><%= search_query.not_nil!.size > 30 ? HTML.escape(query.not_nil![0,30].rstrip(".") + "...") : HTML.escape(query.not_nil!) %> - Invidious</title> <% end %> +<h3> + <a id="togglefilters" href="javascript:void(0)">[ + ]</a> + <%= translate(locale, "filter") %> +</h3> + +<noscript> + <style> + #filters { + display: flex; + } + </style> +</noscript> +<div id="filters" class="pure-g h-box"> + <div class="pure-u-1-3 pure-u-md-1-5"> + <b><%= translate(locale, "date") %></b> + <hr/> + <% ["hour", "today", "week", "month", "year"].each do |date| %> + <div class="pure-u-1 pure-md-1-5"> + <% if operator_hash.fetch("date", "all") == date %> + <b><%= translate(locale, date) %></b> + <% else %> + <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/ ?date:[a-z]+/, "") + " date:" + date) %>&page=<%= page %>"> + <%= translate(locale, date) %> + </a> + <% end %> + </div> + <% end %> + </div> + <div class="pure-u-1-3 pure-u-md-1-5"> + <b><%= translate(locale, "content_type") %></b> + <hr/> + <% ["video", "channel", "playlist", "movie", "show"].each do |content_type| %> + <div class="pure-u-1 pure-md-1-5"> + <% if operator_hash.fetch("content_type", "all") == content_type %> + <b><%= translate(locale, content_type) %></b> + <% else %> + <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/ ?content_type:[a-z]+/, "") + " content_type:" + content_type) %>&page=<%= page %>"> + <%= translate(locale, content_type) %> + </a> + <% end %> + </div> + <% end %> + </div> + <div class="pure-u-1-3 pure-u-md-1-5"> + <b><%= translate(locale, "duration") %></b> + <hr/> + <% ["short", "long"].each do |duration| %> + <div class="pure-u-1 pure-md-1-5"> + <% if operator_hash.fetch("duration", "all") == duration %> + <b><%= translate(locale, duration) %></b> + <% else %> + <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/ ?duration:[a-z]+/, "") + " duration:" + duration) %>&page=<%= page %>"> + <%= translate(locale, duration) %> + </a> + <% end %> + </div> + <% end %> + </div> + <div class="pure-u-1-3 pure-u-md-1-5"> + <b><%= translate(locale, "features") %></b> + <hr/> + <% ["hd", "subtitles", "creative_commons", "3d", "live", "purchased", "4k", "360", "location", "hdr"].each do |feature| %> + <div class="pure-u-1 pure-md-1-5"> + <% if operator_hash.fetch("features", "all").includes?(feature) %> + <b><%= translate(locale, feature) %></b> + <% elsif operator_hash.has_key?("features") %> + <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/features:/, "features:" + feature + ",")) %>&page=<%= page %>"> + <%= translate(locale, feature) %> + </a> + <% else %> + <a href="/search?q=<%= HTML.escape(query.not_nil! + " features:" + feature) %>&page=<%= page %>"> + <%= translate(locale, feature) %> + </a> + <% end %> + </div> + <% end %> + </div> + <div class="pure-u-1-3 pure-u-md-1-5"> + <b><%= translate(locale, "sort") %></b> + <hr/> + <% ["relevance", "rating", "date", "views"].each do |sort| %> + <div class="pure-u-1 pure-md-1-5"> + <% if operator_hash.fetch("sort", "relevance") == sort %> + <b><%= translate(locale, sort) %></b> + <% else %> + <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/ ?sort:[a-z]+/, "") + " sort:" + sort) %>&page=<%= page %>"> + <%= translate(locale, sort) %> + </a> + <% end %> + </div> + <% end %> + </div> +</div> + +<hr/> + <div class="pure-g h-box v-box"> <div class="pure-u-1 pure-u-lg-1-5"> <% if page > 1 %> @@ -45,3 +141,4 @@ <% end %> </div> </div> +<script src="/js/search.js?v=<%= ASSET_COMMIT %>"></script>
\ No newline at end of file |
