mirror of
https://github.com/janeczku/calibre-web
synced 2024-11-19 00:04:54 +00:00
cdb1b52652
Metadata.db download works again removed DEVELOPMENT constant removed db logging in debug mode (too, noisy, to less information) code refactoring url_for_other_page feed languge set to en-EN update status shos local time instead of UTC Error handling (back to index page) in case of gdrive authenticate aborted Mistyping page register fixed Mistyping bokk fixed Added uploaded books to tasklist (#442) Error handling for failed file update added Code refactoring worker thread Tasks now never show any decimal values Converter function unified removed shell from subprocess call preparation for limiting domain for registering emails Book series can now increased in 0.1 steps (#562) Accordion panels in config are now usable on touch devices like iPad (#545) Gdrive authenticate button only visible after logged in (#525) Fixed misstyping in german translation
252 lines
14 KiB
HTML
252 lines
14 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="{{ g.user.locale }}">
|
|
<head>
|
|
<title>{{instance}} | {{title}}</title>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
|
|
<!-- Bootstrap -->
|
|
<link rel="apple-touch-icon" sizes="140x140" href="{{ url_for('static', filename='favicon.ico') }}">
|
|
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
|
|
<link href="{{ url_for('static', filename='css/libs/bootstrap.min.css') }}" rel="stylesheet" media="screen">
|
|
<link href="{{ url_for('static', filename='css/style.css') }}" rel="stylesheet" media="screen">
|
|
{% if g.user.get_theme == 1 %}
|
|
<link href="{{ url_for('static', filename='css/caliBlur-style.css') }}" rel="stylesheet" media="screen">
|
|
{% endif %}
|
|
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
|
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
|
<!--[if lt IE 9]>
|
|
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
|
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
|
|
<![endif]-->
|
|
|
|
{% block header %}{% endblock %}
|
|
</head>
|
|
<body class="{{ page }}">
|
|
<!-- Static navbar -->
|
|
<div class="navbar navbar-default navbar-static-top" role="navigation">
|
|
<div class="container-fluid">
|
|
<div class="navbar-header">
|
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
|
<span class="sr-only">{{_('Toggle navigation')}}</span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
</button>
|
|
<a class="navbar-brand" href="{{url_for('index')}}">{{instance}}</a>
|
|
</div>
|
|
{% if g.user.is_authenticated or g.user.is_anonymous %}
|
|
<form class="navbar-form navbar-left" role="search" action="{{url_for('search')}}" method="GET">
|
|
<div class="form-group input-group input-group-sm">
|
|
<label for="query" class="sr-only">{{_('Search')}}</label>
|
|
<input type="text" class="form-control" id="query" name="query" placeholder="{{_('Search')}}">
|
|
<span class="input-group-btn">
|
|
<button type="submit" class="btn btn-default">{{_('Go!')}}</button>
|
|
</span>
|
|
</div>
|
|
</form>
|
|
{% endif %}
|
|
<div class="navbar-collapse collapse">
|
|
{% if g.user.is_authenticated or g.user.is_anonymous %}
|
|
<ul class="nav navbar-nav ">
|
|
<li><a href="{{url_for('advanced_search')}}"><span class="glyphicon glyphicon-search"></span><span class="hidden-sm"> {{_('Advanced Search')}}</span></a></li>
|
|
</ul>
|
|
{% endif %}
|
|
<ul class="nav navbar-nav navbar-right" id="main-nav">
|
|
{% if g.user.is_authenticated or g.user.is_anonymous %}
|
|
{% if g.user.role_upload() or g.user.role_admin()%}
|
|
{% if g.allow_upload %}
|
|
<li>
|
|
<form id="form-upload" class="navbar-form" action="{{ url_for('upload') }}" method="post" enctype="multipart/form-data">
|
|
<div class="form-group">
|
|
<span class="btn btn-default btn-file">{{_('Upload')}}<input id="btn-upload" name="btn-upload" type="file" multiple></span>
|
|
</div>
|
|
</form>
|
|
</li>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% if g.user.role_admin() %}
|
|
<li><a id="top_tasks" href="{{url_for('get_tasks_status')}}"><span class="glyphicon glyphicon-tasks"></span><span class="hidden-sm"> {{_('Tasks')}}</span></a></li>
|
|
{% endif %}
|
|
{% if g.user.role_admin() %}
|
|
<li><a id="top_admin" href="{{url_for('admin')}}"><span class="glyphicon glyphicon-dashboard"></span><span class="hidden-sm"> {{_('Admin')}}</span></a></li>
|
|
{% endif %}
|
|
<li><a id="top_user" href="{{url_for('profile')}}"><span class="glyphicon glyphicon-user"></span><span class="hidden-sm"> {{g.user.nickname}}</span></a></li>
|
|
{% if not g.user.is_anonymous %}
|
|
<li><a id="logout" href="{{url_for('logout')}}"><span class="glyphicon glyphicon-log-out"></span><span class="hidden-sm"> {{_('Logout')}}</span></a></li>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% if g.allow_registration and not g.user.is_authenticated %}
|
|
<li><a id="login" href="{{url_for('login')}}"><span class="glyphicon glyphicon-log-in"></span> {{_('Login')}}</a></li>
|
|
<li><a id="register" href="{{url_for('register')}}"><span class="glyphicon glyphicon-user"></span> {{_('Register')}}</a></li>
|
|
{% endif %}
|
|
</ul>
|
|
</div><!--/.nav-collapse -->
|
|
</div>
|
|
</div>
|
|
{% for message in get_flashed_messages(with_categories=True) %}
|
|
{%if message[0] == "error" %}
|
|
<div class="row-fluid text-center" style="margin-top: -20px;">
|
|
<div id="flash_alert" class="alert alert-danger">{{ message[1] }}</div>
|
|
</div>
|
|
{%endif%}
|
|
{%if message[0] == "info" %}
|
|
<div class="row-fluid text-center" style="margin-top: -20px;">
|
|
<div id="flash_info" class="alert alert-info">{{ message[1] }}</div>
|
|
</div>
|
|
{%endif%}
|
|
{%if message[0] == "success" %}
|
|
<div class="row-fluid text-center" style="margin-top: -20px;">
|
|
<div id="flash_success" class="alert alert-success">{{ message[1] }}</div>
|
|
</div>
|
|
{%endif%}
|
|
{% endfor %}
|
|
<div id="loader" hidden="true">
|
|
<center>
|
|
<h3>{{_('Uploading...')}}</h3>
|
|
<span>{{_("please don't refresh the page")}}</span>.
|
|
<br />
|
|
<img src="{{ url_for('static', filename='img/loader.gif') }}">
|
|
</center>
|
|
</div>
|
|
<div class="container-fluid">
|
|
<div class="row-fluid">
|
|
{% if g.user.is_authenticated or g.user.is_anonymous %}
|
|
<div class="col-sm-2">
|
|
<nav class="navigation">
|
|
<ul class="list-unstyled" id="scnd-nav" intent in-standard-append="nav.navigation" in-mobile-after="#main-nav" in-mobile-class="nav navbar-nav">
|
|
<li class="nav-head hidden-xs">{{_('Browse')}}</li>
|
|
{% if g.user.show_recent() %}
|
|
<li id="nav_new" {% if page == 'root' %}class="active"{% endif %}><a href="{{url_for('index')}}"><span class="glyphicon glyphicon-book"></span> {{_('Recently Added')}}</a></li>
|
|
{%endif%}
|
|
{% if g.user.show_sorted() %}
|
|
<li class="dropdown">
|
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
|
|
<span class="glyphicon glyphicon-sort-by-attributes"></span> {{_('Sorted Books')}}
|
|
<span class="caret"></span>
|
|
</a>
|
|
<ul class="dropdown-menu">
|
|
<li {% if page == 'newest' %}class="active"{% endif %}><a href="{{url_for('newest_books')}}">{{_('Sort By')}} {{_('Newest')}}</a></li>
|
|
<li {% if page == 'oldest' %}class="active"{% endif %}><a href="{{url_for('oldest_books')}}">{{_('Sort By')}} {{_('Oldest')}}</a></li>
|
|
<li {% if page == 'a-z' %}class="active"{% endif %}><a href="{{url_for('titles_ascending')}}">{{_('Sort By')}} {{_('Title')}} ({{_('Ascending')}})</a></li>
|
|
<li {% if page == 'z-a' %}class="active"{% endif %}><a href="{{url_for('titles_descending')}}">{{_('Sort By')}} {{_('Title')}} ({{_('Descending')}})</a></li>
|
|
</ul>
|
|
</li>
|
|
{%endif%}
|
|
{% if g.user.show_hot_books() %}
|
|
<li id="nav_hot" {% if page == 'hot' %}class="active"{% endif %}><a href="{{url_for('hot_books')}}"><span class="glyphicon glyphicon-fire"></span> {{_('Hot Books')}}</a></li>
|
|
{%endif%}
|
|
{% if g.user.show_best_rated_books() %}
|
|
<li {% if page == 'rated' %}class="active"{% endif %}><a href="{{url_for('best_rated_books')}}"><span class="glyphicon glyphicon-star"></span> {{_('Best rated Books')}}</a></li>
|
|
{%endif%}
|
|
{% if g.user.show_read_and_unread() %}
|
|
{% if not g.user.is_anonymous %}
|
|
<li {% if page == 'read' %}class="active"{% endif %}><a href="{{url_for('read_books')}}"><span class="glyphicon glyphicon-eye-open"></span> {{_('Read Books')}}</a></li>
|
|
{%endif%}
|
|
<li {% if page == 'read' %}class="active"{% endif %}><a href="{{url_for('unread_books')}}"><span class="glyphicon glyphicon-eye-close"></span> {{_('Unread Books')}}</a></li>
|
|
{%endif%}
|
|
{% if g.user.show_random_books() %}
|
|
<li id="nav_rand" {% if page == 'discover' %}class="active"{% endif %}><a href="{{url_for('discover')}}"><span class="glyphicon glyphicon-random"></span> {{_('Discover')}}</a></li>
|
|
{%endif%}
|
|
{% if g.user.show_category() %}
|
|
<li id="nav_cat" {% if page == 'discover' %}class="category"{% endif %}><a href="{{url_for('category_list')}}"><span class="glyphicon glyphicon-inbox"></span> {{_('Categories')}}</a></li>
|
|
{%endif%}
|
|
{% if g.user.show_series() %}
|
|
<li id="nav_serie" {% if page == 'series' %}class="active"{% endif %}><a href="{{url_for('series_list')}}"><span class="glyphicon glyphicon-bookmark"></span> {{_('Series')}}</a></li>
|
|
{%endif%}
|
|
{% if g.user.show_author() %}
|
|
<li id="nav_author" {% if page == 'author' %}class="active"{% endif %}><a href="{{url_for('author_list')}}"><span class="glyphicon glyphicon-user"></span> {{_('Authors')}}</a></li>
|
|
{%endif%}
|
|
{% if g.user.filter_language() == 'all' and g.user.show_language() %}
|
|
<li id="nav_lang" {% if page == 'language' %}class="active"{% endif %}><a href="{{url_for('language_overview')}}"><span class="glyphicon glyphicon-flag"></span> {{_('Languages')}} </a></li>
|
|
{%endif%}
|
|
{% if g.user.is_authenticated or g.user.is_anonymous %}
|
|
<li class="nav-head hidden-xs">{{_('Public Shelves')}}</li>
|
|
{% for shelf in g.public_shelfes %}
|
|
<li><a href="{{url_for('show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list"></span> {{shelf.name}}</a></li>
|
|
{% endfor %}
|
|
<li class="nav-head hidden-xs">{{_('Your Shelves')}}</li>
|
|
{% for shelf in g.user.shelf %}
|
|
<li><a href="{{url_for('show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list"></span> {{shelf.name}}</a></li>
|
|
{% endfor %}
|
|
{% if not g.user.is_anonymous %}
|
|
<li id="nav_createshelf" class="create-shelf"><a href="{{url_for('create_shelf')}}">{{_('Create a Shelf')}}</a></li>
|
|
<li id="nav_about" {% if page == 'stat' %}class="active"{% endif %}><a href="{{url_for('stats')}}"><span class="glyphicon glyphicon-info-sign"></span> {{_('About')}}</a></li>
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
{% endif %}
|
|
<div class="col-sm-10">
|
|
{% block body %}{% endblock %}
|
|
{% if pagination and (pagination.has_next or pagination.has_prev) %}
|
|
<div class="pagination">
|
|
{% if pagination.has_prev %}
|
|
<a class="previous" href="{{ (pagination.page - 1)|url_for_other_page
|
|
}}">« {{_('Previous')}}</a>
|
|
{% endif %}
|
|
{% for page in pagination.iter_pages() %}
|
|
{% if page %}
|
|
{% if page != pagination.page %}
|
|
<a href="{{ (page)|url_for_other_page }}">{{ page }}</a>
|
|
{% else %}
|
|
<strong>{{ page }}</strong>
|
|
{% endif %}
|
|
{% else %}
|
|
<span class="ellipsis">…</span>
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% if pagination.has_next %}
|
|
<a class="next" href="{{ (pagination.page + 1)|url_for_other_page
|
|
}}">{{_('Next')}} »</a>
|
|
{% endif %}
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal fade" id="bookDetailsModal" tabindex="-1" role="dialog" aria-labelledby="bookDetailsModalLabel">
|
|
<div class="modal-dialog modal-lg" role="document">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
|
<h4 class="modal-title" id="bookDetailsModalLabel">{{_('Book Details')}}</h4>
|
|
</div>
|
|
<div class="modal-body">...</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-default" data-dismiss="modal">{{_('Close')}}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% block modal %}{% endblock %}
|
|
|
|
|
|
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
|
|
<!--script src="https://code.jquery.com/jquery.js"></script-->
|
|
<script src="{{ url_for('static', filename='js/libs/jquery.min.js') }}"></script>
|
|
<!-- Include all compiled plugins (below), or include individual files as needed -->
|
|
<script src="{{ url_for('static', filename='js/libs/bootstrap.min.js') }}"></script>
|
|
<script src="{{ url_for('static', filename='js/libs/underscore-min.js') }}"></script>
|
|
<script src="{{ url_for('static', filename='js/libs/intention.min.js') }}"></script>
|
|
<script src="{{ url_for('static', filename='js/libs/context.min.js') }}"></script>
|
|
<script src="{{ url_for('static', filename='js/libs/plugins.js') }}"></script>
|
|
<script src="{{ url_for('static', filename='js/libs/jquery.form.js') }}"></script>
|
|
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
|
|
<script type="text/javascript">
|
|
$(function () {
|
|
$("#btn-upload").change(function () {
|
|
$("#loader").show();
|
|
$("#form-upload").submit();
|
|
});
|
|
});
|
|
</script>
|
|
|
|
{% block js %}{% endblock %}
|
|
</body>
|
|
</html>
|