/
notes.html
94 lines (83 loc) · 1.96 KB
/
notes.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<style>
html, body {
margin: 0;
-webkit-app-region: drag;
}
body {
font-family: avenir next;
font-size: 36px;
color: #222;
padding: 1em;
}
ul {
list-style-type: none;
padding: 0;
line-height: 1.5;
}
[type="checkbox"] {
vertical-align: middle;
margin-right: 10px;
}
:checked + label {
text-decoration: line-through;
color: #2222;
}
</style>
<body hidden>
<main id="main" role="main">
<ul id="ul">
</ul>
</main>
<script>
let main = document.getElementById("main")
let fs = require("fs")
let os = require("os")
let electron = require("electron")
let notesFile = os.homedir() + "/notes"
let notes = fs.readFileSync(notesFile, "utf-8")
.split("\n")
.filter(Boolean)
function deleteNotes (checkies) {
let filtered = notes.filter((note, index) => {
return !checkies[index].checked
})
fs.writeFileSync(notesFile, filtered.join("\n") + "\n")
}
function toggleNote (event) {
let {index} = event.target
let checky = event.target.querySelector("[type=\"checkbox\"]")
checky.checked = !checky.checked
}
function render (notes) {
let ul = document.createElement("ul")
ul.id = "ul"
if (notes.length) {
notes.forEach((note, index) => {
let li = document.createElement("li")
let checky = document.createElement("input")
checky.type = "checkbox"
checky.id = `checky-${index}`
let label = document.createElement("label")
label.setAttribute("for", checky.id)
label.textContent = note
li.prepend(checky)
li.append(label)
li.index = index
li.addEventListener("click", toggleNote)
ul.appendChild(li)
})
}
let old = document.getElementById("ul")
main.replaceChild(ul, old)
}
let askToBeClosed = () =>
electron.ipcRenderer("please-close-notes")
window.addEventListener("beforeunload", event => {
event.preventDefault()
deleteNotes(document.querySelectorAll("[type=\"checkbox\"]"))
askToBeClosed()
return true
})
render(notes)
document.body.removeAttribute("hidden")
</script>