diff --git a/files/assets/js/post.js b/files/assets/js/post.js index 88708dd57..c607d3797 100644 --- a/files/assets/js/post.js +++ b/files/assets/js/post.js @@ -32,3 +32,95 @@ if (fake_textarea) { location.href = fake_textarea.dataset.href; }); } + + + + + + + + + + + +//SWIPING + + +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 _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; + +function unify(e) { return e.changedTouches ? e.changedTouches[0] : e }; + +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); + + 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 || (screen_width > 768 && f > 0.1))) { + location.href = `/post/${id_before}` + } + if (id_after && (f < -0.2 || (screen_width > 768 && f < -0.1))) { + location.href = `/post/${id_after}` + } + } + } +}; + +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 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/assets/js/post_ids.js b/files/assets/js/post_ids.js new file mode 100644 index 000000000..13253ea53 --- /dev/null +++ b/files/assets/js/post_ids.js @@ -0,0 +1,2 @@ +const post_ids = document.getElementById('post_ids').value.slice(1, -1) +localStorage.setItem("post_ids", post_ids); diff --git a/files/routes/front.py b/files/routes/front.py index 1b7a8a622..73909bd23 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) + 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) if not v: cache.set(f'frontpage_{sort}_{t}_{page}_{hole}_{pins}', result, timeout=900) diff --git a/files/templates/home.html b/files/templates/home.html index cde499bcb..bf4966ee1 100644 --- a/files/templates/home.html +++ b/files/templates/home.html @@ -128,4 +128,7 @@ {% if FP and request.path == '/' and v and not v.fp %} {% endif %} + + + {% endblock %}