diff --git a/; b/; new file mode 100644 index 0000000..d9d8d01 --- /dev/null +++ b/; @@ -0,0 +1,235 @@ + + + + + diff --git a/assets/css/inputs.css b/assets/css/inputs.css index 8023fdc..ec65463 100644 --- a/assets/css/inputs.css +++ b/assets/css/inputs.css @@ -41,6 +41,21 @@ } } +.button-cancel { + background: none; + color: var(--shadow-strong-10); + font-weight: normal; + + &:hover:not(:disabled) { + color: var(--error); + cursor: pointer; + } + + &:disabled { + color: var(--shadow-weak-10); + } +} + .radio { margin: 0 .5rem 0 0; } diff --git a/assets/css/states.css b/assets/css/states.css index 4db6218..22836c4 100755 --- a/assets/css/states.css +++ b/assets/css/states.css @@ -24,6 +24,23 @@ text-decoration: none; } +.nolink-active { + display: inline-block; + color: inherit; + text-decoration: none; + + &:hover { + text-decoration: underline; + } +} + +.nobutton { + background: none; + border: none; + font-size: 1rem; + padding: 0; +} + .nobar { scrollbar-width: none; -mis-overflow-style: none; diff --git a/assets/css/theme.css b/assets/css/theme.css index b104c78..357ceb4 100644 --- a/assets/css/theme.css +++ b/assets/css/theme.css @@ -22,6 +22,7 @@ --background-dark-10: #f8f8f8; --background: #fff; + --shadow-weak-40: rgba(0, 0, 0, .05); --shadow-weak-30: rgba(0, 0, 0, .1); --shadow-weak-20: rgba(0, 0, 0, .2); --shadow-weak-10: rgba(0, 0, 0, .35); @@ -35,4 +36,9 @@ --link: #48f; --error: #f66; + + --bump: var(--primary); + --sink: var(--error); + + --op: #5be; } diff --git a/assets/js/api.js b/assets/js/api.js index a6d1495..e7e8d7c 100644 --- a/assets/js/api.js +++ b/assets/js/api.js @@ -14,7 +14,7 @@ function getQuery(data) { return `?${new URLSearchParams(data).toString()}`; } -export async function get(path, query = {}) { +async function get(path, query = {}) { const res = await fetch(`/api${path}${getQuery(query)}`); const body = await res.json(); @@ -25,7 +25,7 @@ export async function get(path, query = {}) { throw new Error(body.message); } -export async function post(path, data, { query } = {}) { +async function post(path, data, { query } = {}) { const res = await fetch(`/api${path}${getQuery(query)}`, { method: 'POST', body: JSON.stringify(data), @@ -45,7 +45,7 @@ export async function post(path, data, { query } = {}) { throw new Error(body.statusMessage); } -export async function patch(path, data, { query } = {}) { +async function patch(path, data, { query } = {}) { const res = await fetch(`/api${path}${getQuery(query)}`, { method: 'PATCH', body: JSON.stringify(data), @@ -65,7 +65,7 @@ export async function patch(path, data, { query } = {}) { throw new Error(body.message); } -export async function del(path, { data, query } = {}) { +async function del(path, { data, query } = {}) { const res = await fetch(`/api${path}${getQuery(query)}`, { method: 'DELETE', body: JSON.stringify(data), @@ -84,3 +84,10 @@ export async function del(path, { data, query } = {}) { throw new Error(body.message); } + +export { + get, + post, + patch, + del, +}; diff --git a/assets/js/navigate.js b/assets/js/navigate.js index 8176a35..1d72e68 100644 --- a/assets/js/navigate.js +++ b/assets/js/navigate.js @@ -1,5 +1,5 @@ // centralize navigation to simplify switching between client and server routing -export default function navigate(path) { +export function navigate(path) { window.location.href = path; } diff --git a/components/comments/comment.vue b/components/comments/comment.vue index 3caa064..6db435f 100644 --- a/components/comments/comment.vue +++ b/components/comments/comment.vue @@ -1,23 +1,84 @@ diff --git a/components/comments/writer.vue b/components/comments/writer.vue new file mode 100644 index 0000000..a0b57fb --- /dev/null +++ b/components/comments/writer.vue @@ -0,0 +1,88 @@ +