mirror of
				https://github.com/searxng/searxng.git
				synced 2025-10-31 10:37:06 -04: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 |   /// 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