summaryrefslogtreecommitdiff
path: root/searx
diff options
context:
space:
mode:
authorDavid A Roberts <d@vidr.cc>2016-08-11 12:21:28 +1000
committerDavid A Roberts <d@vidr.cc>2016-08-11 19:16:42 +1000
commit678b9e994a4e74fe287f3bc2515ee0e323c1bf69 (patch)
treed9cf285612556347e668b464f1042a4b78d1cd12 /searx
parent975bd5beb5d98dc56664eb7a4085e90a566cf63d (diff)
downloadsearxng-678b9e994a4e74fe287f3bc2515ee0e323c1bf69.tar.gz
searxng-678b9e994a4e74fe287f3bc2515ee0e323c1bf69.zip
[enh] infinite scroll
resolves #649
Diffstat (limited to 'searx')
-rw-r--r--searx/plugins/__init__.py2
-rw-r--r--searx/plugins/infinite_scroll.py8
-rw-r--r--searx/static/plugins/css/infinite_scroll.css16
-rw-r--r--searx/static/plugins/js/infinite_scroll.js18
4 files changed, 44 insertions, 0 deletions
diff --git a/searx/plugins/__init__.py b/searx/plugins/__init__.py
index 14fd1e96c..768a510af 100644
--- a/searx/plugins/__init__.py
+++ b/searx/plugins/__init__.py
@@ -21,6 +21,7 @@ logger = logger.getChild('plugins')
from searx.plugins import (doai_rewrite,
https_rewrite,
+ infinite_scroll,
open_results_on_new_tab,
self_info,
search_on_category_select,
@@ -76,6 +77,7 @@ class PluginStore():
plugins = PluginStore()
plugins.register(doai_rewrite)
plugins.register(https_rewrite)
+plugins.register(infinite_scroll)
plugins.register(open_results_on_new_tab)
plugins.register(self_info)
plugins.register(search_on_category_select)
diff --git a/searx/plugins/infinite_scroll.py b/searx/plugins/infinite_scroll.py
new file mode 100644
index 000000000..422a4befb
--- /dev/null
+++ b/searx/plugins/infinite_scroll.py
@@ -0,0 +1,8 @@
+from flask_babel import gettext
+
+name = gettext('Infinite scroll')
+description = gettext('Automatically load next page when scrolling to bottom of current page')
+default_on = False
+
+js_dependencies = ('plugins/js/infinite_scroll.js',)
+css_dependencies = ('plugins/css/infinite_scroll.css',)
diff --git a/searx/static/plugins/css/infinite_scroll.css b/searx/static/plugins/css/infinite_scroll.css
new file mode 100644
index 000000000..7e0ee20f5
--- /dev/null
+++ b/searx/static/plugins/css/infinite_scroll.css
@@ -0,0 +1,16 @@
+@keyframes rotate-forever {
+ 0% { transform: rotate(0deg) }
+ 100% { transform: rotate(360deg) }
+}
+.loading-spinner {
+ animation-duration: 0.75s;
+ animation-iteration-count: infinite;
+ animation-name: rotate-forever;
+ animation-timing-function: linear;
+ height: 30px;
+ width: 30px;
+ border: 8px solid #666;
+ border-right-color: transparent;
+ border-radius: 50% !important;
+ margin: 0 auto;
+}
diff --git a/searx/static/plugins/js/infinite_scroll.js b/searx/static/plugins/js/infinite_scroll.js
new file mode 100644
index 000000000..213f74b15
--- /dev/null
+++ b/searx/static/plugins/js/infinite_scroll.js
@@ -0,0 +1,18 @@
+$(document).ready(function() {
+ var win = $(window);
+ win.scroll(function() {
+ if ($(document).height() - win.height() == win.scrollTop()) {
+ var formData = $('#pagination form:last').serialize();
+ if (formData) {
+ $('#pagination').html('<div class="loading-spinner"></div>');
+ $.post('/', formData, function (data) {
+ var body = $(data);
+ $('#pagination').remove();
+ $('#main_results').append('<hr/>');
+ $('#main_results').append(body.find('.result'));
+ $('#main_results').append(body.find('#pagination'));
+ });
+ }
+ }
+ });
+});