forgejo/web_src/js/features/repo-unicode-escape.js
zokki 262a2253aa fix(ui): make unicode escape work in wiki (#8923)
Fixes #4118

- Unicode escape now works in wiki
- edit and escape buttons are better placed
- edit icon is now under the warning

Before: https://codeberg.org/attachments/4414f0cb-776a-4e62-a3b5-99de0914bf26
After: https://codeberg.org/attachments/93aad13f-e36b-42f9-a827-7ff7259da581

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8923
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
Co-authored-by: zokki <zokki.softwareschmiede@gmail.com>
Co-committed-by: zokki <zokki.softwareschmiede@gmail.com>
2025-09-10 08:10:23 +02:00

32 lines
1.4 KiB
JavaScript

import {hideElem, queryElemSiblings, showElem, toggleElem} from '../utils/dom.js';
export function initUnicodeEscapeButton() {
document.addEventListener('click', (e) => {
const btn = e.target.closest('.escape-button, .unescape-button, .toggle-escape-button');
if (!btn) return;
e.preventDefault();
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);
showElem(queryElemSiblings(btn, '.unescape-button'));
} else if (btn.matches('.unescape-button')) {
for (const el of fileView) el.classList.remove('unicode-escaped');
hideElem(btn);
showElem(queryElemSiblings(btn, '.escape-button'));
} else if (btn.matches('.toggle-escape-button')) {
const isEscaped = fileView[0]?.classList.contains('unicode-escaped');
for (const el of fileView) el.classList.toggle('unicode-escaped', !isEscaped);
toggleElem(fileContent.querySelectorAll('.unescape-button'), !isEscaped);
toggleElem(fileContent.querySelectorAll('.escape-button'), isEscaped);
}
});
}