Compare commits

..
3 Commits
5 changed files with 84 additions and 61 deletions
+4
View File
@@ -0,0 +1,4 @@
node_modules/
dist/
package-lock.json
pnpm-lock.yaml
+9
View File
@@ -0,0 +1,9 @@
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "none",
"printWidth": 120,
"arrowParens": "avoid",
"endOfLine": "auto"
}
+68 -57
View File
@@ -1,48 +1,47 @@
// 100% Incompatible Browser Suppression & Error Guardian
// CRITICAL: PeerTube's Angular app (my-app ngOnInit) relies on document.getElementById('incompatible-browser')
// to exist so it can do .className += " browser-ok" before calling this.loadUser()!
// Removing it from DOM causes a null pointer crash that breaks user session initialization!
if (typeof window !== 'undefined') {
try {
window.displayIncompatibleBrowser = function () {};
var neuterIncompatible = function () {
var el = document.getElementById('incompatible-browser');
if (el) {
if (!el.classList.contains('browser-ok')) {
el.classList.add('browser-ok');
}
el.style.setProperty('display', 'none', 'important');
el.style.setProperty('visibility', 'hidden', 'important');
el.style.setProperty('height', '0px', 'important');
el.style.setProperty('width', '0px', 'important');
el.style.setProperty('opacity', '0', 'important');
el.style.setProperty('pointer-events', 'none', 'important');
} else {
try {
var dummy = document.createElement('div');
dummy.id = 'incompatible-browser';
dummy.className = 'browser-ok';
dummy.style.display = 'none';
(document.body || document.documentElement).appendChild(dummy);
} catch (e) {}
// 100% Incompatible Browser Suppression & Error Guardian
// CRITICAL: PeerTube's Angular app (my-app ngOnInit) relies on document.getElementById('incompatible-browser')
// to exist so it can do .className += " browser-ok" before calling this.loadUser()!
// Removing it from DOM causes a null pointer crash that breaks user session initialization!
if (typeof window !== 'undefined') {
try {
window.displayIncompatibleBrowser = function () {};
var neuterIncompatible = function () {
var el = document.getElementById('incompatible-browser');
if (el) {
if (!el.classList.contains('browser-ok')) {
el.classList.add('browser-ok');
}
};
neuterIncompatible();
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', neuterIncompatible);
el.style.setProperty('display', 'none', 'important');
el.style.setProperty('visibility', 'hidden', 'important');
el.style.setProperty('height', '0px', 'important');
el.style.setProperty('width', '0px', 'important');
el.style.setProperty('opacity', '0', 'important');
el.style.setProperty('pointer-events', 'none', 'important');
} else {
try {
var dummy = document.createElement('div');
dummy.id = 'incompatible-browser';
dummy.className = 'browser-ok';
dummy.style.display = 'none';
(document.body || document.documentElement).appendChild(dummy);
} catch (e) {}
}
setInterval(neuterIncompatible, 1000);
} catch (e) {}
}
// Immediate URL rewrite: redirect legacy /search/videos to /search
if (typeof window !== 'undefined' && window.location) {
if (window.location.pathname === '/search/videos' || window.location.pathname.startsWith('/search/videos/')) {
var targetSearch = window.location.search || '';
window.location.replace('/search' + targetSearch);
};
neuterIncompatible();
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', neuterIncompatible);
}
setInterval(neuterIncompatible, 1000);
} catch (e) {}
}
// Immediate URL rewrite: redirect legacy /search/videos to /search
if (typeof window !== 'undefined' && window.location) {
if (window.location.pathname === '/search/videos' || window.location.pathname.startsWith('/search/videos/')) {
var targetSearch = window.location.search || '';
window.location.replace('/search' + targetSearch);
}
}
try {
(function () {
if (window.__YAKTUBE_ENGINE_LOADED__) return;
@@ -1694,14 +1693,16 @@ try {
// Clean up stray 404 error mascot pages if on search
try {
var errPages = document.querySelectorAll('my-error-page');
errPages.forEach(function(ep) { ep.remove(); });
errPages.forEach(function (ep) {
ep.remove();
});
} catch (e) {}
// Instant URL fixer: redirect legacy /search/videos to native /search
if (window.location.pathname === '/search/videos' || window.location.pathname.startsWith('/search/videos/')) {
window.location.replace('/search' + window.location.search);
return;
}
// Instant URL fixer: redirect legacy /search/videos to native /search
if (window.location.pathname === '/search/videos' || window.location.pathname.startsWith('/search/videos/')) {
window.location.replace('/search' + window.location.search);
return;
}
var url = new URL(window.location.href);
var searchParam = url.searchParams.get('search');
@@ -2025,10 +2026,12 @@ try {
function callCloudSearchHistory(method, queryParams, body, onSuccess, onError) {
var token = localStorage.getItem('access_token');
var email = localStorage.getItem('email');
var username = localStorage.getItem('username');
var headers = {};
if (body) headers['Content-Type'] = 'application/json';
if (token) headers['Authorization'] = 'Bearer ' + token;
if (email) headers['X-User-Email'] = email;
if (username) headers['X-User-Username'] = username;
var authUrl = 'https://auth.yakhub.com.tr/api/yaktube/search-history' + (queryParams || '');
var bridgeUrl = '/api-custom/search-history' + (queryParams || '');
@@ -2051,7 +2054,9 @@ try {
.catch(function () {
// Fallback to local PeerTube bridge proxy
fetch(bridgeUrl, options)
.then(function (res) { return res.json(); })
.then(function (res) {
return res.json();
})
.then(function (data) {
if (typeof onSuccess === 'function') onSuccess(data);
})
@@ -2066,17 +2071,23 @@ try {
if (!isAccountSyncEnabled() || isSyncingHistory) return;
isSyncingHistory = true;
callCloudSearchHistory('GET', '', null, function (data) {
isSyncingHistory = false;
if (data && data.status === 'success' && Array.isArray(data.history)) {
if (data.history.length > 0) {
localStorage.setItem('yaktube_recent_searches', JSON.stringify(data.history));
callCloudSearchHistory(
'GET',
'',
null,
function (data) {
isSyncingHistory = false;
if (data && data.status === 'success' && Array.isArray(data.history)) {
if (data.history.length > 0) {
localStorage.setItem('yaktube_recent_searches', JSON.stringify(data.history));
}
if (typeof callback === 'function') callback();
}
if (typeof callback === 'function') callback();
},
function () {
isSyncingHistory = false;
}
}, function () {
isSyncingHistory = false;
});
);
}
function saveRecentSearch(query) {
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "peertube-plugin-yaktube-ondemand",
"version": "1.4.26",
"version": "1.4.28",
"description": "Accessible On-Demand YouTube Import, Live Streams, Smart Recommendations and A11y Engine for PeerTube",
"main": "main.js",
"library": "./main.js",
@@ -44,4 +44,4 @@
"homepage": "https://yaktube.yakhub.com.tr",
"bugs": "https://github.com/yakistir98/peertube-plugin-yaktube-ondemand/issues",
"license": "AGPL-3.0-or-later"
}
}
+1 -2
View File
@@ -1,7 +1,7 @@
/* 100% Elimination of PeerTube Mobile Open-in-App & Incompatible Browser Banners */
#incompatible-browser,
.alert-light#incompatible-browser,
div[id="incompatible-browser"],
div[id='incompatible-browser'],
.incompatible-browser,
.mobile-msg,
my-header .mobile-msg,
@@ -947,7 +947,6 @@ body.yaktube-theater-mode .video-js {
outline: none !important;
}
/* Suppress 404 Mascot and Error Page on Search results */
body:has(#yaktube-ondemand-container) my-error-page,
#yaktube-ondemand-container ~ my-error-page,