diff --git a/src/js/tabs/firmware_flasher.js b/src/js/tabs/firmware_flasher.js index 02f876a8853..f62944730e8 100644 --- a/src/js/tabs/firmware_flasher.js +++ b/src/js/tabs/firmware_flasher.js @@ -92,7 +92,7 @@ firmware_flasher.initialize = function (callback) { self.flashingMessage(`${i18n.getMessage('firmwareFlasherFirmwareOnlineLoaded', { filename: fileName, bytes: self.parsed_hex.bytes_total })}`, self.FLASH_MESSAGE_TYPES.NEUTRAL); } - self.enableFlashing(true); + self.enableFlashButton(true); } function showReleaseNotes(summary) { @@ -156,7 +156,7 @@ firmware_flasher.initialize = function (callback) { showLoadedHex(key); } else { self.flashingMessage(i18n.getMessage('firmwareFlasherHexCorrupted'), self.FLASH_MESSAGE_TYPES.INVALID); - self.enableFlashing(false); + self.enableFlashButton(false); } }); } @@ -165,7 +165,7 @@ firmware_flasher.initialize = function (callback) { self.localFirmwareLoaded = false; processHex(data, key); - $("a.load_remote_file").removeClass('disabled'); + self.enableLoadRemoteFileButton(true); $("a.load_remote_file").text(i18n.getMessage('firmwareFlasherButtonLoadOnline')); } @@ -299,11 +299,12 @@ firmware_flasher.initialize = function (callback) { loadSponsor(); - buildType_e.change(function() { + buildType_e.on('change', function() { + self.enableLoadRemoteFileButton(false); + tracking.setFirmwareData(tracking.DATA.FIRMWARE_CHANNEL, $('option:selected', this).text()); - $("a.load_remote_file").addClass('disabled'); - const build_type = $(this).val(); + const build_type = buildType_e.val(); $('select[name="board"]').empty() .append($(``)); @@ -327,7 +328,7 @@ firmware_flasher.initialize = function (callback) { $('div.release_info').slideUp(); if (!self.localFirmwareLoaded) { - self.enableFlashing(false); + self.enableFlashButton(false); self.flashingMessage(i18n.getMessage('firmwareFlasherLoadFirmwareFile'), self.FLASH_MESSAGE_TYPES.NEUTRAL); if (self.parsed_hex && self.parsed_hex.bytes_total) { // Changing the board triggers a version change, so we need only dump it here. @@ -369,7 +370,7 @@ firmware_flasher.initialize = function (callback) { setBoardConfig(response.configuration); } - $("a.load_remote_file").removeClass('disabled'); + self.enableLoadRemoteFileButton(true); } self.releaseLoader.loadTarget(target, release, onTargetDetail); @@ -452,8 +453,8 @@ firmware_flasher.initialize = function (callback) { } }); - $('select[name="board"]').change(function() { - $("a.load_remote_file").addClass('disabled'); + $('select[name="board"]').on('change', function() { + self.enableLoadRemoteFileButton(false); let target = $(this).val(); // exception for board flashed with local custom firmware @@ -473,7 +474,7 @@ firmware_flasher.initialize = function (callback) { $('div.build_configuration').slideUp(); if (!self.localFirmwareLoaded) { - self.enableFlashing(false); + self.enableFlashButton(false); } const versions_e = $('select[name="firmware_version"]'); @@ -814,8 +815,8 @@ firmware_flasher.initialize = function (callback) { $('input.flash_manual_baud_rate').change(); // UI Hooks - $('a.load_file').click(function () { - self.enableFlashing(false); + $('a.load_file').on('click', function () { + self.enableFlashButton(false); self.developmentFirmwareLoaded = false; tracking.setFirmwareData(tracking.DATA.FIRMWARE_CHANNEL, undefined); @@ -874,7 +875,7 @@ firmware_flasher.initialize = function (callback) { } if ((self.isConfigLocal && self.parsed_hex && !self.localFirmwareLoaded) || self.localFirmwareLoaded) { - self.enableFlashing(true); + self.enableFlashButton(true); self.flashingMessage(i18n.getMessage('firmwareFlasherFirmwareLocalLoaded', self.parsed_hex.bytes_total), self.FLASH_MESSAGE_TYPES.NEUTRAL); } } @@ -896,8 +897,13 @@ firmware_flasher.initialize = function (callback) { }, ); - $('a.load_remote_file').click(function (evt) { - self.enableFlashing(false); + $('a.load_remote_file').on('click', function (evt) { + if (!self.selectedBoard) { + return; + } + + self.enableLoadRemoteFileButton(false); + self.enableFlashButton(false); self.localFirmwareLoaded = false; self.developmentFirmwareLoaded = buildTypesToShow[$('select[name="build_type"]').val()].tag === 'firmwareFlasherOptionLabelBuildTypeDevelopment'; @@ -910,7 +916,7 @@ firmware_flasher.initialize = function (callback) { function onLoadFailed() { $('span.progressLabel').attr('i18n','firmwareFlasherFailedToLoadOnlineFirmware').removeClass('i18n-replaced'); - $("a.load_remote_file").removeClass('disabled'); + self.enableLoadRemoteFileButton(true); $("a.load_remote_file").text(i18n.getMessage('firmwareFlasherButtonLoadOnline')); i18n.localizePage(); } @@ -1009,7 +1015,7 @@ firmware_flasher.initialize = function (callback) { } updateStatus('Processing', response.key, retries * 10, false); - retries = retries + 1; + retries++; }); }, 5000); }); @@ -1018,7 +1024,7 @@ firmware_flasher.initialize = function (callback) { if (self.targetDetail) { // undefined while list is loading or while running offline $("a.load_remote_file").text(i18n.getMessage('firmwareFlasherButtonDownloading')); - $("a.load_remote_file").addClass('disabled'); + self.enableLoadRemoteFileButton(false); showReleaseNotes(self.targetDetail); @@ -1031,9 +1037,10 @@ firmware_flasher.initialize = function (callback) { const exitDfuElement = $('a.exit_dfu'); - exitDfuElement.click(function () { + exitDfuElement.on('click', function () { if (!exitDfuElement.hasClass('disabled')) { - exitDfuElement.addClass("disabled"); + self.enableDfuExitButton(false); + if (!GUI.connect_lock) { // button disabled while flashing is in progress tracking.sendEvent(tracking.EVENT_CATEGORIES.FLASHING, 'ExitDfu', null); try { @@ -1050,7 +1057,7 @@ firmware_flasher.initialize = function (callback) { if (GUI.active_tab === 'firmware_flasher') { if (!GUI.connect_lock) { if ($('option:selected', this).data().isDFU) { - exitDfuElement.removeClass('disabled'); + self.enableDfuExitButton(true); } else { // Porthandler resets board on port detect if (self.boardNeedsVerification) { @@ -1058,19 +1065,26 @@ firmware_flasher.initialize = function (callback) { self.boardNeedsVerification = false; verifyBoard(); } - - $("a.load_remote_file").removeClass('disabled'); - $("a.load_file").removeClass('disabled'); - exitDfuElement.addClass('disabled'); + if (self.selectedBoard) { + self.enableLoadRemoteFileButton(true); + } + self.enableLoadFileButton(true); + self.enableDfuExitButton(false); } } updateDetectBoardButton(); } }).trigger('change'); - $('a.flash_firmware').click(function () { + $('a.flash_firmware').on('click', function () { + const flashButtonElement = $(this); + + if (!flashButtonElement.hasClass('disabled')) { + self.enableFlashButton(false); + self.enableDfuExitButton(false); + self.enableLoadRemoteFileButton(false); + self.enableLoadFileButton(false); - if (!$(this).hasClass('disabled')) { function goFlashing() { if (self.developmentFirmwareLoaded) { checkShowAcknowledgementDialog(); @@ -1153,10 +1167,6 @@ firmware_flasher.initialize = function (callback) { } function startFlashing() { - exitDfuElement.addClass('disabled'); - $('a.flash_firmware').addClass('disabled'); - $("a.load_remote_file").addClass('disabled'); - $("a.load_file").addClass('disabled'); if (!GUI.connect_lock) { // button disabled while flashing is in progress if (self.parsed_hex) { try { @@ -1462,12 +1472,20 @@ firmware_flasher.cleanup = function (callback) { if (callback) callback(); }; -firmware_flasher.enableFlashing = function (enabled) { - if (enabled) { - $('a.flash_firmware').removeClass('disabled'); - } else { - $('a.flash_firmware').addClass('disabled'); - } +firmware_flasher.enableFlashButton = function (enabled) { + $('a.flash_firmware').toggleClass('disabled', !enabled); +}; + +firmware_flasher.enableLoadRemoteFileButton = function (enabled) { + $('a.load_remote_file').toggleClass('disabled', !enabled); +}; + +firmware_flasher.enableLoadFileButton = function (enabled) { + $('a.load_file').toggleClass('disabled', !enabled); +}; + +firmware_flasher.enableDfuExitButton = function (enabled) { + $('a.exit_dfu').toggleClass('disabled', !enabled); }; firmware_flasher.refresh = function (callback) {