Previous/next pagination working

This commit is contained in:
Kasper Rynning-Tønnesen
2019-03-02 13:23:57 +01:00
parent af92dd0e3a
commit 1c05a1c3b2
6 changed files with 72 additions and 12 deletions

7
package-lock.json generated
View File

@@ -2204,7 +2204,7 @@
"dependencies": {
"combined-stream": {
"version": "1.0.6",
"resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"requires": {
"delayed-stream": "~1.0.0"
@@ -3863,6 +3863,11 @@
}
}
},
"mongojs-paginate": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/mongojs-paginate/-/mongojs-paginate-1.2.0.tgz",
"integrity": "sha1-Z3YjmDlByAOPyBz88lw+425iO4s="
},
"mongoose": {
"version": "5.0.16",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.16.tgz",

View File

@@ -46,6 +46,7 @@
"jimp": "^0.2.28",
"mongodb": "^2.2.35",
"mongojs": "^2.5.0",
"mongojs-paginate": "^1.2.0",
"mongoose": "^5.0.16",
"mpromise": "^0.5.5",
"nodemailer": "^4.6.4",

View File

@@ -383,6 +383,14 @@ li.disabled span {
margin-top: 5px;
}
.filter-pagination-container {
display: flex;
justify-content: space-evenly;
padding-top: 15px;
width: 50%;
margin: auto;
}
.extra-button{
margin: 0 4px !important;
padding: 0px !important;

View File

@@ -21,7 +21,7 @@ function removeAllListeners() {
socket.removeEventListener(id);
}
function filterPlaylistElements() {
function filterPlaylistElements(page) {
Helper.ajax({
type: "POST",
headers: {
@@ -30,14 +30,28 @@ function filterPlaylistElements() {
url: "/api/search/" + chan.toLowerCase(),
data: {
searchQuery: document.getElementById("filtersearch_input").value,
token: zoff_api_token
token: zoff_api_token,
page: page
},
success: function(data){
var json = JSON.parse(data);
document.querySelector(".filter-results").innerHTML = "";
if(json.results.length > 0) {
for(var i = 0; i < json.results.length; i++) {
document.querySelector(".filter-results").innerHTML += List.generateSong(json.results[i], false, false, true, false, "block", false, true);;
if(json.results.search_results.length > 0) {
for(var i = 0; i < json.results.search_results.length; i++) {
document.querySelector(".filter-results").innerHTML += List.generateSong(json.results.search_results[i], false, false, true, false, "block", false, true);;
}
if(json.results.next != undefined || json.results.prev != undefined) {
document.querySelector(".filter-results").innerHTML += "<div class='filter-pagination-container'></div>"
if(json.results.prev != undefined) {
document.querySelector(".filter-pagination-container").innerHTML += "<a href='#' class='btn orange prev-filter' data-page='" + json.results.prev + "'>Prev</a>";
} else {
document.querySelector(".filter-pagination-container").innerHTML += "<a href='#' class='btn orange disabled'>Prev</a>";
}
if(json.results.next != undefined) {
document.querySelector(".filter-pagination-container").innerHTML += "<a href='#' class='btn orange next-filter' data-page='" + json.results.next + "'>Next</a>";
} else {
document.querySelector(".filter-pagination-container").innerHTML += "<a href='#' class='btn orange disabled'>Next</a>";
}
}
} else {
toast("Couldn't find any items with those tags..", "red");

View File

@@ -697,12 +697,28 @@ function addDynamicListeners() {
addListener("submit", "#filter-form", function(e) {
this.preventDefault();
filterPlaylistElements();
filterPlaylistElements(1);
});
addListener("click", ".submit-filter-search", function(e) {
this.preventDefault();
filterPlaylistElements();
filterPlaylistElements(1);
});
addListener("click", ".next-filter", function(e) {
this.preventDefault();
var page = e.getAttribute("data-page");
page = parseInt(page);
if(page == undefined || isNaN(page)) return;
filterPlaylistElements(page);
});
addListener("click", ".prev-filter", function(e) {
this.preventDefault();
var page = e.getAttribute("data-page");
page = parseInt(page);
if(page == undefined || isNaN(page)) return;
filterPlaylistElements(page);
});
addListener("click", ".delete-context-menu", function(e) {

View File

@@ -15,6 +15,7 @@ var Search = require(pathThumbnails + '/handlers/search.js');
var uniqid = require('uniqid');
var Filter = require('bad-words');
var filter = new Filter({ placeHolder: 'x'});
var paginate = require('mongojs-paginate');
var _exports = {
router: router,
@@ -748,6 +749,10 @@ router.route('/api/search/:channel_name/').post(function(req, res) {
} else {
userpass = "";
}
var page = 1;
if(req.body.hasOwnProperty("page") && req.body.page > 0) {
page = req.body.page;
}
var searchQuery = "";
if(req.body.searchQuery == undefined || req.body.searchQuery == "") {
var to_send = error.formatting;
@@ -800,13 +805,24 @@ router.route('/api/search/:channel_name/').post(function(req, res) {
res.status(403).send(error.not_authenticated);
return;
}
db.collection(channel_name).find({tags: {$regex : ".*" + searchQuery + ".*"}}, function(e, results) {
if(results.length == 0) {
var query = db.collection(channel_name).find({tags: {
$regex : ".*" + searchQuery + ".*"
}});
paginate(query, { limit : 30, page : page }, function(err, result) {
if(result.items.length == 0) {
res.status(404).send(error.not_found.local);
return;
}
var to_return = error.no_error;
to_return.results = results;
var to_return = error.no_error
to_return.results = {};
if(result.hasNext) {
to_return.results.next = result.page + 1;
}
if(result.hasPrevious) {
to_return.results.prev = result.page - 1;
}
to_return.results.search_results = result.items;
res.status(200).send(to_return);
});
});