- Add "Rename File[s] from Parent Metadata" context menu option to child file attachments, using extensions.zotero.attachmentRenameFormatString
- Only rename attachment title if it was already identical to filename Somebody should probably test this.
This commit is contained in:
parent
9c28c6bb9c
commit
63586518df
3 changed files with 95 additions and 17 deletions
|
@ -1682,7 +1682,8 @@ var ZoteroPane = new function()
|
||||||
loadReport: 12,
|
loadReport: 12,
|
||||||
sep4: 13,
|
sep4: 13,
|
||||||
recognizePDF: 14,
|
recognizePDF: 14,
|
||||||
reindexItem: 15
|
renameAttachments: 15,
|
||||||
|
reindexItem: 16
|
||||||
};
|
};
|
||||||
|
|
||||||
var menu = document.getElementById('zotero-itemmenu');
|
var menu = document.getElementById('zotero-itemmenu');
|
||||||
|
@ -1737,12 +1738,33 @@ var ZoteroPane = new function()
|
||||||
else {
|
else {
|
||||||
hide.push(m.recognizePDF);
|
hide.push(m.recognizePDF);
|
||||||
}
|
}
|
||||||
if (canIndex || canRecognize) {
|
|
||||||
|
|
||||||
|
// If all items are child attachments, show rename option
|
||||||
|
var canRename = true;
|
||||||
|
for (var i=0; i<items.length; i++) {
|
||||||
|
var item = items[i];
|
||||||
|
// Same check as in rename function
|
||||||
|
if (!item.isAttachment() || !item.getSource() || item.attachmentLinkMode == Zotero.Attachments.LINK_MODE_LINKED_URL) {
|
||||||
|
canRename = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (canRename) {
|
||||||
|
show.push(m.renameAttachments);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hide.push(m.renameAttachments);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add in attachment separator
|
||||||
|
if (canIndex || canRecognize || canRename) {
|
||||||
show.push(m.sep4);
|
show.push(m.sep4);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
hide.push(m.sep4);
|
hide.push(m.sep4);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// Single item selected
|
// Single item selected
|
||||||
else
|
else
|
||||||
|
@ -1771,17 +1793,16 @@ var ZoteroPane = new function()
|
||||||
if (item.isAttachment()) {
|
if (item.isAttachment()) {
|
||||||
var showSep4 = false;
|
var showSep4 = false;
|
||||||
hide.push(m.duplicateItem);
|
hide.push(m.duplicateItem);
|
||||||
if (Zotero.Fulltext.pdfConverterIsRegistered()) {
|
// If not linked URL, show reindex line
|
||||||
// If not linked URL, show reindex line
|
if (Zotero.Fulltext.pdfConverterIsRegistered()
|
||||||
if (Zotero.Fulltext.canReindex(item.id)) {
|
&& Zotero.Fulltext.canReindex(item.id)) {
|
||||||
show.push(m.reindexItem);
|
show.push(m.reindexItem);
|
||||||
showSep4 = true;
|
showSep4 = true;
|
||||||
}
|
|
||||||
else {
|
|
||||||
hide.push(m.reindexItem);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
hide.push(m.reindexItem);
|
||||||
|
}
|
||||||
|
|
||||||
if (Zotero_RecognizePDF.canRecognize(item)) {
|
if (Zotero_RecognizePDF.canRecognize(item)) {
|
||||||
show.push(m.recognizePDF);
|
show.push(m.recognizePDF);
|
||||||
showSep4 = true;
|
showSep4 = true;
|
||||||
|
@ -1790,6 +1811,15 @@ var ZoteroPane = new function()
|
||||||
hide.push(m.recognizePDF);
|
hide.push(m.recognizePDF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Attachment rename option
|
||||||
|
if (item.getSource() && item.attachmentLinkMode != Zotero.Attachments.LINK_MODE_LINKED_URL) {
|
||||||
|
show.push(m.renameAttachments);
|
||||||
|
showSep4 = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hide.push(m.renameAttachments);
|
||||||
|
}
|
||||||
|
|
||||||
if (showSep4) {
|
if (showSep4) {
|
||||||
show.push(m.sep4);
|
show.push(m.sep4);
|
||||||
}
|
}
|
||||||
|
@ -1799,7 +1829,7 @@ var ZoteroPane = new function()
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
show.push(m.duplicateItem);
|
show.push(m.duplicateItem);
|
||||||
hide.push(m.sep4, m.reindexItem, m.recognizePDF);
|
hide.push(m.sep4, m.reindexItem, m.recognizePDF, m.renameAttachments);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1817,7 +1847,7 @@ var ZoteroPane = new function()
|
||||||
disable.push(m.showInLibrary, m.duplicateItem, m.deleteItem,
|
disable.push(m.showInLibrary, m.duplicateItem, m.deleteItem,
|
||||||
m.deleteFromLibrary, m.exportItems, m.createBib, m.loadReport);
|
m.deleteFromLibrary, m.exportItems, m.createBib, m.loadReport);
|
||||||
hide.push(m.addNote, m.attachSnapshot, m.attachLink, m.sep2, m.sep4, m.reindexItem,
|
hide.push(m.addNote, m.attachSnapshot, m.attachLink, m.sep2, m.sep4, m.reindexItem,
|
||||||
m.recognizePDF);
|
m.recognizePDF, m.renameAttachments);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove from collection
|
// Remove from collection
|
||||||
|
@ -1838,6 +1868,8 @@ var ZoteroPane = new function()
|
||||||
menu.childNodes[m.loadReport].setAttribute('label', Zotero.getString('pane.items.menu.generateReport' + multiple));
|
menu.childNodes[m.loadReport].setAttribute('label', Zotero.getString('pane.items.menu.generateReport' + multiple));
|
||||||
menu.childNodes[m.reindexItem].setAttribute('label', Zotero.getString('pane.items.menu.reindexItem' + multiple));
|
menu.childNodes[m.reindexItem].setAttribute('label', Zotero.getString('pane.items.menu.reindexItem' + multiple));
|
||||||
menu.childNodes[m.recognizePDF].setAttribute('label', Zotero.getString('pane.items.menu.recognizePDF' + multiple));
|
menu.childNodes[m.recognizePDF].setAttribute('label', Zotero.getString('pane.items.menu.recognizePDF' + multiple));
|
||||||
|
// TODO: localize
|
||||||
|
menu.childNodes[m.renameAttachments].setAttribute('label', multiple ? "Rename Files from Parent Metadata" : "Rename File from Parent Metadata");
|
||||||
|
|
||||||
for (var i in disable)
|
for (var i in disable)
|
||||||
{
|
{
|
||||||
|
@ -2751,6 +2783,53 @@ var ZoteroPane = new function()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
this.renameSelectedAttachmentsFromParents = function () {
|
||||||
|
if (!this.canEdit()) {
|
||||||
|
this.displayCannotEditLibraryMessage();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var items = this.getSelectedItems();
|
||||||
|
|
||||||
|
for (var i=0; i<items.length; i++) {
|
||||||
|
var item = items[i];
|
||||||
|
|
||||||
|
if (!item.isAttachment() || !item.getSource() || item.attachmentLinkMode == Zotero.Attachments.LINK_MODE_LINKED_URL) {
|
||||||
|
throw('Item ' + itemID + ' is not a child file attachment in ZoteroPane.renameAttachmentFromParent()');
|
||||||
|
}
|
||||||
|
|
||||||
|
var file = item.getFile();
|
||||||
|
if (!file) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the attachment title was the same as the filename, change it too
|
||||||
|
var renameTitle = item.getField('title') == file.leafName;
|
||||||
|
|
||||||
|
var parentItemID = item.getSource();
|
||||||
|
var newName = Zotero.Attachments.getFileBaseNameFromItem(parentItemID);
|
||||||
|
|
||||||
|
var ext = file.leafName.match(/[^\.]+$/);
|
||||||
|
if (ext) {
|
||||||
|
newName = newName + '.' + ext;
|
||||||
|
}
|
||||||
|
|
||||||
|
var renamed = item.renameAttachmentFile(newName);
|
||||||
|
if (renamed !== true) {
|
||||||
|
Zotero.debug("Could not rename file (" + renamed + ")");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (renameTitle) {
|
||||||
|
item.setField('title', newName);
|
||||||
|
item.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function relinkAttachment(itemID) {
|
function relinkAttachment(itemID) {
|
||||||
if (!this.canEdit()) {
|
if (!this.canEdit()) {
|
||||||
this.displayCannotEditLibraryMessage();
|
this.displayCannotEditLibraryMessage();
|
||||||
|
|
|
@ -109,6 +109,7 @@
|
||||||
<menuitem oncommand="Zotero_Report_Interface.loadItemReport()"/>
|
<menuitem oncommand="Zotero_Report_Interface.loadItemReport()"/>
|
||||||
<menuseparator/>
|
<menuseparator/>
|
||||||
<menuitem oncommand="Zotero_RecognizePDF.recognizeSelected();"/>
|
<menuitem oncommand="Zotero_RecognizePDF.recognizeSelected();"/>
|
||||||
|
<menuitem oncommand="ZoteroPane.renameSelectedAttachmentsFromParents()"/>
|
||||||
<menuitem oncommand="ZoteroPane.reindexItem();"/>
|
<menuitem oncommand="ZoteroPane.reindexItem();"/>
|
||||||
</popup>
|
</popup>
|
||||||
</popupset>
|
</popupset>
|
||||||
|
|
|
@ -926,9 +926,7 @@ Zotero.Attachments = new function(){
|
||||||
formatString = rpl('year');
|
formatString = rpl('year');
|
||||||
formatString = rpl('title');
|
formatString = rpl('title');
|
||||||
|
|
||||||
// Strip potentially invalid characters
|
formatString = Zotero.File.getValidFileName(formatString);
|
||||||
// See http://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words
|
|
||||||
formatString = formatString.replace(/[\/\\\?\*:|"<>\.]/g, '');
|
|
||||||
return formatString;
|
return formatString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue