') + ')', 'gi');
if (regex.test(text)) {
found = true;
var frag = document.createDocumentFragment();
var parts = text.split(regex);
parts.forEach(function(part, i) {
if (i % 2 === 0) {
frag.appendChild(document.createTextNode(part));
} else {
var span = document.createElement('span');
span.className = 'userscript-highlight';
span.textContent = part;
frag.appendChild(span);
}
});
node.parentNode.replaceChild(frag, node);
}
});
} else if (node.nodeType === 1 && node.childNodes) { // element
var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];
if (!skipTags.includes(node.tagName)) {
Array.from(node.childNodes).forEach(highlight);
}
}
}
highlight(document.body);
// Re-highlight on dynamic content
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1 || node.nodeType === 3) highlight(node);
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); }
})();
(function(){
try {
var __m = "*";
var __re = new RegExp('^' + ".*" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Strip utm_, fbclid, gclid, etc. from all links on page
(function() {
var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',
'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',
'ref', 'ref_src', 'source', 'medium', 'campaign'];
function cleanUrl(url) {
try {
var u = new URL(url, window.location.origin);
var changed = false;
trackingParams.forEach(function(p) {
if (u.searchParams.has(p)) {
u.searchParams.delete(p);
changed = true;
}
});
return changed ? u.toString() : url;
} catch (e) {
return url;
}
}
function cleanLinks() {
document.querySelectorAll('a[href]').forEach(function(a) {
var clean = cleanUrl(a.href);
if (clean !== a.href) a.href = clean;
});
}
cleanLinks();
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1) {
if (node.tagName === 'A') cleanLinks();
node.querySelectorAll('a[href]').forEach(function(a) {
var clean = cleanUrl(a.href);
if (clean !== a.href) a.href = clean;
});
}
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); }
})();
(function(){
try {
var __m = "youtube.com";
var __re = new RegExp('^' + "youtube\\.com" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Auto-enable theater mode on YouTube
(function() {
function tryTheater() {
var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]');
if (btn && !btn.classList.contains('activated')) {
btn.click();
}
}
// Try immediately
tryTheater();
// Try after navigation (SPA)
var lastUrl = location.href;
setInterval(function() {
if (location.href !== lastUrl) {
lastUrl = location.href;
setTimeout(tryTheater, 500);
}
}, 1000);
// Also try on player load
var observer = new MutationObserver(tryTheater);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); }
})();
(function(){
try {
var __m = "*";
var __re = new RegExp('^' + ".*" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Remove or un-stick sticky/fixed headers that block content
(function() {
function unstick() {
document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) {
if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {
el.style.position = 'static';
el.style.top = 'auto';
el.style.zIndex = 'auto';
}
});
}
unstick();
var observer = new MutationObserver(unstick);
observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });
})();
}
} catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); }
})();
})();
GitHub - AideLua/AndroLuaX: 适配了AndroidX的AndroLua+ · GitHub
Repository files navigation
AndroLuaX 是一款反编译 AndroLua+,为 AndroLua+ 添加 AndroidX 的 AndroLua+ 衍生产品
AndroLuaX 还添加了 AndroidFastScroll
与 FullDraggableDrawer
克隆本项目到本地:git clone https://gitlab.com/Jesse205/androluax.git 。 使用 Gradle 构建:gradle build 。 复制到 Android 设备的 内部存储/AppProjects/<你的项目> 。 下载 Aide Lua 的发行版 ,进入 Aide Lua 后选择刚才复制的工程,然后依次点击 菜单-项目...-二次打包并安装 。 因 AndroLua+ 本身的设计问题,不建议 将 targetSdk 提升到 29 以上,否则存储权限没有被自动授予,造成用户体验不佳 已去除 welcome.png 启动图 ,因为有更好的图标居中方案替代AndroidX 尽可能添加所有 AndroidX 依赖,但会排除一些无用的依赖和与 Kotlin 与 RxJava 有关的所有依赖。 部分依赖无法在较低版本的 Android 上使用 依赖兼容性表格:
依赖 最低 SDK androidx.car.app.automotive 29 androidx.core.uwb 31 androidx.draganddrop 24 androidx.glance.wear.tiles 26 androidx.health.connect.client 26 androidx.health.services.client 30 androidx.heifwriter 28 androidx.javascriptengine 26 androidx.security.identity.credential 24 androidx.wear.input.testing 25 androidx.wear.ongoing 25 androidx.wear.protolayout.expression 26 androidx.wear.phone.interactions 25 androidx.wear.remote.interactions 23 androidx.wear.tiles 25 androidx.wear.watchface.complications.datasource.ktx 26 androidx.wear.watchface.complications.rendering 26 androidx.wear.watchface.editor 26 androidx.wear.watchface.client 26 androidx.wear.watchface.style 26 androidx.wear.watchface.data 26
没有他们,就没有 AndroLuaX
Aide Lua : 依赖 Aide ,使用 Lua 快速、高效开发的工。
AndroLuaX 使用了此项目的模板。Material Files : 一个开源的 Material Design 文件管理器。
AndroLuaX 参考了此项目的代码风格、命名习惯以及实现方式。AnimeonGo : Open Source Aplikasi web scraper Anime Ongoing.
AndroLuaX 参考了此项目的代码。Chromium : Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.
AndroLuaX 使用了此项目的配色。AndroidFastScroll : Fast scroll for Android RecyclerView and more.
AndroLuaX 使用了此项目并参考了此项目的代码风格、命名习惯以及实现方式。FullDraggableDrawer : Make the DrawerLayout can be dragged/pulled out in real-time within the range of fullscreen, like Pure Writer.
AndroLuaX 使用了此项目。Material Components for Android : Modular and customizable Material Design UI components for Android.
AndroLuaX 使用了此项目和此项目的部分代码。
You can’t perform that action at this time.