summaryrefslogtreecommitdiff
path: root/example
diff options
context:
space:
mode:
authornea <romangraef@gmail.com>2022-08-20 15:48:04 +0200
committernea <romangraef@gmail.com>2022-08-20 15:48:04 +0200
commit6207fd482a685527fda286e0df5d4fa87aa85149 (patch)
tree497bc3aa56286ce29224ae83382396ee69462e82 /example
parent893ece6b2f02329d460538311f572cb5b1936d3f (diff)
downloadneamoe-6207fd482a685527fda286e0df5d4fa87aa85149.tar.gz
neamoe-6207fd482a685527fda286e0df5d4fa87aa85149.tar.bz2
neamoe-6207fd482a685527fda286e0df5d4fa87aa85149.zip
subprojectification
Diffstat (limited to 'example')
-rw-r--r--example/build.gradle.kts7
-rw-r--r--example/src/main/kotlin/moe/nea89/website/test/AsciiArt.kt5
-rw-r--r--example/src/main/kotlin/moe/nea89/website/test/index.kt126
-rw-r--r--example/src/main/resources/asciiart/boob.txt96
-rw-r--r--example/src/main/resources/images/me.jpegbin0 -> 567270 bytes
-rw-r--r--example/src/main/resources/images/moisturized.jpgbin0 -> 41960 bytes
-rw-r--r--example/src/main/resources/index.html14
-rw-r--r--example/webpack.config.d/noopenbrowser.js1
-rw-r--r--example/webpack.config.d/style.js5
9 files changed, 254 insertions, 0 deletions
diff --git a/example/build.gradle.kts b/example/build.gradle.kts
new file mode 100644
index 0000000..46f4a6d
--- /dev/null
+++ b/example/build.gradle.kts
@@ -0,0 +1,7 @@
+
+dependencies {
+ implementation(npm("@fontsource/comic-mono", "^4.5.0"))
+ implementation(rootProject)
+}
+
+
diff --git a/example/src/main/kotlin/moe/nea89/website/test/AsciiArt.kt b/example/src/main/kotlin/moe/nea89/website/test/AsciiArt.kt
new file mode 100644
index 0000000..30123f6
--- /dev/null
+++ b/example/src/main/kotlin/moe/nea89/website/test/AsciiArt.kt
@@ -0,0 +1,5 @@
+package moe.nea89.website.test
+
+import kotlinext.js.require
+
+val boobs = require("./asciiart/boob.txt") as String \ No newline at end of file
diff --git a/example/src/main/kotlin/moe/nea89/website/test/index.kt b/example/src/main/kotlin/moe/nea89/website/test/index.kt
new file mode 100644
index 0000000..9fdb2c1
--- /dev/null
+++ b/example/src/main/kotlin/moe/nea89/website/test/index.kt
@@ -0,0 +1,126 @@
+package moe.nea89.website.test
+
+import kotlinext.js.require
+import kotlinx.browser.document
+import kotlinx.html.dom.append
+import kotlinx.html.dom.create
+import kotlinx.html.img
+import kotlinx.html.js.a
+import kotlinx.html.js.div
+import kotlinx.html.js.p
+import moe.nea89.website.*
+import styled.injectGlobal
+import kotlin.time.Duration.Companion.milliseconds
+
+val defaultFileSystem = fileSystem {
+ "etc" {
+ "passwd" text "hunter2"
+ }
+ "home/nea" {
+ "todo" text """
+ | - git gud
+ | - finish this website
+ | - convince the general public that comic sans is a viable font
+ """.trimMargin()
+ "moisturized" image require("images/moisturized.jpg")
+ "download" download require("images/me.jpeg")
+ }
+ "flag" text "CTF{12345abcdefghijklmonp3.1.4.1.5.9.2.8}"
+}
+
+fun main() {
+
+ require("@fontsource/comic-mono/index.css")
+ injectGlobal(Styles.global)
+ val root = document.body!!.append.div()
+ val console = KConsole.createFor(root, fileSystem = defaultFileSystem)
+ console.addLine("Starting up terminal.")
+ console.PS1 = ">"
+ console.rerender()
+ console.registerCommand(command("cwd", "pwd") {
+ val fa = requireFileAccessor()
+ console.addLine(fa.currentDir.joinToString(separator = "/", prefix = "/"))
+ })
+ console.registerCommand(command("cd") {
+ val fa = requireFileAccessor()
+ val path = args.singleOrNull()
+ if (path == null) {
+ console.addLine("Usage: cd <directory>")
+ return@command
+ }
+ val error = fa.cd(path)
+ if (error != null) {
+ console.addLine("cd: ${error.name}")
+ }
+ })
+ console.registerCommand(command("ls") {
+ val fa = requireFileAccessor()
+ val path = when (args.size) {
+ 0 -> "."
+ 1 -> args[0]
+ else -> {
+ console.addLine("Usage: ls [directory or file]")
+ return@command
+ }
+ }
+ val file = fa.resolve(path)
+ if (file == null) {
+ console.addLine("ls: Could not find file or directory")
+ return@command
+ }
+ when (file) {
+ is KFile.Directory -> {
+ val longestName = file.files.keys.maxOf { it.length }
+ file.files.forEach { (name, file) ->
+ wait(200.milliseconds)
+ console.addLine(
+ name + " ".repeat(longestName + 1 - name.length) + file.fileType
+ )
+ console.rerender()
+ }
+ }
+
+ else -> console.addLine("ls: is a ${file.fileType}")
+ }
+ })
+ console.registerCommand(command("color") {
+ console.addLine("This is a ", red("red"), " word: ", green("1.0"), " ", blue("BLUUEEE"))
+ })
+ console.registerCommand(command("cat") {
+ val fa = requireFileAccessor()
+ val path = when (args.size) {
+ 1 -> args[0]
+ else -> {
+ console.addLine("Usage: cat [directory or file]")
+ return@command
+ }
+ }
+ val file = fa.resolve(path)
+ if (file == null) {
+ console.addLine("cat: Could not find file or directory")
+ return@command
+ }
+ when (file) {
+ is KFile.Directory -> console.addLine("cat: Is a directory")
+ is KFile.Text -> console.addMultilineText(file.text)
+ is KFile.Image -> console.addLine(document.create.p {
+ img(src = file.url)
+ })
+
+ is KFile.Download -> {
+ val link = document.create.a(file.url)
+ link.download = file.name.last()
+ document.body!!.append(link)
+ link.click()
+ link.remove()
+ console.addLine("Download started")
+ }
+ }
+ })
+ console.registerCommand(command("dick", "cock") {
+ console.addMultilineText("Hehe")
+ })
+ console.registerCommand(command("boob", "booob") {
+ console.addMultilineText(boobs)
+ })
+} \ No newline at end of file
diff --git a/example/src/main/resources/asciiart/boob.txt b/example/src/main/resources/asciiart/boob.txt
new file mode 100644
index 0000000..6ce2b11
--- /dev/null
+++ b/example/src/main/resources/asciiart/boob.txt
@@ -0,0 +1,96 @@
+ ,c="""=c,_
+ _,j "==c,
+ ,="`J" "h.
+ ,r"" c="?r `L
+ p" "$ ",
+ c" ;F `"c. ".
+ J' $ `h `h.
+ J' ,-"j" t `h
+ ,P ," " `h.
+ ,J' ," c `h
+ J' J' "h `h
+ J / ". `h.
+ $ ; ; `h `$.
+ $ `. ``; `. .`h `=q
+ J `. . `.`; `. .`.h "
+ F `. `.; ` `.; `. `.?
+ j' .`. `.\ `.` `.`?`.`.`.?:
+ $ `.`.` `.j`.`.;.`. `.3.`.`.`L`.
+ .f `.`.`. `.?$.`.?.`.`.`.`$`.`.`$`.`
+ $ `.`.`.`.`.`.$.`.`Lc.`.`.`.h.`.`$`.`.
+ j' `.`.`.`.`.`.$.`.`.h?cccci';h`.`?L.`.`.
+ J `.`.`.`.`.`$'?h.`J?,c$?`.?hP'?""?r`.`.`
+ `P `.`.L.`.`.j'`.`."=-"`.`z?$??$$F'3F`.J.`.
+ `L `.`.`h`.`.$$??`.`.`.`.$,c$$P".`.J..J`.`.
+ ? `.`.`?i,c$$?$"3$`.`.`.`.`.`.`.`.$.j'`.`.
+ `h `.`.`.$$$.$i$P".`)`.`.`.`.`.`.`.$.$.`.`.
+ `r `.`.`.;;F.`.`.`.`.`.`.`.`.`.`.`.$.$.`.P'
+ ;f `.`.`(;;h.`.`.`.`.`.`.`.`.`.`.`.$.F.`$`.`
+ J" `.`.`.t;$.`.`.`.`.`.`.`;;.`.`.`.$.$.j'`.`.`
+ P .`.`.`\9;`.`.`.`.`.,c'J?.`.`.`.$;$.J.`.`.`.
+ j' .`.`.`.?C`.`.`;;`."".`.`.`.`.`.?'`h$.`.`.`.`.
+ L .`.`.`.`.h.`./.`.`,ccc$??hJ?$F.`.`.?r`.`.`.`.`.
+ $ y`.`.`.`.`?i.`.;??li??"' .$$`.`.`.`$`.`.`.`.`.`
+ `) ; ; u.`.`.`.`.`?;.`$?; .,;c?iP.`.`.`.`?,.`.`.`.`.`. .`
+ f t l $.`.`.`.`.``?;.`?;;;;;;iP"`.`.`.`.`;$,`.`.`.`.`.`.` `.
+ t ) ,q l $.`.`.`.`.`.`"h.`"??""`.`.`.`.`.`.J?J`t.`.`.`.`.`.` `.`
+ "j=" "f $.`.`.`.`.`.`.`$`.`.`.`.`.`.`.``c?;;$.`.t.`.`.`.`. `.`
+ $.`.`.`.`.`.`.`.?h`.`.`.`.`.`.j";;;9'.`.`.?.`,P.` `.`
+ $.`.`.`.`.`.`.`.`"?y`.`.`.`,J?;;;;;F`.`.`.J?".`. `.`
+ .P.`.`.`.`.`.`.`.`.`.?hccd??;;;;;;;9c$r`.`j'.`.`. .`.`
+ J`.`.`.\.`.`.`.`.`.`.`.`$;;;;;;;;;;;;;$`.`P`.`.`. .`.`
+ $`.`.`.`?`.`.`.`.`.`.`.`.h;;;;;;;;;;;;9`.f.`.`,P `.`.`
+ ?`.`.`.`.h.`.`.`.`.`.`.`.`h;;;;;;;;;;;9`j`.`.$' .`.`.`
+ h.`;`.l.$.`.`.`.`.`.`.`.`.?;;;;;;;;;;$".`.`J.` `.`.`.`
+ ?.`P`.l.F.c.`.`f`.`.`.`.`.`?;;;;;jjii$`.`.`$.` .`.`$`.`
+ "$.`P`J`.$.`.`h`.`.`.`.`.`.F""""` $`.`.`$.` ?.`.`$`.`
+ J"`$.,"$.`.`?`.`.`.`.`.`j' ,JL.`.`$.` `3.`.`?`.`
+ `=chJ" ?.`.`.?i`.`.`.`.`$$?????"" L`.`$`.`.3r`.`(l,c
+ ,P ?`.`.`.?.`.`.`.J" ?`.`3`.`.`h`.`P
+ J ,c ?i`.`.`3`.`.`J" "i,$"=i,J"c;P
+ j' J" `h.`.`3`.`_J"
+ $ J" ?`.`3P""'
+ ,LJ' h._$
+ J" . `" -c,
+ j'(r "??cc,,_ h $
+ 3.P `"""""=c,,_ ? `L
+ zP""??cc,__ "=,_ ? ". L
+ .P ""??cc,_ "=c_ $ ". $ .
+ ," `"h,_ `=c. $ ". h $
+ ,J' `"==c, `"$h ". $ .F
+ ," """===cc,,, "?c, "??h `L J
+ J' "=c,_ `?. ?. P
+ J' "c, `?. h j'
+ ,J??;;??$c,,_ `=cccc, "r $$ $
+ c"`.`.`.`;;;;;;??c,._ "=c . "h. 3 .f
+ J??P`.`.`.`.`.;;;;;;;;;??;"==ccy, "c `h "c, 3 j
+,$i;;P`.`.`.`.`.`;;;;;;;;P`.`;ccc,"c `h ". "h. j.$
+'hC;9F`.`.`.`.`.`.;;;;;;F.`.$9?;h;;$F ?. ". "?$'
+ ?h;P.`.`.`.`.`.`.;;;;;j'.`3;;???;;$?L ?. "c $
+ $P`.`.`.`.`.`.`.,;;;;9`.`?h;;;;;?'`.h ? "h $
+ ?;`.`.`.`.`.`.`.;;;;;9`.`.`"????`.`.?L "h $
+ $`.`.`.`.`.`.`;;;;;;9`.`.`.`.`.`.`.``h `$
+ L.`.`.`.`.``;;;;;;;?`.`.`.`.`.`.`.`.`$ `, $
+ `L`.`.`.`.`;;;j;;;;;L.`.`.`.`.`.`.`.`.?. ", ?.
+ ?i`.`.`.;;;j;;;;;;?;`.`.`.`.`.`.`.`.`.h `, L
+ `?i..`,;;$;;';;;.`.h.`.`.`.`.`.`.`.`.`?c $ h
+ "?h$??F.``;;;.`.;$c.`.`.`.`.`.`.`.`.`$L `h J
+ $;`.`;;`.`.`;;?hy_.`.`.`.`.`.`,c$$h. ?.j'
+ .$`.`.;;`.`.`.;;;;"??$ccyyyccJ??;;;$3c $$
+ j'`.`.;.`.`.`.`.;;;;;;;;;;;;;;;;;;;;$`h `$
+ .$.`.`.`.`.`.`.`.``;;;;;;;;;;;;;;.`;;;$ "c $
+ j'.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`;;;$. "c $-
+ $`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.;;;$. $L, $
+ $`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`;;;$ `h "h .$ ,P
+ F`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.;;;h `h "h ;F. $
+ C`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`;;;L `r $, $ ?,f
+ h`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.;;9r ? `fcF $
+ $`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.;;;$ L $ j'
+ $`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.;;;;$ $ $ J'
+ $`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`;;;;;?h `cc=' J'
+ $`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.,;;;;;;9.J $
+ ?`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`,;;;;;;;$$' $
+ `h.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.,;;;;;;;9" $
+ $.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.;;;;;;;;9 "h
+ $.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`;;;;;;;;;$ c????c
+ j.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`;;;;;;;;;9 .P \ No newline at end of file
diff --git a/example/src/main/resources/images/me.jpeg b/example/src/main/resources/images/me.jpeg
new file mode 100644
index 0000000..1d829fa
--- /dev/null
+++ b/example/src/main/resources/images/me.jpeg
Binary files differ
diff --git a/example/src/main/resources/images/moisturized.jpg b/example/src/main/resources/images/moisturized.jpg
new file mode 100644
index 0000000..89767ea
--- /dev/null
+++ b/example/src/main/resources/images/moisturized.jpg
Binary files differ
diff --git a/example/src/main/resources/index.html b/example/src/main/resources/index.html
new file mode 100644
index 0000000..46c68c6
--- /dev/null
+++ b/example/src/main/resources/index.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport"
+ content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>Nea Moe</title>
+</head>
+<body>
+<noscript>You need to enable JavaScript to run this app.</noscript>
+<script type="text/javascript" src="example.js"></script>
+</body>
+</html> \ No newline at end of file
diff --git a/example/webpack.config.d/noopenbrowser.js b/example/webpack.config.d/noopenbrowser.js
new file mode 100644
index 0000000..27eb2d8
--- /dev/null
+++ b/example/webpack.config.d/noopenbrowser.js
@@ -0,0 +1 @@
+(config.devServer = config.devServer || {}).open = false \ No newline at end of file
diff --git a/example/webpack.config.d/style.js b/example/webpack.config.d/style.js
new file mode 100644
index 0000000..3bdbd3c
--- /dev/null
+++ b/example/webpack.config.d/style.js
@@ -0,0 +1,5 @@
+config.resolve.modules.push("src/main/resources/")
+config.resolve.modules.push(".")
+config.module.rules.push({test: /\.txt$/, type: 'asset/source'})
+config.module.rules.push({test: /\.(png|jpg|jpeg|svg|gif)$/i, type: 'asset/resource'})
+console.log("Hahahahahah")