|
|
|
@@ -11,7 +11,6 @@ const mangayomiSources = [{
|
|
|
|
"dateFormat": "",
|
|
|
|
"dateFormat": "",
|
|
|
|
"dateFormatLocale": "",
|
|
|
|
"dateFormatLocale": "",
|
|
|
|
"pkgPath": "novel/src/en/novelupdates.js",
|
|
|
|
"pkgPath": "novel/src/en/novelupdates.js",
|
|
|
|
"appMinVerReq": "0.4.0",
|
|
|
|
|
|
|
|
"isNsfw": false,
|
|
|
|
"isNsfw": false,
|
|
|
|
"hasCloudflare": true
|
|
|
|
"hasCloudflare": true
|
|
|
|
}];
|
|
|
|
}];
|
|
|
|
@@ -195,7 +194,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const client = await new Client();
|
|
|
|
const client = await new Client();
|
|
|
|
const doc = new Document(html);
|
|
|
|
const doc = new Document(html);
|
|
|
|
const domain = html;
|
|
|
|
const domain = html;
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("anotivereads")) {
|
|
|
|
if (domain.includes("anotivereads")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst("#comic-nav-name")?.text.trim() ||
|
|
|
|
doc.selectFirst("#comic-nav-name")?.text.trim() ||
|
|
|
|
@@ -203,7 +202,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst("#spliced-comic")?.innerHtml;
|
|
|
|
const content = doc.selectFirst("#spliced-comic")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("asuratls")) {
|
|
|
|
if (domain.includes("asuratls")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".post-body > div > b")?.text.trim() ||
|
|
|
|
doc.selectFirst(".post-body > div > b")?.text.trim() ||
|
|
|
|
@@ -211,7 +210,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".post-body")?.innerHtml?.replace(title, "");
|
|
|
|
const content = doc.selectFirst(".post-body")?.innerHtml?.replace(title, "");
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("daoist")) {
|
|
|
|
if (domain.includes("daoist")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".chapter__title")?.text.trim() ||
|
|
|
|
doc.selectFirst(".chapter__title")?.text.trim() ||
|
|
|
|
@@ -219,7 +218,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".chapter__content")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".chapter__content")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("darkstartranslations")) {
|
|
|
|
if (domain.includes("darkstartranslations")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst("ol.breadcrumb > li")?.text.trim() ||
|
|
|
|
doc.selectFirst("ol.breadcrumb > li")?.text.trim() ||
|
|
|
|
@@ -227,7 +226,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".text-left")?.innerHtml?.replace("<br>", "<br><br>");
|
|
|
|
const content = doc.selectFirst(".text-left")?.innerHtml?.replace("<br>", "<br><br>");
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("fictionread")) {
|
|
|
|
if (domain.includes("fictionread")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".title-image > span")?.text.trim() ||
|
|
|
|
doc.selectFirst(".title-image > span")?.text.trim() ||
|
|
|
|
@@ -235,7 +234,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".content")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".content")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("helscans")) {
|
|
|
|
if (domain.includes("helscans")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".entry-title-main")?.text.trim() ||
|
|
|
|
doc.selectFirst(".entry-title-main")?.text.trim() ||
|
|
|
|
@@ -243,7 +242,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst("#readerarea.rdminimal")?.innerHtml;
|
|
|
|
const content = doc.selectFirst("#readerarea.rdminimal")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("hiraethtranslation")) {
|
|
|
|
if (domain.includes("hiraethtranslation")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst("li.active")?.text.trim() ||
|
|
|
|
doc.selectFirst("li.active")?.text.trim() ||
|
|
|
|
@@ -251,7 +250,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".text-left")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".text-left")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("hostednovel")) {
|
|
|
|
if (domain.includes("hostednovel")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst("#chapter-title")?.text.trim() ||
|
|
|
|
doc.selectFirst("#chapter-title")?.text.trim() ||
|
|
|
|
@@ -259,12 +258,12 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst("#chapter-content")?.innerHtml;
|
|
|
|
const content = doc.selectFirst("#chapter-content")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("inoveltranslation")) {
|
|
|
|
if (domain.includes("inoveltranslation")) {
|
|
|
|
const content = doc.selectFirst(".styles_content__JHK8G")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".styles_content__JHK8G")?.innerHtml;
|
|
|
|
return `${content}`;
|
|
|
|
return `${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("isotls")) {
|
|
|
|
if (domain.includes("isotls")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst("head > title")?.text.trim() ||
|
|
|
|
doc.selectFirst("head > title")?.text.trim() ||
|
|
|
|
@@ -272,7 +271,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst("main > article")?.innerHtml;
|
|
|
|
const content = doc.selectFirst("main > article")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("mirilu")) {
|
|
|
|
if (domain.includes("mirilu")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".entry-content > p > strong")?.text.trim() ||
|
|
|
|
doc.selectFirst(".entry-content > p > strong")?.text.trim() ||
|
|
|
|
@@ -280,7 +279,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".entry-content")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".entry-content")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("novelplex")) {
|
|
|
|
if (domain.includes("novelplex")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".halChap--jud")?.text.trim() ||
|
|
|
|
doc.selectFirst(".halChap--jud")?.text.trim() ||
|
|
|
|
@@ -288,7 +287,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".halChap--kontenInner")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".halChap--kontenInner")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("novelworldtranslations")) {
|
|
|
|
if (domain.includes("novelworldtranslations")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".entry-title")?.text.trim() ||
|
|
|
|
doc.selectFirst(".entry-title")?.text.trim() ||
|
|
|
|
@@ -296,12 +295,12 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".entry-content")?.innerHtml?.replace(/ /g, '')?.replace(/\n/g, '<br>');
|
|
|
|
const content = doc.selectFirst(".entry-content")?.innerHtml?.replace(/ /g, '')?.replace(/\n/g, '<br>');
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("readingpia")) {
|
|
|
|
if (domain.includes("readingpia")) {
|
|
|
|
const content = doc.selectFirst(".chapter-body")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".chapter-body")?.innerHtml;
|
|
|
|
return `${content}`;
|
|
|
|
return `${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("sacredtexttranslations")) {
|
|
|
|
if (domain.includes("sacredtexttranslations")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".entry-title")?.text.trim() ||
|
|
|
|
doc.selectFirst(".entry-title")?.text.trim() ||
|
|
|
|
@@ -309,7 +308,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".entry-content")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".entry-content")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("scribblehub")) {
|
|
|
|
if (domain.includes("scribblehub")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".chapter-title")?.text.trim() ||
|
|
|
|
doc.selectFirst(".chapter-title")?.text.trim() ||
|
|
|
|
@@ -317,7 +316,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".chp_raw")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".chp_raw")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("tinytranslation")) {
|
|
|
|
if (domain.includes("tinytranslation")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".title-content")?.text.trim() ||
|
|
|
|
doc.selectFirst(".title-content")?.text.trim() ||
|
|
|
|
@@ -325,12 +324,12 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".content")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".content")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("tumblr")) {
|
|
|
|
if (domain.includes("tumblr")) {
|
|
|
|
const content = doc.selectFirst(".post")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".post")?.innerHtml;
|
|
|
|
return `${content}`;
|
|
|
|
return `${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("wattpad")) {
|
|
|
|
if (domain.includes("wattpad")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".h2")?.text.trim() ||
|
|
|
|
doc.selectFirst(".h2")?.text.trim() ||
|
|
|
|
@@ -338,7 +337,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".part-content > pre")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".part-content > pre")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("webnovel")) {
|
|
|
|
if (domain.includes("webnovel")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".cha-tit > .pr > .dib")?.text.trim() ||
|
|
|
|
doc.selectFirst(".cha-tit > .pr > .dib")?.text.trim() ||
|
|
|
|
@@ -346,7 +345,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".cha-words")?.innerHtml || doc.selectFirst("._content")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".cha-words")?.innerHtml || doc.selectFirst("._content")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("wetriedtls")) {
|
|
|
|
if (domain.includes("wetriedtls")) {
|
|
|
|
const content = doc.selectFirst("script:contains(\"p dir=\")")?.innerHtml || doc.selectFirst("script:contains(\"u003c\")")?.innerHtml;
|
|
|
|
const content = doc.selectFirst("script:contains(\"p dir=\")")?.innerHtml || doc.selectFirst("script:contains(\"u003c\")")?.innerHtml;
|
|
|
|
if (content) {
|
|
|
|
if (content) {
|
|
|
|
@@ -358,7 +357,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return "<p>Failed to parse JSON content!</p>";
|
|
|
|
return "<p>Failed to parse JSON content!</p>";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("wuxiaworld")) {
|
|
|
|
if (domain.includes("wuxiaworld")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst("h4 > span")?.text.trim() ||
|
|
|
|
doc.selectFirst("h4 > span")?.text.trim() ||
|
|
|
|
@@ -366,7 +365,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".chapter-content")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".chapter-content")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("zetrotranslation")) {
|
|
|
|
if (domain.includes("zetrotranslation")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst(".text-left h2")?.text.trim() ||
|
|
|
|
doc.selectFirst(".text-left h2")?.text.trim() ||
|
|
|
|
@@ -375,7 +374,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst(".text-left")?.innerHtml;
|
|
|
|
const content = doc.selectFirst(".text-left")?.innerHtml;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("webnovel")) {
|
|
|
|
if (domain.includes("webnovel")) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst("#page > .chapter_content > .cha-tit > div > div")?.text.trim() ||
|
|
|
|
doc.selectFirst("#page > .chapter_content > .cha-tit > div > div")?.text.trim() ||
|
|
|
|
@@ -383,7 +382,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const content = doc.selectFirst("#page > .chapter_content > .cha-content > .cha-words")?.innerHtml.replaceAll(/<i\s*.*?>.*?<\/i>/gm, "");
|
|
|
|
const content = doc.selectFirst("#page > .chapter_content > .cha-content > .cha-words")?.innerHtml.replaceAll(/<i\s*.*?>.*?<\/i>/gm, "");
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (domain.includes("re-library")) {
|
|
|
|
if (domain.includes("re-library")) {
|
|
|
|
const redirectUrl = doc.selectFirst(".entry-content > div > div > p > a").getHref;
|
|
|
|
const redirectUrl = doc.selectFirst(".entry-content > div > div > p > a").getHref;
|
|
|
|
const redirectRes = await client.get(redirectUrl, {
|
|
|
|
const redirectRes = await client.get(redirectUrl, {
|
|
|
|
@@ -393,7 +392,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
});
|
|
|
|
});
|
|
|
|
const redirectDoc = new Document(redirectRes.body);
|
|
|
|
const redirectDoc = new Document(redirectRes.body);
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
redirectDoc.selectFirst(".entry-header > .entry-title")?.text.trim() ||
|
|
|
|
redirectDoc.selectFirst(".entry-header > .entry-title")?.text.trim() ||
|
|
|
|
"";
|
|
|
|
"";
|
|
|
|
const content = redirectDoc.selectFirst(".entry-content")?.innerHtml.replaceAll(/<i\s*.*?>.*?<\/i>/gm, "");
|
|
|
|
const content = redirectDoc.selectFirst(".entry-content")?.innerHtml.replaceAll(/<i\s*.*?>.*?<\/i>/gm, "");
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
@@ -406,7 +405,7 @@ class DefaultExtension extends MProvider {
|
|
|
|
const isBlogspot = blogspotElements.some(e => {
|
|
|
|
const isBlogspot = blogspotElements.some(e => {
|
|
|
|
return e?.toLowerCase().includes("blogspot") || e?.toLowerCase().includes("blogger")
|
|
|
|
return e?.toLowerCase().includes("blogspot") || e?.toLowerCase().includes("blogger")
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
if (isBlogspot) {
|
|
|
|
if (isBlogspot) {
|
|
|
|
const title =
|
|
|
|
const title =
|
|
|
|
doc.selectFirst("h3.post-title")?.text.trim() ||
|
|
|
|
doc.selectFirst("h3.post-title")?.text.trim() ||
|
|
|
|
@@ -466,12 +465,12 @@ class DefaultExtension extends MProvider {
|
|
|
|
doc.selectFirst("#content")?.innerHtml ||
|
|
|
|
doc.selectFirst("#content")?.innerHtml ||
|
|
|
|
doc.selectFirst("#the-content")?.innerHtml ||
|
|
|
|
doc.selectFirst("#the-content")?.innerHtml ||
|
|
|
|
doc.selectFirst("article.post")?.innerHtml;
|
|
|
|
doc.selectFirst("article.post")?.innerHtml;
|
|
|
|
|
|
|
|
|
|
|
|
if (isWordpress || domain.includes("etherreads") || domain.includes("soafp")) {
|
|
|
|
if (isWordpress || domain.includes("etherreads") || domain.includes("soafp")) {
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
return `<h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return `<p>Domain not supported yet. Content might not load properly!</p>
|
|
|
|
return `<p>Domain not supported yet. Content might not load properly!</p>
|
|
|
|
<br><h2>${title}</h2><hr><br>${content}`;
|
|
|
|
<br><h2>${title}</h2><hr><br>${content}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|