Browse Source

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

Bnyro 1 year ago
parent
commit
a5decfb838

+ 7 - 0
searx/static/themes/simple/src/js/main/preferences.js

@@ -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);

+ 32 - 15
searx/static/themes/simple/src/less/preferences.less

@@ -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) {

+ 2 - 1
searx/static/themes/simple/src/less/style.less

@@ -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);

+ 16 - 2
searx/templates/simple/preferences/cookies.html

@@ -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 -}}
-    &amp;save=1{{- '' -}}
+    {{- url_for('preferences', _external=True) -}}?preferences={{- preferences_url_params|e -}}{{- '' -}}
   </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') -}}">{{- '' -}}

+ 2 - 2
searx/webapp.py

@@ -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
-    if request.args.get('save') == '1':
+    # save preferences using the link the /preferences?preferences=...
+    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)