init app
This commit is contained in:
commit
c1ee729671
9 changed files with 444 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
**/**.**~
|
||||
**/.DS_Store
|
||||
|
112
README
Normal file
112
README
Normal file
|
@ -0,0 +1,112 @@
|
|||
|
||||
--------------
|
||||
| λ.sorrel.dev |\
|
||||
\--------------\ \
|
||||
\______________\|
|
||||
|
||||
it's my personal home page.
|
||||
it's for putting stuff on the web.
|
||||
|
||||
it's written in racket and serves (mostly) static html pages. there's some little
|
||||
javascript in there - https://htmx.org/
|
||||
|
||||
why's there some javascript? because javascript is still kinda important to me??
|
||||
mostly cause i think this htmx project is neat and allows me to do some cool things
|
||||
without sending several megabytes. and the pages still work without allowing scripts.
|
||||
|
||||
so
|
||||
________________
|
||||
|----------------|
|
||||
| HOW IT'S BUILT |
|
||||
|----------------|
|
||||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||||
it's a racket web server that uses xml library to generate some valid html.
|
||||
there's a dirty little dsl in there so that i can type some plain texty stuff and
|
||||
have my plain texty stuff get turned into sexprs and then into xexprs and then written
|
||||
as new-fangled html. typical lispy stuff.
|
||||
```
|
||||
(require web-server ; like so much of this module
|
||||
xml)
|
||||
```
|
||||
that's all compiled and hosted in my friend maren's bedroom. it's all very cute.
|
||||
|
||||
_________________
|
||||
|-----------------|
|
||||
| WHAT'S ON THERE |
|
||||
|-----------------|
|
||||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||||
so, yea, it's all running over there and it's serving up some html (with a little dash
|
||||
of javascript.) so what's on it?
|
||||
|
||||
right now, the plan's for
|
||||
|
||||
~UNSETTLED THOUGHTS~
|
||||
it's like a blog. just thinking out loud. or talking about projects that aren't
|
||||
ready to get their "tires kicked" yet
|
||||
|
||||
~SETTLED THOUGHTS~
|
||||
it's like a portfolio. links to stuff. deployed stuff. pictures of stuff. a
|
||||
home for everything that's done enough to need a home.
|
||||
|
||||
~THOUGHTS ABOUT WHO EVEN AM I~
|
||||
yr typical about page, y'know with some biographical information, some
|
||||
musings about life's meaning. some links to things i like or do as a
|
||||
person with other people in the world.
|
||||
|
||||
~some kinda tag system for things
|
||||
~some kinda apology for even serving you some javascript
|
||||
|
||||
the structure of things is such that: there's no templating per se. if the request
|
||||
has the path prefix "/hx/" you just get little snippets of html. the htmx is there to
|
||||
stitch that stuff together. make sure yr browser insesrts the response where it
|
||||
belongs in the page and i wipe my hands of the the thing. otherwise you get a page
|
||||
stitched together from all the bits and bobs.
|
||||
|
||||
so don't be surprised if yr response is just an ~unsettled thought~ without any header
|
||||
or footer or any of that fanciness.
|
||||
|
||||
_____________
|
||||
|-------------|
|
||||
| HOW TO POST |
|
||||
|-------------|
|
||||
¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||||
remember up at the top of the README i said there was a DSL for this thing? i meant a
|
||||
domain specific language. the domain is hella specific. like just my particular web
|
||||
page specific. there's little grammars for each little part of it. i'll talk about
|
||||
those in a moment.
|
||||
|
||||
for right now i'm going to talk about the posting. so you write up a little bit of
|
||||
plain text according to the grammar for the type of post yr going to do. how do you get
|
||||
the server to generate some stuff for you? that's where the second part of the process
|
||||
comes in. there's a little racket utility for that. if it were an ~unsettled thought~
|
||||
for example it might look something like:
|
||||
```
|
||||
$ mkpost -s source/source-file.txt -t public_html/blog/target-file.html
|
||||
```
|
||||
there's a couple things this'll do. the most obvious is that it takes yr plain text
|
||||
and it generates some html. you expected that. the other thing it does is it writes
|
||||
the name of that file to a little lookup table with all it's tags. [i haven't
|
||||
implemented this part yet]
|
||||
|
||||
so that's simple enough. now for the
|
||||
|
||||
__________________________
|
||||
|--------------------------|
|
||||
| DOMAIN SPECIFIC LANGUAGE |
|
||||
|--------------------------|
|
||||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||||
the main pages are just handwritten xexprs. not worth spending time on something you'll
|
||||
only write once.
|
||||
|
||||
but for the posts:
|
||||
|
||||
post = post type, tags
|
||||
|
||||
post type = ( "blog" | "project" ) "\n" ;
|
||||
|
||||
tags = { tag identifier, white space } "\n" ;
|
||||
tag identifier = "#", { alphabetic character}
|
||||
|
||||
|
||||
|
||||
|
113
sorrel.dev.rkt
Normal file
113
sorrel.dev.rkt
Normal file
|
@ -0,0 +1,113 @@
|
|||
#lang racket
|
||||
|
||||
(require net/url
|
||||
xml
|
||||
web-server/web-server
|
||||
web-server/servlet-dispatch
|
||||
web-server/dispatch
|
||||
(prefix-in files: web-server/dispatchers/dispatch-files)
|
||||
(prefix-in filter: web-server/dispatchers/dispatch-filter)
|
||||
(prefix-in sequencer: web-server/dispatchers/dispatch-sequencer)
|
||||
web-server/dispatchers/filesystem-map
|
||||
web-server/http)
|
||||
|
||||
(define (html-response content)
|
||||
(response/full
|
||||
200
|
||||
#"OK"
|
||||
(current-seconds)
|
||||
TEXT/HTML-MIME-TYPE
|
||||
'()
|
||||
(list content)))
|
||||
|
||||
|
||||
|
||||
(define (xexpr-file->xml file)
|
||||
(string->bytes/utf-8
|
||||
(xexpr->string (read (open-input-file file)))))
|
||||
|
||||
;;; httpx
|
||||
;; sends only the requested resource
|
||||
(define (about request)
|
||||
(html-response (xexpr-file->xml "source/about.txt")))
|
||||
|
||||
(define (home request)
|
||||
(html-response (xexpr-file->xml "source/index.txt")))
|
||||
|
||||
(define (404- request)
|
||||
(html-response (xexpr-file->xml "source/not-found.txt")))
|
||||
|
||||
(define (structures request structure-id)
|
||||
(html-response (xexpr-file->xml "source/not-found.txt")))
|
||||
|
||||
(define (index-structures request)
|
||||
(html-response (xexpr-file->xml "source/not-found.txt")))
|
||||
|
||||
(define (unstructures request structure-id)
|
||||
(html-response (xexpr-file->xml "source/not-found.txt")))
|
||||
|
||||
(define (index-unstructures request)
|
||||
(html-response (xexpr-file->xml "source/not-found.txt")))
|
||||
|
||||
(define-values (httpx-app reverse-httpx-uri)
|
||||
(dispatch-rules
|
||||
[("hx" "about") about]
|
||||
[("hx" "home") home]
|
||||
[("hx" "structures" (integer-arg)) structures]
|
||||
[("hx" "structures") index-structures]
|
||||
[("hx" "unstructures" (integer-arg)) unstructures]
|
||||
[("hx" "unstructures") index-unstructures]
|
||||
[else 404-]))
|
||||
|
||||
;;; page-app
|
||||
;; constructs entire page for each response
|
||||
(define (make-page resource)
|
||||
(string->bytes/utf-8
|
||||
(xexpr->string
|
||||
`(html ((lang "en"))
|
||||
,(read (open-input-file "source/head.txt"))
|
||||
(body
|
||||
,(read (open-input-file "source/header.txt"))
|
||||
,(read (open-input-file resource)))))))
|
||||
|
||||
(define (homepage request)
|
||||
(html-response (make-page "source/index.txt")))
|
||||
(define (about-page request)
|
||||
(html-response (make-page "source/about.txt")))
|
||||
|
||||
(define-values (page-app reverse-page-uri)
|
||||
(dispatch-rules
|
||||
[("") homepage]
|
||||
[("about") about-page]))
|
||||
|
||||
|
||||
;;; from /static
|
||||
(define url->path/static (make-url->path "static"))
|
||||
|
||||
(define static-dispatcher
|
||||
(files:make #:url->path (lambda (u)
|
||||
(url->path/static
|
||||
(struct-copy url u [path (cdr (url-path u))])))))
|
||||
|
||||
|
||||
;;; 404
|
||||
(define (not-found request)
|
||||
(html-response (make-page "source/not-found.txt")))
|
||||
|
||||
|
||||
;;; server
|
||||
(define stop
|
||||
(serve
|
||||
#:dispatch (sequencer:make
|
||||
(filter:make #rx"^/static/" static-dispatcher)
|
||||
(dispatch/servlet #:regexp #rx"^/hx/" httpx-app)
|
||||
(dispatch/servlet page-app)
|
||||
(dispatch/servlet not-found)
|
||||
)
|
||||
#:listen-ip "127.0.0.1"
|
||||
#:port 8000))
|
||||
|
||||
(with-handlers ([exn:break? (lambda (e)
|
||||
(stop))])
|
||||
(sync/enable-break never-evt))
|
||||
|
88
source/about.txt
Normal file
88
source/about.txt
Normal file
|
@ -0,0 +1,88 @@
|
|||
(main
|
||||
(p "what do you want to know?")
|
||||
(h1 "about sorrel")
|
||||
(p "i'm a gay lil nerd who's learning everyday about community, and ecology,
|
||||
and computer; and trying hard to be good for the world with my gay lil
|
||||
friends.")
|
||||
(section
|
||||
(h2 "contact")
|
||||
(p "- e - m- "
|
||||
(span " a - i ")
|
||||
(span " -l [ at ")
|
||||
(span "] s - o- ")
|
||||
(span "r - r- e - l [ d o")
|
||||
(span "t ] d -e")
|
||||
(span "-v is a good place to do the email"))
|
||||
(p
|
||||
"i have avoided 'online' for a long time, but i'm getting hip to it. i'll
|
||||
add some more socials here for to socially network in the future,
|
||||
promise."))
|
||||
(section
|
||||
(h2 "a bio or smth")
|
||||
(p
|
||||
"i am a little bug that was named after "
|
||||
(a ((href "https://plants.usda.gov/home/plantProfile?symbol=OXOR"))
|
||||
"a plant called sorrel")
|
||||
" and i live in the mountains of southern appalachia on "
|
||||
(span ((lang "chr")) "ᏣᎳᎩ")
|
||||
" (tsalagi/cherokee) land. i live with some cats and a whole mess of plants
|
||||
(most of them food) and a cordswain and i have sweet neighbors.")
|
||||
(p
|
||||
"i have never identified with the term 'hacker' but i have learned, in the
|
||||
past few years, that i do like to orchestrate computer machines and i do
|
||||
that with some cute friends at "
|
||||
(a ((href "https://bunk.computer"))
|
||||
"bunk computer club"))
|
||||
(p "some random things i believe/ i like/ i am/etc (in no particular order")
|
||||
;; about me bullets
|
||||
(ul
|
||||
;; language bullet
|
||||
(li (p "i like linguistics a whole lot."
|
||||
(a ((href "/tagged/conlang")
|
||||
(hx-get "/hx/tagged/conlang")
|
||||
(hx-target "nearest a")
|
||||
; swap for a tag? just a lil list inside a list?
|
||||
(hx-swap "innerHTML"))
|
||||
"i make languages (the human kind) for fun.")
|
||||
"there's a whole bunch of people who do this! "
|
||||
(a ((href "https://conlang.org/"))
|
||||
"language creation society")
|
||||
" i'm even working on a "
|
||||
(a ((href "/tagged/latl")
|
||||
(hx-get "/hx/tagged/latl")
|
||||
(hx-target "nearest a")
|
||||
(hx-swap "innerHTML"))
|
||||
"language (computer) to make languages (human).")))
|
||||
;; mmt bullet
|
||||
(li (p "mmt, but make it anarchist "
|
||||
(small "and get rid of all that \"sovereignty\" stuff, ew")))
|
||||
(li (p "the autistic-contiguous position: object-relations theory or gay
|
||||
sex act?"
|
||||
(small "a " (em "niche") " joke about having"
|
||||
(a ((href "/tagged/brain")
|
||||
(hx-get "/hx/tagged/brain")
|
||||
(hx-target "nearest a")
|
||||
(hx-swap "innerHTML"))
|
||||
"a ~type~ of experience"))))
|
||||
(li (p "being trans and gay"))
|
||||
(li (p "א ⃝"))))
|
||||
(section
|
||||
(h2 "a very earnest disclaimer")
|
||||
(p
|
||||
"i like to talk about computation with ppl! but it is important for me that
|
||||
you know: i am new to all this! i did not think software was ^for me^ and
|
||||
then i learned some webdev and now i am down the rabbit hole.")
|
||||
(p
|
||||
"i'm not very good at many things. i don't even have a math education or.
|
||||
have you ever met someone who *is* good at all this stuff?")
|
||||
(p
|
||||
"please be patient! with me and with everyone else you talk about things
|
||||
you care about with.")
|
||||
(p "let's hold our strong opinions loosely!")
|
||||
(p "and first assume good faith from others!")
|
||||
(br)
|
||||
(br)
|
||||
(p ((class "ascii but-normal-size"))
|
||||
" ⃔‥̺⃝⃕")
|
||||
(br)))
|
||||
|
27
source/head.txt
Normal file
27
source/head.txt
Normal file
|
@ -0,0 +1,27 @@
|
|||
(head
|
||||
(meta ((http-equiv "Content-Type")
|
||||
(content "text/html; charset=utf-8")))
|
||||
(meta ((name "author")
|
||||
(content "sorrel")))
|
||||
(meta ((name "description")
|
||||
(content "yr place for sorrel on the world wide web")))
|
||||
(meta ((name "viewport")
|
||||
(content "width=device-width, initial-scale=1")))
|
||||
(meta ((name "ascii-art-description")
|
||||
(content "it's a crop of the work 'Oxalis acetosella', Otto Wilhelm Thomé
|
||||
(1885) run through the ascii-art generation tool on https://www.asciiart.eu/")))
|
||||
(link ((rel "stylesheet")
|
||||
(href "/static/styles.css")))
|
||||
(style "
|
||||
p.ascii {
|
||||
font-family: 'Courier New', Courier, monospace;
|
||||
font-size: 8px;
|
||||
white-space: pre;
|
||||
margin: 0;
|
||||
}
|
||||
p.ascii.but-normal-size {
|
||||
font-size: medium;
|
||||
}")
|
||||
(script ((src "/static/htmx.min.js")
|
||||
(defer "")
|
||||
)))
|
67
source/header.txt
Normal file
67
source/header.txt
Normal file
|
@ -0,0 +1,67 @@
|
|||
(header
|
||||
(div
|
||||
((class "banner"))
|
||||
(a
|
||||
((href "/")
|
||||
(hx-get "/hx/home")
|
||||
(hx-target "main")
|
||||
(hx-swap "outerHTML"))
|
||||
(p
|
||||
((class "ascii"))
|
||||
"▒▓░ home ░░▒ ▒▒▓█▒ ░▒
|
||||
░▒▒░▓▓ ▒▒▒▒▒▒▓█ ▒▓
|
||||
▒▒▓▓░▒▓ ▓█▓▓ ░▓
|
||||
▓▒▒ ▒▒ ░
|
||||
▒ ▒▓▒▓▒ ▒░ ▒░
|
||||
░░░░░░▒▒▒▓▒▓░ ░▒ ▒
|
||||
▓░▒▒▒░▒▒▒▒▒▓▓▓▓▓ ░░ ░
|
||||
▒▒░▒▒▒▒▒▒▒▒▓▓▓▓▓▓█ ░░ ░▒
|
||||
▓▒▒▒▒▒▓▒▓▓▓▒▓▓▓▓▓▓ ░▒░░░░░░▒░ ▓▓ ▒
|
||||
▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓█▒▒░░▒░▒░░░░░▒░▒ ▒ ▒▒
|
||||
░▒▒▒▒▒▓▒▓ ▒▓▓▓▓▓▓▓▓▓▓▓█▓░▒▒▒▒░░░░░░░░░░░▒ ▓▒ ░
|
||||
▒░░▒▓▓▒▒▓▓▓▓▒▒▒ ▓▓▓▓▓▓▓▓▓█▓░▒▒▒▒▒░░▒░▒░░░░░░▒▓ █ ░ ▓▓
|
||||
░ ░░▓▒▒ ░ ▓░░░▒▓▒▓▒▓▓▓▓▓▓▓▓▒ ▓▓▒▓▓▓█▓▒▒▒▒░▒░░░░▒░▒░░░░▒░░▒░ ▓ ▓ ▓▒░░░░░▒
|
||||
░ ░▒▓▓ ▓ ▒ ▓░░▒▒▒▓▒▓▓▓▒▓▓▓▓▓▓▓▒ ▓▓▓▓█▓▒▒░▒▒▒▒░▒▒▒░░░░░░░░░░▒▒ ▓ ▒▒▒▒░▒░░▒░▓
|
||||
▒▒▒▓▓▒ ▒░░ ▒▒▒▒▒▒▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒ ▓▓▓█▒▓▒▒▒▒▒▒░▒▒▒░░▒░▒░░░░█▒ ▒▒▓▒ ▒▒▒▒▒▒░░░▒░░
|
||||
▒▒▓▓░ ░ ▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▓▓▒ ▓▓▒▒▒▓▒▒▒▒▒░▒░░░░░░░ ▓▓▒░ ░█▓ ▒▒▒▒▒▒░░░░░░
|
||||
░▓ ▒░▒ ▓▒▓▓▒▓▓▓▓▓▓▓▒▓▓▓▓█▓████▓▒▒▒▒▓▓▓▓▓▓▓▒▒▒▒▒▒▓░ ▓▒ ▓▒▒ █▓▓▓▒▒▒▒░░░░░
|
||||
▒░ ▒▒▓▒▓▓▓▓▓▓▓▓▓▓▓▓█▓█▓▒▒▒▒▓▒▒▒▒ ▓░ ▒▒ ▒▓▓▓▓▓▒▒▒░░░▒
|
||||
▓ ▓ ▓▓▓▓▓▒▓▒▓▓▓▓▓▓▒▒▒▒▒▒▒▓▓ ░▓▓█▓▓▓▓▓▓▓▓▓▒▒▒▓ ░░ ▒█ ░▒▒▒▓▓▓▓▓▒▒▒▒▒
|
||||
░ ▒▓▓▒▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▓ ▒██▒██▓▓▓▓▓▓▓▓▓▓▓▓▒▒░░ ▓░ ▒▓▓▓▓▒▓▓▒▒▒▒░
|
||||
▒▒▒▒░▒▓ ▒ ▒▓▓▒▒▒▒▒▒▒░▒░░░▒▒▒▒▓ ▒███▓█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒ ▓▒ ░▒▒▒░▒▓▓▓▓▒▓▒▒▒
|
||||
▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒░▒░░░░░░░░░░░░ ▒██▓██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒ ▓▒ ░░░░▒░░▒▒▒▒▒▒▒▒▒▒▓
|
||||
▒▒▒▒▒▒▒▒▓▒▓▒░░▒░░░▒░ ▒▒▒▒░░▒░░░░░░░░░▒ ▒▓██▓██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒ ▒▒ ▓▒▒▒░▒░░▒▒▒▓▓▓▒▒▒▒▓
|
||||
▒▒▒▒▒▒▓▒▓▓▒▒▒▒▒▒▒▒▒▒▒░▓ ▒░░░░░▒░░░░░░░▒▒ ▒▒█▓██▓██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▒▒░ ▒▒▒▒▒▒░░▒▒▒▒▓▓▒▓▒ ▒
|
||||
▒▒▒▒▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒░ ░░░░░░░░░░░░░░░ ▒▓█▓█▓▓▓█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒ ▒▒░ ▒░░░▒▒▒▒▒▒▒▓▓▒▒▓ ▒░▒
|
||||
▒▒▓▒▒▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░ ░░░░░░░░▒▒░░░ ▒██▓▓▓▓▓█▓▒▓▓▓▓▓▓▒▒▒▒▒▓▒ ░░▒ ▓▒░▒▒▒▒▒▒▒▓▒▒▒ ▒ ▒▒▒
|
||||
▒▒▒▓▓█▒▒▒▒▒▒▒▒▒▒▒▒▒▓▒▓▒▒▒ ▓▒░░░░░░░░░▒ ▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▓▓▓▒▒░░░░▓▓██
|
||||
▒▓▓▓█▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▒▒▒ ▓░░░░░▒░▒ ▓▓█▓▓▓▓▓▓▓██▓▓▓▓▓▓▒▒▒▓ ░▒ ▓▓▒▒▓▒▓▒▒░ ▓▓▓▓▓▓█▓
|
||||
▒▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓ ░▓▓▒ ░░ ▓▓█▓▓▓▓▓▓▓▓██▒▓▒▒▒▒▓▓ ░▒ ▒▓▓ ░██▓▓▓▓▓▓▓▓▓▓
|
||||
▓▓▓█▒▒▒▒▒▒▒▒▒▒▒▓▒▒▒▓ ▒ ░░ ▓▓█▓▓▓▓▓▓▓▓▓▓▒▒ ▒ ░▓ ░ ▒ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓
|
||||
▓▓▓▒▓▒▒▒▒▓▒▒▒▒▓ ▒▒░ ▒▓▓▓▓▓▓▓▓▓█▓ ▓▒ ░ ░ ░▒ ░░ ▒ █▓▓▓▓▓▓▓▓▓▓▓▓▓
|
||||
███▒▒▒▒▒▓░ ▒▓░░ ▒▓▓▓▓▓▓▓▓ ▓▒░ ▒░ ░▒ ░ ▒ ▓▓▓▓▓▓▓▓▓▓▓▓▓
|
||||
█▒▓▓ ▒▒▓▓▓▓▓▓▓▒ ▒░▓ ▒▒▓▓▓▓▓▒ ▒▒░ ▒ ▒▒ ▒ ░▓▓▓▓▓▓▓▓▓▓
|
||||
░▒▒▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▒▒▒▒▒▓ ▓░ ░▓▒ ░▒░▒ ▓▒ ▓ ▒ ▓▓▓▓░
|
||||
░▓▒▓▓▒▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▒▒▒▒▒▓▒▓ ░░▓ ▒▒░ ▒ ▓░ ▒
|
||||
▓▒░ ▓▒▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▒▒▒ ▒░ ▓▒▓ ▒▒ ▒ ░
|
||||
░▒▓ ▓▒▒▒▒▒▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▒▓▒▒▒ ▒░▓ ░▒░▒ ░░
|
||||
▒▓ ░▒▒▒▒▒▓▒▒▓▒▒▒▒▒▒▒▒▒▒▓▒▓▓▓▒▒ ▓░ ░▒ ░▓ ")))
|
||||
(nav
|
||||
(a
|
||||
((href "/about")
|
||||
(hx-get "/hx/about")
|
||||
(hx-target "main")
|
||||
(hx-swap "innerHTML"))
|
||||
"about sorrel (the bitch who made this)")
|
||||
(a
|
||||
((href "/unsettled")
|
||||
(hx-get "/hx/unsettled")
|
||||
(hx-target "main")
|
||||
(hx-swap "innerHTML"))
|
||||
"unsettled thoughts (something like a blog)")
|
||||
(a
|
||||
((href "/settled")
|
||||
(hx-get "/hx/settled")
|
||||
(hx-target "main")
|
||||
(hx-swap "innerHTML"))
|
||||
"\"settled\" thoughts (projects built/in progress)")))
|
30
source/index.txt
Normal file
30
source/index.txt
Normal file
|
@ -0,0 +1,30 @@
|
|||
(main
|
||||
(noscript
|
||||
(p "hey! yr not letting yr browser execute javascript served by my page.")
|
||||
(p "that's cool!")
|
||||
(p "(google?) browser as arbitrary code execution platform is one of the
|
||||
weird, regrettable consequences of our political economy.")
|
||||
(p "anyway, feel free to browse! yr experience won't be much different,
|
||||
you'll just get bigger html blob.")
|
||||
(p "the only js i deliver is "
|
||||
(a ((href "https://htmx.org"))
|
||||
"this little REST tool called htmx")
|
||||
" if you want to see what that's about.")
|
||||
(p "o! and if you want to hear/read "
|
||||
(a ((href "/tagged/javascript"))
|
||||
"what i have to say about javascript")
|
||||
" you could do that maybe")
|
||||
(p "/noscript"))
|
||||
(p "hey! i'm sorrel.")
|
||||
(p "(called like the plant up there)")
|
||||
(p "this is my new-fangled website computer page on the world wide web. i had
|
||||
a nice time building this little thing "
|
||||
(a ((href "/this")
|
||||
(hx-get "/hx/this")
|
||||
(hx-target "closest a")
|
||||
(hx-swap "inner HTML"))
|
||||
"(how i build this little page.)"))
|
||||
(p "i hope you have a nice time looking at things here.")
|
||||
(p ((class "ascii but-normal-size"))
|
||||
"︿︿
|
||||
〰"))
|
3
source/not-found.txt
Normal file
3
source/not-found.txt
Normal file
|
@ -0,0 +1,3 @@
|
|||
(main
|
||||
(h1 "404")
|
||||
(p "hey, i couldn't find that. could ya try something else maybe?"))
|
1
static/htmx.min.js
vendored
Normal file
1
static/htmx.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue