mirror of
https://github.com/simon987/nyaa.git
synced 2025-04-10 14:06:42 +00:00
371 lines
20 KiB
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">×</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>
|