1085 lines
37 KiB
Plaintext
1085 lines
37 KiB
Plaintext
<!--
|
|
This Source Code Form is subject to the terms of the GNU General Public License:
|
|
|
|
Copyright (C) 2021-2025 PokeTube Of Poke Project, a part of The Poke Project Initiative (initiative.poketube.fun)
|
|
source code :https://codeberg.org/ashley/poke
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see https://www.gnu.org/licenses/.
|
|
-->
|
|
<% if (!isMobile) { %>
|
|
<% if (!isMobile) { %>
|
|
<!--
|
|
This Source Code Form is subject to the terms of the GNU General Public License:
|
|
|
|
Copyright (C) 2021-2025 Poke (https://codeberg.org/ashley/poke)
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License, version 3 of the License,
|
|
or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see https://www.gnu.org/licenses/.
|
|
-->
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<title>Poke | Discover</title>
|
|
<meta content="width=device-width, initial-scale=1, viewport-fit=cover" name="viewport" />
|
|
<meta property="og:type" content="website" />
|
|
<meta property="og:title" content="Poke - Discover" />
|
|
<meta name="twitter:description" content="Discover Popular videos on poke!" />
|
|
<meta property="og:image" content="https://cdn.glitch.global/d68d17bb-f2c0-4bc3-993f-50902734f652/aa70111e-5bcd-4379-8b23-332a33012b78.image.png?v=1701898829884" />
|
|
<meta name="twitter:card" content="summary_large_image" />
|
|
<meta name="theme-color" content="#1a1a1a" />
|
|
<meta name="darkreader-lock" />
|
|
<link rel="manifest" href="/manifest.json" />
|
|
<link rel="icon" href="/css/yt-ukraine.svg?v=6" />
|
|
<link href="/css/app-cdn.min.css" rel="stylesheet" />
|
|
<link href="/css/app.main.css?v=44600" rel="stylesheet" />
|
|
<link href="/css/search.main.css?v=57" rel="stylesheet" />
|
|
<link href="/css/watch.main.css" rel="stylesheet" />
|
|
<link href="https://p.poketube.fun/https://site-assets.fontawesome.com/releases/v6.1.1/css/all.css" rel="stylesheet" />
|
|
|
|
<style>
|
|
:root {
|
|
--bg-1: #0b0d12;
|
|
--bg-2: #111319;
|
|
--bg-3: #161925;
|
|
|
|
--brand: #df03a8;
|
|
--brand-2: #3ea6ff;
|
|
|
|
--text-primary: #fff;
|
|
--text-secondary: #c8c8c8;
|
|
--text-dim: #a3a3a3;
|
|
|
|
--glass-bg: rgba(255, 255, 255, 0.08);
|
|
--glass-border: rgba(255, 255, 255, 0.16);
|
|
--glass-hover: rgba(255, 255, 255, 0.12);
|
|
|
|
--card-bg: rgba(0, 0, 0, 0.38);
|
|
--thumbnail-bg: #0b0b0b;
|
|
|
|
--ring: rgba(223, 3, 168, 0.36);
|
|
|
|
--radius-xl: 20px;
|
|
--radius-lg: 16px;
|
|
--radius-md: 12px;
|
|
|
|
--shadow-1: 0 10px 30px rgba(0, 0, 0, 0.45);
|
|
--shadow-2: 0 6px 18px rgba(0, 0, 0, 0.35);
|
|
|
|
--container: 1200px;
|
|
--grid-gap: 14px;
|
|
}
|
|
|
|
@media (max-width: 1360px) { :root { --container: 1040px; } }
|
|
@media (max-width: 1180px) { :root { --container: 920px; } }
|
|
@media (max-width: 980px) { :root { --container: 92vw; } }
|
|
|
|
* { box-sizing: border-box; }
|
|
html, body { height: 100%; }
|
|
body {
|
|
margin: 0;
|
|
color: var(--text-primary);
|
|
background:
|
|
radial-gradient(1200px 800px at 15% 10%, #231638 0%, transparent 60%),
|
|
radial-gradient(900px 700px at 85% 20%, #2b160e 0%, transparent 60%),
|
|
radial-gradient(1000px 900px at 50% 90%, #09250e 0%, transparent 60%),
|
|
linear-gradient(180deg, var(--bg-2), var(--bg-1) 40%, var(--bg-3) 100%);
|
|
font-family: "poketube flex", Inter, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji";
|
|
-webkit-font-smoothing: antialiased;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
.container {
|
|
width: min(var(--container), 100%);
|
|
margin: 0 auto;
|
|
padding: 24px;
|
|
}
|
|
|
|
.glass {
|
|
background: var(--glass-bg);
|
|
border: 1px solid var(--glass-border);
|
|
border-radius: var(--radius-xl);
|
|
backdrop-filter: blur(14px) saturate(1.25);
|
|
-webkit-backdrop-filter: blur(14px) saturate(1.25);
|
|
box-shadow: var(--shadow-1);
|
|
}
|
|
.glass:hover { background: var(--glass-hover); }
|
|
@supports not (backdrop-filter: blur(10px)) {
|
|
.glass { background: rgba(25, 25, 25, 0.65); }
|
|
}
|
|
|
|
.progress-container {
|
|
position: fixed; inset: 0 auto auto 0; width: 100%; height: 3px;
|
|
background: transparent; z-index: 9999; display: none;
|
|
}
|
|
.progress-bar {
|
|
width: 0%; height: 100%;
|
|
background-image: linear-gradient(90deg, #ff0045, #ff0e55, #ff1d79);
|
|
transition: width .5s ease-in-out;
|
|
}
|
|
|
|
nav.navbar {
|
|
position: sticky; top: 12px; z-index: 50;
|
|
width: min(var(--container), 100%);
|
|
margin: 12px auto 0 auto;
|
|
}
|
|
.navbar-inner {
|
|
display: grid;
|
|
grid-template-columns: auto 1fr auto;
|
|
align-items: center;
|
|
gap: 12px;
|
|
padding: 10px 14px;
|
|
}
|
|
.brand img { height: 36px; display: block; transform: translateZ(0); }
|
|
|
|
.search {
|
|
display: flex; align-items: center; gap: 8px;
|
|
padding: 8px 10px; border-radius: 999px;
|
|
font-family: "poketube flex", Inter, system-ui;
|
|
}
|
|
.search input {
|
|
flex: 1; background: transparent; color: var(--text-primary);
|
|
border: 0; outline: 0; font-size: 14.5px; padding: 6px 8px; min-width: 120px;
|
|
font-family: "poketube flex", Inter, system-ui;
|
|
}
|
|
.search button {
|
|
border: 0; padding: 8px 12px; border-radius: 999px; color: #fff;
|
|
background: linear-gradient(90deg, var(--brand), #ff5bcf);
|
|
box-shadow: 0 0 0 0 rgba(0,0,0,0); cursor: pointer;
|
|
font-family: "poketube flex", Inter, system-ui;
|
|
}
|
|
.search button:hover { box-shadow: 0 0 0 3px var(--ring); }
|
|
|
|
.actions a {
|
|
display: inline-flex; align-items: center; justify-content: center;
|
|
width: 40px; height: 40px; border-radius: 10px; color: #fff; text-decoration: none;
|
|
}
|
|
.actions a:hover { background: rgba(255,255,255,0.08); }
|
|
|
|
.page-head {
|
|
margin-top: 18px; display: grid; gap: 8px; text-align: center;
|
|
}
|
|
.page-head h1 {
|
|
font-family: "poketube flex", Inter, system-ui;
|
|
letter-spacing: 0.25px;
|
|
font-size: clamp(1.6rem, 2.6vw, 2.25rem);
|
|
margin: 0;
|
|
}
|
|
.page-head p {
|
|
margin: 0; color: var(--text-secondary);
|
|
font-family: "poketube flex", Inter, system-ui;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.tabs-wrap { margin-top: 18px; }
|
|
.tabs {
|
|
display: inline-flex; gap: 6px; padding: 6px; border-radius: 999px;
|
|
font-family: "poketube flex", Inter, system-ui;
|
|
}
|
|
.tab {
|
|
display: inline-flex; align-items: center; gap: 8px;
|
|
padding: 10px 14px; border-radius: 999px; color: #fff; text-decoration: none;
|
|
font-weight: 700; letter-spacing: .2px;
|
|
transition: background .2s ease, color .2s ease;
|
|
font-family: "poketube flex", Inter, system-ui;
|
|
}
|
|
.tab:hover { background: rgba(255,255,255,0.10); }
|
|
.tab.active {
|
|
background: linear-gradient(90deg, rgba(223,3,168,0.45), rgba(96,54,255,0.35));
|
|
box-shadow: inset 0 0 0 1px rgba(255,255,255,0.2), var(--shadow-2);
|
|
}
|
|
|
|
.section-card { margin-top: 18px; padding: 16px; }
|
|
|
|
.video-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
|
|
gap: var(--grid-gap);
|
|
}
|
|
|
|
.video {
|
|
display: grid; grid-template-rows: auto 1fr;
|
|
text-decoration: none; color: inherit;
|
|
border-radius: var(--radius-lg); overflow: hidden; position: relative;
|
|
background: rgba(0,0,0,0.22); border: 1px solid rgba(255,255,255,0.08);
|
|
box-shadow: var(--shadow-2);
|
|
transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
|
|
font-family: "poketube flex", Inter, system-ui;
|
|
}
|
|
.video:hover {
|
|
transform: translateY(-4px);
|
|
border-color: rgba(223,3,168,0.55);
|
|
box-shadow: 0 8px 28px rgba(223,3,168,0.22);
|
|
}
|
|
|
|
.thumbnail {
|
|
position: relative;
|
|
background: var(--thumbnail-bg) center/cover no-repeat;
|
|
aspect-ratio: 16 / 9;
|
|
}
|
|
.thumbnail::after {
|
|
content: ""; position: absolute; inset: 0;
|
|
background: linear-gradient(to top, rgba(0,0,0,0.35), rgba(0,0,0,0));
|
|
}
|
|
.video-length {
|
|
position: absolute; right: 8px; bottom: 8px; z-index: 2;
|
|
font-size: 12px; font-weight: 800; padding: 4px 8px; border-radius: 8px;
|
|
background: rgba(0,0,0,0.65); border: 1px solid rgba(255,255,255,0.18);
|
|
font-family: "poketube flex", Inter, system-ui;
|
|
}
|
|
|
|
.info {
|
|
display: grid; gap: 6px; padding: 10px 12px 12px 12px; min-height: 84px;
|
|
background: rgba(0,0,0,0.18); border-top: 1px solid rgba(255,255,255,0.08);
|
|
font-family: "poketube flex", Inter, system-ui;
|
|
}
|
|
.info .title {
|
|
font-weight: 800; line-height: 1.25; color: var(--text-primary);
|
|
display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
|
|
font-family: "poketube flex", Inter, system-ui;
|
|
}
|
|
.info .byline {
|
|
margin-top: -2px; font-size: 13px; color: var(--text-dim);
|
|
font-family: "poketube flex", Inter, system-ui;
|
|
}
|
|
|
|
@media (max-width: 780px) {
|
|
.navbar-inner { grid-template-columns: 1fr auto; }
|
|
.brand { display: none; }
|
|
.tabs { overflow-x: auto; scrollbar-width: none; }
|
|
.tabs::-webkit-scrollbar { display: none; }
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.video, .progress-bar { transition: none !important; }
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div class="progress-container" aria-hidden="true">
|
|
<div class="progress-bar"></div>
|
|
</div>
|
|
|
|
<nav class="navbar">
|
|
<div class="navbar-inner glass">
|
|
<a class="brand" href="/143" aria-label="Poke Home">
|
|
<img src="/css/logo.svg?v=5" alt="Poke logo" />
|
|
</a>
|
|
|
|
<form class="search glass" action="/search" method="GET" role="search" aria-label="Search videos">
|
|
<i class="fa-light fa-search" aria-hidden="true"></i>
|
|
<input class="search-bar" autocomplete="on" id="fname" name="query" placeholder="Search on Poke…" />
|
|
<button type="submit" class="btn btn-success" aria-label="Submit search">
|
|
<i class="fa-light fa-arrow-right"></i>
|
|
</button>
|
|
</form>
|
|
|
|
<div class="actions">
|
|
<a href="/weather" title="Weather"><i class="fa-light fa-sun"></i></a>
|
|
<a href="/privacy" title="Privacy"><i class="fa-light fa-shield"></i></a>
|
|
<a href="/video/upload?from=" title="Upload"><i class="fa-light fa-video"></i></a>
|
|
<a href="https://codeberg.org/Ashley/poketube/issues" title="Report a bug"><i class="fa-light fa-bug"></i></a>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<header class="container page-head">
|
|
<h1>Discover Popular Videos On Poke :3</h1>
|
|
<p>uses the United States trending page(s) from YouTube</p>
|
|
</header>
|
|
|
|
<div class="container tabs-wrap">
|
|
<div class="tabs glass">
|
|
<% if (!tab) { %>
|
|
<a href="" class="tab active"><i class="fa-light fa-fire"></i><span>Now</span></a>
|
|
<a href="?tab=music" class="tab"><i class="fa-light fa-music"></i><span>Music</span></a>
|
|
<a href="?tab=gaming" class="tab"><i class="fa-light fa-gamepad-modern"></i><span>Gaming</span></a>
|
|
<% if (!isMobile) { %>
|
|
<a href="?tab=movies" class="tab"><i class="fa-light fa-film"></i><span>Movie Trailers</span></a>
|
|
<% } %>
|
|
<% } %>
|
|
|
|
<% if (tab === "music") { %>
|
|
<a href="/app" class="tab"><i class="fa-light fa-fire"></i><span>Now</span></a>
|
|
<a href="" class="tab active"><i class="fa-light fa-music"></i><span>Music</span></a>
|
|
<a href="?tab=gaming" class="tab"><i class="fa-light fa-gamepad-modern"></i><span>Gaming</span></a>
|
|
<% if (!isMobile) { %>
|
|
<a href="?tab=movies" class="tab"><i class="fa-light fa-film"></i><span>Movie Trailers</span></a>
|
|
<% } %>
|
|
<% } %>
|
|
|
|
<% if (tab === "gaming") { %>
|
|
<a href="/app" class="tab"><i class="fa-light fa-fire"></i><span>Now</span></a>
|
|
<a href="?tab=music" class="tab"><i class="fa-light fa-music"></i><span>Music</span></a>
|
|
<% if (!isMobile) { %>
|
|
<a href="" class="tab active"><i class="fa-light fa-gamepad-modern"></i><span>Gaming</span></a>
|
|
<a href="?tab=movies" class="tab"><i class="fa-light fa-film"></i><span>Movie Trailers</span></a>
|
|
<% } %>
|
|
<% } %>
|
|
|
|
<% if (tab === "movies") { %>
|
|
<a href="/app" class="tab"><i class="fa-light fa-fire"></i><span>Now</span></a>
|
|
<a href="?tab=music" class="tab"><i class="fa-light fa-music"></i><span>Music</span></a>
|
|
<a href="?tab=gaming" class="tab"><i class="fa-light fa-gamepad-modern"></i><span>Gaming</span></a>
|
|
<a href="" class="tab active"><i class="fa-light fa-film"></i><span>Movie Trailers</span></a>
|
|
<% } %>
|
|
</div>
|
|
</div>
|
|
|
|
<main class="container">
|
|
<section class="section-card glass">
|
|
<div class="video-grid">
|
|
<% inv.forEach(x => { %>
|
|
<a href="/watch?v=<%- x.videoId %>" class="video canloadhd" data-author="<%- x.author %>">
|
|
<div class="thumbnail" data-bg="/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtJtH0PXeQGoRFTgw">
|
|
<span class="video-length"><%- turntomins(x.lengthSeconds) %></span>
|
|
</div>
|
|
<div class="info">
|
|
<span class="title" title="<%- x.title %>"><%- x.title %></span>
|
|
<span class="byline" title="Video by <%- x.author %>">By <%- x.author %></span>
|
|
</div>
|
|
</a>
|
|
<% }) %>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<script>
|
|
(function () {
|
|
const bar = document.querySelector('.progress-bar');
|
|
const wrap = document.querySelector('.progress-container');
|
|
if (!bar || !wrap) return;
|
|
bar.style.width = '0%';
|
|
wrap.style.display = 'block';
|
|
window.addEventListener('load', () => {
|
|
bar.style.width = '100%';
|
|
setTimeout(() => { wrap.style.display = 'none'; }, 500);
|
|
}, { once: true });
|
|
}());
|
|
|
|
(function () {
|
|
const nodes = Array.from(document.querySelectorAll('.thumbnail[data-bg]'));
|
|
if (!nodes.length) return;
|
|
|
|
function load(el) {
|
|
const url = el.getAttribute('data-bg');
|
|
if (!url) return;
|
|
el.style.backgroundImage = 'url(' + url + ')';
|
|
el.removeAttribute('data-bg');
|
|
}
|
|
|
|
if ('IntersectionObserver' in window) {
|
|
const io = new IntersectionObserver((entries, obs) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
load(entry.target);
|
|
obs.unobserve(entry.target);
|
|
}
|
|
});
|
|
}, { rootMargin: '200px 0px' });
|
|
|
|
nodes.forEach(n => io.observe(n));
|
|
} else {
|
|
const onScroll = () => {
|
|
const vh = window.innerHeight || document.documentElement.clientHeight;
|
|
nodes.forEach(n => {
|
|
if (!n.hasAttribute('data-bg')) return;
|
|
const r = n.getBoundingClientRect();
|
|
if (r.top < vh + 200 && r.bottom > -200) load(n);
|
|
});
|
|
};
|
|
onScroll();
|
|
window.addEventListener('scroll', onScroll, { passive: true });
|
|
window.addEventListener('resize', onScroll);
|
|
}
|
|
}());
|
|
</script>
|
|
</body>
|
|
</html>
|
|
<% } %>
|
|
|
|
<% } %>
|
|
|
|
|
|
|
|
<% if (isMobile) { %>
|
|
<% if (isMobile) { %>
|
|
|
|
<!DOCTYPE html><html>
|
|
<head>
|
|
<title>PokeTube - Privacy Is Your Right</title>
|
|
<link href=/css/yt-ukraine.svg?v=6 rel=icon>
|
|
<meta content=website property=og:type>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta content="PokeTube - Privacy Is Your Right" property=og:title>
|
|
<meta content="Privacy Is Your Right - Poketube is a libre front end for YouTube Thats focused on your privacy! your personal data should be nobody's business" property=twitter:description>
|
|
<meta content="https://cdn.glitch.global/5d35aeaf-2df2-4f2f-a4b7-b486694c329b/0d71ef53-9fc2-4ddd-8814-fcf00ba69155.image.png?v=1664301040809" property=og:image>
|
|
<link rel="manifest" href="/manifest.json">
|
|
|
|
<meta content=summary_large_image name=twitter:card>
|
|
<meta content=@PoketaleBot name=twitter:site>
|
|
<meta content=@PoketaleBot name=twitter:creator>
|
|
<link href=/css/app-cdn.min.css rel=stylesheet>
|
|
<link href="https://fonts.poketube.fun/css/fonts.css" rel=stylesheet>
|
|
<meta content="#715efb" name="theme-color">
|
|
</head>
|
|
<style>
|
|
.mn {
|
|
background: #181818;
|
|
border-radius: 26px;
|
|
padding: 6px;
|
|
margin: auto;
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 50%;
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
@font-face {
|
|
font-family: 'Ginto Nord';
|
|
font-weight: 800;
|
|
src:url('https://p.poketube.fun/https://cdn.statically.io/gh/brecert/discord-quote-generator/main/Ginto-Nord-800.woff') format("woff");
|
|
}
|
|
|
|
</style> <style nonce="IJD3y0awTwA2dd0pWOP+ZQ">
|
|
#yt-masthead{line-height:0;margin:15px auto;width:440px;margin-top:25px}#logo-container{margin-right:5px;float:left;cursor:pointer;text-decoration:none}.logo{background:no-repeat url("//www.gstatic.com/youtube/img/branding/youtubelogo/1x/youtubelogo_30.png");width:125px;height:30px;cursor:pointer;display:inline-block}#masthead-search{display:flex;margin-top:3px;max-width:650px;overflow:hidden;padding:0;position:relative}.search-button{border-left:0;-moz-border-radius-topleft:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;float:right;height:29px;padding:0;border:solid 1px transparent;border-color:#ffff;background:#999;;color:#333;cursor:pointer}.search-button:hover{border-color:#c6c6c6;background:#f0f0f0;box-shadow:0 1px 0 rgba(0,0,0,0.0)}.search-button-content{border:none;display:block;opacity:.6;padding:0;text-indent:-10000px;background:no-repeat url(//www.gstatic.com/youtube/src/web/htdocs/img/search.png);background-size:auto;width:15px;height:15px;box-shadow:none;margin:0 25px}#masthead-search-terms-border{flex:1 1 auto;border:1px solid #ccc;box-shadow:inset 0 1px 2px #eee;background-color:#fff;font-size:14px;height:29px;line-height:30px;margin:0 0 2px;overflow:hidden;position:relative;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s ease;transition:border-color .2s ease}#masthead-search-terms{background:#2c2f33;border:0;font-size:16px;height:100%;left:0;margin:0;outline:none;padding:2px 6px;position:absolute;width:100%;-moz-box-sizing:border-box;box-sizing:border-box}
|
|
</style>
|
|
<body>
|
|
<center>
|
|
|
|
<center>
|
|
<section class=youtube-video>
|
|
<link href=/css/app-cdn.min.css rel=stylesheet>
|
|
<link href=/css/app.main.css?v=44600 rel=stylesheet>
|
|
<link href="/css/search.main.css?v=57" rel=stylesheet>
|
|
|
|
<style>
|
|
@import url("https://p.poketube.fun/https://site-assets.fontawesome.com/releases/v6.1.1/css/all.css");
|
|
|
|
a.class:hover {
|
|
text-decoration:underline;
|
|
font-weight:bold
|
|
}
|
|
summary{
|
|
color:gray;
|
|
}
|
|
summary:hover{
|
|
color:white;
|
|
}
|
|
</style>
|
|
|
|
<style>
|
|
body{
|
|
overflow-x: hidden; /* Hide horizontal scrollbar */
|
|
color:#111111
|
|
}
|
|
|
|
:root {
|
|
--text-primary: #fff;
|
|
--text-secondary: #fff;
|
|
--text-link: #3ea6ff;
|
|
|
|
--app-background: #111111;
|
|
--context-menu-background: #333;
|
|
--border-color: #444;
|
|
--item-hover-background: #373737;
|
|
--item-active-background: #383838;
|
|
|
|
--top-bar-background: #202020;
|
|
--guide-background: #212121;
|
|
|
|
--thumbnail-background: #252525;
|
|
|
|
--channel-info-background: #181818;
|
|
--channel-contents-background: #0f0f0f;
|
|
}
|
|
@font-face {
|
|
font-family: 'Ginto Nord';
|
|
font-weight: 800;
|
|
src:url('https://p.poketube.fun/https://cdn.statically.io/gh/brecert/discord-quote-generator/main/Ginto-Nord-800.woff') format("woff");
|
|
}
|
|
|
|
.video > .info {
|
|
grid-area: info;
|
|
font-size: small;
|
|
margin-left: 2px;
|
|
height: auto;
|
|
width: fit-content;
|
|
text-align: left;
|
|
margin-top: -9px;
|
|
padding: 2px;
|
|
}
|
|
|
|
.video > .info > .title {
|
|
color: var(--text-primary) !important;
|
|
font-weight: bold;
|
|
font-size: initial;
|
|
margin-bottom: 0px;
|
|
}
|
|
|
|
.alert {
|
|
padding: 20px;
|
|
background-color: #f44336;
|
|
color: white;
|
|
opacity: 1;
|
|
transition: opacity 0.6s;
|
|
margin-bottom: 15px;
|
|
}
|
|
.downnav{
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
margin: auto;
|
|
overflow: hidden;
|
|
z-index: 1;
|
|
background-color: #0f0f0f
|
|
}
|
|
.search button {
|
|
transform: none;
|
|
display: flex;
|
|
background: #454545;
|
|
color: #999;
|
|
border: 1px;
|
|
border-radius: 12px;
|
|
margin: 2em;
|
|
width: 6em;
|
|
justify-content: center;
|
|
height: 2.6em;
|
|
}
|
|
|
|
.alert.success {background-color: #04AA6D;}
|
|
.alert.info {background-color: #2196F3;}
|
|
.alert.warning {background-color: #ff9800;}
|
|
|
|
.closebtn {
|
|
margin-left: 15px;
|
|
color: white;
|
|
font-weight: bold;
|
|
float: right;
|
|
font-size: 22px;
|
|
line-height: 20px;
|
|
cursor: pointer;
|
|
transition: 0.3s;
|
|
}
|
|
|
|
.closebtn:hover {
|
|
color: black;
|
|
}
|
|
|
|
</style>
|
|
<style>section p {
|
|
font-family:Whitney, Helvetica Neue, Helvetica, Arial, sans-serif;
|
|
font-weight:400;
|
|
color:#fff;
|
|
font-size:16px;
|
|
line-height:24px;
|
|
margin-top:12px
|
|
}
|
|
|
|
.sticky-top {
|
|
position: sticky;
|
|
top: 0px;
|
|
z-index: 999;
|
|
}
|
|
.responsive {
|
|
width: 100%;
|
|
overflow-x: auto;
|
|
}
|
|
|
|
|
|
</style>
|
|
|
|
|
|
<style>
|
|
|
|
.channel-info-container > img {
|
|
width: 100%;
|
|
}
|
|
|
|
|
|
.search .search-bar {
|
|
display: flex;
|
|
transform: translateY(1.5em);
|
|
background: #222;
|
|
border: 1px solid #444;
|
|
width: 298px;
|
|
height: 30px;
|
|
}
|
|
|
|
/* nice classname am i rigth */
|
|
.discover-some-bitches{
|
|
text-align: center;
|
|
width: 673px;
|
|
margin: auto;
|
|
}
|
|
</style>
|
|
|
|
|
|
<style>
|
|
#more-button-container .backtotop {
|
|
margin: 0%;
|
|
display: none;
|
|
}
|
|
#more-button-container .backtotop a {
|
|
margin-top: .5em;
|
|
}
|
|
#more-button .close { display: none; }
|
|
#more-button {
|
|
font-size: .94em;
|
|
line-height: 1.2em;
|
|
text-align: left;
|
|
padding: .6em 3%;
|
|
margin: 0;
|
|
background: #000;
|
|
border-top: none;
|
|
border-radius: 23px;
|
|
height: 100%;
|
|
}
|
|
#set-language { margin-bottom: .2em; }
|
|
#set-language + p {
|
|
display: inline-block;
|
|
font-size: 1em; /* 15px */
|
|
margin: .45em 0 0;
|
|
}
|
|
|
|
#more-buttons { padding: .4em 0; }
|
|
#more-buttons p {margin: 0;
|
|
font-weight: 900;
|
|
font-stretch: ultra-expanded;
|
|
padding: 3px;
|
|
}
|
|
#more-buttons span {
|
|
display: inline-block;
|
|
width: 10.5em;
|
|
line-height: 2em;
|
|
}
|
|
#more-buttons span a {
|
|
line-height: 1.9em;
|
|
}
|
|
#more-buttons span.original { font-weight: bold; }
|
|
/* Display/hide language list */
|
|
|
|
#more-button-container { display: none; }
|
|
#more-button-container:target { display: block; }
|
|
|
|
#rec-cont:target { display: none; }
|
|
#rec-cont { display: block; }
|
|
|
|
.backtotop b { display: none; }
|
|
|
|
body { position: relative; }
|
|
#more-button-container {
|
|
position: absolute;
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
margin: auto;
|
|
overflow: hidden;
|
|
z-index: 1;
|
|
height: 16em;
|
|
}
|
|
#language-container .backtotop a {
|
|
position: absolute;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: transparent;
|
|
border: none;
|
|
margin-top: 0;
|
|
}
|
|
#more-button .close {
|
|
float: right;
|
|
display: block;
|
|
}
|
|
#more-button.close span {
|
|
display: none;
|
|
}
|
|
#more-button .close:after {
|
|
content: "\2A09";
|
|
float: right;
|
|
position: relative; bottom: .1em;
|
|
cursor: pointer;
|
|
}
|
|
|
|
#more-buttons {
|
|
column-width: 10em;
|
|
column-count: 3;
|
|
column-gap: 0;
|
|
}
|
|
#more-buttons span { display: block; }
|
|
#more-buttons span a { display: inline-block; }
|
|
.tabs {
|
|
display: table;
|
|
font-family: poketube flex;
|
|
border-collapse: separate;
|
|
table-layout: auto;
|
|
font-weight: 800;
|
|
font-stretch: extra-expanded;
|
|
border-spacing: 3px;
|
|
}
|
|
.tabs.tabs-center {
|
|
margin-left: auto;
|
|
background: #000;
|
|
border-radius: 1em;
|
|
margin-bottom: 45px;
|
|
margin-right: auto;
|
|
}
|
|
|
|
.tabs.tabs-justify {
|
|
width: 100%;
|
|
table-layout: fixed;
|
|
}
|
|
|
|
|
|
.tab.active {
|
|
background: #1a1a1a !important;
|
|
border-radius: 1em !important;
|
|
}
|
|
|
|
.tabs a.tab {
|
|
position: relative;
|
|
display: table-cell;
|
|
transition: all ease 0.3s;
|
|
padding: 1em 1.6em;
|
|
transform: translate3d(0, 0, 0);
|
|
color: #fff;
|
|
white-space: nowrap;
|
|
cursor: pointer;
|
|
}
|
|
.tabs a.tab:hover {
|
|
color: #3cb4fa;
|
|
}
|
|
.tabs a.tab:after {
|
|
transition: all 0.3s cubic-bezier(1, 0, 0, 1);
|
|
will-change: transform, box-shadow, opacity;
|
|
position: absolute;
|
|
content: '';
|
|
height: 3px;
|
|
bottom: 0px;
|
|
left: 0px;
|
|
right: 0px;
|
|
border-radius: 3px 3px 0px 0px;
|
|
opacity: 0;
|
|
transform: scale(0, 1);
|
|
}
|
|
.tabs a.tab.active {
|
|
color: #fff;
|
|
}
|
|
.tabs a.tab.active:after {
|
|
opacity: 1;
|
|
transform: scale(1, 1);
|
|
}
|
|
|
|
|
|
.tab:hover {
|
|
background: var(--not-quite-black);
|
|
text-decoration: none;
|
|
border-radius: 1em;
|
|
}
|
|
</style>
|
|
|
|
<body>
|
|
|
|
<div class="app" >
|
|
<nav>
|
|
|
|
<div class=left><a class="class" href="/" style=font-family:Inter,sans-serif;color:#fff> <img style="width: 8.5em;display: block;margin-left: auto;margin-right: auto;" src="/css/logo-poke.svg"> </a>
|
|
</div>
|
|
|
|
|
|
|
|
<div class=right>
|
|
<a href="?tab=search"><i class="fa-light fa-search"></i></a>
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
<div class="channel-page" style="background: #0f0f0f;">
|
|
|
|
|
|
|
|
<% } %>
|
|
|
|
|
|
<hr style="clear: both;display: block;border: none;border-bottom: 0.5px solid #2f2f2f;margin: 0 0;/*! width: 4.5em; */height: 0;">
|
|
|
|
<% if (!mobilesearch) { %>
|
|
|
|
<div class="video-grid">
|
|
|
|
|
|
<% if (!tab) { %>
|
|
|
|
<div class="tabs tabs-center" style="margin: 0px;">
|
|
|
|
<a href="?tab=popular" style="display:none" class="tab">Popular</a>
|
|
|
|
<a class="tab active">Trends</a>
|
|
|
|
|
|
</div>
|
|
<% } %>
|
|
<% if (tab === "popular") { %>
|
|
|
|
<div class="tabs tabs-center" style="margin: 0px;">
|
|
|
|
|
|
<a class="tab active">Popular</a>
|
|
|
|
<a href="/app" class="tab active">Trends</a>
|
|
</div>
|
|
<% } %>
|
|
<% if (!tab) { %>
|
|
|
|
<% inv.forEach(x => { %>
|
|
<a href="/watch?v=<%- x.videoId %>" class="video">
|
|
<div class="thumbnail" style="background-image: url('https://p.poketube.fun/https://i.ytimg.com/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw');border-radius: 16px;"><span class="video-length"><%- turntomins(x.lengthSeconds) %></span></div>
|
|
<div class="info">
|
|
<span class="title max-lines-2" title="<%- x.title %>" style="font-family:Inter,sans-serif;"><%- x.title %></span>
|
|
<span class="title max-lines-2" title="Video By <%- x.author %>" style="margin-top:1px">By <%- x.author %></span>
|
|
|
|
</div>
|
|
|
|
</a> <% }) %>
|
|
<% } %>
|
|
<% if (tab === "popular") { %>
|
|
|
|
<% p.forEach(x => { %>
|
|
<a href="/watch?v=<%- x.videoId %>" class="video">
|
|
<div class="thumbnail" style="background-image: url('https://p.poketube.fun/https://i.ytimg.com/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw');border-radius: 16px;"><span class="video-length"><%- turntomins(x.lengthSeconds) %></span></div>
|
|
<div class="info">
|
|
<span class="title max-lines-2" title="<%- x.title %>" style="font-family:Inter,sans-serif;"><%- x.title %></span>
|
|
<span class="title max-lines-2" title="Video By <%- x.author %>" style="margin-top:1px">By <%- x.author %></span>
|
|
|
|
</div>
|
|
|
|
</a> <% }) %>
|
|
<% } %>
|
|
|
|
|
|
<div id="more-button-container">
|
|
|
|
<div class="backtotop">
|
|
<hr class="no-display" />
|
|
<a href="#top"><b>▲</b></a>
|
|
</div>
|
|
<div id="more-button" class="rounded-corners">
|
|
<a href="#top">
|
|
<hr style="clear: both;display: block;border: none;border-bottom: 0.5px solid #2f2f2f;margin: 0 11em;/*! width: 4.5em; */height: 0;"><hr style="clear: both;display: block;border: none;border-bottom: 0.5px solid #2f2f2f;margin: 0 11em;/*! width: 4.5em; */height: 0;">
|
|
</a>
|
|
|
|
<div id="more-buttons" style="display: contents;">
|
|
|
|
<div style="padding: 1em;">
|
|
<span style="margin-left: 0em;font-weight: 1000;font-size: x-large;margin-top: 0em;font-family: "Poketube flex";font-stretch: ultra-expanded;">
|
|
More Options :3
|
|
</span>
|
|
|
|
|
|
<a href="/video/upload?from=" style="padding-bottom:10em"><i class="fa-light fa-video" style="font-size: xx-large;background: #333;padding: 10px;border-radius: 50%;"></i>
|
|
<span style="margin-left: 2.4em;font-weight: 500;font-size: x-large;margin-top: -2em;font-family: "Poketube flex";">
|
|
Upload
|
|
</span>
|
|
</a>
|
|
<br>
|
|
|
|
<a href="/privacy" style=""><i class="fa-light fa-shield" style="font-size: xx-large;background: #333;padding: 10px;border-radius: 50%;"></i>
|
|
<span style="margin-left: 2.4em;font-weight: 500;font-size: x-large;margin-top: -2em;font-family: "Poketube flex";">
|
|
Privacy
|
|
</span>
|
|
</a>
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="downnav">
|
|
<a href="#more-button-container">
|
|
|
|
|
|
<i style="font-size:xx-large;color:#fff;margin-top: 7px;margin-bottom: 7px;" class="fa-thin fa-circle-plus"></i>
|
|
</a>
|
|
</div>
|
|
|
|
<% } %>
|
|
</div>
|
|
|
|
|
|
|
|
<% if (tab == "search") { %>
|
|
<a href="/app"><-- go to home </a>
|
|
<span style="display:none">
|
|
Search videos on poke!!!
|
|
</span>
|
|
<div class=search>
|
|
|
|
<form action="/app">
|
|
|
|
|
|
<input class="search-bar" autocomplete="on" id="fname" name="mobilesearch" placeholder="Search! "style="background: linear-gradient(90deg, hsla(235, 21%, 21%, 1) 0%, hsla(194, 41%, 22%, 1) 50%, hsla(174, 48%, 20%, 1) 100%);color:#fff;font-family:Inter,sans-serif;border-radius: 9999px;">
|
|
|
|
|
|
<button class="btn btn-success" style="border-radius:1em;display:none;" type=submit>
|
|
<i class="fa-light fa-search" style="margin: auto;"></i></button></form>
|
|
|
|
</div>
|
|
</div>
|
|
<% } %>
|
|
|
|
<% if (mobilesearch ) { %>
|
|
|
|
<div class=search>
|
|
|
|
<form action="/app">
|
|
<input class="search-bar" autocomplete="on" id="fname" name="mobilesearch" value="<%=mobilesearch%>" placeholder="Search some videos lol "style="color:#fff;font-family:Inter,sans-serif;border-radius: 8px;">
|
|
|
|
|
|
<button class="btn btn-success" type=submit>
|
|
<i class="fa-light fa-search" style="margin: auto;"></i></button></form>
|
|
<img src="https://t.poketube.fun/t/rep.gif" style="border:0;width: 0;visibility: hidden;">
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div class="video-grid" style="background-color: var(--app-background);margin-top: -4em;">
|
|
<span style="margin-bottom: -8em;margin-top: 8px;">
|
|
</span>
|
|
<% (j && Array.isArray(j.results) ? j.results : []).forEach(x => { %>
|
|
<a href="/watch?v=<%- x.videoId %>" class="video">
|
|
<div class="thumbnail" style="background-image: url('https://p.poketube.fun/https://i.ytimg.com/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw');border-radius: 16px;"> </div>
|
|
<div class="info"><span class="title max-lines-2" title="<%- x.title %>" style="font-family:Inter,sans-serif;"><%- x.title %></span><span class="title max-lines-2" title="Video By <%- x.author %>" style="margin-top:1px">By <%- x.author %></span>
|
|
</div>
|
|
|
|
<% }) %>
|
|
|
|
|
|
<% if (continuation) { %>
|
|
|
|
<p style="text-align: left;margin-left: 16em;color: var(--text-secondary);text-decoration: none;">
|
|
<a href="/?mobilesearch=<%=mobilesearch%>">First Page</a>
|
|
</p>
|
|
<p style="text-align: left;;color: var(--text-secondary);text-decoration: none;">
|
|
<a href="/app?mobilesearch=<%=mobilesearch%>&continuation=<%- Number(continuation) + 1 %>">Next Page</a>
|
|
</p>
|
|
<% } %>
|
|
|
|
<% if (Number(continuation) <= "0" || !continuation) { %>
|
|
<p style="text-align: left;margin-left: 16em;;color: var(--text-secondary);text-decoration: none;">
|
|
<a href="/search?query=<%=q%>&continuation=2" %>
|
|
">Next Page</a>
|
|
|
|
<% } %>
|
|
|
|
</div>
|
|
|
|
|
|
<script>
|
|
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-3.0-or-later
|
|
|
|
// Get all anchor links on the page
|
|
const links = document.querySelectorAll('a');
|
|
// Add a click event listener to each link
|
|
links.forEach(link => {
|
|
link.addEventListener('click', e => {
|
|
e.preventDefault(); // Prevent the default link behavior
|
|
|
|
// Create a loading spinner element
|
|
const spinner = document.createElement('div');
|
|
spinner.classList.add('spinner');
|
|
|
|
// Create a loading overlay element
|
|
const loading = document.createElement('div');
|
|
loading.classList.add('loading');
|
|
loading.appendChild(spinner);
|
|
|
|
// Add the loading overlay to the body
|
|
document.body.appendChild(loading);
|
|
|
|
// Redirect to the link after a short delay to show the loading overlay
|
|
setTimeout(() => {
|
|
window.location.href = link.href;
|
|
}, 100);
|
|
});
|
|
});</script><style> .loading {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background-color: rgba(0, 0, 0, 0.7);
|
|
z-index: 9999;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
.loading .spinner {
|
|
display: inline-block;
|
|
border: 5px solid rgba(255, 255, 255, 0.2);
|
|
border-top-color: #fff;
|
|
border-radius: 50%;
|
|
animation: spin 1s ease-in-out infinite;
|
|
width: 50px;
|
|
height: 50px;
|
|
}
|
|
@keyframes spin {
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}</style>
|
|
<% } %>
|
|
|
|
<script> // @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-3.0-or-later
|
|
|
|
if ('serviceWorker' in navigator) {
|
|
navigator.serviceWorker.getRegistrations().then(function(registrations) {
|
|
for (let registration of registrations) {
|
|
registration.unregister();
|
|
}
|
|
});
|
|
if ('caches' in window) {
|
|
caches.keys().then(function(cacheNames) {
|
|
cacheNames.forEach(function(cacheName) {
|
|
caches.delete(cacheName);
|
|
});
|
|
});
|
|
}
|
|
|
|
}
|
|
</script>
|
|
</body >
|
|
|
|
</html> <% } %>
|
|
|
|
|
|
|
|
|