forked from Ponysearch/Ponysearch
[feat] preferences: button to copy input to restore preferences hash
This commit is contained in:
parent
a8aaf5719b
commit
a5decfb838
5 changed files with 59 additions and 20 deletions
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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 -}}{{- '' -}}
|
||||||
&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') -}}">{{- '' -}}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue