[feat] preferences: button to copy input to restore preferences hash

This commit is contained in:
Bnyro 2024-01-21 12:35:52 +01:00 committed by Markus Heiser
parent a8aaf5719b
commit a5decfb838
5 changed files with 59 additions and 20 deletions

View File

@ -26,5 +26,12 @@
for (const el of d.querySelectorAll('[data-engine-name]')) { for (const el of d.querySelectorAll('[data-engine-name]')) {
searxng.on(el, 'mouseenter', load_engine_descriptions); searxng.on(el, 'mouseenter', load_engine_descriptions);
} }
const copyHashButton = d.querySelector("#copy-hash");
searxng.on(copyHashButton, 'click', (e) => {
e.preventDefault();
navigator.clipboard.writeText(copyHashButton.dataset.hash);
copyHashButton.innerText = copyHashButton.dataset.copiedText;
});
}); });
})(window, document, window.searxng); })(window, document, window.searxng);

View File

@ -33,6 +33,21 @@ table {
width: 300px; width: 300px;
} }
input[type="text"] {
width: 13.25rem;
color: var(--color-toolkit-input-text-font);
border: none;
background: none repeat scroll 0 0 var(--color-toolkit-select-background);
padding: 0.2rem 0.4rem;
height: 2rem;
.rounded-corners-tiny;
&:hover,
&:focus {
background-color: var(--color-toolkit-select-background-hover);
}
}
.value { .value {
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -52,21 +67,6 @@ table {
width: 14rem; width: 14rem;
} }
input[type="text"] {
width: 13.25rem;
color: var(--color-toolkit-input-text-font);
border: none;
background: none repeat scroll 0 0 var(--color-toolkit-select-background);
padding: 0.2rem 0.4rem;
height: 2rem;
.rounded-corners-tiny;
&:hover,
&:focus {
background-color: var(--color-toolkit-select-background-hover);
}
}
select:focus, select:focus,
input:focus { input:focus {
outline: none; outline: none;
@ -190,6 +190,23 @@ table {
width: 100%; width: 100%;
} }
} }
#copy-hash-container {
display: flex;
align-items: center;
gap: 0.5rem;
div.selectable_url {
pre {
width: auto;
flex-grow: 1;
}
}
}
#pref-hash-input {
width: 100%;
}
} }
@media screen and (max-width: @tablet) { @media screen and (max-width: @tablet) {

View File

@ -111,7 +111,8 @@ footer {
} }
input[type="submit"], input[type="submit"],
#results button[type="submit"] { #results button[type="submit"],
.button {
padding: 0.7rem; padding: 0.7rem;
display: inline-block; display: inline-block;
background: var(--color-btn-background); background: var(--color-btn-background);

View File

@ -36,10 +36,24 @@
</h4>{{- '' -}} </h4>{{- '' -}}
<div class="selectable_url">{{- '' -}} <div class="selectable_url">{{- '' -}}
<pre> <pre>
{{- url_for('preferences', _external=True) -}}?preferences={{- preferences_url_params|e -}} {{- url_for('preferences', _external=True) -}}?preferences={{- preferences_url_params|e -}}{{- '' -}}
&amp;save=1{{- '' -}}
</pre>{{- '' -}} </pre>{{- '' -}}
</div>{{- '' -}} </div>{{- '' -}}
<p class="small_font"> <p class="small_font">
{{- _('Specifying custom settings in the preferences URL can be used to sync preferences across devices.') -}} {{- _('Specifying custom settings in the preferences URL can be used to sync preferences across devices.') -}}
</p> </p>
<h4>
{{- _('Copy preferences hash') -}}:{{- '' -}}
</h4>{{- '' -}}
<div id="copy-hash-container">{{- '' -}}
<div class="selectable_url">{{- '' -}}
<pre>
{{- preferences_url_params|e }}
</pre>{{- '' -}}
</div>
<button id="copy-hash" class="button" data-hash="{{- preferences_url_params|e -}}" data-copied-text="{{- _('Copied') -}}">{{- _('Copy') -}}</button>
</div>
<h4>
{{- _('Insert copied preferences hash (without URL) to restore') -}}:{{- '' -}}
</h4>{{- '' -}}
<input type="text" id="pref-hash-input" name="preferences" placeholder="{{- _('Preferences hash') -}}">{{- '' -}}

View File

@ -875,8 +875,8 @@ def preferences():
# pylint: disable=too-many-locals, too-many-return-statements, too-many-branches # pylint: disable=too-many-locals, too-many-return-statements, too-many-branches
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# save preferences using the link the /preferences?preferences=...&save=1 # save preferences using the link the /preferences?preferences=...
if request.args.get('save') == '1': if request.args.get('preferences') or request.form.get('preferences'):
resp = make_response(redirect(url_for('index', _external=True))) resp = make_response(redirect(url_for('index', _external=True)))
return request.preferences.save(resp) return request.preferences.save(resp)