nyaa/nyaa/templates/layout.html

371 lines
20 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{% block title %}{{ config.SITE_NAME }}{% endblock %}</title>
<meta name="viewport" content="width=480px">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="shortcut icon" type="image/png" href="{{ url_for('static', filename='favicon.png') }}">
<link rel="icon" type="image/png" href="{{ url_for('static', filename='favicon.png') }}">
<link rel="mask-icon" href="{{ url_for('static', filename='pinned-tab.svg') }}" color="#3582F7">
<link rel="alternate" type="application/rss+xml" href="
{% if rss_filter %}{{ url_for('main.home', page='rss', _external=True, **rss_filter) }}{% else %}{{ url_for('main.home', page='rss', _external=True) }}{% endif %}"/>
<meta property="og:site_name" content="{{ config.SITE_NAME }}">
<meta property="og:title" content="{{ self.title() }}">
<meta property="og:image" content="{% block meta_image %}/static/img/avatar/default.png{% endblock %}">
{% block metatags %}
{# Filled by children #}
{% endblock %}
<!-- Bootstrap core CSS -->
<!--
Note: This has been customized at http://getbootstrap.com/customize/ to
set the column breakpoint to tablet mode, instead of mobile. This is to
make the navbar not look awful on tablets.
-->
{# These are extracted here for the dark mode toggle #}
{% set bootstrap_light = static_cachebuster('css/bootstrap.min.css') %}
{% set bootstrap_dark = static_cachebuster('css/bootstrap-dark.min.css') %}
<link href="{{ bootstrap_light }}" rel="stylesheet" id="bsThemeLink">
<link href="{{ static_cachebuster('css/bootstrap-xl-mod.css') }}" rel="stylesheet">
<!--
This theme changer script needs to be inline and right under the above stylesheet link to prevent FOUC (Flash Of Unstyled Content)
Development version is commented out in static/js/main.js at the bottom of the file
-->
<script>function toggleDarkMode() {
"dark" === localStorage.getItem("theme") ? setThemeLight() : setThemeDark()
}
function setThemeDark() {
bsThemeLink.href = "{{ bootstrap_dark }}", localStorage.setItem("theme", "dark"), document.body !== null && document.body.classList.add('dark')
}
function setThemeLight() {
bsThemeLink.href = "{{ bootstrap_light }}", localStorage.setItem("theme", "light"), document.body !== null && document.body.classList.remove('dark')
}
if ("undefined" != typeof Storage) {
var bsThemeLink = document.getElementById("bsThemeLink");
"dark" === localStorage.getItem("theme") && setThemeDark()
}</script>
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.2/css/bootstrap-select.min.css"
integrity="sha256-an4uqLnVJ2flr7w0U74xiF4PJjO2N5Df91R2CUmCLCA=" crossorigin="anonymous"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
integrity="sha256-eZrrJcwDc/3uDhsdt61sL2oOBY362qM3lon1gyExkL0=" crossorigin="anonymous"/>
<!-- Custom styles for this template -->
<link href="{{ static_cachebuster('css/main.css') }}" rel="stylesheet">
<!-- Core JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha256-U5ZEeKfGNOja007MMD3YBI0A3OSZOQbeG6z2f2Y0hu8=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/markdown-it/8.3.1/markdown-it.min.js"
integrity="sha256-3WZyZQOe+ql3pLo90lrkRtALrlniGdnf//gRpW0UQks=" crossorigin="anonymous"></script>
<!-- Modified to not apply border-radius to selectpickers and stuff so our navbar looks cool -->
{% assets "bs_js" %}
<script src="{{ static_cachebuster('js/bootstrap-select.min.js') }}"></script>
{% endassets %}
{% assets "main_js" %}
<script src="{{ static_cachebuster('js/main.min.js') }}"></script>
{% endassets %}
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
{% if config.SITE_FLAVOR == 'nyaa' %}
<link rel="search" type="application/opensearchdescription+xml" title="Nyaa.si" href="/static/search.xml">
{% elif config.SITE_FLAVOR == 'sukebei' %}
<link rel="search" type="application/opensearchdescription+xml" title="Sukebei (Nyaa.si)"
href="/static/search-sukebei.xml">
{% endif %}
</head>
<body>
<!-- Fixed navbar -->
<nav class="navbar navbar-default navbar-static-top navbar-inverse">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar"
aria-expanded="false" aria-controls="navbar">
<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('main.home') }}">{{ config.SITE_NAME }}</a>
</div><!--/.navbar-header -->
{% set search_username = (user.username + ("'" if user.username[-1] == 's' else "'s")) if user_page else None %}
{% set search_placeholder = 'Search {} torrents...'.format(search_username) if user_page else 'Search...' %}
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li {% if request.path == url_for('torrents.upload') %}class="active"{% endif %}><a
href="{{ url_for('torrents.upload') }}">Upload</a></li>
{# <li class="dropdown">#}
{# <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">#}
{# Info#}
{# <span class="caret"></span>#}
{# </a>#}
{# <ul class="dropdown-menu">#}
{# <li {% if request.path == url_for('site.rules') %}class="active"{% endif %}><a href="{{ url_for('site.rules') }}">Rules</a></li>#}
{# <li {% if request.path == url_for('site.help') %}class="active"{% endif %}><a href="{{ url_for('site.help') }}">Help</a></li>#}
{# <li {% if request.path == url_for('site.trusted') %}class="active"{% endif %}><a href="{{ url_for('site.trusted') }}">Trusted</a></li>#}
{# </ul>#}
{# </li>#}
<li><a href="
{% if rss_filter %}{{ url_for('main.home', page='rss', **rss_filter) }}{% else %}{{ url_for('main.home', page='rss') }}{% endif %}">RSS</a>
</li>
{% if g.user.is_moderator %}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">
Admin
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li {% if request.path == url_for('admin.reports') %}class="active"{% endif %}><a
href="{{ url_for('admin.reports') }}">Reports</a></li>
<li {% if request.path == url_for('admin.log') %}class="active"{% endif %}><a
href="{{ url_for('admin.log') }}">Log</a></li>
<li {% if request.path == url_for('admin.bans') %}class="active"{% endif %}><a
href="{{ url_for('admin.bans') }}">Bans</a></li>
<li {% if request.path == url_for('admin.trusted') %}class="active"{% endif %}><a
href="{{ url_for('admin.trusted') }}">Trusted</a></li>
</ul>
</li>
{% endif %}
</ul>
<ul class="nav navbar-nav navbar-right">
{% if g.user %}
<li class="dropdown">
<a href="#" class="dropdown-toggle visible-lg visible-sm visible-xs" data-toggle="dropdown"
role="button" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-user fa-fw"></i>
{{ g.user.username }}
<span class="caret"></span>
</a>
<a href="#" class="dropdown-toggle hidden-lg hidden-sm hidden-xs" data-toggle="dropdown"
role="button" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-user fa-fw"></i>
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li class="hidden-lg hidden-sm hidden-xs">
<a><i class="fa fa-user fa-fw"></i>Logged in as {{ g.user.username }}</a>
</li>
<li class="hidden-lg hidden-sm hidden-xs divider" role="separator">
</li>
<li>
<a href="{{ url_for('users.view_user', user_name=g.user.username) }}">
<i class="fa fa-user fa-fw"></i>
Torrents
</a>
</li>
<li>
<a href="{{ url_for('account.profile') }}">
<i class="fa fa-gear fa-fw"></i>
Profile
</a>
</li>
<li>
<a href="{{ url_for('account.logout') }}">
<i class="fa fa-times fa-fw"></i>
Logout
</a>
</li>
</ul>
</li>
{% else %}
<li class="dropdown">
<a href="#" class="dropdown-toggle visible-lg visible-sm visible-xs" data-toggle="dropdown"
role="button" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-user fa-fw"></i>
Guest
<span class="caret"></span>
</a>
<a href="#" class="dropdown-toggle hidden-lg hidden-sm hidden-xs" data-toggle="dropdown"
role="button" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-user fa-fw"></i>
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li>
<a href="{{ url_for('account.login') }}">
<i class="fa fa-sign-in fa-fw"></i>
Login
</a>
</li>
<li>
<a href="{{ url_for('account.register') }}">
<i class="fa fa-pencil fa-fw"></i>
Register
</a>
</li>
</ul>
</li>
{% endif %}
</ul>
{% set used_cats = [('1_0', 'Books', 'Books'),
('1_1', '- Fiction', 'Books - Fiction'),
('1_2', '- Non-Fiction', 'Books - Non-Fiction'),
('2_0', 'Media', 'Media'),
('2_1', '- Audio', 'Media - Audio'),
('2_2', '- Video', 'Media - Video'),
('2_2', '- Images', 'Media - Images'),
('3_0', 'Software', 'Software'),
('3_1', '- Misc', 'Software - Misc'),
('3_2', '- Games', 'Software - Games'),
('4_0', 'NSFW', 'NSFW'),
('4_1', '- Pictures', 'NSFW - Pictures'),
('4_2', '- Videos', 'NSFW - Videos'),
('4_2', '- Audio', 'NSFW - Audio'),
('5_0', 'Misc', 'Misc'),
('5_1', '- Other', 'Misc - Other')] %}
<div class="search-container visible-xs visible-sm">
{# The mobile menu #}
{% if user_page %}
<form class="navbar-form navbar-right form"
action="{{ url_for('users.view_user', user_name=user.username) }}" method="get">
{% else %}
<form class="navbar-form navbar-right form" action="{{ url_for('main.home') }}" method="get">
{% endif %}
<input type="text" class="form-control" name="q" placeholder="{{ search_placeholder }}"
value="{{ search["term"] if search is defined else '' }}">
<br>
<select class="form-control" title="Filter" data-width="120px" name="f">
<option value="0" title="No filter"
{% if search is defined and search["quality_filter"] == "0" %}selected{% else %}selected{% endif %}>
No filter
</option>
<option value="1" title="No remakes"
{% if search is defined and search["quality_filter"] == "1" %}selected{% endif %}>No remakes
</option>
<option value="2" title="Trusted only"
{% if search is defined and search["quality_filter"] == "2" %}selected{% endif %}>Trusted
only
</option>
</select>
<br>
<select class="form-control" title="Category" data-width="200px" name="c">
<option value="0_0" title="All categories"
{% if search is defined and search["category"] == "0_0" %}selected{% else %}selected{% endif %}>
All categories
</option>
{% for cat_id, cat_name, cat_title in used_cats %}
<option value="{{ cat_id }}" title="{{ cat_title }}"
{% if search is defined and search.category == cat_id %}selected{% endif %}>
{{ cat_name }}
</option>
{% endfor %}
</select>
<br>
<button class="btn btn-primary form-control" type="submit">
<i class="fa fa-search fa-fw"></i> Search
</button>
</form>
</div><!--/.search-container -->
{% if user_page %}
<form class="navbar-form navbar-right form hidden-xs hidden-sm"
action="{{ url_for('users.view_user', user_name=user.username) }}" method="get">
{% else %}
<form class="navbar-form navbar-right form hidden-xs hidden-sm" action="{{ url_for('main.home') }}"
method="get">
{% endif %}
<div class="input-group search-container">
<div class="input-group-btn nav-filter" id="navFilter-criteria">
<select class="selectpicker show-tick" title="Filter" data-width="120px" name="f">
<option value="0" title="No filter"
{% if search is defined and search["quality_filter"] == "0" %}selected{% else %}selected{% endif %}>
No filter
</option>
<option value="1" title="No remakes"
{% if search is defined and search["quality_filter"] == "1" %}selected{% endif %}>No
remakes
</option>
<option value="2" title="Trusted only"
{% if search is defined and search["quality_filter"] == "2" %}selected{% endif %}>
Trusted only
</option>
</select>
</div>
<div class="input-group-btn nav-filter" id="navFilter-category">
<!--
On narrow viewports, there isn't enough room to fit the full stuff in the selectpicker, so we show a full-width one on wide viewports, but squish it on narrow ones.
-->
{# XXX Search breaks with multiple fields with the same name: default to the shorter one so we don't break visuals. This is a hack! #}
{#
<select class="selectpicker show-tick visible-lg" title="Category" data-width="200px" name="c">
<option value="0_0" title="All categories" {% if search is defined and search["category"] == "0_0" %}selected{% else %}selected{% endif %}>
All categories
</option>
{% for cat_id, cat_name, cat_title in used_cats %}
<option value="{{ cat_id }}" title="{{ cat_title }}" {% if search is defined and search.category == cat_id %}selected{% endif %}>
{{ cat_name }}
</option>
{% endfor %}
</select>
#}
<select class="selectpicker show-tick" title="Category" data-width="130px" name="c">
<option value="0_0" title="All categories"
{% if search is defined and search["category"] == "0_0" %}selected{% else %}selected{% endif %}>
All categories
</option>
{% for cat_id, cat_name, cat_title in used_cats %}
<option value="{{ cat_id }}" title="{{ cat_title }}"
{% if search is defined and search.category == cat_id %}selected{% endif %}>
{{ cat_name }}
</option>
{% endfor %}
</select>
</div>
<input type="text" class="form-control search-bar" name="q" placeholder="{{ search_placeholder }}"
value="{{ search['term'] if search is defined else '' }}"/>
<div class="input-group-btn search-btn">
<button class="btn btn-primary" type="submit">
<i class="fa fa-search fa-fw"></i>
</button>
</div>
</div>
</form>
</div><!--/.nav-collapse -->
</div><!--/.container -->
</nav>
<div class="container">
{% include "flashes.html" %}
{% if config.MAINTENANCE_MODE and config.MAINTENANCE_MODE_MESSAGE %}
<div class="alert alert-dismissable alert-warning" role="alert">
<button type="button" class="close" data-dismiss="alert">&times;</button>
{{ config.MAINTENANCE_MODE_MESSAGE | safe }}
</div>
{% endif %}
{% block body %}{% endblock %}
</div> <!-- /container -->
{# <footer style="text-align: center;">#}
{# <p>Dark Mode: <a href="#" id="themeToggle">Toggle</a></p>#}
{# {% if config.COMMIT_HASH %}#}
{# <p>Commit: <a href="https://github.com/nyaadevs/nyaa/tree/{{ config.COMMIT_HASH }}">{{ config.COMMIT_HASH[:7] }}</a></p>#}
{# {% endif %}#}
{# </footer>#}
</body>
</html>