function decodeHtmlEntities(text) { const map = { ''': "'", '"': '"', '&': '&', '<': '<', '>': '>', ''': "'", '/': '/', '`': '`', '=': '=', }; return text.replace(/&#?\w+;/g, (entity) => map[entity] || entity); } async function searchContent(keyword) { const results = []; const pages = [0, 2, 3, 4, 5]; try { const promises = pages.map(page => { const url = page === 0 ? `https://mangapark.net/search?word=${encodeURIComponent(keyword)}` : `https://mangapark.net/search?word=${encodeURIComponent(keyword)}&page=${page}`; return fetch(url) .then(response => response.text()) .then(html => { const regex = /]*>[\s\S]*?]*?title="([^"]+)"/g; const pageResults = []; let match; while ((match = regex.exec(html)) !== null) { pageResults.push({ id: "https://mangapark.net" + match[1].trim(), imageURL: "https://mangapark.net" + match[2].trim(), title: decodeHtmlEntities(match[3].trim()) }); } return pageResults; }) .catch(() => []); }); const allResults = await Promise.all(promises); return allResults.flat(); } catch (err) { return []; } } async function getContentData(url) { try { const response = await fetch(url); const html = await response.text(); const descRegex = /
([\s\S]*?)<\/div>/; const descMatch = html.match(descRegex); let description = descMatch ? descMatch[1].trim() : ""; description = description.replace(//g, '\n').replace(/<[^>]+>/g, ''); const tagsRegex = //g; const tags = []; let tagMatch; while ((tagMatch = tagsRegex.exec(html)) !== null) { tags.push(tagMatch[1].trim()); } return { description, tags }; } catch (err) { return { description: "Error", tags: [] }; } } async function getChapters(url) { const results = []; try { const response = await fetch(url); const html = await response.text(); const regex = /]*>Chapter (\d+(?:\.\d+)?)[^<]*<\/a>/g; let match; let index = 0; while ((match = regex.exec(html)) !== null) { results.push([ String(index), [{ id: "https://mangapark.net" + match[1].trim(), title: `Chapter ${match[2].trim()}`, chapter: index, scanlation_group: "MangaPark" }] ]); index++; } return { en: results.reverse() }; } catch (err) { return { en: [] }; } } async function getChapterImages(url) { const results = []; try { const response = await fetch(url); const html = await response.text(); const jsonMatch = html.match(/