Merge branch 'master' into Develop

pull/1228/head
Ozzieisaacs 5 years ago
commit 2dc3235d4f

@ -431,15 +431,15 @@ def delete_restriction(type):
@admin_required @admin_required
def list_restriction(type): def list_restriction(type):
if type == 0: # Tags as template if type == 0: # Tags as template
restrict = [{'Element': x, 'type':_('deny'), 'id': 'd'+str(i) } restrict = [{'Element': x, 'type':_('Deny'), 'id': 'd'+str(i) }
for i,x in enumerate(config.list_denied_tags()) if x != '' ] for i,x in enumerate(config.list_denied_tags()) if x != '' ]
allow = [{'Element': x, 'type':_('allow'), 'id': 'a'+str(i) } allow = [{'Element': x, 'type':_('Allow'), 'id': 'a'+str(i) }
for i,x in enumerate(config.list_allowed_tags()) if x != ''] for i,x in enumerate(config.list_allowed_tags()) if x != '']
json_dumps = restrict + allow json_dumps = restrict + allow
elif type == 1: # CustomC as template elif type == 1: # CustomC as template
restrict = [{'Element': x, 'type':_('deny'), 'id': 'd'+str(i) } restrict = [{'Element': x, 'type':_('Deny'), 'id': 'd'+str(i) }
for i,x in enumerate(config.list_denied_column_values()) if x != '' ] for i,x in enumerate(config.list_denied_column_values()) if x != '' ]
allow = [{'Element': x, 'type':_('allow'), 'id': 'a'+str(i) } allow = [{'Element': x, 'type':_('Allow'), 'id': 'a'+str(i) }
for i,x in enumerate(config.list_allowed_column_values()) if x != ''] for i,x in enumerate(config.list_allowed_column_values()) if x != '']
json_dumps = restrict + allow json_dumps = restrict + allow
elif type == 2: # Tags per user elif type == 2: # Tags per user
@ -448,9 +448,9 @@ def list_restriction(type):
usr = ub.session.query(ub.User).filter(ub.User.id == usr_id).first() usr = ub.session.query(ub.User).filter(ub.User.id == usr_id).first()
else: else:
usr = current_user usr = current_user
restrict = [{'Element': x, 'type':_('deny'), 'id': 'd'+str(i) } restrict = [{'Element': x, 'type':_('Deny'), 'id': 'd'+str(i) }
for i,x in enumerate(usr.list_denied_tags()) if x != '' ] for i,x in enumerate(usr.list_denied_tags()) if x != '' ]
allow = [{'Element': x, 'type':_('allow'), 'id': 'a'+str(i) } allow = [{'Element': x, 'type':_('Allow'), 'id': 'a'+str(i) }
for i,x in enumerate(usr.list_allowed_tags()) if x != ''] for i,x in enumerate(usr.list_allowed_tags()) if x != '']
json_dumps = restrict + allow json_dumps = restrict + allow
elif type == 3: # CustomC per user elif type == 3: # CustomC per user
@ -459,9 +459,9 @@ def list_restriction(type):
usr = ub.session.query(ub.User).filter(ub.User.id==usr_id).first() usr = ub.session.query(ub.User).filter(ub.User.id==usr_id).first()
else: else:
usr = current_user usr = current_user
restrict = [{'Element': x, 'type':_('deny'), 'id': 'd'+str(i) } restrict = [{'Element': x, 'type':_('Deny'), 'id': 'd'+str(i) }
for i,x in enumerate(usr.list_denied_column_values()) if x != '' ] for i,x in enumerate(usr.list_denied_column_values()) if x != '' ]
allow = [{'Element': x, 'type':_('allow'), 'id': 'a'+str(i) } allow = [{'Element': x, 'type':_('Allow'), 'id': 'a'+str(i) }
for i,x in enumerate(usr.list_allowed_column_values()) if x != ''] for i,x in enumerate(usr.list_allowed_column_values()) if x != '']
json_dumps = restrict + allow json_dumps = restrict + allow
else: else:

