diff --git a/app/assets/css/launcher.css b/app/assets/css/launcher.css index 8088d987..56816997 100644 --- a/app/assets/css/launcher.css +++ b/app/assets/css/launcher.css @@ -1233,34 +1233,26 @@ input:checked + .toggleSwitchSlider:before { height: 30px; } -/* File input for file selection. */ -.settingsFileSelSel { - width: 0px; - height: 0px; - opacity: 0; -} -.settingsFileSelSel::-webkit-file-upload-button { - display: none; -} - -/* Wrapper label to add a custom style to the file input. */ -.settingsFileSelLabel { - border-left: 0px; +/* File selection button. */ +.settingsFileSelButton { + border: 0px; border-radius: 0px 3px 3px 0px; font-size: 12px; padding: 0px 5px; cursor: pointer; - display: flex; - align-items: center; background: rgba(126, 126, 126, 0.57); transition: 0.25s ease; white-space: nowrap; + outline: none; } -.settingsFileSelLabel:hover, -.settingsFileSelLabel:focus, -.settingsFileSelSel:focus ~ #settingsJavaExecLabel { +.settingsFileSelButton:hover, +.settingsFileSelButton:focus { text-shadow: 0px 0px 20px white; } +.settingsFileSelButton:active { + text-shadow: 0px 0px 20px rgba(255, 255, 255, 0.75); + color: rgba(255, 255, 255, 0.75); +} /* Description for the file selector. */ .settingsFileSelDesc { diff --git a/app/assets/js/scripts/settings.js b/app/assets/js/scripts/settings.js index a2e7d317..23ef79c0 100644 --- a/app/assets/js/scripts/settings.js +++ b/app/assets/js/scripts/settings.js @@ -42,15 +42,34 @@ bindSettingsSelect() function bindFileSelectors(){ - for(let ele of document.getElementsByClassName('settingsFileSelSel')){ - if(ele.id === 'settingsJavaExecSel'){ - ele.onchange = (e) => { - ele.previousElementSibling.value = ele.files[0].path - populateJavaExecDetails(ele.previousElementSibling.value) + for(let ele of document.getElementsByClassName('settingsFileSelButton')){ + + ele.onclick = async e => { + const isJavaExecSel = ele.id === 'settingsJavaExecSel' + const directoryDialog = ele.hasAttribute('dialogDirectory') && ele.getAttribute('dialogDirectory') == 'true' + const properties = directoryDialog ? ['openDirectory', 'createDirectory'] : ['openFile'] + + const options = { + properties } - } else { - ele.onchange = (e) => { - ele.previousElementSibling.value = ele.files[0].path + + if(ele.hasAttribute('dialogTitle')) { + options.title = ele.getAttribute('dialogTitle') + } + + if(isJavaExecSel && process.platform === 'win32') { + options.filters = [ + { name: 'Executables', extensions: ['exe'] }, + { name: 'All Files', extensions: ['*'] } + ] + } + + const res = await remote.dialog.showOpenDialog(remote.getCurrentWindow(), options) + if(!res.canceled) { + ele.previousElementSibling.value = res.filePaths[0] + if(isJavaExecSel) { + populateJavaExecDetails(ele.previousElementSibling.value) + } } } } @@ -694,7 +713,7 @@ function bindDropinModFileSystemButton(){ const fsBtn = document.getElementById('settingsDropinFileSystemButton') fsBtn.onclick = () => { DropinModUtil.validateDir(CACHE_SETTINGS_MODS_DIR) - shell.openItem(CACHE_SETTINGS_MODS_DIR) + shell.openPath(CACHE_SETTINGS_MODS_DIR) } fsBtn.ondragenter = e => { e.dataTransfer.dropEffect = 'move' @@ -818,7 +837,7 @@ function bindShaderpackButton() { spBtn.onclick = () => { const p = path.join(CACHE_SETTINGS_INSTANCE_DIR, 'shaderpacks') DropinModUtil.validateDir(p) - shell.openItem(p) + shell.openPath(p) } spBtn.ondragenter = e => { e.dataTransfer.dropEffect = 'move' diff --git a/app/settings.ejs b/app/settings.ejs index 408bb85e..f5505cfe 100644 --- a/app/settings.ejs +++ b/app/settings.ejs @@ -203,8 +203,7 @@ - > - +