c701010941ca31dbef85703a8ab83918cae3ba93 larrym Thu Aug 25 12:04:03 2011 -0700 add experimental (and dead) code to do dynamic addition of tracks diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js index 288b79e..6828d56 100644 --- src/hg/js/hgTracks.js +++ src/hg/js/hgTracks.js @@ -2652,30 +2652,31 @@ a = reg.exec(response); if(a != null && a[1] != null) { $('.trackTiming').replaceWith(a[1]); } } function handleUpdateTrackMap(response, status) { // Handle ajax response with an updated trackMap image, map and optional ideogram. // // this.cmd can be used to figure out which menu item triggered this. // this.id == appropriate track if we are retrieving just a single track. // update local hgTracks.trackDb to reflect possible side-effects of ajax request. var json = scrapeVariable(response, "hgTracks"); + var oldTrackDb = hgTracks.trackDb; if(json == undefined) { showWarning("hgTracks object is missing from the response"); } else { if(this.id != null) { if(json.trackDb[this.id]) { var visibility = visibilityStrsOrder[json.trackDb[this.id].visibility]; var limitedVis; if(json.trackDb[this.id].limitedVis) limitedVis = visibilityStrsOrder[json.trackDb[this.id].limitedVis]; if(this.newVisibility && limitedVis && this.newVisibility != limitedVis) // see redmine 1333#note-9 alert("There are too many items to display the track in " + this.newVisibility + " mode."); var rec = hgTracks.trackDb[this.id]; rec.limitedVis = json.trackDb[this.id].limitedVis; updateVisibility(this.id, visibility); @@ -2704,30 +2705,40 @@ $("input[name='l']").val(json.winStart); $("input[name='r']").val(json.winEnd); if(json.cgiVersion != hgTracks.cgiVersion) { // Must reload whole page because of a new version on the server; this should happen very rarely. // Note that we have already updated position based on the user's action. jQuery('body').css('cursor', 'wait'); document.TrackHeaderForm.submit(); } else { // We update rows one at a time (updating the whole imgTable at one time doesn't work in IE). for (id in hgTracks.trackDb) { if(!updateTrackImgForId(response, id)) { showWarning("Couldn't parse out new image for id: " + id); //alert("Couldn't parse out new image for id: " + id+"BR"+response); // Very helpful } } +/* This (disabled) code handles dynamic addition of tracks: + for (id in hgTracks.trackDb) { + if(oldTrackDb[id] == undefined) { + // XXXX Tim, what s/d abbr attribute be? + $('#imgTbl').append("<tr id='tr_" + id + "' class='imgOrd trDraggable'></tr>"); + updateTrackImgForId(response, id); + updateVisibility(id, visibilityStrsOrder[hgTracks.trackDb[id].visibility]); + } + } +*/ hgTracks = json; originalPosition = undefined; initVars(); afterImgTblReload(); } } else { a= /<IMG([^>]+SRC[^>]+id='trackMap[^>]*)>/.exec(response); // Deal with a is null if(a[1]) { var b = /WIDTH\s*=\s*['"]?(\d+)['"]?/.exec(a[1]); var width = b[1]; b = /HEIGHT\s*=\s*['"]?(\d+)['"]?/.exec(a[1]); var height = b[1]; b = /SRC\s*=\s*"([^")]+)"/.exec(a[1]); var src = b[1]; @@ -2953,15 +2964,45 @@ jQuery('body').css('cursor', ''); $.ajax({ type: "GET", url: "../cgi-bin/hgTracks", data: params + "&hgt.trackImgOnly=1&hgt.ideogramToo=1&hgsid=" + getHgsid(), dataType: "html", trueSuccess: handleUpdateTrackMap, success: catchErrorOrDispatch, error: errorHandler, cmd: 'wholeImage', loadingId: showLoadingImage("imgTbl"), disabledEle: disabledEle, cache: false }); } + +function updateButtonClick(ele) +{ +// code to update the imgTbl based on changes in the track controls. +// This is currently experimental code and is dead in the main branch. + if(mapIsUpdateable) { + var data = ""; + $("select").each(function(index, o) { + var cmd = $(this).val(); + if(cmd == "hide") { + if(hgTracks.trackDb[this.name] != undefined) { + alert("Need to implement hide"); + } + } else { + if(hgTracks.trackDb[this.name] == undefined || cmd != visibilityStrsOrder[hgTracks.trackDb[this.name].visibility]) { + if(data.length > 0) { + data = data + "&"; + } + data = data + this.name + "=" + cmd; + } + } + }); + if(data.length > 0) { + navigateInPlace(data, null); + } + return false; + } else { + return true; + } +}