[TikiWiki-commits] [Git][tikiwiki/tiki][master] [ENH] Tiki-menu.js: Add mobile dropdown positioning for better viewport handling
Benoit Grégoire (@benoitg) via TikiWiki-cvs <[email protected]>
| Newsgroups | gmane.comp.cms.tiki.cvs |
|---|---|
| Message-ID | <692de5043b382_2a17bc04511ef@gitlab-sidekiq-low-urgency-cpu-bound-v2-5645d46d6b-xkf95.mail> |
Benoit Grégoire pushed to branch master at Tiki Wiki CMS Groupware / Tiki
Commits:
218872dc by UshindiG at 2025-12-01T18:48:54+00:00
[ENH] Tiki-menu.js: Add mobile dropdown positioning for better viewport handling
---
* [ENH] tiki-js: Add mobile dropdown positioning for better viewport handling
See merge request tikiwiki/tiki!9145
- - - - -
2 changed files:
- src/js/jquery-tiki/tiki-menu.js
- templates/modules/mod-quickadmin.tpl
Changes:
=====================================
src/js/jquery-tiki/tiki-menu.js
=====================================
@@ -47,4 +47,59 @@ $(function () {
});
});
+/* Mobile dropdown positioning */
+(function ($) {
+ $(function () {
+ function positionDropdownMobile($menu, $toggle) {
+ if (window.innerWidth > 576) return;
+ if (!$menu.length || !$toggle.length) return;
+
+ var wasHidden = false;
+ if (!$menu.is(":visible")) {
+ wasHidden = true;
+ $menu.addClass("show");
+ }
+
+ var rect = $toggle[0].getBoundingClientRect();
+ var viewportW = window.innerWidth;
+ var viewportH = window.innerHeight;
+
+ var menuMaxW = Math.min(viewportW - 16, Math.max(200, $menu.outerWidth()));
+ $menu.css({ position: "fixed", "box-sizing": "border-box", width: menuMaxW + "px" });
+
+ var menuH = Math.min($menu.outerHeight(), viewportH - 16);
+ $menu.css("max-height", menuH + "px");
+
+ var topBelow = rect.bottom + 8;
+ var topAbove = rect.top - menuH - 8;
+ var top = topBelow + menuH <= viewportH - 8 ? topBelow : Math.max(8, topAbove);
+
+ var left = Math.round(rect.left + (rect.width - menuMaxW) / 2);
+ left = Math.max(8, Math.min(left, viewportW - menuMaxW - 8));
+
+ $menu.css({ top: top + "px", left: left + "px", right: "auto", transform: "none", zIndex: 1060 });
+
+ if (wasHidden) {
+ $menu.removeClass("show");
+ }
+ }
+
+ $(document).on("shown.bs.dropdown", "#quickadmin .dropdown, .siteloginbar_popup", function () {
+ var $root = $(this);
+ var $toggle = $root.find('[data-bs-toggle="dropdown"]').first();
+ var $menu = $root.find(".dropdown-menu").first();
+ positionDropdownMobile($menu, $toggle);
+ $(window).on("resize._dropdownPos", function () {
+ positionDropdownMobile($menu, $toggle);
+ });
+ });
+
+ $(document).on("hidden.bs.dropdown", "#quickadmin .dropdown, .siteloginbar_popup", function () {
+ var $menu = $(this).find(".dropdown-menu").first();
+ $menu.css({ position: "", top: "", left: "", right: "", width: "", maxHeight: "", transform: "", zIndex: "" });
+ $(window).off("resize._dropdownPos");
+ });
+ });
+})(jQuery);
+
// end of src/js/tiki-menu.js
=====================================
templates/modules/mod-quickadmin.tpl
=====================================
@@ -2,7 +2,7 @@
{if $tiki_p_admin == "y"}
<div id="quickadmin" class="nav justify-content-end flex-nowrap">
{if $only_shortcuts neq 'y'}
- <div class="nav-item prefs-history-dropdown">
+ <div class="nav-item dropdown prefs-history-dropdown">
{if ! $js}<ul><li>{/if}
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" data-display="dynamic" data-flip="true" href="#" role="button">
{icon name="history"}
View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/218872dc361f3931be037be85451c58ab55fcbdc
--
View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/218872dc361f3931be037be85451c58ab55fcbdc
You're receiving this email because of your account on gitlab.com.
_______________________________________________
TikiWiki-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs