[enh] infinite scroll

resolves #649
This commit is contained in:
David A Roberts 2016-08-11 12:21:28 +10:00
parent 975bd5beb5
commit 678b9e994a
4 changed files with 44 additions and 0 deletions

View file

@ -21,6 +21,7 @@ logger = logger.getChild('plugins')
from searx.plugins import (doai_rewrite, from searx.plugins import (doai_rewrite,
https_rewrite, https_rewrite,
infinite_scroll,
open_results_on_new_tab, open_results_on_new_tab,
self_info, self_info,
search_on_category_select, search_on_category_select,
@ -76,6 +77,7 @@ class PluginStore():
plugins = PluginStore() plugins = PluginStore()
plugins.register(doai_rewrite) plugins.register(doai_rewrite)
plugins.register(https_rewrite) plugins.register(https_rewrite)
plugins.register(infinite_scroll)
plugins.register(open_results_on_new_tab) plugins.register(open_results_on_new_tab)
plugins.register(self_info) plugins.register(self_info)
plugins.register(search_on_category_select) plugins.register(search_on_category_select)

View file

@ -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',)

View file

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

View file

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