diff --git a/chrome/content/zotero/preferences/preferences_advanced.js b/chrome/content/zotero/preferences/preferences_advanced.js
index 1891b4a7f1..29338fc5b5 100644
--- a/chrome/content/zotero/preferences/preferences_advanced.js
+++ b/chrome/content/zotero/preferences/preferences_advanced.js
@@ -72,6 +72,10 @@ Zotero_Preferences.Advanced = {
+ Zotero.getString('punctuation.ellipsis'));
this.updateIndexStats();
+ this.updateLocalAPIUI();
+ document.getElementById('zotero-prefpane-advanced-enable-local-api').addEventListener('synctopreference', () => {
+ this.updateLocalAPIUI();
+ });
},
@@ -533,6 +537,35 @@ Zotero_Preferences.Advanced = {
finally {
buttons.forEach(b => b.disabled = false);
}
+ },
+
+ updateLocalAPIUI() {
+ let serverEnabled = Zotero.Prefs.get('httpServer.enabled');
+ let localAPIEnabled = Zotero.Prefs.get('httpServer.localAPI.enabled');
+
+ let checkbox = document.getElementById('zotero-prefpane-advanced-enable-local-api');
+ let availableMessage = document.getElementById('zotero-prefpane-advanced-local-api-available');
+ let serverDisabledSection = document.getElementById('zotero-prefpane-advanced-server-disabled');
+
+ if (!serverEnabled) {
+ checkbox.disabled = true;
+ availableMessage.hidden = true;
+ serverDisabledSection.hidden = false;
+ return;
+ }
+
+ checkbox.disabled = false;
+ availableMessage.hidden = !localAPIEnabled;
+ serverDisabledSection.hidden = true;
+
+ document.l10n.setArgs(availableMessage, {
+ url: `http://localhost:${Zotero.Prefs.get('httpServer.port')}/api/`
+ });
+ },
+
+ enableServerForLocalAPI() {
+ Zotero.Prefs.set('httpServer.enabled', true);
+ Zotero.Utilities.Internal.quit(true);
}
};
diff --git a/chrome/content/zotero/preferences/preferences_advanced.xhtml b/chrome/content/zotero/preferences/preferences_advanced.xhtml
index ea99c36d0c..f217ecda6a 100644
--- a/chrome/content/zotero/preferences/preferences_advanced.xhtml
+++ b/chrome/content/zotero/preferences/preferences_advanced.xhtml
@@ -36,7 +36,27 @@
-
+
+
+
+
+
+
+
+
diff --git a/chrome/locale/en-US/zotero/preferences.ftl b/chrome/locale/en-US/zotero/preferences.ftl
index f115a247d9..9cc9809a06 100644
--- a/chrome/locale/en-US/zotero/preferences.ftl
+++ b/chrome/locale/en-US/zotero/preferences.ftl
@@ -71,6 +71,10 @@ preferences-styleManager-add-button =
preferences-advanced-enable-local-api =
.label = Allow other applications on this computer to communicate with { -app-name }
+preferences-advanced-local-api-available = Available at { $url }
+preferences-advanced-server-disabled = The { -app-name } HTTP server is disabled.
+preferences-advanced-server-enable-and-restart =
+ .label = Enable and Restart
preferences-advanced-language-and-region-title = Language and Region
preferences-advanced-enable-bidi-ui =
.label = Enable bidirectional text editing utilities
diff --git a/scss/preferences/_advanced.scss b/scss/preferences/_advanced.scss
index 5f92a20f71..a6af0a42c7 100644
--- a/scss/preferences/_advanced.scss
+++ b/scss/preferences/_advanced.scss
@@ -78,3 +78,11 @@
display: flex;
gap: 6px;
}
+
+#zotero-prefpane-advanced-server-disabled {
+ color: var(--accent-red);
+
+ button {
+ margin-inline-start: 6px;
+ }
+}