Mercurial > hg > digilib-old
comparison client/digitallibrary/jquery/jquery.digilib.js @ 650:0c5930916d53 jquery
zoom to page width works now
added clop (= data.dlOpts) client side options parameter
also added infrastructure for mo Scaler options
author | robcast |
---|---|
date | Thu, 20 Jan 2011 19:04:56 +0100 |
parents | fd526464ae87 |
children | 694bdb86cbad |
comparison
equal
deleted
inserted
replaced
649:fd526464ae87 | 650:0c5930916d53 |
---|---|
33 onclick : "javascript:zoomArea()", | 33 onclick : "javascript:zoomArea()", |
34 tooltip : "zoom area", | 34 tooltip : "zoom area", |
35 img : "zoom-area.png" | 35 img : "zoom-area.png" |
36 }, | 36 }, |
37 zoomfull : { | 37 zoomfull : { |
38 onclick : "zoomFullpage", | 38 onclick : "zoomFull", |
39 tooltip : "view the whole image", | 39 tooltip : "view the whole image", |
40 img : "zoom-full.png" | 40 img : "zoom-full.png" |
41 }, | 41 }, |
42 pagewidth : { | 42 pagewidth : { |
43 onclick : "javascript:zoomFullpage('width')", | 43 onclick : ["zoomFull", "width"], |
44 tooltip : "page width", | 44 tooltip : "page width", |
45 img : "pagewidth.png" | 45 img : "pagewidth.png" |
46 }, | 46 }, |
47 back : { | 47 back : { |
48 onclick : ["gotoPage", "-1"], | 48 onclick : ["gotoPage", "-1"], |
78 onclick : "setMark", | 78 onclick : "setMark", |
79 tooltip : "set a mark", | 79 tooltip : "set a mark", |
80 img : "mark.png" | 80 img : "mark.png" |
81 }, | 81 }, |
82 delmark : { | 82 delmark : { |
83 onclick : "javascript:removeMark()", | 83 onclick : "removeMark", |
84 tooltip : "delete the last mark", | 84 tooltip : "delete the last mark", |
85 img : "delmark.png" | 85 img : "delmark.png" |
86 }, | 86 }, |
87 hmir : { | 87 hmir : { |
88 onclick : "javascript:mirror('h')", | 88 onclick : "javascript:mirror('h')", |
173 'rgba' : '0/0/0', | 173 'rgba' : '0/0/0', |
174 'ddpi' : null, | 174 'ddpi' : null, |
175 'ddpix' : null, | 175 'ddpix' : null, |
176 'ddpiy' : null, | 176 'ddpiy' : null, |
177 // list of digilib parameters | 177 // list of digilib parameters |
178 'digilibParamNames' : ['fn','pn','ww','wh','wx','wy','ws','mo','rot','cont','brgt','rgbm','rgba', | 178 'digilibParamNames' : ['fn','pn','ww','wh','wx','wy','ws','mo','rot','cont','brgt','rgbm','rgba','mk','clop'], |
179 'mk'], | |
180 // digilib parameter defaults | 179 // digilib parameter defaults |
181 'mk' : '', | 180 'mk' : '', |
181 'clop' : '', | |
182 // mode of operation: | 182 // mode of operation: |
183 // fullscreen = take parameters from page URL, keep state in page URL | 183 // fullscreen = take parameters from page URL, keep state in page URL |
184 // embedded = take parameters from Javascript options, keep state inside object | 184 // embedded = take parameters from Javascript options, keep state inside object |
185 'interactionMode' : 'fullscreen', | 185 'interactionMode' : 'fullscreen', |
186 // actions | 186 // actions |
187 'actions' : actions, | 187 'actions' : actions, |
188 // path to button images (must end with a slash) | 188 // path to button images (must end with a slash) |
189 'buttonsImagePath' : '../greyskin/', | 189 'buttonsImagePath' : '../greyskin/', |
190 // actions groups | 190 // actions groups |
191 'actionsStandard' : ["reference","zoomin","zoomout","zoomarea","zoomfull","pagewidth","mark","back","fwd","page","bird","SEP","help","reset","options"], | 191 //'actionsStandard' : ["reference","zoomin","zoomout","zoomarea","zoomfull","pagewidth","back","fwd","page","bird","SEP","help","reset","options"], |
192 'actionsStandard' : ["reference","zoomin","zoomout","zoomarea","zoomfull","pagewidth","mark","delmark","back","fwd","page","bird","SEP","help","reset","options"], | |
192 'actionsSpecial' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","size","calibrationx","scale","SEP","options"], | 193 'actionsSpecial' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","size","calibrationx","scale","SEP","options"], |
193 'actionsCustom' : [], | 194 'actionsCustom' : [], |
194 // is birdView shown? | 195 // is birdView shown? |
195 'isBirdDivVisible' : false, | 196 'isBirdDivVisible' : false, |
196 // dimensions of bird's eye window | 197 // dimensions of bird's eye window |
312 var data = $elem.data('digilib'); | 313 var data = $elem.data('digilib'); |
313 zoomBy(data, factor); | 314 zoomBy(data, factor); |
314 }, | 315 }, |
315 | 316 |
316 // zoom out to full page | 317 // zoom out to full page |
317 zoomFullpage : function () { | 318 zoomFull : function (mode) { |
318 var $elem = $(this); | 319 var $elem = $(this); |
319 var data = $elem.data('digilib'); | 320 var data = $elem.data('digilib'); |
320 data.zoomArea = MAX_ZOOMAREA; | 321 data.zoomArea = MAX_ZOOMAREA; |
322 if (mode === 'width') { | |
323 data.dlOpts.fitwidth = 1; | |
324 delete data.dlOpts.fitheight; | |
325 } else if (mode === 'height') { | |
326 data.dlOpts.fitheight = 1; | |
327 delete data.dlOpts.fitwidth; | |
328 } else { | |
329 delete data.dlOpts.fitwidth; | |
330 delete data.dlOpts.fitheight; | |
331 } | |
321 redisplay(data); | 332 redisplay(data); |
322 }, | 333 }, |
323 | 334 |
324 // set a mark by clicking (or giving a position) | 335 // set a mark by clicking (or giving a position) |
325 setMark : function (mpos) { | 336 setMark : function (mpos) { |
331 } else { | 342 } else { |
332 // use position | 343 // use position |
333 data.marks.push(pos); | 344 data.marks.push(pos); |
334 redisplay(data); | 345 redisplay(data); |
335 } | 346 } |
336 } | 347 }, |
337 }; | 348 |
338 | 349 // remove the last mark |
339 // sets a key to a value (relative values with +/- if relative=true) | 350 removeMark : function () { |
340 var setNumValue = function(settings, key, value) { | 351 var $elem = $(this); |
341 if (isNumber(value)) return settings[key] = value; | 352 var data = $elem.data('digilib'); |
342 var sign = value.substring(0,1); | 353 data.marks.pop(); |
343 if (sign === '+' || sign === '-') { | 354 redisplay(data); |
344 if (settings[key] == null) { | 355 } |
345 // this doesn't make much sense but still... | 356 |
346 settings[key] = 0; | 357 }; |
347 } | 358 |
348 settings[key] = parseFloat(settings[key]) + parseFloat(value); | |
349 } else { | |
350 settings[key] = value; | |
351 } | |
352 return settings[key]; | |
353 }; | |
354 | |
355 // returns parameters from page url | 359 // returns parameters from page url |
356 var parseQueryParams = function() { | 360 var parseQueryParams = function() { |
357 return parseQueryString(window.location.search.slice(1)); | 361 return parseQueryString(window.location.search.slice(1)); |
358 }; | 362 }; |
359 | 363 |
387 }; | 391 }; |
388 | 392 |
389 // returns a query string from key names from a parameter hash (ignoring if the same value is in defaults) | 393 // returns a query string from key names from a parameter hash (ignoring if the same value is in defaults) |
390 var getParamString = function (settings, keys, defaults) { | 394 var getParamString = function (settings, keys, defaults) { |
391 var paramString = ''; | 395 var paramString = ''; |
392 var latter = false; | 396 var nx = false; |
393 for (i = 0; i < keys.length; ++i) { | 397 for (i = 0; i < keys.length; ++i) { |
394 var key = keys[i]; | 398 var key = keys[i]; |
395 if ((settings[key] != null) && ((defaults == null) || (settings[key] !== defaults[key]))) { | 399 if ((settings[key] != null) && ((defaults == null) || (settings[key] !== defaults[key]))) { |
396 // first param gets no '&' | 400 // first param gets no '&' |
397 paramString += latter ? '&' : ''; | 401 if (nx) { |
398 latter = true; | 402 paramString += '&'; |
403 } else { | |
404 nx = true; | |
405 } | |
399 // add parm=val | 406 // add parm=val |
400 paramString += key + '=' + settings[key]; | 407 paramString += key + '=' + settings[key]; |
401 } | 408 } |
402 } | 409 } |
403 return paramString; | 410 return paramString; |
430 // zoom area | 437 // zoom area |
431 var zoomArea = geom.rectangle(settings.wx, settings.wy, settings.ww, settings.wh); | 438 var zoomArea = geom.rectangle(settings.wx, settings.wy, settings.ww, settings.wh); |
432 data.zoomArea = zoomArea; | 439 data.zoomArea = zoomArea; |
433 // marks | 440 // marks |
434 var marks = []; | 441 var marks = []; |
435 var mk = settings.mk || ''; | 442 if (settings.mk) { |
436 if (mk.indexOf(";") >= 0) { | 443 var mk = settings.mk; |
437 var pa = mk.split(";"); // old format with ";" | 444 if (mk.indexOf(";") >= 0) { |
438 } else { | 445 var pa = mk.split(";"); // old format with ";" |
439 var pa = mk.split(","); // new format | 446 } else { |
440 } | 447 var pa = mk.split(","); // new format |
441 for (var i = 0; i < pa.length ; i++) { | 448 } |
442 var pos = pa[i].split("/"); | 449 for (var i = 0; i < pa.length ; i++) { |
443 if (pos.length > 1) { | 450 var pos = pa[i].split("/"); |
444 marks.push(geom.position(pos[0], pos[1])); | 451 if (pos.length > 1) { |
452 marks.push(geom.position(pos[0], pos[1])); | |
453 } | |
445 } | 454 } |
446 } | 455 } |
447 data.marks = marks; | 456 data.marks = marks; |
457 // mo (Scaler flags) | |
458 var flags = {}; | |
459 if (settings.mo) { | |
460 var pa = settings.mo.split(","); | |
461 for (var i = 0; i < pa.length ; i++) { | |
462 flags[pa[i]] = pa[i]; | |
463 } | |
464 } | |
465 data.scalerFlags = flags; | |
466 // clop (digilib options) | |
467 var opts = {}; | |
468 if (settings.clop) { | |
469 var pa = settings.clop.split(","); | |
470 for (var i = 0; i < pa.length ; i++) { | |
471 opts[pa[i]] = pa[i]; | |
472 } | |
473 } | |
474 data.dlOpts = opts; | |
448 }; | 475 }; |
449 | 476 |
450 // put objects back into parameters | 477 // put objects back into parameters |
451 var packParams = function (data) { | 478 var packParams = function (data) { |
452 var settings = data.settings; | 479 var settings = data.settings; |
457 settings.ww = cropFloat(data.zoomArea.width); | 484 settings.ww = cropFloat(data.zoomArea.width); |
458 settings.wh = cropFloat(data.zoomArea.height); | 485 settings.wh = cropFloat(data.zoomArea.height); |
459 } | 486 } |
460 // marks | 487 // marks |
461 if (data.marks) { | 488 if (data.marks) { |
462 var ma = []; | 489 settings.mk = ''; |
463 for (var i = 0; i < data.marks.length; i++) { | 490 for (var i = 0; i < data.marks.length; i++) { |
464 ma.push(cropFloat(data.marks[i].x) + "/" + cropFloat(data.marks[i].y)); | 491 if (i) { |
465 } | 492 settings.mk += ','; |
466 settings.mk = ma.join(","); | 493 } |
494 settings.mk += cropFloat(data.marks[i].x).toString() + '/' + cropFloat(data.marks[i].y).toString(); | |
495 } | |
496 } | |
497 // Scaler flags | |
498 if (data.scalerFlags) { | |
499 var mo = ''; | |
500 for (var f in data.scalerFlags) { | |
501 if (mo) { | |
502 mo += ','; | |
503 } | |
504 mo += f; | |
505 } | |
506 settings.mo = mo; | |
507 } | |
508 // digilib options | |
509 if (data.dlOpts) { | |
510 var clop = ''; | |
511 for (var o in data.dlOpts) { | |
512 if (clop) { | |
513 clop += ','; | |
514 } | |
515 clop += o; | |
516 } | |
517 settings.clop = clop; | |
467 } | 518 } |
468 }; | 519 }; |
469 | 520 |
470 // returns maximum size for scaler img in fullscreen mode | 521 // returns maximum size for scaler img in fullscreen mode |
471 var getFullscreenImgSize = function($elem) { | 522 var getFullscreenImgSize = function($elem) { |
499 var $elem = data.$elem; | 550 var $elem = data.$elem; |
500 var $img; | 551 var $img; |
501 if (settings.interactionMode === 'fullscreen') { | 552 if (settings.interactionMode === 'fullscreen') { |
502 // fullscreen | 553 // fullscreen |
503 var imgSize = getFullscreenImgSize($elem); | 554 var imgSize = getFullscreenImgSize($elem); |
504 settings.dw = imgSize.width; | 555 // fitwidth/height omits destination height/width |
505 settings.dh = imgSize.height; | 556 if (data.dlOpts['fitheight'] == null) { |
557 settings.dw = imgSize.width; | |
558 } | |
559 if (data.dlOpts['fitwidth'] == null) { | |
560 settings.dh = imgSize.height; | |
561 } | |
506 $img = $('<img/>'); | 562 $img = $('<img/>'); |
507 var scalerUrl = getScalerUrl(data); | 563 var scalerUrl = getScalerUrl(data); |
508 $img.attr('src', scalerUrl); | 564 $img.attr('src', scalerUrl); |
509 } else { | 565 } else { |
510 // embedded mode -- try to keep img tag | 566 // embedded mode -- try to keep img tag |
719 redisplay(data); | 775 redisplay(data); |
720 return false; // do we even get here? | 776 return false; // do we even get here? |
721 }); | 777 }); |
722 }; | 778 }; |
723 | 779 |
780 // sets a key to a value (relative values with +/- if relative=true) | |
781 var setNumValue = function(settings, key, value) { | |
782 if (isNumber(value)) return settings[key] = value; | |
783 var sign = value.substring(0,1); | |
784 if (sign === '+' || sign === '-') { | |
785 if (settings[key] == null) { | |
786 // this doesn't make much sense but still... | |
787 settings[key] = 0; | |
788 } | |
789 settings[key] = parseFloat(settings[key]) + parseFloat(value); | |
790 } else { | |
791 settings[key] = value; | |
792 } | |
793 return settings[key]; | |
794 }; | |
795 | |
724 // auxiliary function (from Douglas Crockford, A.10) | 796 // auxiliary function (from Douglas Crockford, A.10) |
725 var isNumber = function isNumber(value) { | 797 var isNumber = function isNumber(value) { |
726 return typeof value === 'number' && isFinite(value); | 798 return typeof value === 'number' && isFinite(value); |
727 }; | 799 }; |
728 | 800 |