mirror of
				https://github.com/searxng/searxng.git
				synced 2025-11-03 19:17:07 -05:00 
			
		
		
		
	[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
 | 
			
		||||
  --color-answer-font: #444; // same as --color-base-font
 | 
			
		||||
  --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
 | 
			
		||||
  --color-result-background: #fff;
 | 
			
		||||
  --color-result-border: #ddd;
 | 
			
		||||
@ -180,6 +184,10 @@
 | 
			
		||||
  /// Answer Colors
 | 
			
		||||
  --color-answer-font: #bbb; // same as --color-base-font
 | 
			
		||||
  --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
 | 
			
		||||
  --color-result-background: #26292f;
 | 
			
		||||
  --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 {
 | 
			
		||||
  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
 | 
			
		||||
 | 
			
		||||
   main/mainresult
 | 
			
		||||
   main/keyvalue
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,7 @@
 | 
			
		||||
 | 
			
		||||
from __future__ import annotations
 | 
			
		||||
 | 
			
		||||
__all__ = ["Result", "MainResult", "EngineResults", "AnswerSet", "Answer", "Translations"]
 | 
			
		||||
__all__ = ["Result", "MainResult", "KeyValue", "EngineResults", "AnswerSet", "Answer", "Translations"]
 | 
			
		||||
 | 
			
		||||
import abc
 | 
			
		||||
 | 
			
		||||
@ -21,6 +21,7 @@ from searx import enginelib
 | 
			
		||||
 | 
			
		||||
from ._base import Result, MainResult, LegacyResult
 | 
			
		||||
from .answer import AnswerSet, Answer, Translations
 | 
			
		||||
from .keyvalue import KeyValue
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ResultList(list, abc.ABC):
 | 
			
		||||
@ -30,6 +31,7 @@ class ResultList(list, abc.ABC):
 | 
			
		||||
        """The collection of result types (which have already been implemented)."""
 | 
			
		||||
 | 
			
		||||
        Answer = Answer
 | 
			
		||||
        KeyValue = KeyValue
 | 
			
		||||
        MainResult = MainResult
 | 
			
		||||
        Result = Result
 | 
			
		||||
        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