From ddf96f68cc99ad8002a92660372f38b654eb6221 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Tue, 27 Jun 2023 03:36:10 +0800 Subject: [PATCH 01/31] Use JSON response for "user/logout" (#25522) The request sent to "user/logout" is from "link-action", it expects to get JSON response. --- routers/web/auth/auth.go | 2 +- templates/base/head_navbar.tmpl | 4 ++-- tests/integration/signout_test.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/routers/web/auth/auth.go b/routers/web/auth/auth.go index e0883a2696..bc8f6d58c9 100644 --- a/routers/web/auth/auth.go +++ b/routers/web/auth/auth.go @@ -383,7 +383,7 @@ func SignOut(ctx *context.Context) { }) } HandleSignOut(ctx) - ctx.Redirect(setting.AppSubURL + "/") + ctx.JSONRedirect(setting.AppSubURL + "/") } // SignUp render the register page diff --git a/templates/base/head_navbar.tmpl b/templates/base/head_navbar.tmpl index a2be0187d9..3898c98ac9 100644 --- a/templates/base/head_navbar.tmpl +++ b/templates/base/head_navbar.tmpl @@ -68,7 +68,7 @@
- + {{svg "octicon-sign-out"}} {{.locale.Tr "sign_out"}} @@ -186,7 +186,7 @@ {{end}}
- + {{svg "octicon-sign-out"}} {{.locale.Tr "sign_out"}} diff --git a/tests/integration/signout_test.go b/tests/integration/signout_test.go index 0e822ac04e..7fd0b5c64a 100644 --- a/tests/integration/signout_test.go +++ b/tests/integration/signout_test.go @@ -16,7 +16,7 @@ func TestSignOut(t *testing.T) { session := loginUser(t, "user2") req := NewRequest(t, "POST", "/user/logout") - session.MakeRequest(t, req, http.StatusSeeOther) + session.MakeRequest(t, req, http.StatusOK) // try to view a private repo, should fail req = NewRequest(t, "GET", "/user2/repo2") From 02ef14bea23bf72b4c3989280bcbe63ff8397c99 Mon Sep 17 00:00:00 2001 From: silverwind Date: Mon, 26 Jun 2023 23:14:00 +0200 Subject: [PATCH 02/31] Add `make poetry-update`, upgrade `djlint` (#25399) [updates](https://github.com/silverwind/updates) now supports poetry as well so we can use it for a new `make poetry-update` to update all poetry dependencies. --- Makefile | 9 ++++++++- package-lock.json | 8 ++++---- package.json | 2 +- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index e9c908de4a..e2b7013d2f 100644 --- a/Makefile +++ b/Makefile @@ -926,11 +926,18 @@ node_modules: package-lock.json .PHONY: npm-update npm-update: node-check | node_modules - npx updates -cu + npx updates -u -f package.json rm -rf node_modules package-lock.json npm install --package-lock @touch node_modules +.PHONY: poetry-update +poetry-update: node-check | node_modules + npx updates -u -f pyproject.toml + rm -rf .venv poetry.lock + poetry install + @touch .venv + .PHONY: fomantic fomantic: rm -rf $(FOMANTIC_WORK_DIR)/build diff --git a/package-lock.json b/package-lock.json index 11638d4d7f..001fedb6cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -77,7 +77,7 @@ "stylelint-declaration-strict-value": "1.9.2", "stylelint-stylistic": "0.4.2", "svgo": "3.0.2", - "updates": "14.2.4", + "updates": "14.2.8", "vitest": "0.32.2" }, "engines": { @@ -10363,9 +10363,9 @@ } }, "node_modules/updates": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/updates/-/updates-14.2.4.tgz", - "integrity": "sha512-r54h4Q12lUAmQ9dENy7BnY22AnTfW4YGEZw73gv6RvNEWgcZ3qS88jPLc1ckPAzt/8TPKWwLkSVpbEpgGwglJw==", + "version": "14.2.8", + "resolved": "https://registry.npmjs.org/updates/-/updates-14.2.8.tgz", + "integrity": "sha512-Ca+M1vKKBBRiQSi3yrN8OdncmP9osIf1oJM/HpEIHeDvyGLs/noTi9X2LS4zl50VXRTSCqssF5CZN0XWzSPigg==", "dev": true, "bin": { "updates": "bin/updates.js" diff --git a/package.json b/package.json index fd68c1d341..9219dbbe1d 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "stylelint-declaration-strict-value": "1.9.2", "stylelint-stylistic": "0.4.2", "svgo": "3.0.2", - "updates": "14.2.4", + "updates": "14.2.8", "vitest": "0.32.2" }, "browserslist": [ diff --git a/poetry.lock b/poetry.lock index 69258f749c..7d106e1551 100644 --- a/poetry.lock +++ b/poetry.lock @@ -42,13 +42,13 @@ six = ">=1.13.0" [[package]] name = "djlint" -version = "1.31.0" +version = "1.31.1" description = "HTML Template Linter and Formatter" optional = false python-versions = ">=3.8.0,<4.0.0" files = [ - {file = "djlint-1.31.0-py3-none-any.whl", hash = "sha256:2b9200c67103b79835b7547ff732e910888d1f0ef684f5b329eb64b14d09c046"}, - {file = "djlint-1.31.0.tar.gz", hash = "sha256:8acb4b751b429c5aabb1aef5b6007bdf53224eceda25c5fbe04c42cc57c0a7ba"}, + {file = "djlint-1.31.1-py3-none-any.whl", hash = "sha256:9b2e2fc3a059a8e5a62f309edea15c1aeee331a279ab2699b9fb51a31d8c0934"}, + {file = "djlint-1.31.1.tar.gz", hash = "sha256:a11739e2f919f760b3986eb13d06e00171f3bd342b8d88e9bd914a4260eaa8ce"}, ] [package.dependencies] @@ -328,4 +328,4 @@ telegram = ["requests"] [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "22c4af11eadd8784b613951d6160d67be0f33500238a450741c3d75beb218dad" +content-hash = "f03ad8e7c4f6e797ac3c04630db8cc16438cd59642653c26fd401633cd62d696" diff --git a/pyproject.toml b/pyproject.toml index ce5f475b27..7a30f59140 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ authors = [] python = "^3.8" [tool.poetry.group.dev.dependencies] -djlint = "1.31.0" +djlint = "1.31.1" [tool.djlint] profile="golang" From 72c60f94c1a54707ebad2af0f587c08d2e8f992c Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Tue, 27 Jun 2023 00:29:26 +0000 Subject: [PATCH 03/31] [skip ci] Updated translations via Crowdin --- options/locale/locale_ja-JP.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options/locale/locale_ja-JP.ini b/options/locale/locale_ja-JP.ini index 1818343f92..75971caa90 100644 --- a/options/locale/locale_ja-JP.ini +++ b/options/locale/locale_ja-JP.ini @@ -3122,7 +3122,7 @@ notices.delete_success=システム通知を削除しました。 [action] create_repo=がリポジトリ %s を作成しました -rename_repo=がリポジトリ名を %[1]s から [3]s へ変更しました +rename_repo=がリポジトリ名を %[1]s から %[3]s へ変更しました commit_repo=が %[4]s%[3]s にプッシュしました create_issue=`がイシュー %[3]s#%[2]s をオープンしました` close_issue=`がイシュー %[3]s#%[2]s をクローズしました` From c71e8abbc331e2a68186aa11a4797ecd24ff6d27 Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 27 Jun 2023 04:45:24 +0200 Subject: [PATCH 04/31] Add toasts to UI (#25449) Fixes https://github.com/go-gitea/gitea/issues/24353 In some case like async success/error, it is useful to show toasts in UI. --- .eslintrc.yaml | 7 +- package-lock.json | 6 ++ package.json | 1 + templates/devtest/gitea-ui.tmpl | 23 +++--- web_src/css/index.css | 1 + web_src/css/modules/toast.css | 78 +++++++++++++++++++ web_src/css/standalone/devtest.css | 16 ++++ web_src/js/features/common-global.js | 3 +- .../js/features/comp/ComboMarkdownEditor.js | 3 +- web_src/js/features/repo-issue-content.js | 5 +- web_src/js/features/repo-issue-list.js | 3 +- web_src/js/modules/toast.js | 60 ++++++++++++++ web_src/js/modules/toast.test.js | 17 ++++ web_src/js/standalone/devtest.js | 11 +++ webpack.config.js | 6 ++ 15 files changed, 220 insertions(+), 20 deletions(-) create mode 100644 web_src/css/modules/toast.css create mode 100644 web_src/css/standalone/devtest.css create mode 100644 web_src/js/modules/toast.js create mode 100644 web_src/js/modules/toast.test.js create mode 100644 web_src/js/standalone/devtest.js diff --git a/.eslintrc.yaml b/.eslintrc.yaml index ea85ab1298..71d8dc3814 100644 --- a/.eslintrc.yaml +++ b/.eslintrc.yaml @@ -25,10 +25,11 @@ env: es2022: true node: true -globals: - __webpack_public_path__: true - overrides: + - files: ["web_src/**/*"] + globals: + __webpack_public_path__: true + process: false # https://github.com/webpack/webpack/issues/15833 - files: ["web_src/**/*", "docs/**/*"] env: browser: true diff --git a/package-lock.json b/package-lock.json index 001fedb6cf..dcda7d2fed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,6 +41,7 @@ "swagger-ui-dist": "5.0.0", "throttle-debounce": "5.0.0", "tippy.js": "6.3.7", + "toastify-js": "1.12.0", "tributejs": "5.1.3", "uint8-to-base64": "0.2.0", "vue": "3.3.4", @@ -10122,6 +10123,11 @@ "node": ">=8.0" } }, + "node_modules/toastify-js": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz", + "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==" + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", diff --git a/package.json b/package.json index 9219dbbe1d..9659771212 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "swagger-ui-dist": "5.0.0", "throttle-debounce": "5.0.0", "tippy.js": "6.3.7", + "toastify-js": "1.12.0", "tributejs": "5.1.3", "uint8-to-base64": "0.2.0", "vue": "3.3.4", diff --git a/templates/devtest/gitea-ui.tmpl b/templates/devtest/gitea-ui.tmpl index 2c5a54c1c2..8b31957f2e 100644 --- a/templates/devtest/gitea-ui.tmpl +++ b/templates/devtest/gitea-ui.tmpl @@ -1,4 +1,5 @@ {{template "base/head" .}} +

Button

@@ -14,11 +15,6 @@
-
  • General purpose:

    @@ -242,17 +238,20 @@
+
+

Toast

+
+ + + +
+
+

ComboMarkdownEditor

ps: no JS code attached, so just a layout
{{template "shared/combomarkdowneditor" .}}
- - + {{template "base/footer" .}} diff --git a/web_src/css/index.css b/web_src/css/index.css index 66a1a9ffd3..d7ac9f453d 100644 --- a/web_src/css/index.css +++ b/web_src/css/index.css @@ -8,6 +8,7 @@ @import "./modules/card.css"; @import "./modules/comment.css"; @import "./modules/navbar.css"; +@import "./modules/toast.css"; @import "./shared/issuelist.css"; @import "./shared/milestone.css"; diff --git a/web_src/css/modules/toast.css b/web_src/css/modules/toast.css new file mode 100644 index 0000000000..c96521f273 --- /dev/null +++ b/web_src/css/modules/toast.css @@ -0,0 +1,78 @@ +.toastify { + color: var(--color-white); + position: fixed; + opacity: 0; + transition: all .2s ease; + z-index: 500; + border-radius: 4px; + box-shadow: 0 8px 24px var(--color-shadow); + display: flex; + max-width: 50vw; + min-width: 300px; + padding: 4px; +} + +.toastify.on { + opacity: 1; +} + +.toast-body { + flex: 1; + padding: 5px 0; + overflow-wrap: anywhere; +} + +.toast-close, +.toast-icon { + color: currentcolor; + border-radius: 3px; + background: transparent; + border: none; + display: inline-block; + display: flex; + width: 30px; + height: 30px; + justify-content: center; + align-items: center; +} + +.toast-close:hover { + background: var(--color-hover); +} + +.toast-close:active { + background: var(--color-active); +} + +.toastify-right { + right: 15px; +} + +.toastify-left { + left: 15px; +} + +.toastify-top { + top: -150px; +} + +.toastify-bottom { + bottom: -150px; +} + +.toastify-center { + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; +} + +@media (max-width: 360px) { + .toastify-right, .toastify-left { + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + max-width: fit-content; + } +} diff --git a/web_src/css/standalone/devtest.css b/web_src/css/standalone/devtest.css new file mode 100644 index 0000000000..a7b00e1e56 --- /dev/null +++ b/web_src/css/standalone/devtest.css @@ -0,0 +1,16 @@ +.button-sample-groups { + margin: 0; padding: 0; +} + +.button-sample-groups .sample-group { + list-style: none; margin: 0; padding: 0; +} + +.button-sample-groups .sample-group .ui.button { + margin-bottom: 5px; +} + +h1, h2 { + margin: 0; + padding: 10px 0; +} diff --git a/web_src/js/features/common-global.js b/web_src/js/features/common-global.js index e5fd7c29fc..a99b29141d 100644 --- a/web_src/js/features/common-global.js +++ b/web_src/js/features/common-global.js @@ -9,6 +9,7 @@ import {hideElem, showElem, toggleElem} from '../utils/dom.js'; import {htmlEscape} from 'escape-goat'; import {createTippy} from '../modules/tippy.js'; import {confirmModal} from './comp/ConfirmModal.js'; +import {showErrorToast} from '../modules/toast.js'; const {appUrl, appSubUrl, csrfToken, i18n} = window.config; @@ -439,7 +440,7 @@ export function initGlobalButtons() { return; } // should never happen, otherwise there is a bug in code - alert('Nothing to hide'); + showErrorToast('Nothing to hide'); }); initGlobalShowModal(); diff --git a/web_src/js/features/comp/ComboMarkdownEditor.js b/web_src/js/features/comp/ComboMarkdownEditor.js index 103e71daae..3d696be75b 100644 --- a/web_src/js/features/comp/ComboMarkdownEditor.js +++ b/web_src/js/features/comp/ComboMarkdownEditor.js @@ -8,6 +8,7 @@ import {handleGlobalEnterQuickSubmit} from './QuickSubmit.js'; import {renderPreviewPanelContent} from '../repo-editor.js'; import {easyMDEToolbarActions} from './EasyMDEToolbarActions.js'; import {initTextExpander} from './TextExpander.js'; +import {showErrorToast} from '../../modules/toast.js'; let elementIdCounter = 0; @@ -26,7 +27,7 @@ export function validateTextareaNonEmpty($textarea) { $form[0]?.reportValidity(); } else { // The alert won't hurt users too much, because we are dropping the EasyMDE and the check only occurs in a few places. - alert('Require non-empty content'); + showErrorToast('Require non-empty content'); } return false; } diff --git a/web_src/js/features/repo-issue-content.js b/web_src/js/features/repo-issue-content.js index d66f6ad4a4..fc916aea19 100644 --- a/web_src/js/features/repo-issue-content.js +++ b/web_src/js/features/repo-issue-content.js @@ -1,5 +1,6 @@ import $ from 'jquery'; import {svg} from '../svg.js'; +import {showErrorToast} from '../modules/toast.js'; const {appSubUrl, csrfToken} = window.config; let i18nTextEdited; @@ -39,12 +40,12 @@ function showContentHistoryDetail(issueBaseUrl, commentId, historyId, itemTitleH if (resp.ok) { $dialog.modal('hide'); } else { - alert(resp.message); + showErrorToast(resp.message); } }); } } else { // required by eslint - window.alert(`unknown option item: ${optionItem}`); + showErrorToast(`unknown option item: ${optionItem}`); } }, onHide() { diff --git a/web_src/js/features/repo-issue-list.js b/web_src/js/features/repo-issue-list.js index 4d61de0ce5..5402f958f2 100644 --- a/web_src/js/features/repo-issue-list.js +++ b/web_src/js/features/repo-issue-list.js @@ -4,6 +4,7 @@ import {toggleElem} from '../utils/dom.js'; import {htmlEscape} from 'escape-goat'; import {Sortable} from 'sortablejs'; import {confirmModal} from './comp/ConfirmModal.js'; +import {showErrorToast} from '../modules/toast.js'; function initRepoIssueListCheckboxes() { const $issueSelectAll = $('.issue-checkbox-all'); @@ -75,7 +76,7 @@ function initRepoIssueListCheckboxes() { ).then(() => { window.location.reload(); }).catch((reason) => { - window.alert(reason.responseJSON.error); + showErrorToast(reason.responseJSON.error); }); }); } diff --git a/web_src/js/modules/toast.js b/web_src/js/modules/toast.js new file mode 100644 index 0000000000..b0d02dc644 --- /dev/null +++ b/web_src/js/modules/toast.js @@ -0,0 +1,60 @@ +import {htmlEscape} from 'escape-goat'; +import {svg} from '../svg.js'; + +const levels = { + info: { + icon: 'octicon-check', + background: 'var(--color-green)', + duration: 2500, + }, + warning: { + icon: 'gitea-exclamation', + background: 'var(--color-orange)', + duration: -1, // requires dismissal to hide + }, + error: { + icon: 'gitea-exclamation', + background: 'var(--color-red)', + duration: -1, // requires dismissal to hide + }, +}; + +// See https://github.com/apvarun/toastify-js#api for options +async function showToast(message, level, {gravity, position, duration, ...other} = {}) { + if (!message) return; + + const {default: Toastify} = await import(/* webpackChunkName: 'toastify' */'toastify-js'); + const {icon, background, duration: levelDuration} = levels[level ?? 'info']; + + const toast = Toastify({ + text: ` +
${svg(icon)}
+
${htmlEscape(message)}
+ + `, + escapeMarkup: false, + gravity: gravity ?? 'top', + position: position ?? 'center', + duration: duration ?? levelDuration, + style: {background}, + ...other, + }); + + toast.showToast(); + + toast.toastElement.querySelector('.toast-close').addEventListener('click', () => { + toast.removeElement(toast.toastElement); + }); +} + +export async function showInfoToast(message, opts) { + return await showToast(message, 'info', opts); +} + +export async function showWarningToast(message, opts) { + return await showToast(message, 'warning', opts); +} + +export async function showErrorToast(message, opts) { + return await showToast(message, 'error', opts); +} diff --git a/web_src/js/modules/toast.test.js b/web_src/js/modules/toast.test.js new file mode 100644 index 0000000000..b691aaebb6 --- /dev/null +++ b/web_src/js/modules/toast.test.js @@ -0,0 +1,17 @@ +import {test, expect} from 'vitest'; +import {showInfoToast, showErrorToast, showWarningToast} from './toast.js'; + +test('showInfoToast', async () => { + await showInfoToast('success 😀', {duration: -1}); + expect(document.querySelector('.toastify')).toBeTruthy(); +}); + +test('showWarningToast', async () => { + await showWarningToast('warning 😐', {duration: -1}); + expect(document.querySelector('.toastify')).toBeTruthy(); +}); + +test('showErrorToast', async () => { + await showErrorToast('error 🙁', {duration: -1}); + expect(document.querySelector('.toastify')).toBeTruthy(); +}); diff --git a/web_src/js/standalone/devtest.js b/web_src/js/standalone/devtest.js new file mode 100644 index 0000000000..d0ca511c0f --- /dev/null +++ b/web_src/js/standalone/devtest.js @@ -0,0 +1,11 @@ +import {showInfoToast, showWarningToast, showErrorToast} from '../modules/toast.js'; + +document.getElementById('info-toast').addEventListener('click', () => { + showInfoToast('success 😀'); +}); +document.getElementById('warning-toast').addEventListener('click', () => { + showWarningToast('warning 😐'); +}); +document.getElementById('error-toast').addEventListener('click', () => { + showErrorToast('error 🙁'); +}); diff --git a/webpack.config.js b/webpack.config.js index fb442521e9..6070dae247 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -73,6 +73,12 @@ export default { 'eventsource.sharedworker': [ fileURLToPath(new URL('web_src/js/features/eventsource.sharedworker.js', import.meta.url)), ], + ...(!isProduction && { + devtest: [ + fileURLToPath(new URL('web_src/js/standalone/devtest.js', import.meta.url)), + fileURLToPath(new URL('web_src/css/standalone/devtest.css', import.meta.url)), + ], + }), ...themes, }, devtool: false, From 1069472c0cd6bd0b6c3b0b1c6c8b9b149aff9ead Mon Sep 17 00:00:00 2001 From: hiifong Date: Tue, 27 Jun 2023 16:45:43 +0800 Subject: [PATCH 05/31] Fix input `line-height` cutting off `g` (#25334) Fix the incomplete display of input text Before: ![image](https://github.com/go-gitea/gitea/assets/89133723/6bd8ca29-a096-46a8-bd23-fb833f45186f) ![image](https://github.com/go-gitea/gitea/assets/89133723/27e51e62-7150-45cd-8606-09317d462d70) After: ![image](https://github.com/go-gitea/gitea/assets/89133723/8d0db5d3-d768-42b4-9a75-0b8816f0a299) ![image](https://github.com/go-gitea/gitea/assets/89133723/4193adc9-b635-4ed6-8e11-715ec5150563) --------- Co-authored-by: silverwind Co-authored-by: Giteabot --- web_src/css/base.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/web_src/css/base.css b/web_src/css/base.css index 2d649cb511..4e2cd373d7 100644 --- a/web_src/css/base.css +++ b/web_src/css/base.css @@ -471,6 +471,11 @@ a.label, padding-top: 15px !important; } +/* fix Fomantic's line-height cutting off "g" on Windows Chrome with Segoe UI */ +.ui.input > input { + line-height: 1.3; +} + .ui.input.focus > input, .ui.input > input:focus { border-color: var(--color-primary); From 6dbcf6fbc5c3c9b7f0ee396b489f0e804d39972c Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Tue, 27 Jun 2023 17:14:45 +0800 Subject: [PATCH 06/31] Fix admin-dl-horizontal (#25512) ![image](https://github.com/go-gitea/gitea/assets/2114189/fb731e07-da30-4470-8200-73b5ca8b78f1) ![image](https://github.com/go-gitea/gitea/assets/2114189/85930b6f-5df7-437f-863f-423f3b81dd26) --------- Co-authored-by: HesterG Co-authored-by: silverwind --- templates/admin/config.tmpl | 24 +++++++++++------------ templates/admin/dashboard.tmpl | 2 +- web_src/css/admin.css | 35 +++++++++++++++------------------- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/templates/admin/config.tmpl b/templates/admin/config.tmpl index 2ddc0c1ac6..17fb2444d3 100644 --- a/templates/admin/config.tmpl +++ b/templates/admin/config.tmpl @@ -4,7 +4,7 @@ {{.locale.Tr "admin.config.server_config"}}
-
+
{{.locale.Tr "admin.config.app_name"}}
{{AppName}}
{{.locale.Tr "admin.config.app_ver"}}
@@ -53,7 +53,7 @@ {{.locale.Tr "admin.config.ssh_config"}}
-
+
{{.locale.Tr "admin.config.ssh_enabled"}}
{{if not .SSH.Disabled}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
{{if not .SSH.Disabled}} @@ -88,7 +88,7 @@ {{.locale.Tr "admin.config.lfs_config"}}
-
+
{{.locale.Tr "admin.config.lfs_enabled"}}
{{if .LFS.StartServer}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
{{if .LFS.StartServer}} @@ -104,7 +104,7 @@ {{.locale.Tr "admin.config.db_config"}}
-
+
{{.locale.Tr "admin.config.db_type"}}
{{.DbCfg.Type}}
{{if not (eq .DbCfg.Type "sqlite3")}} @@ -132,7 +132,7 @@ {{.locale.Tr "admin.config.service_config"}}
-
+
{{.locale.Tr "admin.config.register_email_confirm"}}
{{if .Service.RegisterEmailConfirm}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
{{.locale.Tr "admin.config.disable_register"}}
@@ -186,7 +186,7 @@ {{.locale.Tr "admin.config.webhook_config"}}
-
+
{{.locale.Tr "admin.config.queue_length"}}
{{.Webhook.QueueLength}}
{{.locale.Tr "admin.config.deliver_timeout"}}
@@ -200,7 +200,7 @@ {{.locale.Tr "admin.config.mailer_config"}}
-
+
{{.locale.Tr "admin.config.mailer_enabled"}}
{{if .MailerEnabled}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
{{if .MailerEnabled}} @@ -249,7 +249,7 @@ {{.locale.Tr "admin.config.cache_config"}}
-
+
{{.locale.Tr "admin.config.cache_adapter"}}
{{.CacheAdapter}}
{{if eq .CacheAdapter "memory"}} @@ -269,7 +269,7 @@ {{.locale.Tr "admin.config.session_config"}}
-
+
{{.locale.Tr "admin.config.session_provider"}}
{{.SessionConfig.Provider}}
{{.locale.Tr "admin.config.provider_config"}}
@@ -289,7 +289,7 @@ {{.locale.Tr "admin.config.picture_config"}}
-
+
{{.locale.Tr "admin.config.disable_gravatar"}}
@@ -310,7 +310,7 @@ {{.locale.Tr "admin.config.git_config"}}
-
+
{{.locale.Tr "admin.config.git_disable_diff_highlight"}}
{{if .Git.DisableDiffHighlight}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
{{.locale.Tr "admin.config.git_max_diff_lines"}}
@@ -341,7 +341,7 @@ {{.locale.Tr "admin.config.log_config"}}
-
+
{{if .Loggers.xorm.IsEnabled}}
{{$.locale.Tr "admin.config.xorm_log_sql"}}
{{if $.LogSQL}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
diff --git a/templates/admin/dashboard.tmpl b/templates/admin/dashboard.tmpl index 20cf3ba7f4..9d503a19b0 100644 --- a/templates/admin/dashboard.tmpl +++ b/templates/admin/dashboard.tmpl @@ -70,7 +70,7 @@ {{.locale.Tr "admin.dashboard.system_status"}}
-
+
{{.locale.Tr "admin.dashboard.server_uptime"}}
{{.SysStatus.StartTime}}
{{.locale.Tr "admin.dashboard.current_goroutine"}}
diff --git a/web_src/css/admin.css b/web_src/css/admin.css index 0a2a88f143..58e0527350 100644 --- a/web_src/css/admin.css +++ b/web_src/css/admin.css @@ -15,32 +15,27 @@ flex-wrap: wrap; } -.admin dl.admin-dl-horizontal dd { - margin-left: auto; - width: calc(100% - 245px); -} - -@media (max-width: 767.98px) { - .admin dl.admin-dl-horizontal dd { - width: calc(100% - 185px); - } -} - -/* divider needs explicit width to become visible here */ +/* divider needs explicit width because the parent container is "display: flex" */ .admin dl.admin-dl-horizontal .ui.divider { width: 100%; } -.admin dl.admin-dl-horizontal dt { - font-weight: var(--font-weight-semibold); - width: 220px; - margin-right: 5px; +.admin dl.admin-dl-horizontal dt, +.admin dl.admin-dl-horizontal dd { + line-height: 1; + padding: 5px 0; } -@media (max-width: 767.98px) { - .admin dl.admin-dl-horizontal dt { - width: 160px; - } +.admin dl.admin-dl-horizontal dt { + width: 300px; + max-width: calc(100% - 100px - 1em); + font-weight: var(--font-weight-semibold); +} + +.admin dl.admin-dl-horizontal dd { + margin-left: auto; + width: calc(100% - 300px - 1em); + min-width: 100px; } .admin code, From 00b98bc8e0abd6aa4e581550b6ae0b6d4a9ee144 Mon Sep 17 00:00:00 2001 From: HesterG Date: Tue, 27 Jun 2023 22:34:33 +0800 Subject: [PATCH 07/31] Fix rerun icon on action view component (#25531) Right now rerun icon on action view component will not be seen when duration text length is long, because the wrapper `job-brief-info` has a fixed width, and the svg is squeezed. The way to fix this in this PR is to change width to `fit-content` and exchange position of duration text and rerun svg. Before (rerun svg not shown on hover): Screen Shot 2023-06-27 at 12 53 41 After: Screen Shot 2023-06-27 at 12 50 59 --- web_src/js/components/RepoActionView.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web_src/js/components/RepoActionView.vue b/web_src/js/components/RepoActionView.vue index fd40bd7ee5..dcbb598052 100644 --- a/web_src/js/components/RepoActionView.vue +++ b/web_src/js/components/RepoActionView.vue @@ -38,8 +38,8 @@ {{ job.name }} - {{ job.duration }} + {{ job.duration }}
@@ -590,6 +590,7 @@ export function initRepositoryActionView() { .job-brief-item .job-brief-link { display: flex; width: 100%; + min-width: 0; } .job-brief-item .job-brief-link span { @@ -610,7 +611,6 @@ export function initRepositoryActionView() { .job-brief-item .job-brief-info { display: flex; align-items: center; - width: 55px; } /* ================ */ From 426a49d48165db362dc590df541830bacf53d15c Mon Sep 17 00:00:00 2001 From: KN4CK3R Date: Tue, 27 Jun 2023 17:20:52 +0200 Subject: [PATCH 08/31] Change `Regenerate Secret` button display (#25534) Fixes #25527 Preview: ![grafik](https://github.com/go-gitea/gitea/assets/1666336/a84ad1ba-43e6-42e5-a0e2-585fb226875d) --- templates/user/settings/applications_oauth2_edit_form.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/user/settings/applications_oauth2_edit_form.tmpl b/templates/user/settings/applications_oauth2_edit_form.tmpl index dc094a1a5c..74a0e13918 100644 --- a/templates/user/settings/applications_oauth2_edit_form.tmpl +++ b/templates/user/settings/applications_oauth2_edit_form.tmpl @@ -26,7 +26,7 @@
{{.CsrfTokenHtml}} {{.locale.Tr "settings.oauth2_regenerate_secret_hint"}} - +
From b943318617633e7dc43f3ac1c146be1e37563093 Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 27 Jun 2023 21:44:17 +0200 Subject: [PATCH 09/31] Update JS dependencies and misc tweaks (#25540) - Update all JS dependencies - Enable `declaration-property-unit-disallowed-list` to forbid `em` on `line-height` - Rename dependency update targets to `update-js` and `update-py` and document them - Remove margin on Asciicast viewer - Tested Swagger, Katex, Asciicast Screenshot 2023-06-27 at 19 51 05 --- .stylelintrc.yaml | 2 +- Makefile | 10 +- package-lock.json | 172 +++++++++++++++++------------------ package.json | 14 +-- web_src/css/base.css | 4 +- web_src/css/modules/card.css | 2 +- web_src/css/repo.css | 6 +- 7 files changed, 106 insertions(+), 104 deletions(-) diff --git a/.stylelintrc.yaml b/.stylelintrc.yaml index 8aeb706182..a96589f1e8 100644 --- a/.stylelintrc.yaml +++ b/.stylelintrc.yaml @@ -50,7 +50,7 @@ rules: declaration-no-important: null declaration-property-max-values: null declaration-property-unit-allowed-list: null - declaration-property-unit-disallowed-list: null + declaration-property-unit-disallowed-list: {line-height: [em]} declaration-property-value-allowed-list: null declaration-property-value-disallowed-list: null declaration-property-value-no-unknown: true diff --git a/Makefile b/Makefile index e2b7013d2f..d1989fbcb7 100644 --- a/Makefile +++ b/Makefile @@ -226,6 +226,8 @@ help: @echo " - test-frontend test frontend files" @echo " - test-backend test backend files" @echo " - test-e2e[\#TestSpecificName] test end to end using playwright" + @echo " - update-js update js dependencies" + @echo " - update-py update py dependencies" @echo " - webpack build webpack files" @echo " - svg build svg files" @echo " - fomantic build fomantic files" @@ -924,15 +926,15 @@ node_modules: package-lock.json poetry install @touch .venv -.PHONY: npm-update -npm-update: node-check | node_modules +.PHONY: update-js +update-js: node-check | node_modules npx updates -u -f package.json rm -rf node_modules package-lock.json npm install --package-lock @touch node_modules -.PHONY: poetry-update -poetry-update: node-check | node_modules +.PHONY: update-py +update-py: node-check | node_modules npx updates -u -f pyproject.toml rm -rf .venv poetry.lock poetry install diff --git a/package-lock.json b/package-lock.json index dcda7d2fed..7b1ad9bae4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@webcomponents/custom-elements": "1.6.0", "add-asset-webpack-plugin": "2.0.1", "ansi_up": "5.2.1", - "asciinema-player": "3.4.0", + "asciinema-player": "3.5.0", "clippie": "4.0.1", "css-loader": "6.8.1", "dropzone": "6.0.0-beta.2", @@ -28,17 +28,17 @@ "fast-glob": "3.2.12", "jquery": "3.7.0", "jquery.are-you-sure": "1.9.0", - "katex": "0.16.7", + "katex": "0.16.8", "license-checker-webpack-plugin": "0.2.1", "mermaid": "10.2.3", "mini-css-extract-plugin": "2.7.6", - "minimatch": "9.0.1", + "minimatch": "9.0.2", "monaco-editor": "0.39.0", "monaco-editor-webpack-plugin": "7.0.1", "pdfobject": "2.2.12", "pretty-ms": "8.0.0", "sortablejs": "1.15.0", - "swagger-ui-dist": "5.0.0", + "swagger-ui-dist": "5.1.0", "throttle-debounce": "5.0.0", "tippy.js": "6.3.7", "toastify-js": "1.12.0", @@ -48,7 +48,7 @@ "vue-bar-graph": "2.0.0", "vue-loader": "17.2.2", "vue3-calendar-heatmap": "2.0.5", - "webpack": "5.87.0", + "webpack": "5.88.0", "webpack-cli": "5.1.4", "wrap-ansi": "8.1.0" }, @@ -68,12 +68,12 @@ "eslint-plugin-regexp": "1.15.0", "eslint-plugin-sonarjs": "0.19.0", "eslint-plugin-unicorn": "47.0.0", - "eslint-plugin-vue": "9.14.1", + "eslint-plugin-vue": "9.15.1", "eslint-plugin-wc": "1.5.0", "jsdom": "22.1.0", "markdownlint-cli": "0.35.0", "postcss-html": "1.5.0", - "stylelint": "15.8.0", + "stylelint": "15.9.0", "stylelint-declaration-block-no-ignored-properties": "2.7.0", "stylelint-declaration-strict-value": "1.9.2", "stylelint-stylistic": "0.4.2", @@ -403,9 +403,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.0.tgz", - "integrity": "sha512-MXkR+TeaS2q9IkpyO6jVCdtA/bfpABJxIrfkLswThFN8EZZgI2RfAHhm6sDNDuYV25d5+b8Lj1fpTccIcSLPsQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.1.tgz", + "integrity": "sha512-pUjtFbaKbiFNjJo8pprrIaXLvQvWIlwPiFnRI4sEnc4F0NIGTOsw8kaJSR3CmZAKEvV8QYckovgAnWQC0bgLLQ==", "dev": true, "funding": [ { @@ -421,7 +421,7 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.1.1", + "@csstools/css-parser-algorithms": "^2.2.0", "@csstools/css-tokenizer": "^2.1.1" } }, @@ -1859,9 +1859,9 @@ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" }, "node_modules/@types/node": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", - "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==" + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", + "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -2605,9 +2605,9 @@ } }, "node_modules/asciinema-player": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/asciinema-player/-/asciinema-player-3.4.0.tgz", - "integrity": "sha512-dX6jt5S3K6daItsVWzyY9mRDK+ivC2QgqCxFkdSiNslo0vY/ZqA4upcTzqIKZqBtxppovOZk44ltg9VnHG9QVg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/asciinema-player/-/asciinema-player-3.5.0.tgz", + "integrity": "sha512-o4B2AscBuCZo4+JB9TBGrfZ7GQL99wsbm08WwmuNJTPd1lyLQJq8wgacnBsdvb2sC0K875ScYr8T5XmfeH/6dg==", "dependencies": { "@babel/runtime": "^7.21.0", "solid-js": "^1.3.0" @@ -2877,9 +2877,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001504", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001504.tgz", - "integrity": "sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==", + "version": "1.0.30001508", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001508.tgz", + "integrity": "sha512-sdQZOJdmt3GJs1UMNpCCCyeuS2IEGLXnHyAo9yIO5JJDjbjoVRij4M1qep6P6gFpptD1PqIYgzM+gwJbOi92mw==", "funding": [ { "type": "opencollective", @@ -4162,9 +4162,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.433", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.433.tgz", - "integrity": "sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==" + "version": "1.4.441", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.441.tgz", + "integrity": "sha512-LlCgQ8zgYZPymf5H4aE9itwiIWH4YlCiv1HFLmmcBeFYi5E+3eaIFnjHzYtcFQbaKfAW+CqZ9pgxo33DZuoqPg==" }, "node_modules/elkjs": { "version": "0.8.2", @@ -4205,10 +4205,22 @@ "node": ">=10.13.0" } }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", "bin": { "envinfo": "dist/cli.js" }, @@ -4807,9 +4819,9 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "9.14.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.14.1.tgz", - "integrity": "sha512-LQazDB1qkNEKejLe/b5a9VfEbtbczcOaui5lQ4Qw0tbRBbQYREyxxOV5BQgNDTqGPs9pxqiEpbMi9ywuIaF7vw==", + "version": "9.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.15.1.tgz", + "integrity": "sha512-CJE/oZOslvmAR9hf8SClTdQ9JLweghT6JCBQNrT2Iel1uVw0W0OLJxzvPd6CxmABKCvLrtyDnqGV37O7KQv6+A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.3.0", @@ -5365,9 +5377,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.6.0.tgz", - "integrity": "sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.6.2.tgz", + "integrity": "sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -6577,9 +6589,9 @@ "integrity": "sha512-b+z6yF1d4EOyDgylzQo5IminlUmzSeqR1hs/bzjBNjuGras4FXq/6TrzjxfN0j+TmI0ltJzTNlqXUMCniciwKQ==" }, "node_modules/katex": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.7.tgz", - "integrity": "sha512-Xk9C6oGKRwJTfqfIbtr0Kes9OSv6IFsuhFGc7tW4urlpMJtuh+7YhzU6YEG9n8gmWKcMAFzkp7nr+r69kV0zrA==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.8.tgz", + "integrity": "sha512-ftuDnJbcbOckGY11OO+zg3OofESlbR5DRl2cmN8HeWeeFIV7wTXvAOx8kEjZjobhA+9wh2fbKeO6cdcA9Mnovg==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" @@ -6882,18 +6894,6 @@ "markdown-it": "bin/markdown-it.js" } }, - "node_modules/markdown-it/node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/markdownlint": { "version": "0.29.0", "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.29.0.tgz", @@ -7656,9 +7656,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7702,13 +7702,13 @@ } }, "node_modules/mlly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.3.0.tgz", - "integrity": "sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.0.tgz", + "integrity": "sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==", "dev": true, "dependencies": { - "acorn": "^8.8.2", - "pathe": "^1.1.0", + "acorn": "^8.9.0", + "pathe": "^1.1.1", "pkg-types": "^1.0.3", "ufo": "^1.1.2" } @@ -9063,14 +9063,14 @@ "dev": true }, "node_modules/run-con": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.11.tgz", - "integrity": "sha512-NEMGsUT+cglWkzEr4IFK21P4Jca45HqiAbIIZIBdX5+UZTB24Mb/21iNGgz9xZa8tL6vbW7CXmq7MFN42+VjNQ==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.12.tgz", + "integrity": "sha512-5257ILMYIF4RztL9uoZ7V9Q97zHtNHn5bN3NobeAnzB1P3ASLgg8qocM2u+R18ttp+VEM78N2LK8XcNVtnSRrg==", "dev": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~3.0.0", - "minimist": "^1.2.6", + "minimist": "^1.2.8", "strip-json-comments": "~3.1.1" }, "bin": { @@ -9210,9 +9210,9 @@ } }, "node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -9415,9 +9415,9 @@ "dev": true }, "node_modules/solid-js": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.7.6.tgz", - "integrity": "sha512-DXVOTjUh/bIAhE0fIqu3ezGLyQaez7v8EOw3uPLIi87DmLjg+hsuCAgKyNIZ+o4jUetOk3ZORccvJmE1yZUk8g==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.7.7.tgz", + "integrity": "sha512-SPdYVke/Z6Za24PBTbULyQYPrhGO1ZbPany76atO2zF2dmYn2pCotbsw1JtlgWnr9dK2JbwPGnA3ODTGPLhZNw==", "dependencies": { "csstype": "^3.1.0", "seroval": "^0.5.0" @@ -9713,9 +9713,9 @@ "dev": true }, "node_modules/stylelint": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.8.0.tgz", - "integrity": "sha512-x9qBk84F3MEjMEUNCE7MtWmfj9G9y5XzJ0cpQeJdy2l/IoqjC8Ih0N0ytmOTnXE4Yv0J7I1cmVRQUVNSPCxTsA==", + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.9.0.tgz", + "integrity": "sha512-sXtAZi64CllWr6A+8ymDWnlIaYwuAa7XRmGnJxLQXFNnLjd3Izm4HAD+loKVaZ7cpK6SLxhAUX1lwPJKGCn0mg==", "dev": true, "dependencies": { "@csstools/css-parser-algorithms": "^2.2.0", @@ -9827,9 +9827,9 @@ } }, "node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" }, "node_modules/superstruct": { "version": "0.10.13", @@ -9911,9 +9911,9 @@ } }, "node_modules/swagger-ui-dist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.0.0.tgz", - "integrity": "sha512-bwl6og9I9CAHKGSnYLKydjhBuH7d3oU6RX6uKN8oDCkLusTHXOW3sZMyBWjRtjGFnCMmN085oZoaR/4Wm9nIaQ==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.1.0.tgz", + "integrity": "sha512-c1KmAjuVODxw+vwkNLALQZrgdlBAuBbr2xSPfYrJgseEi7gFKcTvShysPmyuDI4kcUa1+5rFpjWvXdusKY74mg==" }, "node_modules/symbol-tree": { "version": "3.2.4", @@ -9958,9 +9958,9 @@ } }, "node_modules/terser": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.0.tgz", - "integrity": "sha512-pdL757Ig5a0I+owA42l6tIuEycRuM7FPY4n62h44mRLRfnOxJkkOHd6i89dOpwZlpF6JXBwaAHF6yWzFrt+QyA==", + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -10220,9 +10220,9 @@ } }, "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", "dev": true }, "node_modules/type-check": { @@ -10534,9 +10534,9 @@ } }, "node_modules/vite/node_modules/rollup": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", - "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", + "version": "3.25.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.3.tgz", + "integrity": "sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -10772,9 +10772,9 @@ } }, "node_modules/webpack": { - "version": "5.87.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.87.0.tgz", - "integrity": "sha512-GOu1tNbQ7p1bDEoFRs2YPcfyGs8xq52yyPBZ3m2VGnXGtV9MxjrkABHm4V9Ia280OefsSLzvbVoXcfLxjKY/Iw==", + "version": "5.88.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.0.tgz", + "integrity": "sha512-O3jDhG5e44qIBSi/P6KpcCcH7HD+nYIHVBhdWFxcLOcIGN8zGo5nqF3BjyNCxIh4p1vFdNnreZv2h2KkoAw3lw==", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.0", diff --git a/package.json b/package.json index 9659771212..da95145e4a 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@webcomponents/custom-elements": "1.6.0", "add-asset-webpack-plugin": "2.0.1", "ansi_up": "5.2.1", - "asciinema-player": "3.4.0", + "asciinema-player": "3.5.0", "clippie": "4.0.1", "css-loader": "6.8.1", "dropzone": "6.0.0-beta.2", @@ -27,17 +27,17 @@ "fast-glob": "3.2.12", "jquery": "3.7.0", "jquery.are-you-sure": "1.9.0", - "katex": "0.16.7", + "katex": "0.16.8", "license-checker-webpack-plugin": "0.2.1", "mermaid": "10.2.3", "mini-css-extract-plugin": "2.7.6", - "minimatch": "9.0.1", + "minimatch": "9.0.2", "monaco-editor": "0.39.0", "monaco-editor-webpack-plugin": "7.0.1", "pdfobject": "2.2.12", "pretty-ms": "8.0.0", "sortablejs": "1.15.0", - "swagger-ui-dist": "5.0.0", + "swagger-ui-dist": "5.1.0", "throttle-debounce": "5.0.0", "tippy.js": "6.3.7", "toastify-js": "1.12.0", @@ -47,7 +47,7 @@ "vue-bar-graph": "2.0.0", "vue-loader": "17.2.2", "vue3-calendar-heatmap": "2.0.5", - "webpack": "5.87.0", + "webpack": "5.88.0", "webpack-cli": "5.1.4", "wrap-ansi": "8.1.0" }, @@ -67,12 +67,12 @@ "eslint-plugin-regexp": "1.15.0", "eslint-plugin-sonarjs": "0.19.0", "eslint-plugin-unicorn": "47.0.0", - "eslint-plugin-vue": "9.14.1", + "eslint-plugin-vue": "9.15.1", "eslint-plugin-wc": "1.5.0", "jsdom": "22.1.0", "markdownlint-cli": "0.35.0", "postcss-html": "1.5.0", - "stylelint": "15.8.0", + "stylelint": "15.9.0", "stylelint-declaration-block-no-ignored-properties": "2.7.0", "stylelint-declaration-strict-value": "1.9.2", "stylelint-stylistic": "0.4.2", diff --git a/web_src/css/base.css b/web_src/css/base.css index 4e2cd373d7..ec37c123d7 100644 --- a/web_src/css/base.css +++ b/web_src/css/base.css @@ -2166,7 +2166,7 @@ table th[data-sortt-desc] .svg { } .truncated-item-name { - line-height: 2em; + line-height: 2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -2188,7 +2188,7 @@ table th[data-sortt-desc] .svg { } .ui.dropdown { - line-height: 1em; /* the dropdown doesn't have default line-height, use this to make the dropdown icon align with plain dropdown */ + line-height: 1; /* the dropdown doesn't have default line-height, use this to make the dropdown icon align with plain dropdown */ } /* dropdown has some kinds of icons: diff --git a/web_src/css/modules/card.css b/web_src/css/modules/card.css index eba14ab334..2406def681 100644 --- a/web_src/css/modules/card.css +++ b/web_src/css/modules/card.css @@ -59,7 +59,7 @@ font-weight: var(--font-weight-medium); font-size: 1.28571429em; margin-top: -.21425em; - line-height: 1.28571429em; + line-height: 1.28571429; } .ui.cards > .card > .content:first-child, diff --git a/web_src/css/repo.css b/web_src/css/repo.css index 825711465e..0122e79aae 100644 --- a/web_src/css/repo.css +++ b/web_src/css/repo.css @@ -478,7 +478,7 @@ } .repository.file.list .non-diff-file-content .asciicast { - padding: 5px !important; + padding: 0 !important; } .non-diff-file-content .attached.segment, @@ -1903,7 +1903,7 @@ .repository.settings.collaboration .collaborator.list > .item { margin: 0; - line-height: 2em; + line-height: 2; } .repository.settings.collaboration #repo-collab-form #search-user-box .results { @@ -2601,7 +2601,7 @@ .labels-list .label { margin: 2px 0; display: inline-flex !important; - line-height: 1.3em; /* there is a `font-size: 1.25em` for inside emoji, so here the line-height needs to be larger slightly */ + line-height: 1.3; /* there is a `font-size: 1.25em` for inside emoji, so here the line-height needs to be larger slightly */ } /* Scoped labels with different colors on left and right */ From 65d3e1161b0544f50d94dbbecb6bcf135535e112 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Wed, 28 Jun 2023 14:02:06 +0800 Subject: [PATCH 10/31] Fix sub-command log level (#25537) More fix for #24981 * #24981 Close #22361 * #22361 There were many patches for Gitea's sub-commands to satisfy the facts: * Some sub-commands shouldn't output any log, otherwise the git protocol would be broken * Sometimes the users want to see "verbose" or "quiet" outputs That's a longstanding problem, and very fragile. This PR is only a quick patch for the problem. In the future, the sub-command system should be refactored to a clear solution. ---- Other changes: * Use `ReplaceAllWriters` to replace `RemoveAllWriters().AddWriters(writer)`, then it's an atomic operation. * Remove unnecessary `syncLevelInternal` calls, because `AddWriters/addWritersInternal` already calls it. Co-authored-by: Giteabot --- cmd/cmd.go | 18 +++++++++++++++++- cmd/doctor.go | 2 +- cmd/hook.go | 2 ++ cmd/keys.go | 2 ++ cmd/serv.go | 1 + cmd/web.go | 6 +----- main.go | 7 +++++-- modules/log/logger_global.go | 2 +- modules/log/logger_impl.go | 13 +++++++------ modules/log/manager_test.go | 2 +- modules/setting/log.go | 2 +- 11 files changed, 39 insertions(+), 18 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index 8076acecaa..4ed636a9b4 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -106,5 +106,21 @@ func setupConsoleLogger(level log.Level, colorize bool, out io.Writer) { WriterOption: log.WriterConsoleOption{Stderr: out == os.Stderr}, } writer := log.NewEventWriterConsole("console-default", writeMode) - log.GetManager().GetLogger(log.DEFAULT).RemoveAllWriters().AddWriters(writer) + log.GetManager().GetLogger(log.DEFAULT).ReplaceAllWriters(writer) +} + +// PrepareConsoleLoggerLevel by default, use INFO level for console logger, but some sub-commands (for git/ssh protocol) shouldn't output any log to stdout. +// Any log appears in git stdout pipe will break the git protocol, eg: client can't push and hangs forever. +func PrepareConsoleLoggerLevel(defaultLevel log.Level) func(*cli.Context) error { + return func(c *cli.Context) error { + level := defaultLevel + if c.Bool("quiet") || c.GlobalBoolT("quiet") { + level = log.FATAL + } + if c.Bool("debug") || c.GlobalBool("debug") || c.Bool("verbose") || c.GlobalBool("verbose") { + level = log.TRACE + } + log.SetConsoleLogger(log.DEFAULT, "console-default", level) + return nil + } } diff --git a/cmd/doctor.go b/cmd/doctor.go index b79436fc0a..cd5f125e20 100644 --- a/cmd/doctor.go +++ b/cmd/doctor.go @@ -151,7 +151,7 @@ func setupDoctorDefaultLogger(ctx *cli.Context, colorize bool) { log.FallbackErrorf("unable to create file log writer: %v", err) return } - log.GetManager().GetLogger(log.DEFAULT).RemoveAllWriters().AddWriters(writer) + log.GetManager().GetLogger(log.DEFAULT).ReplaceAllWriters(writer) } } diff --git a/cmd/hook.go b/cmd/hook.go index 6453267832..ed6efc19ea 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -15,6 +15,7 @@ import ( "time" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/private" repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" @@ -32,6 +33,7 @@ var ( Name: "hook", Usage: "Delegate commands to corresponding Git hooks", Description: "This should only be called by Git", + Before: PrepareConsoleLoggerLevel(log.FATAL), Subcommands: []cli.Command{ subcmdHookPreReceive, subcmdHookUpdate, diff --git a/cmd/keys.go b/cmd/keys.go index deb94fca5d..8aeee37527 100644 --- a/cmd/keys.go +++ b/cmd/keys.go @@ -8,6 +8,7 @@ import ( "fmt" "strings" + "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/private" "github.com/urfave/cli" @@ -17,6 +18,7 @@ import ( var CmdKeys = cli.Command{ Name: "keys", Usage: "This command queries the Gitea database to get the authorized command for a given ssh key fingerprint", + Before: PrepareConsoleLoggerLevel(log.FATAL), Action: runKeys, Flags: []cli.Flag{ cli.StringFlag{ diff --git a/cmd/serv.go b/cmd/serv.go index 01102d3800..79052e58a8 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -44,6 +44,7 @@ var CmdServ = cli.Command{ Name: "serv", Usage: "This command should only be called by SSH shell", Description: "Serv provides access auth for repositories", + Before: PrepareConsoleLoggerLevel(log.FATAL), Action: runServ, Flags: []cli.Flag{ cli.BoolFlag{ diff --git a/cmd/web.go b/cmd/web.go index 7a257a62a2..05f3b2ddb2 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -35,6 +35,7 @@ var CmdWeb = cli.Command{ Usage: "Start Gitea web server", Description: `Gitea web server is the only thing you need to run, and it takes care of all the other things for you`, + Before: PrepareConsoleLoggerLevel(log.INFO), Action: runWeb, Flags: []cli.Flag{ cli.StringFlag{ @@ -206,11 +207,6 @@ func servePprof() { } func runWeb(ctx *cli.Context) error { - if ctx.Bool("verbose") { - setupConsoleLogger(log.TRACE, log.CanColorStdout, os.Stdout) - } else if ctx.Bool("quiet") { - setupConsoleLogger(log.FATAL, log.CanColorStdout, os.Stdout) - } defer func() { if panicked := recover(); panicked != nil { log.Fatal("PANIC: %v\n%s", panicked, log.Stack(2)) diff --git a/main.go b/main.go index 7b447e7533..f604311f54 100644 --- a/main.go +++ b/main.go @@ -108,7 +108,9 @@ func main() { cmd.CmdActions, } - // default configuration flags + // shared configuration flags, they are for global and for each sub-command at the same time + // eg: such command is valid: "./gitea --config /tmp/app.ini web --config /tmp/app.ini", while it's discouraged indeed + // keep in mind that the short flags like "-C", "-c" and "-w" are globally polluted, they can't be used for sub-commands anymore. globalFlags := []cli.Flag{ cli.HelpFlag, cli.StringFlag{ @@ -128,9 +130,10 @@ func main() { // Set the default to be equivalent to cmdWeb and add the default flags app.Flags = append(app.Flags, globalFlags...) - app.Flags = append(app.Flags, cmd.CmdWeb.Flags...) + app.Flags = append(app.Flags, cmd.CmdWeb.Flags...) // TODO: the web flags polluted the global flags, they are not really global flags app.Action = prepareWorkPathAndCustomConf(cmd.CmdWeb.Action) app.HideHelp = true // use our own help action to show helps (with more information like default config) + app.Before = cmd.PrepareConsoleLoggerLevel(log.INFO) app.Commands = append(app.Commands, cmdHelp) for i := range app.Commands { prepareSubcommands(&app.Commands[i], globalFlags) diff --git a/modules/log/logger_global.go b/modules/log/logger_global.go index 5ccef34b5b..994acfedbb 100644 --- a/modules/log/logger_global.go +++ b/modules/log/logger_global.go @@ -79,5 +79,5 @@ func SetConsoleLogger(loggerName, writerName string, level Level) { Colorize: CanColorStdout, WriterOption: WriterConsoleOption{}, }) - GetManager().GetLogger(loggerName).RemoveAllWriters().AddWriters(writer) + GetManager().GetLogger(loggerName).ReplaceAllWriters(writer) } diff --git a/modules/log/logger_impl.go b/modules/log/logger_impl.go index 903d8cefc2..d38c6516ed 100644 --- a/modules/log/logger_impl.go +++ b/modules/log/logger_impl.go @@ -96,7 +96,10 @@ func (l *LoggerImpl) removeWriterInternal(w EventWriter) { func (l *LoggerImpl) AddWriters(writer ...EventWriter) { l.eventWriterMu.Lock() defer l.eventWriterMu.Unlock() + l.addWritersInternal(writer...) +} +func (l *LoggerImpl) addWritersInternal(writer ...EventWriter) { for _, w := range writer { if old, ok := l.eventWriters[w.GetWriterName()]; ok { l.removeWriterInternal(old) @@ -126,8 +129,8 @@ func (l *LoggerImpl) RemoveWriter(modeName string) error { return nil } -// RemoveAllWriters removes all writers from the logger, non-shared writers are closed and flushed -func (l *LoggerImpl) RemoveAllWriters() *LoggerImpl { +// ReplaceAllWriters replaces all writers from the logger, non-shared writers are closed and flushed +func (l *LoggerImpl) ReplaceAllWriters(writer ...EventWriter) { l.eventWriterMu.Lock() defer l.eventWriterMu.Unlock() @@ -135,8 +138,7 @@ func (l *LoggerImpl) RemoveAllWriters() *LoggerImpl { l.removeWriterInternal(w) } l.eventWriters = map[string]EventWriter{} - l.syncLevelInternal() - return l + l.addWritersInternal(writer...) } // DumpWriters dumps the writers as a JSON map, it's used for debugging and display purposes. @@ -161,7 +163,7 @@ func (l *LoggerImpl) DumpWriters() map[string]any { // Close closes the logger, non-shared writers are closed and flushed func (l *LoggerImpl) Close() { - l.RemoveAllWriters() + l.ReplaceAllWriters() l.ctxCancel() } @@ -233,7 +235,6 @@ func NewLoggerWithWriters(ctx context.Context, name string, writer ...EventWrite l.ctx, l.ctxCancel = newProcessTypedContext(ctx, "Logger: "+name) l.LevelLogger = BaseLoggerToGeneralLogger(l) l.eventWriters = map[string]EventWriter{} - l.syncLevelInternal() l.AddWriters(writer...) return l } diff --git a/modules/log/manager_test.go b/modules/log/manager_test.go index aa01f79980..b8fbf84613 100644 --- a/modules/log/manager_test.go +++ b/modules/log/manager_test.go @@ -23,7 +23,7 @@ func TestSharedWorker(t *testing.T) { loggerTest := m.GetLogger("test") loggerTest.AddWriters(w) loggerTest.Info("msg-1") - loggerTest.RemoveAllWriters() // the shared writer is not closed here + loggerTest.ReplaceAllWriters() // the shared writer is not closed here loggerTest.Info("never seen") // the shared writer can still be used later diff --git a/modules/setting/log.go b/modules/setting/log.go index af64ea8d85..66206f8f4b 100644 --- a/modules/setting/log.go +++ b/modules/setting/log.go @@ -244,7 +244,7 @@ func initLoggerByName(manager *log.LoggerManager, rootCfg ConfigProvider, logger eventWriters = append(eventWriters, eventWriter) } - manager.GetLogger(loggerName).RemoveAllWriters().AddWriters(eventWriters...) + manager.GetLogger(loggerName).ReplaceAllWriters(eventWriters...) } func InitSQLLoggersForCli(level log.Level) { From c082689471f799b9f22ffee4c96db26e5b94804f Mon Sep 17 00:00:00 2001 From: HesterG Date: Wed, 28 Jun 2023 20:10:36 +0800 Subject: [PATCH 11/31] Use flex instead of float for sort button and search input (#25519) Right now some sort buttons beside search input are unclickable because #25338 removed `max-width` and the sort button is using float, sort button is then covered by the `input`. The way to fix this in this PR is changing the layout to `flex` and put `input form` and sort `button` into `secondary menu`. After: Screen Shot 2023-06-26 at 16 40 52 Screen Shot 2023-06-26 at 16 34 06 Screen Shot 2023-06-26 at 16 34 22 Screen Shot 2023-06-26 at 16 34 32 Screen Shot 2023-06-26 at 16 35 21 Screen Shot 2023-06-26 at 16 36 14 --- templates/admin/base/search.tmpl | 18 +++++++++--------- templates/admin/emails/list.tmpl | 18 +++++++++--------- templates/admin/repo/search.tmpl | 16 ++++++++-------- templates/code/searchform.tmpl | 2 +- templates/explore/repo_search.tmpl | 30 +++++++++++++++--------------- templates/explore/search.tmpl | 18 +++++++++--------- 6 files changed, 51 insertions(+), 51 deletions(-) diff --git a/templates/admin/base/search.tmpl b/templates/admin/base/search.tmpl index bc684e7657..19977f05a9 100644 --- a/templates/admin/base/search.tmpl +++ b/templates/admin/base/search.tmpl @@ -1,6 +1,12 @@ -