mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-28 13:57:59 +01:00
274 lines
9.4 KiB
Text
274 lines
9.4 KiB
Text
|
<h1>
|
||
|
Search
|
||
|
</h1>
|
||
|
<%= form_for :search, ~p"/search", [id: "searchform", method: "get", class: "js-search-form", enforce_utf8: false], fn f -> %>
|
||
|
<%= text_input(f, :q, class: "input input--wide js-search-field", placeholder: "Search terms are chained with commas", autocapitalize: "none", name: "q", value: @conn.params["q"]) %>
|
||
|
<div class="block">
|
||
|
<div class="block__header flex">
|
||
|
<a data-search-prepend="-">
|
||
|
NOT
|
||
|
</a>
|
||
|
<div class="dropdown block__header__dropdown-tab">
|
||
|
<a>
|
||
|
Search terms
|
||
|
<span data-click-preventdefault="true">
|
||
|
<i class="fa fa-caret-down"></i>
|
||
|
</span>
|
||
|
</a>
|
||
|
<div class="dropdown__content">
|
||
|
<a data-search-add="score.gte:100" data-search-select-last="3" data-search-show-help="numeric">
|
||
|
Score
|
||
|
</a>
|
||
|
<a data-search-add="created_at.lte:3 years ago" data-search-select-last="11" data-search-show-help="date">
|
||
|
Created at
|
||
|
</a>
|
||
|
<a data-search-add="id.lte:10" data-search-select-last="2" data-search-show-help="numeric">
|
||
|
Numeric ID
|
||
|
</a>
|
||
|
<a data-search-add="faves.gte:100" data-search-select-last="3" data-search-show-help="numeric">
|
||
|
Number of faves
|
||
|
</a>
|
||
|
<a data-search-add="upvotes.gte:100" data-search-select-last="3" data-search-show-help="numeric">
|
||
|
Number of upvotes
|
||
|
</a>
|
||
|
<a data-search-add="downvotes.gte:100" data-search-select-last="3" data-search-show-help="numeric">
|
||
|
Number of downvotes
|
||
|
</a>
|
||
|
<a data-search-add="comment_count.gt:20" data-search-select-last="2" data-search-show-help="numeric">
|
||
|
Number of comments
|
||
|
</a>
|
||
|
<a data-search-add="uploader:k_a" data-search-select-last="3" data-search-show-help="literal">
|
||
|
Uploader
|
||
|
</a>
|
||
|
<a data-search-add="original_format:gif" data-search-select-last="3" data-search-show-help="literal">
|
||
|
File extension
|
||
|
</a>
|
||
|
<a data-search-add="file_name:tumblr_*" data-search-select-last="8" data-search-show-help="literal">
|
||
|
Original file name
|
||
|
</a>
|
||
|
<a data-search-add="mime_type:image/jpeg" data-search-select-last="10" data-search-show-help="literal">
|
||
|
MIME type
|
||
|
</a>
|
||
|
<a data-search-add="source_url:*deviantart.com*" data-search-select-last="16" data-search-show-help="literal">
|
||
|
Image source URL
|
||
|
</a>
|
||
|
<a data-search-add="width:1920" data-search-select-last="4" data-search-show-help="numeric">
|
||
|
Image width
|
||
|
</a>
|
||
|
<a data-search-add="height:1080" data-search-select-last="4" data-search-show-help="numeric">
|
||
|
Image height
|
||
|
</a>
|
||
|
<a data-search-add="aspect_ratio:1" data-search-select-last="1" data-search-show-help="numeric">
|
||
|
Aspect ratio
|
||
|
</a>
|
||
|
<a data-search-add="animated:false" data-search-select-last="5" data-search-show-help="boolean">
|
||
|
Animated
|
||
|
</a>
|
||
|
<a data-search-add="duration:10" data-search-select-last="2" data-search-show-help="numeric">
|
||
|
Duration (seconds)
|
||
|
</a>
|
||
|
<a data-search-add="pixels.gte:5000000" data-search-select-last="7" data-search-show-help="numeric">
|
||
|
Pixels
|
||
|
</a>
|
||
|
<a data-search-add="size.lt:1048576" data-search-select-last="7" data-search-show-help="numeric">
|
||
|
File size (bytes)
|
||
|
</a>
|
||
|
</div>
|
||
|
</div>
|
||
|
<%= if @conn.assigns.current_user do %>
|
||
|
<div class="dropdown block__header__dropdown-tab">
|
||
|
<a>
|
||
|
Belonging to…
|
||
|
<span data-click-preventdefault="true">
|
||
|
<i class="fa fa-caret-down"></i>
|
||
|
</span>
|
||
|
</a>
|
||
|
<div class="dropdown__content">
|
||
|
<a data-search-add="my:faves" data-search-show-help=" ">
|
||
|
My favorites
|
||
|
</a>
|
||
|
<a data-search-add="my:upvotes" data-search-show-help=" ">
|
||
|
My upvotes
|
||
|
</a>
|
||
|
<a data-search-add="my:uploads" data-search-show-help=" ">
|
||
|
My uploads
|
||
|
</a>
|
||
|
<a data-search-add="my:watched" data-search-show-help=" ">
|
||
|
My watched tags
|
||
|
</a>
|
||
|
</div>
|
||
|
</div>
|
||
|
<% end %>
|
||
|
<div class="flex__right">
|
||
|
<a data-click-toggle="#js-search-tags" href="#">
|
||
|
Quick tags
|
||
|
</a>
|
||
|
<a href="/pages/search_syntax">
|
||
|
Help
|
||
|
</a>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="block__content">
|
||
|
<div class="hidden walloftext" data-search-help="boolean">
|
||
|
<strong class="js-search-help-subject"></strong>
|
||
|
is a Boolean-valued field. It only accepts the values
|
||
|
<code>
|
||
|
true
|
||
|
</code>
|
||
|
and
|
||
|
<code>
|
||
|
false
|
||
|
</code>
|
||
|
.
|
||
|
<br />
|
||
|
<br />
|
||
|
<em>
|
||
|
Example:
|
||
|
</em>
|
||
|
to find images which are not animated, you would use
|
||
|
<code>
|
||
|
animated:false
|
||
|
</code>
|
||
|
.
|
||
|
</div>
|
||
|
<div class="hidden walloftext" data-search-help="numeric">
|
||
|
<strong class="js-search-help-subject"></strong>
|
||
|
is a numerical range field. Four qualifiers,
|
||
|
<code>
|
||
|
gte
|
||
|
</code>
|
||
|
(greater than or equal),
|
||
|
<code>
|
||
|
lte
|
||
|
</code>
|
||
|
(less than or equal),
|
||
|
<code>
|
||
|
gt
|
||
|
</code>
|
||
|
(greater than), and
|
||
|
<code>
|
||
|
lt
|
||
|
</code>
|
||
|
(less than), can be applied to the desired value.
|
||
|
<br />
|
||
|
<br />
|
||
|
<em>
|
||
|
Example:
|
||
|
</em>
|
||
|
to find images with a score greater than 100, you would use
|
||
|
<code>
|
||
|
score.gt:100
|
||
|
</code>
|
||
|
.
|
||
|
</div>
|
||
|
<div class="hidden walloftext" data-search-help="date">
|
||
|
<strong class="js-search-help-subject"></strong>
|
||
|
is a date/time field. It accepts a
|
||
|
<a href="/pages/search_syntax#date-range">
|
||
|
tweaked subset of the ISO 8601 standard
|
||
|
</a>
|
||
|
, as well as relative dates
|
||
|
<code>
|
||
|
(X minutes/hours/days/months/years ago)
|
||
|
</code>
|
||
|
. Four qualifiers,
|
||
|
<code>
|
||
|
gte
|
||
|
</code>
|
||
|
(greater than or equal),
|
||
|
<code>
|
||
|
lte
|
||
|
</code>
|
||
|
(less than or equal),
|
||
|
<code>
|
||
|
gt
|
||
|
</code>
|
||
|
(greater than), and
|
||
|
<code>
|
||
|
lt
|
||
|
</code>
|
||
|
(less than), can be applied to the desired value.
|
||
|
<br />
|
||
|
<br />
|
||
|
<em>
|
||
|
Example:
|
||
|
</em>
|
||
|
to find images created before 2013, you would use
|
||
|
<code>
|
||
|
created_at.lt:2013
|
||
|
</code>
|
||
|
.
|
||
|
</div>
|
||
|
<div class="hidden walloftext" data-search-help="literal">
|
||
|
<strong class="js-search-help-subject"></strong>
|
||
|
is a literal field. You can apply apply a wildcard
|
||
|
<code>
|
||
|
*
|
||
|
</code>
|
||
|
as a substitute for zero or more characters.
|
||
|
<br />
|
||
|
<br />
|
||
|
<em>
|
||
|
Example:
|
||
|
</em>
|
||
|
to find images from DeviantArt, you would use
|
||
|
<code>
|
||
|
source_url:*deviantart.com*
|
||
|
</code>
|
||
|
.
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="hidden" id="js-search-tags">
|
||
|
<div class="block js-tagtable" data-target=".js-search-field">
|
||
|
<%= PhilomenaWeb.TagView.quick_tags(@conn) %>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="field field--inline flex-wrap">
|
||
|
<%= submit("Search", class: "button button--state-primary") %>
|
||
|
<% # = submit_tag "I'm Feeling Poni", class: 'button button--separate-left spacing-right', name: 'random_image' %>
|
||
|
<%
|
||
|
random_is_selected = to_string(@conn.params["sf"]) =~ ~r/\Arandom(:\d+)?\z/
|
||
|
|
||
|
random_seed =
|
||
|
if random_is_selected do
|
||
|
@conn.params["sf"]
|
||
|
else
|
||
|
"random:#{:rand.uniform(4_294_967_296)}"
|
||
|
end
|
||
|
|
||
|
sort_fields = [
|
||
|
"Sort by initial post date": :first_seen_at,
|
||
|
"Sort by image ID": :id,
|
||
|
"Sort by last modification date": :updated_at,
|
||
|
"Sort by aspect ratio": :aspect_ratio,
|
||
|
"Sort by fave count": :faves,
|
||
|
"Sort by upvotes": :upvotes,
|
||
|
"Sort by downvotes": :downvotes,
|
||
|
"Sort by score": :score,
|
||
|
"Sort by Wilson score": :wilson_score,
|
||
|
"Sort by relevance": :_score,
|
||
|
"Sort by width": :width,
|
||
|
"Sort by height": :height,
|
||
|
"Sort by comments": :comment_count,
|
||
|
"Sort by tag count": :tag_count,
|
||
|
"Sort by pixels": :pixels,
|
||
|
"Sort by file size": :size,
|
||
|
"Sort by duration": :duration,
|
||
|
Random!: random_seed
|
||
|
]
|
||
|
|
||
|
sort_directions = [Descending: :desc, Ascending: :asc]
|
||
|
sort_hidden = ["Exclude Deleted": "", "Include Deleted/Merged": "1", "Deleted Only": "deleted", "Deleted/Merged Only": "only"]
|
||
|
%>
|
||
|
<%= select(f, :sf, sort_fields, class: "input input--separate-left", name: "sf", autocomplete: "off", selected: @conn.params["sf"]) %>
|
||
|
<%= select(f, :sd, sort_directions, class: "input input--separate-left", name: "sd", autocomplete: "off", selected: @conn.params["sd"]) %>
|
||
|
<%= if present?(@conn.params["hidden"]) do %>
|
||
|
<%= hidden_input(f, :hidden, name: "hidden", value: @conn.params["hidden"]) %>
|
||
|
<% end %>
|
||
|
<%= if hides_images?(@conn) do %>
|
||
|
<%= select(f, :del, sort_hidden, class: "input input--separate-left", name: "del", autocomplete: "off", selected: @conn.params["del"]) %>
|
||
|
<% end %>
|
||
|
</div>
|
||
|
<% end %>
|