diff options
author | nea <romangraef@gmail.com> | 2022-08-20 15:48:04 +0200 |
---|---|---|
committer | nea <romangraef@gmail.com> | 2022-08-20 15:48:04 +0200 |
commit | 6207fd482a685527fda286e0df5d4fa87aa85149 (patch) | |
tree | 497bc3aa56286ce29224ae83382396ee69462e82 /example/src/main/kotlin/moe/nea89 | |
parent | 893ece6b2f02329d460538311f572cb5b1936d3f (diff) | |
download | neamoe-6207fd482a685527fda286e0df5d4fa87aa85149.tar.gz neamoe-6207fd482a685527fda286e0df5d4fa87aa85149.tar.bz2 neamoe-6207fd482a685527fda286e0df5d4fa87aa85149.zip |
subprojectification
Diffstat (limited to 'example/src/main/kotlin/moe/nea89')
-rw-r--r-- | example/src/main/kotlin/moe/nea89/website/test/AsciiArt.kt | 5 | ||||
-rw-r--r-- | example/src/main/kotlin/moe/nea89/website/test/index.kt | 126 |
2 files changed, 131 insertions, 0 deletions
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 |