Annotation of ECHO_content/ECHO_content_overview.dtml, revision 1.1.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>