diff --git a/modules/setting/server.go b/modules/setting/server.go index 8a22f6a844..38e166e02a 100644 --- a/modules/setting/server.go +++ b/modules/setting/server.go @@ -275,7 +275,7 @@ func loadServerFrom(rootCfg ConfigProvider) { HTTPAddr = filepath.Join(AppWorkPath, HTTPAddr) } default: - log.Fatal("Invalid PROTOCOL %q", Protocol) + log.Fatal("Invalid PROTOCOL %q", protocolCfg) } UseProxyProtocol = sec.Key("USE_PROXY_PROTOCOL").MustBool(false) ProxyProtocolTLSBridging = sec.Key("PROXY_PROTOCOL_TLS_BRIDGING").MustBool(false) diff --git a/templates/repo/diff/comments.tmpl b/templates/repo/diff/comments.tmpl index 2e8261e479..aa483ec669 100644 --- a/templates/repo/diff/comments.tmpl +++ b/templates/repo/diff/comments.tmpl @@ -9,7 +9,7 @@ {{end}}
-
+
{{if .OriginalAuthor}} {{svg (MigrationIcon $.root.Repository.GetOriginalURLHostname)}} @@ -30,7 +30,7 @@ {{end}}
-
+
{{if .Invalidated}} {{$referenceUrl := printf "%s#%s" $.root.Issue.Link .HashTag}} diff --git a/templates/repo/issue/view_content.tmpl b/templates/repo/issue/view_content.tmpl index dae3c4ee6a..926c6e3de5 100644 --- a/templates/repo/issue/view_content.tmpl +++ b/templates/repo/issue/view_content.tmpl @@ -14,7 +14,7 @@ {{end}}
-
+
{{if .Issue.OriginalAuthor}} {{svg (MigrationIcon .Repository.GetOriginalURLHostname)}} @@ -36,7 +36,7 @@ {{end}}
-
+
{{template "repo/issue/view_content/show_role" dict "ShowRole" .Issue.ShowRole "IgnorePoster" true}} {{if not $.Repository.IsArchived}} {{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/issues/%d/reactions" $.RepoLink .Issue.Index)}} diff --git a/templates/repo/issue/view_content/comments.tmpl b/templates/repo/issue/view_content/comments.tmpl index 50b8f58fc3..2bf8837dd5 100644 --- a/templates/repo/issue/view_content/comments.tmpl +++ b/templates/repo/issue/view_content/comments.tmpl @@ -27,7 +27,7 @@ {{end}}
-
+
{{if .OriginalAuthor}} {{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}} @@ -51,7 +51,7 @@ {{end}}
-
+
{{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}} {{if not $.Repository.IsArchived}} {{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}} @@ -395,7 +395,7 @@
-
+ -
+
{{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}} {{if not $.Repository.IsArchived}} {{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}} diff --git a/templates/repo/issue/view_content/conversation.tmpl b/templates/repo/issue/view_content/conversation.tmpl index aa94a2dbc4..07051d5ec0 100644 --- a/templates/repo/issue/view_content/conversation.tmpl +++ b/templates/repo/issue/view_content/conversation.tmpl @@ -58,7 +58,7 @@
-
+ -
+
{{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}} {{if not $.Repository.IsArchived}} {{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}} diff --git a/web_src/css/base.css b/web_src/css/base.css index 2b7a47edf1..b415a70cb8 100644 --- a/web_src/css/base.css +++ b/web_src/css/base.css @@ -185,10 +185,6 @@ details summary { cursor: pointer; } -details summary > * { - display: inline; -} - progress { background: var(--color-secondary-dark-1); border-radius: var(--border-radius); @@ -474,15 +470,6 @@ a.label, color: var(--color-text-light-2); } -.ui.comments .comment .actions a { - color: var(--color-text-light); -} - -.ui.comments .comment .actions a.active, -.ui.comments .comment .actions a:hover { - color: var(--color-primary); -} - img.ui.avatar, .ui.avatar img, .ui.avatar svg { diff --git a/web_src/css/modules/label.css b/web_src/css/modules/label.css index f5d0decdf6..cf850e4c5a 100644 --- a/web_src/css/modules/label.css +++ b/web_src/css/modules/label.css @@ -93,7 +93,6 @@ a.ui.label:hover { background: var(--color-button); border: 1px solid var(--color-light-border); color: var(--color-text-light); - padding: calc(0.5833em - 1px) calc(0.833em - 1px); } a.ui.basic.label:hover { text-decoration: none; @@ -254,6 +253,7 @@ a.ui.ui.ui.basic.grey.label:hover { color: var(--color-label-hover-bg); } +/* "horizontal label" is actually "fat label" which has enough padding spaces to be used standalone in headers */ .ui.horizontal.label { margin: 0 0.5em 0 0; padding: 0.4em 0.833em; diff --git a/web_src/css/repo.css b/web_src/css/repo.css index a72709c382..8729212f10 100644 --- a/web_src/css/repo.css +++ b/web_src/css/repo.css @@ -1420,13 +1420,15 @@ td .commit-summary { .comment-header { background: var(--color-box-header); border-bottom: 1px solid var(--color-secondary); - padding: 0 1rem; + padding: 0.5em 1rem; position: relative; color: var(--color-text); min-height: 41px; display: flex; justify-content: space-between; align-items: center; + flex-wrap: wrap; + gap: 0.25em; } .comment-header::before, @@ -1468,17 +1470,16 @@ td .commit-summary { left: 7px; } -.comment-header .actions a:not(.label) { - padding: 0.5rem !important; -} - -.comment-header .actions .label { - margin: 0 !important; -} - .comment-header-left, .comment-header-right { - gap: 4px; + display: flex; + align-items: center; + gap: 0.5em; +} + +.comment-header-right { + flex: 1; + justify-content: end; } .comment-body { @@ -2014,15 +2015,6 @@ tbody.commit-list { .commit-table th.sha { display: none !important; } - .comment-header { - flex-wrap: wrap; - } - .comment-header .comment-header-left { - flex-wrap: wrap; - } - .comment-header .comment-header-right { - margin-left: auto; - } } .commit-status-header { diff --git a/web_src/js/features/file-view.ts b/web_src/js/features/file-view.ts index d803f53c0d..67f4381468 100644 --- a/web_src/js/features/file-view.ts +++ b/web_src/js/features/file-view.ts @@ -2,7 +2,7 @@ import type {FileRenderPlugin} from '../render/plugin.ts'; import {newRenderPlugin3DViewer} from '../render/plugins/3d-viewer.ts'; import {newRenderPluginPdfViewer} from '../render/plugins/pdf-viewer.ts'; import {registerGlobalInitFunc} from '../modules/observer.ts'; -import {createElementFromHTML, showElem, toggleClass} from '../utils/dom.ts'; +import {createElementFromHTML, showElem, toggleElemClass} from '../utils/dom.ts'; import {html} from '../utils/html.ts'; import {basename} from '../utils.ts'; @@ -21,8 +21,8 @@ function showRenderRawFileButton(elFileView: HTMLElement, renderContainer: HTMLE const toggleButtons = elFileView.querySelector('.file-view-toggle-buttons'); showElem(toggleButtons); const displayingRendered = Boolean(renderContainer); - toggleClass(toggleButtons.querySelectorAll('.file-view-toggle-source'), 'active', !displayingRendered); // it may not exist - toggleClass(toggleButtons.querySelector('.file-view-toggle-rendered'), 'active', displayingRendered); + toggleElemClass(toggleButtons.querySelectorAll('.file-view-toggle-source'), 'active', !displayingRendered); // it may not exist + toggleElemClass(toggleButtons.querySelector('.file-view-toggle-rendered'), 'active', displayingRendered); // TODO: if there is only one button, hide it? } diff --git a/web_src/js/features/repo-graph.ts b/web_src/js/features/repo-graph.ts index 036a55f715..ebca6e212a 100644 --- a/web_src/js/features/repo-graph.ts +++ b/web_src/js/features/repo-graph.ts @@ -1,4 +1,4 @@ -import {toggleClass} from '../utils/dom.ts'; +import {toggleElemClass} from '../utils/dom.ts'; import {GET} from '../modules/fetch.ts'; import {fomanticQuery} from '../modules/fomantic/base.ts'; @@ -9,11 +9,11 @@ export function initRepoGraphGit() { const elColorMonochrome = document.querySelector('#flow-color-monochrome'); const elColorColored = document.querySelector('#flow-color-colored'); const toggleColorMode = (mode: 'monochrome' | 'colored') => { - toggleClass(graphContainer, 'monochrome', mode === 'monochrome'); - toggleClass(graphContainer, 'colored', mode === 'colored'); + toggleElemClass(graphContainer, 'monochrome', mode === 'monochrome'); + toggleElemClass(graphContainer, 'colored', mode === 'colored'); - toggleClass(elColorMonochrome, 'active', mode === 'monochrome'); - toggleClass(elColorColored, 'active', mode === 'colored'); + toggleElemClass(elColorMonochrome, 'active', mode === 'monochrome'); + toggleElemClass(elColorColored, 'active', mode === 'colored'); const params = new URLSearchParams(window.location.search); params.set('mode', mode); diff --git a/web_src/js/features/repo-settings.ts b/web_src/js/features/repo-settings.ts index be1821664f..5c81cf5ecd 100644 --- a/web_src/js/features/repo-settings.ts +++ b/web_src/js/features/repo-settings.ts @@ -1,6 +1,6 @@ import {minimatch} from 'minimatch'; import {createMonaco} from './codeeditor.ts'; -import {onInputDebounce, queryElems, toggleClass, toggleElem} from '../utils/dom.ts'; +import {onInputDebounce, queryElems, toggleElem} from '../utils/dom.ts'; import {POST} from '../modules/fetch.ts'; import {initRepoSettingsBranchesDrag} from './repo-settings-branches.ts'; import {fomanticQuery} from '../modules/fomantic/base.ts'; @@ -124,14 +124,18 @@ function initRepoSettingsOptions() { const pageContent = document.querySelector('.page-content.repository.settings.options'); if (!pageContent) return; - // Enable or select internal/external wiki system and issue tracker. + // toggle related panels for the checkbox/radio inputs, the "selector" may not exist + const toggleTargetContextPanel = (selector: string, enabled: boolean) => { + if (!selector) return; + queryElems(document, selector, (el) => el.classList.toggle('disabled', !enabled)); + }; queryElems(pageContent, '.enable-system', (el) => el.addEventListener('change', () => { - toggleClass(el.getAttribute('data-target'), 'disabled', !el.checked); - toggleClass(el.getAttribute('data-context'), 'disabled', el.checked); + toggleTargetContextPanel(el.getAttribute('data-target'), el.checked); + toggleTargetContextPanel(el.getAttribute('data-context'), !el.checked); })); queryElems(pageContent, '.enable-system-radio', (el) => el.addEventListener('change', () => { - toggleClass(el.getAttribute('data-target'), 'disabled', el.value === 'false'); - toggleClass(el.getAttribute('data-context'), 'disabled', el.value === 'true'); + toggleTargetContextPanel(el.getAttribute('data-target'), el.value === 'true'); + toggleTargetContextPanel(el.getAttribute('data-context'), el.value === 'false'); })); queryElems(pageContent, '.js-tracker-issue-style', (el) => el.addEventListener('change', () => { diff --git a/web_src/js/index.ts b/web_src/js/index.ts index e78b3cb64f..af53cc488c 100644 --- a/web_src/js/index.ts +++ b/web_src/js/index.ts @@ -9,5 +9,15 @@ import {onDomReady} from './utils/dom.ts'; import 'htmx.org'; onDomReady(async () => { - await import(/* webpackChunkName: "index-domready" */'./index-domready.ts'); + // when navigate before the import complete, there will be an error from webpack chunk loader: + // JavaScript promise rejection: Loading chunk index-domready failed. + try { + await import(/* webpackChunkName: "index-domready" */'./index-domready.ts'); + } catch (e) { + if (e.name === 'ChunkLoadError') { + console.error('Error loading index-domready:', e); + } else { + throw e; + } + } }); diff --git a/web_src/js/utils.ts b/web_src/js/utils.ts index e33b1413e8..f396a8e4f6 100644 --- a/web_src/js/utils.ts +++ b/web_src/js/utils.ts @@ -1,6 +1,6 @@ import {decode, encode} from 'uint8-to-base64'; import type {IssuePageInfo, IssuePathInfo, RepoOwnerPathInfo} from './types.ts'; -import {toggleClass, toggleElem} from './utils/dom.ts'; +import {toggleElemClass, toggleElem} from './utils/dom.ts'; // transform /path/to/file.ext to /path/to export function dirname(path: string): string { @@ -194,7 +194,7 @@ export function toggleFullScreen(fullscreenElementsSelector: string, isFullScree const fullScreenEl = document.querySelector(fullscreenElementsSelector); const outerEl = document.querySelector('.full.height'); - toggleClass(fullscreenElementsSelector, 'fullscreen', isFullScreen); + toggleElemClass(fullscreenElementsSelector, 'fullscreen', isFullScreen); if (isFullScreen) { outerEl.append(fullScreenEl); } else { diff --git a/web_src/js/utils/dom.ts b/web_src/js/utils/dom.ts index 3b14b9bcea..9cdf6f5005 100644 --- a/web_src/js/utils/dom.ts +++ b/web_src/js/utils/dom.ts @@ -25,7 +25,7 @@ function elementsCall(el: ElementArg, func: ElementsCallbackWithArgs, ...args: a throw new Error('invalid argument to be shown/hidden'); } -export function toggleClass(el: ElementArg, className: string, force?: boolean): ArrayLikeIterable { +export function toggleElemClass(el: ElementArg, className: string, force?: boolean): ArrayLikeIterable { return elementsCall(el, (e: Element) => { if (force === true) { e.classList.add(className); @@ -44,7 +44,7 @@ export function toggleClass(el: ElementArg, className: string, force?: boolean): * @param force force=true to show or force=false to hide, undefined to toggle */ export function toggleElem(el: ElementArg, force?: boolean): ArrayLikeIterable { - return toggleClass(el, 'tw-hidden', force === undefined ? force : !force); + return toggleElemClass(el, 'tw-hidden', force === undefined ? force : !force); } export function showElem(el: ElementArg): ArrayLikeIterable {