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