|
|
@ -1,203 +0,0 @@ |
|
|
|
var $ = document.querySelector.bind(document) |
|
|
|
|
|
|
|
, $$ = document.querySelectorAll.bind(document) |
|
|
|
|
|
|
|
, $c = document.createElement.bind(document) |
|
|
|
|
|
|
|
, randomImg = "http://api.mtyqx.cn/api/random.php" |
|
|
|
|
|
|
|
, randomImg2 = "http://img.xjh.me/random_img.php" |
|
|
|
|
|
|
|
, books |
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var now_chapter = -1; |
|
|
|
|
|
|
|
var sum_chapter = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var formatTime = value => { |
|
|
|
|
|
|
|
return new Date(value).toLocaleString('zh-CN', { |
|
|
|
|
|
|
|
hour12: false, year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit" |
|
|
|
|
|
|
|
}).replace(/\//g, "-"); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var apiMap = { |
|
|
|
|
|
|
|
"getBookshelf": "/getBookshelf", |
|
|
|
|
|
|
|
"getChapterList": "/getChapterList", |
|
|
|
|
|
|
|
"getBookContent": "/getBookContent", |
|
|
|
|
|
|
|
"saveBook": "/saveBook" |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var apiAddress = (apiName, url, index) => { |
|
|
|
|
|
|
|
let address = $('#address').value || window.location.host; |
|
|
|
|
|
|
|
if (!(/^http|^\/\//).test(address)) { |
|
|
|
|
|
|
|
address = "//" + address; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!(/:\d{4,}/).test(address.split("//")[1].split("/")[0])) { |
|
|
|
|
|
|
|
address += ":1122"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
localStorage.setItem('address', address); |
|
|
|
|
|
|
|
if (apiName == "getBookContent") { |
|
|
|
|
|
|
|
return address + apiMap[apiName] + (url ? "?url=" + encodeURIComponent(url) : "") + "&index=" + index; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return address + apiMap[apiName] + (url ? "?url=" + encodeURIComponent(url) : ""); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var init = () => { |
|
|
|
|
|
|
|
$('#allcontent').classList.remove("read"); |
|
|
|
|
|
|
|
$('#books').innerHTML = ""; |
|
|
|
|
|
|
|
fetch(apiAddress("getBookshelf"), { mode: "cors" }) |
|
|
|
|
|
|
|
.then(res => res.json()) |
|
|
|
|
|
|
|
.then(data => { |
|
|
|
|
|
|
|
if (!data.isSuccess) { |
|
|
|
|
|
|
|
alert(getBookshelf.errorMsg); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
books = data.data; |
|
|
|
|
|
|
|
books.forEach((book, i) => { |
|
|
|
|
|
|
|
let bookDiv = $c("div"); |
|
|
|
|
|
|
|
let img = $c("img"); |
|
|
|
|
|
|
|
img.src = book.coverUrl || randomImg; |
|
|
|
|
|
|
|
img.setAttribute("data-series-num", i); |
|
|
|
|
|
|
|
bookDiv.appendChild(img); |
|
|
|
|
|
|
|
bookDiv.innerHTML += `<table><tbody>
|
|
|
|
|
|
|
|
<tr><td>书名:</td><td>${book.name}</td></tr> |
|
|
|
|
|
|
|
<tr><td>作者:</td><td>${book.author}</td></tr> |
|
|
|
|
|
|
|
<tr><td>阅读:</td><td>${book.durChapterTitle}<br>${formatTime(book.durChapterTime)}</td></tr> |
|
|
|
|
|
|
|
<tr><td>更新:</td><td>${book.latestChapterTitle}<br>${formatTime(book.latestChapterTime)}</td></tr> |
|
|
|
|
|
|
|
<tr><td>来源:</td><td>${book.origin}</td></tr> |
|
|
|
|
|
|
|
</tbody></table>`; |
|
|
|
|
|
|
|
$('#books').appendChild(bookDiv); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
$$('#books img').forEach(bookImg => |
|
|
|
|
|
|
|
bookImg.addEventListener("click", () => { |
|
|
|
|
|
|
|
now_chapter = -1; |
|
|
|
|
|
|
|
sum_chapter = 0; |
|
|
|
|
|
|
|
$('#allcontent').classList.add("read"); |
|
|
|
|
|
|
|
var book = books[bookImg.getAttribute("data-series-num")]; |
|
|
|
|
|
|
|
$("#info").innerHTML = `<img src="${bookImg.src}">
|
|
|
|
|
|
|
|
<p> 来源:${book.origin}</p> |
|
|
|
|
|
|
|
<p> 书名:${book.name}</p> |
|
|
|
|
|
|
|
<p> 作者:${book.author}</p> |
|
|
|
|
|
|
|
<p>阅读章节:${book.durChapterName}</p> |
|
|
|
|
|
|
|
<p>阅读时间:${formatTime(book.durChapterTime)}</p> |
|
|
|
|
|
|
|
<p>最新章节:${book.latestChapterTitle}</p> |
|
|
|
|
|
|
|
<p>检查时间:${formatTime(book.lastCheckTime)}</p> |
|
|
|
|
|
|
|
<p> 简介:${book.intro.trim().replace(/\n/g, "<br>")}</p>`; |
|
|
|
|
|
|
|
window.location.hash = ""; |
|
|
|
|
|
|
|
window.location.hash = "#info"; |
|
|
|
|
|
|
|
$("#content").innerHTML = "章节列表加载中..."; |
|
|
|
|
|
|
|
$("#chapter").innerHTML = ""; |
|
|
|
|
|
|
|
fetch(apiAddress("getChapterList", book.bookUrl), { mode: "cors" }) |
|
|
|
|
|
|
|
.then(res => res.json()) |
|
|
|
|
|
|
|
.then(data => { |
|
|
|
|
|
|
|
if (!data.isSuccess) { |
|
|
|
|
|
|
|
alert(data.errorMsg); |
|
|
|
|
|
|
|
$("#content").innerHTML = "章节列表加载失败!"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data.data.forEach(chapter => { |
|
|
|
|
|
|
|
let ch = $c("button"); |
|
|
|
|
|
|
|
ch.setAttribute("data-url", chapter.bookUrl); |
|
|
|
|
|
|
|
ch.setAttribute("data-index", chapter.index); |
|
|
|
|
|
|
|
ch.setAttribute("title", chapter.title); |
|
|
|
|
|
|
|
ch.innerHTML = chapter.title.length > 15 ? chapter.title.substring(0, 14) + "..." : chapter.title; |
|
|
|
|
|
|
|
$("#chapter").appendChild(ch); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
sum_chapter = data.data.length; |
|
|
|
|
|
|
|
$('#chapter').scrollTop = 0; |
|
|
|
|
|
|
|
$("#content").innerHTML = "章节列表加载完成!"; |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
})); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$("#back").addEventListener("click", () => { |
|
|
|
|
|
|
|
if (window.location.hash === "#content") { |
|
|
|
|
|
|
|
window.location.hash = "#chapter"; |
|
|
|
|
|
|
|
} else if (window.location.hash === "#chapter") { |
|
|
|
|
|
|
|
window.location.hash = "#info"; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
$('#allcontent').classList.remove("read"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$("#refresh").addEventListener("click", init); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$('#hidebooks').addEventListener("click", () => { |
|
|
|
|
|
|
|
$("#books").classList.toggle("hide"); |
|
|
|
|
|
|
|
$(".nav").classList.toggle("hide"); |
|
|
|
|
|
|
|
$("#allcontent").classList.toggle("allscreen"); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$('#top').addEventListener("click", () => { |
|
|
|
|
|
|
|
window.location.hash = ""; |
|
|
|
|
|
|
|
window.location.hash = "#info"; |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$('#showchapter').addEventListener("click", () => { |
|
|
|
|
|
|
|
window.location.hash = ""; |
|
|
|
|
|
|
|
window.location.hash = "#chapter"; |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$('#up').addEventListener('click', e => { |
|
|
|
|
|
|
|
if (now_chapter > 0) { |
|
|
|
|
|
|
|
now_chapter--; |
|
|
|
|
|
|
|
let clickEvent = document.createEvent('MouseEvents'); |
|
|
|
|
|
|
|
clickEvent.initEvent("click", true, false); |
|
|
|
|
|
|
|
$('[data-index="' + now_chapter + '"]').dispatchEvent(clickEvent); |
|
|
|
|
|
|
|
} else if (now_chapter == 0) { |
|
|
|
|
|
|
|
alert("已经是第一章了^_^!") |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$('#down').addEventListener('click', e => { |
|
|
|
|
|
|
|
if (now_chapter > -1) { |
|
|
|
|
|
|
|
if (now_chapter < sum_chapter - 1) { |
|
|
|
|
|
|
|
now_chapter++; |
|
|
|
|
|
|
|
let clickEvent = document.createEvent('MouseEvents'); |
|
|
|
|
|
|
|
clickEvent.initEvent("click", true, false); |
|
|
|
|
|
|
|
$('[data-index="' + now_chapter + '"]').dispatchEvent(clickEvent); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
alert("已经是最后一章了^_^!") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$('#chapter').addEventListener("click", (e) => { |
|
|
|
|
|
|
|
if (e.target.tagName === "BUTTON") { |
|
|
|
|
|
|
|
var url = e.target.getAttribute("data-url"); |
|
|
|
|
|
|
|
var index = e.target.getAttribute("data-index"); |
|
|
|
|
|
|
|
var name = e.target.getAttribute("title"); |
|
|
|
|
|
|
|
if (!url) { |
|
|
|
|
|
|
|
alert("未取得书籍地址"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!index && (0 != index)) { |
|
|
|
|
|
|
|
alert("未取得章节索引"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
now_chapter = parseInt(index); |
|
|
|
|
|
|
|
$("#content").innerHTML = "<p>" + name + " 加载中...</p>"; |
|
|
|
|
|
|
|
fetch(apiAddress("getBookContent", url, index), { mode: "cors" }) |
|
|
|
|
|
|
|
.then(res => res.json()) |
|
|
|
|
|
|
|
.then(data => { |
|
|
|
|
|
|
|
if (!data.isSuccess) { |
|
|
|
|
|
|
|
alert(data.errorMsg); |
|
|
|
|
|
|
|
$("#content").innerHTML = "<p>" + name + " 加载失败!</p>"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var content = data.data.trim().split("\n\n"); |
|
|
|
|
|
|
|
if (content.length === 2) { |
|
|
|
|
|
|
|
$("#content").innerHTML = `<h2>${content[0]}</h2> (全文 ${content[1].length} 字)<br><br> ` + content[1].trim().replace(/\n/g, "<br><br>"); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
$("#content").innerHTML = `<h2>${name || e.target.innerHTML}</h2> (全文 ${data.data.length} 字)<br><br> ` + data.data.trim().replace(/\n/g, "<br><br>"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
window.location.hash = ""; |
|
|
|
|
|
|
|
window.location.hash = "#content"; |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$('#address').setAttribute("placeholder", "阅读APP地址或IP:" + window.location.host); |
|
|
|
|
|
|
|
if (!$('#address').value && typeof localStorage && localStorage.getItem('address')) { |
|
|
|
|
|
|
|
$('#address').value = localStorage.getItem('address'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
init(); |
|
|
|
|