+
«
{for $j = $conf->page - ($space-1); $j <= $conf->page + ($space-1); $j++}
{$j}
diff --git a/Web/static/js/al_music.js b/Web/static/js/al_music.js
index 7ee1f035..9aeab1f8 100644
--- a/Web/static/js/al_music.js
+++ b/Web/static/js/al_music.js
@@ -641,6 +641,35 @@ class bigPlayer {
duration: this.tracks["currentTrack"].length
})
}
+
+ loadContextPage(page, lesser = false) {
+ const formdata = new FormData()
+ formdata.append("context", this.context["context_type"])
+ formdata.append("context_entity", this.context["context_id"])
+ formdata.append("hash", u("meta[name=csrf]").attr("value"))
+ formdata.append("page", page)
+
+ ky.post("/audios/context", {
+ hooks: {
+ afterResponse: [
+ async (_request, _options, response) => {
+ const newArr = await response.json()
+
+ if(lesser)
+ this.tracks["tracks"] = newArr["items"].concat(this.tracks["tracks"])
+ else
+ this.tracks["tracks"] = this.tracks["tracks"].concat(newArr["items"])
+
+ this.context["playedPages"].push(String(newArr["page"]))
+
+ this.updateButtons()
+ console.info("Loaded context for page " + page)
+ }
+ ]
+ },
+ body: formdata
+ })
+ }
}
document.addEventListener("DOMContentLoaded", function() {
diff --git a/Web/static/js/al_suggestions.js b/Web/static/js/al_suggestions.js
index 1c3da3e8..befe78b7 100644
--- a/Web/static/js/al_suggestions.js
+++ b/Web/static/js/al_suggestions.js
@@ -201,7 +201,7 @@ $(document).on("click", ".sugglist a", (e) => {
})
// нажатие на пагинатор у постов предложки
-$(document).on("click", "#postz .paginator a", (e) => {
+/*$(document).on("click", "#postz .paginator a", (e) => {
e.preventDefault()
ky(e.currentTarget.href, {
@@ -228,4 +228,4 @@ $(document).on("click", "#postz .paginator a", (e) => {
]
}
})
-})
+})*/
diff --git a/Web/static/js/al_wall.js b/Web/static/js/al_wall.js
index 3278810d..8b516f11 100644
--- a/Web/static/js/al_wall.js
+++ b/Web/static/js/al_wall.js
@@ -1643,3 +1643,76 @@ $(document).on("click", ".avatarDelete", (e) => {
}),
]);
})
+
+async function __processPaginatorNextPage(page)
+{
+ const container = u('.scroll_container')
+ const container_node = '.scroll_node'
+ const parser = new DOMParser
+
+ const replace_url = new URL(location.href)
+ replace_url.searchParams.set('p', page)
+
+ const new_content = await fetch(replace_url.href)
+ const new_content_response = await new_content.text()
+ const parsed_content = parser.parseFromString(new_content_response, 'text/html')
+
+ const nodes = parsed_content.querySelectorAll(container_node)
+ nodes.forEach(node => {
+ container.append(node)
+ })
+
+ u(`.paginator:not(.paginator-at-top)`).html(parsed_content.querySelector('.paginator:not(.paginator-at-top)').innerHTML)
+ // fffffuck
+ if(u(`.paginator:not(.paginator-at-top)`).nodes[0].closest('.scroll_container')) {
+ container.nodes[0].append(u(`.paginator:not(.paginator-at-top)`).nodes[0].parentNode)
+ }
+
+ if(window.player) {
+ window.player.loadContextPage(page)
+ }
+
+ if(typeof __scrollHook != 'undefined') {
+ __scrollHook(page)
+ }
+}
+
+const showMoreObserver = new IntersectionObserver(entries => {
+ entries.forEach(async x => {
+ if(x.isIntersecting) {
+ if(u('.scroll_container').length < 1) {
+ return
+ }
+
+ const target = u(x.target)
+ if(target.length < 1 || target.hasClass('paginator-at-top')) {
+ return
+ }
+
+ const current_url = new URL(location.href)
+ if(current_url.searchParams && !isNaN(parseInt(current_url.searchParams.get('p')))) {
+ return
+ }
+
+ target.addClass('lagged')
+ const active_tab = target.find('.active')
+ const next_page = u(active_tab.nodes[0] ? active_tab.nodes[0].nextElementSibling : null)
+ if(next_page.length < 1) {
+ u('.paginator:not(.paginator-at-top)').removeClass('lagged')
+ return
+ }
+
+ const page_number = Number(next_page.html())
+ await __processPaginatorNextPage(page_number)
+ u('.paginator:not(.paginator-at-top)').removeClass('lagged')
+ }
+ })
+}, {
+ root: null,
+ rootMargin: '0px',
+ threshold: 0,
+})
+
+if(u('.paginator:not(.paginator-at-top)').length > 0) {
+ showMoreObserver.observe(u('.paginator:not(.paginator-at-top)').nodes[0])
+}
diff --git a/Web/static/js/openvk.cls.js b/Web/static/js/openvk.cls.js
index 64700084..5878945e 100644
--- a/Web/static/js/openvk.cls.js
+++ b/Web/static/js/openvk.cls.js
@@ -90,7 +90,7 @@ document.addEventListener("DOMContentLoaded", function() { //BEGIN
});
/* @rem-pai why this func wasn't named as "#_deleteDialog"? It looks universal IMO */
- u("#_noteDelete").on("click", function(e) {
+ u(document).on("click", "#_noteDelete", function(e) {
var formHtml = "
";
@@ -167,7 +167,7 @@ document.addEventListener("DOMContentLoaded", function() { //BEGIN
return false;
});
- u("#_submitUserSubscriptionAction").handle("submit", async function(e) {
+ u(document).handle("submit", "#_submitUserSubscriptionAction", async function(e) {
u(this).nodes[0].parentElement.classList.add('loading');
u(this).nodes[0].parentElement.classList.add('disable');
console.log(e.target);
@@ -518,7 +518,7 @@ function highlightText(searchText, container_selector, selectors = []) {
node.parentNode.insertBefore(tempDiv.firstChild, node)
}
node.parentNode.removeChild(node)
- } else if(node.nodeType === 1 && node.tagName !== 'SCRIPT' && node.tagName !== 'BR' && node.tagName !== 'STYLE') {
+ } else if(node.nodeType === 1 && node.tagName !== 'SCRIPT' && node.tagName !== 'BR' && node.tagName !== 'STYLE' && !node.classList.contains('highlight')) {
Array.from(node.childNodes).forEach(highlightNode);
}
}
From 389f0b4bb4ee6fff71e2259c1b41c67e87f142d5 Mon Sep 17 00:00:00 2001
From: mrilyew <99399973+mrilyew@users.noreply.github.com>
Date: Sat, 2 Nov 2024 12:13:17 +0300
Subject: [PATCH 2/5] allow comments scroll
---
Web/Presenters/templates/components/comments.xml | 8 +++++---
Web/static/js/al_comments.js | 2 +-
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/Web/Presenters/templates/components/comments.xml b/Web/Presenters/templates/components/comments.xml
index 0df0c91f..a4bf59da 100644
--- a/Web/Presenters/templates/components/comments.xml
+++ b/Web/Presenters/templates/components/comments.xml
@@ -9,9 +9,11 @@
{if sizeof($comments) > 0}
- {foreach $comments as $comment}
- {include "comment.xml", comment => $comment}
- {/foreach}
+
{include "paginator.xml", conf => (object) ["page" => $page, "count" => $count, "amount" => sizeof($comments), "perPage" => 10]}
diff --git a/Web/static/js/al_comments.js b/Web/static/js/al_comments.js
index f4172428..70c7210d 100644
--- a/Web/static/js/al_comments.js
+++ b/Web/static/js/al_comments.js
@@ -1,4 +1,4 @@
-u(".comment-reply").on("click", function(e) {
+u(document).on("click", ".comment-reply", function(e) {
let comment = u(e.target).closest(".post");
let authorId = comment.data("owner-id");
let authorNm = u(".post-author > a > b", comment.first()).text().trim();
From c4fec2bf9701ecee798df37bff1b6f285763213b Mon Sep 17 00:00:00 2001
From: mrilyew <99399973+mrilyew@users.noreply.github.com>
Date: Sat, 2 Nov 2024 13:02:34 +0300
Subject: [PATCH 3/5] rework to up button
---
Web/Presenters/templates/@layout.xml | 9 +++++++-
Web/static/css/main.css | 29 ++++++++++++++++++++++++--
Web/static/js/scroll.js | 31 +++++++++++++++++++++++-----
3 files changed, 61 insertions(+), 8 deletions(-)
diff --git a/Web/Presenters/templates/@layout.xml b/Web/Presenters/templates/@layout.xml
index b54ef44c..5e095508 100644
--- a/Web/Presenters/templates/@layout.xml
+++ b/Web/Presenters/templates/@layout.xml
@@ -82,7 +82,14 @@
{/if}
diff --git a/Web/static/css/main.css b/Web/static/css/main.css
index cb633d0a..e649df4e 100644
--- a/Web/static/css/main.css
+++ b/Web/static/css/main.css
@@ -1381,7 +1381,7 @@ textarea {
.toTop {
position: fixed;
- padding: 20px;
+ padding: 12px;
width: 100px;
height: 100%;
background-color: #f3f3f3;
@@ -1391,9 +1391,34 @@ textarea {
opacity: 0;
transition: .1s all;
z-index: 129;
+ user-select: none;
}
-body.scrolled .toTop:hover {
+.toTop > div svg {
+ display: inline-block;
+ margin-right: 2px;
+ width: 8px;
+ height: 7px;
+ fill: #3f3f3f;
+}
+
+.toTop > div span {
+ font-weight: bold;
+}
+
+.toTop.has_down #to_up, .toTop #to_back {
+ display: none;
+}
+
+.toTop.has_down #to_back {
+ display: block;
+}
+
+.toTop.has_down {
+ opacity: .3;
+}
+
+body.scrolled .toTop:hover, .toTop.has_down:hover {
opacity: .5;
cursor: pointer;
}
diff --git a/Web/static/js/scroll.js b/Web/static/js/scroll.js
index 3b652afd..dff0ca4b 100644
--- a/Web/static/js/scroll.js
+++ b/Web/static/js/scroll.js
@@ -1,14 +1,35 @@
window.addEventListener("scroll", function(e) {
if(window.scrollY < 100) {
+ if(window.temp_y_scroll) {
+ u('.toTop').addClass('has_down')
+ }
document.body.classList.toggle("scrolled", false);
} else {
document.body.classList.toggle("scrolled", true);
+ u('.toTop').removeClass('has_down')
}
});
u(".toTop").on("click", function(e) {
- window.scrollTo({
- top: 0,
- behavior: "smooth"
- });
-});
\ No newline at end of file
+ const y_scroll = window.scrollY
+ const scroll_margin = 20
+
+ if(y_scroll > 100) {
+ window.temp_y_scroll = y_scroll
+ window.scrollTo(0, scroll_margin)
+ window.scrollTo({
+ top: 0,
+ behavior: "smooth"
+ })
+ } else {
+ if(window.temp_y_scroll) {
+ window.scrollTo(0, window.temp_y_scroll - scroll_margin)
+ window.scrollTo({
+ top: window.temp_y_scroll,
+ behavior: "smooth"
+ })
+ }
+ }
+
+ u(document).trigger('scroll')
+})
From c77a6cc54fe02635689ab1ffefb2706f2d80cb1a Mon Sep 17 00:00:00 2001
From: mrilyew <99399973+mrilyew@users.noreply.github.com>
Date: Sun, 17 Nov 2024 16:08:15 +0300
Subject: [PATCH 4/5] add posts scrolling function and ability to disabl
---
Web/Models/Repositories/Posts.php | 4 ++--
Web/Presenters/templates/@layout.xml | 1 +
Web/Presenters/templates/Search/Index.xml | 2 +-
Web/Presenters/templates/User/Groups.xml | 4 ++--
Web/Presenters/templates/Wall/Feed.xml | 10 ++++++----
Web/Presenters/templates/Wall/Wall.xml | 6 +++---
.../templates/components/comments.xml | 2 --
Web/Presenters/templates/components/wall.xml | 6 +++---
Web/static/js/al_comments.js | 4 +++-
Web/static/js/al_feed.js | 19 +++++++++++++++++--
Web/static/js/al_mentions.js | 3 ++-
Web/static/js/al_wall.js | 9 ++++++++-
locales/en.strings | 1 +
locales/ru.strings | 1 +
14 files changed, 50 insertions(+), 22 deletions(-)
diff --git a/Web/Models/Repositories/Posts.php b/Web/Models/Repositories/Posts.php
index 36082f24..da1f9c8d 100644
--- a/Web/Models/Repositories/Posts.php
+++ b/Web/Models/Repositories/Posts.php
@@ -53,9 +53,9 @@ class Posts
$offset--;
}
}
- } else if(!is_null($offset)) {
+ } /*else if(!is_null($offset)) {
$offset--;
- }
+ }*/
$sel = $this->posts->where([
"wall" => $user,
diff --git a/Web/Presenters/templates/@layout.xml b/Web/Presenters/templates/@layout.xml
index ca356901..0e514bb8 100644
--- a/Web/Presenters/templates/@layout.xml
+++ b/Web/Presenters/templates/@layout.xml
@@ -391,6 +391,7 @@
{script "js/al_polls.js"}
{script "js/al_suggestions.js"}
{script "js/al_navigation.js"}
+ {script "js/al_comments.js"}
{ifset $thisUser}
{script "js/al_notifs.js"}
diff --git a/Web/Presenters/templates/Search/Index.xml b/Web/Presenters/templates/Search/Index.xml
index a515fd16..a1d49b1c 100644
--- a/Web/Presenters/templates/Search/Index.xml
+++ b/Web/Presenters/templates/Search/Index.xml
@@ -29,7 +29,7 @@
-
+
{if $count > 0}
{if $section === 'users'}
diff --git a/Web/Presenters/templates/User/Groups.xml b/Web/Presenters/templates/User/Groups.xml
index 281447ba..d3528268 100644
--- a/Web/Presenters/templates/User/Groups.xml
+++ b/Web/Presenters/templates/User/Groups.xml
@@ -122,8 +122,8 @@
{_search_group}
{_search_group_desc}
diff --git a/Web/Presenters/templates/Wall/Feed.xml b/Web/Presenters/templates/Wall/Feed.xml
index e609419c..33a70533 100644
--- a/Web/Presenters/templates/Wall/Feed.xml
+++ b/Web/Presenters/templates/Wall/Feed.xml
@@ -23,10 +23,12 @@
{include "../components/textArea.xml", route => "/wall" . $thisUser->getId() . "/makePost", graffiti => true, polls => true, notes => true, hasSource => true}
- {foreach $posts as $post}
-
- {include "../components/post.xml", post => $post, onWallOf => true, commentSection => true}
- {/foreach}
+
diff --git a/Web/Presenters/templates/Wall/Wall.xml b/Web/Presenters/templates/Wall/Wall.xml
index 80452295..73801632 100644
--- a/Web/Presenters/templates/Wall/Wall.xml
+++ b/Web/Presenters/templates/Wall/Wall.xml
@@ -31,13 +31,13 @@
{include "../components/textArea.xml", route => "/wall$owner/makePost", hasSource => true}
-
+
{if sizeof($posts) > 0}
- {foreach $posts as $post}
+
{include "../components/paginator.xml", conf => $paginatorConf}
{else}
{_no_posts_abstract}
diff --git a/Web/Presenters/templates/components/comments.xml b/Web/Presenters/templates/components/comments.xml
index a4bf59da..53253b5f 100644
--- a/Web/Presenters/templates/components/comments.xml
+++ b/Web/Presenters/templates/components/comments.xml
@@ -20,5 +20,3 @@
{else}
{_comments_tip}
{/if}
-
-{script "js/al_comments.js"}
diff --git a/Web/Presenters/templates/components/wall.xml b/Web/Presenters/templates/components/wall.xml
index 91e08fbc..8479041d 100644
--- a/Web/Presenters/templates/components/wall.xml
+++ b/Web/Presenters/templates/components/wall.xml
@@ -13,13 +13,13 @@
{include "../components/textArea.xml", route => "/wall$owner/makePost", graffiti => true, polls => true, notes => true, hasSource => true}
-
+
{if sizeof($posts) > 0}
- {foreach $posts as $post}
+
{include "../components/paginator.xml", conf => $paginatorConf}
{else}
{_no_posts_abstract}
diff --git a/Web/static/js/al_comments.js b/Web/static/js/al_comments.js
index 70c7210d..ad398637 100644
--- a/Web/static/js/al_comments.js
+++ b/Web/static/js/al_comments.js
@@ -8,6 +8,8 @@ u(document).on("click", ".comment-reply", function(e) {
let mention = ("[" + (fromGroup ? "club" : "id") + authorId + "|" + authorNm + "], ");
// Substitute pervious mention if present, prepend otherwise
- inputbox.nodes[0].value = inputbox.nodes[0].value.replace(/(^\[([A-Za-z0-9]+)\|([\p{L} 0-9@]+)\], |^)/u, mention);
+ inputbox.nodes.forEach(node => {
+ node.value = node.value.replace(/(^\[([A-Za-z0-9]+)\|([\p{L} 0-9@]+)\], |^)/u, mention);
+ })
inputbox.trigger("focusin");
});
diff --git a/Web/static/js/al_feed.js b/Web/static/js/al_feed.js
index 2831d6f1..7ca8a798 100644
--- a/Web/static/js/al_feed.js
+++ b/Web/static/js/al_feed.js
@@ -84,6 +84,7 @@ u(document).on('click', '#__feed_settings_link', (e) => {
const CURRENT_PERPAGE = Number(__temp_url.searchParams.get('posts') ?? 10)
const CURRENT_PAGE = Number(__temp_url.searchParams.get('p') ?? 1)
const CURRENT_RETURN_BANNED = Number(__temp_url.searchParams.get('return_banned') ?? 0)
+ const CURRENT_AUTO_SCROLL = Number(localStorage.getItem('ux.auto_scroll') ?? 1)
const COUNT = [1, 5, 10, 20, 30, 40, 50]
u('#_feed_settings_container #__content').html(`
@@ -107,11 +108,21 @@ u(document).on('click', '#__feed_settings_link', (e) => {
-
+
|
- ${tr('show_ignored_sources')}
+
+ |
+
+
+
+
+
+
+ |
+
+
|
@@ -268,3 +279,7 @@ u(document).on('click', '#__feed_settings_link', (e) => {
__switchTab('main')
})
+
+u(document).on('change', `input[data-act='localstorage_item']`, (e) => {
+ localStorage.setItem(e.target.name, Number(e.target.checked))
+})
diff --git a/Web/static/js/al_mentions.js b/Web/static/js/al_mentions.js
index 1be77563..d324cca6 100644
--- a/Web/static/js/al_mentions.js
+++ b/Web/static/js/al_mentions.js
@@ -19,7 +19,8 @@ var tooltipTemplate = Handlebars.compile(`
`);
-tippy(".mention", {
+tippy.delegate("body", {
+ target: '.mention',
theme: "light vk",
content: "⌛",
allowHTML: true,
diff --git a/Web/static/js/al_wall.js b/Web/static/js/al_wall.js
index 3dba201d..53617dd4 100644
--- a/Web/static/js/al_wall.js
+++ b/Web/static/js/al_wall.js
@@ -399,6 +399,7 @@ async function OpenVideo(video_arr = [], init_player = true)
details.find('.media-page-wrapper-description b').remove()
u('#ovk-player-info').html(details.html())
+ bsdnHydrate()
}
})
@@ -542,7 +543,8 @@ var tooltipClientNoInfoTemplate = Handlebars.compile(`