+
@@ -80,17 +80,17 @@
{{end}}
-
@@ -53,17 +53,17 @@
- {{if .EscapeStatus.Escaped}}
- {{ctx.Locale.Tr "repo.unescape_control_characters"}}
- {{ctx.Locale.Tr "repo.escape_control_characters"}}
- {{end}}
- {{if and .CanWriteWiki (not .Repository.IsMirror)}}
-
+
+ {{if .EscapeStatus.Escaped}}
+ {{ctx.Locale.Tr "repo.unescape_control_characters"}}
+ {{ctx.Locale.Tr "repo.escape_control_characters"}}
+ {{end}}
+ {{if and .CanWriteWiki (not .Repository.IsMirror)}}
{{ctx.Locale.Tr "repo.wiki.edit_page_button"}}
{{ctx.Locale.Tr "repo.wiki.new_page_button"}}
{{ctx.Locale.Tr "repo.wiki.delete_page_button"}}
-
- {{end}}
+ {{end}}
+
+
{{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}}
{{.content | SafeHTML}}
{{if .sidebarPresent}}
-
+
+ {{template "repo/unicode_escape_prompt" dict "EscapeStatus" .sidebarEscapeStatus "root" $}}
{{if and .CanWriteWiki (not .Repository.IsMirror)}}
{{svg "octicon-pencil"}}
{{end}}
- {{template "repo/unicode_escape_prompt" dict "EscapeStatus" .sidebarEscapeStatus "root" $}}
{{.sidebarContent | SafeHTML}}
{{end}}
@@ -98,11 +98,11 @@
{{if .footerPresent}}
-
+
+ {{template "repo/unicode_escape_prompt" dict "EscapeStatus" .sidebarEscapeStatus "root" $}}
{{if and .CanWriteWiki (not .Repository.IsMirror)}}
{{svg "octicon-pencil"}}
{{end}}
- {{template "repo/unicode_escape_prompt" dict "footerEscapeStatus" .sidebarEscapeStatus "root" $}}
{{.footerContent | SafeHTML}}
{{end}}
diff --git a/tests/e2e/declare_repos_test.go b/tests/e2e/declare_repos_test.go
index 836c2c6552..1aca84125a 100644
--- a/tests/e2e/declare_repos_test.go
+++ b/tests/e2e/declare_repos_test.go
@@ -21,6 +21,7 @@ import (
"forgejo.org/modules/timeutil"
issue_service "forgejo.org/services/issue"
files_service "forgejo.org/services/repository/files"
+ "forgejo.org/services/wiki"
"forgejo.org/tests"
"github.com/stretchr/testify/assert"
@@ -75,10 +76,17 @@ func DeclareGitRepos(t *testing.T) func() {
CommitMsg: "Another commit which mentions @user1 in the title\nand @user2 in the text",
},
}, nil),
- newRepo(t, 2, "unicode-escaping", nil, []FileChanges{{
+ newRepo(t, 2, "unicode-escaping", &tests.DeclarativeRepoOptions{
+ EnabledUnits: optional.Some([]unit_model.Type{unit_model.TypeCode, unit_model.TypeWiki}),
+ }, []FileChanges{{
Filename: "a-file",
Versions: []string{"{a}{а}"},
- }}, nil),
+ }}, func(user *user_model.User, repo *repo_model.Repository) {
+ wiki.InitWiki(db.DefaultContext, repo)
+ wiki.AddWikiPage(db.DefaultContext, user, repo, "Home", "{a}{а}", "{a}{а}")
+ wiki.AddWikiPage(db.DefaultContext, user, repo, "_Sidebar", "{a}{а}", "{a}{а}")
+ wiki.AddWikiPage(db.DefaultContext, user, repo, "_Footer", "{a}{а}", "{a}{а}")
+ }),
newRepo(t, 2, "multiple-combo-boxes", nil, []FileChanges{{
Filename: ".forgejo/issue_template/multi-combo-boxes.yaml",
Versions: []string{`
diff --git a/tests/e2e/repo-wiki.test.e2e.ts b/tests/e2e/repo-wiki.test.e2e.ts
index e31201ccf7..61bb2ad181 100644
--- a/tests/e2e/repo-wiki.test.e2e.ts
+++ b/tests/e2e/repo-wiki.test.e2e.ts
@@ -41,3 +41,22 @@ test(`Search results show titles (and not file names)`, async ({page}, workerInf
await expect(page.locator('#wiki-search a[href] b')).toHaveText('Page With Spaced Name');
await save_visual(page);
});
+
+test('Wiki unicode-escape', async ({page}) => {
+ await page.goto('/user2/unicode-escaping/wiki');
+ await save_visual(page);
+
+ expect(await page.locator('.ui.message.unicode-escape-prompt').count()).toEqual(3);
+
+ const unescapedElements = page.locator('.ambiguous-code-point');
+ for (let i = 0; i < await unescapedElements.count(); i++) {
+ expect(await unescapedElements.nth(i).evaluate((el) => getComputedStyle(el).border)).toEqual('0px solid rgb(24, 24, 27)');
+ }
+
+ await page.locator('a.escape-button').click();
+
+ const escapedElements = page.locator('.ambiguous-code-point');
+ for (let i = 0; i < await escapedElements.count(); i++) {
+ expect(await escapedElements.nth(i).evaluate((el) => getComputedStyle(el).border)).toEqual('1px solid rgb(202, 138, 4)');
+ }
+});
diff --git a/web_src/css/repo/wiki.css b/web_src/css/repo/wiki.css
index ba502d3216..c42e73a84c 100644
--- a/web_src/css/repo/wiki.css
+++ b/web_src/css/repo/wiki.css
@@ -19,6 +19,10 @@
min-height: 340px; /* This height matches the markdown editor's height */
}
+.repository.wiki .ui.message.unicode-escape-prompt {
+ margin-bottom: 0.5em;
+}
+
.repository.wiki .wiki-content-parts .markup {
border: 1px solid var(--color-secondary);
border-radius: var(--border-radius);
diff --git a/web_src/js/features/repo-unicode-escape.js b/web_src/js/features/repo-unicode-escape.js
index 9f0c745223..376a7ebf74 100644
--- a/web_src/js/features/repo-unicode-escape.js
+++ b/web_src/js/features/repo-unicode-escape.js
@@ -9,6 +9,11 @@ export function initUnicodeEscapeButton() {
const fileContent = btn.closest('.file-content, .non-diff-file-content, .file-preview-box');
const fileView = fileContent?.querySelectorAll('.file-code, .file-view, .file-preview');
+ if (!fileContent || !fileView) {
+ console.error('initUnicodeEscapeButton file-content or view not found');
+ return;
+ }
+
if (btn.matches('.escape-button')) {
for (const el of fileView) el.classList.add('unicode-escaped');
hideElem(btn);