Skip to content

Commit

Permalink
Update to new Mangadex site layout
Browse files Browse the repository at this point in the history
  • Loading branch information
dteviot committed Aug 21, 2018
1 parent b90f67f commit 5061af1
Show file tree
Hide file tree
Showing 3 changed files with 196 additions and 123 deletions.
2 changes: 2 additions & 0 deletions plugin/js/Parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -515,3 +515,5 @@ class Parser {
}
}
}

Parser.WEB_TO_EPUB_CLASS_NAME = "webToEpubContent";
72 changes: 35 additions & 37 deletions plugin/js/parsers/MangadexParser.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@ class MangadexParser extends Parser{
}

getChapterUrls(dom) {
let rows = [...dom.querySelectorAll("table.table-striped img[alt=\"English\"]")];
let chapters = rows
.map(i => i.parentElement.parentElement.querySelector("a[data-chapter-id]"))
.map(a => util.hyperLinkToChapter(a));
let chapters = [...dom.querySelectorAll("div.chapter-row")]
.filter(row => (row.querySelector("img[alt='English']") != null))
.map(row => util.hyperLinkToChapter(row.querySelector("a")));
return Promise.resolve(chapters.reverse());
};

Expand All @@ -20,52 +19,51 @@ class MangadexParser extends Parser{
};

findContent(dom) {
const className = "webToEpubContent";
let content = dom.querySelector("div." + className);
if (content === null) {
let select = dom.querySelector("script[data-type=\"chapter\"]");
if (select !== null) {
content = dom.createElement("div");
content.className = className;
dom.body.appendChild(content);
this.convertScriptToImgTagsToFollow(dom, content, select);
}
}
return content;
return dom.querySelector("div." + Parser.WEB_TO_EPUB_CLASS_NAME);
}

findCoverImageUrl(dom) {
return util.getFirstImgSrc(dom, "div.card-body");
}

fetchChapter(url) {
let restUrl = MangadexParser.chapterImagesRestUrl(url);
return HttpClient.fetchJson(restUrl).then(function (xhr) {
return MangadexParser.jsonToHtmlWithImgTags(url, xhr.json);
});
}

convertScriptToImgTagsToFollow(dom, content, select) {
let json = JSON.parse(select.textContent);
let dataurl = json.dataurl;
let pages = json.page_array;
static jsonToHtmlWithImgTags(pageUrl, json) {
let dom = document.implementation.createHTMLDocument("");
let content = MangadexParser.makeContentElement(dom);
let server = json.server;
if (server === "/data/") {
let hostName = util.extractHostName(dom.baseURI);
let hostName = util.extractHostName(pageUrl);
server = `https://${hostName}/data/`;
}
for(let page of pages) {
for(let page of json.page_array) {
let img = dom.createElement("img");
img.src = `${server}${dataurl}/${page}`;
img.src = `${server}${json.hash}/${page}`;
content.appendChild(img);
};
return dom;
}

findCoverImageUrl(dom) {
return util.getFirstImgSrc(dom, "div.col-sm-3");
static chapterImagesRestUrl(url) {
let fragments = url.split("/");
let last = fragments[fragments.length - 1];
return `https://mangadex.org/api/chapter/${last}`;
}

getInformationEpubItemChildNodes(dom) {
let nodes = [];
let summary = dom.querySelector("div.col-sm-9 table");
if (summary != null) {
let clone = summary.cloneNode(true);
this.cleanInformationNode(clone);
nodes.push(clone);
}
return nodes;

static makeContentElement(dom) {
let content = dom.createElement("div");
content.className = Parser.WEB_TO_EPUB_CLASS_NAME;
dom.body.appendChild(content);
return content;
}

cleanInformationNode(node) {
node.querySelector("button").parentElement.parentElement.remove();
getInformationEpubItemChildNodes(dom) {
return [...dom.querySelectorAll("div.card-body div.row")]
.filter(row => (row.querySelector("img, button") === null))
}
}
Loading

0 comments on commit 5061af1

Please sign in to comment.