Began processing for result limiting and paging

This commit is contained in:
Mike Young
2019-11-28 16:02:41 -05:00
parent dfc3e83124
commit 2bf6500ee5
5 changed files with 93 additions and 15 deletions

View File

@@ -21,8 +21,9 @@ from interface import views
urlpatterns = [ urlpatterns = [
path("admin/", admin.site.urls), path("admin/", admin.site.urls),
path("", views.index, name="index"), path("", views.index, name="index"),
# path('<file_name>', views.download, name="download") path("download/<pk>", views.download, name="download"),
path("<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: if settings.DEBUG:
import debug_toolbar import debug_toolbar

File diff suppressed because one or more lines are too long

View 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);
}
});

View File

@@ -9,6 +9,8 @@
<title>pyShelf E-Book Server</title> <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=Audiowide&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Gruppo&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> </head>
<body> <body>
<div id="app"> <div id="app">
@@ -17,28 +19,27 @@
<h1 class="app_hdr shadow">pyShelf</h1> <h1 class="app_hdr shadow">pyShelf</h1>
</div> </div>
<div class="app_slogan"> <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>
<div class="app_subhdr"> <div class="app_subhdr">
<img src="/static/img/open-source-175x29.png" class="hdr_badge" /><br /> <img src="/static/img/open-source-175x29.png" class="hdr_badge" /><br />
<img src="/static/img/gpl-125x28.png" class="hdr_badge" /> <img src="/static/img/gpl-125x28.png" class="hdr_badge" />
</div> </div>
</h2>
</div> </div>
<div class="app_body" > <div class="app_body" >
<div class="nav_top"> <div class="nav_top">
<div class="navbar top"> <div class="navbar top">
<div style="grid-area:left"> <input type="hidden" id="_set" name="_set" value="{{ Set }}" />
<input class="nav_button" type="submit" value="<< Prev Page"> <div style="grid-area:left">
</div> <input class="nav_button prev_page" type="submit" value="<< Prev Page">
<div style="grid-area:center"> </div>
<div style="grid-area:center">
<input class="nav_search" type="text" size="15"> <input class="nav_search" type="text" size="15">
<input class="nav_button" type="submit" value="Search"> <input class="nav_button" type="submit" value="Search">
</div> </div>
<div style="grid-area:right"> <div style="grid-area:right">
<input class="nav_button" type="submit" value="Next Page >>"> <input class="nav_button next_page" type="submit" value="Next Page >>">
</div> </div>
</div> </div>
</div> </div>
<div class="shelf"> <div class="shelf">

View File

@@ -1,6 +1,9 @@
import json
import os import os
from base64 import b64decode, b64encode
from django.db import models from django.db import models
from django.http import JsonResponse
from django.shortcuts import HttpResponse, render from django.shortcuts import HttpResponse, render
from django.utils.text import slugify from django.utils.text import slugify
@@ -8,19 +11,63 @@ from .models import Books
def index(request): 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()}) # 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): def book_set(_limit=None, _set=1):
if _limit is None: if _limit is None:
_limit = 20 # TODO default from user choice _limit = 20 # TODO default from user choice
_set_max = _set * _limit _set_max = int(_set) * _limit
_set_min = _set_max - _limit _set_min = _set_max - _limit
books = Books.objects.all()[_set_min:_set_max] books = Books.objects.all()[_set_min:_set_max]
return books 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): def download(request, pk):
_book = Books.objects.all().filter(pk=pk)[0] _book = Books.objects.all().filter(pk=pk)[0]
_fn = hr_name(_book) _fn = hr_name(_book)