Skip to content

Commit 7aa30ef

Browse files
temporal state
1 parent aa17567 commit 7aa30ef

File tree

14 files changed

+255
-8
lines changed

14 files changed

+255
-8
lines changed

.github/workflows/commit-release.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ jobs:
1717
run: echo "version=` cat gradle.properties | grep ^version= | grep -o [\\.0-9]* `" >> $GITHUB_ENV
1818
- name: Build
1919
run: ./gradlew packageUberJarForCurrentOS
20-
env:
21-
additional_version: ""
2220
- name: Create Release
2321
id: create_release
2422
uses: actions/create-release@v1

mppAndroidProject.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
project.version = "$version" + System.getenv("additional_version")
1+
project.version = "$version" + (System.getenv("additional_version") != null ? System.getenv("additional_version") : "")
22
project.group = "$group"
33

44
// apply from: "$publishGradlePath"

mppJavaProject.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
project.version = "$version" + System.getenv("additional_version")
1+
project.version = "$version" + (System.getenv("additional_version") != null ? System.getenv("additional_version") : "")
22
project.group = "$group"
33

44
// apply from: "$publishGradlePath"

mppJsProject.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
project.version = "$version" + System.getenv("additional_version")
1+
project.version = "$version" + (System.getenv("additional_version") != null ? System.getenv("additional_version") : "")
22
project.group = "$group"
33

44
// apply from: "$publishGradlePath"
55

