[ExHentai] Pages preview support
parent
db0782c61a
commit
cc437b8cd4
@ -0,0 +1,52 @@
|
|||||||
|
package org.koitharu.kotatsu.core.parser
|
||||||
|
|
||||||
|
import org.jsoup.nodes.Element
|
||||||
|
import org.koitharu.kotatsu.parsers.util.attrOrNull
|
||||||
|
import org.koitharu.kotatsu.parsers.util.nullIfEmpty
|
||||||
|
import org.koitharu.kotatsu.parsers.util.splitByWhitespace
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility class for parsing the `background` property of css
|
||||||
|
*/
|
||||||
|
public class CSSBackground private constructor(
|
||||||
|
public val url: String,
|
||||||
|
public val left: Int,
|
||||||
|
public val top: Int,
|
||||||
|
public val width: Int,
|
||||||
|
public val height: Int,
|
||||||
|
) {
|
||||||
|
|
||||||
|
public val right: Int
|
||||||
|
get() = left + width
|
||||||
|
|
||||||
|
public val bottom: Int
|
||||||
|
get() = top + height
|
||||||
|
|
||||||
|
internal companion object {
|
||||||
|
|
||||||
|
fun parse(element: Element): CSSBackground? {
|
||||||
|
val style = element.attrOrNull("style") ?: return null
|
||||||
|
val attrs = style.split(';').associate {
|
||||||
|
val trimmed = it.trim()
|
||||||
|
trimmed.substringBefore(':') to trimmed.substringAfter(':', "")
|
||||||
|
}
|
||||||
|
val width = attrs["width"]?.toPx() ?: return null
|
||||||
|
val height = attrs["height"]?.toPx() ?: return null
|
||||||
|
val bg = attrs["background"]?.substringAfter("url")?.splitByWhitespace() ?: return null
|
||||||
|
val url = bg.firstOrNull()?.removeSurrounding("(", ")")?.nullIfEmpty() ?: return null
|
||||||
|
val x = bg.getOrNull(1)?.toPx() ?: 0
|
||||||
|
val y = bg.getOrNull(2)?.toPx() ?: 0
|
||||||
|
return CSSBackground(
|
||||||
|
url = url,
|
||||||
|
left = -x,
|
||||||
|
top = y,
|
||||||
|
width = width,
|
||||||
|
height = height,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun String.toPx(): Int? {
|
||||||
|
return removeSuffix("px").toIntOrNull()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue