Skip to content

Commit 8ca3672

Browse files
committed
Add server examples
1 parent 7e9dc90 commit 8ca3672

File tree

5 files changed

+152
-0
lines changed

5 files changed

+152
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<html>
2+
<head>
3+
<meta charset="UTF-8">
4+
<title>Notes</title>
5+
<link href="styles.css" rel="stylesheet">
6+
</head>
7+
<body>
8+
<div class="notes">
9+
<h2>Notes</h2>
10+
<div class="new-note">
11+
<input placeholder="Your note" />
12+
<button onclick="addNote()">add</button>
13+
</div>
14+
<ul id="notes"></ul>
15+
</div>
16+
17+
<templates>
18+
<ul name="note">
19+
<li class="note">
20+
<h4>Note 1</h4>
21+
<p>Content</p>
22+
</li>
23+
</ul>
24+
</templates>
25+
</body>
26+
<script src="notes.js"></script>
27+
</html>

examples/server/notes_public/notes.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const elNotes = document.querySelector('#notes');
2+
const elNoteTemplate = document.querySelector('templates ul[name="note"] li');
3+
4+
function renderNote(note) {
5+
const el = elNoteTemplate.cloneNode(true);
6+
el.querySelector('h4').innerText = 'Note #' + note.id;
7+
el.querySelector('p').innerText = note.content;
8+
return el;
9+
}
10+
11+
async function addNote() {
12+
const inpEl = document.querySelector('.new-note input');
13+
const content = inpEl.value;
14+
const resp = await fetch('/notes/', {
15+
method: "POST",
16+
body: content
17+
});
18+
const note = await resp.json();
19+
inpEl.value = '';
20+
console.log(note);
21+
elNotes.prepend(renderNote(note));
22+
}
23+
24+
async function getNotes() {
25+
const resp = await fetch("/notes");
26+
const notes = await resp.json();
27+
elNotes.innerHTML = '';
28+
for (const note of notes) {
29+
elNotes.prepend(renderNote(note));
30+
}
31+
}
32+
33+
getNotes();
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
templates {
2+
display: none;
3+
}
4+
5+
#notes {
6+
list-style-type: none;
7+
padding: 0;
8+
}
9+
.note {
10+
margin: 0;
11+
padding: 0rem 0.3rem;
12+
}
13+
.note h4 {
14+
margin: 0;
15+
}
16+
.note p {
17+
color: #333;
18+
margin-top: 0;
19+
}
20+
21+
.new-note {
22+
margin-bottom: 2rem;
23+
}
24+
.new-note input {
25+
width: 15rem;
26+
padding: 0.3rem;
27+
}
28+
.new-note button {
29+
padding: 0.3rem 1rem;
30+
background-color: #4caf50;
31+
color: #fff;
32+
border: none;
33+
cursor: pointer;
34+
font-size: 1rem;
35+
}

examples/server/server_spa.own

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
use std, jdbc, server
2+
3+
// curl -X POST http://localhost:8084/notes/ -d "New note 2"
4+
5+
conn = getConnection("jdbc:sqlite::memory:")
6+
st = conn.createStatement()
7+
st.executeUpdate("CREATE TABLE IF NOT EXISTS notes(id integer primary key, content string)")
8+
stAddNote = conn.prepareStatement("INSERT INTO notes(content) VALUES(?)", RETURN_GENERATED_KEYS)
9+
stGetNote = conn.prepareStatement("SELECT id, content FROM notes WHERE id = ?")
10+
11+
createNote("This is your first note.")
12+
13+
def getNotes() {
14+
notes = []
15+
rs = st.executeQuery("SELECT id, content FROM notes")
16+
while (rs.next()) {
17+
notes += {"id": rs.getInt(1), "content": rs.getString(2)}
18+
}
19+
rs.close()
20+
return notes
21+
}
22+
23+
def createNote(content) {
24+
stAddNote.setString(1, content)
25+
stAddNote.executeUpdate()
26+
rs = stAddNote.getGeneratedKeys()
27+
rs.next()
28+
return {"id": rs.getLong(1) ?? -1, "content": content}
29+
}
30+
31+
newServer({"dev": true, "externalDirs": ["notes_public"]})
32+
.get("/notes", def(ctx) = ctx.json( getNotes() ))
33+
.post("/notes", def(ctx) {
34+
ctx.status(201)
35+
ctx.json( createNote(ctx.body()) )
36+
})
37+
.start(8084)

examples/server/server_spa_simple.own

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
use std, jdbc, server
2+
3+
// curl -X POST http://localhost:8084/notes/ -d "New note 2"
4+
5+
notes = []
6+
createNote("This is your first note.")
7+
8+
def createNote(content) {
9+
note = {"id": notes.length + 1, "content": content};
10+
notes += note
11+
return note
12+
}
13+
14+
newServer({"externalDirs": ["notes_public"]})
15+
.get("/notes", def(ctx) = ctx.json(notes))
16+
.post("/notes", def(ctx) {
17+
ctx.status(201)
18+
ctx.json( createNote(ctx.body()) )
19+
})
20+
.start(8084)

0 commit comments

Comments
 (0)