mirror of
https://github.com/janeczku/calibre-web
synced 2024-11-06 09:20:31 +00:00
67775bc797
Catch error for invalid oauth tokens Fixes for displaying error messages on deleting books from list Fixes for displaying error messages on deleting bookformats
223 lines
13 KiB
HTML
223 lines
13 KiB
HTML
{% from 'modal_dialogs.html' import restrict_modal, delete_book, filechooser_modal, delete_confirm_modal, change_confirm_modal %}
|
|
<!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">
|
|
{% block header %}{% endblock %}
|
|
<link href="{{ url_for('static', filename='css/style.css') }}" rel="stylesheet" media="screen">
|
|
<link href="{{ url_for('static', filename='css/upload.css') }}" rel="stylesheet" media="screen">
|
|
{% if g.current_theme == 1 %}
|
|
<link href="{{ url_for('static', filename='css/caliBlur.css') }}" rel="stylesheet" media="screen">
|
|
<link href="{{ url_for('static', filename='css/caliBlur_override.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]-->
|
|
</head>
|
|
<body class="{{ page }} {{ bodyClass }}" data-text="{{_('Home')}}" data-textback="{{_('Back')}}">
|
|
<!-- 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('web.index')}}">{{instance}}</a>
|
|
</div>
|
|
{% if g.user.is_authenticated or g.allow_anonymous %}
|
|
<form class="navbar-form navbar-left" role="search" action="{{url_for('web.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 Library')}}" value="{{searchterm}}">
|
|
<span class="input-group-btn">
|
|
<button type="submit" id="query_submit" class="btn btn-default">{{_('Search')}}</button>
|
|
</span>
|
|
</div>
|
|
</form>
|
|
{% endif %}
|
|
<div class="navbar-collapse collapse">
|
|
{% if g.user.is_authenticated or g.allow_anonymous %}
|
|
<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>
|
|
</ul>
|
|
{% endif %}
|
|
<ul class="nav navbar-nav navbar-right" id="main-nav">
|
|
{% if g.user.is_authenticated or g.allow_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('editbook.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" accept="{% for format in accept %}.{% if format != ''%}{{format}}{% else %}*{% endif %}{{ ',' if not loop.last }}{% endfor %}" multiple></span>
|
|
</div>
|
|
</form>
|
|
</li>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% 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>
|
|
{% endif %}
|
|
{% 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>
|
|
{% 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.name}}</span></a></li>
|
|
{% 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>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% if g.allow_registration and not g.user.is_authenticated %}
|
|
<li><a id="login" href="{{url_for('web.login')}}"><span class="glyphicon glyphicon-log-in"></span> {{_('Login')}}</a></li>
|
|
<li><a id="register" href="{{url_for('web.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_danger" 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] == "warning" %}
|
|
<div class="row-fluid text-center" style="margin-top: -20px;">
|
|
<div id="flash_warning" class="alert alert-warning">{{ 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 %}
|
|
{% if g.current_theme == 1 %}
|
|
<div id="loader" hidden="true">
|
|
<center>
|
|
<h3>{{_('Uploading...')}}</h3>
|
|
<span>{{_("Please do not refresh the page")}}</span>.
|
|
</center>
|
|
</div>
|
|
{%endif%}
|
|
<div class="container-fluid">
|
|
<div class="row-fluid">
|
|
{% if g.user.is_authenticated or g.allow_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>
|
|
{% for element in sidebar %}
|
|
{% if g.user.check_visibility(element['visibility']) and element['public'] %}
|
|
<li id="nav_{{element['id']}}" {% if page == element['page'] %}class="active"{% endif %}><a href="{{url_for(element['link'], data=element['page'], sort_param='stored')}}"><span class="glyphicon {{element['glyph']}}"></span>{{_(element['text'])}}</a></li>
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% if g.user.is_authenticated or g.allow_anonymous %}
|
|
<li class="nav-head hidden-xs public-shelves">{{_('Shelves')}}</li>
|
|
{% for shelf in g.shelves_access %}
|
|
<li><a href="{{url_for('shelf.show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list shelf"></span>{{shelf.name|shortentitle(40)}}{% if shelf.is_public == 1 %} {{_('(Public)')}}{% endif %}</a></li>
|
|
{% endfor %}
|
|
{% 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_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 %}
|
|
|
|
</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 %}
|
|
<li class="page-item page-previous"><a class="page-link" aria-label="next page" href="{{ (pagination.page - 1)|url_for_other_page
|
|
}}">« {{_('Previous')}}</a></li>
|
|
{% endif %}
|
|
{% for page in pagination.iter_pages() %}
|
|
{% if page %}
|
|
{% if page != pagination.page %}
|
|
<li class="page-item"><a class="page-link" aria-label="to page {{ page }}" href="{{ (page)|url_for_other_page }}">{{ page }}</a></li>
|
|
{% else %}
|
|
<li class="page-item active"><a class="page-link" aria-label="to page {{ page }}" href="{{ (page)|url_for_other_page }}">{{ page }}</a></li>
|
|
{% endif %}
|
|
{% else %}
|
|
<li class="page-item page-last-separator disabled"><a class="page-link" aria-label="">…</a></li>
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% if pagination.has_next %}
|
|
<li class="page-item page-next"><a class="page-link next" aria-label="next page" href="{{ (pagination.page + 1)|url_for_other_page
|
|
}}">{{_('Next')}} »</a></li>
|
|
{% 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="{{ 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/uploadprogress.js') }}"> </script>
|
|
<script type="text/javascript">
|
|
$(function() {
|
|
$("#form-upload").uploadprogress({
|
|
redirect_url: "{{ url_for('web.index')}}",
|
|
uploadedMsg: "{{_('Upload done, processing, please wait...')}}",
|
|
modalTitle: "{{_('Uploading...')}}",
|
|
modalFooter: "{{_('Close')}}",
|
|
modalTitleFailed: "{{_('Error')}}"
|
|
});
|
|
});
|
|
</script>
|
|
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
|
|
{% if g.current_theme == 1 %}
|
|
<script src="{{ url_for('static', filename='js/libs/jquery.visible.min.js') }}"></script>
|
|
<script src="{{ url_for('static', filename='js/libs/compromise.min.js') }}"></script>
|
|
<script src="{{ url_for('static', filename='js/libs/readmore.min.js') }}"></script>
|
|
<script src="{{ url_for('static', filename='js/caliBlur.js') }}"></script>
|
|
{% endif %}
|
|
{% block js %}{% endblock %}
|
|
</body>
|
|
</html>
|