Annotation of ECHO_content/ECHO_content_overview.dtml, revision 1.1
1.1 ! casties 1: <html>
! 2: <head>
! 3: <script type="text/javascript">
! 4: <!--
! 5:
! 6: var
! 7: Selection,
! 8: Coords,
! 9: Red,
! 10: Img,
! 11: state, p1, p2;
! 12:
! 13: function Init() {
! 14: Selection = -1;
! 15: state = 0;
! 16: Coords = new Array();
! 17: Red = new getObj("red");
! 18: Img = new getObj("overview");
! 19: installHandlers();
! 20: }
! 21:
! 22: function installHandlers() {
! 23: <dtml-in "this().getGraphicCoords()">
! 24: <dtml-let ob=sequence-item>
! 25: Coords.push(new Coord('<dtml-var "ob[1]">', Img, <dtml-var "ob[0]">));
! 26: </dtml-let>
! 27: </dtml-in>
! 28: // event handler für Img installieren
! 29: Img.obj.addEventListener("mousemove", onMouseMove, true);
! 30: Img.obj.addEventListener("mousedown", Link, true);
! 31: // event handler für Red installieren
! 32: Red.obj.addEventListener("mousemove", onMouseMove, true);
! 33: Red.obj.addEventListener("mousedown", Link, true);
! 34: };
! 35:
! 36: function calcX(obj) {
! 37: if (!obj) { obj = this.obj };
! 38: var curleft = 0;
! 39: if (obj.offsetParent) {
! 40: while (obj.offsetParent) {
! 41: curleft += obj.offsetLeft;
! 42: obj = obj.offsetParent;
! 43: };
! 44: }
! 45: else if (obj.x) { curleft += obj.x; };
! 46: return curleft;
! 47: }
! 48:
! 49: function calcY(obj) {
! 50: if (!obj) { obj = this.obj };
! 51: var curtop = 0;
! 52: if (obj.offsetParent) {
! 53: while (obj.offsetParent) {
! 54: curtop += obj.offsetTop;
! 55: obj = obj.offsetParent;
! 56: };
! 57: }
! 58: else if (obj.y) { curtop += obj.y; };
! 59: return curtop;
! 60: }
! 61:
! 62: function getObj(name) {
! 63: if (document.getElementById) {
! 64: this.obj = document.getElementById(name);
! 65: this.style = document.getElementById(name).style;
! 66: }
! 67: else if (document.all) {
! 68: this.obj = document.all[name];
! 69: this.style = document.all[name].style;
! 70: }
! 71: else if (document.layers) {
! 72: this.obj = document.layers[name];
! 73: this.style = document.layers[name];
! 74: };
! 75: this.getX = calcX;
! 76: this.getY = calcY;
! 77: this.x = this.getX();
! 78: this.y = this.getY();
! 79: this.w = this.obj.offsetWidth;
! 80: this.h = this.obj.offsetHeight;
! 81: this.area = this.w * this.h;
! 82: }
! 83:
! 84: function ShowRedFrame(spot, img, fx, fy, fw, fh) {
! 85: with (spot.style) {
! 86: left = img.x + fx * img.w;
! 87: top = img.y + fy * img.h;
! 88: width = fw * img.w;
! 89: height = fh * img.h;
! 90: visibility = 'visible';
! 91: };
! 92: }
! 93:
! 94: function NoRedFrame(spot) {
! 95: with (spot.style) {
! 96: left = 0;
! 97: top = 0;
! 98: width = 0;
! 99: height = 0;
! 100: visibility = 'hidden';
! 101: };
! 102: }
! 103:
! 104:
! 105: function Point(event) {
! 106: this.pageX = parseInt(event.pageX);
! 107: this.pageY = parseInt(event.pageY);
! 108: this.x = this.pageX - parseInt(Img.x);
! 109: this.y = this.pageY - parseInt(Img.y);
! 110: return this;
! 111: }
! 112:
! 113: function DrawFrame() {
! 114: with (red_div.style) {
! 115: left = Math.min(p1.x, p2.x) + Img.x;
! 116: top = Math.min(p1.y, p2.y) + Img.y;
! 117: width = Math.abs(p1.x - p2.x);
! 118: height = Math.abs(p1.y - p2.y);
! 119: visibility = 'visible';
! 120: };
! 121: }
! 122:
! 123: function CoordsStr() {
! 124: var imW = Img.w;
! 125: var imH = Img.h;
! 126: var cx = Math.min(p1.x, p2.x)/imW;
! 127: var cy = Math.min(p1.y, p2.y)/imH;
! 128: var cw = Math.abs(p1.x - p2.x)/imW;
! 129: var ch = Math.abs(p1.y - p2.y)/imH;
! 130: return (
! 131: cx.toFixed(4) + ',' +
! 132: cy.toFixed(4) + ',' +
! 133: cw.toFixed(4) + ',' +
! 134: ch.toFixed(4) );
! 135: }
! 136:
! 137: function Move(event) {
! 138: p2 = new Point(event);
! 139: DrawFrame();
! 140: }
! 141:
! 142: function Click(event) {
! 143: if (state == 0) {
! 144: state = 1;
! 145: p1 = new Point(event);
! 146: p2 = p1;
! 147: red_div.obj.addEventListener("mousemove", Move, true);
! 148: Img.obj.addEventListener("mousemove", Move, true);
! 149: } else {
! 150: state = 0;
! 151: p2 = new Point(event);
! 152: red_div.obj.removeEventListener("mousemove", Move, true);
! 153: Img.obj.removeEventListener("mousemove", Move, true);
! 154: }
! 155: DrawFrame();
! 156: document.form.coordstr.value = CoordsStr();
! 157: }
! 158:
! 159: function Coord(name, element, cx, cy, cw, ch) {
! 160: // berechnet aus DIGLIB Koordinaten (0.0 - 1.0) Pixel-Koordinaten relativ zum tag "element"
! 161: var OW = element.obj.offsetWidth;
! 162: var OH = element.obj.offsetHeight;
! 163: this.element = element;
! 164: this.link = new getObj(name);
! 165: this.linkname = name;
! 166: this.linkstyle = this.link.style;
! 167: this.cx = cx;
! 168: this.cy = cy;
! 169: this.cw = cw;
! 170: this.ch = ch;
! 171: this.x = cx * OW;
! 172: this.y = cy * OH;
! 173: this.w = cw * OW;
! 174: this.h = ch * OH;
! 175: this.area = this.h * this.w;
! 176: return this;
! 177: }
! 178:
! 179: function inCoords(coord, p) {
! 180: // liegt Punkt "p" im Rechteckfeld "coord"?
! 181: with (coord) {
! 182: return (
! 183: (p.x >= x) &&
! 184: (p.y >= y) &&
! 185: (p.x <= x + w) &&
! 186: (p.y <= y + h));
! 187: };
! 188: }
! 189:
! 190: function Highlight(coords, nr, high) {
! 191: // selektiert/delektiert Rechteckfeld und Link im Array "coords", Index "nr"
! 192: if (nr == -1) { NoRedFrame(Red); return };
! 193: with (coords[nr]) {
! 194: if (high) {
! 195: ShowRedFrame(Red, element, cx, cy, cw, ch);
! 196: linkstyle.backgroundColor = '#f0dfdf';
! 197: }
! 198: else { linkstyle.backgroundColor = ''; };
! 199: };
! 200: }
! 201:
! 202: function getCoords(event, element, coords) {
! 203: // "mousemove" event handler; berechnet kleinstes Rechteckfeld unter dem Mauszeiger
! 204: // setzt "Selection" als Index in das Array "coords"
! 205: var p = new Point(event, element);
! 206: var AR = element.area;
! 207: var i = 0;
! 208: Highlight(coords, Selection, undefined); // unselect last index
! 209: Selection = -1;
! 210: while (i < coords.length) {
! 211: var coord = coords[i];
! 212: if (inCoords(coord, p)) {
! 213: var ar = coord.area;
! 214: if (ar < AR) { AR = ar; Selection = i };
! 215: }
! 216: i += 1;
! 217: };
! 218: Highlight(coords, Selection, 1); // select new index
! 219: }
! 220:
! 221: function Link() {
! 222: // Datensatz des selektierten Rechteckfelds in den Browser laden
! 223: if (Selection != -1) {
! 224: window.location.href = Coords[Selection].linkname;
! 225: };
! 226: }
! 227:
! 228:
! 229: function onMouseMove(event) {
! 230: getCoords(event, Img, Coords);
! 231: }
! 232:
! 233:
! 234:
! 235:
! 236: //-->
! 237: </script>
! 238:
! 239: </head>
! 240: <body onload="Init()">
! 241: <img id="overview" src="overview">
! 242: <div id="red" style="position: absolute; top: 0; left: 0; width: 0; height: 0; background: url(red.gif); visibility: visible;">
! 243: </div>
! 244: <dtml-in "this().getGraphicCoords()">
! 245: <dtml-let ob=sequence-item>
! 246: <a id="<dtml-var "ob[1]">" onmouseover="ShowRedFrame(Red,Img,<dtml-var "ob[0]">)" onmousout="NoRedFrame(Red)" href="<dtml-var "ob[1]">"><dtml-var "ob[1]"></a><br>
! 247:
! 248: </dtml-let>
! 249: </dtml-in>
! 250:
! 251: </body>
! 252: </html>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>