Skip to content
This repository was archived by the owner on Aug 10, 2024. It is now read-only.

Commit 6d86656

Browse files
committed
support SSR for addClasses()
1 parent ed4d449 commit 6d86656

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+22
-12
lines changed

.gitignore

100755100644
File mode changed.

.travis.yml

100755100644
File mode changed.

LICENSE

100755100644
File mode changed.

README.md

100755100644
File mode changed.

gradle.properties

100755100644
File mode changed.

gradle/wrapper/gradle-wrapper.jar

100755100644
File mode changed.

gradle/wrapper/gradle-wrapper.properties

100755100644
File mode changed.

gradlew

100755100644
File mode changed.

gradlew.bat

100755100644
File mode changed.

jitpack.yml

100755100644
File mode changed.

notes/transport_optimization.md

100755100644
File mode changed.

scripts/do-release.sh

100755100644
File mode changed.

settings.gradle

100755100644
File mode changed.

src/main/kotlin/kweb/CookieReceiver.kt

100755100644
File mode changed.

src/main/kotlin/kweb/Element.kt

+22-12
Original file line numberDiff line numberDiff line change
@@ -256,19 +256,29 @@ open class Element(
256256
*/
257257
fun addClasses(vararg classes: String, onlyIf: Boolean = true): Element {
258258
if (onlyIf) {
259-
for (class_ in classes) {
260-
if (class_.contains(' ')) {
261-
error("Class names must not contain spaces")
259+
val jsoupDoc = browser.htmlDocument.get()
260+
when {
261+
jsoupDoc != null && (browser.isCatchingOutbound() == null || browser.isCatchingOutbound() == RENDER) -> {
262+
val thisEl = jsoupDoc.getElementById(this.id)!!
263+
val existingClasses = thisEl.attr("class").split(" ")
264+
val newClasses = existingClasses + classes
265+
thisEl.attr("class", newClasses.joinToString(separator = " "))
266+
}
267+
else -> {
268+
for (class_ in classes) {
269+
if (class_.contains(' ')) {
270+
error("Class names must not contain spaces")
271+
}
272+
//language=JavaScript
273+
callJsFunction("""
274+
let id = {};
275+
let className = {};
276+
let el = document.getElementById(id);
277+
if (el.classList) el.classList.add(className);
278+
else if (!hasClass(el, className)) el.className += " " + className;
279+
""".trimIndent(), id.json, JsonPrimitive(class_))
262280
}
263-
//language=JavaScript
264-
callJsFunction("""
265-
let id = {};
266-
let className = {};
267-
let el = document.getElementById(id);
268-
if (el.classList) el.classList.add(className);
269-
else if (!hasClass(el, className)) el.className += " " + className;
270-
""".trimIndent(), id.json, JsonPrimitive(class_))
271-
}
281+
}
272282
}
273283
return this
274284
}

src/main/kotlin/kweb/ElementCreator.kt

100755100644
File mode changed.

src/main/kotlin/kweb/Kweb.kt

100755100644
File mode changed.

src/main/kotlin/kweb/WebBrowser.kt

100755100644
File mode changed.

src/main/kotlin/kweb/attributes.kt

100755100644
File mode changed.

src/main/kotlin/kweb/client/Client2ServerMessage.kt

100755100644
File mode changed.

src/main/kotlin/kweb/client/ClientConnection.kt

100755100644
File mode changed.

src/main/kotlin/kweb/client/HttpRequestInfo.kt

100755100644
File mode changed.

src/main/kotlin/kweb/client/RemoteClientState.kt

100755100644
File mode changed.

src/main/kotlin/kweb/client/Server2ClientMessage.kt

100755100644
File mode changed.

src/main/kotlin/kweb/demos/todo/TodoApp.kt

100755100644
File mode changed.

src/main/kotlin/kweb/html/Document.kt

100755100644
File mode changed.

src/main/kotlin/kweb/html/ElementReader.kt

100755100644
File mode changed.

src/main/kotlin/kweb/html/StorageReceiver.kt

100755100644
File mode changed.

src/main/kotlin/kweb/html/style/style.kt

100755100644
File mode changed.

src/main/kotlin/kweb/plugins/KwebPlugin.kt

100755100644
File mode changed.

src/main/kotlin/kweb/plugins/fomanticUI/FomanticUIClasses.kt

100755100644
File mode changed.

src/main/kotlin/kweb/plugins/fomanticUI/FomanticUIPlugin.kt

100755100644
File mode changed.

src/main/kotlin/kweb/plugins/fomanticUI/jquery.kt

100755100644
File mode changed.

src/main/kotlin/kweb/plugins/jqueryCore/JQueryCorePlugin.kt

100755100644
File mode changed.

src/main/kotlin/kweb/plugins/jqueryCore/jqueryExtensions.kt

100755100644
File mode changed.

src/main/kotlin/kweb/plugins/jqueryCore/jqueryevents.kt

100755100644
File mode changed.

src/main/kotlin/kweb/plugins/staticFiles/StaticFilesPlugin.kt

100755100644
File mode changed.

src/main/kotlin/kweb/plugins/tablesort/TablesortPlugin.kt

100755100644
File mode changed.

src/main/kotlin/kweb/plugins/viewport/ViewportPlugin.kt

100755100644
File mode changed.

src/main/kotlin/kweb/routing/routing.kt

100755100644
File mode changed.

src/main/kotlin/kweb/state/KVal.kt

100755100644
File mode changed.

src/main/kotlin/kweb/state/KVar.kt

100755100644
File mode changed.

src/main/kotlin/kweb/state/ReversibleFunction.kt

100755100644
File mode changed.

src/main/kotlin/kweb/state/render.kt

100755100644
File mode changed.

src/main/kotlin/kweb/table.kt

100755100644
File mode changed.

src/main/kotlin/kweb/util/misc.kt

100755100644
File mode changed.

src/main/resources/hotswap-agent.properties

100755100644
File mode changed.

src/test/kotlin/kweb/demos/todo/TodoDemoTest.kt

100755100644
File mode changed.

src/test/kotlin/kweb/routing/RoutingSpec.kt

100755100644
File mode changed.

src/test/kotlin/kweb/routing/RoutingTest.kt

100755100644
File mode changed.

src/test/kotlin/kweb/state/KVarSpec.kt

100755100644
File mode changed.

src/test/kotlin/kweb/state/StateSpec.kt

100755100644
File mode changed.

src/test/kotlin/kweb/state/persistent/PersistentSpec.kt

100755100644
File mode changed.

src/test/kotlin/kweb/state/render/RenderCleanupTest.kt

100755100644
File mode changed.

src/test/kotlin/kweb/state/render/RenderTest.kt

100755100644
File mode changed.

src/test/resources/kweb/phantomInit.js

100755100644
File mode changed.

0 commit comments

Comments
 (0)