@ -127,7 +127,7 @@ def generate_auth_token(user_id):
warning = _('PLease access calibre-web from non localhost to get valid api_endpoint for kobo device') warning = _('PLease access calibre-web from non localhost to get valid api_endpoint for kobo device')
return render_title_template( return render_title_template(
"generate_kobo_auth_url.html", "generate_kobo_auth_url.html",
title=_(u"Kobo Set-up"), title=_(u"Kobo Setup"),
warning = warning warning = warning
) )
else: else:
@ -147,7 +147,7 @@ def generate_auth_token(user_id):
ub.session.commit() ub.session.commit()
return render_title_template( return render_title_template(
"generate_kobo_auth_url.html", "generate_kobo_auth_url.html",
title=_(u"Kobo Set-up"), title=_(u"Kobo Setup"),
kobo_auth_url=url_for( kobo_auth_url=url_for(
"kobo.TopLevelEndpoint", auth_token=auth_token.auth_token, _external=True "kobo.TopLevelEndpoint", auth_token=auth_token.auth_token, _external=True
), ),

@ -6,16 +6,16 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<h2>{{_('User list')}}</h2> <h2>{{_('Users')}}</h2>
<table class="table table-striped" id="table_user"> <table class="table table-striped" id="table_user">
<tr> <tr>
<th>{{_('Nickname')}}</th> <th>{{_('Username')}}</th>
<th>{{_('E-mail')}}</th> <th>{{_('E-mail Address')}}</th>
<th>{{_('Kindle')}}</th> <th>{{_('Send to Kindle E-mail Address')}}</th>
<th>{{_('DLS')}}</th> <th>{{_('Downloads')}}</th>
<th class="hidden-xs">{{_('Admin')}}</th> <th class="hidden-xs">{{_('Admin')}}</th>
<th class="hidden-xs">{{_('Download')}}</th> <th class="hidden-xs">{{_('Download')}}</th>
<th class="hidden-xs">{{_('View Ebooks')}}</th> <th class="hidden-xs">{{_('View eBooks')}}</th>
<th class="hidden-xs">{{_('Upload')}}</th> <th class="hidden-xs">{{_('Upload')}}</th>
<th class="hidden-xs">{{_('Edit')}}</th> <th class="hidden-xs">{{_('Edit')}}</th>
</tr> </tr>
@ -35,20 +35,20 @@
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</table> </table>
<div class="btn btn-default" id="admin_new_user"><a href="{{url_for('admin.new_user')}}">{{_('Add new user')}}</a></div> <div class="btn btn-default" id="admin_new_user"><a href="{{url_for('admin.new_user')}}">{{_('Add New User')}}</a></div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<h2>{{_('SMTP e-mail server settings')}}</h2> <h2>{{_('E-mail Server Settings')}}</h2>
<table class="table table-striped" id="table_email"> <table class="table table-striped" id="table_email">
<tr> <tr>
<th>{{_('SMTP hostname')}}</th> <th>{{_('SMTP Hostname')}}</th>
<th>{{_('SMTP port')}}</th> <th>{{_('SMTP Port')}}</th>
<th>{{_('SSL')}}</th> <th>{{_('Encryption')}}</th>
<th>{{_('SMTP login')}}</th> <th>{{_('SMTP Login')}}</th>
<th class="hidden-xs">{{_('From mail')}}</th> <th class="hidden-xs">{{_('From E-mail')}}</th>
</tr> </tr>
<tr> <tr>
<td>{{email.mail_server}}</td> <td>{{email.mail_server}}</td>
@ -67,11 +67,11 @@
<h2>{{_('Configuration')}}</h2> <h2>{{_('Configuration')}}</h2>
<div class="col-xs-12 col-sm-6"> <div class="col-xs-12 col-sm-6">
<div class="row"> <div class="row">
<div class="col-xs-6 col-sm-6">{{_('Calibre DB dir')}}</div> <div class="col-xs-6 col-sm-6">{{_('Calibre Database Directory')}}</div>
<div class="col-xs-6 col-sm-6">{{config.config_calibre_dir}}</div> <div class="col-xs-6 col-sm-6">{{config.config_calibre_dir}}</div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-xs-6 col-sm-6">{{_('Log level')}}</div> <div class="col-xs-6 col-sm-6">{{_('Log Level')}}</div>
<div class="col-xs-6 col-sm-6">{{config.get_log_level()}}</div> <div class="col-xs-6 col-sm-6">{{config.get_log_level()}}</div>
</div> </div>
<div class="row"> <div class="row">
@ -81,27 +81,27 @@
</div> </div>
<div class="col-xs-12 col-sm-6"> <div class="col-xs-12 col-sm-6">
<div class="row"> <div class="row">
<div class="col-xs-6 col-sm-7">{{_('Books per page')}}</div> <div class="col-xs-6 col-sm-7">{{_('Books per Page')}}</div>
<div class="col-xs-6 col-sm-5">{{config.config_books_per_page}}</div> <div class="col-xs-6 col-sm-5">{{config.config_books_per_page}}</div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-xs-6 col-sm-7">{{_('Uploading')}}</div> <div class="col-xs-6 col-sm-7">{{_('Uploads')}}</div>
<div class="col-xs-6 col-sm-5">{{ display_bool_setting(config.config_uploading) }}</div> <div class="col-xs-6 col-sm-5">{{ display_bool_setting(config.config_uploading) }}</div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-xs-6 col-sm-7">{{_('Anonymous browsing')}}</div> <div class="col-xs-6 col-sm-7">{{_('Anonymous Browsing')}}</div>
<div class="col-xs-6 col-sm-5">{{ display_bool_setting(config.config_anonbrowse) }}</div> <div class="col-xs-6 col-sm-5">{{ display_bool_setting(config.config_anonbrowse) }}</div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-xs-6 col-sm-7">{{_('Public registration')}}</div> <div class="col-xs-6 col-sm-7">{{_('Public Registration')}}</div>
<div class="col-xs-6 col-sm-5">{{ display_bool_setting(config.config_public_reg) }}</div> <div class="col-xs-6 col-sm-5">{{ display_bool_setting(config.config_public_reg) }}</div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-xs-6 col-sm-7">{{_('Remote login')}}</div> <div class="col-xs-6 col-sm-7">{{_('Magic Link Remote Login')}}</div>
<div class="col-xs-6 col-sm-5">{{ display_bool_setting(config.config_remote_login) }}</div> <div class="col-xs-6 col-sm-5">{{ display_bool_setting(config.config_remote_login) }}</div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-xs-6 col-sm-7">{{_('Reverse proxy login')}}</div> <div class="col-xs-6 col-sm-7">{{_('Reverse Proxy Login')}}</div>
<div class="col-xs-6 col-sm-5">{{ display_bool_setting(config.config_allow_reverse_proxy_header_login) }}</div> <div class="col-xs-6 col-sm-5">{{ display_bool_setting(config.config_allow_reverse_proxy_header_login) }}</div>
</div> </div>
{% if config.config_allow_reverse_proxy_header_login %} {% if config.config_allow_reverse_proxy_header_login %}
@ -111,18 +111,18 @@
</div> </div>
{% endif %} {% endif %}
</div> </div>
<div class="btn btn-default"><a id="basic_config" href="{{url_for('admin.configuration')}}">{{_('Basic Configuration')}}</a></div> <div class="btn btn-default"><a id="basic_config" href="{{url_for('admin.configuration')}}">{{_('Edit Basic Configuration')}}</a></div>
<div class="btn btn-default"><a id="view_config" href="{{url_for('admin.view_configuration')}}">{{_('UI Configuration')}}</a></div> <div class="btn btn-default"><a id="view_config" href="{{url_for('admin.view_configuration')}}">{{_('Edit UI Configuration')}}</a></div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<h2>{{_('Administration')}}</h2> <h2>{{_('Administration')}}</h2>
<div class="btn btn-default"><a id="logfile" href="{{url_for('admin.view_logfile')}}">{{_('View Logfiles')}}</a></div> <div class="btn btn-default"><a id="logfile" href="{{url_for('admin.view_logfile')}}">{{_('View Logs')}}</a></div>
<div class="btn btn-default" id="restart_database">{{_('Reconnect to Calibre DB')}}</div> <div class="btn btn-default" id="restart_database">{{_('Reconnect Calibre Database')}}</div>
<div class="btn btn-default" id="admin_restart" data-toggle="modal" data-target="#RestartDialog">{{_('Restart Calibre-Web')}}</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">{{_('Stop Calibre-Web')}}</div> <div class="btn btn-default" id="admin_stop" data-toggle="modal" data-target="#ShutdownDialog">{{_('Shutdown')}}</div>
</div> </div>
</div> </div>
@ -145,7 +145,7 @@
</table> </table>
<div class="hidden" id="update_error"> <span>{{update_error}}</span></div> <div class="hidden" id="update_error"> <span>{{update_error}}</span></div>
<div class="btn btn-default" id="check_for_update">{{_('Check for update')}}</div> <div class="btn btn-default" id="check_for_update">{{_('Check for Update')}}</div>
<div class="btn btn-default hidden" id="perform_update" data-toggle="modal" data-target="#UpdateprogressDialog">{{_('Perform Update')}}</div> <div class="btn btn-default hidden" id="perform_update" data-toggle="modal" data-target="#UpdateprogressDialog">{{_('Perform Update')}}</div>
</div> </div>
</div> </div>
@ -158,13 +158,13 @@
<div class="modal-content"> <div class="modal-content">
<div class="modal-header bg-info"></div> <div class="modal-header bg-info"></div>
<div class="modal-body text-center"> <div class="modal-body text-center">
<p>{{_('Do you really want to restart Calibre-Web?')}}</p> <p>{{_('Are you sure you want to restart?')}}</p>
<div id="spinner" class="spinner" style="display:none;"> <div id="spinner" class="spinner" style="display:none;">
<img id="img-spinner" src="{{ url_for('static', filename='css/libs/images/loading-icon.gif') }}"/> <img id="img-spinner" src="{{ url_for('static', filename='css/libs/images/loading-icon.gif') }}"/>
</div> </div>
<p></p> <p></p>
<button type="button" class="btn btn-default" id="restart" >{{_('Ok')}}</button> <button type="button" class="btn btn-default" id="restart" >{{_('OK')}}</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{{_('Back')}}</button> <button type="button" class="btn btn-default" data-dismiss="modal">{{_('Cancel')}}</button>
</div> </div>
</div> </div>
</div> </div>
@ -176,9 +176,9 @@
<div class="modal-header bg-info"> <div class="modal-header bg-info">
</div> </div>
<div class="modal-body text-center"> <div class="modal-body text-center">
<p>{{_('Do you really want to stop Calibre-Web?')}}</p> <p>{{_('Are you sure you want to shutdown?')}}</p>
<button type="button" class="btn btn-default" id="shutdown" data-dismiss="modal">{{_('Ok')}}</button> <button type="button" class="btn btn-default" id="shutdown" data-dismiss="modal">{{_('OK')}}</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{{_('Back')}}</button> <button type="button" class="btn btn-default" data-dismiss="modal">{{_('Cancel')}}</button>
</div> </div>
</div> </div>
</div> </div>
@ -188,7 +188,7 @@
<!-- Modal content--> <!-- Modal content-->
<div class="modal-content"> <div class="modal-content">
<div class="modal-header bg-info text-center"> <div class="modal-header bg-info text-center">
<span>{{_('Updating, please do not reload page')}}</span> <span>{{_('Updating, please do not reload this page')}}</span>
</div> </div>
<div class="modal-body text-center"> <div class="modal-body text-center">
<div id="spinner2" class="spinner2" style="display:none;"> <div id="spinner2" class="spinner2" style="display:none;">
@ -197,7 +197,7 @@
<p></p> <p></p>
<div id="Updatecontent"></div> <div id="Updatecontent"></div>
<p></p> <p></p>
<button type="button" class="btn btn-default hidden" id="updateFinished" data-dismiss="modal">{{_('Ok')}}</button> <button type="button" class="btn btn-default hidden" id="updateFinished" data-dismiss="modal">{{_('OK')}}</button>
</div> </div>
</div> </div>
</div> </div>

@ -70,7 +70,7 @@
<input type="text" class="form-control typeahead" name="series" id="series" value="{% if book.series %}{{book.series[0].name}}{% endif %}"> <input type="text" class="form-control typeahead" name="series" id="series" value="{% if book.series %}{{book.series[0].name}}{% endif %}">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="series_index">{{_('Series id')}}</label> <label for="series_index">{{_('Series ID')}}</label>
<input type="number" step="0.01" min="0" class="form-control" name="series_index" id="series_index" value="{{book.series_index}}"> <input type="number" step="0.01" min="0" class="form-control" name="series_index" id="series_index" value="{{book.series_index}}">
</div> </div>
<div class="form-group"> <div class="form-group">
@ -78,16 +78,16 @@
<input type="number" name="rating" id="rating" class="rating input-lg" data-clearable="" value="{% if book.ratings %}{{(book.ratings[0].rating / 2)|int}}{% endif %}"> <input type="number" name="rating" id="rating" class="rating input-lg" data-clearable="" value="{% if book.ratings %}{{(book.ratings[0].rating / 2)|int}}{% endif %}">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="cover_url">{{_('Cover URL (jpg, cover is downloaded and stored in database, field is afterwards empty again)')}}</label> <label for="cover_url">{{_('Fetch Cover from URL (JPEG - Image will be downloaded and stored in database)')}}</label>
<input type="text" class="form-control" name="cover_url" id="cover_url" value=""> <input type="text" class="form-control" name="cover_url" id="cover_url" value="">
</div> </div>
<div class="form-group" aria-label="Upload cover from local drive"> <div class="form-group" aria-label="Upload cover from local drive">
<label class="btn btn-primary btn-file" for="btn-upload-cover">{{ _('Upload Cover from local drive') }}</label> <label class="btn btn-primary btn-file" for="btn-upload-cover">{{ _('Upload Cover from Local Disk') }}</label>
<div class="upload-cover-input-text" id="upload-cover"></div> <div class="upload-cover-input-text" id="upload-cover"></div>
<input id="btn-upload-cover" name="btn-upload-cover" type="file" accept=".jpg, .jpeg, .png, .webp"> <input id="btn-upload-cover" name="btn-upload-cover" type="file" accept=".jpg, .jpeg, .png, .webp">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="pubdate">{{_('Publishing date')}}</label> <label for="pubdate">{{_('Published Date')}}</label>
<div style="position: relative"> <div style="position: relative">
<input type="date" class="form-control" name="pubdate" id="pubdate" value="{% if book.pubdate %}{{book.pubdate|formatdateinput}}{% endif %}"> <input type="date" class="form-control" name="pubdate" id="pubdate" value="{% if book.pubdate %}{{book.pubdate|formatdateinput}}{% endif %}">
<input type="text" class="form-control fake-input hidden" id="fake_pubdate" value="{% if book.pubdate %}{{book.pubdate|formatdate}}{% endif %}"> <input type="text" class="form-control fake-input hidden" id="fake_pubdate" value="{% if book.pubdate %}{{book.pubdate|formatdate}}{% endif %}">
@ -155,7 +155,7 @@
{% if g.user.role_upload() or g.user.role_admin()%} {% if g.user.role_upload() or g.user.role_admin()%}
{% if g.allow_upload %} {% if g.allow_upload %}
<div role="group" aria-label="Upload new book format"> <div role="group" aria-label="Upload new book format">
<label class="btn btn-primary btn-file" for="btn-upload-format">{{ _('Upload format') }}</label> <label class="btn btn-primary btn-file" for="btn-upload-format">{{ _('Upload Format') }}</label>
<div class="upload-format-input-text" id="upload-format"></div> <div class="upload-format-input-text" id="upload-format"></div>
<input id="btn-upload-format" name="btn-upload-format" type="file"> <input id="btn-upload-format" name="btn-upload-format" type="file">
</div> </div>
@ -164,12 +164,12 @@
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input name="detail_view" type="checkbox" checked> {{_('view book after edit')}} <input name="detail_view" type="checkbox" checked> {{_('View Book on Save')}}
</label> </label>
</div> </div>
<a href="#" id="get_meta" class="btn btn-default" data-toggle="modal" data-target="#metaModal">{{_('Get metadata')}}</a> <a href="#" id="get_meta" class="btn btn-default" data-toggle="modal" data-target="#metaModal">{{_('Fetch Metadata')}}</a>
<button type="submit" id="submit" class="btn btn-default">{{_('Submit')}}</button> <button type="submit" id="submit" class="btn btn-default">{{_('Save')}}</button>
<a href="{{ url_for('web.show_book', book_id=book.id) }}" class="btn btn-default">{{_('Back')}}</a> <a href="{{ url_for('web.show_book', book_id=book.id) }}" class="btn btn-default">{{_('Cancel')}}</a>
</div> </div>
</form> </form>
@ -185,13 +185,13 @@
<span>{{_('Are you really sure?')}}</span> <span>{{_('Are you really sure?')}}</span>
</div> </div>
<div class="modal-body text-center"> <div class="modal-body text-center">
<span>{{_('Book will be deleted from Calibre database')}}</span> <span>{{_('This book will be permanently erased from database')}}</span>
<span>{{_('and from hard disk')}}</span> <span>{{_('and hard disk')}}</span>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<a href="{{ url_for('editbook.delete_book', book_id=book.id) }}" class="btn btn-danger">{{_('Delete')}}</a> <a href="{{ url_for('editbook.delete_book', book_id=book.id) }}" class="btn btn-danger">{{_('Delete')}}</a>
<button type="button" class="btn btn-default" data-dismiss="modal">{{_('Back')}}</button> <button type="button" class="btn btn-default" data-dismiss="modal">{{_('Cancel')}}</button>
</div> </div>
</div> </div>
</div> </div>
@ -203,13 +203,13 @@
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="metaModalLabel">{{_('Get metadata')}}</h4> <h4 class="modal-title" id="metaModalLabel">{{_('Fetch Metadata')}}</h4>
<form class="padded-bottom" id="meta-search"> <form class="padded-bottom" id="meta-search">
<div class="input-group"> <div class="input-group">
<label class="sr-only" for="keyword">{{_('Keyword')}}</label> <label class="sr-only" for="keyword">{{_('Keyword')}}</label>
<input type="text" class="form-control" id="keyword" name="keyword" placeholder="{{_(" Search keyword ")}}"> <input type="text" class="form-control" id="keyword" name="keyword" placeholder="{{_(" Search keyword ")}}">
<span class="input-group-btn"> <span class="input-group-btn">
<button type="submit" class="btn btn-primary" id="do-search">{{_("Go!")}}</button> <button type="submit" class="btn btn-primary" id="do-search">{{_("Search")}}</button>
</span> </span>
</div> </div>
</form> </form>

@ -1,6 +1,6 @@
{% extends "layout.html" %} {% extends "layout.html" %}
{% block body %} {% block body %}
<div class="discover" xmlns:text-indent="http://www.w3.org/1999/xhtml"> <div class="discover">
<h2>{{title}}</h2> <h2>{{title}}</h2>
<form role="form" method="POST" autocomplete="off"> <form role="form" method="POST" autocomplete="off">
<div class="panel-group"> <div class="panel-group">
@ -16,7 +16,7 @@
<div id="collapseOne" class="panel-collapse collapse in"> <div id="collapseOne" class="panel-collapse collapse in">
<div class="panel-body"> <div class="panel-body">
<div class="form-group required"> <div class="form-group required">
<label for="config_calibre_dir">{{_('Location of Calibre database')}}</label> <label for="config_calibre_dir">{{_('Location of Calibre Database')}}</label>
<input type="text" class="form-control" name="config_calibre_dir" id="config_calibre_dir" value="{% if config.config_calibre_dir != None %}{{ config.config_calibre_dir }}{% endif %}" autocomplete="off"> <input type="text" class="form-control" name="config_calibre_dir" id="config_calibre_dir" value="{% if config.config_calibre_dir != None %}{{ config.config_calibre_dir }}{% endif %}" autocomplete="off">
</div> </div>
{% if feature_support['gdrive'] %} {% if feature_support['gdrive'] %}
@ -96,7 +96,7 @@
<input type="text" class="form-control" name="config_keyfile" id="config_keyfile" value="{% if config.config_keyfile != None %}{{ config.config_keyfile }}{% endif %}" autocomplete="off"> <input type="text" class="form-control" name="config_keyfile" id="config_keyfile" value="{% if config.config_keyfile != None %}{{ config.config_keyfile }}{% endif %}" autocomplete="off">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="config_updatechannel">{{_('Update channel')}}</label> <label for="config_updatechannel">{{_('Update Channel')}}</label>
<select name="config_updatechannel" id="config_updatechannel" class="form-control"> <select name="config_updatechannel" id="config_updatechannel" class="form-control">
<option value="0" {% if config.config_updatechannel == 0 %}selected{% endif %}>{{_('Stable')}}</option> <option value="0" {% if config.config_updatechannel == 0 %}selected{% endif %}>{{_('Stable')}}</option>
<!--option value="1" {% if config.config_updatechannel == 1 %}selected{% endif %}>{{_('Stable (Automatic)')}}</option--> <!--option value="1" {% if config.config_updatechannel == 1 %}selected{% endif %}>{{_('Stable (Automatic)')}}</option-->
@ -155,19 +155,19 @@
<div class="panel-body"> <div class="panel-body">
<div class="form-group"> <div class="form-group">
<input type="checkbox" id="config_uploading" name="config_uploading" {% if config.config_uploading %}checked{% endif %}> <input type="checkbox" id="config_uploading" name="config_uploading" {% if config.config_uploading %}checked{% endif %}>
<label for="config_uploading">{{_('Enable uploading')}}</label> <label for="config_uploading">{{_('Enable Uploads')}}</label>
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" id="config_anonbrowse" name="config_anonbrowse" {% if config.config_anonbrowse %}checked{% endif %}> <input type="checkbox" id="config_anonbrowse" name="config_anonbrowse" {% if config.config_anonbrowse %}checked{% endif %}>
<label for="config_anonbrowse">{{_('Enable anonymous browsing')}}</label> <label for="config_anonbrowse">{{_('Enable Anonymous Browsing')}}</label>
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" id="config_public_reg" name="config_public_reg" {% if config.config_public_reg %}checked{% endif %}> <input type="checkbox" id="config_public_reg" name="config_public_reg" {% if config.config_public_reg %}checked{% endif %}>
<label for="config_public_reg">{{_('Enable public registration')}}</label> <label for="config_public_reg">{{_('Enable Public Registration')}}</label>
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" id="config_remote_login" name="config_remote_login" {% if config.config_remote_login %}checked{% endif %}> <input type="checkbox" id="config_remote_login" name="config_remote_login" {% if config.config_remote_login %}checked{% endif %}>
<label for="config_remote_login">{{_('Enable remote login ("magic link")')}}</label> <label for="config_remote_login">{{_('Enable Magic Link Remote Login')}}</label>
</div> </div>
{% if feature_support['kobo'] %} {% if feature_support['kobo'] %}
<div class="form-group"> <div class="form-group">
@ -185,7 +185,7 @@
<div class="form-group"> <div class="form-group">
<input type="checkbox" id="config_use_goodreads" name="config_use_goodreads" data-control="goodreads-settings" {% if config.config_use_goodreads %}checked{% endif %}> <input type="checkbox" id="config_use_goodreads" name="config_use_goodreads" data-control="goodreads-settings" {% if config.config_use_goodreads %}checked{% endif %}>
<label for="config_use_goodreads">{{_('Use Goodreads')}}</label> <label for="config_use_goodreads">{{_('Use Goodreads')}}</label>
<a href="https://www.goodreads.com/api/keys" target="_blank" style="margin-left: 5px">{{_('Obtain an API Key')}}</a> <a href="https://www.goodreads.com/api/keys" target="_blank" style="margin-left: 5px">{{_('Create an API Key')}}</a>
</div> </div>
<div data-related="goodreads-settings"> <div data-related="goodreads-settings">
<div class="form-group"> <div class="form-group">
@ -202,7 +202,7 @@
<div class="form-group"> <div class="form-group">
<label for="config_login_type">{{_('Login type')}}</label> <label for="config_login_type">{{_('Login type')}}</label>
<select name="config_login_type" id="config_login_type" class="form-control" data-control="login-settings"> <select name="config_login_type" id="config_login_type" class="form-control" data-control="login-settings">
<option value="0" {% if config.config_login_type == 0 %}selected{% endif %}>{{_('Use standard Authentication')}}</option> <option value="0" {% if config.config_login_type == 0 %}selected{% endif %}>{{_('Use Standard Authentication')}}</option>
{% if feature_support['ldap'] %} {% if feature_support['ldap'] %}
<option value="1" {% if config.config_login_type == 1 %}selected{% endif %}>{{_('Use LDAP Authentication')}}</option> <option value="1" {% if config.config_login_type == 1 %}selected{% endif %}>{{_('Use LDAP Authentication')}}</option>
{% endif %} {% endif %}
@ -222,24 +222,24 @@
<input type="text" class="form-control" id="config_ldap_port" name="config_ldap_port" value="{% if config.config_ldap_port != None %}{{ config.config_ldap_port }}{% endif %}" autocomplete="off"> <input type="text" class="form-control" id="config_ldap_port" name="config_ldap_port" value="{% if config.config_ldap_port != None %}{{ config.config_ldap_port }}{% endif %}" autocomplete="off">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="config_ldap_schema">{{_('LDAP schema (ldap or ldaps)')}}</label> <label for="config_ldap_schema">{{_('LDAP Schema (LDAP or LPAPS)')}}</label>
<input type="text" class="form-control" id="config_ldap_schema" name="config_ldap_schema" value="{% if config.config_ldap_schema != None %}{{ config.config_ldap_schema }}{% endif %}" autocomplete="off"> <input type="text" class="form-control" id="config_ldap_schema" name="config_ldap_schema" value="{% if config.config_ldap_schema != None %}{{ config.config_ldap_schema }}{% endif %}" autocomplete="off">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="config_ldap_serv_username">{{_('LDAP Admin username')}}</label> <label for="config_ldap_serv_username">{{_('LDAP Administrator Username')}}</label>
<input type="text" class="form-control" id="config_ldap_serv_username" name="config_ldap_serv_username" value="{% if config.config_ldap_serv_username != None %}{{ config.config_ldap_serv_username }}{% endif %}" autocomplete="off"> <input type="text" class="form-control" id="config_ldap_serv_username" name="config_ldap_serv_username" value="{% if config.config_ldap_serv_username != None %}{{ config.config_ldap_serv_username }}{% endif %}" autocomplete="off">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="config_ldap_serv_password">{{_('LDAP Admin password')}}</label> <label for="config_ldap_serv_password">{{_('LDAP Administrator Password')}}</label>
<input type="password" class="form-control" id="config_ldap_serv_password" name="config_ldap_serv_password" value="{% if config.config_ldap_serv_password != None %}{{ config.config_ldap_serv_password }}{% endif %}" autocomplete="off"> <input type="password" class="form-control" id="config_ldap_serv_password" name="config_ldap_serv_password" value="{% if config.config_ldap_serv_password != None %}{{ config.config_ldap_serv_password }}{% endif %}" autocomplete="off">
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" id="config_ldap_use_ssl" name="config_ldap_use_ssl" {% if config.config_ldap_use_ssl %}checked{% endif %}> <input type="checkbox" id="config_ldap_use_ssl" name="config_ldap_use_ssl" {% if config.config_ldap_use_ssl %}checked{% endif %}>
<label for="config_ldap_use_ssl">{{_('LDAP Server use SSL')}}</label> <label for="config_ldap_use_ssl">{{_('LDAP Server Enable SSL')}}</label>
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" id="config_ldap_use_tls" name="config_ldap_use_tls" {% if config.config_ldap_use_tls %}checked{% endif %}> <input type="checkbox" id="config_ldap_use_tls" name="config_ldap_use_tls" {% if config.config_ldap_use_tls %}checked{% endif %}>
<label for="config_ldap_use_tls">{{_('LDAP Server use TLS')}}</label> <label for="config_ldap_use_tls">{{_('LDAP Server Enable TLS')}}</label>
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" id="config_ldap_require_cert" name="config_ldap_require_cert" data-control="ldap-cert-settings" {% if config.config_ldap_require_cert %}checked{% endif %}> <input type="checkbox" id="config_ldap_require_cert" name="config_ldap_require_cert" data-control="ldap-cert-settings" {% if config.config_ldap_require_cert %}checked{% endif %}>
@ -256,7 +256,7 @@
<input type="text" class="form-control" id="config_ldap_dn" name="config_ldap_dn" value="{% if config.config_ldap_dn != None %}{{ config.config_ldap_dn }}{% endif %}" autocomplete="off"> <input type="text" class="form-control" id="config_ldap_dn" name="config_ldap_dn" value="{% if config.config_ldap_dn != None %}{{ config.config_ldap_dn }}{% endif %}" autocomplete="off">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="config_ldap_user_object">{{_('LDAP User object filter')}}</label> <label for="config_ldap_user_object">{{_('LDAP User Object Filter')}}</label>
<input type="text" class="form-control" id="config_ldap_user_object" name="config_ldap_user_object" value="{% if config.config_ldap_user_object != None %}{{ config.config_ldap_user_object }}{% endif %}" autocomplete="off"> <input type="text" class="form-control" id="config_ldap_user_object" name="config_ldap_user_object" value="{% if config.config_ldap_user_object != None %}{{ config.config_ldap_user_object }}{% endif %}" autocomplete="off">
</div> </div>
<div class="form-group"> <div class="form-group">
@ -309,7 +309,7 @@
<div class="panel-body"> <div class="panel-body">
<div class="form-group"> <div class="form-group">
<div><input type="radio" name="config_ebookconverter" id="converter0" value="0" {% if config.config_ebookconverter == 0 %}checked{% endif %}> <div><input type="radio" name="config_ebookconverter" id="converter0" value="0" {% if config.config_ebookconverter == 0 %}checked{% endif %}>
<label for="converter0">{{_('No converter')}}</label></div> <label for="converter0">{{_('No Converter')}}</label></div>
<div><input type="radio" name="config_ebookconverter" id="converter1" value="1" {% if config.config_ebookconverter == 1 %}checked{% endif %}> <div><input type="radio" name="config_ebookconverter" id="converter1" value="1" {% if config.config_ebookconverter == 1 %}checked{% endif %}>
<label for="converter1">{{_('Use Kindlegen')}}</label></div> <label for="converter1">{{_('Use Kindlegen')}}</label></div>
<div><input type="radio" name="config_ebookconverter" id="converter2" value="2" {% if config.config_ebookconverter == 2 %}checked{% endif %}> <div><input type="radio" name="config_ebookconverter" id="converter2" value="2" {% if config.config_ebookconverter == 2 %}checked{% endif %}>
@ -340,10 +340,10 @@
<div class="col-sm-12"> <div class="col-sm-12">
{% if not show_login_button %} {% if not show_login_button %}
<button type="submit" name="submit" class="btn btn-default">{{_('Submit')}}</button> <button type="submit" name="submit" class="btn btn-default">{{_('Save')}}</button>
{% endif %} {% endif %}
{% if show_back_button %} {% if show_back_button %}
<a href="{{ url_for('admin.admin') }}" class="btn btn-default">{{_('Back')}}</a> <a href="{{ url_for('admin.admin') }}" class="btn btn-default">{{_('Cancel')}}</a>
{% endif %} {% endif %}
{% if show_login_button %} {% if show_login_button %}
<a href="{{ url_for('web.login') }}" name="login" class="btn btn-default">{{_('Login')}}</a> <a href="{{ url_for('web.login') }}" name="login" class="btn btn-default">{{_('Login')}}</a>

@ -24,15 +24,15 @@
<input type="text" class="form-control" name="config_calibre_web_title" id="config_calibre_web_title" value="{% if conf.config_calibre_web_title != None %}{{ conf.config_calibre_web_title }}{% endif %}" autocomplete="off" required> <input type="text" class="form-control" name="config_calibre_web_title" id="config_calibre_web_title" value="{% if conf.config_calibre_web_title != None %}{{ conf.config_calibre_web_title }}{% endif %}" autocomplete="off" required>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="config_books_per_page">{{_('Books per page')}}</label> <label for="config_books_per_page">{{_('Books per Page')}}</label>
<input type="number" min="1" max="200" class="form-control" name="config_books_per_page" id="config_books_per_page" value="{% if conf.config_books_per_page != None %}{{ conf.config_books_per_page }}{% endif %}" autocomplete="off"> <input type="number" min="1" max="200" class="form-control" name="config_books_per_page" id="config_books_per_page" value="{% if conf.config_books_per_page != None %}{{ conf.config_books_per_page }}{% endif %}" autocomplete="off">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="config_random_books">{{_('No. of random books to show')}}</label> <label for="config_random_books">{{_('No. of Random Books to Display')}}</label>
<input type="number" min="1" max="30" class="form-control" name="config_random_books" id="config_random_books" value="{% if conf.config_random_books != None %}{{ conf.config_random_books }}{% endif %}" autocomplete="off"> <input type="number" min="1" max="30" class="form-control" name="config_random_books" id="config_random_books" value="{% if conf.config_random_books != None %}{{ conf.config_random_books }}{% endif %}" autocomplete="off">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="config_authors_max">{{_('No. of authors to show before hiding (0=disable hiding)')}}</label> <label for="config_authors_max">{{_('No. of Authors to Display Before Hiding (0=Disable Hiding)')}}</label>
<input type="number" min="0" max="999" class="form-control" name="config_authors_max" id="config_authors_max" value="{% if conf.config_authors_max != None %}{{ conf.config_authors_max }}{% endif %}" autocomplete="off"> <input type="number" min="0" max="999" class="form-control" name="config_authors_max" id="config_authors_max" value="{% if conf.config_authors_max != None %}{{ conf.config_authors_max }}{% endif %}" autocomplete="off">
</div> </div>
<div class="form-group"> <div class="form-group">
@ -43,11 +43,11 @@
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="config_columns_to_ignore">{{_('Regular expression for ignoring columns')}}</label> <label for="config_columns_to_ignore">{{_('Regular Expression for Ignoring Columns')}}</label>
<input type="text" class="form-control" name="config_columns_to_ignore" id="config_columns_to_ignore" value="{% if conf.config_columns_to_ignore != None %}{{ conf.config_columns_to_ignore }}{% endif %}" autocomplete="off"> <input type="text" class="form-control" name="config_columns_to_ignore" id="config_columns_to_ignore" value="{% if conf.config_columns_to_ignore != None %}{{ conf.config_columns_to_ignore }}{% endif %}" autocomplete="off">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="config_read_column">{{_('Link read/unread status to Calibre column')}}</label> <label for="config_read_column">{{_('Link Read/Unread Status to Calibre Column')}}</label>
<select name="config_read_column" id="config_read_column" class="form-control"> <select name="config_read_column" id="config_read_column" class="form-control">
<option value="0" {% if conf.config_read_column == 0 %}selected{% endif %}></option> <option value="0" {% if conf.config_read_column == 0 %}selected{% endif %}></option>
{% for readColumn in readColumns %} {% for readColumn in readColumns %}
@ -56,7 +56,7 @@
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="config_restricted_column">{{_('View restriction based on Calibre column')}}</label> <label for="config_restricted_column">{{_('View Restrictions based on Calibre column')}}</label>
<select name="config_restricted_column" id="config_restricted_column" class="form-control"> <select name="config_restricted_column" id="config_restricted_column" class="form-control">
<option value="0" {% if conf.config_restricted_column == 0 %}selected{% endif %}>{{ _('None') }}</option> <option value="0" {% if conf.config_restricted_column == 0 %}selected{% endif %}>{{ _('None') }}</option>
{% for restrictColumn in restrictColumns %} {% for restrictColumn in restrictColumns %}
@ -65,7 +65,7 @@
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="config_title_regex">{{_('Regular expression for title sorting')}}</label> <label for="config_title_regex">{{_('Regular Expression for Title Sorting')}}</label>
<input type="text" class="form-control" name="config_title_regex" id="config_title_regex" value="{% if conf.config_title_regex != None %}{{ conf.config_title_regex }}{% endif %}" autocomplete="off"> <input type="text" class="form-control" name="config_title_regex" id="config_title_regex" value="{% if conf.config_title_regex != None %}{{ conf.config_title_regex }}{% endif %}" autocomplete="off">
</div> </div>
</div> </div>
@ -77,7 +77,7 @@
<h4 class="panel-title"> <h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" href="#collapsesix"> <a class="accordion-toggle" data-toggle="collapse" href="#collapsesix">
<span class="glyphicon glyphicon-plus"></span> <span class="glyphicon glyphicon-plus"></span>
{{_('Default settings for new users')}} {{_('Default Settings for New Users')}}
</a> </a>
</h4> </h4>
</div> </div>
@ -85,7 +85,7 @@
<div class="panel-body"> <div class="panel-body">
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="admin_role" id="admin_role" {% if conf.role_admin() %}checked{% endif %}> <input type="checkbox" name="admin_role" id="admin_role" {% if conf.role_admin() %}checked{% endif %}>
<label for="admin_role">{{_('Admin user')}}</label> <label for="admin_role">{{_('Admin User')}}</label>
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="download_role" id="download_role" {% if conf.role_download() %}checked{% endif %}> <input type="checkbox" name="download_role" id="download_role" {% if conf.role_download() %}checked{% endif %}>
@ -93,7 +93,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="viewer_role" id="viewer_role" {% if conf.role_viewer() %}checked{% endif %}> <input type="checkbox" name="viewer_role" id="viewer_role" {% if conf.role_viewer() %}checked{% endif %}>
<label for="viewer_role">{{_('Allow book viewer')}}</label> <label for="viewer_role">{{_('Allow eBook Viewer')}}</label>
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="upload_role" id="upload_role" {% if conf.role_upload() %}checked{% endif %}> <input type="checkbox" name="upload_role" id="upload_role" {% if conf.role_upload() %}checked{% endif %}>
@ -105,7 +105,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="delete_role" id="delete_role" {% if conf.role_delete_books() %}checked{% endif %}> <input type="checkbox" name="delete_role" id="delete_role" {% if conf.role_delete_books() %}checked{% endif %}>
<label for="delete_role">{{_('Allow Delete books')}}</label> <label for="delete_role">{{_('Allow Delete Books')}}</label>
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="passwd_role" id="passwd_role" {% if conf.role_passwd() %}checked{% endif %}> <input type="checkbox" name="passwd_role" id="passwd_role" {% if conf.role_passwd() %}checked{% endif %}>
@ -123,7 +123,7 @@
<h4 class="panel-title"> <h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" href="#collapseseven"> <a class="accordion-toggle" data-toggle="collapse" href="#collapseseven">
<span class="glyphicon glyphicon-plus"></span> <span class="glyphicon glyphicon-plus"></span>
{{_('Default visibilities for new users')}} {{_('Default Visibilities for New Users')}}
</a> </a>
</h4> </h4>
</div> </div>
@ -139,16 +139,16 @@
{% endfor %} {% endfor %}
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="Show_detail_random" id="Show_detail_random" {% if conf.show_detail_random() %}checked{% endif %}> <input type="checkbox" name="Show_detail_random" id="Show_detail_random" {% if conf.show_detail_random() %}checked{% endif %}>
<label for="Show_detail_random">{{_('Show random books in detail view')}}</label> <label for="Show_detail_random">{{_('Show Random Books in Detail View')}}</label>
</div> </div>
<a href="#" id="get_tags" class="btn btn-default" data-toggle="modal" data-target="#restrictModal">{{_('Add allowed/denied Tags')}}</a> <a href="#" id="get_tags" class="btn btn-default" data-toggle="modal" data-target="#restrictModal">{{_('Add Allowed/Denied Tags')}}</a>
<a href="#" id="get_column_values" class="btn btn-default" data-toggle="modal" data-target="#restrictModal">{{_('Add allowed/denied custom column values')}}</a> <a href="#" id="get_column_values" class="btn btn-default" data-toggle="modal" data-target="#restrictModal">{{_('Add Allowed/Denied custom column values')}}</a>
</div> </div>
</div> </div>
</div> </div>
<div class="col-sm-12"> <div class="col-sm-12">
<button type="submit" name="submit" class="btn btn-default">{{_('Submit')}}</button> <button type="submit" name="submit" class="btn btn-default">{{_('Save')}}</button>
<a href="{{ url_for('admin.admin') }}" class="btn btn-default">{{_('Back')}}</a> <a href="{{ url_for('admin.admin') }}" class="btn btn-default">{{_('Cancel')}}</a>
</div> </div>
</form> </form>
</div> </div>

@ -56,7 +56,7 @@
{% if reader_list and g.user.role_viewer() %} {% if reader_list and g.user.role_viewer() %}
<div class="btn-group" role="group"> <div class="btn-group" role="group">
<button id="read-in-browser" type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <button id="read-in-browser" type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="glyphicon glyphicon-eye-open"></span> {{_('Read in browser')}} <span class="glyphicon glyphicon-eye-open"></span> {{_('Read in Browser')}}
<span class="caret"></span> <span class="caret"></span>
</button> </button>
<ul class="dropdown-menu" aria-labelledby="read-in-browser"> <ul class="dropdown-menu" aria-labelledby="read-in-browser">
@ -69,7 +69,7 @@
{% if audioentries|length > 0 %} {% if audioentries|length > 0 %}
<div class="btn-group" role="group"> <div class="btn-group" role="group">
<button id="listen-in-browser" type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <button id="listen-in-browser" type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="glyphicon glyphicon-music"></span> {{_('Listen in browser')}} <span class="glyphicon glyphicon-music"></span> {{_('Listen in Browser')}}
<span class="caret"></span> <span class="caret"></span>
</button> </button>
<ul class="dropdown-menu" aria-labelledby="read-in-browser"> <ul class="dropdown-menu" aria-labelledby="read-in-browser">
@ -120,7 +120,7 @@
{% if entry.languages.__len__() > 0 %} {% if entry.languages.__len__() > 0 %}
<div class="languages"> <div class="languages">
<p> <p>
<span class="label label-default">{{_('language')}}: {% for language in entry.languages %}{{language.language_name}}{% if not loop.last %}, {% endif %}{% endfor %}</span> <span class="label label-default">{{_('Language')}}: {% for language in entry.languages %}{{language.language_name}}{% if not loop.last %}, {% endif %}{% endfor %}</span>
</p> </p>
</div> </div>
{% endif %} {% endif %}
@ -162,7 +162,7 @@
{% if entry.pubdate[:10] != '0101-01-01' %} {% if entry.pubdate[:10] != '0101-01-01' %}
<div class="publishing-date"> <div class="publishing-date">
<p>{{_('Publishing date')}}: {{entry.pubdate|formatdate}} </p> <p>{{_('Published')}}: {{entry.pubdate|formatdate}} </p>
</div> </div>
{% endif %} {% endif %}
{% if cc|length > 0 %} {% if cc|length > 0 %}
@ -283,7 +283,7 @@
{% if g.user.role_edit() %} {% if g.user.role_edit() %}
<div class="btn-toolbar" role="toolbar"> <div class="btn-toolbar" role="toolbar">
<div class="btn-group" role="group" aria-label="Edit/Delete book"> <div class="btn-group" role="group" aria-label="Edit/Delete book">
<a href="{{ url_for('editbook.edit_book', book_id=entry.id) }}" class="btn btn-sm btn-warning" id="edit_book" role="button"><span class="glyphicon glyphicon-edit"></span> {{_('Edit metadata')}}</a> <a href="{{ url_for('editbook.edit_book', book_id=entry.id) }}" class="btn btn-sm btn-warning" id="edit_book" role="button"><span class="glyphicon glyphicon-edit"></span> {{_('Edit Metadata')}}</a>
</div> </div>
</div> </div>
{% endif %} {% endif %}

@ -8,11 +8,11 @@
<h1>{{title}}</h1> <h1>{{title}}</h1>
<form role="form" method="POST"> <form role="form" method="POST">
<div class="form-group"> <div class="form-group">
<label for="mail_server">{{_('SMTP hostname')}}</label> <label for="mail_server">{{_('SMTP Hostname')}}</label>
<input type="text" class="form-control" name="mail_server" id="mail_server" value="{{content.mail_server}}"> <input type="text" class="form-control" name="mail_server" id="mail_server" value="{{content.mail_server}}">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="mail_port">{{_('SMTP port (usually 25 for plain SMTP and 465 for SSL and 587 for STARTTLS)')}}</label> <label for="mail_port">{{_('SMTP Port')}}</label>
<input type="text" class="form-control" name="mail_port" id="mail_port" value="{{content.mail_port}}"> <input type="text" class="form-control" name="mail_port" id="mail_port" value="{{content.mail_port}}">
</div> </div>
<div class="form-group"> <div class="form-group">
@ -24,23 +24,23 @@
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="mail_login">{{_('SMTP login')}}</label> <label for="mail_login">{{_('SMTP Login')}}</label>
<input type="text" class="form-control" name="mail_login" id="mail_login" value="{{content.mail_login}}"> <input type="text" class="form-control" name="mail_login" id="mail_login" value="{{content.mail_login}}">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="mail_password">{{_('SMTP password')}}</label> <label for="mail_password">{{_('SMTP Password')}}</label>
<input type="password" class="form-control" name="mail_password" id="mail_password" value="{{content.mail_password}}"> <input type="password" class="form-control" name="mail_password" id="mail_password" value="{{content.mail_password}}">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="mail_from">{{_('From e-mail')}}</label> <label for="mail_from">{{_('From E-mail')}}</label>
<input type="text" class="form-control" name="mail_from" id="mail_from" value="{{content.mail_from}}"> <input type="text" class="form-control" name="mail_from" id="mail_from" value="{{content.mail_from}}">
</div> </div>
<button type="submit" name="submit" value="submit" class="btn btn-default">{{_('Save settings')}}</button> <button type="submit" name="submit" value="submit" class="btn btn-default">{{_('Save')}}</button>
<button type="submit" name="test" value="test" class="btn btn-default">{{_('Save settings and send Test E-Mail')}}</button> <button type="submit" name="test" value="test" class="btn btn-default">{{_('Save and Send Test E-mail')}}</button>
<a href="{{ url_for('admin.admin') }}" id="back" class="btn btn-default">{{_('Back')}}</a> <a href="{{ url_for('admin.admin') }}" id="back" class="btn btn-default">{{_('Cancel')}}</a>
</form> </form>
{% if g.allow_registration %} {% if g.allow_registration %}
<h2>{{_('Allowed domains for registering')}}</h2> <h2>{{_('Allowed Domains (Whitelist)')}}</h2>
<form id="domain_add_allow" action="{{ url_for('admin.add_domain',allow=1)}}" method="POST"> <form id="domain_add_allow" action="{{ url_for('admin.add_domain',allow=1)}}" method="POST">
<div class="form-group required"> <div class="form-group required">
<label for="domainname_allow">{{_('Add Domain')}}</label> <label for="domainname_allow">{{_('Add Domain')}}</label>
@ -57,7 +57,7 @@
</tr> </tr>
</thead> </thead>
</table> </table>
<h2>{{_('Denied domains for registering')}}</h2> <h2>{{_('Denied Domains (Blacklist)')}}</h2>
<table class="table table-no-bordered" id="domain-deny-table" data-url="{{url_for('admin.list_domain', allow=0)}}" data-id-field="id" data-show-header="false" data-editable-mode="inline"> <table class="table table-no-bordered" id="domain-deny-table" data-url="{{url_for('admin.list_domain', allow=0)}}" data-id-field="id" data-show-header="false" data-editable-mode="inline">
<thead> <thead>
<tr> <tr>
@ -87,9 +87,9 @@
<div class="modal-header bg-danger"> <div class="modal-header bg-danger">
</div> </div>
<div class="modal-body text-center"> <div class="modal-body text-center">
<p>{{_('Do you really want to delete this domain rule?')}}</p> <p>{{_('Are you sure you want to delete this domain?')}}</p>
<button type="button" class="btn btn-danger" id="btndeletedomain" >{{_('Delete')}}</button> <button type="button" class="btn btn-danger" id="btndeletedomain" >{{_('Delete')}}</button>
<button type="button" class="btn btn-default" id="btncancel" data-dismiss="modal">{{_('Back')}}</button> <button type="button" class="btn btn-default" id="btncancel" data-dismiss="modal">{{_('Cancel')}}</button>
</div> </div>
</div> </div>
</div> </div>
@ -104,4 +104,3 @@
<script src="{{ url_for('static', filename='js/table.js') }}"></script> <script src="{{ url_for('static', filename='js/table.js') }}"></script>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

@ -5,7 +5,7 @@
{{_('Open the .kobo/Kobo eReader.conf file in a text editor and add (or edit):')}}</a> {{_('Open the .kobo/Kobo eReader.conf file in a text editor and add (or edit):')}}</a>
</p> </p>
<p> <p>
{% if not warning %}{{_('api_endpoint=')}}{{kobo_auth_url}}{% else %}{{warning}}{% endif %}</a> {% if not warning %}'api_endpoint='{{kobo_auth_url}}{% else %}{{warning}}{% endif %}</a>
</p> </p>
<p> <p>
{{_('Please note that every visit to this current page invalidates any previously generated Authentication url for this user.')}}</a> {{_('Please note that every visit to this current page invalidates any previously generated Authentication url for this user.')}}</a>

@ -20,6 +20,7 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<h1 class="text-center">{{instance}}</h1>
<h1 class="text-center">{{ error_code }}</h1> <h1 class="text-center">{{ error_code }}</h1>
<h3>{{ error_name }}</h3> <h3>{{ error_name }}</h3>
</div> </div>
@ -34,14 +35,14 @@
{% if issue %} {% if issue %}
<div class="row"> <div class="row">
<div class="col errorlink">Please report this issue with all related information: <div class="col errorlink">Please report this issue with all related information:
<a href="https://github.com/janeczku/calibre-web/issues/new">{{_('Create issue')}}</a> <a href="https://github.com/janeczku/calibre-web/issues/new">{{_('Create Issue')}}</a>
</div> </div>
</div> </div>
{% endif %} {% endif %}
<div class="row"> <div class="row">
<div class="col errorlink"> <div class="col errorlink">
<a href="{{url_for('web.index')}}" title="{{ _('Back to home') }}">{{_('Back to home')}}</a> <a href="{{url_for('web.index')}}" title="{{ _('Return to Home') }}">{{_('Return to Home')}}</a>
</div> </div>
</div> </div>

@ -21,7 +21,7 @@
<content type="text">{{_('Popular publications from this catalog based on Downloads.')}}</content> <content type="text">{{_('Popular publications from this catalog based on Downloads.')}}</content>
</entry> </entry>
<entry> <entry>
<title>{{_('Best rated Books')}}</title> <title>{{_('Top Rated Books')}}</title>
<link href="{{url_for('opds.feed_best_rated')}}" type="application/atom+xml;profile=opds-catalog"/> <link href="{{url_for('opds.feed_best_rated')}}" type="application/atom+xml;profile=opds-catalog"/>
<id>{{url_for('opds.feed_best_rated')}}</id> <id>{{url_for('opds.feed_best_rated')}}</id>
<updated>{{ current_time }}</updated> <updated>{{ current_time }}</updated>

@ -31,7 +31,7 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="navbar-header"> <div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">{{_('Toggle navigation')}}</span> <span class="sr-only">{{_('Toggle Navigation')}}</span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
@ -42,9 +42,9 @@
<form class="navbar-form navbar-left" role="search" action="{{url_for('web.search')}}" method="GET"> <form class="navbar-form navbar-left" role="search" action="{{url_for('web.search')}}" method="GET">
<div class="form-group input-group input-group-sm"> <div class="form-group input-group input-group-sm">
<label for="query" class="sr-only">{{_('Search')}}</label> <label for="query" class="sr-only">{{_('Search')}}</label>
<input type="text" class="form-control" id="query" name="query" placeholder="{{_('Search')}}"> <input type="text" class="form-control" id="query" name="query" placeholder="{{_('Search Library')}}">
<span class="input-group-btn"> <span class="input-group-btn">
<button type="submit" id="query_submit" class="btn btn-default">{{_('Go!')}}</button> <button type="submit" id="query_submit" class="btn btn-default">{{_('Search')}}</button>
</span> </span>
</div> </div>
</form> </form>
@ -52,7 +52,7 @@
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
{% if g.user.is_authenticated or g.allow_anonymous %} {% if g.user.is_authenticated or g.allow_anonymous %}
<ul class="nav navbar-nav "> <ul class="nav navbar-nav ">
<li><a href="{{url_for('web.advanced_search')}}" id="advanced_search"><span class="glyphicon glyphicon-search"></span><span class="hidden-sm">{{_('Advanced Search')}}</span></a></li> <li><a href="{{url_for('web.advanced_search')}}" id="advanced_search"><span class="glyphicon glyphicon-search"></span><span class="hidden-sm"> {{_('Advanced Search')}}</span></a></li>
</ul> </ul>
{% endif %} {% endif %}
<ul class="nav navbar-nav navbar-right" id="main-nav"> <ul class="nav navbar-nav navbar-right" id="main-nav">
@ -70,14 +70,14 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if not g.user.is_anonymous %} {% if not g.user.is_anonymous %}
<li><a id="top_tasks" href="{{url_for('web.get_tasks_status')}}"><span class="glyphicon glyphicon-tasks"></span><span class="hidden-sm">{{_('Tasks')}}</span></a></li> <li><a id="top_tasks" href="{{url_for('web.get_tasks_status')}}"><span class="glyphicon glyphicon-tasks"></span> <span class="hidden-sm">{{_('Tasks')}}</span></a></li>
{% endif %} {% endif %}
{% if g.user.role_admin() %} {% if g.user.role_admin() %}
<li><a id="top_admin" data-text="{{_('Settings')}}" href="{{url_for('admin.admin')}}"><span class="glyphicon glyphicon-dashboard"></span><span class="hidden-sm">{{_('Admin')}}</span></a></li> <li><a id="top_admin" data-text="{{_('Settings')}}" href="{{url_for('admin.admin')}}"><span class="glyphicon glyphicon-dashboard"></span> <span class="hidden-sm">{{_('Admin')}}</span></a></li>
{% endif %} {% endif %}
<li><a id="top_user" data-text="{{_('Account')}}" href="{{url_for('web.profile')}}"><span class="glyphicon glyphicon-user"></span><span class="hidden-sm">{{g.user.nickname}}</span></a></li> <li><a id="top_user" data-text="{{_('Account')}}" href="{{url_for('web.profile')}}"><span class="glyphicon glyphicon-user"></span> <span class="hidden-sm">{{g.user.nickname}}</span></a></li>
{% if not g.user.is_anonymous %} {% if not g.user.is_anonymous %}
<li><a id="logout" href="{{url_for('web.logout')}}"><span class="glyphicon glyphicon-log-out"></span><span class="hidden-sm">{{_('Logout')}}</span></a></li> <li><a id="logout" href="{{url_for('web.logout')}}"><span class="glyphicon glyphicon-log-out"></span> <span class="hidden-sm">{{_('Logout')}}</span></a></li>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if g.allow_registration and not g.user.is_authenticated %} {% if g.allow_registration and not g.user.is_authenticated %}
@ -114,7 +114,7 @@
<div id="loader" hidden="true"> <div id="loader" hidden="true">
<center> <center>
<h3>{{_('Uploading...')}}</h3> <h3>{{_('Uploading...')}}</h3>
<span>{{_("please don't refresh the page")}}</span>. <span>{{_("Please do not refresh the page")}}</span>.
</center> </center>
</div> </div>
{%endif%} {%endif%}
@ -132,19 +132,18 @@
<li id="nav_{{element['id']}}" {% if page == element['page'] %}class="active"{% endif %}><a href="{{url_for(element['link'], data=element['page'], sort='new')}}"><span class="glyphicon {{element['glyph']}}"></span>{{_(element['text'])}}</a></li> <li id="nav_{{element['id']}}" {% if page == element['page'] %}class="active"{% endif %}><a href="{{url_for(element['link'], data=element['page'], sort='new')}}"><span class="glyphicon {{element['glyph']}}"></span>{{_(element['text'])}}</a></li>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% if g.user.is_authenticated or g.allow_anonymous %} {% if g.user.is_authenticated or g.allow_anonymous %}
<li class="nav-head hidden-xs public-shelves">{{_('Public Shelves')}}</li> <li class="nav-head hidden-xs public-shelves">{{_('Public Shelves')}}</li>
{% for shelf in g.public_shelfes %} {% for shelf in g.public_shelfes %}
<li><a href="{{url_for('shelf.show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list public_shelf"></span>{{shelf.name|shortentitle(40)}}</a></li> <li><a href="{{url_for('shelf.show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list public_shelf"></span> {{shelf.name|shortentitle(40)}}</a></li>
{% endfor %} {% endfor %}
<li class="nav-head hidden-xs your-shelves">{{_('Your Shelves')}}</li> <li class="nav-head hidden-xs your-shelves">{{_('Your Shelves')}}</li>
{% for shelf in g.user.shelf %} {% for shelf in g.user.shelf %}
<li><a href="{{url_for('shelf.show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list private_shelf"></span>{{shelf.name|shortentitle(40)}}</a></li> <li><a href="{{url_for('shelf.show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list private_shelf"></span> {{shelf.name|shortentitle(40)}}</a></li>
{% endfor %} {% endfor %}
{% if not g.user.is_anonymous %} {% if not g.user.is_anonymous %}
<li id="nav_createshelf" class="create-shelf"><a href="{{url_for('shelf.create_shelf')}}">{{_('Create a Shelf')}}</a></li> <li id="nav_createshelf" class="create-shelf"><a href="{{url_for('shelf.create_shelf')}}">{{_('Create a Shelf')}}</a></li>
<li id="nav_about" {% if page == 'stat' %}class="active"{% endif %}><a href="{{url_for('about.stats')}}"><span class="glyphicon glyphicon-info-sign"></span>{{_('About')}}</a></li> <li id="nav_about" {% if page == 'stat' %}class="active"{% endif %}><a href="{{url_for('about.stats')}}"><span class="glyphicon glyphicon-info-sign"></span> {{_('About')}}</a></li>
{% endif %} {% endif %}
{% endif %} {% endif %}

@ -35,7 +35,7 @@
<div class="sm2-inline-element sm2-button-element"> <div class="sm2-inline-element sm2-button-element">
<div class="sm2-button-bd"> <div class="sm2-button-bd">
<a href="#play" class="sm2-inline-button sm2-icon-play-pause">Play / pause</a> <a href="#play" class="sm2-inline-button sm2-icon-play-pause">Play / Pause</a>
</div> </div>
</div> </div>
@ -43,7 +43,7 @@
<div class="sm2-playlist"> <div class="sm2-playlist">
<div class="sm2-playlist-target"> <div class="sm2-playlist-target">
<noscript><p>JavaScript is required.</p></noscript> <noscript><p>JavaScript Required.</p></noscript>
</div> </div>
</div> </div>
@ -65,31 +65,31 @@
<div class="sm2-inline-element sm2-button-element sm2-volume"> <div class="sm2-inline-element sm2-button-element sm2-volume">
<div class="sm2-button-bd"> <div class="sm2-button-bd">
<span class="sm2-inline-button sm2-volume-control volume-shade"></span> <span class="sm2-inline-button sm2-volume-control volume-shade"></span>
<a href="#volume" class="sm2-inline-button sm2-volume-control">volume</a> <a href="#volume" class="sm2-inline-button sm2-volume-control">Volume</a>
</div> </div>
</div> </div>
<div class="sm2-inline-element sm2-button-element"> <div class="sm2-inline-element sm2-button-element">
<div class="sm2-button-bd"> <div class="sm2-button-bd">
<a href="#prev" title="Previous" class="sm2-inline-button sm2-icon-previous">&lt; previous</a> <a href="#prev" title="Previous" class="sm2-inline-button sm2-icon-previous">&lt; Previous</a>
</div> </div>
</div> </div>
<div class="sm2-inline-element sm2-button-element"> <div class="sm2-inline-element sm2-button-element">
<div class="sm2-button-bd"> <div class="sm2-button-bd">
<a href="#next" title="Next" class="sm2-inline-button sm2-icon-next">&gt; next</a> <a href="#next" title="Next" class="sm2-inline-button sm2-icon-next">&gt; Next</a>
</div> </div>
</div> </div>
<div class="sm2-inline-element sm2-button-element"> <div class="sm2-inline-element sm2-button-element">
<div class="sm2-button-bd"> <div class="sm2-button-bd">
<a href="#repeat" title="Repeat playlist" class="sm2-inline-button sm2-icon-repeat">&infin; repeat</a> <a href="#repeat" title="Repeat playlist" class="sm2-inline-button sm2-icon-repeat">&infin; Repeat</a>
</div> </div>
</div> </div>
<div class="sm2-inline-element sm2-button-element sm2-menu"> <div class="sm2-inline-element sm2-button-element sm2-menu">
<div class="sm2-button-bd"> <div class="sm2-button-bd">
<a href="#menu" class="sm2-inline-button sm2-icon-menu">menu</a> <a href="#menu" class="sm2-inline-button sm2-icon-menu">Menu</a>
</div> </div>
</div> </div>

