481ceed454ffe518091adbba9716e05fbeb4fbb8 larrym Mon Mar 19 13:00:45 2012 -0700 refactor some makeItems code from hgTracks.c into hgTracks.js b/c (a) it was causing problems in stripJsEmbedded and (b) it really belongs in hgTracks.js diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js index f023d97..aac02be 100644 --- src/hg/js/hgTracks.js +++ src/hg/js/hgTracks.js @@ -289,30 +289,40 @@ command.value += " " + pos.chromStart + " " + pos.chromEnd; document.TrackHeaderForm.submit(); return true; }, init: function (trackName) { // Set up so that they can drag out to define a new item on a makeItems track. var img = $("#img_data_" + trackName); if(img != undefined && img.length != 0) { var imgHeight = imageV2.imgTbl.height(); jQuery(img.imgAreaSelect( { selectionColor: 'green', outerColor: '', minHeight: imgHeight, maxHeight: imgHeight, onSelectEnd: makeItemsByDrag.end, autoHide: true, movable: false})); } + }, + + load: function () + { + for (var id in hgTracks.trackDb) { + var rec = hgTracks.trackDb[id]; + if(rec.type.indexOf("makeItems") == 0) { + makeItemsByDrag.init(id); + } + } } } /////////////////// ///// mouse ///// /////////////////// var mouse = { savedOffset: {x:0, y:0}, saveOffset: function (ev) { // Save the mouse offset associated with this event mouse.savedOffset = {x: ev.clientX, y: ev.clientY}; }, @@ -2530,30 +2540,31 @@ afterReload: function () { // Reload various UI widgets after updating imgTbl map. dragReorder.init(); dragSelect.load(false); // Do NOT reload context menu (otherwise we get the "context menu sticks" problem). // rightClick.load($('#tr_' + id)); if(imageV2.imgTbl.tableDnDUpdate) imageV2.imgTbl.tableDnDUpdate(); rightClick.reloadFloatingItem(); // Turn on drag scrolling. if(hgTracks.imgBoxPortal) { $("div.scroller").panImages(); } imageV2.loadRemoteTracks(); + makeItemsByDrag.load(); imageV2.markAsDirtyPage(); }, updateImgForId: function (html, id) { // update row in imgTbl for given id. // return true if we successfully pull slice for id and update it in imgTrack. var str = "<TR id='tr_" + id + "'[^>]*>([\\s\\S]+?)</TR>"; var reg = new RegExp(str); var a = reg.exec(html); if(a && a[1]) { var tr = $(document.getElementById("tr_" + id)); if (tr.length > 0) { $(tr).html(a[1]); // Need to update tr class list too @@ -2598,30 +2609,39 @@ type: getOrPost, url: "../cgi-bin/hgTracks", data: data, dataType: "html", trueSuccess: imageV2.updateImgAndMap, success: catchErrorOrDispatch, error: errorHandler, cmd: 'refresh', loadingId: loadingId, id: trackName, newVisibility: newVisibility, cache: false }); }, + fullReload: function() + { + // force reload of whole page via trackform submit + // This function does not return + jQuery('body').css('cursor', 'wait'); + document.TrackHeaderForm.submit(); + + }, + updateImgAndMap: function (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; var valid = false; if(json == undefined) { var stripped = new Object(); stripJsEmbedded(response, true, stripped); if(stripped.warnMsg == null) warn("hgTracks object is missing from the response"); @@ -2661,32 +2681,31 @@ imageV2.afterReload(); } else { warn("Couldn't parse out new image for id: " + id); //alert("Couldn't parse out new image for id: " + id+"BR"+response); // Very helpful } } else { if(imageV2.enabled) { // Implement in-place updating of hgTracks image genomePos.setByCoordinates(json.chromName, json.winStart + 1, json.winEnd); $("input[name='c']").val(json.chromName); $("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(); + imageV2.fullReload(); } else { // We update rows one at a time (b/c updating the whole imgTable at one time doesn't work in IE). for (var id in hgTracks.trackDb) { // handle case where invisible items may be in the trackDb list (see redmine #5670). if(hgTracks.trackDb[id].type != "remote" && hgTracks.trackDb[id].visibility > 0 // && $('#tr_' + id).length > 0 && !imageV2.updateImgForId(response, id)) { warn("Couldn't parse out new image for id: " + id); } } /* This (disabled) code handles dynamic addition of tracks: for (var 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>"); @@ -3138,30 +3157,31 @@ if(hgTracks.imgBoxPortal) { // Turn on drag scrolling. $("div.scroller").panImages(); } //$("#zoomSlider").slider({ min: -4, max: 3, step: 1 });//, handle: '.ui-slider-handle' }); // Retrieve tracks via AJAX that may take too long to draw initialliy (i.e. a remote bigWig) var retrievables = $('#imgTbl').find("tr.mustRetrieve") if($(retrievables).length > 0) { $(retrievables).each( function (i) { var trackName = $(this).attr('id').substring(3); imageV2.requestImgUpdate(trackName,"",""); }); } imageV2.loadRemoteTracks(); + makeItemsByDrag.load(); } // Drag select in chromIdeogram if($('img#chrom').length == 1) { if($('area.cytoBand').length > 1) { $('img#chrom').chromDrag(); } } // Track search uses tabs trackSearch.init(); // Drag select initialize if (imageV2.enabled) { // moved from window.load(). dragSelect.load(true);