One object/class, version 0.0.4
This commit is contained in:
3
.idea/modules/komp.iml
generated
3
.idea/modules/komp.iml
generated
@@ -1,10 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module external.linked.project.id="komp" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="nl.astraeus" external.system.module.version="0.0.2-SNAPSHOT" type="JAVA_MODULE" version="4">
|
<module external.linked.project.id="komp" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="nl.astraeus" external.system.module.version="0.0.3-SNAPSHOT" type="JAVA_MODULE" version="4">
|
||||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
<exclude-output />
|
<exclude-output />
|
||||||
<content url="file://$MODULE_DIR$/../..">
|
<content url="file://$MODULE_DIR$/../..">
|
||||||
<excludeFolder url="file://$MODULE_DIR$/../../.gradle" />
|
<excludeFolder url="file://$MODULE_DIR$/../../.gradle" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/../../build" />
|
<excludeFolder url="file://$MODULE_DIR$/../../build" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/../../out" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
|||||||
15
.idea/modules/komp_main.iml
generated
15
.idea/modules/komp_main.iml
generated
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module external.linked.project.id="komp:main" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="nl.astraeus" external.system.module.type="sourceSet" external.system.module.version="0.0.2-SNAPSHOT" type="JAVA_MODULE" version="4">
|
<module external.linked.project.id="komp:main" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="nl.astraeus" external.system.module.type="sourceSet" external.system.module.version="0.0.3-SNAPSHOT" type="JAVA_MODULE" version="4">
|
||||||
<component name="FacetManager">
|
<component name="FacetManager">
|
||||||
<facet type="kotlin-language" name="Kotlin">
|
<facet type="kotlin-language" name="Kotlin">
|
||||||
<configuration version="2" platform="JavaScript " useProjectSettings="false">
|
<configuration version="2" platform="JavaScript " useProjectSettings="false">
|
||||||
@@ -12,24 +12,23 @@
|
|||||||
<option name="sourceMap" value="true" />
|
<option name="sourceMap" value="true" />
|
||||||
<option name="metaInfo" value="true" />
|
<option name="metaInfo" value="true" />
|
||||||
<option name="target" value="v5" />
|
<option name="target" value="v5" />
|
||||||
<option name="moduleKind" value="plain" />
|
|
||||||
<option name="main" value="call" />
|
<option name="main" value="call" />
|
||||||
<option name="languageVersion" value="1.1" />
|
<option name="languageVersion" value="1.1" />
|
||||||
<option name="apiVersion" value="1.1" />
|
<option name="apiVersion" value="1.1" />
|
||||||
<option name="suppressWarnings" value="true" />
|
|
||||||
<option name="pluginClasspaths">
|
|
||||||
<array />
|
|
||||||
</option>
|
|
||||||
<option name="coroutinesWarn" value="true" />
|
|
||||||
<option name="pluginOptions">
|
<option name="pluginOptions">
|
||||||
<array />
|
<array />
|
||||||
</option>
|
</option>
|
||||||
|
<option name="pluginClasspaths">
|
||||||
|
<array />
|
||||||
|
</option>
|
||||||
|
<option name="suppressWarnings" value="true" />
|
||||||
|
<option name="coroutinesWarn" value="true" />
|
||||||
</compilerArguments>
|
</compilerArguments>
|
||||||
</configuration>
|
</configuration>
|
||||||
</facet>
|
</facet>
|
||||||
</component>
|
</component>
|
||||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||||
<output url="file://$MODULE_DIR$/../../build/kotlinjs" />
|
<output url="file://$MODULE_DIR$/../../out/production/classes" />
|
||||||
<exclude-output />
|
<exclude-output />
|
||||||
<content url="file://$MODULE_DIR$/../../src/main">
|
<content url="file://$MODULE_DIR$/../../src/main">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/../../src/main/java" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/../../src/main/java" isTestSource="false" />
|
||||||
|
|||||||
11
.idea/modules/komp_test.iml
generated
11
.idea/modules/komp_test.iml
generated
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module external.linked.project.id="komp:test" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="nl.astraeus" external.system.module.type="sourceSet" external.system.module.version="0.0.2-SNAPSHOT" type="JAVA_MODULE" version="4">
|
<module external.linked.project.id="komp:test" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="nl.astraeus" external.system.module.type="sourceSet" external.system.module.version="0.0.3-SNAPSHOT" type="JAVA_MODULE" version="4">
|
||||||
<component name="FacetManager">
|
<component name="FacetManager">
|
||||||
<facet type="kotlin-language" name="Kotlin">
|
<facet type="kotlin-language" name="Kotlin">
|
||||||
<configuration version="2" platform="JavaScript " useProjectSettings="false">
|
<configuration version="2" platform="JavaScript " useProjectSettings="false">
|
||||||
@@ -9,23 +9,22 @@
|
|||||||
<option name="noStdlib" value="true" />
|
<option name="noStdlib" value="true" />
|
||||||
<option name="metaInfo" value="true" />
|
<option name="metaInfo" value="true" />
|
||||||
<option name="target" value="v5" />
|
<option name="target" value="v5" />
|
||||||
<option name="moduleKind" value="plain" />
|
|
||||||
<option name="main" value="call" />
|
<option name="main" value="call" />
|
||||||
<option name="languageVersion" value="1.1" />
|
<option name="languageVersion" value="1.1" />
|
||||||
<option name="apiVersion" value="1.1" />
|
<option name="apiVersion" value="1.1" />
|
||||||
|
<option name="pluginOptions">
|
||||||
|
<array />
|
||||||
|
</option>
|
||||||
<option name="pluginClasspaths">
|
<option name="pluginClasspaths">
|
||||||
<array />
|
<array />
|
||||||
</option>
|
</option>
|
||||||
<option name="coroutinesWarn" value="true" />
|
<option name="coroutinesWarn" value="true" />
|
||||||
<option name="pluginOptions">
|
|
||||||
<array />
|
|
||||||
</option>
|
|
||||||
</compilerArguments>
|
</compilerArguments>
|
||||||
</configuration>
|
</configuration>
|
||||||
</facet>
|
</facet>
|
||||||
</component>
|
</component>
|
||||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||||
<output-test url="file://$MODULE_DIR$/../../build/classes/test" />
|
<output-test url="file://$MODULE_DIR$/../../out/test/classes" />
|
||||||
<exclude-output />
|
<exclude-output />
|
||||||
<content url="file://$MODULE_DIR$/../../src/test">
|
<content url="file://$MODULE_DIR$/../../src/test">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/../../src/test/java" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/../../src/test/java" isTestSource="true" />
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
group 'nl.astraeus'
|
group 'nl.astraeus'
|
||||||
version '0.0.3-SNAPSHOT'
|
version '0.0.4-SNAPSHOT'
|
||||||
|
|
||||||
apply plugin: 'kotlin2js'
|
apply plugin: 'kotlin2js'
|
||||||
apply plugin: 'idea'
|
apply plugin: 'idea'
|
||||||
|
|||||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,4 +1,4 @@
|
|||||||
#Wed May 10 19:56:18 CEST 2017
|
#Wed Jun 14 13:25:37 CEST 2017
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
package nl.astraeus.komp
|
|
||||||
|
|
||||||
import kotlinx.html.DIV
|
|
||||||
import kotlinx.html.TagConsumer
|
|
||||||
import kotlinx.html.dom.create
|
|
||||||
import org.w3c.dom.HTMLElement
|
|
||||||
import kotlin.browser.document
|
|
||||||
|
|
||||||
fun DIV.include(component: HtmlComponent) {
|
|
||||||
val result = component.render(this.consumer as TagConsumer<HTMLElement>)
|
|
||||||
|
|
||||||
component.element = result
|
|
||||||
Komp.define(result, component)
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class HtmlComponent {
|
|
||||||
var element: HTMLElement? = null
|
|
||||||
var rendered = false
|
|
||||||
|
|
||||||
fun create(): HTMLElement {
|
|
||||||
var elem =element
|
|
||||||
if (elem != null) {
|
|
||||||
Komp.remove(elem)
|
|
||||||
}
|
|
||||||
|
|
||||||
elem = render(document.create)
|
|
||||||
rendered = true
|
|
||||||
|
|
||||||
Komp.define(elem, this)
|
|
||||||
|
|
||||||
this.element = elem
|
|
||||||
|
|
||||||
return elem
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract fun render(consumer: TagConsumer<HTMLElement>): HTMLElement
|
|
||||||
|
|
||||||
open fun refresh() {
|
|
||||||
if (rendered) {
|
|
||||||
Komp.refresh(element)
|
|
||||||
} else {
|
|
||||||
update()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun update() {
|
|
||||||
Komp.refresh(element)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
package nl.astraeus.komp
|
|
||||||
|
|
||||||
import org.w3c.dom.HTMLElement
|
|
||||||
import kotlin.collections.component1
|
|
||||||
import kotlin.collections.component2
|
|
||||||
import kotlin.collections.set
|
|
||||||
|
|
||||||
/**
|
|
||||||
* User: rnentjes
|
|
||||||
* Date: 29-3-17
|
|
||||||
* Time: 15:46
|
|
||||||
*/
|
|
||||||
|
|
||||||
object Komp {
|
|
||||||
|
|
||||||
private val elements: MutableMap<HTMLElement, HtmlComponent> = HashMap()
|
|
||||||
private val elementList: MutableList<HtmlComponent> = ArrayList()
|
|
||||||
|
|
||||||
fun define(element: HTMLElement, component: HtmlComponent) {
|
|
||||||
elements[element] = component
|
|
||||||
elementList.add(component)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun create(parent: HTMLElement, component: HtmlComponent, insertAsFirst: Boolean = false) {
|
|
||||||
val element = component.create()
|
|
||||||
|
|
||||||
if (insertAsFirst && parent.childElementCount > 0) {
|
|
||||||
parent.insertBefore(element, parent.firstChild)
|
|
||||||
} else {
|
|
||||||
parent.appendChild(element)
|
|
||||||
}
|
|
||||||
|
|
||||||
elements[element] = component
|
|
||||||
elementList.add(component)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun remove(element: HTMLElement) {
|
|
||||||
val component = elements[element]
|
|
||||||
|
|
||||||
elements.remove(element)
|
|
||||||
elementList.remove(component)
|
|
||||||
}
|
|
||||||
|
|
||||||
@JsName("remove")
|
|
||||||
fun remove(component: HtmlComponent) {
|
|
||||||
for ((key, value) in elements) {
|
|
||||||
if (value == component) {
|
|
||||||
elements.remove(key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
elementList.remove(component)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun refresh(component: HtmlComponent) {
|
|
||||||
refresh(component.element)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun refresh(element: HTMLElement?) {
|
|
||||||
if (element != null) {
|
|
||||||
val comp = elements[element]
|
|
||||||
|
|
||||||
if (element is HTMLElement && comp != null) {
|
|
||||||
val parent = element.parentElement
|
|
||||||
val newElement = comp.create()
|
|
||||||
|
|
||||||
parent?.replaceChild(newElement, element)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
105
src/main/kotlin/nl/astraeus/komp/Komponent.kt
Normal file
105
src/main/kotlin/nl/astraeus/komp/Komponent.kt
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
package nl.astraeus.komp
|
||||||
|
|
||||||
|
import kotlinx.html.DIV
|
||||||
|
import kotlinx.html.TagConsumer
|
||||||
|
import kotlinx.html.dom.create
|
||||||
|
import org.w3c.dom.HTMLElement
|
||||||
|
import kotlin.browser.document
|
||||||
|
|
||||||
|
fun DIV.include(component: Komponent) {
|
||||||
|
val result = component.render(this.consumer as TagConsumer<HTMLElement>)
|
||||||
|
|
||||||
|
component.element = result
|
||||||
|
Komponent.define(result, component)
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class Komponent {
|
||||||
|
var element: HTMLElement? = null
|
||||||
|
var rendered = false
|
||||||
|
|
||||||
|
fun create(): HTMLElement {
|
||||||
|
var elem =element
|
||||||
|
if (elem != null) {
|
||||||
|
remove(elem)
|
||||||
|
}
|
||||||
|
|
||||||
|
elem = render(document.create)
|
||||||
|
rendered = true
|
||||||
|
|
||||||
|
define(elem, this)
|
||||||
|
|
||||||
|
this.element = elem
|
||||||
|
|
||||||
|
return elem
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract fun render(consumer: TagConsumer<HTMLElement>): HTMLElement
|
||||||
|
|
||||||
|
open fun refresh() {
|
||||||
|
if (rendered) {
|
||||||
|
refresh(element)
|
||||||
|
} else {
|
||||||
|
update()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun update() {
|
||||||
|
refresh(element)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
private val elements: MutableMap<HTMLElement, Komponent> = HashMap()
|
||||||
|
private val elementList: MutableList<Komponent> = ArrayList()
|
||||||
|
|
||||||
|
fun define(element: HTMLElement, component: Komponent) {
|
||||||
|
elements[element] = component
|
||||||
|
elementList.add(component)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun create(parent: HTMLElement, component: Komponent, insertAsFirst: Boolean = false) {
|
||||||
|
val element = component.create()
|
||||||
|
|
||||||
|
if (insertAsFirst && parent.childElementCount > 0) {
|
||||||
|
parent.insertBefore(element, parent.firstChild)
|
||||||
|
} else {
|
||||||
|
parent.appendChild(element)
|
||||||
|
}
|
||||||
|
|
||||||
|
elements[element] = component
|
||||||
|
elementList.add(component)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun remove(element: HTMLElement) {
|
||||||
|
val component = elements[element]
|
||||||
|
|
||||||
|
elements.remove(element)
|
||||||
|
elementList.remove(component)
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsName("remove")
|
||||||
|
fun remove(component: Komponent) {
|
||||||
|
for ((key, value) in elements) {
|
||||||
|
if (value == component) {
|
||||||
|
elements.remove(key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elementList.remove(component)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun refresh(component: Komponent) {
|
||||||
|
refresh(component.element)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun refresh(element: HTMLElement?) {
|
||||||
|
if (element != null) {
|
||||||
|
elements[element]?.let {
|
||||||
|
val parent = element.parentElement
|
||||||
|
val newElement = it.create()
|
||||||
|
|
||||||
|
parent?.replaceChild(newElement, element)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user