Merge remember branch, Update to 0.2.5-SNAPSHOT
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
kotlin("multiplatform") version "1.3.71"
|
kotlin("multiplatform") version "1.4.30"
|
||||||
`maven-publish`
|
`maven-publish`
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "nl.astraeus"
|
group = "nl.astraeus"
|
||||||
version = "0.1.21-SNAPSHOT"
|
version = "0.2.5-SNAPSHOT"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
@@ -15,7 +16,7 @@ kotlin {
|
|||||||
/* Targets configuration omitted.
|
/* Targets configuration omitted.
|
||||||
* To find out how to configure the targets, please follow the link:
|
* To find out how to configure the targets, please follow the link:
|
||||||
* https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#setting-up-targets */
|
* https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#setting-up-targets */
|
||||||
js {
|
js(BOTH) {
|
||||||
browser {
|
browser {
|
||||||
//produceKotlinLibrary()
|
//produceKotlinLibrary()
|
||||||
testTask {
|
testTask {
|
||||||
@@ -31,14 +32,12 @@ kotlin {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(kotlin("stdlib-common"))
|
implementation(kotlin("stdlib-common"))
|
||||||
|
|
||||||
//implementation("org.jetbrains.kotlinx:kotlinx-html:0.7.2-build-1711")
|
api("org.jetbrains.kotlinx:kotlinx-html-js:0.7.2")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val jsMain by getting {
|
val jsMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(kotlin("stdlib-js"))
|
implementation(kotlin("stdlib-js"))
|
||||||
|
|
||||||
api("org.jetbrains.kotlinx:kotlinx-html-js:0.7.1")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val jsTest by getting {
|
val jsTest by getting {
|
||||||
|
|||||||
38
komp.commonMain.iml
Normal file
38
komp.commonMain.iml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module external.linked.project.id="komp:commonMain" 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.2.5-SNAPSHOT" type="JAVA_MODULE" version="4">
|
||||||
|
<component name="FacetManager">
|
||||||
|
<facet type="kotlin-language" name="Kotlin">
|
||||||
|
<configuration version="3" platform="Common (experimental) " allPlatforms="JS []/JVM [1.6]/Native []/Native [general]" useProjectSettings="false" isTestModule="false" externalProjectId="komp" pureKotlinSourceFolders="$MODULE_DIR$/src/jsMain/kotlin;/home/rnentjes/Development/komp/komp/build/externals/komp-jsLegacy/src;/home/rnentjes/Development/komp/komp/build/externals/komp-jsIr/src;/home/rnentjes/Development/komp/komp/src/jsTest/kotlin;/home/rnentjes/Development/komp/komp/src/commonMain/kotlin">
|
||||||
|
<newMppModelJpsModuleKind>SOURCE_SET_HOLDER</newMppModelJpsModuleKind>
|
||||||
|
<compilerSettings />
|
||||||
|
<compilerArguments>
|
||||||
|
<option name="languageVersion" value="1.4" />
|
||||||
|
<option name="apiVersion" value="1.4" />
|
||||||
|
<option name="pluginOptions">
|
||||||
|
<array />
|
||||||
|
</option>
|
||||||
|
<option name="pluginClasspaths">
|
||||||
|
<array>
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-jvm/1.4.30/7d0085e5781847da84580d16239c1c4e0980bdb0/kotlin-scripting-jvm-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-common/1.4.30/c7896c5c6b504f44e7cf9f5719d4393e20680666/kotlin-scripting-common-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core/1.3.8/f62be6d4cbf27781c2969867b4ed952f38378492/kotlinx-coroutines-core-1.3.8.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.4.30/d10d1e10f47006ee08162dde039e38ac487de4ac/kotlin-stdlib-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.4.30/bb9a3173350f55732416ee27956ea8f9b81f4dbb/kotlin-stdlib-common-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-script-runtime/1.4.30/b9c2a1fab9217623fc0fbadf6190e77eed6f054d/kotlin-script-runtime-1.4.30.jar" />
|
||||||
|
</array>
|
||||||
|
</option>
|
||||||
|
<option name="multiPlatform" value="true" />
|
||||||
|
</compilerArguments>
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$/src/commonMain" />
|
||||||
|
<orderEntry type="jdk" jdkName="Kotlin SDK" jdkType="KotlinSDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.4.30" level="project" />
|
||||||
|
<orderEntry type="library" name="Gradle: org.jetbrains.kotlinx:kotlinx-html-common:0.7.2" level="project" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
44
komp.commonTest.iml
Normal file
44
komp.commonTest.iml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module external.linked.project.id="komp:commonTest" 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.2.5-SNAPSHOT" type="JAVA_MODULE" version="4">
|
||||||
|
<component name="FacetManager">
|
||||||
|
<facet type="kotlin-language" name="Kotlin">
|
||||||
|
<configuration version="3" platform="Common (experimental) " allPlatforms="JS []/JVM [1.6]/Native []/Native [general]" useProjectSettings="false" isTestModule="true" externalProjectId="komp" pureKotlinSourceFolders="$MODULE_DIR$/src/jsMain/kotlin;/home/rnentjes/Development/komp/komp/build/externals/komp-jsLegacy/src;/home/rnentjes/Development/komp/komp/build/externals/komp-jsIr/src;/home/rnentjes/Development/komp/komp/src/jsTest/kotlin;/home/rnentjes/Development/komp/komp/src/commonMain/kotlin">
|
||||||
|
<newMppModelJpsModuleKind>SOURCE_SET_HOLDER</newMppModelJpsModuleKind>
|
||||||
|
<externalSystemTestTasks>
|
||||||
|
<externalSystemTestTask>jsLegacyBrowserTest|komp:jsTest|jsLegacy</externalSystemTestTask>
|
||||||
|
</externalSystemTestTasks>
|
||||||
|
<compilerSettings />
|
||||||
|
<compilerArguments>
|
||||||
|
<option name="languageVersion" value="1.4" />
|
||||||
|
<option name="apiVersion" value="1.4" />
|
||||||
|
<option name="pluginOptions">
|
||||||
|
<array />
|
||||||
|
</option>
|
||||||
|
<option name="pluginClasspaths">
|
||||||
|
<array>
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-jvm/1.4.30/7d0085e5781847da84580d16239c1c4e0980bdb0/kotlin-scripting-jvm-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-common/1.4.30/c7896c5c6b504f44e7cf9f5719d4393e20680666/kotlin-scripting-common-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core/1.3.8/f62be6d4cbf27781c2969867b4ed952f38378492/kotlinx-coroutines-core-1.3.8.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.4.30/d10d1e10f47006ee08162dde039e38ac487de4ac/kotlin-stdlib-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.4.30/bb9a3173350f55732416ee27956ea8f9b81f4dbb/kotlin-stdlib-common-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-script-runtime/1.4.30/b9c2a1fab9217623fc0fbadf6190e77eed6f054d/kotlin-script-runtime-1.4.30.jar" />
|
||||||
|
</array>
|
||||||
|
</option>
|
||||||
|
<option name="multiPlatform" value="true" />
|
||||||
|
</compilerArguments>
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$/src/commonTest" />
|
||||||
|
<orderEntry type="jdk" jdkName="Kotlin SDK" jdkType="KotlinSDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="module" module-name="komp.commonMain" scope="TEST" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:1.4.30" level="project" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlinx:kotlinx-html-common:0.7.2" level="project" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.4.30" level="project" />
|
||||||
|
</component>
|
||||||
|
<component name="TestModuleProperties" production-module="komp.commonMain" />
|
||||||
|
</module>
|
||||||
2
komp.iml
2
komp.iml
@@ -1,5 +1,5 @@
|
|||||||
<?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.1.21-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.2.5-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$">
|
||||||
|
|||||||
51
komp.ipr
51
komp.ipr
@@ -13,6 +13,48 @@
|
|||||||
<element id="module-output" name="komp_main" />
|
<element id="module-output" name="komp_main" />
|
||||||
</root>
|
</root>
|
||||||
</artifact>
|
</artifact>
|
||||||
|
<artifact type="jar" name="komp-js-0.1.21-SNAPSHOT">
|
||||||
|
<output-path>$PROJECT_DIR$/build/libs</output-path>
|
||||||
|
<root id="archive" name="komp-js-0.1.21-SNAPSHOT.jar">
|
||||||
|
<element id="module-output" name="komp.jsMain" />
|
||||||
|
</root>
|
||||||
|
</artifact>
|
||||||
|
<artifact type="jar" name="komp-js-0.2.1-SNAPSHOT">
|
||||||
|
<output-path>$PROJECT_DIR$/build/libs</output-path>
|
||||||
|
<root id="archive" name="komp-js-0.2.1-SNAPSHOT.jar">
|
||||||
|
<element id="module-output" name="komp.jsMain" />
|
||||||
|
</root>
|
||||||
|
</artifact>
|
||||||
|
<artifact type="jar" name="komp-js-0.2.2-SNAPSHOT">
|
||||||
|
<output-path>$PROJECT_DIR$/build/libs</output-path>
|
||||||
|
<root id="archive" name="komp-js-0.2.2-SNAPSHOT.jar">
|
||||||
|
<element id="module-output" name="komp.jsMain" />
|
||||||
|
</root>
|
||||||
|
</artifact>
|
||||||
|
<artifact type="jar" name="komp-jslegacy-0.2.2-SNAPSHOT">
|
||||||
|
<output-path>$PROJECT_DIR$/build/libs</output-path>
|
||||||
|
<root id="archive" name="komp-jslegacy-0.2.2-SNAPSHOT.jar">
|
||||||
|
<element id="module-output" name="komp.jsMain" />
|
||||||
|
</root>
|
||||||
|
</artifact>
|
||||||
|
<artifact type="jar" name="komp-jslegacy-0.2.3-SNAPSHOT">
|
||||||
|
<output-path>$PROJECT_DIR$/build/libs</output-path>
|
||||||
|
<root id="archive" name="komp-jslegacy-0.2.3-SNAPSHOT.jar">
|
||||||
|
<element id="module-output" name="komp.jsMain" />
|
||||||
|
</root>
|
||||||
|
</artifact>
|
||||||
|
<artifact type="jar" name="komp-jslegacy-0.2.4-SNAPSHOT">
|
||||||
|
<output-path>$PROJECT_DIR$/build/libs</output-path>
|
||||||
|
<root id="archive" name="komp-jslegacy-0.2.4-SNAPSHOT.jar">
|
||||||
|
<element id="module-output" name="komp.jsMain" />
|
||||||
|
</root>
|
||||||
|
</artifact>
|
||||||
|
<artifact type="jar" name="komp-jslegacy-0.2.5-SNAPSHOT">
|
||||||
|
<output-path>$PROJECT_DIR$/build/libs</output-path>
|
||||||
|
<root id="archive" name="komp-jslegacy-0.2.5-SNAPSHOT.jar">
|
||||||
|
<element id="module-output" name="komp.jsMain" />
|
||||||
|
</root>
|
||||||
|
</artifact>
|
||||||
</component>
|
</component>
|
||||||
<component name="CheckStyle-IDEA">
|
<component name="CheckStyle-IDEA">
|
||||||
<option name="configuration">
|
<option name="configuration">
|
||||||
@@ -75,8 +117,6 @@
|
|||||||
<option value="$PROJECT_DIR$" />
|
<option value="$PROJECT_DIR$" />
|
||||||
</set>
|
</set>
|
||||||
</option>
|
</option>
|
||||||
<option name="resolveModulePerSourceSet" value="false" />
|
|
||||||
<option name="useAutoImport" value="true" />
|
|
||||||
</GradleProjectSettings>
|
</GradleProjectSettings>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
@@ -216,7 +256,7 @@
|
|||||||
<component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
|
<component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
|
||||||
<component name="ProjectModuleManager">
|
<component name="ProjectModuleManager">
|
||||||
<modules>
|
<modules>
|
||||||
<module fileurl="file://$PROJECT_DIR$/komp.iml" filepath="$PROJECT_DIR$/komp.iml" group="komp" />
|
<module fileurl="file://$PROJECT_DIR$/komp.iml" filepath="$PROJECT_DIR$/komp.iml" />
|
||||||
<module fileurl="file://$PROJECT_DIR$/komp_main.iml" filepath="$PROJECT_DIR$/komp_main.iml" group="komp" />
|
<module fileurl="file://$PROJECT_DIR$/komp_main.iml" filepath="$PROJECT_DIR$/komp_main.iml" group="komp" />
|
||||||
<module fileurl="file://$PROJECT_DIR$/komp_test.iml" filepath="$PROJECT_DIR$/komp_test.iml" group="komp" />
|
<module fileurl="file://$PROJECT_DIR$/komp_test.iml" filepath="$PROJECT_DIR$/komp_test.iml" group="komp" />
|
||||||
</modules>
|
</modules>
|
||||||
@@ -254,6 +294,11 @@
|
|||||||
<option name="name" value="maven" />
|
<option name="name" value="maven" />
|
||||||
<option name="url" value="http://nexus.astraeus.nl/nexus/content/groups/public" />
|
<option name="url" value="http://nexus.astraeus.nl/nexus/content/groups/public" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="BintrayJCenter" />
|
||||||
|
<option name="name" value="BintrayJCenter" />
|
||||||
|
<option name="url" value="https://jcenter.bintray.com/" />
|
||||||
|
</remote-repository>
|
||||||
</component>
|
</component>
|
||||||
<component name="RunManager">
|
<component name="RunManager">
|
||||||
<configuration default="true" type="Applet" factoryName="Applet">
|
<configuration default="true" type="Applet" factoryName="Applet">
|
||||||
|
|||||||
59
komp.jsMain.iml
Normal file
59
komp.jsMain.iml
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module external.linked.project.id="komp:jsMain" 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.2.5-SNAPSHOT" type="JAVA_MODULE" version="4">
|
||||||
|
<component name="FacetManager">
|
||||||
|
<facet type="kotlin-language" name="Kotlin">
|
||||||
|
<configuration version="3" platform="JavaScript " allPlatforms="JS []" useProjectSettings="false" isTestModule="false" externalProjectId="komp" pureKotlinSourceFolders="$MODULE_DIR$/src/jsMain/kotlin;/home/rnentjes/Development/komp/komp/build/externals/komp-jsLegacy/src;/home/rnentjes/Development/komp/komp/build/externals/komp-jsIr/src;/home/rnentjes/Development/komp/komp/src/jsTest/kotlin;/home/rnentjes/Development/komp/komp/src/commonMain/kotlin">
|
||||||
|
<dependsOnModuleNames>komp:commonMain</dependsOnModuleNames>
|
||||||
|
<sourceSets>
|
||||||
|
<sourceSet>komp.commonMain</sourceSet>
|
||||||
|
</sourceSets>
|
||||||
|
<newMppModelJpsModuleKind>COMPILATION_AND_SOURCE_SET_HOLDER</newMppModelJpsModuleKind>
|
||||||
|
<compilerSettings />
|
||||||
|
<compilerArguments>
|
||||||
|
<option name="outputFile" value="$MODULE_DIR$/build/js/packages/komp-jsLegacy/kotlin/komp-jsLegacy.js" />
|
||||||
|
<option name="noStdlib" value="true" />
|
||||||
|
<option name="sourceMap" value="true" />
|
||||||
|
<option name="metaInfo" value="true" />
|
||||||
|
<option name="target" value="v5" />
|
||||||
|
<option name="moduleKind" value="umd" />
|
||||||
|
<option name="main" value="call" />
|
||||||
|
<option name="languageVersion" value="1.4" />
|
||||||
|
<option name="apiVersion" value="1.4" />
|
||||||
|
<option name="pluginOptions">
|
||||||
|
<array />
|
||||||
|
</option>
|
||||||
|
<option name="pluginClasspaths">
|
||||||
|
<array>
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-script-runtime/1.4.30/b9c2a1fab9217623fc0fbadf6190e77eed6f054d/kotlin-script-runtime-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-common/1.4.30/c7896c5c6b504f44e7cf9f5719d4393e20680666/kotlin-scripting-common-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-jvm/1.4.30/7d0085e5781847da84580d16239c1c4e0980bdb0/kotlin-scripting-jvm-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.4.30/bb9a3173350f55732416ee27956ea8f9b81f4dbb/kotlin-stdlib-common-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.4.30/d10d1e10f47006ee08162dde039e38ac487de4ac/kotlin-stdlib-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core/1.3.8/f62be6d4cbf27781c2969867b4ed952f38378492/kotlinx-coroutines-core-1.3.8.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar" />
|
||||||
|
</array>
|
||||||
|
</option>
|
||||||
|
<option name="multiPlatform" value="true" />
|
||||||
|
<option name="errors">
|
||||||
|
<ArgumentParseErrors />
|
||||||
|
</option>
|
||||||
|
</compilerArguments>
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<output url="file://$MODULE_DIR$/build/js/packages/komp-jsLegacy/kotlin" />
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$/build/externals/komp-jsIr/src" />
|
||||||
|
<content url="file://$MODULE_DIR$/build/externals/komp-jsLegacy/src" />
|
||||||
|
<content url="file://$MODULE_DIR$/src/jsMain">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/jsMain/kotlin" type="kotlin-source" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Kotlin SDK" jdkType="KotlinSDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="module" module-name="komp.commonMain" />
|
||||||
|
<orderEntry type="library" name="Gradle: org.jetbrains.kotlinx:kotlinx-html-js:0.7.2" level="project" />
|
||||||
|
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:1.4.30" level="project" />
|
||||||
|
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.4.30" level="project" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
70
komp.jsTest.iml
Normal file
70
komp.jsTest.iml
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module external.linked.project.id="komp:jsTest" 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.2.5-SNAPSHOT" type="JAVA_MODULE" version="4">
|
||||||
|
<component name="FacetManager">
|
||||||
|
<facet type="kotlin-language" name="Kotlin">
|
||||||
|
<configuration version="3" platform="JavaScript " allPlatforms="JS []" useProjectSettings="false" isTestModule="true" externalProjectId="komp" pureKotlinSourceFolders="$MODULE_DIR$/src/jsMain/kotlin;/home/rnentjes/Development/komp/komp/build/externals/komp-jsLegacy/src;/home/rnentjes/Development/komp/komp/build/externals/komp-jsIr/src;/home/rnentjes/Development/komp/komp/src/jsTest/kotlin;/home/rnentjes/Development/komp/komp/src/commonMain/kotlin">
|
||||||
|
<dependsOnModuleNames>komp:commonTest</dependsOnModuleNames>
|
||||||
|
<sourceSets>
|
||||||
|
<sourceSet>komp.commonTest</sourceSet>
|
||||||
|
<sourceSet>komp.jsMain</sourceSet>
|
||||||
|
<sourceSet>komp.commonMain</sourceSet>
|
||||||
|
</sourceSets>
|
||||||
|
<newMppModelJpsModuleKind>COMPILATION_AND_SOURCE_SET_HOLDER</newMppModelJpsModuleKind>
|
||||||
|
<externalSystemTestTasks>
|
||||||
|
<externalSystemTestTask>jsLegacyBrowserTest|komp:jsTest|jsLegacy</externalSystemTestTask>
|
||||||
|
</externalSystemTestTasks>
|
||||||
|
<compilerSettings />
|
||||||
|
<compilerArguments>
|
||||||
|
<option name="outputFile" value="$MODULE_DIR$/build/js/packages/komp-jsLegacy-test/kotlin/komp-jsLegacy-test.js" />
|
||||||
|
<option name="noStdlib" value="true" />
|
||||||
|
<option name="sourceMap" value="true" />
|
||||||
|
<option name="metaInfo" value="true" />
|
||||||
|
<option name="target" value="v5" />
|
||||||
|
<option name="moduleKind" value="umd" />
|
||||||
|
<option name="main" value="call" />
|
||||||
|
<option name="languageVersion" value="1.4" />
|
||||||
|
<option name="apiVersion" value="1.4" />
|
||||||
|
<option name="pluginOptions">
|
||||||
|
<array />
|
||||||
|
</option>
|
||||||
|
<option name="pluginClasspaths">
|
||||||
|
<array>
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-script-runtime/1.4.30/b9c2a1fab9217623fc0fbadf6190e77eed6f054d/kotlin-script-runtime-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-common/1.4.30/c7896c5c6b504f44e7cf9f5719d4393e20680666/kotlin-scripting-common-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-jvm/1.4.30/7d0085e5781847da84580d16239c1c4e0980bdb0/kotlin-scripting-jvm-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.4.30/bb9a3173350f55732416ee27956ea8f9b81f4dbb/kotlin-stdlib-common-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.4.30/d10d1e10f47006ee08162dde039e38ac487de4ac/kotlin-stdlib-1.4.30.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core/1.3.8/f62be6d4cbf27781c2969867b4ed952f38378492/kotlinx-coroutines-core-1.3.8.jar" />
|
||||||
|
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar" />
|
||||||
|
</array>
|
||||||
|
</option>
|
||||||
|
<option name="multiPlatform" value="true" />
|
||||||
|
<option name="errors">
|
||||||
|
<ArgumentParseErrors />
|
||||||
|
</option>
|
||||||
|
</compilerArguments>
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<output-test url="file://$MODULE_DIR$/build/js/packages/komp-jsLegacy-test/kotlin" />
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$/src/jsTest">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/jsTest/kotlin" type="kotlin-test" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Kotlin SDK" jdkType="KotlinSDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="module" module-name="komp.commonMain" scope="TEST" />
|
||||||
|
<orderEntry type="module" module-name="komp.commonTest" scope="TEST" production-on-test="" />
|
||||||
|
<orderEntry type="module" module-name="komp.jsMain" scope="TEST" />
|
||||||
|
<orderEntry type="module" module-name="komp.jsMain" scope="RUNTIME" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlinx:kotlinx-html-js:0.7.2" level="project" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test-js:1.4.30" level="project" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:1.4.30" level="project" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlinx:kotlinx-html-common:0.7.2" level="project" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.4.30" level="project" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test-common:1.4.30" level="project" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.4.30" level="project" />
|
||||||
|
</component>
|
||||||
|
<component name="TestModuleProperties" production-module="komp.jsMain" />
|
||||||
|
</module>
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
<?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.1.17-SNAPSHOT" type="JAVA_MODULE" version="4">
|
|
||||||
<component name="FacetManager">
|
|
||||||
<facet type="kotlin-language" name="Kotlin">
|
|
||||||
<configuration version="3" platform="JavaScript " allPlatforms="JS []" useProjectSettings="false" isTestModule="false" externalProjectId="komp" pureKotlinSourceFolders="$MODULE_DIR$/src/test/kotlin;/home/rnentjes/Development/komp/komp/src/main/kotlin">
|
|
||||||
<newMppModelJpsModuleKind>COMPILATION_AND_SOURCE_SET_HOLDER</newMppModelJpsModuleKind>
|
|
||||||
<compilerSettings />
|
|
||||||
<compilerArguments>
|
|
||||||
<option name="outputFile" value="$MODULE_DIR$/build/classes/kotlin/main/komp.js" />
|
|
||||||
<option name="noStdlib" value="true" />
|
|
||||||
<option name="sourceMap" value="true" />
|
|
||||||
<option name="metaInfo" value="true" />
|
|
||||||
<option name="target" value="v5" />
|
|
||||||
<option name="moduleKind" value="umd" />
|
|
||||||
<option name="main" value="call" />
|
|
||||||
<option name="languageVersion" value="1.3" />
|
|
||||||
<option name="apiVersion" value="1.3" />
|
|
||||||
<option name="pluginOptions">
|
|
||||||
<array />
|
|
||||||
</option>
|
|
||||||
<option name="pluginClasspaths">
|
|
||||||
<array />
|
|
||||||
</option>
|
|
||||||
<option name="multiPlatform" value="true" />
|
|
||||||
<option name="errors">
|
|
||||||
<ArgumentParseErrors />
|
|
||||||
</option>
|
|
||||||
</compilerArguments>
|
|
||||||
</configuration>
|
|
||||||
</facet>
|
|
||||||
</component>
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<output url="file://$MODULE_DIR$/build/classes/kotlin/main" />
|
|
||||||
<exclude-output />
|
|
||||||
<content url="file://$MODULE_DIR$/src/main/kotlin">
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/kotlin" type="kotlin-source" />
|
|
||||||
</content>
|
|
||||||
<content url="file://$MODULE_DIR$/src/main/resources">
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="kotlin-resource" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="jdk" jdkName="Kotlin SDK" jdkType="KotlinSDK" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:1.3.70" level="project" />
|
|
||||||
<orderEntry type="library" name="Gradle: org.jetbrains.kotlinx:kotlinx-html-js:0.7.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70" level="project" />
|
|
||||||
<orderEntry type="library" name="Gradle: org.jetbrains.kotlinx:kotlinx-html-common:0.7.1" level="project" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
<?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.1.17-SNAPSHOT" type="JAVA_MODULE" version="4">
|
|
||||||
<component name="FacetManager">
|
|
||||||
<facet type="kotlin-language" name="Kotlin">
|
|
||||||
<configuration version="3" platform="JavaScript " allPlatforms="JS []" useProjectSettings="false" isTestModule="true" externalProjectId="komp" pureKotlinSourceFolders="$MODULE_DIR$/src/test/kotlin;/home/rnentjes/Development/komp/komp/src/main/kotlin">
|
|
||||||
<sourceSets>
|
|
||||||
<sourceSet>komp_main</sourceSet>
|
|
||||||
</sourceSets>
|
|
||||||
<newMppModelJpsModuleKind>COMPILATION_AND_SOURCE_SET_HOLDER</newMppModelJpsModuleKind>
|
|
||||||
<compilerSettings />
|
|
||||||
<compilerArguments>
|
|
||||||
<option name="outputFile" value="$MODULE_DIR$/build/classes/kotlin/test/komp_test.js" />
|
|
||||||
<option name="noStdlib" value="true" />
|
|
||||||
<option name="sourceMap" value="true" />
|
|
||||||
<option name="metaInfo" value="true" />
|
|
||||||
<option name="target" value="v5" />
|
|
||||||
<option name="moduleKind" value="umd" />
|
|
||||||
<option name="main" value="call" />
|
|
||||||
<option name="languageVersion" value="1.3" />
|
|
||||||
<option name="apiVersion" value="1.3" />
|
|
||||||
<option name="pluginOptions">
|
|
||||||
<array />
|
|
||||||
</option>
|
|
||||||
<option name="pluginClasspaths">
|
|
||||||
<array />
|
|
||||||
</option>
|
|
||||||
<option name="multiPlatform" value="true" />
|
|
||||||
<option name="errors">
|
|
||||||
<ArgumentParseErrors />
|
|
||||||
</option>
|
|
||||||
</compilerArguments>
|
|
||||||
</configuration>
|
|
||||||
</facet>
|
|
||||||
</component>
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<output-test url="file://$MODULE_DIR$/build/classes/kotlin/test" />
|
|
||||||
<exclude-output />
|
|
||||||
<content url="file://$MODULE_DIR$/src/test/kotlin" />
|
|
||||||
<content url="file://$MODULE_DIR$/src/test/resources" />
|
|
||||||
<orderEntry type="jdk" jdkName="Kotlin SDK" jdkType="KotlinSDK" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
<orderEntry type="module" module-name="komp_main" scope="TEST" />
|
|
||||||
<orderEntry type="module-library" scope="TEST">
|
|
||||||
<library>
|
|
||||||
<CLASSES>
|
|
||||||
<root url="file://$MODULE_DIR$/build/classes/kotlin/main" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC />
|
|
||||||
<SOURCES />
|
|
||||||
</library>
|
|
||||||
</orderEntry>
|
|
||||||
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:1.3.70" level="project" />
|
|
||||||
<orderEntry type="module-library" scope="RUNTIME">
|
|
||||||
<library>
|
|
||||||
<CLASSES>
|
|
||||||
<root url="file://$MODULE_DIR$/build/processedResources/Js/main" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC />
|
|
||||||
<SOURCES />
|
|
||||||
</library>
|
|
||||||
</orderEntry>
|
|
||||||
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlinx:kotlinx-html-js:0.7.1" level="project" />
|
|
||||||
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70" level="project" />
|
|
||||||
<orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlinx:kotlinx-html-common:0.7.1" level="project" />
|
|
||||||
</component>
|
|
||||||
<component name="TestModuleProperties" production-module="komp_main" />
|
|
||||||
</module>
|
|
||||||
@@ -1,11 +1,7 @@
|
|||||||
package nl.astraeus.komp
|
package nl.astraeus.komp
|
||||||
|
|
||||||
import org.w3c.dom.HTMLElement
|
import org.w3c.dom.*
|
||||||
import org.w3c.dom.HTMLInputElement
|
|
||||||
import org.w3c.dom.Node
|
|
||||||
import org.w3c.dom.NodeList
|
|
||||||
import org.w3c.dom.events.Event
|
import org.w3c.dom.events.Event
|
||||||
import org.w3c.dom.get
|
|
||||||
|
|
||||||
const val HASH_VALUE = "komp-hash-value"
|
const val HASH_VALUE = "komp-hash-value"
|
||||||
|
|
||||||
@@ -34,10 +30,20 @@ object DiffPatch {
|
|||||||
fun hashesMatch(oldNode: Node, newNode: Node): Boolean {
|
fun hashesMatch(oldNode: Node, newNode: Node): Boolean {
|
||||||
return (
|
return (
|
||||||
oldNode is HTMLElement &&
|
oldNode is HTMLElement &&
|
||||||
newNode is HTMLElement &&
|
newNode is HTMLElement &&
|
||||||
oldNode.nodeName == newNode.nodeName &&
|
oldNode.nodeName == newNode.nodeName &&
|
||||||
oldNode.getKompHash() == newNode.getKompHash()
|
oldNode.getKompHash() == newNode.getKompHash()
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateKomponentOnNode(oldNode: Node, newNode: Node) {
|
||||||
|
val komponent = newNode.asDynamic()[KOMP_KOMPONENT] as? Komponent
|
||||||
|
if (komponent != null) {
|
||||||
|
if (Komponent.logReplaceEvent) {
|
||||||
|
console.log("Keeping oldNode, set oldNode element on Komponent", oldNode, komponent)
|
||||||
|
}
|
||||||
|
komponent.element = oldNode
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateNode(oldNode: Node, newNode: Node): Node {
|
fun updateNode(oldNode: Node, newNode: Node): Node {
|
||||||
@@ -45,6 +51,8 @@ object DiffPatch {
|
|||||||
if (Komponent.logReplaceEvent) {
|
if (Komponent.logReplaceEvent) {
|
||||||
console.log("Hashes match", oldNode, newNode, oldNode.getKompHash(), newNode.getKompHash())
|
console.log("Hashes match", oldNode, newNode, oldNode.getKompHash(), newNode.getKompHash())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateKomponentOnNode(oldNode, newNode)
|
||||||
return oldNode
|
return oldNode
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,6 +63,8 @@ object DiffPatch {
|
|||||||
}
|
}
|
||||||
oldNode.textContent = newNode.textContent
|
oldNode.textContent = newNode.textContent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateKomponentOnNode(oldNode, newNode)
|
||||||
return oldNode
|
return oldNode
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,6 +83,8 @@ object DiffPatch {
|
|||||||
}
|
}
|
||||||
updateChildren(oldNode, newNode)
|
updateChildren(oldNode, newNode)
|
||||||
oldNode.setKompHash(newNode.getKompHash())
|
oldNode.setKompHash(newNode.getKompHash())
|
||||||
|
|
||||||
|
updateKomponentOnNode(oldNode, newNode)
|
||||||
return oldNode
|
return oldNode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package nl.astraeus.komp
|
package nl.astraeus.komp
|
||||||
|
|
||||||
|
import kotlinx.browser.document
|
||||||
import kotlinx.html.*
|
import kotlinx.html.*
|
||||||
import org.w3c.dom.*
|
import org.w3c.dom.*
|
||||||
import org.w3c.dom.css.CSSStyleDeclaration
|
import org.w3c.dom.css.CSSStyleDeclaration
|
||||||
import org.w3c.dom.events.Event
|
import org.w3c.dom.events.Event
|
||||||
import kotlin.browser.document
|
|
||||||
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
inline fun HTMLElement.setEvent(name: String, noinline callback: (Event) -> Unit): Unit {
|
inline fun HTMLElement.setEvent(name: String, noinline callback: (Event) -> Unit) {
|
||||||
val eventName = if (name.startsWith("on")) {
|
val eventName = if (name.startsWith("on")) {
|
||||||
name.substring(2)
|
name.substring(2)
|
||||||
} else {
|
} else {
|
||||||
@@ -185,7 +185,7 @@ class HtmlBuilder(
|
|||||||
throw IllegalStateException("No current DOM node")
|
throw IllegalStateException("No current DOM node")
|
||||||
}
|
}
|
||||||
|
|
||||||
// stupid hack as browsers doesn't support createEntityReference
|
// stupid hack as browsers don't support createEntityReference
|
||||||
val s = document.createElement("span") as HTMLElement
|
val s = document.createElement("span") as HTMLElement
|
||||||
s.innerHTML = entity.text
|
s.innerHTML = entity.text
|
||||||
path.last().appendChild(s.childNodes.asList().first { it.nodeType == Node.TEXT_NODE })
|
path.last().appendChild(s.childNodes.asList().first { it.nodeType == Node.TEXT_NODE })
|
||||||
|
|||||||
@@ -1,14 +1,38 @@
|
|||||||
package nl.astraeus.komp
|
package nl.astraeus.komp
|
||||||
|
|
||||||
|
import kotlinx.browser.document
|
||||||
|
import kotlinx.browser.window
|
||||||
import kotlinx.html.div
|
import kotlinx.html.div
|
||||||
import org.w3c.dom.HTMLDivElement
|
import org.w3c.dom.HTMLDivElement
|
||||||
import org.w3c.dom.HTMLElement
|
import org.w3c.dom.HTMLElement
|
||||||
import org.w3c.dom.Node
|
import org.w3c.dom.Node
|
||||||
import org.w3c.dom.css.CSSStyleDeclaration
|
import org.w3c.dom.css.CSSStyleDeclaration
|
||||||
import kotlin.browser.document
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
|
const val KOMP_KOMPONENT = "komp-komponent"
|
||||||
|
|
||||||
typealias CssStyle = CSSStyleDeclaration.() -> Unit
|
typealias CssStyle = CSSStyleDeclaration.() -> Unit
|
||||||
|
|
||||||
|
class StateDelegate<T>(
|
||||||
|
val komponent: Komponent,
|
||||||
|
initialValue: T
|
||||||
|
) {
|
||||||
|
var value: T = initialValue
|
||||||
|
|
||||||
|
operator fun getValue(thisRef: Any?, property: KProperty<*>): T {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
|
||||||
|
if (this.value?.equals(value) != true) {
|
||||||
|
this.value = value
|
||||||
|
komponent.requestUpdate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun <reified T> Komponent.state(initialValue: T): StateDelegate<T> = StateDelegate(this, initialValue)
|
||||||
|
|
||||||
fun HtmlConsumer.include(component: Komponent) {
|
fun HtmlConsumer.include(component: Komponent) {
|
||||||
if (Komponent.updateStrategy == UpdateStrategy.REPLACE) {
|
if (Komponent.updateStrategy == UpdateStrategy.REPLACE) {
|
||||||
if (component.element != null) {
|
if (component.element != null) {
|
||||||
@@ -39,6 +63,9 @@ enum class UpdateStrategy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
abstract class Komponent {
|
abstract class Komponent {
|
||||||
|
private var createIndex = getNextCreateIndex()
|
||||||
|
private var dirty: Boolean = true
|
||||||
|
|
||||||
var element: Node? = null
|
var element: Node? = null
|
||||||
val declaredStyles: MutableMap<String, CSSStyleDeclaration> = HashMap()
|
val declaredStyles: MutableMap<String, CSSStyleDeclaration> = HashMap()
|
||||||
|
|
||||||
@@ -47,13 +74,25 @@ abstract class Komponent {
|
|||||||
consumer.render()
|
consumer.render()
|
||||||
val result = consumer.finalize()
|
val result = consumer.finalize()
|
||||||
|
|
||||||
|
if (result.id.isBlank()) {
|
||||||
|
result.id = "komp_${createIndex}"
|
||||||
|
}
|
||||||
|
|
||||||
element = result
|
element = result
|
||||||
|
element.asDynamic()[KOMP_KOMPONENT] = this
|
||||||
|
|
||||||
|
dirty = false
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract fun HtmlBuilder.render()
|
abstract fun HtmlBuilder.render()
|
||||||
|
|
||||||
|
fun requestUpdate() {
|
||||||
|
dirty = true
|
||||||
|
scheduleForUpdate(this)
|
||||||
|
}
|
||||||
|
|
||||||
open fun style(className: String, vararg imports: CssStyle, block: CssStyle = {}) {
|
open fun style(className: String, vararg imports: CssStyle, block: CssStyle = {}) {
|
||||||
val style = (document.createElement("div") as HTMLDivElement).style
|
val style = (document.createElement("div") as HTMLDivElement).style
|
||||||
for (imp in imports) {
|
for (imp in imports) {
|
||||||
@@ -63,33 +102,41 @@ abstract class Komponent {
|
|||||||
declaredStyles[className] = style
|
declaredStyles[className] = style
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun update() = refresh()
|
open fun update() {
|
||||||
|
refresh()
|
||||||
|
}
|
||||||
|
|
||||||
open fun refresh() {
|
internal fun refresh() {
|
||||||
val oldElement = element
|
val oldElement = element
|
||||||
|
|
||||||
if (logRenderEvent) {
|
if (logRenderEvent) {
|
||||||
console.log("Rendering", this)
|
console.log("Rendering", this)
|
||||||
}
|
}
|
||||||
val newElement = create()
|
val newElement = create()
|
||||||
|
|
||||||
if (oldElement != null) {
|
if (oldElement != null) {
|
||||||
if (updateStrategy == UpdateStrategy.REPLACE) {
|
element = if (updateStrategy == UpdateStrategy.REPLACE) {
|
||||||
if (logReplaceEvent) {
|
if (logReplaceEvent) {
|
||||||
console.log("Replacing", oldElement, newElement)
|
console.log("Replacing", oldElement, newElement)
|
||||||
}
|
}
|
||||||
oldElement.parentNode?.replaceChild(newElement, oldElement)
|
oldElement.parentNode?.replaceChild(newElement, oldElement)
|
||||||
element = newElement
|
newElement
|
||||||
} else {
|
} else {
|
||||||
if (logReplaceEvent) {
|
if (logReplaceEvent) {
|
||||||
console.log("DomDiffing", oldElement, newElement)
|
console.log("DomDiffing", oldElement, newElement)
|
||||||
}
|
}
|
||||||
element = DiffPatch.updateNode(oldElement, newElement)
|
DiffPatch.updateNode(oldElement, newElement)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dirty = false
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsName("remove")
|
@JsName("remove")
|
||||||
fun remove() {
|
fun remove() {
|
||||||
|
check(updateStrategy == UpdateStrategy.REPLACE) {
|
||||||
|
"remote only works with UpdateStrategy.REPLACE"
|
||||||
|
}
|
||||||
element?.let {
|
element?.let {
|
||||||
val parent = it.parentElement ?: throw IllegalArgumentException("Element has no parent!?")
|
val parent = it.parentElement ?: throw IllegalArgumentException("Element has no parent!?")
|
||||||
|
|
||||||
@@ -102,6 +149,10 @@ abstract class Komponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
private var nextCreateIndex: Int = 1
|
||||||
|
private var updateCallback: Int? = null
|
||||||
|
private var scheduledForUpdate = mutableSetOf<Komponent>()
|
||||||
|
|
||||||
var logRenderEvent = false
|
var logRenderEvent = false
|
||||||
var logReplaceEvent = false
|
var logReplaceEvent = false
|
||||||
var updateStrategy = UpdateStrategy.DOM_DIFF
|
var updateStrategy = UpdateStrategy.DOM_DIFF
|
||||||
@@ -115,6 +166,49 @@ abstract class Komponent {
|
|||||||
parent.appendChild(element)
|
parent.appendChild(element)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getNextCreateIndex() = nextCreateIndex++
|
||||||
|
|
||||||
|
private fun scheduleForUpdate(komponent: Komponent) {
|
||||||
|
scheduledForUpdate.add(komponent)
|
||||||
|
|
||||||
|
if (updateCallback == null) {
|
||||||
|
window.setTimeout({
|
||||||
|
runUpdate()
|
||||||
|
}, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun runUpdate() {
|
||||||
|
val todo = scheduledForUpdate.sortedBy { komponent -> komponent.createIndex }
|
||||||
|
|
||||||
|
if (logRenderEvent) {
|
||||||
|
console.log("runUpdate")
|
||||||
|
}
|
||||||
|
|
||||||
|
todo.forEach { next ->
|
||||||
|
val element = next.element
|
||||||
|
console.log("update element", element)
|
||||||
|
if (element is HTMLElement) {
|
||||||
|
console.log("by id", document.getElementById(element.id))
|
||||||
|
if (document.getElementById(element.id) != null) {
|
||||||
|
if (next.dirty) {
|
||||||
|
if (logRenderEvent) {
|
||||||
|
console.log("Update dirty ${next.createIndex}")
|
||||||
|
}
|
||||||
|
next.update()
|
||||||
|
} else {
|
||||||
|
if (logRenderEvent) {
|
||||||
|
console.log("Skip ${next.createIndex}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
scheduledForUpdate.clear()
|
||||||
|
updateCallback = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user