[mod] typification of SearXNG: add new result type KeyValue
This patch adds a new result type: KeyValue - Python class: searx/result_types/keyvalue.py - Jinja template: searx/templates/simple/result_templates/keyvalue.html - CSS (less) client/simple/src/less/result_types/keyvalue.less Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
parent
8769b7c6d6
commit
af5dbdf768
@ -57,6 +57,10 @@
|
|||||||
/// Answer Colors
|
/// Answer Colors
|
||||||
--color-answer-font: #444; // same as --color-base-font
|
--color-answer-font: #444; // same as --color-base-font
|
||||||
--color-answer-background: #fff;
|
--color-answer-background: #fff;
|
||||||
|
// colors of the KeyValue result class
|
||||||
|
--color-result-keyvalue-col-table: #fdfbff;
|
||||||
|
--color-result-keyvalue-odd: #fdfbff;
|
||||||
|
--color-result-keyvalue-even: #fff;
|
||||||
/// Results Colors
|
/// Results Colors
|
||||||
--color-result-background: #fff;
|
--color-result-background: #fff;
|
||||||
--color-result-border: #ddd;
|
--color-result-border: #ddd;
|
||||||
@ -180,6 +184,10 @@
|
|||||||
/// Answer Colors
|
/// Answer Colors
|
||||||
--color-answer-font: #bbb; // same as --color-base-font
|
--color-answer-font: #bbb; // same as --color-base-font
|
||||||
--color-answer-background: #26292f;
|
--color-answer-background: #26292f;
|
||||||
|
// colors of the KeyValue result class
|
||||||
|
--color-result-keyvalue-col-table: #1e1e22;
|
||||||
|
--color-result-keyvalue-odd: #1e1e22;
|
||||||
|
--color-result-keyvalue-even: #26292f;
|
||||||
/// Results Colors
|
/// Results Colors
|
||||||
--color-result-background: #26292f;
|
--color-result-background: #26292f;
|
||||||
--color-result-border: #333;
|
--color-result-border: #333;
|
||||||
|
35
client/simple/src/less/result_types/keyvalue.less
Normal file
35
client/simple/src/less/result_types/keyvalue.less
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
Layout of the KeyValue result class
|
||||||
|
*/
|
||||||
|
#main_results .result-keyvalue {
|
||||||
|
caption {
|
||||||
|
padding: 0.8rem 0.5rem;
|
||||||
|
font-style: italic;
|
||||||
|
caption-side: bottom;
|
||||||
|
background-color: var(--color-result-keyvalue-table);
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-key {
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
word-break: break-word;
|
||||||
|
table-layout: fixed;
|
||||||
|
width: 100%;
|
||||||
|
background-color: var(--color-result-keyvalue-table);
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.odd {
|
||||||
|
background-color: var(--color-result-keyvalue-odd);
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.even {
|
||||||
|
background-color: var(--color-result-keyvalue-even);
|
||||||
|
}
|
||||||
|
|
||||||
|
th,
|
||||||
|
td {
|
||||||
|
padding: 0.3rem 0.5rem;
|
||||||
|
}
|
||||||
|
}
|
@ -1164,3 +1164,6 @@ summary.title {
|
|||||||
pre code {
|
pre code {
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// import layouts of the Result types
|
||||||
|
@import "result_types/keyvalue.less";
|
||||||
|
7
docs/dev/result_types/main/keyvalue.rst
Normal file
7
docs/dev/result_types/main/keyvalue.rst
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
.. _result_types.keyvalue:
|
||||||
|
|
||||||
|
=================
|
||||||
|
Key-Value Results
|
||||||
|
=================
|
||||||
|
|
||||||
|
.. automodule:: searx.result_types.keyvalue
|
@ -14,6 +14,7 @@ following types have been implemented so far ..
|
|||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
main/mainresult
|
main/mainresult
|
||||||
|
main/keyvalue
|
||||||
|
|
||||||
The :ref:`LegacyResult <LegacyResult>` is used internally for the results that
|
The :ref:`LegacyResult <LegacyResult>` is used internally for the results that
|
||||||
have not yet been typed. The templates can be used as orientation until the
|
have not yet been typed. The templates can be used as orientation until the
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
__all__ = ["Result", "MainResult", "EngineResults", "AnswerSet", "Answer", "Translations"]
|
__all__ = ["Result", "MainResult", "KeyValue", "EngineResults", "AnswerSet", "Answer", "Translations"]
|
||||||
|
|
||||||
import abc
|
import abc
|
||||||
|
|
||||||
@ -21,6 +21,7 @@ from searx import enginelib
|
|||||||
|
|
||||||
from ._base import Result, MainResult, LegacyResult
|
from ._base import Result, MainResult, LegacyResult
|
||||||
from .answer import AnswerSet, Answer, Translations
|
from .answer import AnswerSet, Answer, Translations
|
||||||
|
from .keyvalue import KeyValue
|
||||||
|
|
||||||
|
|
||||||
class ResultList(list, abc.ABC):
|
class ResultList(list, abc.ABC):
|
||||||
@ -30,6 +31,7 @@ class ResultList(list, abc.ABC):
|
|||||||
"""The collection of result types (which have already been implemented)."""
|
"""The collection of result types (which have already been implemented)."""
|
||||||
|
|
||||||
Answer = Answer
|
Answer = Answer
|
||||||
|
KeyValue = KeyValue
|
||||||
MainResult = MainResult
|
MainResult = MainResult
|
||||||
Result = Result
|
Result = Result
|
||||||
Translations = Translations
|
Translations = Translations
|
||||||
|
49
searx/result_types/keyvalue.py
Normal file
49
searx/result_types/keyvalue.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
"""
|
||||||
|
Typification of the *keyvalue* results. Results of this type are rendered in
|
||||||
|
the :origin:`keyvalue.html <searx/templates/simple/result_templates/keyvalue.html>`
|
||||||
|
template.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
.. autoclass:: KeyValue
|
||||||
|
:members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
"""
|
||||||
|
# pylint: disable=too-few-public-methods
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
__all__ = ["KeyValue"]
|
||||||
|
|
||||||
|
import typing
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
|
from ._base import MainResult
|
||||||
|
|
||||||
|
|
||||||
|
class KeyValue(MainResult, kw_only=True):
|
||||||
|
"""Simple table view which maps *key* names (first col) to *values*
|
||||||
|
(second col)."""
|
||||||
|
|
||||||
|
template: str = "keyvalue.html"
|
||||||
|
|
||||||
|
kvmap: dict[str, typing.Any] | OrderedDict[str, typing.Any]
|
||||||
|
"""Dictionary with keys and values. To sort keys, use :py:obj:`OrderedDict`."""
|
||||||
|
|
||||||
|
caption: str = ""
|
||||||
|
"""Optional caption for this result."""
|
||||||
|
|
||||||
|
key_title: str = ""
|
||||||
|
"""Optional title for the *key column*."""
|
||||||
|
|
||||||
|
value_title: str = ""
|
||||||
|
"""Optional title for the *value column*."""
|
||||||
|
|
||||||
|
def __hash__(self) -> int:
|
||||||
|
"""The KeyValues objects are checked for object identity, even if all
|
||||||
|
fields of two results have the same values, they are different from each
|
||||||
|
other.
|
||||||
|
"""
|
||||||
|
return id(self)
|
21
searx/templates/simple/result_templates/keyvalue.html
Normal file
21
searx/templates/simple/result_templates/keyvalue.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<article class="result result-keyvalue {% if result.category -%}category-{{ result.category }}{%- endif -%}">
|
||||||
|
<table>
|
||||||
|
{%- if result.caption %}<caption>{{ result.caption }}</caption>{%- endif -%}
|
||||||
|
{%- if result.key_title or result.value_title %}
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="col-key" scope="col" >{{result.key_title}}</th>
|
||||||
|
<th class="col-value" scope="col" >{{result.value_title}}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{%- endif -%}
|
||||||
|
{%- for key, value in result.kvmap.items() -%}
|
||||||
|
<tr class="{{ loop.cycle('odd', 'even') }}">
|
||||||
|
<th class="col-key" scope="row">{{ key }}</th>{{- '' -}}
|
||||||
|
<td class="col-value">{{ value }}</td>{{- '' -}}
|
||||||
|
</tr>
|
||||||
|
{%- endfor -%}
|
||||||
|
</table>{{- '' -}}
|
||||||
|
<div class="engines">{% for engine in result.engines %}<span>{{ engine }}</span>{% endfor %}</div>{{- '' -}}
|
||||||
|
<div class="break"></div>{{- '' -}}
|
||||||
|
</article>
|
Loading…
x
Reference in New Issue
Block a user