a895aa76090c3eb5279159a1e7a35771c3efaa87 galt Mon May 16 13:02:03 2011 -0700 removing incorrect file diff --git src/hg/htdocs/bigImage.html src/hg/htdocs/bigImage.html deleted file mode 100755 index 393b1e3..0000000 --- src/hg/htdocs/bigImage.html +++ /dev/null @@ -1,1098 +0,0 @@ -<html> -<head> - -<title>visiGene bigImage</title> - -<style> - -table { border-collapse: collapse; border-spacing: 0; } -tr, th, td { padding: 0px; } - -</style> - -</head> - - - -<SCRIPT LANGUAGE="javascript" TYPE="text/javascript"> - -function showBrowser() { - window.status=navigator.appName+' '+navigator.appVersion; -} - -var isSafari = (navigator.userAgent.toLowerCase().indexOf("safari") >= 0); - -// magnification for over-zoom-in. as if there were a level -1. -m = 1; -maxmag = 8; // max magnification (doubles each time: 1,2,4,8) - -// number of zoom levels, level 0 = no zoom, numLevels-1=max zoom out=6 -numLevels=7; - -myClip = document.getElementById("myClip"); - -myImg = document.getElementById("myImg"); - -myCover = document.getElementById("myCover"); - - -// original width and height of picture -wOrig = new Array(numLevels); -hOrig = new Array(numLevels); -wOrig[0] = 7248; -hOrig[0] = 3780; - -// size of subImages (tiles) -wSub = 512; //240; //300; -hSub = 512; //240; //300; - -// width of last column of tiles (since we are scaling tiles by setting width) -wSubEdge = new Array(numLevels); -wSubEdge[0] = wSub; -hSubEdge = new Array(numLevels); // safari -hSubEdge[0] = hSub; - -// number of extra cell rows and columns to cover in view window myClip -wdl = wdr = 2; -hdl = hdr = 1; - -picName="T12832210aa"; -picExt =".jpg"; - -// number of rows and columns in table -wCnt = new Array(numLevels); -hCnt = new Array(numLevels); - -z = 1; // accumulated zoom factor at level 0 -wSmallDelta = hSmallDelta = 50; -hSmallDelta = hSmallDelta = 50; -wBigDelta = hBigDelta = 300; -hBigDelta = hBigDelta = 300; -dr = 5; // amount to scroll - -marginLeft = 5; -marginTop = 5; - -// clip size (changes with window resize) -wc = 800; -hc = 600; - -// minimum number of tiles required to cover view area wcXhc -wt = Math.ceil(wc/wSub) + 1; -ht = Math.ceil(hc/hSub) + 1; - - - -// position in original picture space, not scaled by zoom -x = 0; -y = 0; - -// target coords (scrolls so that x,y approaches goal x,y -xx = 0; -yy = 0; - -// mouse position -mousex = 0; -mousey = 0; -mouseDrag = false; -mouseAction = false; -mouseDragX = mousex; -mouseDragY = mousey; - -// hash of visible IMGs in use -vis = new Object; - -// stack of invisible IMGs heap available for use -invistop=-1; -invis=new Array(); - -// cells are pointers to the IMG objects (we can walk through entire list) -cells = new Array(); - -var qsParm = new Array(); - -//function to retrieve and parse parms: -function qs() { -var query = window.location.search.substring(1); -var parms = query.split('&'); -for (var i=0; i<parms.length; i++) { - var pos = parms[i].indexOf('='); - if (pos > 0) { - var key = parms[i].substring(0,pos); - var val = parms[i].substring(pos+1); - qsParm[key] = val; - } - } -} -//assign default values and read parms in -//e.g. qsParm['url'] = "junk.jpg"; -qs(); // init parm array from cmdline - - -function placeTile(cell) { - -var wSize = wSub; -var hSize = hSub; -if ((cell.r != -1) && (cell.c != -1)) { - - if (cell.c+1==wCnt[l]) - { - wSize = wSubEdge[l]; - } - if (cell.r+1==hCnt[l]) - { - hSize = hSubEdge[l]; - } - // safari seems to need both width and height specified. - // I wanted to use the style so I could express both properties at once, - // but it doesn't seem to work when we magnify it (m > 1) - cell.width = wSize*m; - cell.height = hSize*m; //safari - //cell.style='width:'+wSize*m+';'+'height:'+hSize*m+';'; - //'width:100%; height: auto;'; - - cell.style.top = cell.r*hSub*m; - cell.style.left = cell.c*wSub*m; - -//alert('onTileLoad: cell.r,cell.c='+cell.r+','+cell.c+' m='+m+' wCnt[l]='+wCnt[l]+' cell.width='+cell.width); -} -} - -function onTileLoad(theImage) { -// does this work in all browsers we need to cover? -// it seems to get around the FireFox bug where initial screen refreshes -// were happening in wrong order leaving screen dirt. -if (!theImage) var theImage = window.event; -//alert('this='+this); -//alert('theImage='+theImage); -//var cell = document.getElementById(e.target); -var cell = this; -placeTile(cell); -} - - -function makeLevel(doHTML) { // make table of tiles large enough to cover view area wc,wh - -var html = ''; -var r=0; -var c=0; -var cnt=0; - -if (doHTML) { // since this may be expensive for old machines, skip if just a zoom rather than resize - html = ''; - for(r=0; r<ht; r++) { - for(c=0; c<wt; c++) { - html += '<IMG ID="myImg_'+cnt+'" src="images/dot_clear.gif" STYLE="position:absolute;left:-10000px;top:-10000px;">'; - cnt++; - } - } - myImg.innerHTML=html; // big initialization -} - -myImg.style.width = wOrig[l]*m; -myImg.style.height = hOrig[l]*m; - -// hash of visible IMGs in use -vis = new Object; -// stack of invisible IMGs heap available for use -invistop=-1; -invis=new Array(); -// cells are pointers to the IMG objects (we can walk through entire list) -cells = new Array(); - -cnt=0; - -for(r=0; r<ht; r++) { - for(c=0; c<wt; c++) { - var cell = document.getElementById("myImg_"+cnt); - var cstr = "images/dot_clear.gif"; - cell.style.top = -hc-hSub*m; // move it off screen to hide -hc - cell.style.left = -wc-wSub*m; // -wc - cell.r = -1; // used to identify current position role - cell.c = -1; - cells[cells.length] = cell; // save an array as a list of all IMGs - invis[invis.length] = cell; // list of all invisible IMGs avail for reuse - all cells start out available - cell.onload = onTileLoad; - cell.path=cstr; // if the property does not exist it will be created - cell.src=cstr; - cnt++; - } -} -invistop=invis.length-1; // point to top actual element - -// probably skip this as i would have to do all r,c in hCnt,wCnt to be worth using -//theStatus[somevar] = null; // just initialize so that it will at least exist on startup. - -} - - -function scrollMe() { -var m = 0; -var dist = 0; -var dx = 0; -var dy = 0; -var drz = Math.round(dr/z); // scale up to larger motions in absolute x,y on smaller image - -if (typeof(y) != "number") { - alert('typeof(y) != "number": type='+typeof(y)+' value='+y); -} - -if ((x != xx) || (y != yy)) { - dist = Math.sqrt((yy-y)*(yy-y)+(xx-x)*(xx-x)); - if (dist < drz) { - x = xx; - y = yy; - } else { - if (xx==x) { - dx = 0; - dy = drz; - if (yy<y) dy *= -1; - } else { - m = (yy-y)/(xx-x); - dx = Math.sqrt((drz*drz)/(m*m+1)); - if (xx<x) dx *= -1; - dy = m * dx; - } - x += dx; - y += dy; - } - updatePos(); -} -} - - -function updatePos() { - -var c = Math.floor(x*z/(hSub*m)); -var r = Math.floor(y*z/(wSub*m)); -var rr = 0; -var cc = 0; -var cell = null; -var cstr = ""; -var i = 0; -var cntinv = 0; -var cntvis = 0; - -wdl = Math.ceil((wc/2-(x*z)%(wSub*m))/(wSub*m)); if(wdl<0)wdl=0; -hdl = Math.ceil((hc/2-(y*z)%(hSub*m))/(hSub*m)); if(hdl<0)hdl=0; - -wdr = Math.ceil((wc/2-wSub+(x*z)%(wSub*m))/(wSub*m)); if(wdr<0)wdr=0; -hdr = Math.ceil((hc/2-hSub+(y*z)%(hSub*m))/(hSub*m)); if(hdr<0)hdr=0; - -// pre-fetch over-border adjustment: -//wdl++;hdl++;wdr++;hdr++; - -//alert('x,y='+x+','+y+' c,r='+c+' '+r); //debug -//alert('wc,hc='+wc+','+hc+' wdl,wdr,hdl,hdr='+wdl+' '+wdr+','+hdl+' '+hdr); //debug - - -// for each cell add to invisible stack (an array) if not visible (and remove from visible hash?) -// else add to visible hash (as an object "property") (if not already present). - -//debug -//alert("cells.length="+cells.length+" invistop="+invistop); - -for(i=0;i<cells.length;i++) { - var cell = cells[i]; - if ((cell.r != -1) && // just ignore -1 it is already invisible - ( - (cell.r<r-hdl) || - (cell.c<c-wdl) || - (cell.r>r+hdr) || - (cell.c>c+wdr) - ) - ) { // it was visible, but now becomes invisible - invistop++; // point to new top element position - invis[invistop] = cell; // add to list of invisible IMGs avail for reuse - vis[""+cell.r+"_"+cell.c] = null; // erase id from hash of visible cell.ids - cstr = "images/dot_clear.gif"; - cell.path=cstr; - //cell.src=cstr; // causes IE flashes, don't even need it so skip it - cell.r = -1; - cell.c = -1; - cell.style.top = -hc-hSub*m; // move it off screen to hide - cell.style.left = -wc-wSub*m; - cntinv++; // debug - } -} - -//alert("new invistop="+invistop); - -// Then, loop again, for each position for wCnt*hCnt, -// if it is in visible hash, do not update. Else draw -// from top of invisible stack and assign new position,.src. -// Anything remaining on the stack is truly not visible, -// move it to -wSub,-hSub to hide it. - -for(rr=r-hdl;rr-r<=hdr;rr++) { - for(cc=c-wdl;cc-c<=wdr;cc++) { - if ((rr>=0) && (rr<hCnt[l]) && (cc>=0) && (cc<wCnt[l])) { - cell = vis[""+rr+"_"+cc]; - if (!cell) { - //-- if it is not present, recycle from invisible list, add to visible list, set properties - if (invistop < 0) { alert("invis stack underflow - not enough IMGs!"); return; } - cell = invis[invistop]; - invistop--; - cell.r = rr; - cell.c = cc; - vis[""+cell.r+"_"+cell.c] = cell; // add to visible hash - cstr = String(rr*wCnt[l]+cc); - while (cstr.length<3) cstr='0'+cstr; - cstr = ''+picName+'_'+l+'_'+cstr+picExt; - - //debug - //alert("rr,cc="+rr+","+cc+" path="+cstr+" l="+l+" wCnt[l]="+wCnt[l]); - - cell.path=cstr; - cell.src=cstr; - - if (isSafari) - placeTile(cell); // safari hack - - cntvis++; - - } - } - } -} - -//alert("new invistop="+invistop); - -//-- moving the entire div should be the last thing we do -myImg.style.left=wc/2 - x*z; -myImg.style.top =hc/2 - y*z; - -//alert("myClip.style.left="+myClip.style.left+", myClip.style.top="+myClip.style.top); -//alert("myImg.style.left="+myImg.style.left+", myImg.style.top="+myImg.style.top); - -if ((cntinv > 0) || (cntvis > 0)) - window.status='cntinv='+cntinv+' and cntvis='+cntvis; - -thumbFollow(); - -if ((x != xx) || (y != yy)) setTimeout('scrollMe()',100); - -} - - -function getInnerSize(dim) { -// note: screen.availWidth works for both IE and Mozilla (but not in a frame?) -var myWidth = 0, myHeight = 0; -if( typeof( window.innerWidth ) == 'number' ) { - myWidth = window.innerWidth; - myHeight = window.innerHeight; -} else if( document.documentElement && - (document.documentElement.clientWidth ||document.documentElement.clientHeight ) ) { - myWidth = document.documentElement.clientWidth; - myHeight = document.documentElement.clientHeight; -} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { - myWidth = document.body.clientWidth; - myHeight = document.body.clientHeight; -} - -//debug safari -//if (myWidth==0) myWidth=320; -//if (myHeight==0) myHeight=200; - -if (dim=="w") return myWidth -else return myHeight; -} - - -function windowResize() { - -//window.onresize=null; // this really screws up Safari, don't do it! - -wc = getInnerSize("w") - 2*marginLeft; -hc = getInnerSize("h") - 2*marginTop; - -myClip.style.width = wc; -myClip.style.height = hc; - -myCover.style.width = wc; -myCover.style.height = hc; - -wSmallDelta = Math.round(wc/16); -hSmallDelta = Math.round(hc/16); -wBigDelta = Math.round(wc/4); -hBigDelta = Math.round(hc/4); - -// minimum number of tiles required to cover view area wc X hc -wt = Math.ceil(wc/(wSub*m)) + 1; -ht = Math.ceil(hc/(hSub*m)) + 1; - -// increase number of tiles so that we get a sort of pre-fetch buffer going -//wt+=2; -//ht+=2; - -makeLevel(true); -updatePos(); - -//window.onresize=windowResize; // this really screws up Safari, don't do it! -} - -function getThumb() { -var result = null; -if (typeof(parent.parent) != 'undefined') - if (typeof(parent.parent.list) != 'undefined') - if (typeof(parent.parent.list.document) != 'undefined') { - var imgs = parent.parent.list.document.getElementsByTagName('img'); - var target = picName.replace("full","200"); - target = target.substring(0,target.lastIndexOf("/")); - target = target+picExt; - target = target.substring(target.indexOf("/visiGene")); - //alert('imgs.length='+imgs.length+' target='+target); - for (var i = 0; i < imgs.length; ++i) { - var src = imgs[i].src; - src = src.substring(src.indexOf("/visiGene")); - if (src == target) { - result = imgs[i]; - break; - } - } - - } -return result; -} - - -function init() { - -if (!myClip) - myClip = document.getElementById("myClip"); - -if (!myCover) - myCover = document.getElementById("myCover"); - -picName = qsParm['url']; -wOrig[0] = parseInt(qsParm['w']); -hOrig[0] = parseInt(qsParm['h']); - -//debug -//alert('w,h='+wOrig[0]+','+hOrig[0]+' picName='+picName); - -//debug -//alert('isSafari='+isSafari); - -for (l=1;l<numLevels;l++) - { - wOrig[l] = wOrig[l-1]/2; - hOrig[l] = hOrig[l-1]/2; - } - -for (l=0;l<numLevels;l++) - { - wCnt[l] = Math.ceil(wOrig[l]/wSub); - hCnt[l] = Math.ceil(hOrig[l]/hSub); - } - -for (l=0;l<numLevels;l++) - { - wSubEdge[l] = wOrig[l] % wSub; - if (wSubEdge[l] == 0) - wSubEdge[l] = wSub; - hSubEdge[l] = hOrig[l] % hSub; - if (hSubEdge[l] == 0) - hSubEdge[l] = hSub; - } - -var html = ''; - -myClip.style.left = marginLeft; -myClip.style.top = marginTop; - -myCover.style.left = marginLeft; -myCover.style.top = marginTop; - -// one DIV for all levels -html += '<DIV ID="myImg'+'" STYLE="position:absolute;left:1000;top:0;z-index:1;" ></DIV>'; -myClip.innerHTML=html; - -if (!myImg) - myImg = document.getElementById("myImg"); - -l=0; -z=1; -wc = getInnerSize("w") - 2*marginLeft; -hc = getInnerSize("h") - 2*marginTop; - -//debug -//alert('wc='+wc+' marginLeft='+marginLeft+'location.href='+location.href); - -//debug -//alert(document.parent.bigImg.src); -//alert('test:'+typeof(parent.bigImg.width)); - -if (wc <= 0) /* safari bug work-around, just make it reload again */ - { - location.href=location.href; - return; - } - -while ((wOrig[l] > wc || hOrig[l] > hc) && (l+1) < numLevels) - { - l++; - z = z * 0.5; - } - -x = wOrig[0]/2; -y = hOrig[0]/2; -xx = x; -yy = y; - -windowResize(); - -if (window.focus) window.focus(); - -} - - -function thumbFollow() { - -//debug -var thumb = getThumb(); -var tox = 0; -var toy = 0; - -if (typeof(parent) == 'undefined') return; -if (typeof(parent.parent) == 'undefined') return; -if (typeof(parent.parent.list) == 'undefined') return; -if (typeof(parent.parent.list.document) == 'undefined') return; - -var pclip = parent.parent.list.document.getElementById('perspClip'); // use to clip -var persp = parent.parent.list.document.getElementById('perspective'); // use to position -var pbox = parent.parent.list.document.getElementById('perspBox'); // make box using 1x1 transparent gif with border - -if (pclip == null) return; -if (persp == null) return; -if (pbox == null) return; - -if (thumb == null) { // no thumb to follow with, so hide box and exit - pclip.style.left = -1000; - pclip.style.top = -1000; - return; -} - -var wt = thumb.offsetWidth; -var ht = thumb.offsetHeight; - -//alert('img' -// +'\nthumb.width='+thumb.width -// +'\nthumb.left='+thumb.left -// +'\nthumb.style.left='+thumb.style.left -// +'\nthumb.offsetWidth='+thumb.offsetWidth -// +'\nthumb.offsetLeft='+thumb.offsetLeft -// +'\nthumb.offsetTop='+thumb.offsetTop -// +'\nthumb.offsetParent='+thumb.offsetParent -// +'\nthumb.src='+thumb.src); - -tox += thumb.offsetLeft; -toy += thumb.offsetTop; - -//tox += thumb.offsetLeft+thumb.style.borderWidth; -//toy += thumb.offsetTop+thumb.style.borderWidth; - -thumb = thumb.offsetParent; - -//alert('cell' -// +'\nthumb.width='+thumb.width -// +'\nthumb.left='+thumb.left -// +'\nthumb.style.left='+thumb.style.left -// +'\nthumb.offsetWidth='+thumb.offsetWidth -// +'\nthumb.offsetLeft='+thumb.offsetLeft -// +'\nthumb.offsetTop='+thumb.offsetTop -// +'\nthumb.offsetParent='+thumb.offsetParent -// +'\nthumb.src='+thumb.src); - -tox += thumb.offsetLeft; -toy += thumb.offsetTop; - -thumb = thumb.offsetParent; - -//alert('table' -// +'\nthumb.width='+thumb.width -// +'\nthumb.left='+thumb.left -// +'\nthumb.style.left='+thumb.style.left -// +'\nthumb.offsetWidth='+thumb.offsetWidth -// +'\nthumb.offsetLeft='+thumb.offsetLeft -// +'\nthumb.offsetTop='+thumb.offsetTop -// +'\nthumb.offsetParent='+thumb.offsetParent -// +'\nthumb.src='+thumb.src); - -tox += thumb.offsetLeft; -toy += thumb.offsetTop; - -//alert('tox='+tox+' toy='+toy); -//alert('persp.style.left='+persp.style.left+' persp.style.top='+persp.style.top); - -var wp = wc/z * wt/wOrig[0]; -var hp = hc/z * ht/hOrig[0]; - -// set the width and height box, i.e. the 1x1 transparent gif with border -pbox.width = wp; -pbox.height = hp; - -// use persp div to position the "box" -persp.style.left = 0 - wp/2 + x*wt/wOrig[0]; -persp.style.top = 0 - hp/2 + y*ht/hOrig[0]; - -// position clipping div over the thumbnail -pclip.style.left = tox; -pclip.style.top = toy; -pclip.style.width = wt; -pclip.style.height = ht; - -} - -function moveRight(delta) { -xx = xx + delta/z; -if (xx > wOrig[0]) xx = wOrig[0]; -updatePos(); -} - -function moveLeft(delta) { -xx = xx - delta/z; -if (xx < 0) xx = 0; -updatePos(); -} - -function moveUp(delta) { -yy = yy - delta/z; -if (yy < 0) yy = 0; -updatePos(); -} - -function moveDown(delta) { -yy = yy + delta/z; -if (yy > hOrig[0]) yy = hOrig[0]; -updatePos(); -} - -function zoomIn(zoomout) { -if (zoomout) { - if ((l<=0) && (m>=maxmag)) return; // do not zoom too far out - if (l<=0) - m*=2; - else - l--; - z*=2; -} else { - if (l>=numLevels-1) return; // do not zoom too far in - if (m>1) - m/=2; - else - l++; - z/=2; -} -makeLevel(false); -updatePos(); -} - -function cancelKey(e) { - if (e.preventDefault) { - e.preventDefault(); - return false; - } - else { - e.keyCode = 0; - e.returnValue = false; - } -} - -function keyPress(e) -{ // trapping keyPress seems to be necessary only for old Mozilla browsers - // because normally suppressing the keyDown event should prevent keyPress from happening at all, - // but old Mozilla browsers ignore this canceling. -var code; -var result = false; -if (!e) var e = window.event; -if (e.keyCode) code = e.keyCode; -else if (e.which) code = e.which; -var character = String.fromCharCode(code); - -//alert('code='+code+' Character was ' + character); - -//debug -//window.status='keypress: code='+code+' Character was ' + character; -//return; - -if (character == '+') zoomIn(true); // + // bugfix for FF Mac -if (character == '-') zoomIn(false); // - // bugfix for FF Mac - -if ((code == 32) // suppress for mozilla ; else - || (code == 39) // moveRight(wSmallDelta); else - || (code == 37) // moveLeft (wSmallDelta); else - || (code == 38) // moveUp (hSmallDelta); else - || (code == 40) // moveDown (hSmallDelta); else - || (code == 35) // moveRight(wBigDelta ); else // end - || (code == 36) // moveLeft (wBigDelta ); else // home - || (code == 33) // moveUp (hBigDelta ); else // pgup - || (code == 34) // moveDown (hBigDelta ); else // pgdn - || (code == 43) || ((code == 107) || (code == 187) || ((code == 61))) // zoomIn(true); else // + - || (code == 45) || ((code == 109) || (code == 189)) // zoomIn(false); else // - -) result = false; -else result = true; -if (!result) { - cancelKey(e); - if (e.preventBubble) - e.preventBubble(); - return false; -} - -//debug -//if (result) { -// alert('code='+code); -// alert('Character was ' + character); -//} - -} - -function keyDown(e) -{ -var code; -var result = false; -if (!e) var e = window.event; -if (e.keyCode) code = e.keyCode; -else if (e.which) code = e.which; -//var character = String.fromCharCode(code); -//alert('Character was ' + character); -//window.status='Character was ' + character; -window.status='Character was ' + code; - -//debug -//alert('Code was '+code + ' e.charCode='+e.charCode + ' e.ctrlKey='+e.ctrlKey + ' e.shiftKey='+e.shiftKey + ' e.type='+e.type); -//return; - -//debug -//alert('code='+code); -//cancelKey(e); -//if (e.preventBubble) -// e.preventBubble(); -//return false; - -if (code == 32) { /* do nothing - suppress for mozilla */ } else -if (code == 39) moveRight(wSmallDelta); else -if (code == 37) moveLeft (wSmallDelta); else -if (code == 38) moveUp (hSmallDelta); else -if (code == 40) moveDown (hSmallDelta); else -if (code == 35) moveRight(wBigDelta ); else // end -if (code == 36) moveLeft (wBigDelta ); else // home -if (code == 33) moveUp (hBigDelta ); else // pgup -if (code == 34) moveDown (hBigDelta ); else // pgdn -//disable for FF Mac bugfix, "-" key now trapped in keyPress -//if ((code == 43) || (code == 107) || (code == 187) || ((code == 61))) zoomIn(true); else // + -//if ((code == 45) || (code == 109) || (code == 189)) zoomIn(false); else // - -// else -result = true; -window.status=window.status+' result='+result; // debug -if (!result) { - window.status=window.status+' canceling event'; //debug - cancelKey(e); - return false; -} -return result; -} - -function checkMouseRange() { -if (mousex < 0) mousex = -1; -if (mousey < 0) mousey = -1; -if (mousex >= wOrig[0]) mousex = -1; -if (mousey >= hOrig[0]) mousey = -1; -if ((mousex == -1) || (mousey == -1)) { - mousex = -1; - mousey = -1; -} -} - -function falseFunc(e) { return false; } - -function mouseMove(e) { -//document.onmousemove = falseFunc; // disable move event -var posx = 0; -var posy = 0; -if (!e) var e = window.event; -if (mouseAction) { - mouseAction = false; // move cancels the click action - document.body.style.cursor="move"; -} - -if (e.pageX || e.pageY) { - posx = e.pageX; - posy = e.pageY; -} -else if (e.clientX || e.clientY) { - // do not use scroll info because of our special handling - posx = e.clientX; // + document.body.scrollLeft; - posy = e.clientY; // + document.body.scrollTop; -} -posx = posx - marginLeft; -posy = posy - marginTop; - -//if (posx < 0) posx = -1; -//if (posy < 0) posy = -1; -//if (posx >= wc) posx = -1; -//if (posy >= hc) posy = -1; - -window.status='posx,posy='+posx+','+posy; - -//mousex = -1; -//mousey = -1; -//if ((posx >= 0) && (posy >= 0)) { - mousex = x+(posx - wc/2)/z; - mousey = y+(posy - hc/2)/z; -// checkMouseRange(); -//} - - -window.status='mousex,mousey='+mousex+','+mousey+' mouseDrag='+mouseDrag; - -if (mouseDrag) { - //if ((mousex > 0) && (mousey > 0)) { - var tempx = x + mouseDragX-mousex; - var tempy = y + mouseDragY-mousey; - if (tempx < 0) tempx = 0; - if (tempy < 0) tempy = 0; - if (tempx >= wOrig[0]) tempx = wOrig[0]-1; - if (tempy >= hOrig[0]) tempy = hOrig[0]-1; - x = tempx; - y = tempy; - xx = x; - yy = y; - updatePos(); - //} else { - //mouseUp(e); - //} -} - - -//document.onmousemove = mouseMove; // re-enable - -//e.preventDefault(); // this works to prevent things like dragging in mozilla and safari -return false; -} - -function dblClick(e) { -//debug testing singleclick action -// dont need double click -if (!e) var e = window.event; -//alert('dblClick() event called!'); -//clickAction(); -if (e.preventDefault) - e.preventDefault(); -return false; -} - -function clickAction(reverse) { -if ((mousex > 0) && (mousey > 0)) { - var dx = mousex - x; - var dy = mousey - y; - if (!reverse) { - x = mousex; - y = mousey; - xx = x; - yy = y; - updatePos(); - } - // now must set new mouse position since no move event yet - // i.e. if user dblClicks in exactly the same spot, mousex and mousey - // are still pointing to the old coordinates even though the pictures has shifted. - mousex = mousex + dx; - mousey = mousey + dy; - checkMouseRange(); - - if (reverse) - zoomIn(false); - else - zoomIn(true); -} - -} - -function mouseDown(e) { -if (!e) var e = window.event; -checkMouseRange(); -if ((mousex > 0) && (mousey > 0)) { - mouseDrag = true; - mouseAction = true; - mouseDragX = mousex; - mouseDragY = mousey; - window.status='mouseDrag='+mouseDrag; -} -//e.preventDefault(); // this works to prevent things like dragging in mozilla and safari but messes up window focus, drats! -if (window.focus) window.focus(); // in case the windows has lost focus, so we will receive keypresses, if browser supports -return false; -} - - -function mouseUp(e) { -var clickType=1; -if (!e) var e = window.event; -if (mouseAction) { - if (e.which) - clickType = e.which; - if (e.button) - clickType = e.button; - - //debug - //alert('clickType='+clickType); - - clickAction(clickType>1); -} -mouseAction = false; -mouseDrag = false; -document.body.style.cursor="default"; -window.status='mouseDrag='+mouseDrag; -//e.preventDefault(); // this works to prevent things like dragging in mozilla and safari -return false; -} - - -function zoomer(cmd) { -if (cmd=="in") { - zoomIn(true); -} -if (cmd=="out") { - zoomIn(false); -} -if (cmd=="fit") { - //alert('l='+l+' m='+m+' z='+z+' wc='+wc+' hc='+hc); - x = wOrig[0]/2; - y = hOrig[0]/2; - xx = x; - yy = y; - updatePos(); - while ((wOrig[l]*m <= wc || hOrig[l]*m <= hc) && m < 8) { - zoomIn(true); - } - while ((wOrig[l]*m > wc || hOrig[l]*m > hc) && (l+1) < numLevels) { - zoomIn(false); - } -} -if (cmd=="full") { - //alert('l='+l+' m='+m+' z='+z); - while (l > 0) - zoomIn(true); - while (m > 1) - zoomIn(false); -} - -return false; -} - - -function mouseOut(e) { -if (!e) var e = window.event; -var tg = (window.event) ? e.srcElement : e.target; -//window.status='tg.nodeName='+tg.nodeName; -var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement; -if (!reltg) { // apparently FF and IE return null when goes outside window! - mouseAction=false; - mouseUp(e); - return; -} -//alert('tg.nodeName='+tg.nodeName+' reltg.nodeName='+reltg.nodeName); -//window.status=' reltg.nodeName='+reltg.nodeName; -//while (reltg != tg && reltg.nodeName != 'BODY') -// reltg= reltg.parentNode -//if (reltg== tg) return; -// Mouseout took place when mouse actually left layer -// Handle event -//mouseAction=false; -//mouseUp(e); -} - -function dragStart(e) { -if (!e) var e = window.event; -// suppress! -if (e.preventDefault) - e.preventDefault(); -if (e.preventBubble) - e.preventBubble(); -e.cancelBubble = true; -e.returnValue = false; -return false; -} - -function contextMenu(e) { -dragStart(e); -return false; -} - - -// Additional code for NS -if (navigator.appName=="Netscape") { - // need for old Mozilla browsers - //alert('Netscape event handling!'); - document.addEventListener("keydown", keyDown, true); - document.addEventListener("keypress", keyPress, true); - document.addEventListener("dblclick", dblClick, true); - document.addEventListener("mouseup", mouseUp, true); - document.addEventListener("mousedown", mouseDown, true); - - // safari - document.addEventListener("dragstart", dragStart, true); - document.addEventListener("drag", dragStart, true); - -} else { - document.onkeydown = keyDown; - document.onkeypress = keyPress; - document.ondragstart = dragStart; - document.ondblclick = dblClick; - document.onmouseup = mouseUp; - document.onmousedown = mouseDown; -} - -document.onmousemove = mouseMove; -document.onmouseout = mouseOut; -document.oncontextmenu = contextMenu; - -//document.body.ondrag = function () { return false; }; -//document.body.onselectstart = function () { return false; }; -//document.ondrag = function () { return false; }; -//document.onselectstart = function () { return false; }; - - -window.onresize=windowResize; - -//window.captureEvent(Event.RESIZE) // old NN 4 style - -</SCRIPT> - -<body -onLoad="showBrowser();init();return true;" STYLE="overflow: hidden ! important" -> - -<!-- - -myCover empty div with higher z-index appears to defeat the icky auto-drag in safari and mozilla. -(Hope it works in ff and ie too.) -(Any text or an image placed in myCover div will hover over our image.) - - -why does safari hang on resize? - -STYLE="border:thin;position:absolute;left:60;top:60;width:750;height:600;overflow:hidden!important;z-index:1;filter:alpha(opacity=50%);" -<IMG SRC="http://hgwdev-galt.cse.ucsc.edu/images/thelastphotoievertook.jpg"> - -This is good for making the IE hover-icons, at least reduces it to only one in upper-left corner. -However it messes up Safari. However the div in Safari at least still helps reduce dragging problems! -<IMG SRC="/images/dot_clear.gif" width="100%" height="100%"> - -visibility:hidden; - ---> - -<DIV -ID="myClip" -STYLE="position:absolute;left:1000;top:0;z-index:1;" -> -</DIV> - -<DIV -ID="myCover" -STYLE="position:absolute;left:1000;top:0;z-index:2;" -> -</DIV> - -</body> -</html>