mirror of
https://github.com/th3r00t/pyShelf.git
synced 2026-04-28 01:59:35 -04:00
Began processing for result limiting and paging
This commit is contained in:
@@ -21,8 +21,9 @@ from interface import views
|
||||
urlpatterns = [
|
||||
path("admin/", admin.site.urls),
|
||||
path("", views.index, name="index"),
|
||||
# path('<file_name>', views.download, name="download")
|
||||
path("<pk>", views.download, name="download"),
|
||||
path("download/<pk>", views.download, name="download"),
|
||||
path("prev_page", views.prev_page, name="prev_page"),
|
||||
path("next_page", views.next_page, name="next_page"),
|
||||
]
|
||||
if settings.DEBUG:
|
||||
import debug_toolbar
|
||||
|
||||
2
src/interface/static/js/jquery-3.4.1.min.js
vendored
Normal file
2
src/interface/static/js/jquery-3.4.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
27
src/interface/static/js/pyshelf_ux.js
Normal file
27
src/interface/static/js/pyshelf_ux.js
Normal file
@@ -0,0 +1,27 @@
|
||||
$(document).ready(function(){
|
||||
//_set = $('input#_set').attr('value');
|
||||
$('input.next_page').on('click', function(){next_page(1)});
|
||||
$('input.prev_page').on('click', function(){prev_page(1)});
|
||||
|
||||
function next_page(set){
|
||||
/*
|
||||
var re = new RegExp(/^.*\//);
|
||||
var _root = re.exec(window.location.href);
|
||||
var _path = _root[0].substring(0, _root[0].length -1)
|
||||
document.location.href = 'next_page?bookset='+set;
|
||||
*/
|
||||
console.log("next_page clicked");
|
||||
var _r = $.get('next_page', 'bookset='+set);
|
||||
console.log(_r);
|
||||
}
|
||||
|
||||
function prev_page(set){
|
||||
/*
|
||||
var re = new RegExp(/^.*\//);
|
||||
var _root = re.exec(window.location.href);
|
||||
document.location.href = _root+'prev_page?bookset='+set;
|
||||
*/
|
||||
console.log("prev_page clicked");
|
||||
$.get('prev_page', 'bookset='+set);
|
||||
}
|
||||
});
|
||||
@@ -9,6 +9,8 @@
|
||||
<title>pyShelf E-Book Server</title>
|
||||
<link href="https://fonts.googleapis.com/css?family=Audiowide&display=swap" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css?family=Gruppo&display=swap" rel="stylesheet">
|
||||
<script src="/static/js/jquery-3.4.1.min.js" type="text/javascript"></script>
|
||||
<script src="/static/js/pyshelf_ux.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
@@ -17,28 +19,27 @@
|
||||
<h1 class="app_hdr shadow">pyShelf</h1>
|
||||
</div>
|
||||
<div class="app_slogan">
|
||||
<h2 class="app_slogan shadow">""An elegant tool... for a more civilized age."</h3>
|
||||
<h3 class="app_slogan shadow">""An elegant tool... for a more civilized age."</h3>
|
||||
</div>
|
||||
<div class="app_subhdr">
|
||||
<img src="/static/img/open-source-175x29.png" class="hdr_badge" /><br />
|
||||
<img src="/static/img/gpl-125x28.png" class="hdr_badge" />
|
||||
</div>
|
||||
|
||||
</h2>
|
||||
</div>
|
||||
<div class="app_body" >
|
||||
<div class="nav_top">
|
||||
<div class="navbar top">
|
||||
<div style="grid-area:left">
|
||||
<input class="nav_button" type="submit" value="<< Prev Page">
|
||||
</div>
|
||||
<div style="grid-area:center">
|
||||
<input type="hidden" id="_set" name="_set" value="{{ Set }}" />
|
||||
<div style="grid-area:left">
|
||||
<input class="nav_button prev_page" type="submit" value="<< Prev Page">
|
||||
</div>
|
||||
<div style="grid-area:center">
|
||||
<input class="nav_search" type="text" size="15">
|
||||
<input class="nav_button" type="submit" value="Search">
|
||||
</div>
|
||||
<div style="grid-area:right">
|
||||
<input class="nav_button" type="submit" value="Next Page >>">
|
||||
</div>
|
||||
</div>
|
||||
<div style="grid-area:right">
|
||||
<input class="nav_button next_page" type="submit" value="Next Page >>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="shelf">
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import json
|
||||
import os
|
||||
from base64 import b64decode, b64encode
|
||||
|
||||
from django.db import models
|
||||
from django.http import JsonResponse
|
||||
from django.shortcuts import HttpResponse, render
|
||||
from django.utils.text import slugify
|
||||
|
||||
@@ -8,19 +11,63 @@ from .models import Books
|
||||
|
||||
|
||||
def index(request):
|
||||
return render(request, "index.html", {"Books": book_set()})
|
||||
_set = 1
|
||||
return render(
|
||||
request, "index.html", {"Books": book_set(20, _set), "Set": str(_set)}
|
||||
)
|
||||
# return render(request, "index.html", {"Books": Books.objects.all()})
|
||||
|
||||
|
||||
def next_page(request):
|
||||
try:
|
||||
_set = int(request.GET["bookset"]) + 1
|
||||
except Exception:
|
||||
_set = 1
|
||||
return HttpResponse(book_set_as_dict(20, _set), mimetype="application/json")
|
||||
|
||||
|
||||
def prev_page(request):
|
||||
try:
|
||||
_set = request.GET["bookset"] - 1
|
||||
if _set < 0:
|
||||
_set = 0
|
||||
except Exception:
|
||||
_set = 1
|
||||
return render(
|
||||
request, "index.html", {"Books": book_set(None, _set), "Set": str(_set)}
|
||||
)
|
||||
|
||||
|
||||
def book_set(_limit=None, _set=1):
|
||||
if _limit is None:
|
||||
_limit = 20 # TODO default from user choice
|
||||
_set_max = _set * _limit
|
||||
_set_max = int(_set) * _limit
|
||||
_set_min = _set_max - _limit
|
||||
books = Books.objects.all()[_set_min:_set_max]
|
||||
return books
|
||||
|
||||
|
||||
def book_set_as_dict(_limit=None, _set=1):
|
||||
breakpoint()
|
||||
if _limit is None:
|
||||
_limit = 20
|
||||
_set_max = int(_set) * _limit
|
||||
_set_min = _set_max - _limit
|
||||
_set = {}
|
||||
for book in Books.objects.all()[_set_min:_set_max]:
|
||||
_set[book.title] = {
|
||||
"title": book.title,
|
||||
"author": book.author,
|
||||
"categories": book.categories,
|
||||
"cover": b64decode(book.cover),
|
||||
"pages": book.pages,
|
||||
"progress": book.progress,
|
||||
"file_name": book.file_name,
|
||||
"pk": book.pk,
|
||||
}
|
||||
return json.dumps(_set)
|
||||
|
||||
|
||||
def download(request, pk):
|
||||
_book = Books.objects.all().filter(pk=pk)[0]
|
||||
_fn = hr_name(_book)
|
||||
|
||||
Reference in New Issue
Block a user