@ -14,15 +14,15 @@
</div> </div>
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type="checkbox" name="remember_me" checked> {{_('Remember me')}} <input type="checkbox" name="remember_me" checked> {{_('Remember Me')}}
</label> </label>
</div> </div>
<button type="submit" name="submit" class="btn btn-default">{{_('Submit')}}</button> <button type="submit" name="submit" class="btn btn-default">{{_('Login')}}</button>
{% if config.config_login_type == 0 and mail%} {% if config.config_login_type == 0 and mail%}
<button type="submit" name="forgot" value="forgot" class="btn btn-default">{{_('Forgot password')}}</button> <button type="submit" name="forgot" value="forgot" class="btn btn-default">{{_('Forgot Password?')}}</button>
{% endif %} {% endif %}
{% if config.config_remote_login %} {% if config.config_remote_login %}
<a href="{{url_for('web.remote_login')}}" class="pull-right">{{_('Log in with magic link')}}</a> <a href="{{url_for('web.remote_login')}}" class="pull-right">{{_('Log in with Magic Link')}}</a>
{% endif %} {% endif %}
{% if config.config_login_type == 2 %} {% if config.config_login_type == 2 %}
<a href="{{url_for('oauth.github_login')}}" class="pull-right"> <a href="{{url_for('oauth.github_login')}}" class="pull-right">

