summaryrefslogtreecommitdiffstats
path: root/fatcat_scholar/templates/search.html
blob: 2f2149ea24af15b788acc044562f2fe4983d5f24 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
{% import "search_macros.html" as search_macros %}
{% extends "base.html" %}

{% macro format_query_time(query_time_ms) -%}
  {% if query_time_ms >= 10000 %}
    {{ "{:0.3}".format(hits.query_time_ms/1000.0) }}
  {% else %}
    {{ "{:0.2}".format(hits.query_time_ms/1000.0) }}
  {% endif %}
{%- endmacro %}

{% block extra_head %}
{# among other things, this prevents query parameters from ending up in goatcounter #}
<link rel="canonical" href="{{ lang_prefix }}/search">
{% endblock %}

{% block title %}
{% if query and query.q %}{{ query.q }} - {% endif %}{{ super() }}
{% endblock %}

{% block fullmain %}

<!-- these hidden query fields should be *before* any form/button that could override them -->
{{ search_macros.query_hidden(query.time_options, query.filter_time) }}
{{ search_macros.query_hidden(query.type_options, query.filter_type) }}
{{ search_macros.query_hidden(query.availability_options, query.filter_availability) }}
{{ search_macros.query_hidden(query.sort_options, query.sort_order) }}
{% if query.debug %}
  <input form="search_form" type="hidden" name="debug" value="1">
{% endif %}

<div class="tablet-only" style="margin-top: 1.0em;">

  <details class="search-filters">
    <summary style="float: right;"><i class="filter icon"></i>{{ _("Filters") }}</summary>
    <div style="display: flex; align-items: flex-start; column-gap: 2em; row-gap: 2em; flex-wrap: wrap; padding-bottom:1.5em;">
      {{ search_macros.query_option(query.time_options, query.filter_time) }}
      {{ search_macros.query_option(query.type_options, query.filter_type) }}
      {{ search_macros.query_option(query.availability_options, query.filter_availability) }}
      {{ search_macros.query_option(query.sort_options, query.sort_order) }}
      {{ search_macros.clear_query(query) }}
    </div>
  </details>

  {% if hits %}
    <span class="hit-count" style="font-size: 1.5em;">{{ "{:,}".format(hits.count_found) }}</span>
      {% trans trimmed count=hits.count_found %}
        Hit
      {% pluralize %}
        Hits
      {% endtrans %}
    <span style="color: rgba(0,0,0,0.55);">
      {% trans trimmed frac_sec=format_query_time(hits.query_time_ms) %}
        in {{ frac_sec }}sec
      {% endtrans %}
    </span>
  {% else %}
    &nbsp;
  {% endif %}
</div>

<div class="ui equal height divided grid" style="margin-top: 1em;">

  <nav class="ui tablet-hide two wide column">
    {% if hits %}
      <div style="width: 100%; text-align: end;">
        {% if hits.count_found >= 10000000 %}
          {% set count_size = "1.0em" %}
        {% elif hits.count_found >= 1000 %}
          {% set count_size = "1.5em" %}
        {% else %}
          {% set count_size = "2.0em" %}
        {% endif %}
        <span class="hit-count" style="display: block; font-size: {{ count_size }};">
          {{ "{:,}".format(hits.count_found) }}
        </span>
        {% trans trimmed count=hits.count_found %}
          Hit
        {% pluralize %}
          Hits
        {% endtrans %}
      </div>
      <div style="text-align: end;">
        <span style="color: rgba(0,0,0,0.55);">
          {% trans trimmed frac_sec=format_query_time(hits.query_time_ms) %}
            in {{ frac_sec }}sec
          {% endtrans %}
        </span>
      </div>
      <div class="ui clearing divider"></div>
    {% endif %}

    <div style="white-space: nowrap; direction: {% if locale in ['ar'] %}ltr{% else %}rtl{% endif %};">
      {{ search_macros.query_option(query.time_options, query.filter_time) }}
      {{ search_macros.query_option(query.type_options, query.filter_type) }}
      {{ search_macros.query_option(query.availability_options, query.filter_availability) }}
      {{ search_macros.query_option(query.sort_options, query.sort_order) }}
      {{ search_macros.clear_query(query) }}
    </div>
    
  </nav>

  <div class="ui fourteen wide column serp-column">
    {% if search_error %}
      <div class="ui icon error message">
        <i class="ban icon"></i>
        <div class="content">
          <div class="header">
            {% if search_error.type == "backend" %}
              {% trans %}Backend Search Engine Error{% endtrans %}
            {% elif search_error.type == "query" %}
              {% trans %}Search Query Error{% endtrans %}
            {% endif %}
          </div>
          <p>Computer said: <code>{{ search_error.message }}</code>
          <p>{% trans trimmed %}Query parsing is currently very naive. Sometimes you can fix this
          problem by adding quotes around terms or entire phrases.{% endtrans %}
        </div>
      </div>
    {% elif hits and hits.results %}
      {% if hits.results %}
        {% if hits.offset != 0 %}
          <div style="text-align: center; margin-bottom: 2em;">
            {{ search_macros.search_pagination(hits) }}
          </div>
        {% endif %}

        {# search results (rendered via macro) #}
        {% set expand_result = hits.query_type == 'lookup' %}
        {% for paper in hits.results %}
          {{ search_macros.fulltext_search_result_row(paper, locale=locale, debug_mode=query.debug, expand=expand_result) }}
        {% endfor %}

        {% if hits.count_found > hits.limit %}
          <div style="text-align: center; margin-top: 2em;">
            {{ search_macros.search_pagination(hits) }}
          </div>
        {% endif %}
      {% endif %}
    {% elif hits %}
      <div class="ui placeholder segment" style="height: 100%;">
        <div class="ui icon header">
          <i class="search icon"></i>
          {% trans %}We didn't find any documents matching your query{% endtrans %}
        </div>
        <div class="inline">
          {% if query.filter_type != "everything" %}
            <button class="ui primary button" form="search_form" type="submit" name="filter_type" value="everything">
              {% trans %}Try All Resource Types{% endtrans %}
            </button>
          {% endif %}
          {% if query.filter_time and query.filter_time != "all_time" %}
            <button class="ui primary button" form="search_form" type="submit" name="filter_time" value="all_time">
              {% trans %}Try All Time{% endtrans %}
            </button>
          {% endif %}
          {% if query.filter_availability != "everything" %}
            <button class="ui primary button" form="search_form" type="submit" name="filter_availability" value="everything">
              {% trans %}Try Metadata Records{% endtrans %}
            </button>
          {% endif %}
          <a href="{{ lang_prefix }}/search" class="ui primary button" style="margin: 0.5em;">{{ _("Start Over") }}</a>
        </div>
        <div class="inline">
          <a href="https://archive.org/search.php?sin=TXT&query={{ query.q|urlencode }}" target="_blank" rel="noopener" class="ui button" style="margin: 0.5em;">Try archive.org</a>
          <a href="https://fatcat.wiki/search&q={{ query.q|urlencode }}" target="_blank" rel="noopener" class="ui button" style="margin: 0.5em;">Try fatcat.wiki</a>
          <a href="https://www.semanticscholar.org/search?q={{ query.q|urlencode }}" rel="noopener" target="_blank" rel="noopener" class="ui button" style="margin: 0.5em;">Try Semantic Scholar</a>
          <a href="https://scholar.google.com/scholar?q={{ query.q|urlencode }}" target="_blank" rel="noopener" class="ui button" style="margin: 0.5em;">Try Google Scholar</a>
        </div>
      </div>
    {% else %}
      <div class="ui placeholder segment" style="height: 100%;">
        <div class="ui icon header">
          <i class="search icon"></i>
          {% trans %}Enter a query in the box above to get started{% endtrans %}
        </div>
      </div>
    {% endif %}
  </div>

</div>
{% endblock %}