66
kotlin {
77
js (IR) {
8-
browser()
8+
browser {
9+
binaries.executable()
10+
}
911
nodejs()
1012
}
1113

web/build.gradle

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,14 @@ plugins {
44
}
55

66
apply from: "$mppJsProjectPresetPath"
7+
8+
kotlin {
9+
sourceSets {
10+
commonMain {
11+
dependencies {
12+
implementation project(":kmppscriptbuilder.core")
13+
implementation "dev.inmo:micro_utils.common:$micro_utils_version"
14+
}
15+
}
16+
}
17+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dev.inmo.kmppscriptbuilder.web
2+
3+
import dev.inmo.kmppscriptbuilder.web.views.MavenProjectInfoView
4+
import dev.inmo.kmppscriptbuilder.web.views.ProjectTypeView
5+
import kotlinx.browser.document
6+
7+
fun main() {
8+
document.addEventListener(
9+
"DOMContentLoaded",
10+
{
11+
val projectTypeView = ProjectTypeView()
12+
val mavenInfoTypeView = MavenProjectInfoView()
13+
}
14+
)
15+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dev.inmo.kmppscriptbuilder.web.utils
2+
3+
import org.w3c.dom.HTMLElement
4+
5+
var HTMLElement.ukActive: Boolean
6+
get() = classList.contains("uk-active")
7+
set(value) {
8+
if (value) {
9+
classList.add("uk-active")
10+
} else {
11+
classList.remove("uk-active")
12+
}
13+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package dev.inmo.kmppscriptbuilder.web.views
2+
3+
import dev.inmo.kmppscriptbuilder.core.models.Developer
4+
import org.w3c.dom.*
5+
6+
class DevelopersView(rootElement: HTMLElement) : ListView<Developer>(rootElement, "Add developer", "Remove developer") {
7+
private val HTMLElement.usernameElement: HTMLInputElement
8+
get() = children[0] as HTMLInputElement
9+
private val HTMLElement.nameElement: HTMLInputElement
10+
get() = children[1] as HTMLInputElement
11+
private val HTMLElement.emailElement: HTMLInputElement
12+
get() = children[2] as HTMLInputElement
13+
14+
var developers: List<Developer>
15+
get() = elements.values.map {
16+
Developer(it.usernameElement.value, it.nameElement.value, it.emailElement.value)
17+
}
18+
set(value) {
19+
data = value
20+
}
21+
22+
override fun createPlainObject(): Developer = Developer("", "", "")
23+
24+
override fun HTMLElement.placeElement(value: Developer) {
25+
createTextField("Developer ID", "Developer username").value = value.id
26+
createTextField("Developer name", "").value = value.name
27+
createTextField("Developer E-Mail", "").value = value.eMail
28+
}
29+
30+
override fun HTMLElement.updateElement(from: Developer, to: Developer) {
31+
usernameElement.value = to.id
32+
nameElement.value = to.name
33+
emailElement.value = to.eMail
34+
}
35+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package dev.inmo.kmppscriptbuilder.web.views
2+
3+
import dev.inmo.micro_utils.common.calculateDiff
4+
import kotlinx.browser.document
5+
import kotlinx.dom.appendElement
6+
import org.w3c.dom.HTMLElement
7+
8+
abstract class ListView<T>(
9+
private val rootElement: HTMLElement,
10+
addButtonText: String = "Add",
11+
private val removeButtonText: String = "Remove"
12+
) : View {
13+
protected val elements = mutableMapOf<T, HTMLElement>()
14+
protected var data: List<T> = emptyList()
15+
set(value) {
16+
val old = field
17+
field = value
18+
val diff = old.calculateDiff(value)
19+
diff.removed.forEach {
20+
rootElement.removeChild(elements[it.value] ?: return@forEach)
21+
}
22+
diff.added.forEach {
23+
val element = instantiateElement()
24+
element.placeElement(it.value)
25+
elements[it.value] = element
26+
element.addRemoveButton(it.value)
27+
}
28+
diff.replaced.forEach { (old, new) ->
29+
val element = elements[old.value] ?.also { it.updateElement(old.value, new.value) }
30+
if (element == null) {
31+
val newElement = instantiateElement()
32+
newElement.placeElement(new.value)
33+
elements[new.value] = newElement
34+
}
35+
}
36+
}
37+
38+
init {
39+
rootElement.createButton(addButtonText).apply {
40+
onclick = {
41+
data += createPlainObject()
42+
Unit
43+
}
44+
}
45+
}
46+
47+
protected abstract fun createPlainObject(): T
48+
protected abstract fun HTMLElement.placeElement(value: T)
49+
protected abstract fun HTMLElement.updateElement(from: T, to: T)
50+
51+
private fun HTMLElement.addRemoveButton(value: T) {
52+
createButton(removeButtonText).onclick = {
53+
data = data.filter {
54+
it != value
55+
}
56+
Unit
57+
}
58+
}
59+
private fun instantiateElement() = rootElement.appendElement("div") {
60+
classList.add("uk-padding-small")
61+
} as HTMLElement
62+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package dev.inmo.kmppscriptbuilder.web.views
2+
3+
import dev.inmo.kmppscriptbuilder.core.models.MavenConfig
4+
import dev.inmo.kmppscriptbuilder.core.models.SonatypeRepository
5+
import kotlinx.browser.document
6+
import org.w3c.dom.HTMLElement
7+
import org.w3c.dom.HTMLInputElement
8+
9+
class MavenProjectInfoView : View {
10+
private val nameElement = document.getElementById("projectNameInput") as HTMLInputElement
11+
private val descriptionElement = document.getElementById("projectDescriptionInput") as HTMLInputElement
12+
private val urlElement = document.getElementById("projectUrlInput") as HTMLInputElement
13+
private val vcsUrlElement = document.getElementById("projectVCSUrlInput") as HTMLInputElement
14+
private val includeGpgElement = document.getElementById("includeGpgSignToggle") as HTMLInputElement
15+
private val includeMavenCentralElement = document.getElementById("includeMavenCentralTargetRepoToggle") as HTMLInputElement
16+
private val developersView = DevelopersView(document.getElementById("developersListDiv") as HTMLElement)
17+
18+
var mavenConfig: MavenConfig
19+
get() = MavenConfig(
20+
nameElement.value,
21+
descriptionElement.value,
22+
urlElement.value,
23+
vcsUrlElement.value,
24+
includeGpgElement.checked,
25+
developersView.developers,// TODO:: Add developers
26+
// TODO:: Add repositories
27+
if (includeMavenCentralElement.checked) {
28+
listOf(SonatypeRepository)
29+
} else {
30+
emptyList()
31+
}
32+
)
33+
set(value) {
34+
nameElement.value = value.name
35+
descriptionElement.value = value.description
36+
urlElement.value = value.url
37+
vcsUrlElement.value = value.vcsUrl
38+
includeGpgElement.checked = value.includeGpgSigning
39+
developersView.developers = value.developers
40+
// TODO:: Add repositories
41+
val reposWithoutSonatype = value.repositories.filter { it != SonatypeRepository }
42+
includeMavenCentralElement.checked = value.repositories.size != reposWithoutSonatype.size
43+
}
44+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package dev.inmo.kmppscriptbuilder.web.views
2+
3+
import dev.inmo.kmppscriptbuilder.core.models.*
4+
import dev.inmo.kmppscriptbuilder.web.utils.ukActive
5+
import kotlinx.browser.document
6+
import org.w3c.dom.HTMLElement
7+
8+
class ProjectTypeView : View {
9+
private val mppProjectTypeElement = document.getElementById("mppProjectType") as HTMLElement
10+
private val jvmProjectTypeElement = document.getElementById("jvmProjectType") as HTMLElement
11+
12+
var projectType: ProjectType
13+
get() = if (jvmProjectTypeElement.ukActive) {
14+
JVMProjectType
15+
} else {
16+
MultiplatformProjectType
17+
}
18+
set(value) {
19+
mppProjectTypeElement.ukActive = value == MultiplatformProjectType
20+
jvmProjectTypeElement.ukActive = value == JVMProjectType
21+
}
22+
23+
init {
24+
mppProjectTypeElement.onclick = {
25+
projectType = MultiplatformProjectType
26+
Unit
27+
}
28+
jvmProjectTypeElement.onclick = {
29+
projectType = JVMProjectType
30+
Unit
31+
}
32+
}
33+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package dev.inmo.kmppscriptbuilder.web.views
2+
3+
interface View
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package dev.inmo.kmppscriptbuilder.web.views
2+
3+
import kotlinx.dom.appendElement
4+
import org.w3c.dom.*
5+
import kotlin.random.Random
6+
7+
fun HTMLElement.createTextField(
8+
label: String,
9+
placeholder: String
10+
): HTMLInputElement {
11+
val uuid = "r" + Random.nextLong()
12+
return appendElement("div") {
13+
classList.add("uk-margin", "uk-width-1-1")
14+
appendElement("label") {
15+
classList.add("uk-form-label")
16+
setAttribute("for", uuid)
17+
innerText = label
18+
}
19+
}.appendElement("input") {
20+
id = uuid
21+
classList.add("uk-input", "uk-width-expand")
22+
setAttribute("type", "text")
23+
setAttribute("placeholder", placeholder)
24+
} as HTMLInputElement
25+
}
26+
27+
fun HTMLElement.createButton(text: String): HTMLButtonElement = appendElement("button") {
28+
classList.add("uk-button", "uk-button-primary")
29+
innerHTML = text
30+
} as HTMLButtonElement

web/src/jsMain/resources/index.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@
6666
</div>
6767

6868
<legend class="uk-legend">Developers info</legend>
69-
<div class="uk-padding-small">
70-
<button class="uk-button uk-button-primary">Add developer</button>
69+
<div id="developersListDiv" class="uk-padding-small">
7170
</div>
7271

7372
<legend class="uk-legend">Repositories info</legend>
@@ -79,5 +78,7 @@
7978
<!-- UIkit JS -->
8079
<script src="https://cdn.jsdelivr.net/npm/uikit@3.6.17/dist/js/uikit.min.js"></script>
8180
<script src="https://cdn.jsdelivr.net/npm/uikit@3.6.17/dist/js/uikit-icons.min.js"></script>
81+
<!-- Internal JS -->
82+
<script src="kmppscriptbuilder.web.js"></script>
8283
</body>
8384
</html>

0 commit comments

Comments
 (0)