@ -3,13 +3,13 @@
<div id="log_group" class="inputs"> <div id="log_group" class="inputs">
{% if log_enable %} {% if log_enable %}
<div><input type="radio" name="log_radio" id="log1" value="0" checked> <div><input type="radio" name="log_radio" id="log1" value="0" checked>
<label for="log1">{{_('Show Calibre-Web log: ')}}</label>{{logfiles[0]}}</div> <label for="log1">{{_('Show Calibre-Web Log: ')}}</label>{{logfiles[0]}}</div>
{% else %} {% else %}
<div><label for="log1">{{_('Calibre-Web log: ')}}</label> {{_("Stream output, can't be displayed")}}</div> <div><label for="log1">{{_('Calibre-Web Log: ')}}</label> {{_("Stream output, can't be displayed")}}</div>
{% endif %} {% endif %}
{% if accesslog_enable %} {% if accesslog_enable %}
<div><input type="radio" name="log_radio" id="log0" value="1" {% if not log_enable %}checked{% endif %}> <div><input type="radio" name="log_radio" id="log0" value="1" {% if not log_enable %}checked{% endif %}>
<label for="log0">{{_('Show access log: ')}}</label>{{logfiles[1]}}</div> <label for="log0">{{_('Show Access Log: ')}}</label>{{logfiles[1]}}</div>
{% endif %} {% endif %}
</div> </div>
<div id="renderer" class="log"></div> <div id="renderer" class="log"></div>

