From 5455ec6a7d069cd548d9d8c8ab795f5882d5c8bd Mon Sep 17 00:00:00 2001 From: Aevann Date: Sun, 14 Jan 2024 17:53:41 +0200 Subject: [PATCH] use permalinks for instant visit marker --- files/assets/js/post.js | 127 +++++++++++++++++++------------------- files/routes/front.py | 2 +- files/templates/post.html | 2 + 3 files changed, 68 insertions(+), 63 deletions(-) diff --git a/files/assets/js/post.js b/files/assets/js/post.js index 1d28eb850..436252886 100644 --- a/files/assets/js/post.js +++ b/files/assets/js/post.js @@ -47,81 +47,84 @@ if (fake_textarea) { if (screen_width < 768) { const post_ids = localStorage.getItem("post_ids").split(', '); - const current_index = post_ids.indexOf(pid) - const id_after = post_ids[current_index+1] - const id_before = post_ids[current_index-1] + const permalink = document.getElementById("permalink").value + const current_index = post_ids.indexOf(`'${permalink}'`) + if (current_index > -1) { + const id_after = post_ids[current_index+1] + const id_before = post_ids[current_index-1] - const _C = document.querySelector('.container') - const N = _C.children.length - const NF = 30 + const _C = document.querySelector('.container') + const N = _C.children.length + const NF = 30 - let i = 0, x0 = null, y0 = null, locked = false, w, ini, fin, rID = null, anf, n; + let i = 0, x0 = null, y0 = null, locked = false, w, ini, fin, rID = null, anf, n; - function unify(e) { return e.changedTouches ? e.changedTouches[0] : e }; + function unify(e) { return e.changedTouches ? e.changedTouches[0] : e }; - function lock(e) { - x0 = unify(e).clientX; - y0 = unify(e).clientY; - locked = true - }; + function lock(e) { + x0 = unify(e).clientX; + y0 = unify(e).clientY; + locked = true + }; - function drag(e) { - if(locked) { - let dx = unify(e).clientX - x0 - let f = +(dx/w).toFixed(2); + function drag(e) { + if(locked) { + let dx = unify(e).clientX - x0 + let f = +(dx/w).toFixed(2); - let dy = unify(e).clientY - y0 - let fy = +(dy/y).toFixed(2); + let dy = unify(e).clientY - y0 + let fy = +(dy/y).toFixed(2); - if (!getSelection().toString() && (f > 0.04 || f < -0.04) && (fy < 0.02 && fy > -0.02)) { - if (id_before && f > 0.2) { - location.href = `/post/${id_before}` - } - if (id_after && f < -0.2) { - location.href = `/post/${id_after}` + if (!getSelection().toString() && (f > 0.04 || f < -0.04) && (fy < 0.02 && fy > -0.02)) { + if (id_before && f > 0.2) { + location.href = id_before.slice(1, -1) + } + if (id_after && f < -0.2) { + location.href = id_after.slice(1, -1) + } } } + }; + + function move(e) { + if(locked) { + let dx = unify(e).clientX - x0, + s = Math.sign(dx), + f = +(s*dx/w).toFixed(2); + + ini = i - s*f; + + if((i > 0 || s < 0) && (i < N - 1 || s > 0) && f > .2) { + i -= s; + f = 1 - f + } + + fin = i; + anf = Math.round(f*NF); + n = 2 + Math.round(f) + x0 = null; + y0 = null; + locked = false; } - }; + }; - function move(e) { - if(locked) { - let dx = unify(e).clientX - x0, - s = Math.sign(dx), - f = +(s*dx/w).toFixed(2); + function size() { + w = window.innerWidth + y = window.innerHeight + }; - ini = i - s*f; + size(); + _C.style.setProperty('--n', N); - if((i > 0 || s < 0) && (i < N - 1 || s > 0) && f > .2) { - i -= s; - f = 1 - f - } + addEventListener('resize', size, false); - fin = i; - anf = Math.round(f*NF); - n = 2 + Math.round(f) - x0 = null; - y0 = null; - locked = false; + _C.addEventListener('mousedown', lock, false); + _C.addEventListener('touchstart', lock, false); + + _C.addEventListener('mousemove', drag, false); + _C.addEventListener('touchmove', drag, false); + + _C.addEventListener('mouseup', move, false); + _C.addEventListener('touchend', move, false); } - }; - - function size() { - w = window.innerWidth - y = window.innerHeight - }; - - size(); - _C.style.setProperty('--n', N); - - addEventListener('resize', size, false); - - _C.addEventListener('mousedown', lock, false); - _C.addEventListener('touchstart', lock, false); - - _C.addEventListener('mousemove', drag, false); - _C.addEventListener('touchmove', drag, false); - - _C.addEventListener('mouseup', move, false); - _C.addEventListener('touchend', move, false); } diff --git a/files/routes/front.py b/files/routes/front.py index 73909bd23..b6c915551 100644 --- a/files/routes/front.py +++ b/files/routes/front.py @@ -80,7 +80,7 @@ def front_all(v, hole=None): if v and v.client: return {"data": [x.json for x in posts], "total": total} - result = render_template("home.html", v=v, listing=posts, total=total, sort=sort, t=t, page=page, hole=hole, home=True, pins=pins, size=size, post_ids=ids) + result = render_template("home.html", v=v, listing=posts, total=total, sort=sort, t=t, page=page, hole=hole, home=True, pins=pins, size=size, post_ids=[p.permalink for p in posts]) if not v: cache.set(f'frontpage_{sort}_{t}_{page}_{hole}_{pins}', result, timeout=900) diff --git a/files/templates/post.html b/files/templates/post.html index 4619a85a8..5b908d19a 100644 --- a/files/templates/post.html +++ b/files/templates/post.html @@ -347,6 +347,8 @@ + + {% if fart and not (v and v.has_badge(128)) %}