Compare commits

6 Commits
v3.8 ... v3.8.1

Author SHA1 Message Date
KOWX712
533bdf8fa5 3.8.1 hot fix release 2025-04-11 04:35:41 +08:00
KOWX712
a9eab165a0 fix: no internet prompt when no valid key is available 2025-04-11 04:35:41 +08:00
KOWX712
5bbbe4bc08 Update .extra 2025-04-10 23:40:39 +08:00
KOWX712
df255096c8 opt: wait for ripple animation complete 2025-04-10 23:34:31 +08:00
KOWX712
b1a52ee173 fix: missing ripple effect in language menu in certain condition 2025-04-10 23:26:07 +08:00
KOWX712
3b355ac5ff opt: ripple animation 2025-04-10 14:39:39 +08:00
10 changed files with 105 additions and 112 deletions

1
.extra

File diff suppressed because one or more lines are too long

View File

@@ -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

View File

@@ -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

View File

@@ -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");

View File

@@ -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);
}
});
}
/**

View File

@@ -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";
}

View File

@@ -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(() => {

View File

@@ -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);
});
});
}

View File

@@ -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', () => {

View File

@@ -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"
}