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