diff --git a/Cargo.lock b/Cargo.lock index 00d71b0..112e2dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -428,6 +428,7 @@ dependencies = [ "proc-macro2", "quote", "serde", + "serde_json", "syn", "toml", ] @@ -658,9 +659,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "2ccfd8c0ee4cce11e45b3fd6f9d5e69e0cc62912aa6a0cb1bf4617b0eba5a12f" dependencies = [ "generic-array", "typenum", @@ -950,9 +951,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" +checksum = "607c8a29735385251a339424dd462993c0fed8fa09d378f259377df08c126022" dependencies = [ "ahash", ] @@ -1281,9 +1282,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" +checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" [[package]] name = "opaque-debug" @@ -1395,18 +1396,18 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "pin-project" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +checksum = "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +checksum = "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74" dependencies = [ "proc-macro2", "quote", @@ -1537,9 +1538,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.5.6" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" dependencies = [ "aho-corasick", "memchr", @@ -1548,9 +1549,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.26" +version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" [[package]] name = "ring" @@ -1621,24 +1622,24 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d92beeab217753479be2f74e54187a6aed4c125ff0703a866c3147a02f0c6dd" +checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1" [[package]] name = "serde" -version = "1.0.137" +version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +checksum = "0171ebb889e45aa68b44aee0859b3eede84c6f5f5c228e6f140c0b2a0a46cad6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.137" +version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +checksum = "dc1d3230c1de7932af58ad8ffbe1d784bd55efd5a9d84ac24f69c72d83543dfb" dependencies = [ "proc-macro2", "quote", @@ -1955,10 +1956,11 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.19.2" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" +checksum = "57aec3cfa4c296db7255446efb4928a6be304b431a806216105542a67b6ca82e" dependencies = [ + "autocfg", "bytes", "libc", "memchr", @@ -2045,9 +2047,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" +checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" dependencies = [ "proc-macro2", "quote", @@ -2087,9 +2089,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0a07fefe56b3bf1902c19c4eced76e43cdf40e6bac95cf71d873f6dd9a8a9af" +checksum = "3a713421342a5a666b7577783721d3117f1b69a393df803ee17bb73b1e122a59" dependencies = [ "ansi_term", "sharded-slab", @@ -2144,9 +2146,9 @@ checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" [[package]] name = "unicode-normalization" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dee68f85cab8cf68dec42158baf3a79a1cdc065a8b103025965d6ccb7f6cbd" +checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" dependencies = [ "tinyvec", ] @@ -2344,9 +2346,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.3" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf" +checksum = "f1c760f0d366a6c24a02ed7816e23e691f5d92291f94d15e836006fd11b04daf" dependencies = [ "webpki", ] diff --git a/Cargo.toml b/Cargo.toml index c8462df..2f22475 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ actix-rt = { version = "*" } actix-utils = { version = "3.0.0" } actix-web = { version = "*" } argon2 = { version = "0.4.1" } -askama = { version = "*" } +askama = { version = "*", features = ["serde-json"] } chrono = { version = "*", features = ["serde"] } futures = { version = "0.3.21", features = ["async-await", "std"] } futures-util = { version = "0.3.21", features = [] } diff --git a/assets/templates/admin/edit.html b/assets/templates/admin/edit.html new file mode 100644 index 0000000..8338c14 --- /dev/null +++ b/assets/templates/admin/edit.html @@ -0,0 +1,12 @@ +{% extends "layout.html" %} +{% block content %} + + {{ article.body|safe }} + +{% endblock %} diff --git a/assets/templates/admin/index.html b/assets/templates/admin/index.html new file mode 100644 index 0000000..b005ce7 --- /dev/null +++ b/assets/templates/admin/index.html @@ -0,0 +1,20 @@ +{% extends "layout.html" %} +{% block content %} + + + {% for article in news %} + + + {{article.body|safe}} + + + {% endfor %} + + +{% endblock %} diff --git a/assets/templates/admin.html b/assets/templates/admin/layout.html similarity index 75% rename from assets/templates/admin.html rename to assets/templates/admin/layout.html index c57a8ec..ada7c48 100644 --- a/assets/templates/admin.html +++ b/assets/templates/admin/layout.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "../base.html" %} {% block head %} {% endblock %} diff --git a/assets/templates/admin_panel.html b/assets/templates/admin_panel.html deleted file mode 100644 index f1b47e3..0000000 --- a/assets/templates/admin_panel.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "admin.html" %} -{% block content %} - - - {% for article in news %} - - {{article.body|safe}} - - {% endfor %} - - -{% endblock %} diff --git a/assets/templates/news.html b/assets/templates/news.html index b2c7ffc..1c679da 100644 --- a/assets/templates/news.html +++ b/assets/templates/news.html @@ -3,11 +3,11 @@ {% for article in news %} {{article.body|safe}} diff --git a/client/src/admin.js b/client/src/admin.js index 1978f6e..e522e30 100644 --- a/client/src/admin.js +++ b/client/src/admin.js @@ -1,3 +1,4 @@ import "./admin/ow-admin"; import "./admin/article-form"; +import "./admin/edit-news-article"; diff --git a/client/src/admin/article-form.js b/client/src/admin/article-form.js index 249a700..8059033 100644 --- a/client/src/admin/article-form.js +++ b/client/src/admin/article-form.js @@ -1,6 +1,10 @@ import { Component, FORM_STYLE } from "../shared"; customElements.define('article-form', class extends Component { + static get observedAttributes() { + return ['article-id', 'article-title', 'status']; + } + constructor() { super(` +
+ +
+
+ + Edytuj + +
+ +
+
+ `); + + this.shadowRoot.querySelector('#edit').addEventListener('click', ev => { + ev.preventDefault(); + ev.stopPropagation(); + }); + this.shadowRoot.querySelector('#delete').addEventListener('click', ev => { + ev.preventDefault(); + ev.stopPropagation(); + }); + } + + get article_id() { + const v = parseInt(this.getAttribute('article-id')); + return isNaN(v) ? null : v; + } + + set article_id(v) { + this.setAttribute('article-id', v); + const id = this.article_id; + if (id === null) return; + this.shadowRoot.querySelector('ow-path').path = `/admin/news/${id}`; + } +}); diff --git a/client/src/nav/ow-path.js b/client/src/nav/ow-path.js index 18f9aa3..675267b 100644 --- a/client/src/nav/ow-path.js +++ b/client/src/nav/ow-path.js @@ -16,7 +16,6 @@ customElements.define('ow-path', class extends Component { text-decoration: none; color: #495057; text-transform: uppercase; - border: none; border-bottom: 1px solid var(--border-slim-color); } @@ -29,14 +28,9 @@ customElements.define('ow-path', class extends Component { `); - } - - connectedCallback() { - this.selected = this.getAttribute('selected'); - } - - attributeChangedCallback(name, oldV, newV) { - super.attributeChangedCallback(name, oldV, newV); + this.shadowRoot.querySelector('a').addEventListener('click', ev => { + document.location = this.path; + }); } get selected() { diff --git a/client/src/news/news-article.js b/client/src/news/news-article.js index b6ca343..585a4ef 100644 --- a/client/src/news/news-article.js +++ b/client/src/news/news-article.js @@ -9,7 +9,7 @@ customElements.define('news-article', class extends Component { constructor() { super(`