]> source.dussan.org Git - gitea.git/commitdiff
Right align the "Settings" menu item in overflow-menu (#30764) (#30777)
authorGiteabot <teabot@gitea.io>
Tue, 30 Apr 2024 08:40:09 +0000 (16:40 +0800)
committerGitHub <noreply@github.com>
Tue, 30 Apr 2024 08:40:09 +0000 (16:40 +0800)
Backport #30764 by wxiaoguang

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
templates/org/menu.tmpl
templates/repo/header.tmpl
web_src/css/base.css
web_src/css/modules/container.css
web_src/js/webcomponents/overflow-menu.js

index c519606d1f63ac3564b5c0b64367977146fff487..698a9559c52875b0cfeafc83a674fd612191d483 100644 (file)
@@ -40,8 +40,9 @@
                        </a>
                        {{end}}
                        {{if .IsOrganizationOwner}}
+                       <span class="item-flex-space"></span>
                        <a class="{{if .PageIsOrgSettings}}active {{end}}item" href="{{.OrgLink}}/settings">
-                       {{svg "octicon-tools"}} {{ctx.Locale.Tr "repo.settings"}}
+                               {{svg "octicon-tools"}} {{ctx.Locale.Tr "repo.settings"}}
                        </a>
                        {{end}}
                </div>
index 775aa300639f4994ab69b0fdb8e3bf82b765d24c..c0d833a187cd4101c134ce31fb3702fc87315d9e 100644 (file)
                                {{template "custom/extra_tabs" .}}
 
                                {{if .Permission.IsAdmin}}
+                                       <span class="item-flex-space"></span>
                                        <a class="{{if .PageIsRepoSettings}}active {{end}} item" href="{{.RepoLink}}/settings">
                                                {{svg "octicon-tools"}} {{ctx.Locale.Tr "repo.settings"}}
                                        </a>
index 58a5723cb5631f8f6c02e427e973074fd091a84b..bca581eae654c74d2ac93c122c30cda452342b58 100644 (file)
@@ -942,6 +942,23 @@ overflow-menu .overflow-menu-items .item {
   margin-bottom: 0 !important; /* reset fomantic's margin, because the active menu has special bottom border */
 }
 
+overflow-menu .overflow-menu-items .item-flex-space {
+  flex: 1;
+}
+
+overflow-menu .overflow-menu-button {
+  background: transparent;
+  border: none;
+  color: inherit;
+  text-align: center;
+  width: 32px;
+  padding: 0;
+}
+
+overflow-menu .overflow-menu-button:hover {
+  color: var(--color-text-dark);
+}
+
 overflow-menu .ui.label {
   margin-left: 7px !important; /* save some space */
 }
index f394d6c06de5f7ebfd35c4626308b353613bba64..9f67ceb8d5e368cf33acc88fde8f02c9bb7fddf6 100644 (file)
@@ -6,38 +6,6 @@
   max-width: 100%;
 }
 
-@media (max-width: 767.98px) {
-  .ui.ui.ui.container:not(.fluid) {
-    width: auto;
-    margin-left: 1em;
-    margin-right: 1em;
-  }
-}
-
-@media (min-width: 768px) and (max-width: 991.98px) {
-  .ui.ui.ui.container:not(.fluid) {
-    width: 723px;
-    margin-left: auto;
-    margin-right: auto;
-  }
-}
-
-@media (min-width: 992px) and (max-width: 1199.98px) {
-  .ui.ui.ui.container:not(.fluid) {
-    width: 933px;
-    margin-left: auto;
-    margin-right: auto;
-  }
-}
-
-@media (min-width: 1200px) {
-  .ui.ui.ui.container:not(.fluid) {
-    width: 1127px;
-    margin-left: auto;
-    margin-right: auto;
-  }
-}
-
 .ui.fluid.container {
   width: 100%;
 }
index 604fce7d4bb4d5a7ace5a68d86de67b3bc8b54a0..0778c5990feb7b0fdf2e4545b87218919c0357b8 100644 (file)
@@ -8,7 +8,7 @@ window.customElements.define('overflow-menu', class extends HTMLElement {
     if (!this.tippyContent) {
       const div = document.createElement('div');
       div.classList.add('tippy-target');
-      div.tabIndex = '-1'; // for initial focus, programmatic focus only
+      div.tabIndex = -1; // for initial focus, programmatic focus only
       div.addEventListener('keydown', (e) => {
         if (e.key === 'Tab') {
           const items = this.tippyContent.querySelectorAll('[role="menuitem"]');
@@ -60,21 +60,35 @@ window.customElements.define('overflow-menu', class extends HTMLElement {
       this.tippyContent = div;
     }
 
+    const itemFlexSpace = this.menuItemsEl.querySelector('.item-flex-space');
+
     // move items in tippy back into the menu items for subsequent measurement
     for (const item of this.tippyItems || []) {
-      this.menuItemsEl.append(item);
+      if (!itemFlexSpace || item.getAttribute('data-after-flex-space')) {
+        this.menuItemsEl.append(item);
+      } else {
+        itemFlexSpace.insertAdjacentElement('beforebegin', item);
+      }
     }
 
     // measure which items are partially outside the element and move them into the button menu
+    itemFlexSpace?.style.setProperty('display', 'none', 'important');
     this.tippyItems = [];
     const menuRight = this.offsetLeft + this.offsetWidth;
-    const menuItems = this.menuItemsEl.querySelectorAll('.item');
+    const menuItems = this.menuItemsEl.querySelectorAll('.item, .item-flex-space');
+    let afterFlexSpace = false;
     for (const item of menuItems) {
+      if (item.classList.contains('item-flex-space')) {
+        afterFlexSpace = true;
+        continue;
+      }
+      if (afterFlexSpace) item.setAttribute('data-after-flex-space', 'true');
       const itemRight = item.offsetLeft + item.offsetWidth;
-      if (menuRight - itemRight < 38) { // roughly the width of .overflow-menu-button
+      if (menuRight - itemRight < 38) { // roughly the width of .overflow-menu-button with some extra space
         this.tippyItems.push(item);
       }
     }
+    itemFlexSpace?.style.removeProperty('display');
 
     // if there are no overflown items, remove any previously created button
     if (!this.tippyItems?.length) {
@@ -105,7 +119,7 @@ window.customElements.define('overflow-menu', class extends HTMLElement {
 
     // create button initially
     const btn = document.createElement('button');
-    btn.classList.add('overflow-menu-button', 'btn', 'tw-px-2', 'hover:tw-text-text-dark');
+    btn.classList.add('overflow-menu-button');
     btn.setAttribute('aria-label', window.config.i18n.more_items);
     btn.innerHTML = octiconKebabHorizontal;
     this.append(btn);