Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
ce877cd
Refactor ColaManga to use WebView for page loading
Howard20181 Jul 17, 2025
dc9d704
Merge branch 'main' into colamanga
Howard20181 Jul 17, 2025
86f0d5d
Bump baseVersionCode to 10 in build.gradle.kts
Howard20181 Jul 17, 2025
fb50b04
Update ColaManga.kt
Howard20181 Jul 17, 2025
0784fae
remove debug flag
Howard20181 Jul 17, 2025
964325d
Add i18n support and localized messages to ColaManga
Howard20181 Jul 18, 2025
7c6db7b
Improve ImgToBlobBase64 compatibility for canvas
Howard20181 Jul 18, 2025
aa103f4
Remove unused classes
Howard20181 Jul 18, 2025
f061d2f
Recreate WebView when it does not exist when requesting images
Howard20181 Jul 18, 2025
dc0ffce
Remove unnecessary SuppressLint annotation
Howard20181 Jul 18, 2025
2b73b79
Merge branch 'main' into colamanga
Howard20181 Jul 18, 2025
d1c46d2
Remove unuse dependences from ColaManga
Howard20181 Jul 19, 2025
6a01216
Manually format ColaManga.kt
Howard20181 Jul 19, 2025
e684399
Update ColaManga.kt
Howard20181 Jul 19, 2025
39abc34
Migrate COLAMANGA extension from multisrc to single source
Howard20181 Jul 19, 2025
356fe2b
Update reloadPic selector for image reload
Howard20181 Jul 19, 2025
5a0d9ba
Improve scroll and reload logic for comic pages
Howard20181 Jul 19, 2025
d5d028a
Merge branch 'main' into colamanga
Howard20181 Jul 19, 2025
2040c9e
Refactor page trigger logic
Howard20181 Jul 19, 2025
d4237f4
Refactor webview script for improved image handling
Howard20181 Jul 19, 2025
810985a
Merge branch 'main' into colamanga
Howard20181 Jul 19, 2025
801953f
scrollIntoView when reload
Howard20181 Jul 19, 2025
f33668d
Refactor image loading and observer logic in webview script
Howard20181 Jul 20, 2025
49d1a90
Change WebView JS injection trigger to onLoadResource
Howard20181 Jul 20, 2025
27eadb6
Refactor webview script loading and observer logic
Howard20181 Jul 20, 2025
65927ba
onPageCommitVisible not working
Howard20181 Jul 20, 2025
21d33f4
Improve scrolling and image loading logic
Howard20181 Jul 20, 2025
f89f785
Merge branch 'main' into colamanga
Howard20181 Jul 20, 2025
c6d79f7
Refactor image src property hijacking logic
Howard20181 Jul 20, 2025
cf01422
Adjust scroll speed
Howard20181 Jul 20, 2025
5ecb360
Update webview-script.js
Howard20181 Jul 20, 2025
a3db7a0
Improve scroll logic
Howard20181 Jul 20, 2025
ada1e27
Added comments
Howard20181 Jul 20, 2025
1d4d28f
Trigger button click event
Howard20181 Jul 20, 2025
13daa04
Fix some leak
Howard20181 Jul 20, 2025
28aac44
Update ColaManga.kt
Howard20181 Jul 20, 2025
ef655b4
Merge branch 'main' into colamanga
stevenyomi Jul 20, 2025
3c6212c
Remove accidentally respawned files
stevenyomi Jul 20, 2025
6792b46
Move the code related to loading chapters together.
Howard20181 Jul 21, 2025
f615fba
Revert some line
Howard20181 Jul 21, 2025
76e33cf
Fix race
Howard20181 Jul 21, 2025
6bb582e
Manual garbage collection, recycling fetched pages
Howard20181 Jul 21, 2025
48e8f9f
Also recycle the entire chapter
Howard20181 Jul 21, 2025
873e48a
Fix null check for pages
Howard20181 Jul 21, 2025
d979a42
Determine that image loading has failed when that page is not found
Howard20181 Jul 22, 2025
e97927d
Merge branch 'main' into colamanga
Howard20181 Jul 22, 2025
03d1e20
Scrolling to mh_loading is useless
Howard20181 Jul 22, 2025
9a31444
Trying to fix race
Howard20181 Jul 22, 2025
45b73e6
Add missing url in setPage
Howard20181 Jul 22, 2025
741e7c9
Refactor pagesMap to use ArrayList<Page>
Howard20181 Jul 22, 2025
2615a6f
Set current page count for jsInterface
Howard20181 Jul 22, 2025
75e5f84
Update ColaManga.kt
Howard20181 Jul 22, 2025
1a99492
Update ColaManga.kt
Howard20181 Jul 22, 2025
b04fcf5
Update webview-script.js
Howard20181 Jul 24, 2025
f5a5be1
Merge branch 'main' into colamanga
Howard20181 Jul 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 100 additions & 0 deletions src/zh/onemanhua/assets/webview-script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
function waitForElm(selector) {
return new Promise(resolve => {
if (document.querySelector(selector)) {
return resolve(document.querySelector(selector))
}
const observer = new MutationObserver(() => {
if (document.querySelector(selector)) {
observer.disconnect()
resolve(document.querySelector(selector))
}
})
observer.observe(document.body, {
childList: true,
subtree: true
})
})
}
let hasImgReady = false
let scrolledOnce = false
let scrolling = false
async function scroll() {
if (scrolling || !hasImgReady) return
scrolling = true
window.scrollTo(0, 0)
await new Promise((resolve, reject) => {
try {
const maxScroll = Number.MAX_SAFE_INTEGER
let lastScroll = 0
const interval = setInterval(() => {
window.scrollBy(0, 100)
const scrollTop = document.documentElement.scrollTop
if (scrollTop === maxScroll || scrollTop === lastScroll) {
clearInterval(interval)
scrolling = false
scrolledOnce = true
resolve()
} else {
lastScroll = scrollTop
}
}, 100)
} catch (err) {
reject(err.toString())
}
})
}
function loadPic(pageIndex) {
if (scrolling || !hasImgReady) return
if (!scrolledOnce) {
scroll()
return
}
document.querySelector("#mangalist").dispatchEvent(new CustomEvent('scroll'))
const page = pageIndex + 1
const target = document.querySelector(`div.mh_comicpic[p="${page}"] img[src]`)
const mh_loaderr = document.querySelector(`div.mh_comicpic[p="${page}"] .mh_loaderr`)
if (target) {
target.scrollIntoView()
} else if (mh_loaderr?.style.display != 'none') {
mh_loaderr.scrollIntoView()
mh_loaderr.querySelector('.mh_btn')?.click()
} else {
scroll()
}
}
let pageCount = 0
waitForElm("#mangalist").then(() => {
pageCount = parseInt($.cookie(__cad.getCookieValue()[1] + mh_info.pageid) || "0")
window.__interface__.setPageCount(pageCount)
})
const observer = new MutationObserver(() => {
if (document.querySelector("div.mh_comicpic img")) {
const images = document.querySelectorAll("div.mh_comicpic img")
images.forEach(img => {
if (!img._Hijacked) {
const originalSrc = Object.getOwnPropertyDescriptor(img.__proto__, "src")
Object.defineProperty(img, "src", {
...originalSrc,
set: function (value) {
fetch(value).then(response => {
return response.blob()
}).then(blob => {
const reader = new FileReader()
reader.onloadend = () => {
window.__interface__.setPage(this.parentElement.getAttribute('p') - 1, reader.result)
hasImgReady = true
}
reader.readAsDataURL(blob)
})
originalSrc.set.call(this, value)
}
})
img._Hijacked = true
}
})
if (pageCount>0 && images.length >= pageCount) {
observer.disconnect()
}
}
})
observer.observe(document.body, { subtree: true, childList: true })
4 changes: 2 additions & 2 deletions src/zh/onemanhua/build.gradle
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
ext {
extName = 'COLAMANGA'
extClass = '.Onemanhua'
extVersionCode = 24
extVersionCode = 25
isNsfw = true
}

apply from: "$rootDir/common.gradle"

dependencies {
implementation(project(":lib:synchrony"))
implementation project(':lib:dataimage')
}
Loading