
Now that themes are controlled with a class instead of setting media="none" on the stylesheet link and both themes already being duplicated in default.css for the automatic themeing it makes sense to have all theme related CSS in the same place. This commit also fixes the missing dark theme on embeds.
165 lines
8.9 KiB
Text
165 lines
8.9 KiB
Text
<!DOCTYPE html>
|
|
<html lang="<%= env.get("preferences").as(Preferences).locale %>">
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="referrer" content="no-referrer">
|
|
<%= yield_content "header" %>
|
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=<%= ASSET_COMMIT %>">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png?v=<%= ASSET_COMMIT %>">
|
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png?v=<%= ASSET_COMMIT %>">
|
|
<link rel="manifest" href="/site.webmanifest?v=<%= ASSET_COMMIT %>">
|
|
<link rel="mask-icon" href="/safari-pinned-tab.svg?v=<%= ASSET_COMMIT %>" color="#575757">
|
|
<meta name="msapplication-TileColor" content="#575757">
|
|
<meta name="theme-color" content="#575757">
|
|
<link title="Invidious" type="application/opensearchdescription+xml" rel="search" href="/opensearch.xml">
|
|
<link rel="stylesheet" href="/css/pure-min.css?v=<%= ASSET_COMMIT %>">
|
|
<link rel="stylesheet" href="/css/grids-responsive-min.css?v=<%= ASSET_COMMIT %>">
|
|
<link rel="stylesheet" href="/css/ionicons.min.css?v=<%= ASSET_COMMIT %>">
|
|
<link rel="stylesheet" href="/css/default.css?v=<%= ASSET_COMMIT %>">
|
|
</head>
|
|
|
|
<% locale = LOCALES[env.get("preferences").as(Preferences).locale]? %>
|
|
<% dark_mode = env.get("preferences").as(Preferences).dark_mode %>
|
|
|
|
<body class="<%= dark_mode.blank? ? "no" : dark_mode %>-theme">
|
|
<span style="display:none" id="dark_mode_pref"><%= env.get("preferences").as(Preferences).dark_mode %></span>
|
|
<div class="pure-g">
|
|
<div class="pure-u-1 pure-u-md-2-24"></div>
|
|
<div class="pure-u-1 pure-u-md-20-24">
|
|
<div class="pure-g navbar h-box">
|
|
<div class="pure-u-1 pure-u-md-4-24">
|
|
<a href="/" class="index-link pure-menu-heading">Invidious</a>
|
|
</div>
|
|
<div class="pure-u-1 pure-u-md-12-24 searchbar">
|
|
<form class="pure-form" action="/search" method="get">
|
|
<fieldset>
|
|
<input type="search" style="width:100%" name="q" placeholder="<%= translate(locale, "search") %>" value="<%= env.get?("search").try {|x| HTML.escape(x.as(String)) } %>">
|
|
</fieldset>
|
|
</form>
|
|
</div>
|
|
<div class="pure-u-1 pure-u-md-8-24 user-field">
|
|
<% if env.get? "user" %>
|
|
<div class="pure-u-1-4">
|
|
<a id="toggle_theme" href="/toggle_theme?referer=<%= env.get?("current_page") %>" class="pure-menu-heading">
|
|
<% if env.get("preferences").as(Preferences).dark_mode == "dark" %>
|
|
<i class="icon ion-ios-sunny"></i>
|
|
<% else %>
|
|
<i class="icon ion-ios-moon"></i>
|
|
<% end %>
|
|
</a>
|
|
</div>
|
|
<div class="pure-u-1-4">
|
|
<a id="notification_ticker" title="<%= translate(locale, "Subscriptions") %>" href="/feed/subscriptions" class="pure-menu-heading">
|
|
<% notification_count = env.get("user").as(User).notifications.size %>
|
|
<% if notification_count > 0 %>
|
|
<span id="notification_count"><%= notification_count %></span> <i class="icon ion-ios-notifications"></i>
|
|
<% else %>
|
|
<i class="icon ion-ios-notifications-outline"></i>
|
|
<% end %>
|
|
</a>
|
|
</div>
|
|
<div class="pure-u-1-4">
|
|
<a title="<%= translate(locale, "Preferences") %>" href="/preferences?referer=<%= env.get?("current_page") %>" class="pure-menu-heading">
|
|
<i class="icon ion-ios-cog"></i>
|
|
</a>
|
|
</div>
|
|
<div class="pure-u-1-4">
|
|
<form action="/signout?referer=<%= env.get?("current_page") %>" method="post">
|
|
<input type="hidden" name="csrf_token" value="<%= URI.encode_www_form(env.get?("csrf_token").try &.as(String) || "") %>">
|
|
<a class="pure-menu-heading" href="#">
|
|
<input style="all:unset" type="submit" value="<%= translate(locale, "Log out") %>">
|
|
</a>
|
|
</form>
|
|
</div>
|
|
<% else %>
|
|
<div class="pure-u-1-3">
|
|
<a id="toggle_theme" href="/toggle_theme?referer=<%= env.get?("current_page") %>" class="pure-menu-heading">
|
|
<% if env.get("preferences").as(Preferences).dark_mode == "dark" %>
|
|
<i class="icon ion-ios-sunny"></i>
|
|
<% else %>
|
|
<i class="icon ion-ios-moon"></i>
|
|
<% end %>
|
|
</a>
|
|
</div>
|
|
<div class="pure-u-1-3">
|
|
<a title="<%= translate(locale, "Preferences") %>" href="/preferences?referer=<%= env.get?("current_page") %>" class="pure-menu-heading">
|
|
<i class="icon ion-ios-cog"></i>
|
|
</a>
|
|
</div>
|
|
<% if config.login_enabled %>
|
|
<div class="pure-u-1-3">
|
|
<a href="/login?referer=<%= env.get?("current_page") %>" class="pure-menu-heading">
|
|
<%= translate(locale, "Log in") %>
|
|
</a>
|
|
</div>
|
|
<% end %>
|
|
<% end %>
|
|
</div>
|
|
</div>
|
|
|
|
<% if CONFIG.banner %>
|
|
<div class="h-box">
|
|
<h3><%= CONFIG.banner %></h3>
|
|
</div>
|
|
<% end %>
|
|
|
|
<%= content %>
|
|
|
|
<div class="footer">
|
|
<div class="pure-g">
|
|
<div class="pure-u-1 pure-u-md-1-3">
|
|
<a href="https://github.com/iv-org/invidious">
|
|
<%= translate(locale, "Released under the AGPLv3 by Omar Roth.") %>
|
|
</a>
|
|
</div>
|
|
<div class="pure-u-1 pure-u-md-1-3">
|
|
<i class="icon ion-logo-bitcoin"></i>
|
|
BTC: <a href="bitcoin:356DpZyMXu6rYd55Yqzjs29n79kGKWcYrY">356DpZyMXu6rYd55Yqzjs29n79kGKWcYrY</a>
|
|
</div>
|
|
<div class="pure-u-1 pure-u-md-1-3">
|
|
<i class="icon ion-logo-bitcoin"></i>
|
|
BCH: <a href="bitcoincash:qq4ptclkzej5eza6a50et5ggc58hxsq5aylqut2npk">qq4ptclkzej5eza6a50et5ggc58hxsq5aylqut2npk</a>
|
|
</div>
|
|
<div class="pure-u-1 pure-u-md-1-3">
|
|
<i class="icon ion-logo-usd"></i>
|
|
<a href="https://liberapay.com/omarroth">Liberapay</a>
|
|
</div>
|
|
<div class="pure-u-1 pure-u-md-1-3">
|
|
<i class="icon ion-logo-javascript"></i>
|
|
<a rel="jslicense" href="/licenses">
|
|
<%= translate(locale, "View JavaScript license information.") %>
|
|
</a>
|
|
/
|
|
<i class="icon ion-ios-paper"></i>
|
|
<a href="/privacy">
|
|
<%= translate(locale, "View privacy policy.") %>
|
|
</a>
|
|
</div>
|
|
<div class="pure-u-1 pure-u-md-1-3">
|
|
<i class="icon ion-logo-github"></i>
|
|
<%= translate(locale, "Current version: ") %> <%= CURRENT_VERSION %>-<%= CURRENT_COMMIT %> @ <%= CURRENT_BRANCH %>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="pure-u-1 pure-u-md-2-24"></div>
|
|
</div>
|
|
<script src="/js/handlers.js?v=<%= ASSET_COMMIT %>"></script>
|
|
<script src="/js/themes.js?v=<%= ASSET_COMMIT %>"></script>
|
|
<% if env.get? "user" %>
|
|
<script src="/js/sse.js?v=<%= ASSET_COMMIT %>"></script>
|
|
<script id="notification_data" type="application/json">
|
|
<%=
|
|
{
|
|
"upload_text" => HTML.escape(translate(locale, "`x` uploaded a video")),
|
|
"live_upload_text" => HTML.escape(translate(locale, "`x` is live"))
|
|
}.to_pretty_json
|
|
%>
|
|
</script>
|
|
<script src="/js/notifications.js?v=<%= ASSET_COMMIT %>"></script>
|
|
<% end %>
|
|
</body>
|
|
|
|
</html>
|