cc1314a4ff21d4dc406d4ae239566dfa9d0c6fae larrym Wed Nov 2 14:03:29 2011 -0700 replace some instances of $(#...) with document.getElementById to deal with possible metacharacter in track names; add and use escapeJQuerySelectorChars diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js index fb02c8e..709a66a 100644 --- src/hg/js/hgTracks.js +++ src/hg/js/hgTracks.js @@ -380,31 +380,31 @@ } } /////////////////////////////////////////////// //// visibility (mixed with group toggle) ///// /////////////////////////////////////////////// var vis = { enumOrder: new Array("hide", "dense", "full", "pack", "squish"), // map cgi enum visibility codes to strings update: function (track, visibility) { // Updates visibility state in hgTracks.trackDb and any visible elements on the page. // returns true if we modify at least one select in the group list var rec = hgTracks.trackDb[track]; var selectUpdated = false; - $("select[name=" + track + "]").each(function(t) { + $("select[name=" + escapeJQuerySelectorChars(track) + "]").each(function(t) { $(this).attr('class', visibility == 'hide' ? 'hiddenText' : 'normalText'); $(this).val(visibility); selectUpdated = true; }); if(rec) { rec.localVisibility = visibility; } return selectUpdated; }, get: function (track) { // return current visibility for given track var rec = hgTracks.trackDb[track]; if(rec) { if(rec.localVisibility) { @@ -1976,31 +1976,31 @@ var str = blankImg + " hide track set"; if (offerHideSubset) str += " (blue)"; o[str] = {onclick: rightClick.makeHitCallback('hideComposite')}; //o[rightClick.makeImgTag("btnBlueX.png") + " hide track set"] = {onclick: rightClick.makeHitCallback('hideComposite')}; menu.push(o); } // Second set of options: visibility for single track if (offerSingles) { if (offerHideComposite) menu.push($.contextMenu.separator); // XXXX what if select is not available (b/c trackControlsOnMain is off)? // Move functionality to a hidden variable? - var select = $("select[name=" + id + "]"); + var select = $("select[name=" + escapeJQuerySelectorChars(id) + "]"); if (select.length > 1) // Not really needed if $('#hgTrackUiDialog').html(""); has worked select = [ $(select)[0] ]; var cur = $(select).val(); if(cur) { $(select).children().each(function(index, o) { var title = $(this).val(); var str = blankImg + " " + title; if(title == cur) str = selectedImg + " " + title; var o = new Object(); o[str] = {onclick: function (menuItemClicked, menuObject) { rightClick.hit(menuItemClicked, menuObject, title); return true;}}; menu.push(o); });