fix(auth): preserve incompatible-browser DOM element for Angular loadUser and restore native auth links (v1.4.25)

This commit is contained in:
Enes Yakıştır
2026-09-04 07:07:34 +03:00
parent f73a1171c4
commit f1720448c7
3 changed files with 22 additions and 49 deletions
+21 -27
View File
@@ -1,26 +1,37 @@
// 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) {
el.classList.add('browser-ok');
if (!el.classList.contains('browser-ok')) {
el.classList.add('browser-ok');
}
el.style.setProperty('display', 'none', 'important');
if (el.parentNode) el.parentNode.removeChild(el);
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) {}
}
};
neuterIncompatible();
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', neuterIncompatible);
}
try {
var incompObserver = new MutationObserver(function () {
neuterIncompatible();
});
incompObserver.observe(document.documentElement || document.body, { childList: true, subtree: true });
} catch (e) {}
setInterval(neuterIncompatible, 1000);
} catch (e) {}
}
@@ -365,10 +376,7 @@ try {
var uEmail = localStorage.getItem('email');
var displayName = localStorage.getItem('displayName') || uName || '';
var emailStr = uEmail || '';
var isAuth =
(!!token && !!uName) ||
(liveWidget && liveWidget.querySelector('yaknet-account[authenticated="true"]')) ||
!!document.querySelector('yaknet-account[authenticated="true"]');
var isAuth = !!token && !!uName;
if (headerRight) {
var liveWidget = headerRight.querySelector('#yaknet-header-account-widget');
@@ -581,10 +589,7 @@ try {
// Check auth status for login button rendering
var tokenVal = localStorage.getItem('access_token');
var userVal = localStorage.getItem('username');
var isAlreadyAuth =
(!!tokenVal && !!userVal) ||
document.body.classList.contains('yaktube-user-logged-in') ||
!!document.querySelector('yaknet-account[authenticated="true"]');
var isAlreadyAuth = !!tokenVal && !!userVal;
if (!isAlreadyAuth) {
// Replace all login buttons labels and titles ONLY for guests
@@ -615,17 +620,6 @@ try {
});
}
});
} else {
// Guarantee all login links are hidden when user is logged in
document
.querySelectorAll(
'my-login-link, a[href*="/login"], .login-button, [class*="login-link"]'
)
.forEach(function (el) {
el.style.setProperty('display', 'none', 'important');
el.setAttribute('aria-hidden', 'true');
el.setAttribute('tabindex', '-1');
});
}
// Aggressively remove generic Framasoft Open-in-App / Play Store banners
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "peertube-plugin-yaktube-ondemand",
"version": "1.4.24",
"version": "1.4.25",
"description": "Accessible On-Demand YouTube Import, Live Streams, Smart Recommendations and A11y Engine for PeerTube",
"main": "main.js",
"library": "./main.js",
-21
View File
@@ -24,27 +24,6 @@ button[title*='Dismiss'],
clip: rect(0, 0, 0, 0) !important;
}
/* Permanent suppression of native login links when user is authenticated */
body.yaktube-user-logged-in my-login-link,
body.yaktube-user-logged-in a[href*="/login"],
body.yaktube-user-logged-in .login-button,
body.yaktube-user-logged-in [class*="login-link"],
body.yaktube-user-logged-in .peertube-button-link[href*="/login"],
body.yaktube-user-logged-in a[title*="Giriş"],
body.yaktube-user-logged-in a[aria-label*="Giriş"] {
display: none !important;
visibility: hidden !important;
height: 0 !important;
width: 0 !important;
margin: 0 !important;
padding: 0 !important;
pointer-events: none !important;
opacity: 0 !important;
position: absolute !important;
z-index: -99999 !important;
clip: rect(0, 0, 0, 0) !important;
}
/* Permanent Aggressive Suppression of Generic JoinPeerTube / Framasoft Open-in-App Banners */
my-open-app,
my-open-in-app,