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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user