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