Skip to content

Commit 3ca4053

Browse files
authored
Merge pull request #2616 from nitramkh/feature/add_uukanshu_cc_parser
Add https://uukanshu.cc/ parser See: #2527
2 parents cb0104d + f4d0ee2 commit 3ca4053

3 files changed

Lines changed: 100 additions & 0 deletions

File tree

plugin/js/parsers/MtnovelParser.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"use strict";
22

3+
// Dead site (2026-04-08)
34
parserFactory.register("mtnovel.net", () => new MtnovelParser());
45

56
class MtnovelParser extends Parser {
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
"use strict";
2+
3+
parserFactory.register("uukanshu.cc", () => new UukanshuParser());
4+
5+
class UukanshuParser extends Parser {
6+
constructor() {
7+
super();
8+
}
9+
10+
/**
11+
* @override
12+
* @param { Document } dom
13+
*/
14+
async getChapterUrls(dom) {
15+
/** @type { NodeListOf<HTMLAnchorElement> } */
16+
const anchors = dom.querySelectorAll("#list-chapterAll div a");
17+
18+
return Array.from(anchors, anchor => util.hyperLinkToChapter(anchor));
19+
}
20+
21+
/**
22+
* @override
23+
* @param { Document } dom
24+
*/
25+
findContent(dom) {
26+
return dom.querySelector("div.readcotent"); // [sic]
27+
}
28+
29+
/**
30+
* @override
31+
* @param { Document } dom
32+
*/
33+
findChapterTitle(dom) {
34+
return dom.querySelector("h1.pt10");
35+
}
36+
37+
/**
38+
* @override
39+
* @param { Document } dom
40+
*/
41+
extractTitleImpl(dom) {
42+
/** @type { HTMLMetaElement | null } */
43+
const meta = dom.querySelector("meta[property='og:title");
44+
45+
return meta?.content;
46+
}
47+
48+
/**
49+
* @override
50+
* @param { Document } dom
51+
*/
52+
extractDescription(dom) {
53+
/** @type { HTMLMetaElement | null } */
54+
const meta = dom.querySelector("meta[property='og:description");
55+
56+
return meta?.content?.replace(/<span.*?>/, "");
57+
}
58+
59+
/**
60+
* @override
61+
* @param { Document } dom
62+
*/
63+
extractSubject(dom) {
64+
/** @type { HTMLMetaElement | null } */
65+
const meta = dom.querySelector("meta[property='og:novel:category");
66+
67+
return meta?.content;
68+
}
69+
70+
/**
71+
* @override
72+
* @param { Document } dom
73+
*/
74+
extractAuthor(dom) {
75+
/** @type { HTMLMetaElement | null } */
76+
const meta = dom.querySelector("meta[property='og:novel:author");
77+
78+
return meta?.content;
79+
}
80+
81+
/**
82+
* @override
83+
*/
84+
extractLanguage() {
85+
return "zh";
86+
}
87+
88+
/**
89+
* @override
90+
* @param { Document } dom
91+
*/
92+
findCoverImageUrl(dom) {
93+
/** @type { HTMLMetaElement | null } */
94+
const meta = dom.querySelector("meta[property='og:image']");
95+
96+
return meta?.content;
97+
}
98+
}

plugin/popup.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -941,6 +941,7 @@ <h3>Instructions</h3>
941941
<script src="js/parsers/UltimaguilParser.js"></script>
942942
<script src="js/parsers/UnlimitedNovelFailuresParser.js"></script>
943943
<script src="js/parsers/UntamedAlleyParser.js"></script>
944+
<script src="js/parsers/UukanshuParser.js"></script>
944945
<script src="js/parsers/VelvetReverieParser.js"></script>
945946
<script src="js/parsers/VipNovelParser.js"></script>
946947
<script src="js/parsers/VozerioParser.js"></script>

0 commit comments

Comments
 (0)