Fix attachment box rename

This commit is contained in:
windingwind 2024-01-24 16:30:23 +08:00 committed by Dan Stillman
parent 3472d6cabe
commit 4f73ea0cfa
3 changed files with 50 additions and 8 deletions

View file

@ -93,6 +93,8 @@
this._preview = null;
this._isRendering = false;
this._isEditingFilename = false;
}
get mode() {
@ -204,8 +206,13 @@
this._id('url-menu').openPopupAtScreen(event.screenX, event.screenY, true);
});
this._id("fileName").addEventListener('blur', () => {
this.editFileName(this._id("fileName").value);
let fileName = this._id("fileName");
fileName.addEventListener('focus', () => {
this._isEditingFilename = true;
});
fileName.addEventListener('blur', () => {
this.editFileName(fileName.value);
this._isEditingFilename = false;
});
this._preview = this._id("attachment-preview");
@ -280,6 +287,8 @@
}
Zotero.debug('Refreshing attachment box');
this._isRendering = true;
// Cancel editing filename when refreshing
this._isEditingFilename = false;
if (this.usePreview) {
this._preview.item = this.item;
@ -350,7 +359,7 @@
else {
fileNameRow.hidden = true;
}
this._id("fileName").readonly = !this.editable;
this._id("fileName").toggleAttribute("readonly", (!this.editable || !fileExists));
// Page count
if (this.displayPages && this._item.isPDFAttachment()) {
@ -486,18 +495,48 @@
}
async editFileName(newFilename) {
if (!this._isEditingFilename) {
return;
}
let item = this.item;
// Rename associated file
let nsIPS = Services.prompt;
let getExtension = function (filename) {
const extRegex = /\.\w{1,10}$/;
if (extRegex.test(filename)) {
return filename.match(extRegex)[0];
}
return "";
};
newFilename = newFilename.trim();
let oldFilename = item.getFilename();
if (oldFilename === newFilename) {
return;
}
if (newFilename.search(/\.\w{1,10}$/) == -1) {
// Don't allow empty filename
if (!newFilename) {
this.render();
return;
}
let newExt = getExtension(newFilename);
let oldExt = getExtension(oldFilename);
if (!newExt && oldExt) {
// User did not specify extension. Use current
let oldExt = oldFilename.match(/\.\w{1,10}$/);
if (oldExt) newFilename += oldExt[0];
newFilename += oldExt;
newExt = oldExt;
}
if (newExt !== oldExt && oldExt) {
// User changed extension. Confirm
let index = Zotero.Prompt.confirm({
window,
title: Zotero.getString('general.warning'),
text: Zotero.getString('pane.item.attachments.rename.confirmExtChange.text', [oldExt, newExt, Zotero.appName]),
button0: Zotero.getString('pane.item.attachments.rename.confirmExtChange.keep', oldExt),
button1: Zotero.getString('pane.item.attachments.rename.confirmExtChange.change', newExt),
});
if (index == 0) {
newFilename = newFilename.replace(/\.\w{1,10}$/, oldExt);
}
}
let renamed = await item.renameAttachmentFile(newFilename);
if (renamed == -1) {

View file

@ -81,7 +81,7 @@ Zotero.Prompt = {
typeof button0 == 'number' ? null : button0,
typeof button1 == 'number' ? null : button1,
typeof button2 == 'number' ? null : button2,
checkLabel, checkbox
checkLabel, typeof checkbox == 'object' ? checkbox : {}
);
}
};
};

View file

@ -418,6 +418,9 @@ pane.item.notes.ignoreMissingImage = Some note images are missing and cannot be
pane.item.attachments.rename.title = New title:
pane.item.attachments.rename.renameAssociatedFile = Rename associated file
pane.item.attachments.rename.error = An error occurred while renaming the file.
pane.item.attachments.rename.confirmExtChange.text = Are you sure you want to change the file extension from “%S” to “%S”?\n\nIf you change the extension, the file may open with a different application outside of %S.
pane.item.attachments.rename.confirmExtChange.keep = Keep %S
pane.item.attachments.rename.confirmExtChange.change = Use %S
pane.item.attachments.fileNotFound.title = File Not Found
pane.item.attachments.fileNotFound.text1 = The attached file could not be found.
pane.item.attachments.fileNotFound.text1.path = The attached file could not be found at the following path: