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