bff6ff96f61c7b27e378f907c3aea53f79cc4687 larrym Mon Aug 15 12:20:53 2011 -0700 disable buttons while we are finishing the update; don't allow control-select as it was screwing up right-click on the mac diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js index 26a43a9..cb768ad 100644 --- src/hg/js/hgTracks.js +++ src/hg/js/hgTracks.js @@ -210,31 +210,31 @@ var doIt = false; if(originalCursor != null) jQuery('body').css('cursor', originalCursor); // ignore releases outside of the image rectangle (allowing a 10 pixel slop) if(autoHideSetting && checkPosition(img, selection)) { // ignore single clicks that aren't in the top of the image (this happens b/c the clickClipHeight test in selectStart // doesn't occur when the user single clicks). doIt = startDragZoom != null || selection.y1 <= hgTracks.rulerClickHeight; } if(doIt) { // startDragZoom is null if mouse has never been moved var singleClick = (selection.x2 == selection.x1) || startDragZoom == null || (now.getTime() - startDragZoom) < 100; newPosition = updatePosition(img, selection, singleClick); if(newPosition != undefined) { if(inPlaceUpdate) { - navigateInPlace("position=" + newPosition); + navigateInPlace("position=" + newPosition, null); } else { jQuery('body').css('cursor', 'wait'); document.TrackHeaderForm.submit(); } } } else { setPosition(originalPosition, originalSize); originalPosition = originalSize = null; // if(mapHtml) { // $('#map').append(mapHtml); // } } // mapHtml = null; startDragZoom = null; setTimeout('blockUseMap=false;',50); // Necessary incase the selectEnd was over a map item. select takes precedence. @@ -991,31 +991,31 @@ // globals to one panImage var newX = 0; var mouseDownX = 0; var mouseIsDown = false; var beyondImage = false; var atEdge = false; initialize(); function initialize(){ if ( !($.browser.msie) ) // IE will override map items cursors as well! $(pan).parents('td.tdData').css('cursor',"url(../images/grabber.cur),w-resize"); pan.mousedown(function(e){ - if (e.which > 1 || e.button > 1 || e.shiftKey || e.ctrlKey) + if (e.which > 1 || e.button > 1 || e.shiftKey) return true; if(mouseIsDown == false) { mouseIsDown = true; mouseDownX = e.clientX; atEdge = (!beyondImage && (prevX >= leftLimit || prevX <= rightLimit)); $(document).bind('mousemove',panner); $(document).bind( 'mouseup', panMouseUp); // Will exec only once return false; } }); } function panner(e) { //if(!e) e = window.event; if ( mouseIsDown ) { @@ -1080,31 +1080,31 @@ if (curY < north || curY > south) { atEdge = false; beyondImage = false; if (savedPosition != undefined) setPosition(savedPosition,null); var oldPos = prevX.toString() + "px"; $(".panImg").css( {'left': oldPos }); $('.tdData').css( {'backgroundPosition': oldPos } ); return true; } // Do we need to fetch anything? if(beyondImage) { if(inPlaceUpdate) { var pos = parsePosition(getPosition()); - navigateInPlace("position=" + encodeURIComponent(pos.chrom + ":" + pos.start + "-" + pos.end)); + navigateInPlace("position=" + encodeURIComponent(pos.chrom + ":" + pos.start + "-" + pos.end), null); } else { document.TrackHeaderForm.submit(); } return true; // Make sure the setTimeout below is not called. } // Just a normal scroll within a >1X image if(prevX != newX) { prevX = newX; if (!only1xScrolling) { // panAdjustHeight(newX); // NOTE: This will resize image after scrolling. Do we want to while scrolling? // This is important, since AJAX could lead to reinit after this within bounds scroll hgTracks.imgBoxPortalOffsetX = (prevX * -1) - hgTracks.imgBoxLeftLabel; hgTracks.imgBoxPortalLeft = newX.toString() + "px"; } @@ -2607,33 +2607,30 @@ 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); } else { showWarning("Invalid hgTracks.trackDb received from the server"); } } else { hgTracks.trackDb = json.trackDb; } } - if(this.loadingId) { - hideLoadingImage(this.loadingId); - } if(imageV2 && this.id && this.cmd && this.cmd != 'wholeImage' && this.cmd != 'selectWholeGene') { // Extract <TR id='tr_ID'>...</TR> and update appropriate row in imgTbl; // this updates src in img_left_ID, img_center_ID and img_data_ID and map in map_data_ID var id = this.id; if(updateTrackImgForId(response, id)) { afterImgTblReload(); } else { showWarning("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) { // Implement in-place updating of hgTracks image setPositionByCoordinates(json.chromName, json.winStart + 1, json.winEnd); $("input[name='c']").val(json.chromName); @@ -2703,30 +2700,36 @@ parseMap($map, true); } else { showWarning("Couldn't parse out map"); } } // Parse out new ideoGram url (if available) // e.g.: <IMG SRC = "../trash/hgtIdeo/hgtIdeo_hgwdev_larrym_61d1_8b4a80.gif" BORDER=1 WIDTH=1039 HEIGHT=21 USEMAP=#ideoMap id='chrom'> // We do this last b/c it's least important. var a = /<IMG([^>]+SRC[^>]+id='chrom'[^>]*)>/.exec(response); if(a && a[1]) { b = /SRC\s*=\s*"([^")]+)"/.exec(a[1]); if(b[1]) { $('#chrom').attr('src', b[1]); } } + if(this.disabledEle) { + this.disabledEle.attr('disabled', ''); + } + if(this.loadingId) { + hideLoadingImage(this.loadingId); + } jQuery('body').css('cursor', ''); } function handleViewImg(response, status) { // handles view image response, which must get new image without imageV2 gimmickery jQuery('body').css('cursor', ''); var str = "<IMG[^>]*SRC='([^']+)'"; var reg = new RegExp(str); a = reg.exec(response); if(a && a[1]) { if(window.open(a[1]) == null) { windowOpenFailedMsg(); } return; } @@ -2847,48 +2850,51 @@ var json = eval("(" + response + ")"); if(json.pos) { setPosition(json.pos, 3); if(document.TrackForm) document.TrackForm.submit(); else document.TrackHeaderForm.submit(); } else { alert(json.error); } } function navigateButtonClick(ele) { // code to update just the imgTbl in response to navigation buttons (zoom-out etc.). -// currently experimental code (live only in larrym's tree). +// This is currently experimental code (controlled by IN_PLACE_UPDATE in imageV2.h). if(mapIsUpdateable) { var params = ele.name + "=" + ele.value; + $(ele).attr('disabled', 'disabled'); // dinking navigation needs additional data if(ele.name == "hgt.dinkLL" || ele.name == "hgt.dinkLR") { params += "&dinkL=" + $("input[name='dinkL']").val(); } else if(ele.name == "hgt.dinkRL" || ele.name == "hgt.dinkRR") { params += "&dinkR=" + $("input[name='dinkR']").val(); } - navigateInPlace(params); + navigateInPlace(params, $(ele)); return false; } else { return true; } } -function navigateInPlace(params) +function navigateInPlace(params, disabledEle) { // request an hgTracks image, using params +// disabledEle is optional; this element will be enabled when update is complete 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 }); }