From 3a33062cd45c70d08f870d46e8df5d59d6679b4f Mon Sep 17 00:00:00 2001 From: Adam <897017+asemy@users.noreply.github.com> Date: Fri, 22 Oct 2021 18:16:57 +0200 Subject: [PATCH] add kvision template --- modules/server/build.gradle.kts | 55 ++++++++++++++++++- .../server/src/main/kotlin/com/example/App.kt | 38 +++++++++++++ .../server/src/main/resources/css/kvapp.css | 0 .../src/main/resources/i18n/messages-en.po | 23 ++++++++ .../src/main/resources/i18n/messages-pl.po | 23 ++++++++ .../src/main/resources/i18n/messages.pot | 8 +++ modules/server/src/main/web/index.html | 12 ++++ .../test/kotlin/test/com/example/AppSpec.kt | 15 +++++ modules/server/webpack.config.d/bootstrap.js | 3 + modules/server/webpack.config.d/css.js | 1 + modules/server/webpack.config.d/file.js | 6 ++ modules/server/webpack.config.d/handlebars.js | 6 ++ modules/server/webpack.config.d/jquery.js | 9 +++ modules/server/webpack.config.d/moment.js | 15 +++++ modules/server/webpack.config.d/webpack.js | 15 +++++ 15 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 modules/server/src/main/kotlin/com/example/App.kt create mode 100644 modules/server/src/main/resources/css/kvapp.css create mode 100644 modules/server/src/main/resources/i18n/messages-en.po create mode 100644 modules/server/src/main/resources/i18n/messages-pl.po create mode 100644 modules/server/src/main/resources/i18n/messages.pot create mode 100644 modules/server/src/main/web/index.html create mode 100644 modules/server/src/test/kotlin/test/com/example/AppSpec.kt create mode 100644 modules/server/webpack.config.d/bootstrap.js create mode 100644 modules/server/webpack.config.d/css.js create mode 100644 modules/server/webpack.config.d/file.js create mode 100644 modules/server/webpack.config.d/handlebars.js create mode 100644 modules/server/webpack.config.d/jquery.js create mode 100644 modules/server/webpack.config.d/moment.js create mode 100644 modules/server/webpack.config.d/webpack.js diff --git a/modules/server/build.gradle.kts b/modules/server/build.gradle.kts index 0bbe330..3f32130 100644 --- a/modules/server/build.gradle.kts +++ b/modules/server/build.gradle.kts @@ -1,7 +1,60 @@ +import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig + plugins { - kotlin("jvm") + id("dev.adamko.factoriowebmap.archetype.base") +// kotlin("jvm") + id("io.kvision") version "5.4.1" + kotlin("js") + kotlin("plugin.serialization") version "1.5.31" } group = "${rootProject.group}.server" version = rootProject.version + +val webDir = file("src/main/web") + + +val kvisionVersion = "5.4.1" + +kotlin { + js { + browser { + runTask { + outputFileName = "main.bundle.js" + sourceMaps = false + devServer = KotlinWebpackConfig.DevServer( + open = false, + port = 3000, + proxy = mutableMapOf( + "/kv/*" to "http://localhost:8080", + "/kvws/*" to mapOf("target" to "ws://localhost:8080", "ws" to true) + ), + static = mutableListOf("$buildDir/processedResources/js/main") + ) + } + webpackTask { + outputFileName = "main.bundle.js" + } + testTask { + useKarma { + useChromeHeadless() + } + } + } + binaries.executable() + } + + sourceSets["main"].dependencies { + implementation("io.kvision:kvision:$kvisionVersion") + implementation("io.kvision:kvision-bootstrap:$kvisionVersion") + implementation("io.kvision:kvision-bootstrap-css:$kvisionVersion") + implementation("io.kvision:kvision-i18n:$kvisionVersion") + } + sourceSets["test"].dependencies { + implementation(kotlin("test-js")) + implementation("io.kvision:kvision-testutils:$kvisionVersion") + } + sourceSets["main"].resources.srcDir(webDir) + +} diff --git a/modules/server/src/main/kotlin/com/example/App.kt b/modules/server/src/main/kotlin/com/example/App.kt new file mode 100644 index 0000000..a7c20c1 --- /dev/null +++ b/modules/server/src/main/kotlin/com/example/App.kt @@ -0,0 +1,38 @@ +package com.example + +import io.kvision.Application +import io.kvision.BootstrapCssModule +import io.kvision.BootstrapModule +import io.kvision.CoreModule +import io.kvision.html.div +import io.kvision.i18n.DefaultI18nManager +import io.kvision.i18n.I18n +import io.kvision.i18n.I18n.tr +import io.kvision.module +import io.kvision.panel.root +import io.kvision.require +import io.kvision.startApplication + +class App : Application() { + init { + require("./css/kvapp.css") + } + + override fun start() { + I18n.manager = + DefaultI18nManager( + mapOf( + "pl" to require("./i18n/messages-pl.json"), + "en" to require("./i18n/messages-en.json") + ) + ) + + root("kvapp") { + div(tr("This is a localized message.")) + } + } +} + +fun main() { + startApplication(::App, module.hot, BootstrapModule, BootstrapCssModule, CoreModule) +} diff --git a/modules/server/src/main/resources/css/kvapp.css b/modules/server/src/main/resources/css/kvapp.css new file mode 100644 index 0000000..e69de29 diff --git a/modules/server/src/main/resources/i18n/messages-en.po b/modules/server/src/main/resources/i18n/messages-en.po new file mode 100644 index 0000000..520a528 --- /dev/null +++ b/modules/server/src/main/resources/i18n/messages-en.po @@ -0,0 +1,23 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the KVision package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: KVision\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-08-18 01:34+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: ../src/main/kotlin/com/example/App.kt:20 +msgid "This is a localized message." +msgstr "" diff --git a/modules/server/src/main/resources/i18n/messages-pl.po b/modules/server/src/main/resources/i18n/messages-pl.po new file mode 100644 index 0000000..2431017 --- /dev/null +++ b/modules/server/src/main/resources/i18n/messages-pl.po @@ -0,0 +1,23 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the KVision package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: KVision\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-08-18 01:34+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: Polish\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: ../src/main/kotlin/com/example/App.kt:20 +msgid "This is a localized message." +msgstr "To jest przetłumaczona wiadomość." diff --git a/modules/server/src/main/resources/i18n/messages.pot b/modules/server/src/main/resources/i18n/messages.pot new file mode 100644 index 0000000..68feb5b --- /dev/null +++ b/modules/server/src/main/resources/i18n/messages.pot @@ -0,0 +1,8 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: \n" + +#: src/main/kotlin/com/example/App.kt:31 +msgid "This is a localized message." +msgstr "" diff --git a/modules/server/src/main/web/index.html b/modules/server/src/main/web/index.html new file mode 100644 index 0000000..b723f01 --- /dev/null +++ b/modules/server/src/main/web/index.html @@ -0,0 +1,12 @@ + + + + + + KVision App + + + +
+ + diff --git a/modules/server/src/test/kotlin/test/com/example/AppSpec.kt b/modules/server/src/test/kotlin/test/com/example/AppSpec.kt new file mode 100644 index 0000000..33d8534 --- /dev/null +++ b/modules/server/src/test/kotlin/test/com/example/AppSpec.kt @@ -0,0 +1,15 @@ +package test.com.example + +import io.kvision.test.SimpleSpec +import kotlin.test.Test +import kotlin.test.assertTrue + +class AppSpec : SimpleSpec { + + @Test + fun render() { + run { + assertTrue(true, "Dummy test") + } + } +} diff --git a/modules/server/webpack.config.d/bootstrap.js b/modules/server/webpack.config.d/bootstrap.js new file mode 100644 index 0000000..c9ac06d --- /dev/null +++ b/modules/server/webpack.config.d/bootstrap.js @@ -0,0 +1,3 @@ +config.module.rules.push({test: /\.(woff|woff2)(\?v=\d+\.\d+\.\d+)?$/, type: 'asset'}); +config.module.rules.push({test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, type: 'asset'}); +config.module.rules.push({test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, type: 'asset/resource'}); diff --git a/modules/server/webpack.config.d/css.js b/modules/server/webpack.config.d/css.js new file mode 100644 index 0000000..fd904af --- /dev/null +++ b/modules/server/webpack.config.d/css.js @@ -0,0 +1 @@ +config.module.rules.push({ test: /\.css$/, use: ["style-loader", { loader: "css-loader", options: {sourceMap: false} } ] }); diff --git a/modules/server/webpack.config.d/file.js b/modules/server/webpack.config.d/file.js new file mode 100644 index 0000000..aa64925 --- /dev/null +++ b/modules/server/webpack.config.d/file.js @@ -0,0 +1,6 @@ +config.module.rules.push( + { + test: /\.(jpe?g|png|gif|svg)$/i, + type: 'asset/resource' + } +); diff --git a/modules/server/webpack.config.d/handlebars.js b/modules/server/webpack.config.d/handlebars.js new file mode 100644 index 0000000..3847b17 --- /dev/null +++ b/modules/server/webpack.config.d/handlebars.js @@ -0,0 +1,6 @@ +config.module.rules.push( + { + test: /\.hbs$/i, + loader: 'handlebars-loader' + } +); \ No newline at end of file diff --git a/modules/server/webpack.config.d/jquery.js b/modules/server/webpack.config.d/jquery.js new file mode 100644 index 0000000..e6c6b21 --- /dev/null +++ b/modules/server/webpack.config.d/jquery.js @@ -0,0 +1,9 @@ +;(function() { + const webpack = require('webpack') + + config.plugins.push(new webpack.ProvidePlugin({ + $: "jquery", + jQuery: "jquery", + "window.jQuery": "jquery" + })); +})(); diff --git a/modules/server/webpack.config.d/moment.js b/modules/server/webpack.config.d/moment.js new file mode 100644 index 0000000..fb7c329 --- /dev/null +++ b/modules/server/webpack.config.d/moment.js @@ -0,0 +1,15 @@ +;(function() { + const webpack = require('webpack') + try { + const moment = require("moment"); + config.plugins.push(new webpack.IgnorePlugin({ + resourceRegExp: /^\.\/locale$/, + contextRegExp: /moment$/, + })); + config.plugins.push(new webpack.ProvidePlugin({ + moment: "moment", + "window.moment": "moment" + })); + } catch (e) { + } +})(); diff --git a/modules/server/webpack.config.d/webpack.js b/modules/server/webpack.config.d/webpack.js new file mode 100644 index 0000000..4ce4481 --- /dev/null +++ b/modules/server/webpack.config.d/webpack.js @@ -0,0 +1,15 @@ +config.resolve.modules.push("../../processedResources/js/main"); + +if (config.devServer) { + config.devServer.hot = true; + config.devtool = 'eval-cheap-source-map'; +} else { + config.devtool = undefined; +} + +// disable bundle size warning +config.performance = { + assetFilter: function (assetFilename) { + return !assetFilename.endsWith('.js'); + }, +};