mirror of
https://git.nadeko.net/Fijxu/invidious.git
synced 2026-01-06 06:51:27 +00:00
Some checks failed
Build and release container directly from master / release (push) Has been cancelled
Invidious CI / build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }} (1.12.2, true) (push) Has been cancelled
Invidious CI / build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }} (1.13.3, true) (push) Has been cancelled
Invidious CI / build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }} (1.14.1, true) (push) Has been cancelled
Invidious CI / build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }} (1.15.1, true) (push) Has been cancelled
Invidious CI / build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }} (1.16.3, true) (push) Has been cancelled
Invidious CI / build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }} (nightly, false) (push) Has been cancelled
Invidious CI / build-docker (push) Has been cancelled
Invidious CI / build-docker-arm64 (push) Has been cancelled
Invidious CI / lint (push) Has been cancelled
automatic backend switching on the last backend, sort working ends, skip companion cookie setting on images, thumbnails, etc. external videoplayback proxy support was unused and is not really useful now due to youtube pinning the IP of where a video is being requested to that IP adresss, so requesting the video from one companion and then offloading the video traffic to another server with another IP is not going to work.
362 lines
21 KiB
Plaintext
362 lines
21 KiB
Plaintext
<%
|
|
locale = env.get("preferences").as(Preferences).locale
|
|
dark_mode = env.get("preferences").as(Preferences).dark_mode
|
|
%>
|
|
<!DOCTYPE html>
|
|
<html lang="<%= locale %>">
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<%= 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 %>">
|
|
<link rel="stylesheet" href="/css/carousel.css?v=<%= ASSET_COMMIT %>">
|
|
<script src="/<%= JS_PATH %>/_helpers.js?v=<%= ASSET_COMMIT %>"></script>
|
|
</head>
|
|
|
|
<body class="<%= dark_mode.blank? ? "no" : dark_mode %>-theme">
|
|
<span style="display:none" id="dark_mode_pref"><%= dark_mode %></span>
|
|
<div class="pure-g">
|
|
<div class="pure-u-1 pure-u-xl-20-24" id="contents">
|
|
<div class="pure-g navbar h-box">
|
|
<% if navbar_search %>
|
|
<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">
|
|
<% autofocus = false %><%= rendered "components/search_box" %>
|
|
</div>
|
|
<% end %>
|
|
|
|
<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" title="<%= translate(locale, "toggle_theme") %>">
|
|
<% if 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(Invidious::User).notifications.size %>
|
|
<% if CONFIG.enable_user_notifications && 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>
|
|
<% if env.get("preferences").as(Preferences).show_nick %>
|
|
<div class="pure-u-1-4" style="overflow: hidden; white-space: nowrap;">
|
|
<span id="user_name"><%= HTML.escape(env.get("user").as(Invidious::User).email) %></span>
|
|
</div>
|
|
<% end %>
|
|
<div class="pure-u-1-4">
|
|
<form action="/signout?referer=<%= env.get?("current_page") %>" method="post">
|
|
<input type="hidden" name="csrf_token" value="<%= HTML.escape(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" title="<%= translate(locale, "toggle_theme") %>">
|
|
<% if 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.invidious_companion.present?
|
|
current_backend = env.get?("current_companion").try &.as(Int32)
|
|
domain = env.get?("using_domain")
|
|
scheme = env.get("scheme")
|
|
status = BackendInfo.get_status
|
|
companion_switched = env.get?("companion_switched")
|
|
%>
|
|
<div class="h-box" style="margin-bottom: 10px;">
|
|
<b>Switch Backend:</b>
|
|
<% if domain %>
|
|
<% CONFIG.invidious_companion.each_with_index do | companion, index | %>
|
|
<% host_backend = env.request.headers["Host"].sub(/([^.]+)(\d+)/, "\\1#{index+1}") %>
|
|
<% is_current_backend_host = host_backend == env.request.headers["Host"] %>
|
|
<a href="<%= scheme %>://<%= host_backend %><%= env.request.resource %>" style="<%= is_current_backend_host ? "text-decoration-line: underline;" : "" %> display: inline-block;">
|
|
<%= HTML.escape(CONFIG.backend_name_prefix + (index + 1).to_s) %> <%= HTML.escape(companion.note) %>
|
|
<span style="color:
|
|
<% if status[index] == BackendInfo::Status::Dead.to_i %> #fd4848; <% end %>
|
|
<% if status[index] == BackendInfo::Status::Working.to_i %> #42ae3c; <% end %>
|
|
">•</span>
|
|
</a>
|
|
<% if !(index == CONFIG.invidious_companion.size-1) %>
|
|
<span> | </span>
|
|
<% end %>
|
|
<% end %>
|
|
<% else %>
|
|
<% current_page = env.get("current_page") %>
|
|
<% CONFIG.invidious_companion.each_with_index do | companion, index | %>
|
|
<a href="/switchbackend?backend_id=<%= index.to_s %>&referer=<%= current_page %>" style="<%= current_backend == index ? "text-decoration-line: underline;" : "" %> display: inline-block;">
|
|
<%= HTML.escape(CONFIG.backend_name_prefix + (index + 1).to_s) %> <%= HTML.escape(companion.note) %>
|
|
<span style="color:
|
|
<% if status[index] == BackendInfo::Status::Dead.to_i %> #fd4848; <% end %>
|
|
<% if status[index] == BackendInfo::Status::Working.to_i %> #42ae3c; <% end %>
|
|
">•</span>
|
|
</a>
|
|
<% if !(index == CONFIG.invidious_companion.size-1) %>
|
|
<span> | </span>
|
|
<% end %>
|
|
<% end %>
|
|
<% end %>
|
|
</div>
|
|
<% end %>
|
|
|
|
<% if companion_switched %>
|
|
<div class="h-box">
|
|
<p><%= translate(locale, "backend_unavailable") %></p>
|
|
</div>
|
|
<% end %>
|
|
|
|
<% if CONFIG.banner %>
|
|
<div class="h-box">
|
|
<h3><%= CONFIG.banner %></h3>
|
|
</div>
|
|
<% end %>
|
|
|
|
<%= content %>
|
|
</div>
|
|
</div>
|
|
<script src="/<%= JS_PATH %>/handlers.js?v=<%= ASSET_COMMIT %>"></script>
|
|
<script src="/<%= JS_PATH %>/themes.js?v=<%= ASSET_COMMIT %>"></script>
|
|
<% if env.get? "user" %>
|
|
<script src="/<%= JS_PATH %>/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>
|
|
<% if CONFIG.enable_user_notifications %>
|
|
<script src="/<%= JS_PATH %>/notifications.js?v=<%= ASSET_COMMIT %>"></script>
|
|
<% end %>
|
|
<% end %>
|
|
|
|
<footer class="pure-g">
|
|
<div class="pure-u-1 pure-u-md-2-24"></div>
|
|
<div class="h-box pure-u-1 pure-u-md-20-24" id="footer-content-container">
|
|
<div class="pure-u-1 footer-content">
|
|
<div class="footer-section pure-u-1-4" id="footer-custom-text">
|
|
<b>Invidious</b>
|
|
<% if CONFIG.footer %>
|
|
<p><%=CONFIG.footer%></p>
|
|
<% else %>
|
|
<p><%=translate(locale, "default_invidious_footer_text")%></p>
|
|
<% end %>
|
|
|
|
</div>
|
|
<div class="footer-section">
|
|
<b class="footer-section-header"><%= translate(locale, "footer_navigation_section_header")%></b>
|
|
<ul class="pure-menu-list footer-section-list">
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="/" title="<%= translate(locale, "footer_home_link")%>">
|
|
<%= translate(locale, "footer_home_link") %>
|
|
</a>
|
|
</li>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="/feed/popular" title="<%= translate(locale, "Popular")%>">
|
|
<%= translate(locale, "Popular") %>
|
|
</a>
|
|
</li>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="/feed/trending" title="<%= translate(locale, "Trending")%>" style="">
|
|
<%= translate(locale, "Trending") %>
|
|
</a>
|
|
</li>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="/search" title="<%= translate(locale, "Search")%>">
|
|
<%= translate(locale, "Search") %>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="footer-section">
|
|
<b class="footer-section-header">Invidious</b>
|
|
<ul class="pure-menu-list footer-section-list">
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="https://invidious.io" title="<%= translate(locale, "footer_project_website_link")%>">
|
|
<%= translate(locale, "footer_project_website_link") %>
|
|
</a>
|
|
</li>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="https://github.com/iv-org/invidious" title="<%= translate(locale, "footer_source_code_link")%>">
|
|
<%= translate(locale, "footer_source_code_link") %>
|
|
</a>
|
|
</li>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="https://github.com/iv-org/invidious/issues" title="<%= translate(locale, "footer_issue_tracker_link")%>" style="">
|
|
<%= translate(locale, "footer_issue_tracker_link") %>
|
|
</a>
|
|
</li>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="https://instances.invidious.io" title="<%= translate(locale, "footer_public_instances_link")%>">
|
|
<%= translate(locale, "footer_public_instances_link") %>
|
|
</a>
|
|
</li>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="https://invidious.io/donate" title="<%= translate(locale, "footer_donate_link")%>">
|
|
<%= translate(locale, "footer_donate_link") %>
|
|
</a>
|
|
</li>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="https://matrix.to/#/#invidious:matrix.org" title="<%= translate(locale, "footer_matrix_link")%>">
|
|
<%= translate(locale, "footer_matrix_link") %>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</div>
|
|
<% if CONFIG.instance_maintainer_email || CONFIG.modified_source_code_url || CONFIG.footer_instance_tos_link || CONFIG.footer_instance_privacy_policy_link %>
|
|
<div class="footer-section">
|
|
<b class="footer-section-header">
|
|
<% if CONFIG.modified_source_code_url %>
|
|
<%= translate(locale, "footer_instance_section_header_modified_source")%>
|
|
<% else %>
|
|
<%= translate(locale, "footer_instance_section_header")%>
|
|
<% end %>
|
|
</b>
|
|
<ul class="pure-menu-list footer-section-list">
|
|
<% if CONFIG.instance_maintainer_email %>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="<%=HTML.escape("mailto:#{CONFIG.instance_maintainer_email.not_nil!}")%>" title="<%= translate(locale, "footer_contact_link")%>">
|
|
<%= translate(locale, "footer_contact_link") %>
|
|
</a>
|
|
</li>
|
|
<% end %>
|
|
<% if CONFIG.modified_source_code_url %>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="<%=HTML.escape(CONFIG.modified_source_code_url.not_nil!)%>" title="<%= translate(locale, "footer_instance_section_modified_source_code")%>">
|
|
<%= translate(locale, "footer_instance_section_modified_source_code") %>
|
|
</a>
|
|
</li>
|
|
<% end %>
|
|
<% if CONFIG.footer_instance_tos_link %>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="<%=HTML.escape(CONFIG.footer_instance_tos_link.not_nil!)%>" title="<%= translate(locale, "footer_instance_section_tos")%>">
|
|
<%= translate(locale, "footer_instance_section_tos") %>
|
|
</a>
|
|
</li>
|
|
<% end %>
|
|
<% if CONFIG.footer_instance_privacy_policy_link %>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="<%=HTML.escape(CONFIG.footer_instance_privacy_policy_link.not_nil!)%>" title="<%= translate(locale, "footer_instance_section_privacy_policy")%>">
|
|
<%= translate(locale, "footer_instance_section_privacy_policy") %>
|
|
</a>
|
|
</li>
|
|
<% end %>
|
|
|
|
<% if CONFIG.footer_instance_donate_link %>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="<%=HTML.escape(CONFIG.footer_instance_donate_link.not_nil!)%>" title="<%= translate(locale, "footer_instance_section_donate")%>">
|
|
<%= translate(locale, "footer_instance_section_donate") %>
|
|
</a>
|
|
</li>
|
|
<% end %>
|
|
|
|
<% CONFIG.footer_instance_section_custom_fields.each do | field | %>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="<%=HTML.escape(field[1])%>" title="<%= HTML.escape(field[0]) %>">
|
|
<%= HTML.escape(field[0]) %>
|
|
</a>
|
|
</li>
|
|
<% end %>
|
|
</ul>
|
|
</div>
|
|
<% end %>
|
|
|
|
<div class="footer-section">
|
|
<b class="footer-section-header"><%= translate(locale, "footer_support_section_header")%></b>
|
|
<ul class="pure-menu-list footer-section-list">
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="https://github.com/iv-org/invidious/issues/new" title="<%= translate(locale, "footer_report_bug_link")%>">
|
|
<%= translate(locale, "footer_report_bug_link") %>
|
|
</a>
|
|
</li>
|
|
<li class="pure-menu-item footer-section-item">
|
|
<a href="#" title="<%= translate(locale, "footer_faq_link")%>" style="">
|
|
<%= translate(locale, "footer_faq_link") %>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<hr/>
|
|
<div class="footer-footer">
|
|
<span class="left">
|
|
<%
|
|
if CONFIG.invidious_companion.present?
|
|
companion_public_url = env.get("companion_public_url").as(String)
|
|
%>
|
|
<div class="box">You are currently using Backend: <%= current_backend ? companion_public_url : "Unable to get backend, this is bug, please report it!" %></div>
|
|
<% end %>
|
|
<% if CONFIG.modified_source_code_url %>
|
|
<%= translate(locale, "footer_current_version_modified") %>
|
|
<% else %>
|
|
<%= translate(locale, "Current version: ") %>
|
|
<% end %>
|
|
|
|
<%= CURRENT_VERSION %>-<%= CURRENT_COMMIT %> @ <%= CURRENT_BRANCH %>
|
|
</span>
|
|
<div class="right">
|
|
<a href="/privacy" title="<%= translate(locale, "footer_privacy_policy_link")%>"><%= translate(locale, "footer_privacy_policy_link") %></a>
|
|
<span> | </span>
|
|
<a href="/licenses" rel="jslicense" title="<%= translate(locale, "footer_licences_link")%>"><%= translate(locale, "footer_licences_link") %></a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="pure-u-1 pure-u-md-2-24"></div>
|
|
</footer>
|
|
</body>
|
|
|
|
</html>
|