diff --git a/.mapping.json b/.mapping.json index 3ed52e91a..8038cbbb5 100644 --- a/.mapping.json +++ b/.mapping.json @@ -20081,6 +20081,13 @@ "readme_pictures/search.png":"divkit/public/readme_pictures/search.png", "readme_pictures/smart_cam.png":"divkit/public/readme_pictures/smart_cam.png", "readme_pictures/ya_browser.png":"divkit/public/readme_pictures/ya_browser.png", + "samples/cloud-functions/kotlin-dsl/build.gradle.kts":"divkit/public/samples/cloud-functions/kotlin-dsl/build.gradle.kts", + "samples/cloud-functions/kotlin-dsl/build.sh":"divkit/public/samples/cloud-functions/kotlin-dsl/build.sh", + "samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Handler.kt":"divkit/public/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Handler.kt", + "samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Request.kt":"divkit/public/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Request.kt", + "samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Response.kt":"divkit/public/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Response.kt", + "samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Utils.kt":"divkit/public/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Utils.kt", + "samples/cloud-functions/simple/Handler.kt":"divkit/public/samples/cloud-functions/simple/Handler.kt", "schema/common.json":"divkit/public/schema/common.json", "schema/div-absolute-edge-insets.json":"divkit/public/schema/div-absolute-edge-insets.json", "schema/div-accessibility.json":"divkit/public/schema/div-accessibility.json", diff --git a/samples/cloud-functions/kotlin-dsl/build.gradle.kts b/samples/cloud-functions/kotlin-dsl/build.gradle.kts new file mode 100644 index 000000000..5ba2e53a3 --- /dev/null +++ b/samples/cloud-functions/kotlin-dsl/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + kotlin("jvm") version "2.0.0" +} + +repositories { + mavenCentral() +} + +dependencies { + implementation("com.fasterxml.jackson.core:jackson-annotations:2.18.3") + implementation("com.fasterxml.jackson.core:jackson-databind:2.18.3") + implementation("com.yandex.div:kotlin-json-builder:31.0.0") +} diff --git a/samples/cloud-functions/kotlin-dsl/build.sh b/samples/cloud-functions/kotlin-dsl/build.sh new file mode 100755 index 000000000..efa0fa7a8 --- /dev/null +++ b/samples/cloud-functions/kotlin-dsl/build.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +SCRIPT_DIR=`dirname ${0}` +ARCHIVE_NAME="build" + +while getopts ":n:" option; do + case $option in + n) + ARCHIVE_NAME="$OPTARG" + ;; + + \?) + echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + + :) + echo "Option -$OPTARG requires an argument" >&2 + exit 1 + ;; + esac + + if [[ $OPTARG == -* ]]; then + echo "Option $option has invalid argument: $OPTARG" >&2 + exit 1 + fi +done + +cd $SCRIPT_DIR +zip -rDX $ARCHIVE_NAME.zip * -x build.sh -x *.zip -x build -x .idea diff --git a/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Handler.kt b/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Handler.kt new file mode 100644 index 000000000..3fbd20966 --- /dev/null +++ b/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Handler.kt @@ -0,0 +1,90 @@ +package cloud.divkit + +import divkit.dsl.Divan +import divkit.dsl.bold +import divkit.dsl.border +import divkit.dsl.center +import divkit.dsl.color +import divkit.dsl.container +import divkit.dsl.data +import divkit.dsl.divan +import divkit.dsl.edgeInsets +import divkit.dsl.fixedSize +import divkit.dsl.medium +import divkit.dsl.solidBackground +import divkit.dsl.text +import divkit.dsl.vertical +import divkit.dsl.wrapContentSize + +fun handle(request: Request): Response { + val card = greetingCard() + return Response(200, card.toJson()) +} + +private fun greetingCard(): Divan { + return divan { + data( + logId = "greeting", + div = container( + width = wrapContentSize(), + height = wrapContentSize(), + orientation = vertical, + margins = edgeInsets( + start = 16, + top = 16, + end = 16, + bottom = 16 + ), + paddings = edgeInsets( + start = 4, + top = 4, + end = 4, + bottom = 4 + ), + background = listOf( + solidBackground(color("#FF9000")) + ), + border = border( + cornerRadius = 8 + ), + items = listOf( + text( + width = wrapContentSize(), + height = wrapContentSize(), + alignmentHorizontal = center, + fontSize = 20, + fontWeight = bold, + textColor = color("#FFFFFF"), + text = "HELLO" + ), + text( + width = wrapContentSize(), + height = wrapContentSize(), + alignmentHorizontal = center, + fontSize = 14, + textColor = color("#FFFFFF"), + text = "my name is" + ), + text( + width = fixedSize(120), + height = fixedSize(48), + margins = edgeInsets( + top = 4 + ), + background = listOf( + solidBackground(color("#FFFFFF")) + ), + border = border( + cornerRadius = 4 + ), + fontSize = 32, + fontWeight = medium, + textAlignmentHorizontal = center, + textAlignmentVertical = center, + text = "DivKit" + ) + ) + ) + ) + } +} diff --git a/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Request.kt b/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Request.kt new file mode 100644 index 000000000..a174146e0 --- /dev/null +++ b/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Request.kt @@ -0,0 +1,7 @@ +package cloud.divkit + +data class Request( + val httpMethod: String?, + val headers: Map = mapOf(), + val body: String = "" +) diff --git a/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Response.kt b/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Response.kt new file mode 100644 index 000000000..447fe07ed --- /dev/null +++ b/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Response.kt @@ -0,0 +1,6 @@ +package cloud.divkit + +data class Response( + val statusCode: Int, + val body: String +) diff --git a/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Utils.kt b/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Utils.kt new file mode 100644 index 000000000..088a18bc5 --- /dev/null +++ b/samples/cloud-functions/kotlin-dsl/src/main/kotlin/cloud/divkit/Utils.kt @@ -0,0 +1,8 @@ +package cloud.divkit + +import com.fasterxml.jackson.databind.json.JsonMapper +import divkit.dsl.Divan + +fun Divan.toJson(): String { + return JsonMapper.builder().build().writeValueAsString(this) +} diff --git a/samples/cloud-functions/simple/Handler.kt b/samples/cloud-functions/simple/Handler.kt new file mode 100644 index 000000000..ef8955d67 --- /dev/null +++ b/samples/cloud-functions/simple/Handler.kt @@ -0,0 +1,31 @@ +package cloud.divkit + +data class Request( + val httpMethod: String?, + val headers: Map = mapOf(), + val body: String = "" +) + +data class Response( + val statusCode: Int, + val body: String +) + +fun handle(request: Request): Response { + return Response(200, card) +} + +private const val card = """ +{ + "log_id": "cloud_divkit", + "states": [ + { + "state_id": 0, + "div": { + "type": "text", + "text": "Hello, Username!" + } + } + ] +} +"""