diff --git a/chrome/content/zotero/preferences/preferences_advanced.js b/chrome/content/zotero/preferences/preferences_advanced.js index 29338fc5b5..0eab089f58 100644 --- a/chrome/content/zotero/preferences/preferences_advanced.js +++ b/chrome/content/zotero/preferences/preferences_advanced.js @@ -50,18 +50,6 @@ Zotero_Preferences.Advanced = { document.getElementById('baseAttachmentPath').addEventListener('syncfrompreference', () => Zotero_Preferences.Attachment_Base_Directory.updateUI()); - document.getElementById('data-dir').addEventListener('syncfrompreference', (event) => { - event.target.value = this.onDataDirLoad(); - }); - - document.getElementById('data-dir').addEventListener('synctopreference', () => { - this.onDataDirUpdate(); - }); - - document.getElementById('data-dir-path').addEventListener('syncfrompreference', (event) => { - event.target.value = this.getDataDirPath(); - }); - this.onDataDirLoad(); document.getElementById('fulltext-rebuildIndex').setAttribute('label', @@ -354,64 +342,54 @@ Zotero_Preferences.Advanced = { onDataDirLoad: function () { - var useDataDir = Zotero.Prefs.get('useDataDir'); - var dataDir = Zotero.Prefs.get('lastDataDir') || Zotero.Prefs.get('dataDir'); var currentDir = Zotero.DataDirectory.dir; - var defaultDataDir = Zotero.DataDirectory.defaultDir; if (Zotero.forceDataDir) { document.getElementById('command-line-data-dir-path').textContent = currentDir; document.getElementById('command-line-data-dir').hidden = false; - document.getElementById('data-dir').hidden = true; } - // Change "Use profile directory" label to home directory location unless using profile dir - if (useDataDir || currentDir == defaultDataDir) { - document.getElementById('default-data-dir').setAttribute( - 'label', Zotero.getString('dataDir.default', Zotero.DataDirectory.defaultDir) - ); - } - - // Don't show custom data dir as in-use if set to the default - if (dataDir == defaultDataDir) { - useDataDir = false; - } - - document.getElementById('data-dir-path').setAttribute('disabled', !useDataDir); document.getElementById('migrate-data-dir').setAttribute( 'hidden', !Zotero.DataDirectory.canMigrate() ); - - return useDataDir; + + let changeDataDir = document.getElementById("change-data-dir"); + changeDataDir.hidden = this._usingDefaultDataDir(); + + let customDataDir = document.getElementById("custom-data-dir"); + customDataDir.hidden = !this._usingDefaultDataDir(); + + let revertToDefaultDir = document.getElementById("reset-data-dir"); + let revertToDefaultDirLabel = document.getElementById("default-data-dir"); + revertToDefaultDir.hidden = this._usingDefaultDataDir(); + revertToDefaultDirLabel.hidden = this._usingDefaultDataDir(); + document.l10n.setArgs(revertToDefaultDirLabel, { directory: Zotero.DataDirectory.defaultDir }); + this.setDataDirInput(); }, - onDataDirUpdate: Zotero.Promise.coroutine(function* (forceNew) { - var radiogroup = document.getElementById('data-dir'); - var newUseDataDir = radiogroup.selectedIndex == 1; - - if (!forceNew && newUseDataDir && !this._usingDefaultDataDir()) { - return; - } + dataDirUpdate: Zotero.Promise.coroutine(function* (isCustomSelection) { + if (!isCustomSelection && this._usingDefaultDataDir()) return; // This call shows a filepicker if needed, forces a restart if required, and does nothing if // cancel was pressed or value hasn't changed yield Zotero.DataDirectory.choose( true, - !newUseDataDir, + !isCustomSelection, () => Zotero.launchURL('https://www.zotero.org/support/zotero_data') ); - radiogroup.selectedIndex = this._usingDefaultDataDir() ? 0 : 1; }), - chooseDataDir: function() { - let radiogroup = document.getElementById('data-dir'); - if (radiogroup.selectedIndex == 0) { - radiogroup.selectedIndex = 1; + setDataDirInput: async function () { + var filefield = document.getElementById('data-dir-path'); + var path = Zotero.Prefs.get('dataDir'); + if (path && await IOUtils.exists(path)) { + filefield.style.backgroundImage = 'url(moz-icon://' + Zotero.File.pathToFileURI(path) + '?size=16)'; + filefield.value = path; } else { - this.onDataDirUpdate(true); + filefield.value = ''; } }, diff --git a/chrome/content/zotero/preferences/preferences_advanced.xhtml b/chrome/content/zotero/preferences/preferences_advanced.xhtml index 6f07dd31b3..a0185e1965 100644 --- a/chrome/content/zotero/preferences/preferences_advanced.xhtml +++ b/chrome/content/zotero/preferences/preferences_advanced.xhtml @@ -87,6 +87,7 @@ readonly="true" flex="1" tabindex="0" + class="directory-path" aria-labelledby="baseAttachmentPathLabel"/>