From f34a0b9f3266f90b60f40fba183e665b7303066c Mon Sep 17 00:00:00 2001 From: charles Date: Thu, 27 Jun 2024 09:49:02 +0800 Subject: [PATCH 01/10] Fix trimming of leading and trailing spaces when adding a new file --- routers/web/repo/editor.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/routers/web/repo/editor.go b/routers/web/repo/editor.go index 4ff86b5a66..f8e291a4d1 100644 --- a/routers/web/repo/editor.go +++ b/routers/web/repo/editor.go @@ -392,6 +392,14 @@ func EditFilePost(ctx *context.Context) { // NewFilePost response for creating file func NewFilePost(ctx *context.Context) { form := web.GetForm(ctx).(*forms.EditRepoFileForm) + + // trim leading and trailing spaces from the tree path + treePath := strings.Split(form.TreePath, "/") + for i, v := range treePath { + treePath[i] = strings.TrimSpace(v) + } + form.TreePath = strings.Join(treePath, "/") + editFilePost(ctx, *form, true) } From 8ddd550e44b3f5e8d872fcd6617fc57129f0eaeb Mon Sep 17 00:00:00 2001 From: charles7668 Date: Sun, 30 Jun 2024 03:13:22 +0800 Subject: [PATCH 02/10] Add a check for leading or trailing spaces in the parent directory on the "Add New File" page. --- web_src/js/features/repo-editor.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/web_src/js/features/repo-editor.js b/web_src/js/features/repo-editor.js index f25da911df..e72dc5cf28 100644 --- a/web_src/js/features/repo-editor.js +++ b/web_src/js/features/repo-editor.js @@ -76,6 +76,7 @@ export function initRepoEditor() { filenameInput.addEventListener('input', function () { const parts = filenameInput.value.split('/'); if (parts.length > 1) { + let containSpace = false; for (let i = 0; i < parts.length; ++i) { const value = parts[i]; if (i < parts.length - 1) { @@ -87,6 +88,24 @@ export function initRepoEditor() { filenameInput.value = value; } this.setSelectionRange(0, 0); + containSpace |= value.trim() !== value; + } + let warningDiv = document.querySelector('.ui.warning.message.flash-message.flash-warning'); + containSpace |= Array.from(links).some((link) => { + const value = link.querySelector('a').textContent; + return value.trim() !== value; + }); + if (containSpace) { + if (!warningDiv) { + warningDiv = document.createElement('div'); + warningDiv.classList.add('ui', 'warning', 'message', 'flash-message', 'flash-warning'); + warningDiv.innerHTML = '

Parent directory contains leading or trailing whitespace.

'; + const inputContainer = document.querySelector('.repo-editor-header'); + inputContainer.insertAdjacentElement('beforebegin', warningDiv); + } + warningDiv.style.display = 'block'; + } else if (warningDiv) { + warningDiv.style.display = 'none'; } } joinTreePath(); From 2543f15e30c443c41490e6b0c573afc17db45974 Mon Sep 17 00:00:00 2001 From: charles7668 Date: Sun, 30 Jun 2024 03:56:40 +0800 Subject: [PATCH 03/10] Remove parent path when typing a '..' path. --- web_src/js/features/repo-editor.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/web_src/js/features/repo-editor.js b/web_src/js/features/repo-editor.js index e72dc5cf28..5453b26b92 100644 --- a/web_src/js/features/repo-editor.js +++ b/web_src/js/features/repo-editor.js @@ -75,10 +75,20 @@ export function initRepoEditor() { } filenameInput.addEventListener('input', function () { const parts = filenameInput.value.split('/'); + const links = document.querySelectorAll('.breadcrumb span.section'); + const dividers = document.querySelectorAll('.breadcrumb-divider'); if (parts.length > 1) { let containSpace = false; for (let i = 0; i < parts.length; ++i) { const value = parts[i]; + if (value.trim() === '..') { + // remove previous tree path + if (links.length > 0) { + links[links.length - 1].remove(); + dividers[dividers.length - 1].remove(); + } + continue; + } if (i < parts.length - 1) { if (value.length) { $(`${htmlEscape(value)}`).insertBefore($(filenameInput)); From 3cf747241065b256b9562572ee337b1f01bed483 Mon Sep 17 00:00:00 2001 From: charles7668 Date: Sun, 30 Jun 2024 08:25:53 +0800 Subject: [PATCH 04/10] Update Warning message --- web_src/js/features/repo-editor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_src/js/features/repo-editor.js b/web_src/js/features/repo-editor.js index 5453b26b92..efffd739dd 100644 --- a/web_src/js/features/repo-editor.js +++ b/web_src/js/features/repo-editor.js @@ -109,7 +109,7 @@ export function initRepoEditor() { if (!warningDiv) { warningDiv = document.createElement('div'); warningDiv.classList.add('ui', 'warning', 'message', 'flash-message', 'flash-warning'); - warningDiv.innerHTML = '

Parent directory contains leading or trailing whitespace.

'; + warningDiv.innerHTML = '

Parent directory contains leading or trailing whitespace.

These whitespaces will be removed.

'; const inputContainer = document.querySelector('.repo-editor-header'); inputContainer.insertAdjacentElement('beforebegin', warningDiv); } From 6d29c32bd38381d841c373bb28aa4feab98b47dd Mon Sep 17 00:00:00 2001 From: charles Date: Fri, 19 Jul 2024 10:49:07 +0800 Subject: [PATCH 05/10] Change .style.display to showElem and hideElem --- web_src/js/features/repo-editor.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/web_src/js/features/repo-editor.js b/web_src/js/features/repo-editor.js index efffd739dd..1dc19a9e0d 100644 --- a/web_src/js/features/repo-editor.js +++ b/web_src/js/features/repo-editor.js @@ -110,12 +110,14 @@ export function initRepoEditor() { warningDiv = document.createElement('div'); warningDiv.classList.add('ui', 'warning', 'message', 'flash-message', 'flash-warning'); warningDiv.innerHTML = '

Parent directory contains leading or trailing whitespace.

These whitespaces will be removed.

'; + // Add display 'block' because display is set to 'none' in formantic\build\semantic.css + warningDiv.style.display = 'block'; const inputContainer = document.querySelector('.repo-editor-header'); inputContainer.insertAdjacentElement('beforebegin', warningDiv); } - warningDiv.style.display = 'block'; + showElem(warningDiv); } else if (warningDiv) { - warningDiv.style.display = 'none'; + hideElem(warningDiv); } } joinTreePath(); From df0d7c1aec6142d51266ca06051328a1b206686c Mon Sep 17 00:00:00 2001 From: charles Date: Fri, 19 Jul 2024 11:13:07 +0800 Subject: [PATCH 06/10] Prevent the query non-space-related warning div. --- web_src/js/features/repo-editor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web_src/js/features/repo-editor.js b/web_src/js/features/repo-editor.js index 1dc19a9e0d..87a7b8c161 100644 --- a/web_src/js/features/repo-editor.js +++ b/web_src/js/features/repo-editor.js @@ -100,7 +100,7 @@ export function initRepoEditor() { this.setSelectionRange(0, 0); containSpace |= value.trim() !== value; } - let warningDiv = document.querySelector('.ui.warning.message.flash-message.flash-warning'); + let warningDiv = document.querySelector('.ui.warning.message.flash-message.flash-warning.space-related'); containSpace |= Array.from(links).some((link) => { const value = link.querySelector('a').textContent; return value.trim() !== value; @@ -108,7 +108,7 @@ export function initRepoEditor() { if (containSpace) { if (!warningDiv) { warningDiv = document.createElement('div'); - warningDiv.classList.add('ui', 'warning', 'message', 'flash-message', 'flash-warning'); + warningDiv.classList.add('ui', 'warning', 'message', 'flash-message', 'flash-warning', 'space-related'); warningDiv.innerHTML = '

Parent directory contains leading or trailing whitespace.

These whitespaces will be removed.

'; // Add display 'block' because display is set to 'none' in formantic\build\semantic.css warningDiv.style.display = 'block'; From 6071df1bef34cfb58d9ca968822030203197a6eb Mon Sep 17 00:00:00 2001 From: charles Date: Fri, 19 Jul 2024 11:28:28 +0800 Subject: [PATCH 07/10] Prevent the use of '/' with no value. --- web_src/js/features/repo-editor.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/web_src/js/features/repo-editor.js b/web_src/js/features/repo-editor.js index 87a7b8c161..3f5da85125 100644 --- a/web_src/js/features/repo-editor.js +++ b/web_src/js/features/repo-editor.js @@ -81,7 +81,8 @@ export function initRepoEditor() { let containSpace = false; for (let i = 0; i < parts.length; ++i) { const value = parts[i]; - if (value.trim() === '..') { + const trimValue = value.trim(); + if (trimValue === '..') { // remove previous tree path if (links.length > 0) { links[links.length - 1].remove(); @@ -90,7 +91,7 @@ export function initRepoEditor() { continue; } if (i < parts.length - 1) { - if (value.length) { + if (trimValue.length) { $(`${htmlEscape(value)}`).insertBefore($(filenameInput)); $('').insertBefore($(filenameInput)); } @@ -98,7 +99,7 @@ export function initRepoEditor() { filenameInput.value = value; } this.setSelectionRange(0, 0); - containSpace |= value.trim() !== value; + containSpace |= (trimValue !== value && trimValue !== ''); } let warningDiv = document.querySelector('.ui.warning.message.flash-message.flash-warning.space-related'); containSpace |= Array.from(links).some((link) => { From 3d19281d3e65ed46cd3f05223ce29fbb01a493b3 Mon Sep 17 00:00:00 2001 From: charles Date: Fri, 19 Jul 2024 12:40:12 +0800 Subject: [PATCH 08/10] Fix processing of `..` when using paste. --- web_src/js/features/repo-editor.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/web_src/js/features/repo-editor.js b/web_src/js/features/repo-editor.js index 3f5da85125..16ec3ed2cf 100644 --- a/web_src/js/features/repo-editor.js +++ b/web_src/js/features/repo-editor.js @@ -75,8 +75,8 @@ export function initRepoEditor() { } filenameInput.addEventListener('input', function () { const parts = filenameInput.value.split('/'); - const links = document.querySelectorAll('.breadcrumb span.section'); - const dividers = document.querySelectorAll('.breadcrumb-divider'); + const links = Array.from(document.querySelectorAll('.breadcrumb span.section')); + const dividers = Array.from(document.querySelectorAll('.breadcrumb .breadcrumb-divider')); if (parts.length > 1) { let containSpace = false; for (let i = 0; i < parts.length; ++i) { @@ -85,15 +85,21 @@ export function initRepoEditor() { if (trimValue === '..') { // remove previous tree path if (links.length > 0) { - links[links.length - 1].remove(); - dividers[dividers.length - 1].remove(); + const link = links.pop(); + const divider = dividers.pop(); + link.remove(); + divider.remove(); } continue; } if (i < parts.length - 1) { if (trimValue.length) { - $(`${htmlEscape(value)}`).insertBefore($(filenameInput)); - $('').insertBefore($(filenameInput)); + const $link = $(`${htmlEscape(value)}`); + const $divider = $(''); + links.push($link.get(0)); + dividers.push($divider.get(0)); + $link.insertBefore($(filenameInput)); + $divider.insertBefore($(filenameInput)); } } else { filenameInput.value = value; From 5bd05dee63ccc6d73598b503a2534a7e44ae1d9e Mon Sep 17 00:00:00 2001 From: charles7668 Date: Fri, 19 Jul 2024 18:56:10 +0800 Subject: [PATCH 09/10] Using an error message when the file name is invalid to replace trimming leading and trailing spaces. --- routers/web/repo/editor.go | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/routers/web/repo/editor.go b/routers/web/repo/editor.go index f8e291a4d1..9396115b0d 100644 --- a/routers/web/repo/editor.go +++ b/routers/web/repo/editor.go @@ -317,7 +317,7 @@ func editFilePost(ctx *context.Context, form forms.EditRepoFileForm, isNewFile b case git.EntryModeBlob: ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", fileErr.Path), tplEditFile, &form) default: - ctx.Error(http.StatusInternalServerError, err.Error()) + ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_invalid", fileErr.Path), tplEditFile, &form) } } else { ctx.Error(http.StatusInternalServerError, err.Error()) @@ -392,14 +392,6 @@ func EditFilePost(ctx *context.Context) { // NewFilePost response for creating file func NewFilePost(ctx *context.Context) { form := web.GetForm(ctx).(*forms.EditRepoFileForm) - - // trim leading and trailing spaces from the tree path - treePath := strings.Split(form.TreePath, "/") - for i, v := range treePath { - treePath[i] = strings.TrimSpace(v) - } - form.TreePath = strings.Join(treePath, "/") - editFilePost(ctx, *form, true) } From b5e518fce46754640707c387f8d548f8cf51d47f Mon Sep 17 00:00:00 2001 From: charles7668 Date: Fri, 19 Jul 2024 19:02:11 +0800 Subject: [PATCH 10/10] Remove 'whitespaces will be removed' message --- web_src/js/features/repo-editor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_src/js/features/repo-editor.ts b/web_src/js/features/repo-editor.ts index a0af8f4514..e4ac9bd2f5 100644 --- a/web_src/js/features/repo-editor.ts +++ b/web_src/js/features/repo-editor.ts @@ -116,7 +116,7 @@ export function initRepoEditor() { if (!warningDiv) { warningDiv = document.createElement('div'); warningDiv.classList.add('ui', 'warning', 'message', 'flash-message', 'flash-warning', 'space-related'); - warningDiv.innerHTML = '

Parent directory contains leading or trailing whitespace.

These whitespaces will be removed.

'; + warningDiv.innerHTML = '

Parent directory contains leading or trailing whitespace.

'; // Add display 'block' because display is set to 'none' in formantic\build\semantic.css warningDiv.style.display = 'block'; const inputContainer = document.querySelector('.repo-editor-header');