Quick start for Ex10 but now that I think about it, maybe it's not the best exercise for 10 and this should be a login exercise.
parent
858fb4d370
commit
c2f61b9215
@ -0,0 +1,19 @@ |
||||
# 10: A Simple JSON API |
||||
|
||||
You'll need to download curl for windows from [curl.se](https://curl.se/windows/) if you're on |
||||
windows. The only problem is PowerShell comes with a fairly lame `curl` that's an alias for |
||||
`Invoke-WebRequest`. You can just type `curl.exe` and that'll use the real curl. You can also or run this command: |
||||
|
||||
```powershell |
||||
remove-item alias:curl |
||||
``` |
||||
|
||||
After that you should be able to run `curl` like normal with just: |
||||
|
||||
```powershell |
||||
curl |
||||
curl: try 'curl --help' or 'curl --manual' for more information |
||||
``` |
||||
|
||||
The only problem is you'll have to do this every time you start PowerShell. Making this permanent |
||||
is...complicated. Just type `curl.exe` instead. |
@ -0,0 +1,23 @@ |
||||
import express from 'express'; |
||||
import http from 'http'; |
||||
import assert from 'assert'; |
||||
|
||||
const opts = { |
||||
port: 5001, |
||||
host: "localhost", |
||||
} |
||||
|
||||
const app = express(); |
||||
|
||||
const http_server = http.createServer(app); |
||||
|
||||
app.use(express.json()); |
||||
app.use(express.static('public')); |
||||
|
||||
app.get("/messages.json", (req, res) => { |
||||
res.status(200).json({message: "HELLO!"}); |
||||
}); |
||||
|
||||
http_server.listen(opts.port, opts.host, () => { |
||||
console.log(`listening on ${opts.host}:${opts.port}`); |
||||
}); |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,16 @@ |
||||
{ |
||||
"name": "10-a-simple-json-api", |
||||
"version": "1.0.0", |
||||
"type": "module", |
||||
"description": "", |
||||
"main": "step1.js", |
||||
"scripts": { |
||||
"test": "echo \"Error: no test specified\" && exit 1" |
||||
}, |
||||
"author": "", |
||||
"license": "BSD", |
||||
"dependencies": { |
||||
"express": "^4.18.1", |
||||
"http-server": "^14.1.1" |
||||
} |
||||
} |
@ -0,0 +1,200 @@ |
||||
:root { |
||||
--color-border: hsl(0, 0%, 50%); |
||||
--border-radius: 5px; |
||||
--value0: hsl(0, 0%, 0%); |
||||
--value1: hsl(0, 0%, 11%); |
||||
--value2: hsl(0, 0%, 22%); |
||||
--value3: hsl(0, 0%, 33%); |
||||
--value4: hsl(0, 0%, 44%); |
||||
--value5: hsl(0, 0%, 55%); |
||||
--value6: hsl(0, 0%, 66%); |
||||
--value7: hsl(0, 0%, 77%); |
||||
--value8: hsl(0, 0%, 88%); |
||||
--value9: hsl(0, 0%, 100%); |
||||
--text: 0; |
||||
} |
||||
|
||||
body { |
||||
color: hsl(0, 0%, calc(var(--text) * 11%)); |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: flex-start; |
||||
padding: 0px; |
||||
margin: 0px; |
||||
} |
||||
|
||||
content { |
||||
display: flex; |
||||
flex-direction: column; |
||||
} |
||||
|
||||
a { |
||||
color: hsl(0, 0%, calc(var(--text) * 11%)); |
||||
} |
||||
|
||||
block { |
||||
color: hsl(0, 0%, calc(var(--text) * 11%)); |
||||
display: flex; |
||||
--spacing: space-evenly; |
||||
justify-content: var(--spacing); |
||||
flex-direction: column; |
||||
} |
||||
|
||||
block > * { |
||||
color: hsl(0, 0%, calc(var(--text) * 11%)); |
||||
display: flex; |
||||
flex: 1 1 auto; |
||||
--spacing: flex-start; |
||||
justify-content: var(--spacing); |
||||
align-self: stretch; |
||||
flex-direction: column; |
||||
margin: 2px; |
||||
} |
||||
|
||||
.wide { |
||||
width: 100%; |
||||
} |
||||
|
||||
.no-flex { |
||||
display: block; |
||||
flex: unset; |
||||
flex-direction: unset; |
||||
align-self: unset; |
||||
} |
||||
|
||||
.center { |
||||
justify-content: center; |
||||
align-items: center; |
||||
align-self: center; |
||||
} |
||||
|
||||
.center-text > * { |
||||
text-align: center; |
||||
} |
||||
|
||||
.center-self { |
||||
align-self: center; |
||||
} |
||||
|
||||
.vertical { |
||||
flex-direction: column; |
||||
} |
||||
|
||||
.horizontal { |
||||
flex-direction: row; |
||||
} |
||||
|
||||
grid { |
||||
--cols: 1fr 1fr; |
||||
--rows: auto; |
||||
--gap: 0.5rem; |
||||
|
||||
color: hsl(0, 0%, calc(var(--text) * 11%)); |
||||
display: grid; |
||||
grid-gap: var(--gap); |
||||
grid-template-columns: var(--cols); |
||||
grid-template-rows: var(--rows); |
||||
} |
||||
|
||||
stack { |
||||
color: hsl(0, 0%, calc(var(--text) * 11%)); |
||||
display: grid; |
||||
grid-template-rows: 1fr; |
||||
grid-template-columns: 1fr; |
||||
grid-template-areas: "cover"; |
||||
} |
||||
|
||||
stack > * { |
||||
color: hsl(0, 0%, calc(var(--text) * 11%)); |
||||
width: 100%; |
||||
height: 100%; |
||||
position: relative; |
||||
grid-area: cover; |
||||
} |
||||
|
||||
stack > .top { |
||||
z-index: 10; |
||||
} |
||||
|
||||
hr { |
||||
--height: 1rem; |
||||
min-height: var(--height); |
||||
visibility: hidden; |
||||
} |
||||
|
||||
hr.huge { |
||||
--height: 3rem; |
||||
} |
||||
|
||||
shape { |
||||
--w: 100%; |
||||
--h: 100%; |
||||
--value: 4; |
||||
|
||||
color: hsl(0, 0%, calc(var(--text) * 11%)); |
||||
background-color: hsl(0, 0%, calc(var(--value) * 11%)); |
||||
display: flex; |
||||
width: var(--w); |
||||
min-width: var(--w); |
||||
max-width: var(--w); |
||||
height: var(--h); |
||||
min-height: var(--h); |
||||
max-height: var(--h); |
||||
text-align: center; |
||||
justify-content: center; |
||||
align-items: center; |
||||
align-self: center; |
||||
} |
||||
|
||||
.debug { |
||||
border: 1px solid red; |
||||
} |
||||
|
||||
.debug > * { |
||||
border: 1px solid blue; |
||||
} |
||||
|
||||
.pad { |
||||
--pad: 1rem; |
||||
padding: var(--pad); |
||||
} |
||||
|
||||
.sized { |
||||
--w: 100%; |
||||
--h: 100%; |
||||
width: var(--w); |
||||
min-width: var(--w); |
||||
max-width: var(--w); |
||||
height: var(--h); |
||||
min-height: var(--h); |
||||
max-height: var(--h); |
||||
} |
||||
|
||||
.border { |
||||
border: 1px solid var(--color-border); |
||||
border-radius: var(--border-radius); |
||||
} |
||||
|
||||
.solid { |
||||
--value: 8; |
||||
background-color: hsl(0, 0%, calc(var(--value) * 11%)); |
||||
} |
||||
|
||||
.dots { |
||||
--pat-val: 7; |
||||
|
||||
background-image: radial-gradient(hsl(0, 0%, calc(var(--pat-val) * 11%)) 1px, transparent 1px); |
||||
background-size: calc(10 * 1px) calc(10 * 1px); |
||||
} |
||||
|
||||
.lines { |
||||
--pat-val: 7; |
||||
background-image: linear-gradient(hsl(0, 0%, calc(var(--pat-val) * 11%)) 1px, transparent 1px), linear-gradient(to right, hsl(0, 0%, calc(var(--pat-val) * 11%)) 1px, transparent 1px); |
||||
background-size: 10px 10px; |
||||
} |
||||
|
||||
.stripes { |
||||
--pat-val: 7; |
||||
background-image: linear-gradient(90deg, transparent 50%, hsl(0, 0%, calc(var(--pat-val) * 11%)) 50%); |
||||
background-size: 10px 10px; |
||||
} |
@ -0,0 +1,20 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset='utf-8'> |
||||
<meta name="description" content="htmx test"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' /> |
||||
|
||||
<link href="/blockstart.css" rel="stylesheet"> |
||||
|
||||
<title>htmx test</title> |
||||
</head> |
||||
|
||||
|
||||
<body> |
||||
<block> |
||||
<p>Click Me</p> |
||||
</block> |
||||
</body> |
||||
</html> |
Loading…
Reference in new issue