@ -2,7 +2,7 @@
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<LongName>{{instance}}</LongName> <LongName>{{instance}}</LongName>
<ShortName>{{instance}}</ShortName> <ShortName>{{instance}}</ShortName>
<Description>{{_('Calibre-Web ebook catalog')}}</Description> <Description>{{_('Calibre-Web eBook Catalog')}}</Description>
<Developer>Janeczku</Developer> <Developer>Janeczku</Developer>
<Contact>https://github.com/janeczku/calibre-web</Contact> <Contact>https://github.com/janeczku/calibre-web</Contact>
<Url type="text/html" <Url type="text/html"

@ -3,7 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>ePubJS Reader</title> <title>ePub Reader</title>
<meta name="description" content=""> <meta name="description" content="">
<meta name="viewport" content="width=device-width, user-scalable=no"> <meta name="viewport" content="width=device-width, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-capable" content="yes">

@ -1,14 +1,14 @@
{% extends "layout.html" %} {% extends "layout.html" %}
{% block body %} {% block body %}
<div class="well col-sm-6 col-sm-offset-2"> <div class="well col-sm-6 col-sm-offset-2">
<h2 style="margin-top: 0">{{_('Register a new account')}}</h2> <h2 style="margin-top: 0">{{_('Register New Account')}}</h2>
<form method="POST" role="form"> <form method="POST" role="form">
<div class="form-group required"> <div class="form-group required">
<label for="nickname">{{_('Username')}}</label> <label for="nickname">{{_('Username')}}</label>
<input type="text" class="form-control" id="nickname" name="nickname" placeholder="{{_('Choose a username')}}" required> <input type="text" class="form-control" id="nickname" name="nickname" placeholder="{{_('Choose a username')}}" required>
</div> </div>
<div class="form-group required"> <div class="form-group required">
<label for="email">{{_('E-mail address')}}</label> <label for="email">{{_('E-mail Address')}}</label>
<input type="email" class="form-control" id="email" name="email" placeholder="{{_('Your email address')}}" required> <input type="email" class="form-control" id="email" name="email" placeholder="{{_('Your email address')}}" required>
</div> </div>
<button type="submit" id="submit" class="btn btn-primary">{{_('Register')}}</button> <button type="submit" id="submit" class="btn btn-primary">{{_('Register')}}</button>

@ -1,15 +1,16 @@
{% extends "layout.html" %} {% extends "layout.html" %}
{% block body %} {% block body %}
<div class="well"> <div class="well">
<h2 style="margin-top: 0">{{_('Remote login')}}</h2> <h2 style="margin-top: 0">{{_('Magic Link - Authorise New Device')}}</h2>
<p> <p>
{{_('Use your other device, login and visit ')}} <a href="{{verify_url}}">{{verify_url}}</a>. {{_('On another device, login and visit:')}}
</p> <h4><a href="{{verify_url}}">{{verify_url}}</a></b>
</h4>
<p> <p>
{{_('Once you do so, you will automatically get logged in on this device.')}} {{_('Once verified, you will automatically be logged in on this device.')}}
</p> </p>
<p> <p>
{{_('The link will expire after 10 minutes.')}} {{_('This verification link will expire in 10 minutes.')}}
</p> </p>
</div> </div>
{% endblock %} {% endblock %}

@ -2,8 +2,8 @@
{% block body %} {% block body %}
<div class="discover"> <div class="discover">
{% if entries|length < 1 %} {% if entries|length < 1 %}
<h2>{{_('No Results for:')}} {{searchterm}}</h2> <h2>{{_('No Results Found')}} {{searchterm}}</h2>
<p>{{_('Please try a different search')}}</p> <p>{{_('Search Term:')}} {{searchterm}}</p>
{% else %} {% else %}
<h2>{{entries|length}} {{_('Results for:')}} {{searchterm}}</h2> <h2>{{entries|length}} {{_('Results for:')}} {{searchterm}}</h2>
{% if g.user.is_authenticated %} {% if g.user.is_authenticated %}

@ -16,14 +16,14 @@
</div> </div>
<div class="row"> <div class="row">
<div class="form-group col-sm-6"> <div class="form-group col-sm-6">
<label for="Publishstart">{{_('Publishing date from')}}</label> <label for="Publishstart">{{_('Published Date From')}}</label>
<div style="position: relative"> <div style="position: relative">
<input type="date" class="form-control" name="Publishstart" id="Publishstart" value=""> <input type="date" class="form-control" name="Publishstart" id="Publishstart" value="">
<input type="text" class="form-control fake-input hidden" id="fake_Publishstart" value=""> <input type="text" class="form-control fake-input hidden" id="fake_Publishstart" value="">
</div> </div>
</div> </div>
<div class="form-group col-sm-6"> <div class="form-group col-sm-6">
<label for="Publishend">{{_('Publishing date to')}}</label> <label for="Publishend">{{_('Published Date To')}}</label>
<div style="position: relative"> <div style="position: relative">
<input type="date" class="form-control" name="Publishend" id="Publishend" value=""> <input type="date" class="form-control" name="Publishend" id="Publishend" value="">
<input type="text" class="form-control fake-input hidden" id="fake_Publishend" value=""> <input type="text" class="form-control fake-input hidden" id="fake_Publishend" value="">
@ -114,11 +114,11 @@
</div> </div>
<div class="row"> <div class="row">
<div class="form-group col-sm-6"> <div class="form-group col-sm-6">
<label for="ratinghigh">{{_('Rating bigger than')}}</label> <label for="ratinghigh">{{_('Rating Above')}}</label>
<input type="number" name="ratinghigh" id="ratinghigh" class="rating input-lg" data-clearable="" > <input type="number" name="ratinghigh" id="ratinghigh" class="rating input-lg" data-clearable="" >
</div> </div>
<div class="form-group col-sm-6"> <div class="form-group col-sm-6">
<label for="ratinglow">{{_('Rating less than')}}</label> <label for="ratinglow">{{_('Rating Below')}}</label>
<input type="number" name="ratinglow" id="ratinglow" class="rating input-lg" data-clearable="" > <input type="number" name="ratinglow" id="ratinglow" class="rating input-lg" data-clearable="" >
</div> </div>
</div> </div>
@ -167,7 +167,7 @@
{% endfor %} {% endfor %}
{% endif %} {% endif %}
<button type="submit" id="adv_submit" class="btn btn-default">{{_('Submit')}}</button> <button type="submit" id="adv_submit" class="btn btn-default">{{_('Search')}}</button>
</form> </form>
</div> </div>
{% endblock %} {% endblock %}

@ -64,13 +64,13 @@
<div class="modal-dialog modal-sm"> <div class="modal-dialog modal-sm">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header bg-danger text-center"> <div class="modal-header bg-danger text-center">
<span>{{_('Do you really want to delete the shelf?')}}</span> <span>{{_('Are you sure you want to delete this shelf?')}}</span>
</div> </div>
<div class="modal-body text-center"> <div class="modal-body text-center">
<span>{{_('Shelf will be lost for everybody and forever!')}}</span> <span>{{_('Shelf will be deleted for all users')}}</span>
<p></p> <p></p>
<a id="confirm" href="{{ url_for('shelf.delete_shelf', shelf_id=shelf.id) }}" class="btn btn-danger">{{_('Ok')}}</a> <a id="confirm" href="{{ url_for('shelf.delete_shelf', shelf_id=shelf.id) }}" class="btn btn-danger">{{_('OK')}}</a>
<button type="button" class="btn btn-default" data-dismiss="modal">{{_('Back')}}</button> <button type="button" class="btn btn-default" data-dismiss="modal">{{_('Cancel')}}</button>
</div> </div>
</div> </div>
</div> </div>

@ -10,13 +10,13 @@
{% if g.user.role_edit_shelfs() %} {% if g.user.role_edit_shelfs() %}
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type="checkbox" name="is_public" {% if shelf.is_public == 1 %}checked{% endif %}> {{_('should the shelf be public?')}} <input type="checkbox" name="is_public" {% if shelf.is_public == 1 %}checked{% endif %}> {{_('Share with Everyone')}}
</label> </label>
</div> </div>
{% endif %} {% endif %}
<button type="submit" class="btn btn-default" id="submit">{{_('Submit')}}</button> <button type="submit" class="btn btn-default" id="submit">{{_('Save')}}</button>
{% if shelf.id != None %} {% if shelf.id != None %}
<a href="{{ url_for('shelf.show_shelf', shelf_id=shelf.id) }}" class="btn btn-default">{{_('Back')}}</a> <a href="{{ url_for('shelf.show_shelf', shelf_id=shelf.id) }}" class="btn btn-default">{{_('Cancel')}}</a>
{% endif %} {% endif %}
</form> </form>
</div> </div>

@ -2,7 +2,7 @@
{% block body %} {% block body %}
<div class="col-sm-8 col-lg-8 col-xs-12"> <div class="col-sm-8 col-lg-8 col-xs-12">
<h2>{{title}}</h2> <h2>{{title}}</h2>
<div>{{_('Drag \'n drop to rearrange order')}}</div> <div>{{_('Drag to Rearrange Order')}}</div>
<div id="sortTrue" class="list-group"> <div id="sortTrue" class="list-group">
{% for entry in entries %} {% for entry in entries %}
<div id="{{entry['id']}}" class="list-group-item"> <div id="{{entry['id']}}" class="list-group-item">
@ -37,6 +37,3 @@
<script src="{{ url_for('static', filename='js/libs/Sortable.min.js') }}"></script> <script src="{{ url_for('static', filename='js/libs/Sortable.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/shelforder.js') }}"></script> <script src="{{ url_for('static', filename='js/shelforder.js') }}"></script>
{% endblock %} {% endblock %}

@ -1,10 +1,10 @@
{% extends "layout.html" %} {% extends "layout.html" %}
{% block body %} {% block body %}
<h3>{{_('About')}}</h3> <h3>{{_('About')}} {{instance}}</h3>
<p>{{instance}} powered by <p>{{instance}} powered by
<a href="https://github.com/janeczku/calibre-web" title="Calibre-Web">Calibre-Web</a>. <a href="https://github.com/janeczku/calibre-web" title="Calibre-Web">Calibre-Web</a>.
</p> </p>
<h3>{{_('Calibre library statistics')}}</h3> <h3>{{_('Library Statistics')}}</h3>
<table id="stats" class="table"> <table id="stats" class="table">
<tbody> <tbody>
<tr> <tr>
@ -25,11 +25,11 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
<h3>{{_('Linked libraries')}}</h3> <h3>{{_('Linked Libraries')}}</h3>
<table id="libs" class="table"> <table id="libs" class="table">
<thead> <thead>
<tr> <tr>
<th>{{_('Program library')}}</th> <th>{{_('Program Library')}}</th>
<th>{{_('Installed Version')}}</th> <th>{{_('Installed Version')}}</th>
</tr> </tr>
</thead> </thead>

@ -4,7 +4,7 @@
{% endblock %} {% endblock %}
{% block body %} {% block body %}
<div class="discover"> <div class="discover">
<h2>{{_('Tasks list')}}</h2> <h2>{{_('Tasks')}}</h2>
<table class="table table-no-bordered" id="table" data-url="{{ url_for('web.get_email_status_json') }}" data-sort-name="starttime" data-sort-order="asc"> <table class="table table-no-bordered" id="table" data-url="{{ url_for('web.get_email_status_json') }}" data-sort-name="starttime" data-sort-order="asc">
<thead> <thead>
<tr> <tr>
@ -14,8 +14,8 @@
<th data-halign="right" data-align="right" data-field="taskMessage" data-sortable="true">{{_('Task')}}</th> <th data-halign="right" data-align="right" data-field="taskMessage" data-sortable="true">{{_('Task')}}</th>
<th data-halign="right" data-align="right" data-field="status" data-sortable="true">{{_('Status')}}</th> <th data-halign="right" data-align="right" data-field="status" data-sortable="true">{{_('Status')}}</th>
<th data-halign="right" data-align="right" data-field="progress" data-sortable="true" data-sorter="elementSorter">{{_('Progress')}}</th> <th data-halign="right" data-align="right" data-field="progress" data-sortable="true" data-sorter="elementSorter">{{_('Progress')}}</th>
<th data-halign="right" data-align="right" data-field="runtime" data-sortable="true" data-sort-name="rt">{{_('Runtime')}}</th> <th data-halign="right" data-align="right" data-field="runtime" data-sortable="true" data-sort-name="rt">{{_('Run Time')}}</th>
<th data-halign="right" data-align="right" data-field="starttime" data-sortable="true" data-sort-name="id">{{_('Starttime')}}</th> <th data-halign="right" data-align="right" data-field="starttime" data-sortable="true" data-sort-name="id">{{_('Start Time')}}</th>
<th data-field="id" data-visible="false"></th> <th data-field="id" data-visible="false"></th>
<th data-field="rt" data-visible="false"></th> <th data-field="rt" data-visible="false"></th>
</tr> </tr>

