updates
This commit is contained in:
.gitignore
client
src
jsMain
uikit
.eslintrc.json.gitignore.npmignore.webstorm.jsBACKERS.mdCHANGELOG.mdCONTRIBUTING.mdLICENSE.mdREADME.mdbuild.gradlecomposer.jsonjsconfig.jsonpackage.jsonyarn.lock
src
images
backgrounds
accordion-close.svgaccordion-open.svgdivider-icon.svgform-checkbox-indeterminate.svgform-checkbox.svgform-datalist.svgform-radio.svgform-select.svglist-bullet.svgnav-parent-close.svgnav-parent-open.svg
components
close-icon.svgclose-large.svgmarker.svgnavbar-toggle-icon.svgoverlay-icon.svgpagination-next.svgpagination-previous.svgsearch-icon.svgsearch-large.svgsearch-navbar.svgslidenav-next-large.svgslidenav-next.svgslidenav-previous-large.svgslidenav-previous.svgspinner.svgtotop.svg
icons
500px.svgalbum.svgarrow-down.svgarrow-left.svgarrow-right.svgarrow-up.svgbag.svgban.svgbehance.svgbell.svgbold.svgbolt.svgbookmark.svgcalendar.svgcamera.svgcart.svgcheck.svgchevron-double-left.svgchevron-double-right.svgchevron-down.svgchevron-left.svgchevron-right.svgchevron-up.svgclock.svgclose.svgcloud-download.svgcloud-upload.svgcode.svgcog.svgcomment.svgcommenting.svgcomments.svgcopy.svgcredit-card.svgdatabase.svgdesktop.svgdiscord.svgdownload.svgdribbble.svgetsy.svgexpand.svgfacebook.svgfile-edit.svgfile-pdf.svgfile-text.svgfile.svgflickr.svgfolder.svgforward.svgfoursquare.svgfuture.svggit-branch.svggit-fork.svggithub-alt.svggithub.svggitter.svggoogle.svggrid.svghappy.svghashtag.svgheart.svghistory.svghome.svgimage.svginfo.svginstagram.svgitalic.svgjoomla.svglaptop.svglifesaver.svglink.svglinkedin.svglist.svglocation.svglock.svgmail.svgmenu.svgmicrophone.svgminus-circle.svgminus.svgmore-vertical.svgmore.svgmove.svgnut.svgpagekit.svgpaint-bucket.svgpencil.svgphone-landscape.svgphone.svgpinterest.svgplay-circle.svgplay.svgplus-circle.svgplus.svgprint.svgpull.svgpush.svgquestion.svgquote-right.svgreceiver.svgreddit.svgrefresh.svgreply.svgrss.svgsearch.svgserver.svgsettings.svgshrink.svgsign-in.svgsign-out.svgsocial.svgsoundcloud.svgstar.svgstrikethrough.svgtable.svgtablet-landscape.svgtablet.svgtag.svgthumbnails.svgtiktok.svgtrash.svgtriangle-down.svgtriangle-left.svgtriangle-right.svgtriangle-up.svgtripadvisor.svgtumblr.svgtv.svgtwitch.svgtwitter.svguikit.svgunlock.svgupload.svguser.svgusers.svgvideo-camera.svgvimeo.svgwarning.svgwhatsapp.svgwordpress.svgworld.svgxing.svgyelp.svgyoutube.svg
js
api
components
countdown.jsfilter.jsindex.js
internal
lightbox-panel.jslightbox.jsnotification.jsparallax.jsslider-parallax.jsslider.jsslideshow-parallax.jsslideshow.jssortable.jstooltip.jsupload.jscore
accordion.jsalert.jscore.jscover.jsdrop.jsform-custom.jsgif.jsgrid.jsheight-match.jsheight-viewport.jsicon.jsimg.jsindex.jsleader.jsmargin.jsmodal.jsnav.jsnavbar.jsoffcanvas.jsoverflow-auto.jsresponsive.jsscroll.jsscrollspy-nav.jsscrollspy.jssticky.jssvg.jsswitcher.jstab.jstoggle.jsvideo.js
mixin
animate.jsclass.jscontainer.jsflex-bug.js
uikit-core.jsuikit.jsinternal
media.jsmodal.jsparallax.jsposition.jsslider-autoplay.jsslider-drag.jsslider-nav.jsslider-reactive.jsslider.jsslideshow.jstogglable.jsutil
less
components
_import.lessaccordion.lessalert.lessalign.lessanimation.lessarticle.lessbackground.lessbadge.lessbase.lessbreadcrumb.lessbutton.lesscard.lessclose.lesscolumn.lesscomment.lesscontainer.lesscountdown.lesscover.lessdescription-list.lessdivider.lessdotnav.lessdrop.lessdropdown.lessflex.lessform-range.lessform.lessgrid.lessheading.lessheight.lessicon.lessiconnav.lessinverse.lesslabel.lessleader.lesslightbox.lesslink.lesslist.lessmargin.lessmarker.lessmixin.lessmodal.lessnav.lessnavbar.lessnotification.lessoffcanvas.lessoverlay.lesspadding.lesspagination.lessplaceholder.lessposition.lessprint.lessprogress.lesssearch.lesssection.lessslidenav.lessslider.lessslideshow.lesssortable.lessspinner.lesssticky.lesssubnav.lesssvg.lessswitcher.lesstab.lesstable.lesstext.lessthumbnav.lesstile.lesstooltip.lesstotop.lesstransition.lessutility.lessvariables.lessvisibility.lesswidth.less
theme
_import.lessaccordion.lessalert.lessalign.lessanimation.lessarticle.lessbackground.lessbadge.lessbase.lessbreadcrumb.lessbutton.lesscard.lessclose.lesscolumn.lesscomment.lesscontainer.lesscountdown.lessdescription-list.lessdivider.lessdotnav.lessdrop.lessdropdown.lessform-range.lessform.lessgrid.lessheading.lessheight.lessicon.lessiconnav.lessinverse.lesslabel.lessleader.lesslightbox.lesslink.lesslist.lessmargin.lessmarker.lessmodal.lessnav.lessnavbar.lessnotification.lessoffcanvas.lessoverlay.lesspadding.lesspagination.lessplaceholder.lessposition.lessprogress.lesssearch.lesssection.lessslidenav.lessslider.lesssortable.lessspinner.lesssticky.lesssubnav.lesstab.lesstable.lesstext.lessthumbnav.lesstile.lesstooltip.lesstotop.lesstransition.lessutility.lessvariables.lesswidth.less
uikit.lessuikit.theme.lessscss
components
_import.components.scss_import.scss_import.utilities.scssaccordion.scssalert.scssalign.scssanimation.scssarticle.scssbackground.scssbadge.scssbase.scssbreadcrumb.scssbutton.scsscard.scssclose.scsscolumn.scsscomment.scsscontainer.scsscountdown.scsscover.scssdescription-list.scssdivider.scssdotnav.scssdrop.scssdropdown.scssflex.scssform-range.scssform.scssgrid-masonry.scssgrid.scssheading.scssheight.scssicon.scssiconnav.scssinverse.scsslabel.scssleader.scsslightbox.scsslink.scsslist.scssmargin.scssmarker.scssmixin.scssmodal.scssnav.scssnavbar.scssnotification.scssoffcanvas.scssoverlay.scsspadding.scsspagination.scssplaceholder.scssposition.scssprint.scssprogress.scsssearch.scsssection.scssslidenav.scssslider.scssslideshow.scsssortable.scssspinner.scsssticky.scsssubnav.scsssvg.scssswitcher.scsstab.scsstable.scsstext.scssthumbnav.scsstile.scsstooltip.scsstotop.scsstransition.scssutility.scssvariables.scssvisibility.scsswidth.scss
mixins-theme.scssmixins.scsstheme
_import.scssaccordion.scssalert.scssalign.scssanimation.scssarticle.scssbackground.scssbadge.scssbase.scssbreadcrumb.scssbutton.scsscard.scssclose.scsscolumn.scsscomment.scsscontainer.scsscountdown.scssdescription-list.scssdivider.scssdotnav.scssdrop.scssdropdown.scssform-range.scssform.scssgrid.scssheading.scssheight.scssicon.scssiconnav.scssinverse.scsslabel.scssleader.scsslightbox.scsslink.scsslist.scssmargin.scssmarker.scssmodal.scssnav.scssnavbar.scssnotification.scssoffcanvas.scssoverlay.scsspadding.scsspagination.scssplaceholder.scssposition.scssprogress.scsssearch.scsssection.scssslidenav.scssslider.scsssortable.scssspinner.scsssticky.scsssubnav.scsstab.scsstable.scsstext.scssthumbnav.scsstile.scsstooltip.scsstotop.scsstransition.scssutility.scssvariables.scsswidth.scss
uikit-theme.scssuikit.scssvariables-theme.scssvariables.scssfeatures/common/common/src/jvmMain/kotlin/dev/inmo/postssystem/features/common/common
gradle
server
services/posts/client
settings.gradle@ -32,3 +32,62 @@ dependencies {
|
||||
api "org.jetbrains.exposed:exposed-jdbc:$kotlin_exposed_version"
|
||||
api "org.postgresql:postgresql:$psql_version"
|
||||
}
|
||||
|
||||
|
||||
task copyClient(type: Copy) {
|
||||
dependsOn ":postssystem.client:jsBrowserDistribution"
|
||||
File clientSources = project(":postssystem.client").file("build/distributions")
|
||||
SourceDirectorySet resources = sourceSets.main.resources
|
||||
File webFolderPath = new File(resources.getSrcDirs()[0].toString(), "web")
|
||||
exclude("*.map")
|
||||
from clientSources.absolutePath
|
||||
into webFolderPath.absolutePath
|
||||
}
|
||||
|
||||
|
||||
tasks.getByName("compileKotlin")
|
||||
.dependsOn(project(":postssystem.client").jsBrowserDistribution)
|
||||
.dependsOn(copyClient)
|
||||
tasks.getByName("compileKotlin").configure {
|
||||
mustRunAfter project(":postssystem.client").jsBrowserDistribution
|
||||
mustRunAfter copyClient
|
||||
}
|
||||
|
||||
tasks.getByName("run")
|
||||
.dependsOn(project(":postssystem.client").jsBrowserDistribution)
|
||||
.dependsOn(copyClient)
|
||||
tasks.getByName("run").configure {
|
||||
mustRunAfter project(":postssystem.client").jsBrowserDistribution
|
||||
mustRunAfter copyClient
|
||||
}
|
||||
|
||||
task copyUIKitCSS(type: Copy) {
|
||||
dependsOn ":postssystem.client.uikit:build"
|
||||
File dist = project(":postssystem.client.uikit").file("dist")
|
||||
SourceDirectorySet resources = sourceSets.main.resources
|
||||
File webFolderPath = new File(resources.getSrcDirs()[0].toString(), "web")
|
||||
File cssFilesFolder = new File(dist, "css")
|
||||
from cssFilesFolder.absolutePath
|
||||
include "uikit.min.css"
|
||||
into new File(webFolderPath, "css").absolutePath
|
||||
}
|
||||
|
||||
task copyUIKitJS(type: Copy) {
|
||||
dependsOn ":postssystem.client.uikit:build"
|
||||
File dist = project(":postssystem.client.uikit").file("dist")
|
||||
SourceDirectorySet resources = sourceSets.main.resources
|
||||
File webFolderPath = new File(resources.getSrcDirs()[0].toString(), "web")
|
||||
File jsFilesFolder = new File(dist, "js")
|
||||
from jsFilesFolder.absolutePath
|
||||
include "uikit.min.js"
|
||||
include "uikit-icons.min.js"
|
||||
into new File(webFolderPath, "js").absolutePath
|
||||
}
|
||||
|
||||
tasks.getByName("processResources")
|
||||
.dependsOn(copyUIKitJS)
|
||||
.dependsOn(copyUIKitCSS)
|
||||
tasks.getByName("processResources").configure {
|
||||
mustRunAfter copyUIKitJS
|
||||
mustRunAfter copyUIKitCSS
|
||||
}
|
||||
|
@ -2,21 +2,19 @@ package dev.inmo.postssystem.server
|
||||
|
||||
import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator
|
||||
import io.ktor.application.call
|
||||
import io.ktor.http.content.files
|
||||
import io.ktor.http.content.static
|
||||
import io.ktor.http.content.*
|
||||
import io.ktor.response.respondRedirect
|
||||
import io.ktor.routing.Route
|
||||
import io.ktor.routing.get
|
||||
import java.io.File
|
||||
|
||||
class ClientStaticRoutingConfiguration(
|
||||
clientStatic: String?
|
||||
private val clientStatic: String?
|
||||
) : ApplicationRoutingConfigurator.Element {
|
||||
private val staticFile = clientStatic ?.let { File(clientStatic).takeIf { it.exists() } }
|
||||
override fun Route.invoke() {
|
||||
staticFile ?.let {
|
||||
clientStatic ?.let {
|
||||
static("client") {
|
||||
files(it)
|
||||
resources(it)
|
||||
get {
|
||||
call.respondRedirect("client/index.html")
|
||||
}
|
||||
|
@ -12,7 +12,6 @@ data class Config(
|
||||
val databaseConfig: DatabaseConfig = DatabaseConfig(),
|
||||
@SerialName("auth")
|
||||
val authConfig: AuthConfig = AuthConfig(),
|
||||
val clientStatic: String? = null,
|
||||
val filesFolder: String,
|
||||
val debugMode: Boolean = false
|
||||
) {
|
||||
|
@ -192,7 +192,7 @@ fun getDIModule(
|
||||
singleWithBinds { RolesManagerRolesStorageServerRoutesConfigurator(get(), get()) }
|
||||
singleWithBinds { ServerPostsServiceRoutingConfigurator(get(), get(), get()) }
|
||||
|
||||
singleWithBinds { ClientStaticRoutingConfiguration(get<Config>().clientStatic) }
|
||||
singleWithBinds { ClientStaticRoutingConfiguration("web") }
|
||||
singleWithBinds {
|
||||
RolesAuthenticationConfigurator<Role>(
|
||||
get(),
|
||||
@ -213,6 +213,7 @@ fun getDIModule(
|
||||
)
|
||||
}
|
||||
singleWithBinds { AuthenticationRoutingConfigurator(get(), get(), get()) }
|
||||
singleWithBinds { NotFoundStatusPageRedirectToIndex("/client") }
|
||||
|
||||
if (config.debugMode) {
|
||||
single<ApplicationRoutingConfigurator.Element>(StringQualifier("Tracer")) { ApplicationRoutingConfigurator.Element {(this as Routing).trace { application.log.trace(it.buildText()) } } }
|
||||
|
17
server/src/main/java/dev/inmo/postssystem/server/NotFoundStatusPageRedirectToIndex.kt
Normal file
17
server/src/main/java/dev/inmo/postssystem/server/NotFoundStatusPageRedirectToIndex.kt
Normal file
@ -0,0 +1,17 @@
|
||||
package dev.inmo.postssystem.server
|
||||
|
||||
import dev.inmo.micro_utils.ktor.server.configurators.StatusPagesConfigurator
|
||||
import io.ktor.application.call
|
||||
import io.ktor.features.StatusPages
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.response.respondRedirect
|
||||
|
||||
data class NotFoundStatusPageRedirectToIndex(
|
||||
val redirectTo: String
|
||||
) : StatusPagesConfigurator.Element {
|
||||
override fun StatusPages.Configuration.invoke() {
|
||||
status(HttpStatusCode.NotFound) {
|
||||
call.respondRedirect(redirectTo)
|
||||
}
|
||||
}
|
||||
}
|
5
server/src/main/resources/web/css/containers.css
Normal file
5
server/src/main/resources/web/css/containers.css
Normal file
@ -0,0 +1,5 @@
|
||||
.vertical_container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
1
server/src/main/resources/web/css/uikit.min.css
vendored
Normal file
1
server/src/main/resources/web/css/uikit.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
3
server/src/main/resources/web/css/visibility.css
Normal file
3
server/src/main/resources/web/css/visibility.css
Normal file
@ -0,0 +1,3 @@
|
||||
.gone {
|
||||
display: none;
|
||||
}
|
24
server/src/main/resources/web/index.html
Normal file
24
server/src/main/resources/web/index.html
Normal file
@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>PostsSystem</title>
|
||||
|
||||
<link rel="stylesheet" href="css/uikit.min.css">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" type="text/css">
|
||||
<link rel="stylesheet" href="css/containers.css" type="text/css">
|
||||
<link rel="stylesheet" href="css/visibility.css" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="navbar" class="uk-section uk-section-secondary uk-padding-remove"></div>
|
||||
<main class="uk-flex">
|
||||
<div id="main" class="main-view"></div>
|
||||
<div id="modal"></div>
|
||||
</main>
|
||||
|
||||
<script src="js/uikit.min.js"></script>
|
||||
<script src="js/uikit-icons.min.js"></script>
|
||||
<script type="application/javascript" src="postssystem.client.js"></script>
|
||||
</body>
|
||||
</html>
|
1
server/src/main/resources/web/js/uikit-icons.min.js
vendored
Normal file
1
server/src/main/resources/web/js/uikit-icons.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
server/src/main/resources/web/js/uikit.min.js
vendored
Normal file
1
server/src/main/resources/web/js/uikit.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
server/src/main/resources/web/postssystem.client.js
Normal file
2
server/src/main/resources/web/postssystem.client.js
Normal file
File diff suppressed because one or more lines are too long
@ -4,7 +4,6 @@
|
||||
"username": "test",
|
||||
"password": "test"
|
||||
},
|
||||
"clientStatic": "../client/build/distributions",
|
||||
"filesFolder": "/tmp/files",
|
||||
"debugMode": true
|
||||
}
|
||||
|
Reference in New Issue
Block a user