From 0d2cbdac9a2af3192c3098da325c2225070724c6 Mon Sep 17 00:00:00 2001 From: Nicolas Sanchez Date: Thu, 9 Mar 2023 16:51:15 +0100 Subject: [PATCH] ajout de l'historique de navigation avec repositionnement dans la page --- db/db copy.sqlite3 | Bin 0 -> 106496 bytes db/db.sqlite3 | Bin 106496 -> 106496 bytes src/page.rs | 37 ++++++++++++--- static/cheezenotes.css | 86 +++++++++++++++++++++------------- static/modules/cheezenotes.js | 46 +++++++++++++----- static/modules/md.js | 54 +++++++++++++-------- templates/page.html | 57 +++++++++++----------- 7 files changed, 182 insertions(+), 98 deletions(-) create mode 100644 db/db copy.sqlite3 diff --git a/db/db copy.sqlite3 b/db/db copy.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..a531d5d350cd9b0263740310c54fd53ef0e3f28d GIT binary patch literal 106496 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 UybaV3-8TP!DqljUXqSV31MZoo>Hq)$ literal 0 HcmV?d00001 diff --git a/db/db.sqlite3 b/db/db.sqlite3 index ab7acf59890a6b589c5df00ae3aea7ee37c23cdc..d4757bc0f04f5e94789a1e392bbbfd9c36c083df 100644 GIT binary patch delta 4547 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 PhjR?(*hi6Wk4OIl63rBQ delta 795 zcmX|-T}TvB6vywG*_qvYcgJhCex>G=nyHxSnrnV!Xp3bZNT$B{pzdz9NXqyTO5z&f zP?)4HbbAoQ0tupYSZ%bTEJ0r)^(F8@NPUnn=&ASalJxSs_kYg+9L_m|OY-27Jemal zvE(Z78_iQxMhL~x@sKt8IGv}n^c9_^Q*?qdI&Nq#A>0-5IUMQ1&!gQtZV>JXg^zxIV5I6Wo?xwx9(EzwT^ComoJ=>qg(8e z8gEaaE70x_y~)dSN4m8~@(x8z1^#xczE-t>5HS&atr2aHtRxFp=Ty7{0C z&cYrWDTTzRB|OVj94jvcg?%r9g-Cq+zu86D-7?rSo5}%zHJyXCgXU8ey!qt{n5QJN ztbogqBZ$kySVP02St-B?*<6l=W%=!SutYm;(hyP_9E)^1YEpTr49L1PWN3FJbEqEr ziDLVTL{x;t1yM&uW7fyBYh#~{B39HD_hIgzXc}E%%7sczss<3KkuLbeGt(lG9gNLTe2QvaM sMBD6R25gx-Hz5_9pz?VoyovCpp{-%-<8+^t`7EE^?u2}^SAgHrUvQ4scmMzZ diff --git a/src/page.rs b/src/page.rs index 603c9a5..505199c 100644 --- a/src/page.rs +++ b/src/page.rs @@ -1,8 +1,9 @@ +use actix_web::http::header::ContentType; use actix_web::{get, put, Responder}; use actix_web::{web, HttpResponse}; +use serde::Deserialize; use std::fs; -use std::io::Write; use askama_actix::Template; use askama_actix::TemplateToResponse; @@ -19,10 +20,12 @@ pub struct PageTemplate { pub init: String, } -#[get("/page/{page}")] -async fn page(path: web::Path<(String,)>, data: web::Data) -> impl Responder { - let pagename = &path.0; +#[derive(Debug, Deserialize)] +struct QueryParams { + pub data: Option, +} +async fn get_data(data: & web::Data, pagename: String) -> String { let fut_page_datas = db::get_page_by_name(&data.pool, pagename.to_owned()); let page_datas = fut_page_datas.await.unwrap(); let md; @@ -41,10 +44,32 @@ async fn page(path: web::Path<(String,)>, data: web::Data) -> impl Resp } Some(dat) => md = (*dat.page_text).to_string(), } + md +} + +#[get("/page/{page}")] +async fn page( + path: web::Path<(String,)>, + data: web::Data, + params: web::Query, +) -> impl Responder { + let pagename = &path.0; + + let md = get_data(&data, pagename.to_owned()).await; + + match ¶ms.data { + Some(_) => { + return HttpResponse::Ok() + .content_type(ContentType::plaintext()) + .body(md) + } + None => {} + } - let name = data.name.to_owned() + " " + pagename.as_str(); + let name = data.name.to_owned() + " - " + pagename.as_str(); let root = data.root.to_owned(); - let init = String::from("init();"); + //let init = String::from("init();"); + let init = format!("init();"); PageTemplate { name, root, diff --git a/static/cheezenotes.css b/static/cheezenotes.css index db88620..1f0cacc 100644 --- a/static/cheezenotes.css +++ b/static/cheezenotes.css @@ -7,21 +7,11 @@ url(/static/MaterialIconsOutlined-Regular.otf) format('woff'); } -html { - font-family: system-ui; - font-size: 12pt; -} - -body { - margin: 0; - background-color: #dddddd; -} - .material-icons { font-family: 'Material Icons'; font-weight: normal; font-style: normal; - font-size: 24px; /* Preferred icon size */ + font-size: 22px; /* Preferred icon size */ display: inline-block; line-height: 1; text-transform: none; @@ -35,27 +25,71 @@ body { font-feature-settings: 'liga'; } +html { + font-family: system-ui; + font-size: 12pt; +} + +body { + margin: 0; + background-color: #dddddd; +} + +div#content { + position: absolute; + margin: 0; + padding: 0; + top: 0; + left: 0; + bottom: 0; + right: 0; + overflow: auto; +} + +div #margindiv { + max-width: 1200px; + margin-left: auto; + margin-right: auto; + top: 0; + bottom: 0; +} + +div#cheezenotes { + position: static; + margin: 0; + margin-top: 0; + margin-bottom: 3rem; + padding-top: 1rem; + padding-left: 3rem; + padding-right: 3rem; + padding-bottom: 1rem; + background-color: #ffffff; + min-height: 100%; + overflow-x: auto; +} + div#buttons { + position: sticky; white-space: nowrap; overflow-x: auto; box-sizing: border-box; - padding: .2rem; - position: fixed; + padding-top: .2rem; + padding-bottom: .2rem; background-color: #dddddd; top: 0; left: 0; right: 0; margin-left: auto; margin-right: auto; - max-width: 1200; + max-width: 1200px; } div#buttons button.button { color: #444444; padding: 0; margin: 0; - height: 2.8rem; - width: 2.8rem; + height: 2.6rem; + width: 2.6rem; background-color: #eeeeee; border: 1px solid #cccccc; border-right: none; @@ -69,12 +103,13 @@ div#buttons button.separator { color: #bbbbbb; border: none; border-left: 1px solid #cccccc; - height: 2.8rem; + height: 2.6rem; margin: 0; padding: 0; } div#buttons button.text { + line-height: 1; color: #444444; font-size: 18px; vertical-align: bottom; @@ -109,7 +144,7 @@ div#buttons #lockButtonLabel { div.ta { margin-left: auto; margin-right: auto; - max-width: 1200; + max-width: 1200px; } textarea#ta { @@ -123,21 +158,6 @@ textarea#ta { background-color: #cceeff; } -div#cheezenotes { - margin-top: 3rem; - margin-left: auto; - margin-right: auto; - max-width: 1200; - padding-top: 1rem; - padding-left: 3rem; - padding-right: 3rem; - padding-bottom: 1rem; - margin-bottom: 3rem; - background-color: #ffffff; - min-height: 90%; - overflow-x: auto; -} - /*div#cheezenotes div.cheezenotes_line {*/ /* Pour firefox : white-space: pre; */ /*}*/ diff --git a/static/modules/cheezenotes.js b/static/modules/cheezenotes.js index e409ba4..3778801 100644 --- a/static/modules/cheezenotes.js +++ b/static/modules/cheezenotes.js @@ -118,15 +118,10 @@ function onsave(e) { let saveButton = document.getElementById('saveButton'); saveButton.disabled = true; let text = save(document.getElementById('ta'), document.getElementById('cheezenotes')); - var xhttp = new XMLHttpRequest(); - xhttp.onreadystatechange = function () { - if (this.readyState == 4 && this.status != 200) { - saveButton.disabled = false; - alert(xhttp.responseText); - } - } - xhttp.open("PUT", document.location.href, true); - xhttp.send(text); + fetch(document.location.href, { method: "PUT", body: text }).catch((error) => { + saveButton.disabled = false; + alert(error); + }) } function onload(e) { @@ -338,11 +333,33 @@ function onfocus() { enableFormatButtons(); } -function init(pagename = null) { +function onpopstate(e) { + let top = 0; + let left = 0; + if (e.state.top) { + top = e.state.top; + } + if (e.state.left) { + left = e.state.left; + } + fetch(document.location.href + "?data=").then((response) => { + let ta = document.getElementById('ta'); + response.text().then((data) => { + ta.value = data; + load(document.getElementById('ta'), document.getElementById('cheezenotes')); + let content = document.getElementById('content'); + content.scrollTop = top; + content.scrollLeft = left; + }); + }).catch((error) => { alert(error); }); +} + +function init() { let cheezenotes = document.getElementById('cheezenotes'); dpwidth(cheezenotes); + window.addEventListener('popstate', onpopstate); cheezenotes.addEventListener('input', onedit); cheezenotes.addEventListener('keyup', onkeyup); cheezenotes.addEventListener('keypress', onkeypress); @@ -366,7 +383,7 @@ function init(pagename = null) { addButton('h1Button', 'H1', onh1button); addButton('h2Button', 'H2', onh2button); addButton('h3Button', 'H3', onh3button); - lastButton(addButton('bqButton', ':format_quote', onbqbutton)); + addButton('bqButton', ':format_quote', onbqbutton); addSeparator(); addOnOffButton('editModeButton', ':edit_note', ':visibility', function (e) { @@ -380,6 +397,13 @@ function init(pagename = null) { disableFormatButtons(); + /*if (pagename != null) { + fetch(pagename + "?data=").then((response) => { + let ta = document.getElementById('ta'); + response.text().then((data) => { ta.value = data; onload(); }); + }).catch((error) => { alert(error); }); + }*/ + onload(); } diff --git a/static/modules/md.js b/static/modules/md.js index ad4a12e..203d130 100644 --- a/static/modules/md.js +++ b/static/modules/md.js @@ -32,7 +32,7 @@ function appendData(div, data) { newline = formatLine(lineBegin + lines[0]); line.parentNode.replaceChild(newline, line); let prevline = newline; - for(let i=1; i { alert(error); }); } return false; } else { @@ -106,7 +120,7 @@ function onlinkout(e) { let cheezenotes = document.getElementById('cheezenotes'); if (cheezenotes.contentEditable == 'false') { cheezenotes.contentEditable = true; - } + } } function formatLine(line) { @@ -205,7 +219,7 @@ function formatLine(line) { if (elem.getElementsByClassName('tablerow').length > 0) { if (elem.childNodes[0].childNodes.length > 0) { let child = elem.childNodes[0].childNodes[0]; - while(child != null) { + while (child != null) { if (child.nodeType == 3) { let newchild = document.createElement('span'); newchild.innerText = child.nodeValue; @@ -219,7 +233,7 @@ function formatLine(line) { elem.classList.add('tablerow'); } let links = elem.getElementsByClassName('link'); - for (let i=0; i`' + mono + '`' + line.substring(matches[i]+2, line.length); + line = line.substring(0, matches[i]) + '`' + mono + '`' + line.substring(matches[i] + 2, line.length); } return line; } @@ -471,7 +485,7 @@ function removeLink(line) { if (listLink == null) { return [line, null]; } - + line = line.replace(/(\[([^\]]*?)\]\(([^\)]*?)\))/g, "[]()"); return [line, listLink.reverse()]; } @@ -492,8 +506,8 @@ function addLink(line, listLink) { cpt++; } matches = matches.reverse(); - for(let i=0; i - - - - - - - - - {{name}} - - - - -

- + + + + + + + + + + {{name}} + + + + + +
+
+
+
+
-
-
- - - +
+ + + + \ No newline at end of file