diff --git a/src/main/kotlin/ley/anvil/modpacktools/commands/CreateModlist.kt b/src/main/kotlin/ley/anvil/modpacktools/commands/CreateModlist.kt index 6df45b6..99652cc 100644 --- a/src/main/kotlin/ley/anvil/modpacktools/commands/CreateModlist.kt +++ b/src/main/kotlin/ley/anvil/modpacktools/commands/CreateModlist.kt @@ -1,19 +1,5 @@ package ley.anvil.modpacktools.commands -import j2html.TagCreator.a -import j2html.TagCreator.b -import j2html.TagCreator.body -import j2html.TagCreator.each -import j2html.TagCreator.head -import j2html.TagCreator.html -import j2html.TagCreator.img -import j2html.TagCreator.li -import j2html.TagCreator.p -import j2html.TagCreator.style -import j2html.TagCreator.table -import j2html.TagCreator.td -import j2html.TagCreator.tr -import j2html.TagCreator.ul import j2html.utils.CSSMin.compressCss import ley.anvil.addonscript.wrapper.MetaData import ley.anvil.modpacktools.MPJH @@ -22,6 +8,7 @@ import ley.anvil.modpacktools.command.AbstractCommand import ley.anvil.modpacktools.command.CommandReturn import ley.anvil.modpacktools.command.CommandReturn.Companion.success import ley.anvil.modpacktools.command.LoadCommand +import ley.anvil.modpacktools.util.BuilderContainerTag.Companion.html import ley.anvil.modpacktools.util.arg import ley.anvil.modpacktools.util.fPrintln import net.sourceforge.argparse4j.impl.Arguments.storeTrue @@ -102,10 +89,9 @@ object CreateModlist : AbstractCommand("CreateModlist") { private fun doHtml(outFile: File, all: Boolean, sorting: Comparator): CommandReturn { fPrintln("Making HTML file $outFile", TERMC.green) val writer = FileWriter(outFile) - val html = html( - head( - style( - //Fancy css! + val html = html { + "head" { + "style"( compressCss( IOUtils.toString( ClassLoader.getSystemResourceAsStream("commands/createmodlist/style.css"), @@ -113,55 +99,91 @@ object CreateModlist : AbstractCommand("CreateModlist") { ) ) ) - ), - body( - table( - tr( - td(), - td(b("Name")), - td(b("Contributors")), - td(b("Description")) - ), - each(getMods(all, sorting)) { - fPrintln("Writing relation ${it.name}", TERMC.blue) - tr( - td( - if(it.icon != null) a( - img().withSrc(it.icon) - .withClass("img") - ).withHref(it.website) else null - ), - td( - run { - val a = a(it.name) - //Open in new tab - .withRel("noopener noreferrer") - .withTarget("_blank") - if(it.website != null) - a.withHref(it.website) - a - } - ), - td( - ul( - each(it.contributors) {contr -> - li(contr.key) - //for contributor colors - .withClass("contributor_${contr.value.getOrElse(0) {""}}") - } - ) - ), - td( - each(it.description?.asList() ?: listOf()) {d: String -> - p(d) - } - ) - .withClass("description") - ) + } + + "body" { + "div" { + val meta = MPJH.asWrapper!!.json.meta + withId("header") + "div" { + withClass("img") + meta.icon?.let { + "img" { + withSrc(it) + } + } } - ) - ) - ).render() + "div" { + "p" { + withHref(meta.website) + "b"("Name") + } + "p"(meta.name ?: "") + } + "div" { + "p" {"b"("Contributors")} + "ul" { + for(con in meta.contributors) + "li"(con.name) { + //for contributor colors + withClass("contributor_${con.roles.getOrElse(0) {""}}") + } + } + } + "div" { + "p" {"b"("Description")} + "p"(meta.description?.joinToString("\n") ?: "") + } + } + "table" { + "tr" { + "td"() + "td" {"b"("Name")} + "td" {"b"("Contributors")} + "td" {"b"("Description")} + } + + for(mod in getMods(all, sorting)) { + fPrintln("Writing relation ${mod.name}", TERMC.blue) + "tr" { + "td" { + mod.icon?.let { + "a" { + "img" { + withSrc(it) + withClass("img") + } + withHref(mod.website) + } + } + } + "td" { + "a"(mod.name!!) { + //Open in new tab + withRel("noopener noreferrer") + withTarget("_blank") + mod.website?.let {withHref(it)} + } + } + "td" { + "ul" { + for(con in mod.contributors) + "li"(con.key) { + //for contributor colors + withClass("contributor_${con.value.getOrElse(0) {""}}") + } + } + } + "td" { + for(desc in mod.description ?: arrayOf("")) + "p"(desc) + withClass("description") + } + } + } + } + } + }.render() writer.write(html) writer.close() diff --git a/src/main/kotlin/ley/anvil/modpacktools/util/BuilderContainerTag.kt b/src/main/kotlin/ley/anvil/modpacktools/util/BuilderContainerTag.kt new file mode 100644 index 0000000..91e1811 --- /dev/null +++ b/src/main/kotlin/ley/anvil/modpacktools/util/BuilderContainerTag.kt @@ -0,0 +1,32 @@ +package ley.anvil.modpacktools.util + +import j2html.tags.ContainerTag +import j2html.tags.DomContent + +class BuilderContainerTag(tagName: String?) : ContainerTag(tagName) { + companion object { + fun html(block: BuilderContainerTag.() -> Unit) = BuilderContainerTag("html").apply {block()} + } + + override fun with(child: DomContent?): BuilderContainerTag { + super.with(child) + return this + } + + override fun withText(text: String?): BuilderContainerTag { + super.withText(text) + return this + } + + @JvmOverloads + operator fun String.invoke(block: (BuilderContainerTag.() -> Unit)? = null): BuilderContainerTag = + BuilderContainerTag(this).apply {block?.invoke(this)} + .apply {this@BuilderContainerTag.with(this)} + + operator fun String.invoke(content: String, block: (BuilderContainerTag.() -> Unit)? = null): BuilderContainerTag = + BuilderContainerTag(this).withText(content) + .apply { + block?.invoke(this) + this@BuilderContainerTag.with(this) + } +} diff --git a/src/main/resources/commands/createmodlist/style.css b/src/main/resources/commands/createmodlist/style.css index 0ee3a53..1a950c7 100644 --- a/src/main/resources/commands/createmodlist/style.css +++ b/src/main/resources/commands/createmodlist/style.css @@ -1,30 +1,48 @@ a:link { color: #f55; } + a:visited { color: #c5c; } + body { background-color: #333; color: #fff; font-family: sans-serif; } + .img { width: 100px; } + td { border: #999 3px; border-style: solid; } + .description { width: 100%; } + .contributor_owner { color: #f55; } + .contributor_author { color: orange; } + .contributor_contributor { color: green; } + +#header { + width: 100%; + overflow: hidden; +} + +#header div { + margin-right: 10px; + float: left; +} \ No newline at end of file