Mercurial > hg > digilib-old
comparison client/digitallibrary/greyskin/dllib.js @ 451:a6c83fa262b2
still somewhat experimental intermediary release
- Digilib is now an object with methods
- in theory we could now have more than one digilib instance on a page
- for compatibility one instance is created and wrapper methods exist
- setting a mark recenters the view for some (unrelated) reason
author | robcast |
---|---|
date | Mon, 23 Jan 2006 22:36:29 +0100 |
parents | 4255c09a8147 |
children | 6edd60cfa47f |
comparison
equal
deleted
inserted
replaced
450:4255c09a8147 | 451:a6c83fa262b2 |
---|---|
24 | 24 |
25 */ | 25 */ |
26 digilibVersion = "Digilib NG"; | 26 digilibVersion = "Digilib NG"; |
27 dllibVersion = "2.040"; | 27 dllibVersion = "2.040"; |
28 | 28 |
29 MAX_AREA = new Rectangle(0.0, 0.0, 1.0, 1.0); | |
30 | |
31 // default inset (for scalerImg relativ to scalerDiv | |
32 INSET = 40; // because of scrollbars of main window and scaler [Firefox bug?] | |
33 | |
34 // mouse drag area that counts as one click | |
35 MIN_AREA_SIZE = 3 * 3 + 1; | |
36 | |
37 // standard zoom factor | |
38 ZOOMFACTOR = Math.sqrt(2); | |
39 | |
40 // bird's eye view dimensions | |
41 BIRD_MAXX = 100; | |
42 BIRD_MAXY = 100; | |
43 | |
44 // with of arrow bars | |
45 ARROW_WIDTH = 32; | |
46 | |
47 // with of calibration bar | |
48 CALIBRATION_WIDTH = 64; | |
49 | |
50 function identify() { | |
51 // used for identifying a digilib instance | |
52 // Relato uses that function - lugi | |
53 return digilibVersion; | |
54 } | |
55 | |
56 function createMarkDiv(index) { | |
57 var div = document.createElement("div"); | |
58 div.className = "mark"; | |
59 div.id = "mark" + index; | |
60 div.innerHTML = index + 1; | |
61 document.body.appendChild(div); | |
62 return div; | |
63 } | |
64 | |
65 function bestPicSize(elem, inset) { | |
66 // returns a Size with the best image size for the given element | |
67 if (! defined(inset)) { | |
68 inset = 25; | |
69 } | |
70 var ws = getWinSize(); | |
71 var es = getElementPosition(elem); | |
72 if (es) { | |
73 ws.width = ws.width - es.x - inset; | |
74 ws.height = ws.height - es.y - inset; | |
75 } | |
76 return ws; | |
77 } | |
78 | |
79 | |
29 /**************************************************** | 80 /**************************************************** |
30 * digilib specific classes (must be defined first) | 81 * digilib specific classes (must be defined first) |
31 ****************************************************/ | 82 ****************************************************/ |
32 | 83 |
33 /* | 84 /* |
55 for (var i = 0; i < this.length; i++) { | 106 for (var i = 0; i < this.length; i++) { |
56 ma.push(cropFloat(this[i].x) + "/" + cropFloat(this[i].y)); | 107 ma.push(cropFloat(this[i].x) + "/" + cropFloat(this[i].y)); |
57 } | 108 } |
58 return ma.join(","); | 109 return ma.join(","); |
59 } | 110 } |
60 Marks.prototype.addEvent = function(evt) { | 111 Marks.prototype.addEvent = function(evt, digilib) { |
61 // add a mark from a screen event | 112 // add a mark from a screen event |
62 var pos = dlTrafo.invtransform(evtPosition(evt)); | 113 if (!digilib) digilib = dl; |
114 var pos = digilib.trafo.invtransform(evtPosition(evt)); | |
63 this.push(pos); | 115 this.push(pos); |
64 } | 116 } |
65 | 117 |
66 /* | 118 /* |
67 * DLParameters -- digilibs own parameter class | 119 * DLParameters -- digilib parameter class |
68 */ | 120 */ |
69 function DLParameters() { | 121 function DLParameters() { |
70 // flags for parameter sets | 122 // flags for parameter sets |
71 this.PARAM_FILE = 1; | 123 this.PARAM_FILE = 1; |
72 this.PARAM_MODE = 2; | 124 this.PARAM_MODE = 2; |
75 this.PARAM_DPI = 16; | 127 this.PARAM_DPI = 16; |
76 this.PARAM_SIZE = 32; | 128 this.PARAM_SIZE = 32; |
77 this.PARAM_MARK = 64; | 129 this.PARAM_MARK = 64; |
78 this.PARAM_PAGES = 128; | 130 this.PARAM_PAGES = 128; |
79 this.PARAM_ALL = 255; | 131 this.PARAM_ALL = 255; |
80 return this; | |
81 } | |
82 DLParameters.prototype = new Parameters(); | |
83 // move the inherited getAll because we need it later | |
84 DLParameters.prototype._getAll = Parameters.prototype.getAll; | |
85 DLParameters.prototype.getAll = function(paDetail, moDetail) { | |
86 // get Flags and Marks first | |
87 var mo = dlFlags.getAll(moDetail); | |
88 this.set("mo", mo); | |
89 var mk = dlMarks.getAll(); | |
90 this.set("mk", mk); | |
91 var ret = this._getAll(paDetail); | |
92 return ret; | |
93 } | |
94 | |
95 /* | |
96 * DLModes -- digilibs own flags class | |
97 */ | |
98 function DLFlags() { | |
99 // flags for mode sets | |
100 this.MODE_QUAL = 1; | |
101 this.MODE_SIZE = 2; | |
102 this.MODE_MIR = 4; | |
103 this.MODE_OTHER = 128; | |
104 this.MODE_ALL = 255; | |
105 return this; | |
106 } | |
107 // inherits from Flags | |
108 DLFlags.prototype = new Flags(); | |
109 | |
110 /******************************** | |
111 * global variables | |
112 ********************************/ | |
113 | |
114 var isDigilibInitialized = false; // gets set to true in dl_param_init | |
115 | |
116 var dlParams; | |
117 var dlTrafo; | |
118 var dlMaxArea = new Rectangle(0.0, 0.0, 1.0, 1.0); // should be CONST | |
119 var dlArea; | |
120 var dlFlags; | |
121 var dlMarks; | |
122 | |
123 // global elements | |
124 var scalerDiv = null; | |
125 var scalerImg = null; | |
126 | |
127 // default inset (for scalerImg relativ to scalerDiv | |
128 INSET = 40; // because of scrollbars of main window and scaler [Firefox bug?] | |
129 | |
130 /* old parameter function compatibility stuff */ | |
131 function newParameter(a,b,c) {return dlParams.define(a,b,c)}; | |
132 function resetParameter(a) {return dlParams.reset(a)}; | |
133 function deleteParameter(a) {return dlParams.remove(a)}; | |
134 function getParameter(a) {return dlParams.get(a)}; | |
135 function setParameter(a,b,c) {return dlParams.set(a,b,c)}; | |
136 function hasParameter(a) {return dlParams.isSet(a)}; | |
137 function getAllParameters(a) {return dlParams.getAll(a)}; | |
138 getQueryString = getAllParameters; | |
139 function parseParameters(a) {return dlParams.parse(a)}; | |
140 function getAllMarks() {return dlMarks.getAll()}; | |
141 getMarksQueryString = getAllMarks; | |
142 function addMark(evt) {return dlMarks.addEvent(evt)}; | |
143 function deleteMark() {return dlMarks.pop()}; | |
144 function deleteAllMarks() {return dlMarks = new Marks()}; | |
145 function hasFlag(mode) {return dlFlags.get(mode)}; | |
146 function addFlag(mode) {return dlFlags.set(mode)}; | |
147 function removeFlag(mode) {return dlFlags.reset(mode)}; | |
148 function toggleFlag(mode) {return dlFlags.toggle(mode)}; | |
149 function getAllFlags() {return dlFlags.getAll()}; | |
150 | |
151 | |
152 | |
153 // mouse drag area that counts as one click | |
154 MIN_AREA_SIZE = 3 * 3 + 1; | |
155 | |
156 // standard zoom factor | |
157 ZOOMFACTOR = Math.sqrt(2); | |
158 | |
159 // bird's eye view dimensions | |
160 BIRD_MAXX = 100; | |
161 BIRD_MAXY = 100; | |
162 | |
163 // with of arrow bars | |
164 ARROW_WIDTH = 32; | |
165 | |
166 // with of calibration bar | |
167 CALIBRATION_WIDTH = 64; | |
168 | |
169 function identify() { | |
170 // used for identifying a digilib instance | |
171 // Relato uses that function - lugi | |
172 return digilibVersion; | |
173 } | |
174 | |
175 /* | |
176 * more parameter handling | |
177 */ | |
178 | |
179 function parseArea() { | |
180 // returns area Rectangle from current parameters | |
181 return new Rectangle( | |
182 dlParams.get("wx"), | |
183 dlParams.get("wy"), | |
184 dlParams.get("ww"), | |
185 dlParams.get("wh")); | |
186 } | |
187 | |
188 function setParamFromArea(rect) { | |
189 // sets digilib wx etc. from rect | |
190 dlParams.set("wx", cropFloat(rect.x)); | |
191 dlParams.set("wy", cropFloat(rect.y)); | |
192 dlParams.set("ww", cropFloat(rect.width)); | |
193 dlParams.set("wh", cropFloat(rect.height)); | |
194 return true; | |
195 } | |
196 | |
197 function initParameters() { | |
198 // initialisation before onload | |
199 if (!baseLibVersion) alert("ERROR: baselib.js not loaded!"); | |
200 if (isDigilibInitialized) return false; // dl_param_init was already run | |
201 dlParams = new DLParameters(); | |
202 dlFlags = new DLFlags(); | |
203 dlMarks = new Marks(); | |
204 /* request parameters */ | 132 /* request parameters */ |
205 with (dlParams) { | 133 with (this) { |
206 // file | 134 // file |
207 define('fn', '', PARAM_FILE); | 135 define('fn', '', PARAM_FILE); |
208 define('pn', '1', PARAM_FILE); | 136 define('pn', '1', PARAM_FILE); |
209 // mode | 137 // mode |
210 define('mo', '', PARAM_MODE); | 138 define('mo', '', PARAM_MODE); |
227 define('mk', '', PARAM_MARK); | 155 define('mk', '', PARAM_MARK); |
228 // pages total | 156 // pages total |
229 define('pt', '0', PARAM_PAGES); | 157 define('pt', '0', PARAM_PAGES); |
230 // size | 158 // size |
231 define('ws', '1.0', PARAM_SIZE); | 159 define('ws', '1.0', PARAM_SIZE); |
232 } | 160 } |
161 return this; | |
162 } | |
163 DLParameters.prototype = new Parameters(); | |
164 // move the inherited getAll because we need it later | |
165 DLParameters.prototype._getAll = Parameters.prototype.getAll; | |
166 DLParameters.prototype.getAll = function(paDetail, moDetail, digilib) { | |
167 // get Flags and Marks first | |
168 if (!digilib) digilib = dl; | |
169 var mo = digilib.flags.getAll(moDetail); | |
170 this.set("mo", mo); | |
171 var mk = digilib.marks.getAll(); | |
172 this.set("mk", mk); | |
173 var ret = this._getAll(paDetail); | |
174 return ret; | |
175 } | |
176 | |
177 /* | |
178 * DLModes -- digilib flags class | |
179 */ | |
180 function DLFlags() { | |
181 // flags for mode sets | |
182 this.MODE_QUAL = 1; | |
183 this.MODE_SIZE = 2; | |
184 this.MODE_MIR = 4; | |
185 this.MODE_OTHER = 128; | |
186 this.MODE_ALL = 255; | |
233 /* mode flags */ | 187 /* mode flags */ |
234 with (dlFlags) { | 188 with (this) { |
235 define('q0', MODE_QUAL); | 189 define('q0', MODE_QUAL); |
236 define('q1', MODE_QUAL); | 190 define('q1', MODE_QUAL); |
237 define('q2', MODE_QUAL); | 191 define('q2', MODE_QUAL); |
238 define('fit', MODE_SIZE); | 192 define('fit', MODE_SIZE); |
239 define('clip', MODE_SIZE); | 193 define('clip', MODE_SIZE); |
240 define('osize', MODE_SIZE); | 194 define('osize', MODE_SIZE); |
241 define('vmir', MODE_MIR); | 195 define('vmir', MODE_MIR); |
242 define('hmir', MODE_MIR); | 196 define('hmir', MODE_MIR); |
243 } | 197 } |
244 // parse parameters | 198 return this; |
245 parseAllParameters(); | 199 } |
246 isDigilibInitialized = true; | 200 // inherits from Flags |
247 } | 201 DLFlags.prototype = new Flags(); |
248 | 202 |
249 /* ********************************************** | 203 |
250 * parse parameters routines | 204 /* |
251 * ******************************************** */ | 205 * Digilib -- digilib base class |
252 | 206 */ |
253 function parseTrafo(elem) { | 207 function Digilib() { |
208 if (!baseLibVersion) alert("ERROR: baselib.js not loaded!"); | |
209 this.trafo = null; | |
210 // page elements | |
211 this.scalerDiv = null; | |
212 this.scalerImg = null; | |
213 /* parse parameters */ | |
214 // put the query parameters (sans "?") in the parameters array | |
215 this.params = new DLParameters(); | |
216 this.params.parse(location.search.slice(1)); | |
217 // treat special parameters | |
218 this.area = this.parseArea(); | |
219 this.marks = new Marks(); | |
220 this.marks.parse(this.params.get("mk")); | |
221 this.flags = new DLFlags(); | |
222 this.flags.parse(this.params.get("mo")); | |
223 | |
224 return this; | |
225 } | |
226 Digilib.prototype.parseArea = function() { | |
227 // returns area Rectangle from current parameters | |
228 return new Rectangle( | |
229 this.params.get("wx"), | |
230 this.params.get("wy"), | |
231 this.params.get("ww"), | |
232 this.params.get("wh")); | |
233 } | |
234 Digilib.prototype.setParamFromArea = function(rect) { | |
235 // sets digilib wx etc. from rect | |
236 this.params.set("wx", cropFloat(rect.x)); | |
237 this.params.set("wy", cropFloat(rect.y)); | |
238 this.params.set("ww", cropFloat(rect.width)); | |
239 this.params.set("wh", cropFloat(rect.height)); | |
240 return true; | |
241 } | |
242 Digilib.prototype.parseTrafo = function(elem) { | |
254 // returns Transform from current dlArea and picsize | 243 // returns Transform from current dlArea and picsize |
255 var picsize = getElementRect(elem); | 244 var picsize = getElementRect(elem); |
256 var trafo = new Transform(); | 245 var trafo = new Transform(); |
257 // subtract area offset and size | 246 // subtract area offset and size |
258 trafo.concat(getTranslation(new Position(-dlArea.x, -dlArea.y))); | 247 trafo.concat(getTranslation(new Position(-this.area.x, -this.area.y))); |
259 trafo.concat(getScale(new Size(1/dlArea.width, 1/dlArea.height))); | 248 trafo.concat(getScale(new Size(1/this.area.width, 1/this.area.height))); |
260 // scale to screen size | 249 // scale to screen size |
261 trafo.concat(getScale(picsize)); | 250 trafo.concat(getScale(picsize)); |
262 trafo.concat(getTranslation(picsize)); | 251 trafo.concat(getTranslation(picsize)); |
263 // FIX ME: Robert, kannst Du mal nachsehen, ob das folgende tut, was es soll? | 252 // FIX ME: Robert, kannst Du mal nachsehen, ob das folgende tut, was es soll? |
264 // oder gibt es dafuer neuen Code? -- ROC: Bisher funktioniert es nicht! | 253 // oder gibt es dafuer neuen Code? -- ROC: Bisher funktioniert es nicht! |
265 // rotate | 254 // rotate |
266 //var rot = getRotation(- dlParams.get("rot"), new Position(0.5*picsize.width, 0.5*picsize.height)); | 255 //var rot = getRotation(- dl.params.get("rot"), new Position(0.5*picsize.width, 0.5*picsize.height)); |
267 //trafo.concat(rot); | 256 //trafo.concat(rot); |
268 // mirror | 257 // mirror |
269 //if (hasFlag("hmir")) trafo.m00 = - trafo.m00; // ?? | 258 //if (hasFlag("hmir")) trafo.m00 = - trafo.m00; // ?? |
270 //if (hasFlag("vmir")) trafo.m11 = - trafo.m11; // ?? | 259 //if (hasFlag("vmir")) trafo.m11 = - trafo.m11; // ?? |
271 return trafo; | 260 return trafo; |
272 } | 261 } |
273 | 262 Digilib.prototype.setDLParam = function(e, s, relative) { |
274 /* ********************************************** | |
275 * marks routines | |
276 * ******************************************** */ | |
277 | |
278 function createMarkDiv(index) { | |
279 var div = document.createElement("div"); | |
280 div.className = "mark"; | |
281 div.id = "mark" + index; | |
282 div.innerHTML = index + 1; | |
283 document.body.appendChild(div); | |
284 return div; | |
285 } | |
286 | |
287 | |
288 | |
289 | |
290 function bestPicSize(elem, inset) { | |
291 // returns a Size with the best image size for the given element | |
292 if (! defined(inset)) { | |
293 inset = 25; | |
294 } | |
295 var ws = getWinSize(); | |
296 var es = getElementPosition(elem); | |
297 if (es) { | |
298 ws.width = ws.width - es.x - inset; | |
299 ws.height = ws.height - es.y - inset; | |
300 } | |
301 return ws; | |
302 } | |
303 | |
304 function setDLParam(e, s, relative) { | |
305 // sets parameter based on HTML event | 263 // sets parameter based on HTML event |
306 var nam; | 264 var nam; |
307 var val; | 265 var val; |
308 if (s.type && (s.type == "select-one")) { | 266 if (s.type && (s.type == "select-one")) { |
309 nam = s.name; | 267 nam = s.name; |
311 } else if (s.name && s.value) { | 269 } else if (s.name && s.value) { |
312 nam = s.name; | 270 nam = s.name; |
313 val = s.value; | 271 val = s.value; |
314 } | 272 } |
315 if (nam && val) { | 273 if (nam && val) { |
316 dlParams.set(nam, val, relative); | 274 dl.params.set(nam, val, relative); |
317 display(); | 275 display(); |
318 } else { | 276 } else { |
319 alert("ERROR: unable to process event!"); | 277 alert("ERROR: unable to process event!"); |
320 } | 278 } |
321 return true; | 279 return true; |
322 } | 280 } |
323 | 281 Digilib.prototype.onLoad = function() { |
324 | 282 // initialize digilib; called by body.onload |
325 /* ********************************************** | 283 this.scalerDiv = getElement("scaler", true); |
326 * digilib specific routines | 284 this.scalerImg = getElement("pic", true); |
327 * ******************************************** */ | 285 if (this.scalerImg == null && this.scalerDiv) { |
328 | 286 // in N4 pic is in the scaler layer |
329 | 287 this.scalerImg = this.scalerDiv.document.images[0]; |
330 function parseAllParameters() { | 288 } |
331 // put the query parameters (sans "?") in the parameters array | 289 if ((!this.scalerImg)||(!this.scalerDiv)) { |
332 dlParams.parse(location.search.slice(1)); | 290 alert("Sorry, digilib doesn't work here!"); |
333 // treat special parameters | 291 return false; |
334 dlMarks.parse(dlParams.get("mk")); | 292 } |
335 dlArea = parseArea(); | 293 this.setScalerImage(); // setzt auch onImgLoad |
336 dlFlags.parse(dlParams.get("mo")); | 294 this.loadBirdImage(); // l?dt das Bird's Eye Bild |
337 } | 295 } |
338 | 296 Digilib.prototype.setScalerImage = function(detail) { |
339 function dl_param_init() { | |
340 return true; | |
341 } | |
342 | |
343 function dl_init() { | |
344 // initalisation on load | |
345 if (!isDigilibInitialized) dl_param_init(); | |
346 // wait for image to load and display marks | |
347 renderMarks(); | |
348 // done | |
349 focus(); | |
350 } | |
351 | |
352 function setScalerImage(detail) { | |
353 // set the scaler image source (needs the browser size) | 297 // set the scaler image source (needs the browser size) |
354 if (!scalerDiv) scalerDiv = getElement("scaler"); | 298 var picsize = bestPicSize(this.scalerDiv, 50); |
355 if (!scalerImg) scalerImg = getElement("pic"); | |
356 var picsize = bestPicSize(scalerDiv, 50); | |
357 var src = "../servlet/Scaler?" | 299 var src = "../servlet/Scaler?" |
358 + dlParams.getAll(dlParams.PARAM_ALL & ~(dlParams.PARAM_MARK | dlParams.PARAM_PAGES)) | 300 + this.params.getAll(this.params.PARAM_ALL & ~(this.params.PARAM_MARK | this.params.PARAM_PAGES)) |
359 + "&dw=" + picsize.width | 301 + "&dw=" + picsize.width |
360 + "&dh=" + picsize.height; | 302 + "&dh=" + picsize.height; |
361 // debug(src); | 303 // debug(src); |
362 scalerImg.onload = onImgLoad; | 304 this.scalerImg.onload = onImgLoad; |
363 scalerImg.src = src; | 305 this.scalerImg.src = src; |
364 //initScaler(); // dl_init braucht die endgueltigen Masze des pic Elements | 306 |
365 } | 307 var digilib = this; |
366 | 308 // this is a local callback function that can use the current scope |
367 function display(detail, moDetail) { | 309 function onImgLoad() { |
310 // make sure the image is loaded so we know its size | |
311 if (defined(digilib.scalerImg.complete) && !digilib.scalerImg.complete && !digilib.browserType.isN4 ) { | |
312 alert("ERROR: the image seems not to be complete!?"); | |
313 } | |
314 digilib.trafo = digilib.parseTrafo(digilib.scalerImg); | |
315 // display marks | |
316 digilib.renderMarks(); | |
317 digilib.showBirdDiv(isBirdDivVisible); | |
318 digilib.showArrows(); // show arrow overlays for zoom navigation | |
319 digilib.moveCenter(true); // click to move point to center | |
320 // new Slider("sizes", 1, 5, 2); | |
321 focus(); | |
322 } | |
323 } | |
324 Digilib.prototype.display = function(detail, moDetail) { | |
368 // redisplay the page | 325 // redisplay the page |
369 var queryString = dlParams.getAll(detail, moDetail); | 326 var queryString = this.params.getAll(detail, moDetail); |
370 location.href | 327 location.href |
371 = location.protocol + "//" | 328 = location.protocol + "//" |
372 + location.host | 329 + location.host |
373 + location.pathname | 330 + location.pathname |
374 + "?" + queryString; | 331 + "?" + queryString; |
375 } | 332 } |
376 | 333 Digilib.prototype.renderMarks = function() { |
377 /* ********************************************** | |
378 * interactive digilib functions | |
379 * ******************************************** */ | |
380 function renderMarks() { | |
381 // make sure the image is loaded so we know its size | 334 // make sure the image is loaded so we know its size |
382 if (!dlTrafo) { | 335 if (!this.trafo) { |
383 alert("ERROR: cannot render marks!"); | 336 alert("ERROR: cannot render marks!"); |
384 return; | 337 return; |
385 } | 338 } |
386 // debugProps(dlArea, "dlArea"); | 339 // debugProps(dlArea, "dlArea"); |
387 for (var i = 0; i < dlMarks.length; i++) { | 340 for (var i = 0; i < this.marks.length; i++) { |
388 var div = getElement("mark" + i, true) || createMarkDiv(i); | 341 var div = getElement("mark" + i, true) || createMarkDiv(i); |
389 var mark = dlMarks[i]; | 342 var mark = this.marks[i]; |
390 // debugProps(mark, "mark"); | 343 // debugProps(mark, "mark"); |
391 if (dlArea.containsPosition(mark)) { | 344 if (this.area.containsPosition(mark)) { |
392 var mpos = dlTrafo.transform(mark); | 345 var mpos = this.trafo.transform(mark); |
393 // debugProps(mark, "mpos"); | 346 // debugProps(mark, "mpos"); |
394 // suboptimal to place -5 pixels and not half size of mark-image | 347 // suboptimal to place -5 pixels and not half size of mark-image |
395 // better not hide the marked spot (MR) | 348 // better not hide the marked spot (MR) |
396 // mpos.x = mpos.x -5; | 349 // mpos.x = mpos.x -5; |
397 // mpos.y = mpos.y -5; | 350 // mpos.y = mpos.y -5; |
398 moveElement(div, mpos); | 351 moveElement(div, mpos); |
402 showElement(div, false); | 355 showElement(div, false); |
403 } | 356 } |
404 } | 357 } |
405 } | 358 } |
406 | 359 |
407 function setMark(reload) { | 360 /* ********************************************** |
408 | 361 * interactive digilib functions |
362 * ******************************************** */ | |
363 | |
364 Digilib.prototype.setMark = function(reload) { | |
365 // add a mark where clicked | |
366 window.focus(); | |
367 this.moveCenter(false); | |
368 // start event capturing | |
369 registerEvent("mousedown", this.scalerDiv, markEvent); | |
370 | |
371 // our own reference to this for the local function | |
372 var digilib = this; | |
373 | |
409 function markEvent(evt) { | 374 function markEvent(evt) { |
410 // event handler adding a new mark | 375 // event handler adding a new mark |
411 unregisterEvent("mousedown", scalerDiv, markEvent); | 376 unregisterEvent("mousedown", digilib.scalerDiv, markEvent); |
412 dlMarks.addEvent(evt); | 377 digilib.marks.addEvent(evt); |
413 if ( defined(reload) && !reload ) { | 378 if ( defined(reload) && !reload ) { |
414 // don't redisplay | 379 // don't redisplay |
415 renderMarks(); | 380 digilib.renderMarks(); |
416 return; | 381 return stopEvent(evt); |
417 } | 382 } |
418 display(); | 383 digilib.display(); |
419 return stopEvent(evt); | 384 return stopEvent(evt); |
420 } | 385 } |
421 | 386 |
422 // add a mark where clicked | 387 } |
423 window.focus(); | 388 |
424 moveCenter(false); | 389 Digilib.prototype.removeMark = function(reload) { |
425 // start event capturing | |
426 registerEvent("mousedown", scalerDiv, markEvent); | |
427 } | |
428 | |
429 function removeMark(reload) { | |
430 // remove the last mark | 390 // remove the last mark |
431 dlMarks.pop(); | 391 this.marks.pop(); |
432 if (defined(reload)&&(!reload)) { | 392 if (defined(reload)&&(!reload)) { |
433 // don't redisplay | 393 // don't redisplay |
434 renderMarks(); | 394 this.renderMarks(); |
435 return; | 395 return; |
436 } | 396 } |
437 display(); | 397 this.display(); |
438 } | 398 } |
439 | 399 |
440 function zoomArea() { | 400 Digilib.prototype.zoomArea = function() { |
441 var pt1, pt2; | 401 var pt1, pt2; |
442 var zoomdiv = getElement("zoom"); | 402 var zoomdiv = getElement("zoom"); |
443 var overlay = getElement("overlay"); | 403 var overlay = getElement("overlay"); |
444 // use overlay div to avoid <img> mousemove problems | 404 // use overlay div to avoid <img> mousemove problems |
445 var picRect = getElementRect(scalerImg); | 405 var picRect = getElementRect(this.scalerImg); |
446 // FIX ME: is there a way to query the border width from CSS info? | 406 // FIX ME: is there a way to query the border width from CSS info? |
447 // rect.x -= 2; // account for overlay borders | 407 // rect.x -= 2; // account for overlay borders |
448 // rect.y -= 2; | 408 // rect.y -= 2; |
449 moveElement(overlay, picRect); | 409 moveElement(overlay, picRect); |
450 showElement(overlay, true); | 410 showElement(overlay, true); |
451 // start event capturing | 411 // start event capturing |
452 registerEvent("mousedown", overlay, zoomStart); | 412 registerEvent("mousedown", overlay, zoomStart); |
453 registerEvent("mousedown", scalerImg, zoomStart); | 413 registerEvent("mousedown", this.scalerImg, zoomStart); |
454 window.focus(); | 414 window.focus(); |
455 | 415 |
416 // our own reference to this for the local function | |
417 var digilib = this; | |
418 | |
456 // mousedown handler: start moving | 419 // mousedown handler: start moving |
457 function zoomStart(evt) { | 420 function zoomStart(evt) { |
458 pt1 = evtPosition(evt); | 421 pt1 = evtPosition(evt); |
459 unregisterEvent("mousedown", overlay, zoomStart); | 422 unregisterEvent("mousedown", overlay, zoomStart); |
460 unregisterEvent("mousedown", scalerImg, zoomStart); | 423 unregisterEvent("mousedown", digilib.scalerImg, zoomStart); |
461 // setup and show zoom div | 424 // setup and show zoom div |
462 moveElement(zoomdiv, Rectangle(pt1.x, pt1.y, 0, 0)); | 425 moveElement(zoomdiv, Rectangle(pt1.x, pt1.y, 0, 0)); |
463 showElement(zoomdiv, true); | 426 showElement(zoomdiv, true); |
464 // register events | 427 // register events |
465 registerEvent("mousemove", document, zoomMove); | 428 registerEvent("mousemove", document, zoomMove); |
480 // unregister events | 443 // unregister events |
481 unregisterEvent("mousemove", document, zoomMove); | 444 unregisterEvent("mousemove", document, zoomMove); |
482 unregisterEvent("mouseup", document, zoomMove); | 445 unregisterEvent("mouseup", document, zoomMove); |
483 // clip and transform | 446 // clip and transform |
484 clickRect.clipTo(picRect); | 447 clickRect.clipTo(picRect); |
485 var area = dlTrafo.invtransform(clickRect); | 448 var area = digilib.trafo.invtransform(clickRect); |
486 setParamFromArea(area); | 449 digilib.setParamFromArea(area); |
487 // zoomed is always fit | 450 // zoomed is always fit |
488 dlParams.set("ws", 1); | 451 digilib.params.set("ws", 1); |
489 display(); | 452 digilib.display(); |
490 return stopEvent(evt); | 453 return stopEvent(evt); |
491 } | 454 } |
492 | 455 |
493 // mouse move handler | 456 // mouse move handler |
494 function zoomMove(evt) { | 457 function zoomMove(evt) { |
500 moveElement(zoomdiv, rect); | 463 moveElement(zoomdiv, rect); |
501 return stopEvent(evt); | 464 return stopEvent(evt); |
502 } | 465 } |
503 } | 466 } |
504 | 467 |
505 function zoomBy(factor) { | 468 Digilib.prototype.zoomBy = function(factor) { |
506 // zooms by the given factor | 469 // zooms by the given factor |
507 var newarea = dlArea.copy(); | 470 var newarea = this.area.copy(); |
508 newarea.width /= factor; | 471 newarea.width /= factor; |
509 newarea.height /= factor; | 472 newarea.height /= factor; |
510 newarea.x -= 0.5 * (newarea.width - dlArea.width); | 473 newarea.x -= 0.5 * (newarea.width - this.area.width); |
511 newarea.y -= 0.5 * (newarea.height - dlArea.height); | 474 newarea.y -= 0.5 * (newarea.height - this.area.height); |
512 newarea = dlMaxArea.fit(newarea); | 475 newarea = MAX_AREA.fit(newarea); |
513 setParamFromArea(newarea); | 476 this.setParamFromArea(newarea); |
514 display(); | 477 this.display(); |
515 } | 478 } |
516 | 479 |
517 | 480 |
518 function zoomFullpage() { | 481 Digilib.prototype.zoomFullpage = function() { |
519 // zooms out to show the whole image | 482 // zooms out to show the whole image |
520 dlParams.set("wx", 0.0); | 483 this.params.set("wx", 0.0); |
521 dlParams.set("wy", 0.0); | 484 this.params.set("wy", 0.0); |
522 dlParams.set("ww", 1.0); | 485 this.params.set("ww", 1.0); |
523 dlParams.set("wh", 1.0); | 486 this.params.set("wh", 1.0); |
524 display(); | 487 this.display(); |
525 } | 488 } |
526 | 489 |
527 | 490 |
528 function moveCenter(on) { | 491 Digilib.prototype.moveCenter = function(on) { |
529 // move visible area so that it's centered around the clicked point | 492 // move visible area so that it's centered around the clicked point |
530 if (isFullArea()) return; // nothing to do | 493 if (this.isFullArea()) return; // nothing to do |
531 // starting event capture | 494 // starting event capture |
532 if (on) registerEvent("mousedown", scalerImg, moveCenterEvent); | 495 if (on) registerEvent("mousedown", this.scalerImg, moveCenterEvent); |
533 else unregisterEvent("mousedown", scalerImg, moveCenterEvent); | 496 else unregisterEvent("mousedown", this.scalerImg, moveCenterEvent); |
534 window.focus(); | 497 window.focus(); |
535 } | 498 |
536 | 499 // our own reference to this for the local function |
537 function moveCenterEvent(evt) { | 500 var digilib = this; |
538 // move to handler | 501 |
539 var pt = dlTrafo.invtransform(evtPosition(evt)); | 502 function moveCenterEvent(evt) { |
540 var newarea = new Rectangle( | 503 // move to handler |
541 pt.x - 0.5 * dlArea.width, | 504 var pt = digilib.trafo.invtransform(evtPosition(evt)); |
542 pt.y - 0.5 * dlArea.height, | 505 var newarea = digilib.area.copy(); |
543 dlArea.width, | 506 newarea.setCenter(pt); |
544 dlArea.height | 507 newarea.stayInside(MAX_AREA); |
545 ); | 508 // newarea = dlMaxArea.fit(newarea); |
546 newarea.stayInside(dlMaxArea); | 509 // debugProps(newarea, "newarea"); |
547 // newarea = dlMaxArea.fit(newarea); | 510 // debugProps(dlArea, "dlArea"); |
548 // debugProps(newarea, "newarea"); | 511 if (newarea.equals(digilib.area)) return; // keep event handler |
549 // debugProps(dlArea, "dlArea"); | 512 unregisterEvent("mousedown", digilib.scalerImg, moveCenterEvent); |
550 if (newarea.equals(dlArea)) return; // keep event handler | 513 // set parameters |
551 unregisterEvent("mousedown", scalerImg, moveCenterEvent); | 514 digilib.setParamFromArea(newarea); |
552 // set parameters | 515 digilib.display(); |
553 setParamFromArea(newarea); | 516 } |
554 parseArea(); | 517 } |
555 display(); | 518 |
556 } | 519 Digilib.prototype.isFullArea = function(area) { |
557 | 520 if (!area) area = this.area; |
558 function isFullArea(area) { | |
559 if (!area) area = dlArea; | |
560 // pixel by pixel is not always full area | 521 // pixel by pixel is not always full area |
561 return (area.width == 1.0) && (area.height == 1.0) && ! hasFlag("clip"); | 522 return (area.width == 1.0) && (area.height == 1.0) && ! hasFlag("clip"); |
562 } | 523 } |
563 | 524 |
564 function canMove(movx, movy) { | 525 Digilib.prototype.canMove = function(movx, movy) { |
565 if (isFullArea()) return false; | 526 if (this.isFullArea()) return false; |
566 var x2 = dlArea.x + dlArea.width; | 527 var x2 = this.area.x + this.area.width; |
567 var y2 = dlArea.y + dlArea.height; | 528 var y2 = this.area.y + this.area.height; |
568 // debugProps(dlArea); | 529 // debugProps(dlArea); |
569 return ((movx < 0) && (dlArea.x > 0)) | 530 return ((movx < 0) && (this.area.x > 0)) |
570 || ((movx > 0) && (x2 < 1.0)) | 531 || ((movx > 0) && (x2 < 1.0)) |
571 || ((movy < 0) && (dlArea.y > 0)) | 532 || ((movy < 0) && (this.area.y > 0)) |
572 || ((movy > 0) && (y2 < 1.0)) | 533 || ((movy > 0) && (y2 < 1.0)) |
573 } | 534 } |
574 | 535 |
575 function moveBy(movx, movy) { | 536 Digilib.prototype.moveBy = function(movx, movy) { |
576 // move visible area by movx and movy (in units of ww, wh) | 537 // move visible area by movx and movy (in units of ww, wh) |
577 if (!canMove(movx, movy)) return; // nothing to do | 538 if (!this.canMove(movx, movy)) return; // nothing to do |
578 var newarea = dlArea.copy(); | 539 var newarea = this.area.copy(); |
579 newarea.x += parseFloat(movx)*dlArea.width; | 540 newarea.x += parseFloat(movx)*this.area.width; |
580 newarea.y += parseFloat(movy)*dlArea.height; | 541 newarea.y += parseFloat(movy)*this.area.height; |
581 newarea = dlMaxArea.fit(newarea); | 542 newarea = MAX_AREA.fit(newarea); |
582 // set parameters | 543 // set parameters |
583 setParamFromArea(newarea); | 544 this.setParamFromArea(newarea); |
584 parseArea(); | 545 this.display(); |
585 display(); | 546 } |
586 } | 547 |
587 | 548 Digilib.prototype.getRef = function(baseUrl) { |
588 function getRef(baseURL) { | |
589 // returns a reference to the current digilib set | 549 // returns a reference to the current digilib set |
590 if (!baseUrl) baseUrl | 550 if (!baseUrl) baseUrl |
591 = location.protocol | 551 = location.protocol |
592 + "//" | 552 + "//" |
593 + location.host | 553 + location.host |
594 + location.pathname; | 554 + location.pathname; |
595 var hyperlinkRef = baseUrl; | 555 var hyperlinkRef = baseUrl; |
596 var params = dlParams.getAll(dlParams.PARAM_ALL & ~(dlParams.PARAM_DPI | dlParams.PARAM_PAGES)); // all without ddpi, pt | 556 with (this.params) { |
597 if (params.length > 0) hyperlinkRef += "?" + params; | 557 var ps = getAll(PARAM_ALL & ~(PARAM_DPI | PARAM_PAGES)); // all without ddpi, pt |
558 } | |
559 if (ps.length > 0) hyperlinkRef += "?" + ps; | |
598 return hyperlinkRef; | 560 return hyperlinkRef; |
599 } | 561 } |
600 | 562 |
601 function getRefWin(type, msg) { | 563 Digilib.prototype.getRefWin = function(type, msg) { |
602 // shows an alert with a reference to the current digilib set | 564 // shows an alert with a reference to the current digilib set |
603 if (! msg) msg = "URL reference to the current view"; | 565 if (! msg) msg = "URL reference to the current view"; |
604 prompt(msg, getRef()); | 566 prompt(msg, this.getRef()); |
605 } | 567 } |
606 | 568 |
607 function getQuality() { | 569 Digilib.prototype.getQuality = function() { |
608 // returns the current q setting | 570 // returns the current q setting |
609 for (var i = 0; i < 3; i++) { | 571 for (var i = 0; i < 3; i++) { |
610 if (dlFlags.get("q"+i)) return i; | 572 if (this.flags.get("q"+i)) return i; |
611 } | 573 } |
612 return 1 | 574 return 1 |
613 } | 575 } |
614 | 576 |
615 function setQuality(qual) { | 577 Digilib.prototype.setQuality = function(qual) { |
616 // set the image quality | 578 // set the image quality |
617 for (var i = 0; i < 3; i++) dlFlags.reset("q" + i); | |
618 if ((qual < 0)||(qual > 2)) return alert("Quality setting not supported"); | 579 if ((qual < 0)||(qual > 2)) return alert("Quality setting not supported"); |
619 dlFlags.set("q" + qual); | 580 for (var i = 0; i < 3; i++) this.flags.reset("q" + i); |
620 display(); | 581 this.flags.set("q" + qual); |
621 } | 582 this.display(); |
622 | 583 } |
623 function setQualityWin(msg) { | 584 |
585 Digilib.prototype.setQualityWin = function(msg) { | |
624 // dialog for setting quality | 586 // dialog for setting quality |
625 if (! msg) msg = "Quality (0..2)"; | 587 if (! msg) msg = "Quality (0..2)"; |
626 var q = getQuality(); | 588 var q = this.getQuality(); |
627 var newq = window.prompt(msg, q); | 589 var newq = window.prompt(msg, q); |
628 if (newq) setQuality(newq); | 590 if (newq) this.setQuality(newq); |
629 } | 591 } |
630 | 592 |
631 function mirror(dir) { | 593 Digilib.prototype.mirror = function(dir) { |
632 // mirror the image horizontally or vertically | 594 // mirror the image horizontally or vertically |
633 if (dir == "h") { | 595 if (dir == "h") { |
634 dlFlags.toggle("hmir"); | 596 this.flags.toggle("hmir"); |
635 } else { | 597 } else { |
636 dlFlags.toggle("vmir"); | 598 this.flags.toggle("vmir"); |
637 } | 599 } |
638 display(); | 600 this.display(); |
639 } | 601 } |
640 | 602 |
641 function gotoPage(gopage, keep) { | 603 Digilib.prototype.gotoPage = function(gopage, keep) { |
642 // goto given page nr (+/-: relative) | 604 // goto given page nr (+/-: relative) |
643 var oldpn = parseInt(dlParams.get("pn")); | 605 var oldpn = parseInt(this.params.get("pn")); |
644 dlParams.set("pn", gopage, true); | 606 // set with relative=true uses the sign |
645 var pn = parseInt(dlParams.get("pn")); | 607 this.params.set("pn", gopage, true); |
608 // now check the outcome | |
609 var pn = parseInt(this.params.get("pn")); | |
646 if (pn < 1) { | 610 if (pn < 1) { |
647 alert("No such page! (Page number too low)"); | 611 alert("No such page! (Page number too low)"); |
648 dlParams.set("pn", oldpn); | 612 this.params.set("pn", oldpn); |
649 return; | 613 return; |
650 } | 614 } |
651 if (dlParams.isSet("pt")) { | 615 if (this.params.isSet("pt")) { |
652 pt = parseInt(dlParams.get("pt")) | 616 pt = parseInt(this.params.get("pt")) |
653 if (pn > pt) { | 617 if (pn > pt) { |
654 alert("No such page! (Page number too high)"); | 618 alert("No such page! (Page number too high)"); |
655 dlParams.set("pn", oldpn); | 619 this.params.set("pn", oldpn); |
656 return; | 620 return; |
657 } | 621 } |
658 } | 622 } |
659 if (keep) { | 623 if (keep) { |
660 display(dlParams.PARAM_ALL & ~dlParams.PARAM_MARK); // all, no mark | 624 this.display(this.params.PARAM_ALL & ~this.params.PARAM_MARK); // all, no mark |
661 } else { | 625 } else { |
662 display(dlParams.PARAM_FILE | dlParams.PARAM_MODE | dlParams.PARAM_PAGES, dlParams.MODE_QUAL | dlParams.MODE_OTHER); // fn, pn, ws, mo + pt | 626 this.display(this.params.PARAM_FILE | this.params.PARAM_MODE | this.params.PARAM_PAGES, this.params.MODE_QUAL | this.params.MODE_OTHER); // fn, pn, ws, mo + pt |
663 } | 627 } |
664 } | 628 } |
665 | 629 |
666 function gotoPageWin() { | 630 Digilib.prototype.gotoPageWin = function() { |
667 // dialog to ask for new page nr | 631 // dialog to ask for new page nr |
668 var pn = dlParams.get("pn"); | 632 var pn = this.params.get("pn"); |
669 var gopage = window.prompt("Go to page", pn); | 633 var gopage = window.prompt("Go to page", pn); |
670 if (gopage) gotoPage(gopage); | 634 if (gopage) this.gotoPage(gopage); |
671 } | 635 } |
672 | 636 |
673 function setParamWin(param, text, relative) { | 637 Digilib.prototype.setParamWin = function(param, text, relative) { |
674 // dialog to ask for new parameter value | 638 // dialog to ask for new parameter value |
675 var val = dlParams.get(param); | 639 var val = this.params.get(param); |
676 var newval = window.prompt(text, val); | 640 var newval = window.prompt(text, val); |
677 if (newval) { | 641 if (newval) { |
678 dlParams.set(param, newval, relative); | 642 this.params.set(param, newval, relative); |
679 display(); | 643 this.display(); |
680 } | 644 } |
681 } | 645 } |
682 | 646 |
683 function showOptions(show) { | 647 Digilib.prototype.showOptions = function(show) { |
684 // show or hide option div | 648 // show or hide option div |
685 var elem = getElement("dloptions"); | 649 var elem = getElement("dloptions"); |
686 showElement(elem, show); | 650 showElement(elem, show); |
687 // FIX ME: get rid of the dotted line around the buttons when focused | 651 // FIX ME: get rid of the dotted line around the buttons when focused |
688 } | 652 } |
689 | 653 |
690 function showAboutDiv(show) { | 654 Digilib.prototype.showAboutDiv = function(show) { |
691 // show or hide "about" div | 655 // show or hide "about" div |
692 var elem = getElement("about"); | 656 var elem = getElement("about"); |
693 if (elem == null) { | 657 if (elem == null) { |
694 if (show) alert("About Digilib - dialog missing in HTML code!" | 658 if (show) alert("About Digilib - dialog missing in HTML code!" |
695 + "\nDigilib Version: " + digilibVersion | 659 + "\nDigilib Version: " + digilibVersion |
708 moveElement(elem, aboutRect); | 672 moveElement(elem, aboutRect); |
709 } | 673 } |
710 showElement(elem, show); | 674 showElement(elem, show); |
711 } | 675 } |
712 | 676 |
713 function loadBirdImage() { | 677 Digilib.prototype.loadBirdImage = function() { |
714 var img = getElement("bird-image"); | 678 var img = getElement("bird-image"); |
715 var src = "../servlet/Scaler?" | 679 var src = "../servlet/Scaler?" |
716 + dlParams.getAll(dlParams.PARAM_FILE) | 680 + this.params.getAll(this.params.PARAM_FILE) |
717 + "&dw=" + BIRD_MAXX | 681 + "&dw=" + BIRD_MAXX |
718 + "&dh=" + BIRD_MAXY; | 682 + "&dh=" + BIRD_MAXY; |
719 img.src = src; | 683 img.src = src; |
720 } | 684 } |
721 | 685 |
722 function showBirdDiv(show) { | 686 Digilib.prototype.showBirdDiv = function(show) { |
723 // show or hide "bird's eye" div | 687 // show or hide "bird's eye" div |
724 var startPos; // anchor for dragging | 688 var startPos; // anchor for dragging |
725 var newRect; // position after drag | 689 var newRect; // position after drag |
726 var birdImg = getElement("bird-image"); | 690 var birdImg = getElement("bird-image"); |
727 var birdArea = getElement("bird-area"); | 691 var birdArea = getElement("bird-area"); |
728 var overlay = getElement("overlay"); | 692 var overlay = getElement("overlay"); |
729 showElement(birdImg, show); | 693 showElement(birdImg, show); |
730 // dont show selector if area has full size | 694 // dont show selector if area has full size |
731 if (!show || isFullArea()) { | 695 if (!show || this.isFullArea()) { |
732 // hide area | 696 // hide area |
733 showElement(birdArea, false); | 697 showElement(birdArea, false); |
734 showElement(overlay, false); | 698 showElement(overlay, false); |
735 return; | 699 return; |
736 }; | 700 }; |
737 var birdImgRect = getElementRect(birdImg); | 701 var birdImgRect = getElementRect(birdImg); |
738 var area = parseArea(); | 702 var area = this.area; |
739 // scale area down to img size | 703 // scale area down to img size |
740 var birdAreaRect = new Rectangle( | 704 var birdAreaRect = new Rectangle( |
741 // what about borders ?? | 705 // what about borders ?? |
742 birdImgRect.x + birdImgRect.width * area.x, | 706 birdImgRect.x + birdImgRect.width * area.x, |
743 birdImgRect.y + birdImgRect.height * area.y, | 707 birdImgRect.y + birdImgRect.height * area.y, |
749 moveElement(overlay, birdImgRect); | 713 moveElement(overlay, birdImgRect); |
750 showElement(overlay, true); | 714 showElement(overlay, true); |
751 registerEvent("mousedown", overlay, birdAreaStartDrag); | 715 registerEvent("mousedown", overlay, birdAreaStartDrag); |
752 registerEvent("mousedown", birdImg, birdAreaStartDrag); | 716 registerEvent("mousedown", birdImg, birdAreaStartDrag); |
753 | 717 |
718 // our own reference to this for local functions | |
719 var digilib = this; | |
720 | |
754 function birdAreaStartDrag(evt) { | 721 function birdAreaStartDrag(evt) { |
755 // mousedown handler: start drag | 722 // mousedown handler: start drag |
756 startPos = evtPosition(evt); | 723 startPos = evtPosition(evt); |
757 unregisterEvent("mousedown", overlay, birdAreaStartDrag); | 724 unregisterEvent("mousedown", overlay, birdAreaStartDrag); |
758 unregisterEvent("mousedown", birdImg, birdAreaStartDrag); | 725 unregisterEvent("mousedown", birdImg, birdAreaStartDrag); |
759 registerEvent("mousemove", document, birdAreaMove); | 726 registerEvent("mousemove", document, birdAreaMove); |
760 registerEvent("mouseup", document, birdAreaEndDrag); | 727 registerEvent("mouseup", document, birdAreaEndDrag); |
761 // debugProps(getElementRect(bird)) | 728 // debugProps(getElementRect(bird)) |
762 return stopEvent(evt); | 729 return stopEvent(evt); |
763 } | 730 } |
764 | 731 |
765 function birdAreaMove(evt) { | 732 function birdAreaMove(evt) { |
766 // mousemove handler: drag | 733 // mousemove handler: drag |
767 var pos = evtPosition(evt); | 734 var pos = evtPosition(evt); |
768 var dx = pos.x - startPos.x; | 735 var dx = pos.x - startPos.x; |
776 // stay within image | 743 // stay within image |
777 newRect.stayInside(birdImgRect); | 744 newRect.stayInside(birdImgRect); |
778 moveElement(birdArea, newRect); | 745 moveElement(birdArea, newRect); |
779 showElement(birdArea, true); | 746 showElement(birdArea, true); |
780 return stopEvent(evt); | 747 return stopEvent(evt); |
781 } | 748 } |
782 | 749 |
783 function birdAreaEndDrag(evt) { | 750 function birdAreaEndDrag(evt) { |
784 // mouseup handler: reload page | 751 // mouseup handler: reload page |
785 unregisterEvent("mousemove", document, birdAreaMove); | 752 unregisterEvent("mousemove", document, birdAreaMove); |
786 unregisterEvent("mouseup", document, birdAreaEndDrag); | 753 unregisterEvent("mouseup", document, birdAreaEndDrag); |
787 showElement(overlay, false); | 754 showElement(overlay, false); |
788 if (newRect == null) { // no movement happened | 755 if (newRect == null) { // no movement happened |
789 startPos = birdAreaRect.getCenter(); | 756 startPos = birdAreaRect.getCenter(); |
790 birdAreaMove(evt); // set center to click position | 757 birdAreaMove(evt); // set center to click position |
791 } | 758 } |
792 dlParams.set("wx", cropFloat((newRect.x - birdImgRect.x) / birdImgRect.width)); | 759 digilib.params.set("wx", cropFloat((newRect.x - birdImgRect.x) / birdImgRect.width)); |
793 dlParams.set("wy", cropFloat((newRect.y - birdImgRect.y) / birdImgRect.height)); | 760 digilib.params.set("wy", cropFloat((newRect.y - birdImgRect.y) / birdImgRect.height)); |
794 // zoomed is always fit | 761 // zoomed is always fit |
795 dlParams.set("ws", 1); | 762 digilib.params.set("ws", 1); |
796 display(); | 763 digilib.display(); |
797 return stopEvent(evt); | 764 return stopEvent(evt); |
798 } | 765 } |
799 } | 766 } |
800 | 767 |
801 function showArrow(name, rect, show) { | 768 Digilib.prototype.showArrow = function(name, rect, show) { |
802 var arrow = getElement(name); | 769 var arrow = getElement(name); |
803 moveElement(arrow, rect); | 770 moveElement(arrow, rect); |
804 showElement(arrow, show); | 771 showElement(arrow, show); |
805 } | 772 } |
806 | 773 |
807 function showArrows() { | 774 Digilib.prototype.showArrows = function() { |
808 // show the 4 arrow bars on top of scaler img according to current dlArea | 775 // show the 4 arrow bars on top of scaler img according to current dlArea |
809 if (defined(scalerImg.complete) && !scalerImg.complete && !browserType.isN4 ) { | 776 if (defined(this.scalerImg.complete) && !this.scalerImg.complete && !browserType.isN4 ) { |
810 setTimeout("showArrows()", 100); | 777 alert("ERROR: scaler img not complete in showArrows!"); |
811 return; | |
812 } | 778 } |
813 var r = getElementRect(scalerImg); | 779 var r = getElementRect(this.scalerImg); |
814 showArrow('up', | 780 this.showArrow('up', |
815 new Rectangle(r.x, r.y, r.width, ARROW_WIDTH), | 781 new Rectangle(r.x, r.y, r.width, ARROW_WIDTH), |
816 canMove(0, -1) | 782 this.canMove(0, -1) |
817 ); | 783 ); |
818 showArrow('down', | 784 this.showArrow('down', |
819 new Rectangle(r.x, r.y + r.height - ARROW_WIDTH, r.width, ARROW_WIDTH), | 785 new Rectangle(r.x, r.y + r.height - ARROW_WIDTH, r.width, ARROW_WIDTH), |
820 canMove(0, 1) | 786 this.canMove(0, 1) |
821 ); | 787 ); |
822 showArrow('left', | 788 this.showArrow('left', |
823 new Rectangle(r.x, r.y, ARROW_WIDTH, r.height), | 789 new Rectangle(r.x, r.y, ARROW_WIDTH, r.height), |
824 canMove(-1, 0) | 790 this.canMove(-1, 0) |
825 ); | 791 ); |
826 showArrow('right', | 792 this.showArrow('right', |
827 new Rectangle(r.x + r.width - ARROW_WIDTH, r.y, ARROW_WIDTH, r.height), | 793 new Rectangle(r.x + r.width - ARROW_WIDTH, r.y, ARROW_WIDTH, r.height), |
828 canMove(1, 0) | 794 this.canMove(1, 0) |
829 ); | 795 ); |
830 } | 796 } |
831 | 797 |
832 function calibrate(direction) { | 798 Digilib.prototype.calibrate = function(direction) { |
833 // calibrate screen | 799 // calibrate screen |
834 var startPos; // anchor for dragging | 800 var startPos; // anchor for dragging |
835 var newRect; // position after drag | 801 var newRect; // position after drag |
836 var calDiv = getElement("calibration"); | 802 var calDiv = getElement("calibration"); |
837 var pixel = calDiv.getElementsByTagName("p")[0]; | 803 var pixel = calDiv.getElementsByTagName("p")[0]; |
890 moveCenter(true); | 856 moveCenter(true); |
891 return stopEvent(evt); | 857 return stopEvent(evt); |
892 } | 858 } |
893 } | 859 } |
894 | 860 |
895 function originalSize(on) { | 861 Digilib.prototype.originalSize = function(on) { |
896 // set osize flag, needs calibrated screen | 862 // set osize flag, needs calibrated screen |
897 if (on) { | 863 if (on) { |
898 var dpi = cookie.get("ddpi"); | 864 var dpi = cookie.get("ddpi"); |
899 if (dpi == null) { | 865 if (dpi == null) { |
900 alert("Screen has not yet been calibrated - using default value of 72 dpi"); | 866 alert("Screen has not yet been calibrated - using default value of 72 dpi"); |
901 dpi = 72; | 867 dpi = 72; |
902 } | 868 } |
903 dlParams.set("ddpi", dpi); | 869 this.params.set("ddpi", dpi); |
904 addFlag("osize"); | 870 this.flags.set("osize"); |
905 display(); | 871 this.display(); |
906 } | 872 } else { |
907 else removeFlag("osize"); | 873 this.flags.reset("osize"); |
908 } | 874 } |
909 | 875 } |
910 function pixelByPixel(on) { | 876 |
877 Digilib.prototype.pixelByPixel = function(on) { | |
911 // sets clip flag | 878 // sets clip flag |
912 if (on) { | 879 if (on) { |
913 addFlag("clip"); | 880 this.flags.set("clip"); |
914 display(); | 881 this.display(); |
915 } | 882 } |
916 else removeFlag("clip"); | 883 else this.flags.reset("clip"); |
917 } | 884 } |
918 | 885 |
919 function pageWidth() { | 886 Digilib.prototype.pageWidth = function() { |
920 var divSize = getElementSize(scalerDiv); | 887 var divSize = getElementSize(this.scalerDiv); |
921 divSize.width -= INSET; // allow for scrollbars [Firefox bug?] | 888 divSize.width -= INSET; // allow for scrollbars [Firefox bug?] |
922 var imgSize = getElementSize(scalerImg); | 889 var imgSize = getElementSize(this.scalerImg); |
923 if (imgSize.width < divSize.width) { | 890 if (imgSize.width < divSize.width) { |
924 dlParams.set("ws", cropFloat(divSize.width / imgSize.width)); | 891 this.params.set("ws", cropFloat(divSize.width / imgSize.width)); |
925 display(dlParams.PARAM_ALL & ~dlParams.PARAM_DIM); // no zoom | 892 this.display(this.params.PARAM_ALL & ~this.params.PARAM_DIM); // no zoom |
926 }; | 893 }; |
927 // TODO: how to calculate correct width if zoom is on? (plus size?) | 894 // TODO: how to calculate correct width if zoom is on? (plus size?) |
928 | 895 } |
929 } | 896 |
930 | 897 Digilib.prototype.resize = function(factor) { |
931 function resize(factor) { | 898 this.params.set("ws", factor); |
932 dlParams.set("ws", factor); | 899 this.showSizeMenu(false); |
933 showSizeMenu(false); | 900 this.display(); |
934 display(); | 901 } |
935 } | 902 |
936 | 903 Digilib.prototype.showSizeMenu = function(show) { |
937 function showSizeMenu(show) { | |
938 var menu = getElement("sizes"); | 904 var menu = getElement("sizes"); |
939 if (show) { | 905 if (show) { |
940 // align menu with button | 906 // align menu with button |
941 var buttonPos = getElementPosition(getElement("size")); | 907 var buttonPos = getElementPosition(getElement("size")); |
942 moveElement(menu, new Position(buttonPos.x - 50, buttonPos.y)); | 908 moveElement(menu, new Position(buttonPos.x - 50, buttonPos.y)); |
943 } | 909 } |
944 showElement(menu, show); | 910 showElement(menu, show); |
945 } | 911 } |
912 | |
913 | |
914 /******************************** | |
915 * global variables | |
916 ********************************/ | |
917 | |
918 var dl = new Digilib(); | |
919 | |
920 /* old parameter function compatibility stuff */ | |
921 function newParameter(a,b,c) {return dl.params.define(a,b,c)}; | |
922 function resetParameter(a) {return dl.params.reset(a)}; | |
923 function deleteParameter(a) {return dl.params.remove(a)}; | |
924 function getParameter(a) {return dl.params.get(a)}; | |
925 function setParameter(a,b,c) {return dl.params.set(a,b,c)}; | |
926 function hasParameter(a) {return dl.params.isSet(a)}; | |
927 function getAllParameters(a) {return dl.params.getAll(a)}; | |
928 getQueryString = getAllParameters; | |
929 function parseParameters(a) {return dl.params.parse(a)}; | |
930 function getAllMarks() {return dl.marks.getAll()}; | |
931 getMarksQueryString = getAllMarks; | |
932 function addMark(evt) {return dl.marks.addEvent(evt)}; | |
933 function deleteMark() {return dl.marks.pop()}; | |
934 function deleteAllMarks() {return dl.marks = new Marks()}; | |
935 function hasFlag(mode) {return dl.flags.get(mode)}; | |
936 function addFlag(mode) {return dl.flags.set(mode)}; | |
937 function removeFlag(mode) {return dl.flags.reset(mode)}; | |
938 function toggleFlag(mode) {return dl.flags.toggle(mode)}; | |
939 function getAllFlags() {return dl.flags.getAll()}; | |
940 /* old digilib function compatibility */ | |
941 function setDLParam(e, s, relative) {dl.setDLParam(e, s, relative)}; | |
942 function display(detail, moDetail) {dl.display(detail, moDetail)}; | |
943 function setMark(reload) {dl.setMark(reload)}; | |
944 function removeMark(reload) {dl.removeMark(reload)}; | |
945 function zoomArea() {dl.zoomArea()}; | |
946 function zoomBy(factor) {dl.zoomBy(factor)}; | |
947 function zoomFullpage() {dl.zoomFullpage()}; | |
948 function moveCenter(on) {dl.moveCenter(on)}; | |
949 function isFullArea(area) {dl.isFullArea(area)}; | |
950 function canMove(movx, movy) {dl.canMove(movx, movy)}; | |
951 function moveBy(movx, movy) {dl.moveBy(movx, movy)}; | |
952 function getRef(baseURL) {dl.getRef(baseURL)}; | |
953 function getRefWin(type, msg) {dl.getRefWin(type, msg)}; | |
954 function getQuality() {dl.getQuality()}; | |
955 function setQuality(qual) {dl.setQuality(qual)}; | |
956 function setQualityWin(msg) {dl.setQualityWin(msg)}; | |
957 function mirror(dir) {dl.mirror(dir)}; | |
958 function gotoPage(gopage, keep) {dl.gotoPage(gopage, keep)}; | |
959 function gotoPageWin() {dl.gotoPageWin()}; | |
960 function setParamWin(param, text, relative) {dl.setParamWin(param, text, relative)}; | |
961 function showOptions(show) {dl.showOptions(show)}; | |
962 function showBirdDiv(show) {dl.showBirdDiv(show)}; | |
963 function showAboutDiv(show) {dl.showAboutDiv(show)}; | |
964 function calibrate(direction) {dl.calibrate(direction)}; | |
965 function originalSize(on) {dl.originalSize(on)}; | |
966 function pixelByPixel(on) {dl.pixelByPixel(on)}; | |
967 function pageWidth() {dl.pageWidth()}; | |
968 function resize(factor) {dl.resize(factor)}; | |
969 function showSizeMenu(show) {dl.showSizeMenu(show)}; | |
970 | |
971 | |
946 // :tabSize=4:indentSize=4:noTabs=true: | 972 // :tabSize=4:indentSize=4:noTabs=true: |
947 | 973 |