One object/class, version 0.0.4

This commit is contained in:
2017-07-22 13:31:36 +02:00
parent 7094dacbf3
commit 154fa0cc26
8 changed files with 121 additions and 138 deletions

View File

@@ -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" />

View File

@@ -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" />

View File

@@ -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" />

View File

@@ -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'

View File

@@ -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

View File

@@ -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)
}
}

View File

@@ -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)
}
}
}
}

View 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)
}
}
}
}
}