Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dev:client_coding:javascript_api [2019/10/20 06:46]
zuphilip [API Methods]
dev:client_coding:javascript_api [2020/04/16 16:03] (current)
dstillman [Running Ad Hoc JavaScript in Zotero]
Line 11: Line 11:
  
   - In the Tools → Developer menu, select Run JavaScript. Opening the Error Console, which appears in the same menu, will also be helpful.   - In the Tools → Developer menu, select Run JavaScript. Opening the Error Console, which appears in the same menu, will also be helpful.
-  - In the window that opens, enter JavaScript in the Code textbox and click Run or press Cmd-R/​Ctrl-R.+  - In the window that opens, enter some JavaScript in the Code textbox and click Run or press Cmd-R/​Ctrl-R.
  
 When running **asynchronous** code containing ''​await'',​ the entered code is wrapped in an [[https://​developer.mozilla.org/​en-US/​docs/​Web/​JavaScript/​Reference/​Statements/​async_function|async function]], allowing you to wait for the resolution of promises returned by functions. Most Zotero functions that access the database, disk, or network are asynchronous. In this mode, the value of a ''​return''​ statement will be displayed in the right-hand pane upon successful completion. E.g. returning the currently selected item(s) When running **asynchronous** code containing ''​await'',​ the entered code is wrapped in an [[https://​developer.mozilla.org/​en-US/​docs/​Web/​JavaScript/​Reference/​Statements/​async_function|async function]], allowing you to wait for the resolution of promises returned by functions. Most Zotero functions that access the database, disk, or network are asynchronous. In this mode, the value of a ''​return''​ statement will be displayed in the right-hand pane upon successful completion. E.g. returning the currently selected item(s)
Line 20: Line 20:
 </​code>​ </​code>​
  
-In **synchronous** mode, the value of the final line will appear in the right-hand pane. The same result as above could be achieved in synchonous ​mode with+In **synchronous** mode, the value of the final line will appear in the right-hand pane. The same result as above could be achieved in synchronous ​mode with
  
 <code javascript>​ <code javascript>​
Line 353: Line 353:
 =====  Batch Editing ===== =====  Batch Editing =====
  
-The JavaScript API can provide ​a powerful way to script changes to your Zotero library. The common case of search-and-replace is accomplished easily using a basic script.+The JavaScript API provides ​a powerful way to script changes to your Zotero library. The common case of search-and-replace is accomplished easily using a basic script ​in the [[#​running_ad_hoc_javascript_in_zotero|JavaScript runner]].
  
 Before proceeding, back up your [[:​zotero_data|Zotero data directory]] and temporarily disable auto-sync in the Sync pane of the Zotero preferences. Before proceeding, back up your [[:​zotero_data|Zotero data directory]] and temporarily disable auto-sync in the Sync pane of the Zotero preferences.
Line 386: Line 386:
  
 https://​api.zotero.org/​itemFields?​pprint=1. https://​api.zotero.org/​itemFields?​pprint=1.
 +
 +==== Example: Creator Name Changes ====
 +
 +Edit the first four lines as necessary:
 +
 +<code javascript>​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 = Zotero.Libraries.userLibraryID;​
 +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";</​code>​
  
 ==== Example: Delete Tags By Name ==== ==== Example: Delete Tags By Name ====
dev/client_coding/javascript_api.1571568407.txt.gz · Last modified: 2019/10/20 06:46 by zuphilip