Compare commits

...
6 Commits
4 changed files with 807 additions and 146 deletions
+656 -130
View File
File diff suppressed because it is too large Load Diff
+2 -8
View File
@@ -27,13 +27,7 @@ function resolveYtDlpPath(logger) {
path.join(process.cwd(), 'bin', 'yt-dlp.exe'),
'yt-dlp.exe'
]
: [
'/usr/local/bin/yt-dlp',
'/usr/bin/yt-dlp',
'/bin/yt-dlp',
path.join(process.cwd(), 'bin', 'yt-dlp'),
'yt-dlp'
];
: ['/usr/local/bin/yt-dlp', '/usr/bin/yt-dlp', '/bin/yt-dlp', path.join(process.cwd(), 'bin', 'yt-dlp'), 'yt-dlp'];
for (const candidate of candidates) {
try {
@@ -64,7 +58,7 @@ async function getDefaultChannelId(category) {
return cachedChannels.defaultId || '1146';
}
return new Promise((resolve) => {
return new Promise(resolve => {
const req = http.request(
{
hostname: '127.0.0.1',
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "peertube-plugin-yaktube-ondemand",
"version": "1.5.0",
"version": "1.5.4",
"description": "Accessible On-Demand YouTube Import, Live Streams, Smart Recommendations, Sleep Timer, Touch Gestures, Voice Assistant & A11y Engine for PeerTube",
"main": "main.js",
"library": "./main.js",
@@ -43,7 +43,7 @@
"author": "Enes Yakıştır <[email protected]>",
"repository": {
"type": "git",
"url": "https://github.com/yakistir98/peertube-plugin-yaktube-ondemand.git"
"url": "git+https://github.com/yakistir98/peertube-plugin-yaktube-ondemand.git"
},
"homepage": "https://yaktube.yakhub.com.tr",
"bugs": "https://github.com/yakistir98/peertube-plugin-yaktube-ondemand/issues",
+147 -6
View File
@@ -1151,9 +1151,18 @@ body:has(#yaktube-ondemand-container) my-error-page {
}
@keyframes yaktube-ripple-bounce {
0% { transform: scale(0.7); opacity: 0.5; }
50% { transform: scale(1.1); opacity: 1; }
100% { transform: scale(1); opacity: 1; }
0% {
transform: scale(0.7);
opacity: 0.5;
}
50% {
transform: scale(1.1);
opacity: 1;
}
100% {
transform: scale(1);
opacity: 1;
}
}
/* -------------------------------------------------------------------------- */
@@ -1285,9 +1294,15 @@ body:has(#yaktube-ondemand-container) my-error-page {
}
@keyframes yaktube-pulse {
0% { transform: scale(1); }
50% { transform: scale(1.04); }
100% { transform: scale(1); }
0% {
transform: scale(1);
}
50% {
transform: scale(1.04);
}
100% {
transform: scale(1);
}
}
.yaktube-qr-wrapper {
@@ -1340,3 +1355,129 @@ body:has(#yaktube-ondemand-container) my-error-page {
outline: none !important;
}
/* ==========================================================================
YAKTUBE ACCESSIBLE PLAYER & WATCH PAGE STYLES (W3C WAI-ARIA)
========================================================================== */
/* 1. Accessible Skip Link (Top of Page) */
.yaktube-skip-link {
position: fixed !important;
top: -120px !important;
left: 16px !important;
background: linear-gradient(135deg, #ff8f37 0%, #ff5e3a 100%) !important;
color: #ffffff !important;
padding: 12px 22px !important;
border-radius: 12px !important;
font-weight: 800 !important;
font-size: 14px !important;
text-decoration: none !important;
box-shadow: 0 8px 30px rgba(255, 143, 55, 0.5) !important;
z-index: 999999 !important;
transition: top 0.2s cubic-bezier(0.16, 1, 0.3, 1) !important;
display: inline-flex !important;
align-items: center !important;
gap: 8px !important;
}
.yaktube-skip-link:focus,
.yaktube-skip-link:focus-visible {
top: 16px !important;
outline: 3px solid #ffffff !important;
outline-offset: 3px !important;
}
/* 2. Accessible Video Player Container Focus States */
#videojs-wrapper:focus,
#videojs-wrapper:focus-visible,
.video-js:focus-visible {
outline: 3px solid #ff8f37 !important;
outline-offset: 4px !important;
box-shadow: 0 0 25px rgba(255, 143, 55, 0.65) !important;
border-radius: 8px !important;
}
/* 3. Accessible Player Action Toolbar */
.yaktube-player-action-bar {
display: flex !important;
align-items: center !important;
flex-wrap: wrap !important;
gap: 8px !important;
margin: 12px 0 18px 0 !important;
padding: 10px 16px !important;
background: rgba(24, 24, 32, 0.95) !important;
border: 1px solid rgba(255, 143, 55, 0.3) !important;
border-radius: 12px !important;
backdrop-filter: blur(10px) !important;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4) !important;
width: 100% !important;
box-sizing: border-box !important;
}
.yaktube-player-bar-label {
font-size: 13px !important;
font-weight: 700 !important;
color: #ff8f37 !important;
margin-right: 6px !important;
user-select: none !important;
}
.yaktube-player-action-btn {
background: rgba(255, 255, 255, 0.08) !important;
color: #eeeeee !important;
border: 1px solid rgba(255, 255, 255, 0.15) !important;
padding: 7px 14px !important;
border-radius: 8px !important;
font-size: 12.5px !important;
font-weight: 600 !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
display: inline-flex !important;
align-items: center !important;
gap: 5px !important;
}
.yaktube-player-action-btn:hover,
.yaktube-player-action-btn:focus-visible {
background: rgba(255, 143, 55, 0.25) !important;
border-color: #ff8f37 !important;
color: #ffffff !important;
transform: translateY(-1px) !important;
outline: 2px solid #ff8f37 !important;
outline-offset: 2px !important;
}
/* 4. Rate Buttons Distinct Separation (Like & Dislike) */
my-video-rate .video-actions,
my-video-rate .video-actions-rates,
my-video-rate {
display: inline-flex !important;
align-items: center !important;
gap: 8px !important;
}
my-video-rate button.action-button {
margin-right: 6px !important;
border-radius: 8px !important;
transition: all 0.2s ease !important;
}
my-video-rate button.action-button:focus-visible {
outline: 2px solid #ff8f37 !important;
outline-offset: 2px !important;
}
/* 5. Date Toggle Button Clarity */
my-date-toggle .date-toggle {
cursor: pointer !important;
border-radius: 6px !important;
padding: 2px 6px !important;
transition: background 0.2s ease !important;
}
my-date-toggle .date-toggle:hover,
my-date-toggle .date-toggle:focus-visible {
background: rgba(255, 143, 55, 0.15) !important;
color: #ff8f37 !important;
outline: 2px solid #ff8f37 !important;
outline-offset: 1px !important;
}