5035e5c42aaae212c7f0d5bf9455349143af4d31 jrobinso Sun Sep 21 22:00:59 2025 -0700 Show message to user if clicking 'Add IGV Tracks' with an open file picker diff --git src/hg/js/igvFileHelper.js src/hg/js/igvFileHelper.js index 658d8b1c95d..16ed87d132b 100644 --- src/hg/js/igvFileHelper.js +++ src/hg/js/igvFileHelper.js @@ -347,37 +347,37 @@ } } window.addEventListener("DOMContentLoaded", async () => { // The "Add IGV track" button handler. The button opens the file picker window, unless // it is already open in which case it brings that window to the front. Tracks are added // from the filePicker page by selecting track files. document.getElementById('hgtIgv').addEventListener('click', async function (e) { e.preventDefault(); // our if (filePicker && !filePicker.closed) { showDialog("To add tracks please use the IGV File Manager window."); filePicker.focus(); return; - } - - else { + } else { // A file picker may be open from a previous session. First ping it to see if it is still there, // if it responds the user should be alerted, if needed, from a failed track load. const responded = await pingFilePicker(); - if (!responded) { + if (responded) { + showDialog("To add tracks please use the existing IGV File Manager window."); + } else { filePicker = openFilePicker(); } } }); initializeDialog(); }); // Initialize a jQuery UI dialog used for user messages. function initializeDialog() { // Inject a hidden dive for an alert dialog. We use this to report errors. const alertDialog = document.createElement('div'); alertDialog.id = 'igvAlertDialog'; @@ -675,34 +675,34 @@ const newStart = igvBrowser.referenceFrameList[0].start; igv.ucscTrackpan(newStart); } ); // Notify UCSC browser that igv.js track panning has ended. igvBrowser.on('trackdragend', () => { isDragging = false; igv.ucscTrackpanEnd(); } ); // Repaint name panels as needed igvBrowser.on('trackheightchange', () => { updateTrackNames(); - }) + }); igvBrowser.on('tracknamechange', () => { updateTrackNames(); - }) + }); // Start the session auto-save timer. This will periodically save the igv session to local storage. // When / if we can reliably capture IGV state changes we can eliminate this and just save on state change. startSessionAutoSave(); window.igvBrowser = igvBrowser; // Make available to hgTracks.js code return igvBrowser; } // Respond to messages from the filePicker window. channel.onmessage = async function (event) { const msg = event.data; if (!msg || !msg.type) return;