How to let the Creator Name Changes codes work only for the seletced items?
The changes occur for the whole library, I would like to know how to use it only for the seclected items?
The codes are from https://www.zotero.org/support/dev/client_coding/javascript_api
The codes are from https://www.zotero.org/support/dev/client_coding/javascript_api
var oldName = "Robert L. Smith";
var newFirstName = "Robert";
var newLastName = "Smith";
var newFieldMode = 0; // 0: two-field, 1: one-field (with empty first name)
var s = new Zotero.Search();
s.libraryID = ZoteroPane.getSelectedLibraryID();
s.addCondition('creator', 'is', oldName);
var ids = await s.search();
if (!ids.length) {
return "No items found";
}
await Zotero.DB.executeTransaction(async function () {
for (let id of ids) {
let item = await Zotero.Items.getAsync(id);
let creators = item.getCreators();
let newCreators = [];
for (let creator of creators) {
if (`${creator.firstName} ${creator.lastName}`.trim() == oldName) {
creator.firstName = newFirstName;
creator.lastName = newLastName;
creator.fieldMode = newFieldMode;
}
newCreators.push(creator);
}
item.setCreators(newCreators);
await item.save();
}
});
return ids.length + " item(s) updated";
such as
var tagName = 'something';
s.addCondition('tag', 'is', tagName);
How can I search for the selected items.
These codes
zoteroPane = Zotero.getActiveZoteroPane();
items = zoteroPane.getSelectedItems();
s.addCondition('items', 'is', items);
...
are invalid
var ids = ZoteroPane.getSelectedItems().map(item => item.id);
var oldName = "Robert L. Smith";
var newFirstName = "Robert";
var newLastName = "Smith";
var newFieldMode = 0; // 0: two-field, 1: one-field (with empty first name)
var s = new Zotero.Search();
s.libraryID = ZoteroPane.getSelectedLibraryID();
s.addCondition('creator', 'is', oldName);
//var ids = await s.search();
var ids = ZoteroPane.getSelectedItems().map(item => item.id);
if (!ids.length) {
return "No items found";
}
await Zotero.DB.executeTransaction(async function () {
for (let id of ids) {
let item = await Zotero.Items.getAsync(id);
let creators = item.getCreators();
let newCreators = [];
for (let creator of creators) {
if (`${creator.firstName} ${creator.lastName}`.trim() == oldName) {
creator.firstName = newFirstName;
creator.lastName = newLastName;
creator.fieldMode = newFieldMode;
}
newCreators.push(creator);
}
item.setCreators(newCreators);
await item.save();
}
});
return ids.length + " item(s) updated";
return me the numbers items I selected, even no changes occur.