Added thumbnails

Merge remote-tracking branch 'cover/thumbnails' into development

# Conflicts:
#	cps/admin.py
#	cps/templates/layout.html
#	cps/ub.py
#	cps/web.py
Update join for sqlalchemy 1.4
This commit is contained in:
Ozzie Isaacs
2021-03-20 11:32:50 +01:00
parent 5d8d796807
commit dd30ac4fbd
33 changed files with 965 additions and 73 deletions
+28 -8
View File
@@ -142,15 +142,18 @@
</div>
</div>
<div class="row form-group">
<div class="row form-group">
<h2>{{_('Administration')}}</h2>
<div class="btn btn-default"><a id="debug" href="{{url_for('admin.download_debug')}}">{{_('Download Debug Package')}}</a></div>
<div class="btn btn-default"><a id="logfile" href="{{url_for('admin.view_logfile')}}">{{_('View Logs')}}</a></div>
</div>
<div class="row form-group">
<div class="btn btn-default" id="restart_database" data-toggle="modal" data-target="#StatusDialog">{{_('Reconnect Calibre Database')}}</div>
<div class="btn btn-default" id="admin_restart" data-toggle="modal" data-target="#RestartDialog">{{_('Restart')}}</div>
<div class="btn btn-default" id="admin_stop" data-toggle="modal" data-target="#ShutdownDialog">{{_('Shutdown')}}</div>
<div class="btn btn-default"><a id="debug" href="{{url_for('admin.download_debug')}}">{{_('Download Debug Package')}}</a></div>
<div class="btn btn-default"><a id="logfile" href="{{url_for('admin.view_logfile')}}">{{_('View Logs')}}</a></div>
</div>
<div class="row form-group">
<div class="btn btn-default" id="restart_database" data-toggle="modal" data-target="#StatusDialog">{{_('Reconnect Calibre Database')}}</div>
<div class="btn btn-default" id="clear_cover_thumbnail_cache" data-toggle="modal" data-target="#ClearCacheDialog">{{_('Clear Cover Thumbnail Cache')}}</div>
</div>
<div class="row form-group">
<div class="btn btn-default" id="admin_restart" data-toggle="modal" data-target="#RestartDialog">{{_('Restart')}}</div>
<div class="btn btn-default" id="admin_stop" data-toggle="modal" data-target="#ShutdownDialog">{{_('Shutdown')}}</div>
</div>
<div class="row">
@@ -231,4 +234,21 @@
</div>
</div>
</div>
<div id="ClearCacheDialog" class="modal fade" role="dialog">
<div class="modal-dialog modal-sm">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header bg-info"></div>
<div class="modal-body text-center">
<p>{{_('Are you sure you want to clear the cover thumbnail cache?')}}</p>
<div id="spinner3" class="spinner" style="display:none;">
<img id="img-spinner3" src="{{ url_for('static', filename='css/libs/images/loading-icon.gif') }}"/>
</div>
<p></p>
<button type="button" class="btn btn-default" id="clear_cache" >{{_('OK')}}</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{{_('Cancel')}}</button>
</div>
</div>
</div>
</div>
{% endblock %}
+1 -1
View File
@@ -37,7 +37,7 @@
<div class="cover">
<a href="{{ url_for('web.show_book', book_id=entry.id) }}">
<span class="img">
<img src="{{ url_for('web.get_cover', book_id=entry.id) }}" />
{{ book_cover_image(entry, entry.id|get_book_thumbnails(thumbnails)) }}
{% if entry.id in read_book_ids %}<span class="badge read glyphicon glyphicon-ok"></span>{% endif %}
</span>
</a>
+13
View File
@@ -0,0 +1,13 @@
{% macro book_cover_image(book, thumbnails) -%}
{%- set book_title = book.title if book.title else book.name -%}
{% set srcset = thumbnails|get_book_thumbnail_srcset if thumbnails|length else '' %}
{%- if srcset|length -%}
<img
srcset="{{ srcset }}"
src="{{ url_for('web.get_cached_cover', cache_id=book|book_cover_cache_id) }}"
alt="{{ book_title }}"
/>
{%- else -%}
<img src="{{ url_for('web.get_cached_cover', cache_id=book|book_cover_cache_id) }}" alt="{{ book_title }}" />
{%- endif -%}
{%- endmacro %}
+2 -1
View File
@@ -1,9 +1,10 @@
{% from 'book_cover.html' import book_cover_image %}
{% extends "layout.html" %}
{% block body %}
{% if book %}
<div class="col-sm-3 col-lg-3 col-xs-12">
<div class="cover">
<img src="{{ url_for('web.get_cover', book_id=book.id, edit=1|uuidfilter) }}" alt="{{ book.title }}"/>
{{ book_cover_image(book, book.id|get_book_thumbnails(thumbnails)) }}
</div>
{% if g.user.role_delete_books() %}
<div class="text-center">
+1 -1
View File
@@ -4,7 +4,7 @@
<div class="row">
<div class="col-sm-3 col-lg-3 col-xs-5">
<div class="cover">
<img src="{{ url_for('web.get_cover', book_id=entry.id, edit=1|uuidfilter) }}" alt="{{ entry.title }}" />
{{ book_cover_image(entry, entry.id|get_book_thumbnails(thumbnails)) }}
</div>
</div>
<div class="col-sm-9 col-lg-9 book-meta">
+2 -1
View File
@@ -1,3 +1,4 @@
{% from 'book_cover.html' import book_cover_image %}
{% extends "layout.html" %}
{% block body %}
<div class="discover load-more">
@@ -9,7 +10,7 @@
{% if entry.has_cover is defined %}
<a href="{{ url_for('web.show_book', book_id=entry.id) }}" data-toggle="modal" data-target="#bookDetailsModal" data-remote="false">
<span class="img">
<img src="{{ url_for('web.get_cover', book_id=entry.id) }}" alt="{{ entry.title }}" />
{{ book_cover_image(entry, entry.id|get_book_thumbnails(thumbnails)) }}
{% if entry.id in read_book_ids %}<span class="badge read glyphicon glyphicon-ok"></span>{% endif %}
</span>
</a>
+1
View File
@@ -1,3 +1,4 @@
{% from 'book_cover.html' import book_cover_image %}
<div class="container-fluid">
{% block body %}{% endblock %}
</div>
+2 -1
View File
@@ -1,3 +1,4 @@
{% from 'book_cover.html' import book_cover_image %}
{% extends "layout.html" %}
{% block body %}
<h1 class="{{page}}">{{_(title)}}</h1>
@@ -29,7 +30,7 @@
<div class="cover">
<a href="{{url_for('web.books_list', data=data, sort_param='new', book_id=entry[0].series[0].id )}}">
<span class="img">
<img src="{{ url_for('web.get_cover', book_id=entry[0].id) }}" alt="{{ entry[0].name }}"/>
{{ book_cover_image(entry[0], entry[0].id|get_book_thumbnails(thumbnails)) }}
<span class="badge">{{entry.count}}</span>
</span>
</a>
+3 -2
View File
@@ -1,3 +1,4 @@
{% from 'book_cover.html' import book_cover_image %}
{% extends "layout.html" %}
{% block body %}
{% if g.user.show_detail_random() %}
@@ -9,7 +10,7 @@
<div class="cover">
<a href="{{ url_for('web.show_book', book_id=entry.id) }}" data-toggle="modal" data-target="#bookDetailsModal" data-remote="false">
<span class="img">
<img src="{{ url_for('web.get_cover', book_id=entry.id) }}" alt="{{ entry.title }}" />
{{ book_cover_image(entry, entry.id|get_book_thumbnails(thumbnails)) }}
{% if entry.id in read_book_ids %}<span class="badge read glyphicon glyphicon-ok"></span>{% endif %}
</span>
</a>
@@ -86,7 +87,7 @@
<div class="cover">
<a href="{{ url_for('web.show_book', book_id=entry.id) }}" data-toggle="modal" data-target="#bookDetailsModal" data-remote="false">
<span class="img">
<img src="{{ url_for('web.get_cover', book_id=entry.id) }}" alt="{{ entry.title }}"/>
{{ book_cover_image(entry, entry.id|get_book_thumbnails(thumbnails)) }}
{% if entry.id in read_book_ids %}<span class="badge read glyphicon glyphicon-ok"></span>{% endif %}
</span>
</a>
+1
View File
@@ -1,4 +1,5 @@
{% from 'modal_dialogs.html' import restrict_modal, delete_book, filechooser_modal, delete_confirm_modal, change_confirm_modal %}
{% from 'book_cover.html' import book_cover_image %}
<!DOCTYPE html>
<html lang="{{ g.user.locale }}">
<head>
+2 -1
View File
@@ -1,3 +1,4 @@
{% from 'book_cover.html' import book_cover_image %}
{% extends "layout.html" %}
{% block body %}
<div class="discover">
@@ -44,7 +45,7 @@
{% if entry.has_cover is defined %}
<a href="{{ url_for('web.show_book', book_id=entry.id) }}" data-toggle="modal" data-target="#bookDetailsModal" data-remote="false">
<span class="img">
<img src="{{ url_for('web.get_cover', book_id=entry.id) }}" alt="{{ entry.title }}" />
{{ book_cover_image(entry, entry.id|get_book_thumbnails(thumbnails)) }}
{% if entry.id in read_book_ids %}<span class="badge read glyphicon glyphicon-ok"></span>{% endif %}
</span>
</a>
+2 -1
View File
@@ -1,3 +1,4 @@
{% from 'book_cover.html' import book_cover_image %}
{% extends "layout.html" %}
{% block body %}
<div class="discover">
@@ -31,7 +32,7 @@
<div class="cover">
<a href="{{ url_for('web.show_book', book_id=entry.id) }}" data-toggle="modal" data-target="#bookDetailsModal" data-remote="false">
<span class="img">
<img src="{{ url_for('web.get_cover', book_id=entry.id) }}" alt="{{ entry.title }}" />
{{ book_cover_image(entry, entry.id|get_book_thumbnails(thumbnails)) }}
{% if entry.id in read_book_ids %}<span class="badge read glyphicon glyphicon-ok"></span>{% endif %}
</span>
</a>