From a2e9909262a68e6811cae33449d2f4f6c3416000 Mon Sep 17 00:00:00 2001 From: claravox Date: Tue, 20 Aug 2024 16:24:20 +0200 Subject: [PATCH] YDA-5870: Collapse group properties on scroll in group manager --- .../static/group_manager/js/group_manager.js | 47 +++++++++++++++++++ .../templates/group_manager/index.html | 2 +- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/group_manager/static/group_manager/js/group_manager.js b/group_manager/static/group_manager/js/group_manager.js index e35dce37..d5a54177 100644 --- a/group_manager/static/group_manager/js/group_manager.js +++ b/group_manager/static/group_manager/js/group_manager.js @@ -2,6 +2,48 @@ 'use strict' let enteredUsername = '' +let didScroll +let lastScrollTop = 0 + +setInterval(function () { + if (didScroll) { + collapseUncollapseOnScroll() + didScroll = false + } +}, 400) + +function collapseUncollapseOnScroll () { + // Collapse or uncollapse group properties on scroll, if the right pane is too long + const buffer = 20 + const delta = 10 + const collapseDelta = 400 + const topOfScreenPoint = 60 + const collapsePoint = 300 + const st = Math.floor(window.scrollY) + let collapseEl = bootstrap.Collapse.getInstance('#group-properties') + if (!collapseEl) { + collapseEl = new bootstrap.Collapse('#group-properties', { + toggle: false + }) + } + + if (Math.abs(lastScrollTop - st) <= delta) { + return + } + + if (st <= lastScrollTop && st <= topOfScreenPoint) { + // Near the top of the screen + bootstrap.Collapse.getInstance('#group-properties').show() + } else if (st > lastScrollTop && + st > collapsePoint && + Math.abs(lastScrollTop - st) <= collapseDelta && + $('#group-overview').outerHeight() + buffer > $(window).height()) { + // Have scrolled down at least a little + bootstrap.Collapse.getInstance('#group-properties').hide() + } + + lastScrollTop = st +} function flatListGroups () { // Create flat list of groups including filter handling on username and groupname. @@ -2176,6 +2218,11 @@ $(function () { .addClass('fa-caret-down') Yoda.storage.session.set('is-collapsed', 'false') }) + + // For the auto-collapsing of group properties + $(window).scroll(function (event) { + didScroll = true + }) // }}} // Group list {{{ diff --git a/group_manager/templates/group_manager/index.html b/group_manager/templates/group_manager/index.html index 7b5f968a..172e7e5b 100644 --- a/group_manager/templates/group_manager/index.html +++ b/group_manager/templates/group_manager/index.html @@ -88,7 +88,7 @@

Group manager

-
+