195d1e11e2b71aa1bcbf6f2e5f2bc2d1992bfac8 chmalee Mon Feb 23 15:38:22 2026 -0800 In right click menu for zoom to transcript, remove regex that parses chrom,start, and end from hgc/hgGene links and instead use the built-in url parser. This allows chrom names to have '.' in them like genark assemblies, refs #35905 diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js index b16c28aaf2c..b4140a29829 100644 --- src/hg/js/hgTracks.js +++ src/hg/js/hgTracks.js @@ -2348,57 +2348,46 @@ var id = rightClick.selectedMenuItem.id; var url = null; // TODO: Break this giant routine with shared vars into some sub-functions var href = null; var rec = null; var row = null; var rows = null; var selectUpdated = null; function mySuccess() {} if (menuObject.shown) { // warn("Spinning: menu is still shown"); setTimeout(function() { rightClick.hitFinish(menuItemClicked, menuObject, cmd); }, 10); return; } if (cmd === 'selectWholeGene' || cmd === 'getDna' || cmd === 'highlightItem' || cmd === 'highlightThisRegion') { // bring whole gene into view or redirect to DNA screen. - href = rightClick.selectedMenuItem.href; - var chrom, chromStart, chromEnd; + let href = rightClick.selectedMenuItem.href; + let url = URL.parse(rightClick.selectedMenuItem.href); + let chrom = url.searchParams.get('hgg_chrom'); + if (!chrom) + chrom = url.searchParams.get('c'); + let chromStart = url.searchParams.get('hgg_start'); + if (!chromStart) + chromStart = url.searchParams.get('o'); + let chromEnd = url.searchParams.get('hgg_end'); + if (!chromEnd) + chromEnd = url.searchParams.get('t'); + chromStart = parseInt(chromStart) + 1; + chromEnd = parseInt(chromEnd); // Many links leave out the chrom (b/c it's in the server side cart as "c") // var chrom = hgTracks.chromName; // This is no longer acceptable // with multi-window capability drawing multiple positions on multiple chroms. - var a = /hgg_chrom=(\w+)&/.exec(href); - if (a) { - if (a && a[1]) - chrom = a[1]; - a = /hgg_start=(\d+)/.exec(href); - if (a && a[1]) - chromStart = parseInt(a[1]) + 1; - a = /hgg_end=(\d+)/.exec(href); - if (a && a[1]) - chromEnd = parseInt(a[1]); - } else { - // a = /hgc.*\W+c=(\w+)/.exec(href); - a = /hgc.*\W+c=(\w+)/.exec(href); - if (a && a[1]) - chrom = a[1]; - a = /o=(\d+)/.exec(href); - if (a && a[1]) - chromStart = parseInt(a[1]) + 1; - a = /t=(\d+)/.exec(href); - if (a && a[1]) - chromEnd = parseInt(a[1]); - } if (!chrom || chrom.length === 0 || !chromStart || !chromEnd) {// 1-based chromStart warn("couldn't parse out genomic coordinates"); } else { if (cmd === 'getDna') { // NOTE: this should be shared with URL generation for getDna blue bar menu url = "../cgi-bin/hgc?g=getDna&i=mixed&c=" + chrom; url += "&l=" + (chromStart - 1) + "&r=" + chromEnd; url += "&db=" + getDb() + "&hgsid=" + getHgsid(); if ( ! window.open(url) ) { rightClick.windowOpenFailedMsg(); } } else if (cmd === 'highlightItem') { if (hgTracks.windows && !hgTracks.virtualSingleChrom) { // orig way only worked if the entire item was visible in the windows. //var result = genomePos.chromToVirtChrom(chrom, parseInt(chromStart-1), parseInt(chromEnd));