UI: Decode URL in text field for better readability

**Optimize visual display:**
Decodes the URL displayed in the input field using `decodeURIComponent`. This makes the displayed link more user-friendly and intuitive, avoiding a screen full of percent signs in internationalized scenarios where collection folder names contain non-English characters or special symbols.

**Ensure copy safety:**
Preserves the original, encoded standard URL internally as `_completedUrl`. Clicking the "Copy" button or manually selecting the entire text box to copy will still place the original, encoded standard link into the clipboard.
This commit is contained in:
bb2
2026-05-23 19:57:49 +08:00
committed by GitHub
parent dee584b9d0
commit ccfbef066b

View File

@@ -38,6 +38,19 @@ export class UrlTextHandler {
this._copyButton = copyButton;
this._userIndex = -1;
// Only encode the URL if the entire text is selected.
this._element.addEventListener("copy", (event) => {
const selectedText = window.getSelection().toString();
const totalText = this._element.value;
// Check if the selected text length matches the total text length.
if (selectedText && selectedText.length === totalText.length) {
event.preventDefault();
event.clipboardData.setData("text/plain", this._completedUrl);
}
// Allow default copying if only a part of the text is selected.
});
this._element.addEventListener("focusin", () => {
this._element.setSelectionRange(0, 99999);
this._updateScroll();
@@ -88,7 +101,7 @@ export class UrlTextHandler {
_oncopy() {
if (!this._element.value) return;
navigator.clipboard.writeText(this._element.value).then(() => {
navigator.clipboard.writeText(this._completedUrl).then(() => {
if (this._copyButton) {
this._copyButton.classList.add("copied");
this._copyButton.title = "Copied!";
@@ -108,7 +121,8 @@ export class UrlTextHandler {
* @param {string} href The href to set.
*/
setHref(href) {
this._element.value = completeHref(href);
this._completedUrl = completeHref(href);
this._element.value = decodeURIComponent(this._completedUrl);
this._update_username_index();
this._updateScroll();