You've already forked Tricky-Addon-Update-Target-List
mirror of
https://github.com/KOWX712/Tricky-Addon-Update-Target-List.git
synced 2025-09-06 06:37:09 +00:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
533bdf8fa5 | ||
|
|
a9eab165a0 | ||
|
|
5bbbe4bc08 | ||
|
|
df255096c8 | ||
|
|
b1a52ee173 | ||
|
|
3b355ac5ff |
@@ -8,6 +8,9 @@ GitHub release: [Tricky Addon: Update Target List](https://github.com/KOWX712/Tr
|
||||
Telegram channel: [KOW's Little World](https://t.me/kowchannel)
|
||||
|
||||
## Changelog
|
||||
### v3.8.1
|
||||
- **WebUI:** Fixed missing aosp key fallback when no valid key is available.
|
||||
|
||||
### v3.8
|
||||
- **WebUI:** Optimized UI.
|
||||
- **WebUI:** Added mirror link fallback to fetch content from raw.githubusercontent.com
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
id=TA_utl
|
||||
name=Tricky Addon - Update Target List
|
||||
version=v3.8
|
||||
versionCode=380
|
||||
version=v3.8.1
|
||||
versionCode=381
|
||||
author=KOWX712
|
||||
description=A WebUI to conifgure tricky store target.txt
|
||||
updateJson=https://raw.githubusercontent.com/KOWX712/Tricky-Addon-Update-Target-List/main/update.json
|
||||
|
||||
@@ -7,12 +7,14 @@ document.getElementById("about").addEventListener("click", () => {
|
||||
const closeAbout = document.getElementById('close-about');
|
||||
|
||||
// Show about menu
|
||||
document.body.classList.add("no-scroll");
|
||||
aboutOverlay.style.display = 'flex';
|
||||
setTimeout(() => {
|
||||
aboutOverlay.style.opacity = '1';
|
||||
aboutContent.classList.add('open');
|
||||
}, 10);
|
||||
document.body.classList.add("no-scroll");
|
||||
aboutOverlay.style.display = 'flex';
|
||||
setTimeout(() => {
|
||||
aboutOverlay.style.opacity = '1';
|
||||
aboutContent.classList.add('open');
|
||||
}, 10);
|
||||
}, 80);
|
||||
|
||||
const hideMenu = () => {
|
||||
document.body.classList.remove("no-scroll");
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { applyRippleEffect } from './main.js';
|
||||
|
||||
const languageButton = document.querySelector('.language-button');
|
||||
const languageMenu = document.querySelector('.language-menu');
|
||||
const languageOptions = document.querySelectorAll('.language-option');
|
||||
@@ -49,6 +51,7 @@ export async function loadTranslations() {
|
||||
const response = await fetch(`locales/${lang}.json`);
|
||||
translations = await response.json();
|
||||
applyTranslations();
|
||||
applyRippleEffect();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -80,7 +83,8 @@ export function setupLanguageMenu() {
|
||||
if (isVisible) {
|
||||
closeLanguageMenu();
|
||||
} else {
|
||||
openLanguageMenu();
|
||||
languageOverlay.style.display = 'flex';
|
||||
setTimeout(() => languageMenu.classList.add("show"), 10);
|
||||
}
|
||||
});
|
||||
document.addEventListener("click", (event) => {
|
||||
@@ -98,24 +102,21 @@ export function setupLanguageMenu() {
|
||||
closeLanguageMenu();
|
||||
}
|
||||
});
|
||||
function openLanguageMenu() {
|
||||
languageOverlay.style.display = 'flex';
|
||||
const closeLanguageMenu = () => {
|
||||
setTimeout(() => {
|
||||
languageMenu.classList.add("show");
|
||||
}, 10);
|
||||
languageMenu.classList.remove("show");
|
||||
languageOverlay.style.display = 'none';
|
||||
}, 80)
|
||||
}
|
||||
function closeLanguageMenu() {
|
||||
languageMenu.classList.remove("show");
|
||||
languageOverlay.style.display = 'none';
|
||||
}
|
||||
languageMenu.addEventListener("click", (e) => {
|
||||
if (e.target.classList.contains("language-option")) {
|
||||
const lang = e.target.getAttribute("data-lang");
|
||||
localStorage.setItem('trickyAddonLanguage', lang);
|
||||
loadTranslations(lang);
|
||||
closeLanguageMenu();
|
||||
}
|
||||
});
|
||||
languageMenu.addEventListener("click", async (e) => {
|
||||
if (e.target.classList.contains("language-option")) {
|
||||
const lang = e.target.getAttribute("data-lang");
|
||||
localStorage.setItem('trickyAddonLanguage', lang);
|
||||
closeLanguageMenu();
|
||||
await new Promise(resolve => setTimeout(resolve, 200));
|
||||
loadTranslations(lang);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -243,7 +243,20 @@ export function hideFloatingBtn(hide = true) {
|
||||
export function applyRippleEffect() {
|
||||
document.querySelectorAll('.ripple-element').forEach(element => {
|
||||
if (element.dataset.rippleListener !== "true") {
|
||||
element.addEventListener("pointerdown", function (event) {
|
||||
element.addEventListener("pointerdown", async (event) => {
|
||||
const handlePointerUp = () => {
|
||||
ripple.classList.add("end");
|
||||
setTimeout(() => {
|
||||
ripple.classList.remove("end");
|
||||
ripple.remove();
|
||||
}, duration * 1000);
|
||||
element.removeEventListener("pointerup", handlePointerUp);
|
||||
element.removeEventListener("pointercancel", handlePointerUp);
|
||||
};
|
||||
element.addEventListener("pointerup", () => setTimeout(handlePointerUp, 80));
|
||||
element.addEventListener("pointercancel", () => setTimeout(handlePointerUp, 80));
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 80));
|
||||
if (isScrolling) return;
|
||||
const ripple = document.createElement("span");
|
||||
ripple.classList.add("ripple");
|
||||
@@ -280,17 +293,6 @@ export function applyRippleEffect() {
|
||||
|
||||
// Append ripple and handle cleanup
|
||||
element.appendChild(ripple);
|
||||
const handlePointerUp = () => {
|
||||
ripple.classList.add("end");
|
||||
setTimeout(() => {
|
||||
ripple.classList.remove("end");
|
||||
ripple.remove();
|
||||
}, duration * 1000);
|
||||
element.removeEventListener("pointerup", handlePointerUp);
|
||||
element.removeEventListener("pointercancel", handlePointerUp);
|
||||
};
|
||||
element.addEventListener("pointerup", handlePointerUp);
|
||||
element.addEventListener("pointercancel", handlePointerUp);
|
||||
});
|
||||
element.dataset.rippleListener = "true";
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ document.getElementById("deselect-unnecessary").addEventListener("click", async
|
||||
|
||||
// Function to add system app
|
||||
export async function setupSystemAppMenu() {
|
||||
document.getElementById("add-system-app").addEventListener("click", () => openSystemAppOverlay());
|
||||
document.getElementById("add-system-app").addEventListener("click", () => setTimeout(() => openSystemAppOverlay(), 80));
|
||||
document.getElementById("add-system-app-overlay").addEventListener("click", (event) => {
|
||||
if (event.target === event.currentTarget) closeSystemAppOverlay();
|
||||
});
|
||||
@@ -195,8 +195,11 @@ async function setKeybox(content) {
|
||||
}
|
||||
}
|
||||
|
||||
// Function to replace aosp kb
|
||||
document.getElementById("aospkb").addEventListener("click", async () => {
|
||||
/**
|
||||
* Set aosp key
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function aospkb() {
|
||||
const source = await execCommand(`xxd -r -p ${basePath}/common/.default | base64 -d`);
|
||||
const result = await setKeybox(source);
|
||||
if (result) {
|
||||
@@ -205,9 +208,12 @@ document.getElementById("aospkb").addEventListener("click", async () => {
|
||||
} else {
|
||||
showPrompt("prompt.key_set_error", false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Function to replace valid kb
|
||||
// aosp kb eventlistener
|
||||
document.getElementById("aospkb").addEventListener("click", async () => aospkb());
|
||||
|
||||
// valid kb eventlistener
|
||||
document.getElementById("validkb").addEventListener("click", async () => {
|
||||
fetch("https://raw.githubusercontent.com/KOWX712/Tricky-Addon-Update-Target-List/main/.extra")
|
||||
.then(response => {
|
||||
@@ -389,17 +395,13 @@ document.querySelector('.back-button').addEventListener('click', async () => {
|
||||
});
|
||||
|
||||
// Close custom keybox selector
|
||||
document.querySelector('.close-selector').addEventListener('click', () => {
|
||||
closeCustomKeyboxSelector();
|
||||
});
|
||||
document.querySelector('.close-selector').addEventListener('click', () => closeCustomKeyboxSelector());
|
||||
fileSelector.addEventListener('click', (event) => {
|
||||
if (event.target === fileSelector) {
|
||||
closeCustomKeyboxSelector();
|
||||
}
|
||||
if (event.target === fileSelector) closeCustomKeyboxSelector();
|
||||
});
|
||||
|
||||
// Function to close custom keybox selector
|
||||
function closeCustomKeyboxSelector() {
|
||||
// close custom keybox selector
|
||||
const closeCustomKeyboxSelector = () => {
|
||||
fileSelector.style.opacity = '0';
|
||||
fileSelectorContent.classList.remove('open');
|
||||
document.body.classList.remove("no-scroll");
|
||||
@@ -410,6 +412,7 @@ function closeCustomKeyboxSelector() {
|
||||
|
||||
// Open custom keybox selector
|
||||
document.getElementById('customkb').addEventListener('click', async () => {
|
||||
await new Promise(resolve => setTimeout(resolve, 80));
|
||||
fileSelector.style.display = 'flex';
|
||||
document.body.classList.add("no-scroll");
|
||||
setTimeout(() => {
|
||||
|
||||
@@ -4,16 +4,13 @@ const searchCard = document.querySelector('.search-card');
|
||||
export const searchInput = document.getElementById('search');
|
||||
export const clearBtn = document.getElementById('clear-btn');
|
||||
export const searchMenuContainer = document.querySelector('.search-menu-container');
|
||||
const menu = document.querySelector('.menu');
|
||||
const menuButton = document.getElementById('menu-button');
|
||||
const menuOptions = document.getElementById('menu-options');
|
||||
const menuOverlay = document.getElementById('menu-overlay');
|
||||
const menuIcon = menuButton.querySelector('.menu-icon');
|
||||
|
||||
// Focus on search input when search card is clicked
|
||||
searchCard.addEventListener("click", () => {
|
||||
searchInput.focus();
|
||||
});
|
||||
searchCard.addEventListener("click", () => searchInput.focus());
|
||||
|
||||
// Search functionality
|
||||
searchInput.addEventListener("input", (e) => {
|
||||
@@ -24,11 +21,8 @@ searchInput.addEventListener("input", (e) => {
|
||||
app.style.display = name.includes(searchQuery) ? "block" : "none";
|
||||
window.scrollTo(0, 0);
|
||||
});
|
||||
if (searchQuery !== "") {
|
||||
clearBtn.style.display = "block";
|
||||
} else {
|
||||
clearBtn.style.display = "none";
|
||||
}
|
||||
if (searchQuery !== "") clearBtn.style.display = "block";
|
||||
else clearBtn.style.display = "none";
|
||||
});
|
||||
|
||||
// Clear search input
|
||||
@@ -37,48 +31,38 @@ clearBtn.addEventListener("click", () => {
|
||||
clearBtn.style.display = "none";
|
||||
window.scrollTo(0, 0);
|
||||
const apps = appListContainer.querySelectorAll(".card");
|
||||
apps.forEach(app => {
|
||||
app.style.display = "block";
|
||||
});
|
||||
apps.forEach(app => app.style.display = "block");
|
||||
});
|
||||
|
||||
// Function to toggle menu option
|
||||
export function setupMenuToggle() {
|
||||
menuButton.addEventListener('click', (event) => {
|
||||
event.stopPropagation();
|
||||
if (menuOptions.classList.contains('visible')) {
|
||||
closeMenu();
|
||||
} else {
|
||||
openMenu();
|
||||
}
|
||||
});
|
||||
document.addEventListener('click', (event) => {
|
||||
if (!menuOptions.contains(event.target) && event.target !== menuButton) {
|
||||
closeMenu();
|
||||
}
|
||||
});
|
||||
window.addEventListener('scroll', () => {
|
||||
if (menuOptions.classList.contains('visible')) {
|
||||
closeMenu();
|
||||
}
|
||||
});
|
||||
const menuOptionsList = document.querySelectorAll('#menu-options li');
|
||||
menuOptionsList.forEach(option => {
|
||||
option.addEventListener('click', (event) => {
|
||||
event.stopPropagation();
|
||||
closeMenu();
|
||||
});
|
||||
});
|
||||
function openMenu() {
|
||||
setTimeout(() => {
|
||||
menuOptions.classList.add('visible');
|
||||
menuIcon.classList.add('menu-open');
|
||||
menuOverlay.style.display = 'flex';
|
||||
}, 10);
|
||||
}
|
||||
function closeMenu() {
|
||||
const closeMenu = () => {
|
||||
menuOptions.classList.remove('visible');
|
||||
menuIcon.classList.remove('menu-open');
|
||||
menuOverlay.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
menuButton.addEventListener('click', () => {
|
||||
if (menuOptions.classList.contains('visible')) {
|
||||
closeMenu();
|
||||
} else {
|
||||
setTimeout(() => {
|
||||
menuOptions.classList.add('visible');
|
||||
menuIcon.classList.add('menu-open');
|
||||
menuOverlay.style.display = 'flex';
|
||||
}, 10);
|
||||
}
|
||||
});
|
||||
document.addEventListener('click', (event) => {
|
||||
if (!menuOptions.contains(event.target) && event.target !== menuButton) closeMenu();
|
||||
});
|
||||
window.addEventListener('scroll', () => {
|
||||
if (menuOptions.classList.contains('visible')) closeMenu();
|
||||
});
|
||||
const menuOptionsList = document.querySelectorAll('#menu-options li');
|
||||
menuOptionsList.forEach(option => {
|
||||
option.addEventListener('click', () => {
|
||||
setTimeout(() => closeMenu(), 80);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -13,19 +13,8 @@ const getButton = document.getElementById('get-patch');
|
||||
const autoButton = document.getElementById('auto-config');
|
||||
const saveButton = document.getElementById('save-patch');
|
||||
|
||||
// Show security patch dialog
|
||||
function showSecurityPatchDialog() {
|
||||
document.body.classList.add("no-scroll");
|
||||
overlay.style.display = 'flex';
|
||||
setTimeout(() => {
|
||||
overlay.style.opacity = '1';
|
||||
overlayContent.classList.add('open');
|
||||
loadCurrentConfig();
|
||||
}, 10);
|
||||
}
|
||||
|
||||
// Hide security patch dialog
|
||||
function hideSecurityPatchDialog() {
|
||||
const hideSecurityPatchDialog = () => {
|
||||
document.body.classList.remove("no-scroll");
|
||||
overlay.style.opacity = '0';
|
||||
overlayContent.classList.remove('open');
|
||||
@@ -207,7 +196,17 @@ function isValid8Digit(value) {
|
||||
|
||||
// Initialize event listeners
|
||||
export function securityPatch() {
|
||||
document.getElementById("security-patch").addEventListener("click", showSecurityPatchDialog);
|
||||
document.getElementById("security-patch").addEventListener("click", () => {
|
||||
setTimeout(() => {
|
||||
document.body.classList.add("no-scroll");
|
||||
overlay.style.display = 'flex';
|
||||
setTimeout(() => {
|
||||
overlay.style.opacity = '1';
|
||||
overlayContent.classList.add('open');
|
||||
loadCurrentConfig();
|
||||
}, 10);
|
||||
}, 80);
|
||||
});
|
||||
|
||||
// Toggle advanced mode
|
||||
advancedToggle.addEventListener('change', () => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"versionCode": 380,
|
||||
"version": "v3.8",
|
||||
"zipUrl": "https://github.com/KOWX712/Tricky-Addon-Update-Target-List/releases/download/v3.8/TrickyAddonModule-v3.8.zip",
|
||||
"versionCode": 381,
|
||||
"version": "v3.8.1",
|
||||
"zipUrl": "https://github.com/KOWX712/Tricky-Addon-Update-Target-List/releases/download/v3.8.1/TrickyAddonModule-v3.8.1.zip",
|
||||
"changelog": "https://raw.githubusercontent.com/KOWX712/Tricky-Addon-Update-Target-List/main/changelog.md"
|
||||
}
|
||||
Reference in New Issue
Block a user