@ -10,7 +10,7 @@
</div> </div>
{% endif %} {% endif %}
<div class="form-group"> <div class="form-group">
<label for="email">{{_('E-mail address')}}</label> <label for="email">{{_('E-mail Address')}}</label>
<input type="email" class="form-control" name="email" id="email" value="{{ content.email if content.email != None }}" autocomplete="off"> <input type="email" class="form-control" name="email" id="email" value="{{ content.email if content.email != None }}" autocomplete="off">
</div> </div>
{% if ( g.user and g.user.role_passwd() or g.user.role_admin() ) and not content.role_anonymous() %} {% if ( g.user and g.user.role_passwd() or g.user.role_admin() ) and not content.role_anonymous() %}
@ -23,7 +23,7 @@
</div> </div>
{% endif %} {% endif %}
<div class="form-group"> <div class="form-group">
<label for="kindle_mail">{{_('Kindle E-Mail')}}</label> <label for="kindle_mail">{{_('Send to Kindle E-mail Address')}}</label>
<input type="email" class="form-control" name="kindle_mail" id="kindle_mail" value="{{ content.kindle_mail if content.kindle_mail != None }}"> <input type="email" class="form-control" name="kindle_mail" id="kindle_mail" value="{{ content.kindle_mail if content.kindle_mail != None }}">
</div> </div>
{% if not content.role_anonymous() %} {% if not content.role_anonymous() %}
@ -38,9 +38,9 @@
{% endif %} {% endif %}
<div class="form-group"> <div class="form-group">
<label for="default_language">{{_('Show books with language')}}</label> <label for="default_language">{{_('Language of Books')}}</label>
<select name="default_language" id="default_language" class="form-control"> <select name="default_language" id="default_language" class="form-control">
<option value="all" {% if new_user == 1 %}selected{% endif %}>{{ _('Show all') }}</option> <option value="all" {% if new_user == 1 %}selected{% endif %}>{{ _('Show All') }}</option>
{% for language in languages %} {% for language in languages %}
<option value="{{ language.lang_code }}" {% if content.default_language == language.lang_code %}selected{% endif %}>{{ language.name }}</option> <option value="{{ language.lang_code }}" {% if content.default_language == language.lang_code %}selected{% endif %}>{{ language.name }}</option>
{% endfor %} {% endfor %}
@ -77,7 +77,7 @@
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="Show_detail_random" id="Show_detail_random" {% if content.show_detail_random() %}checked{% endif %}> <input type="checkbox" name="Show_detail_random" id="Show_detail_random" {% if content.show_detail_random() %}checked{% endif %}>
<label for="Show_detail_random">{{_('Show random books in detail view')}}</label> <label for="Show_detail_random">{{_('Show Random Books')}}</label>
</div> </div>
{% if ( g.user and g.user.role_admin() and not new_user ) %} {% if ( g.user and g.user.role_admin() and not new_user ) %}
<a href="#" id="get_user_tags" class="btn btn-default" data-toggle="modal" data-target="#restrictModal">{{_('Add allowed/denied Tags')}}</a> <a href="#" id="get_user_tags" class="btn btn-default" data-toggle="modal" data-target="#restrictModal">{{_('Add allowed/denied Tags')}}</a>
@ -89,7 +89,7 @@
{% if not content.role_anonymous() %} {% if not content.role_anonymous() %}
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="admin_role" id="admin_role" {% if content.role_admin() %}checked{% endif %}> <input type="checkbox" name="admin_role" id="admin_role" {% if content.role_admin() %}checked{% endif %}>
<label for="admin_role">{{_('Admin user')}}</label> <label for="admin_role">{{_('Admin User')}}</label>
</div> </div>
{% endif %} {% endif %}
<div class="form-group"> <div class="form-group">
@ -98,7 +98,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="viewer_role" id="viewer_role" {% if content.role_viewer() %}checked{% endif %}> <input type="checkbox" name="viewer_role" id="viewer_role" {% if content.role_viewer() %}checked{% endif %}>
<label for="viewer_role">{{_('Allow book viewer')}}</label> <label for="viewer_role">{{_('Allow eBook Viewer')}}</label>
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="upload_role" id="upload_role" {% if content.role_upload() %}checked{% endif %}> <input type="checkbox" name="upload_role" id="upload_role" {% if content.role_upload() %}checked{% endif %}>
@ -110,7 +110,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="delete_role" id="delete_role" {% if content.role_delete_books() %}checked{% endif %}> <input type="checkbox" name="delete_role" id="delete_role" {% if content.role_delete_books() %}checked{% endif %}>
<label for="delete_role">{{_('Allow Delete books')}}</label> <label for="delete_role">{{_('Allow Delete Books')}}</label>
</div> </div>
{% if not content.role_anonymous() %} {% if not content.role_anonymous() %}
<div class="form-group"> <div class="form-group">
@ -126,15 +126,15 @@
{% if g.user and g.user.role_admin() and not profile and not new_user and not content.role_anonymous() %} {% if g.user and g.user.role_admin() and not profile and not new_user and not content.role_anonymous() %}
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type="checkbox" id="delete" name="delete"> {{_('Delete this user')}} <input type="checkbox" id="delete" name="delete"> {{_('Delete User')}}
</label> </label>
</div> </div>
{% endif %} {% endif %}
</div> </div>
<div class="col-sm-12"> <div class="col-sm-12">
<button type="submit" id="submit" class="btn btn-default">{{_('Submit')}}</button> <button type="submit" id="submit" class="btn btn-default">{{_('Save')}}</button>
{% if not profile %} {% if not profile %}
<a href="{{ url_for('admin.admin') }}" id="back" class="btn btn-default">{{_('Back')}}</a> <a href="{{ url_for('admin.admin') }}" id="back" class="btn btn-default">{{_('Cancel')}}</a>
{% endif %} {% endif %}
</div> </div>
</form> </form>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -57,12 +57,12 @@ def get_sidebar_config(kwargs=None):
"visibility": constants.SIDEBAR_RECENT, 'public': True, "page": "root", "visibility": constants.SIDEBAR_RECENT, 'public': True, "page": "root",
"show_text": _('Show recent books'), "config_show":True}) "show_text": _('Show recent books'), "config_show":True})
sidebar.append({"glyph": "glyphicon-fire", "text": _('Hot Books'), "link": 'web.books_list', "id": "hot", sidebar.append({"glyph": "glyphicon-fire", "text": _('Hot Books'), "link": 'web.books_list', "id": "hot",
"visibility": constants.SIDEBAR_HOT, 'public': True, "page": "hot", "show_text": _('Show hot books'), "visibility": constants.SIDEBAR_HOT, 'public': True, "page": "hot", "show_text": _('Show Hot Books'),
"config_show":True}) "config_show":True})
sidebar.append( sidebar.append(
{"glyph": "glyphicon-star", "text": _('Best rated Books'), "link": 'web.books_list', "id": "rated", {"glyph": "glyphicon-star", "text": _('Top Rated Books'), "link": 'web.books_list', "id": "rated",
"visibility": constants.SIDEBAR_BEST_RATED, 'public': True, "page": "rated", "visibility": constants.SIDEBAR_BEST_RATED, 'public': True, "page": "rated",
"show_text": _('Show best rated books'), "config_show":True}) "show_text": _('Show Top Rated Books'), "config_show":True})
sidebar.append({"glyph": "glyphicon-eye-open", "text": _('Read Books'), "link": 'web.books_list', "id": "read", sidebar.append({"glyph": "glyphicon-eye-open", "text": _('Read Books'), "link": 'web.books_list', "id": "read",
"visibility": constants.SIDEBAR_READ_AND_UNREAD, 'public': (not g.user.is_anonymous), "page": "read", "visibility": constants.SIDEBAR_READ_AND_UNREAD, 'public': (not g.user.is_anonymous), "page": "read",
"show_text": _('Show read and unread'), "config_show": content}) "show_text": _('Show read and unread'), "config_show": content})

@ -505,7 +505,7 @@ def books_list(data, sort, book_id, page):
entries, random, pagination = fill_indexpage(page, db.Books, db.Books.ratings.any(db.Ratings.rating > 9), entries, random, pagination = fill_indexpage(page, db.Books, db.Books.ratings.any(db.Ratings.rating > 9),
order) order)
return render_title_template('index.html', random=random, entries=entries, pagination=pagination, return render_title_template('index.html', random=random, entries=entries, pagination=pagination,
id=book_id, title=_(u"Best rated books"), page="rated") id=book_id, title=_(u"Top Rated Books"), page="rated")
else: else:
abort(404) abort(404)
elif data == "discover": elif data == "discover":
@ -513,7 +513,7 @@ def books_list(data, sort, book_id, page):
entries, __, pagination = fill_indexpage(page, db.Books, True, [func.randomblob(2)]) entries, __, pagination = fill_indexpage(page, db.Books, True, [func.randomblob(2)])
pagination = Pagination(1, config.config_books_per_page, config.config_books_per_page) pagination = Pagination(1, config.config_books_per_page, config.config_books_per_page)
return render_title_template('discover.html', entries=entries, pagination=pagination, id=book_id, return render_title_template('discover.html', entries=entries, pagination=pagination, id=book_id,
title=_(u"Random Books"), page="discover") title=_(u"Discover (Random Books)"), page="discover")
else: else:
abort(404) abort(404)
elif data == "unread": elif data == "unread":
@ -566,7 +566,7 @@ def render_hot_books(page):
numBooks = entries.__len__() numBooks = entries.__len__()
pagination = Pagination(page, config.config_books_per_page, numBooks) pagination = Pagination(page, config.config_books_per_page, numBooks)
return render_title_template('index.html', random=random, entries=entries, pagination=pagination, return render_title_template('index.html', random=random, entries=entries, pagination=pagination,
title=_(u"Hot Books (most downloaded)"), page="hot") title=_(u"Hot Books (Most Downloaded)"), page="hot")
else: else:
abort(404) abort(404)
@ -577,7 +577,7 @@ def render_author_books(page, author_id, order):
[order[0], db.Series.name, db.Books.series_index], [order[0], db.Series.name, db.Books.series_index],
db.books_series_link, db.Series) db.books_series_link, db.Series)
if entries is None or not len(entries): if entries is None or not len(entries):
flash(_(u"Error opening eBook. File does not exist or file is not accessible:"), category="error") flash(_(u"Oops! Selected book title is unavailable. File does not exist or is not accessible"), category="error")
return redirect(url_for("web.index")) return redirect(url_for("web.index"))
author = db.session.query(db.Authors).get(author_id) author = db.session.query(db.Authors).get(author_id)
@ -680,7 +680,7 @@ def author_list():
for entry in entries: for entry in entries:
entry.Authors.name = entry.Authors.name.replace('|', ',') entry.Authors.name = entry.Authors.name.replace('|', ',')
return render_title_template('list.html', entries=entries, folder='web.books_list', charlist=charlist, return render_title_template('list.html', entries=entries, folder='web.books_list', charlist=charlist,
title=u"Author list", page="authorlist", data='author') title=u"Authors", page="authorlist", data='author')
else: else:
abort(404) abort(404)
@ -696,7 +696,7 @@ def publisher_list():
.join(db.books_publishers_link).join(db.Books).filter(common_filters()) \ .join(db.books_publishers_link).join(db.Books).filter(common_filters()) \
.group_by(func.upper(func.substr(db.Publishers.name,1,1))).all() .group_by(func.upper(func.substr(db.Publishers.name,1,1))).all()
return render_title_template('list.html', entries=entries, folder='web.books_list', charlist=charlist, return render_title_template('list.html', entries=entries, folder='web.books_list', charlist=charlist,
title=_(u"Publisher list"), page="publisherlist", data="publisher") title=_(u"Publishers"), page="publisherlist", data="publisher")
else: else:
abort(404) abort(404)
@ -712,7 +712,7 @@ def series_list():
.join(db.books_series_link).join(db.Books).filter(common_filters()) \ .join(db.books_series_link).join(db.Books).filter(common_filters()) \
.group_by(func.upper(func.substr(db.Series.sort,1,1))).all() .group_by(func.upper(func.substr(db.Series.sort,1,1))).all()
return render_title_template('list.html', entries=entries, folder='web.books_list', charlist=charlist, return render_title_template('list.html', entries=entries, folder='web.books_list', charlist=charlist,
title=_(u"Series list"), page="serieslist", data="series") title=_(u"Series"), page="serieslist", data="series")
else: else:
abort(404) abort(404)
@ -767,7 +767,7 @@ def language_overview():
func.count('books_languages_link.book').label('bookcount')).group_by( func.count('books_languages_link.book').label('bookcount')).group_by(
text('books_languages_link.lang_code')).all() text('books_languages_link.lang_code')).all()
return render_title_template('languages.html', languages=languages, lang_counter=lang_counter, return render_title_template('languages.html', languages=languages, lang_counter=lang_counter,
charlist=charlist, title=_(u"Available languages"), page="langlist", charlist=charlist, title=_(u"Languages"), page="langlist",
data="language") data="language")
else: else:
abort(404) abort(404)
@ -784,7 +784,7 @@ def category_list():
.join(db.books_tags_link).join(db.Books).filter(common_filters()) \ .join(db.books_tags_link).join(db.Books).filter(common_filters()) \
.group_by(func.upper(func.substr(db.Tags.name,1,1))).all() .group_by(func.upper(func.substr(db.Tags.name,1,1))).all()
return render_title_template('list.html', entries=entries, folder='web.books_list', charlist=charlist, return render_title_template('list.html', entries=entries, folder='web.books_list', charlist=charlist,
title=_(u"Category list"), page="catlist", data="category") title=_(u"Categories"), page="catlist", data="category")
else: else:
abort(404) abort(404)

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save