comparison client/digitallibrary/jquery/jquery.digilib.js @ 690:dfdee83a0a32 jquery

better handling of button sets
author robcast
date Thu, 27 Jan 2011 16:53:09 +0100
parents 7ef3bc87ab19
children 98c42d573ebd
comparison
equal deleted inserted replaced
688:7ef3bc87ab19 690:dfdee83a0a32
202 'imagePath' : 'img/embedded/16/', 202 'imagePath' : 'img/embedded/16/',
203 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","back","fwd","page","bird","SEP","help","reset","moreoptions"], 203 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","back","fwd","page","bird","SEP","help","reset","moreoptions"],
204 'specialSet' : ["hmir","vmir","rot","brgt","cont","rgb","quality","size","SEP","lessoptions"], 204 'specialSet' : ["hmir","vmir","rot","brgt","cont","rgb","quality","size","SEP","lessoptions"],
205 'buttonSets' : ['standardSet', 'specialSet'] 205 'buttonSets' : ['standardSet', 'specialSet']
206 } 206 }
207 }, 207 },
208 // button groups 208 // number of visible button groups
209 'visibleButtonSets' : 1,
209 // is birdView shown? 210 // is birdView shown?
210 'isBirdDivVisible' : false, 211 'isBirdDivVisible' : false,
211 // dimensions of bird's eye div 212 // dimensions of bird's eye div
212 'birdDivWidth' : 200, 213 'birdDivWidth' : 200,
213 'birdDivHeight' : 200, 214 'birdDivHeight' : 200,
260 } else { 261 } else {
261 params = parseImgParams($elem); 262 params = parseImgParams($elem);
262 }; 263 };
263 // store $(this) element in the settings 264 // store $(this) element in the settings
264 elemSettings = $.extend({}, settings, params); 265 elemSettings = $.extend({}, settings, params);
265 data = { 266 data = {
266 $elem : $elem, 267 $elem : $elem,
267 settings : elemSettings, 268 settings : elemSettings,
268 queryParams : params 269 queryParams : params
269 }; 270 };
270 // store in data element 271 // store in data element
271 $elem.data('digilib', data); 272 $elem.data('digilib', data);
272 } 273 }
273 unpackParams(data); 274 unpackParams(data);
274 // create HTML structure for scaler 275 // create HTML structure for scaler
275 setupScalerDiv(data); 276 setupScalerDiv(data);
276 // HTML for buttons (default is first button set) 277 // add buttons
277 setupButtons(data, 0); 278 for (var i = 0; i < elemSettings.visibleButtonSets; ++i) {
279 showButtons(data, true, i);
280 }
278 // bird's eye view creation 281 // bird's eye view creation
279 if (elemSettings.isBirdDivVisible) { 282 if (elemSettings.isBirdDivVisible) {
280 setupBirdDiv(data); 283 setupBirdDiv(data);
281 } 284 }
282 // about window creation - TODO: could be deferred? restrict to only one item? 285 // about window creation - TODO: could be deferred? restrict to only one item?
429 redisplay(data); 432 redisplay(data);
430 }, 433 },
431 434
432 // display more (or less) button sets 435 // display more (or less) button sets
433 morebuttons : function (data, more) { 436 morebuttons : function (data, more) {
437 var settings = data.settings;
434 if (more === '-1') { 438 if (more === '-1') {
435 // remove set 439 // remove set
436 var setIdx = data.visibleButtonSets - 1; 440 var setIdx = settings.visibleButtonSets - 1;
437 var $lastSet = data.$buttonSets[setIdx]; 441 if (showButtons(data, false, setIdx, true)) {
438 if ($lastSet == null) return; 442 settings.visibleButtonSets--;
439 var btnWidth = $lastSet.width(); 443 }
440 // hide last set
441 $lastSet.hide();
442 // take remaining sets and move right
443 var $otherSets = data.$elem.find('div.buttons:visible');
444 $otherSets.animate({left : '+='+btnWidth+'px'});
445 data.visibleButtonSets -= 1;
446 } else { 444 } else {
447 // add set 445 // add set
448 var $oldSets = data.$elem.find('div.buttons:visible'); 446 var setIdx = settings.visibleButtonSets;
449 var setIdx = data.visibleButtonSets; 447 if (showButtons(data, true, setIdx, true)) {
450 var $newSet; 448 settings.visibleButtonSets++;
451 if (data.$buttonSets[setIdx]) { 449 }
452 // set exists
453 $newSet = data.$buttonSets[setIdx];
454 } else {
455 $newSet = setupButtons(data, setIdx);
456 }
457 if ($newSet == null) return;
458 var btnWidth = $newSet.width();
459 // move remaining sets left and show new set
460 $oldSets.animate({left : '-='+btnWidth+'px'},
461 function () {$newSet.show();});
462 data.visibleButtonSets += 1;
463 } 450 }
464 }, 451 },
465 452
466 reset : function (data) { 453 reset : function (data) {
467 var settings = data.settings; 454 var settings = data.settings;
760 $img.load(scalerImgLoadedHandler(data)); 747 $img.load(scalerImgLoadedHandler(data));
761 $img.attr('src', scalerUrl); 748 $img.attr('src', scalerUrl);
762 }; 749 };
763 750
764 // creates HTML structure for buttons in elem 751 // creates HTML structure for buttons in elem
765 var setupButtons = function (data, buttonSetIdx) { 752 var createButtons = function (data, buttonSetIdx) {
766 var $elem = data.$elem; 753 var $elem = data.$elem;
767 var settings = data.settings; 754 var settings = data.settings;
768 var mode = settings.interactionMode; 755 var mode = settings.interactionMode;
769 var buttonSettings = settings.buttonSettings[mode]; 756 var buttonSettings = settings.buttonSettings[mode];
770 var buttonGroup = buttonSettings.buttonSets[buttonSetIdx]; 757 var buttonGroup = buttonSettings.buttonSets[buttonSetIdx];
811 } 798 }
812 // make buttons div scroll if too large for window 799 // make buttons div scroll if too large for window
813 if ($buttonsDiv.height() > $(window).height() - 10) { 800 if ($buttonsDiv.height() > $(window).height() - 10) {
814 $buttonsDiv.css('position', 'absolute'); 801 $buttonsDiv.css('position', 'absolute');
815 } 802 }
803 // buttons hidden at first
804 $buttonsDiv.hide();
805 $elem.append($buttonsDiv);
816 if (data.$buttonSets == null) { 806 if (data.$buttonSets == null) {
817 // show first button set 807 // first button set
818 $elem.append($buttonsDiv);
819 data.$buttonSets = [$buttonsDiv]; 808 data.$buttonSets = [$buttonsDiv];
820 data.visibleButtonSets = 1;
821 } else { 809 } else {
822 // hide later button sets
823 $buttonsDiv.hide();
824 $elem.append($buttonsDiv); 810 $elem.append($buttonsDiv);
825 data.$buttonSets[buttonSetIdx] = $buttonsDiv; 811 data.$buttonSets[buttonSetIdx] = $buttonsDiv;
826 } 812 }
827 return $buttonsDiv; 813 return $buttonsDiv;
828 }; 814 };
898 $div.fadeIn(); 884 $div.fadeIn();
899 } else { 885 } else {
900 $div.fadeOut(); 886 $div.fadeOut();
901 } 887 }
902 return isVisible; 888 return isVisible;
889 };
890
891 // display more (or less) button sets
892 var showButtons = function (data, more, setIdx, animated) {
893 if (more) {
894 // add set
895 var $otherSets = data.$elem.find('div.buttons:visible');
896 var $set;
897 if (data.$buttonSets && data.$buttonSets[setIdx]) {
898 // set exists
899 $set = data.$buttonSets[setIdx];
900 } else {
901 $set = createButtons(data, setIdx);
902 }
903 if ($set == null) return false;
904 var btnWidth = $set.width();
905 // move remaining sets left and show new set
906 if (animated) {
907 $otherSets.animate({left : '-='+btnWidth+'px'}, 'fast',
908 function () {$set.show();});
909 } else {
910 $otherSets.css({left : '-='+btnWidth+'px'});
911 $set.show();
912 }
913 } else {
914 // remove set
915 var $set = data.$buttonSets[setIdx];
916 if ($set == null) return false;
917 var btnWidth = $set.width();
918 // hide last set
919 $set.hide();
920 // take remaining sets and move right
921 var $otherSets = data.$elem.find('div.buttons:visible');
922 if (animated) {
923 $otherSets.animate({left : '+='+btnWidth+'px'}, 'fast');
924 } else {
925 $otherSets.css({left : '+='+btnWidth+'px'});
926 }
927 }
928 return true;
903 }; 929 };
904 930
905 // create Transform from area and $img 931 // create Transform from area and $img
906 var getImgTrafo = function ($img, area, rot, hmir, vmir) { 932 var getImgTrafo = function ($img, area, rot, hmir, vmir) {
907 var picrect = geom.rectangle($img); 933 var picrect = geom.rectangle($img);