Mercurial > hg > digilib
annotate client/digitallibrary/jquery/jquery.digilib.js @ 620:b930fa64c684 jquery
scalerImgLoaded sets up img trafo
| author | robcast |
|---|---|
| date | Mon, 17 Jan 2011 23:57:09 +0100 |
| parents | 1035891fb6f1 |
| children | 7f97716b901c |
| rev | line source |
|---|---|
| 597 | 1 /* |
| 2 * digilib jQuery plugin | |
| 3 * | |
| 4 */ | |
| 5 | |
| 6 (function($) { | |
|
611
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
7 var actions = { |
| 603 | 8 reference : { |
| 9 onclick : "javascript:getRefWin()", | |
| 10 tooltip : "get a reference URL", | |
| 11 img : "reference.png" | |
| 12 }, | |
| 13 zoomin : { | |
| 14 onclick : "javascript:dl.zoomBy(1.4)", | |
| 15 tooltip : "zoom in", | |
| 16 img : "zoom-in.png" | |
| 17 }, | |
| 18 zoomout : { | |
| 19 onclick : "javascript:zoomBy(0.7)", | |
| 20 tooltip : "zoom out", | |
| 21 img : "zoom-out.png" | |
| 22 }, | |
| 23 zoomarea : { | |
| 24 onclick : "javascript:zoomArea()", | |
| 25 tooltip : "zoom area", | |
| 26 img : "zoom-area.png" | |
| 27 }, | |
| 28 zoomfull : { | |
| 29 onclick : "javascript:zoomFullpage()", | |
| 30 tooltip : "view the whole image", | |
| 31 img : "zoom-full.png" | |
| 32 }, | |
| 33 pagewidth : { | |
| 34 onclick : "javascript:zoomFullpage('width')", | |
| 35 tooltip : "page width", | |
| 36 img : "pagewidth.png" | |
| 37 }, | |
| 38 back : { | |
| 616 | 39 onclick : ["gotoPage", "-1"], |
| 603 | 40 tooltip : "goto previous image", |
| 41 img : "back.png" | |
| 42 }, | |
| 43 fwd : { | |
| 616 | 44 onclick : ["gotoPage", "+1"], |
| 603 | 45 tooltip : "goto next image", |
| 46 img : "fwd.png" | |
| 47 }, | |
| 48 page : { | |
| 49 onclick : "javascript:gotoPageWin()", | |
| 50 tooltip : "specify image", | |
| 51 img : "page.png" | |
| 52 }, | |
| 53 bird : { | |
|
610
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
54 onclick : "toggleBirdDiv", |
| 603 | 55 tooltip : "show bird's eye view", |
| 56 img : "birds-eye.png" | |
| 57 }, | |
| 58 help : { | |
| 616 | 59 onclick : "toggleAboutDiv", |
| 603 | 60 tooltip : "about Digilib", |
| 61 img : "help.png" | |
| 62 }, | |
| 63 reset : { | |
| 64 onclick : "javascript:resetImage()", | |
| 65 tooltip : "reset image", | |
| 66 img : "reset.png" | |
| 67 }, | |
| 68 mark : { | |
| 69 onclick : "javascript:setMark()", | |
| 70 tooltip : "set a mark", | |
| 71 img : "mark.png" | |
| 72 }, | |
| 73 delmark : { | |
| 74 onclick : "javascript:removeMark()", | |
| 75 tooltip : "delete the last mark", | |
| 76 img : "delmark.png" | |
| 77 }, | |
| 78 hmir : { | |
| 79 onclick : "javascript:mirror('h')", | |
| 80 tooltip : "mirror horizontally", | |
| 81 img : "mirror-horizontal.png" | |
| 82 }, | |
| 83 vmir : { | |
| 84 onclick : "javascript:mirror('v')", | |
| 85 tooltip : "mirror vertically", | |
| 86 img : "mirror-vertical.png" | |
| 87 }, | |
| 88 rot : { | |
| 89 onclick : "javascript:setParamWin('rot', 'Rotate (0..360) clockwise')", | |
| 90 tooltip : "rotate image", | |
| 91 img : "rotate.png" | |
| 92 }, | |
| 93 brgt : { | |
| 94 onclick : "javascript:setParamWin('brgt', 'Brightness (-255..255)')", | |
| 95 tooltip : "set brightness", | |
| 96 img : "brightness.png" | |
| 97 }, | |
| 98 cont : { | |
| 99 onclick : "javascript:setParamWin('cont', 'Contrast (0..8)')", | |
| 100 tooltip : "set contrast", | |
| 101 img : "contrast.png" | |
| 102 }, | |
| 103 rgb : { | |
| 104 onclick : "javascript:setParamWin('rgb', '...')", | |
| 105 tooltip : "set rgb values", | |
| 106 img : "rgb.png" | |
| 107 }, | |
| 108 quality : { | |
| 109 onclick : "javascript:setQualityWin('Quality (0..2)')", | |
| 110 tooltip : "set image quality", | |
| 111 img : "quality.png" | |
| 112 }, | |
| 113 size : { | |
| 114 onclick : "javascript:toggleSizeMenu()", | |
| 115 tooltip : "set page size", | |
| 116 img : "size.png" | |
| 117 }, | |
| 118 calibrationx : { | |
| 119 onclick : "javascript:calibrate('x')", | |
| 120 tooltip : "calibrate screen x-ratio", | |
| 121 img : "calibration-x.png" | |
| 122 }, | |
| 123 scale : { | |
| 124 onclick : "javascript:toggleScaleMenu()", | |
| 125 tooltip : "change image scale", | |
| 126 img : "original-size.png" | |
| 127 }, | |
| 128 options : { | |
| 129 onclick : "javascript:toggleOptionDiv()", | |
| 130 tooltip : "hide options", | |
| 131 img : "options.png" | |
| 132 }, | |
| 133 SEP : { | |
| 134 img : "sep.png" | |
| 135 } | |
| 136 }; | |
|
610
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
137 |
| 598 | 138 var defaults = { |
|
610
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
139 // the root digilib element, for easy retrieval |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
140 'digilibRoot' : null, |
| 609 | 141 // version of this script |
| 142 'version' : 'jquery.digilib.js 1.0', | |
| 143 // logo url | |
| 144 'logoUrl' : '../img/digilib-logo-text1.png', | |
| 145 // repository url | |
| 146 'reposUrl' : 'http://digilib.berlios.de', | |
| 603 | 147 // base URL to Scaler servlet |
| 148 'scalerBaseUrl' : 'http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler', | |
| 149 // list of Scaler parameters | |
| 620 | 150 'scalerParamNames' : ['fn','pn','dw','dh','ww','wh','wx','wy','ws','mo', |
| 151 'rot','cont','brgt','rgbm','rgba','ddpi','ddpix','ddpiy'], | |
| 152 // Scaler parameter defaults | |
| 153 'ww' : 1.0, | |
| 154 'wh' : 1.0, | |
| 155 'wx' : 0.0, | |
| 156 'wy' : 0.0, | |
| 157 'ws' : 1.0, | |
| 603 | 158 // mode of operation. |
| 159 // fullscreen: takes parameters from page URL, keeps state in page URL | |
| 160 // embedded: takes parameters from Javascript options, keeps state inside object | |
| 161 'interactionMode' : 'fullscreen', | |
|
611
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
162 // actions |
|
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
163 'actions' : actions, |
| 605 | 164 // path to button images (must end with a slash) |
| 165 'buttonsImagePath' : '../greyskin/', | |
|
611
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
166 // actions groups |
|
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
167 'actionsStandard' : ["reference","zoomin","zoomout","zoomarea","zoomfull","pagewidth","back","fwd","page","bird","SEP","help","reset","options"], |
|
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
168 'actionsSpecial' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","size","calibrationx","scale","SEP","options"], |
|
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
169 'actionsCustom' : [], |
| 609 | 170 // is birdView shown? |
| 171 'isBirdDivVisible' : false, | |
| 608 | 172 // dimensions of bird's eye window |
| 173 'birdMaxX' : 200, | |
| 609 | 174 'birdMaxY' : 200, |
| 175 // is the "about" window shown? | |
| 176 'isAboutDivVisible' : false | |
| 177 | |
| 603 | 178 }; |
| 598 | 179 |
| 601 | 180 // parameters from the query string |
| 600 | 181 var queryParams = {}; |
| 601 | 182 |
| 183 // affine geometry classes | |
| 184 var geom = dlGeometry(); | |
| 597 | 185 |
| 186 var methods = { | |
| 601 | 187 // digilib initialization |
| 597 | 188 init : function(options) { |
| 601 | 189 // settings for this digilib instance are merged from defaults and options |
| 600 | 190 var settings = $.extend({}, defaults, options); |
| 191 var isFullscreen = settings.interactionMode === 'fullscreen'; | |
| 192 if (isFullscreen) { | |
| 193 queryParams = parseQueryParams(); | |
| 194 }; | |
| 597 | 195 return this.each(function() { |
| 598 | 196 var $elem = $(this); |
| 197 var data = $elem.data('digilib'); | |
| 600 | 198 var elemSettings; |
| 601 | 199 // if the plugin hasn't been initialized yet |
| 597 | 200 if (!data) { |
| 598 | 201 // merge query parameters |
| 600 | 202 if (isFullscreen) { |
| 203 elemSettings = $.extend({}, settings, queryParams); | |
| 204 } else { | |
| 205 elemSettings = $.extend({}, settings, parseImgParams($elem)); | |
| 206 }; | |
|
610
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
207 // store $(this) element in the settings |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
208 elemSettings.digilibRoot = $elem; |
| 620 | 209 data = { |
| 210 target : $elem, | |
| 211 settings : elemSettings | |
| 212 }; | |
| 598 | 213 // store in data element |
| 620 | 214 $elem.data('digilib', data); |
| 597 | 215 } |
| 601 | 216 // create HTML structure |
| 620 | 217 setupScalerDiv(data); |
|
611
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
218 setupButtons($elem, elemSettings, 'actionsStandard'); |
| 620 | 219 // bird's eye view creation - TODO: could be deferred? |
| 608 | 220 setupBirdviewDiv($elem, elemSettings); |
| 620 | 221 // about window creation - TODO: could be deferred? restrict to only one item? |
| 609 | 222 setupAboutDiv($elem, elemSettings); |
| 597 | 223 }); |
| 224 }, | |
| 601 | 225 |
| 226 // clean up digilib | |
| 597 | 227 destroy : function() { |
| 228 return this.each(function(){ | |
| 229 var $this = $(this); | |
| 230 var data = $this.data('digilib'); | |
| 231 // Namespacing FTW | |
| 598 | 232 $(window).unbind('.digilib'); // unbinds all digilibs(?) |
| 597 | 233 data.digilib.remove(); |
| 234 $this.removeData('digilib'); | |
| 235 }); | |
|
610
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
236 }, |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
237 |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
238 // event handler: toggles the visibility of the 'about' window |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
239 toggleAboutDiv : function () { |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
240 var $elem = $(this); // the clicked button |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
241 var settings = $elem.data('digilib').settings; |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
242 var $root = settings.digilibRoot; |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
243 var $about = $root.find('div.about'); |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
244 settings.isAboutDivVisible = !settings.isAboutDivVisible; |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
245 if (settings.isAboutDivVisible) { |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
246 $about.fadeIn(); |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
247 } else { |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
248 $about.fadeOut(); |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
249 }; |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
250 return false; |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
251 }, |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
252 |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
253 // event handler: toggles the visibility of the bird's eye window |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
254 toggleBirdDiv : function () { |
| 616 | 255 // TODO: red frame functionality |
|
610
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
256 var $elem = $(this); // the clicked button |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
257 var settings = $elem.data('digilib').settings; |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
258 var $root = settings.digilibRoot; |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
259 var $bird = $root.find('div.birdview'); |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
260 settings.isBirdDivVisible = !settings.isBirdDivVisible; |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
261 if (settings.isBirdDivVisible) { |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
262 $bird.fadeIn(); |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
263 } else { |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
264 $bird.fadeOut(); |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
265 }; |
|
2f2cd8c44a1c
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
609
diff
changeset
|
266 return false; |
| 616 | 267 }, |
| 268 | |
| 269 // goto given page nr (+/-: relative) | |
| 270 gotoPage : function(pageNr, keepMarks) { | |
| 271 var $elem = $(this); // the clicked button | |
| 272 var settings = $elem.data('digilib').settings; | |
| 273 var oldpn = settings.pn; | |
| 617 | 274 var pn = setNumValue(settings, "pn", pageNr); |
| 275 if (pn == null) return false; // nothing happened | |
| 616 | 276 if (pn < 1) { |
| 277 alert("no such page (page number too low)"); | |
| 278 settings.pn = oldpn; | |
| 279 return false; | |
| 280 }; | |
| 281 if (settings.pt) { | |
| 282 if (pn > settings.pt) { | |
| 283 alert("no such page (page number too high)"); | |
| 284 settings.pn = oldpn; | |
| 285 return false; | |
| 286 } | |
| 287 }; | |
| 288 // TODO: keepMarks | |
| 289 var $root = settings.digilibRoot; | |
| 290 var $img = $root.find('img.pic'); | |
| 291 display($img, settings); | |
| 617 | 292 return false; |
| 597 | 293 } |
| 598 | 294 }; |
| 597 | 295 |
| 616 | 296 // sets a key to a value (relative values with +/- if relative=true) |
| 297 var setNumValue = function(settings, key, value) { | |
| 298 // TODO: type and error checking | |
| 299 if (settings[key] == null) return null; | |
| 300 var sign = value.substring(0,1); | |
| 301 if (sign === '+' || sign === '-') { | |
| 302 settings[key] = parseFloat(settings[key]) + parseFloat(value); | |
| 303 } else { | |
| 304 settings[key] = value; | |
| 305 } | |
| 306 return settings[key]; | |
| 307 }; | |
| 308 | |
| 601 | 309 // returns parameters from page url |
| 600 | 310 var parseQueryParams = function() { |
| 311 return parseQueryString(location.search.slice(1)); | |
| 312 }; | |
| 313 | |
| 601 | 314 // returns parameters taken from embedded img-element |
| 600 | 315 var parseImgParams = function($elem) { |
|
606
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
316 var src = $elem.find('img').first().attr('src'); |
|
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
317 if (!src) { |
|
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
318 return null; |
|
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
319 } |
| 600 | 320 var pos = src.indexOf('?'); |
| 321 var query = (pos < 0) ? '' : src.substring(pos + 1); | |
| 322 var scalerUrl = src.substring(0, pos); | |
| 620 | 323 var params = parseQueryString(query); |
| 324 params.scalerBaseUrl = scalerUrl; | |
| 600 | 325 // console.log(hash); |
| 620 | 326 return params; |
| 600 | 327 }; |
| 328 | |
| 601 | 329 // parses query parameter string into parameter object |
| 600 | 330 var parseQueryString = function(query) { |
| 331 var pairs = query.split("&"); | |
| 620 | 332 var params = {}; |
| 600 | 333 for (var i = 0; i < pairs.length; i++) { |
| 334 var pair = pairs[i].split("="); | |
| 335 if (pair.length === 2) { | |
| 620 | 336 params[pair[0]] = pair[1]; |
| 600 | 337 }; |
| 338 }; | |
| 620 | 339 return params; |
| 600 | 340 }; |
| 597 | 341 |
| 608 | 342 // returns a query string from key names from a parameter hash |
| 343 var makeParamString = function (settings, keys) { | |
| 344 var paramString = ''; | |
| 345 var latter = false; | |
| 346 for (i = 0; i < keys.length; ++i) { | |
| 347 var key = keys[i]; | |
| 348 if (settings[key]) { | |
| 349 // first param gets no '&' | |
| 350 paramString += latter ? '&' : ''; | |
| 351 latter = true; | |
| 352 // add parm=val | |
| 353 paramString += key + '=' + settings[key]; | |
| 354 }; | |
| 355 } | |
| 356 return paramString; | |
| 357 }; | |
| 358 | |
| 601 | 359 // returns URL and query string for Scaler |
| 360 var getScalerString = function (settings) { | |
| 608 | 361 var keys = settings.scalerParamNames; |
| 362 var queryString = makeParamString(settings, keys); | |
| 363 var url = settings.scalerBaseUrl + '?' + queryString; | |
| 602 | 364 return url; |
| 365 }; | |
| 608 | 366 |
| 602 | 367 // returns maximum size for scaler img in fullscreen mode |
| 368 var getFullscreenImgSize = function($elem) { | |
| 369 var winH = $(window).height(); | |
| 370 var winW = $(window).width(); | |
| 371 // TODO: account for borders? | |
| 372 return geom.size(winW, winH); | |
| 601 | 373 }; |
| 374 | |
| 615 | 375 // (re)load the img from a new scaler URL |
| 376 var display = function ($img, settings) { | |
| 616 | 377 // TODO: update location.href (browser URL) in fullscreen mode |
| 615 | 378 var scalerUrl = getScalerString(settings); |
| 379 $img.attr('src', scalerUrl); | |
| 616 | 380 // TODO: update bird view? |
| 615 | 381 }; |
| 382 | |
| 601 | 383 // creates HTML structure for digilib in elem |
| 620 | 384 var setupScalerDiv = function (data) { |
| 385 var settings = data.settings; | |
| 386 var $elem = data.target; | |
| 616 | 387 var $img; |
| 601 | 388 if (settings.interactionMode === 'fullscreen') { |
| 602 | 389 // fullscreen |
| 390 var imgSize = getFullscreenImgSize($elem); | |
| 391 settings.dw = imgSize.width; | |
| 392 settings.dh = imgSize.height; | |
|
606
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
393 $img = $('<img/>'); |
| 615 | 394 display($img, settings); |
| 602 | 395 } else { |
|
606
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
396 // embedded mode -- try to keep img tag |
| 616 | 397 $img = $elem.find('img'); |
|
606
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
398 if ($img.length > 0) { |
|
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
399 console.debug("img detach:",$img); |
|
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
400 $img.detach(); |
|
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
401 } else { |
|
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
402 $img = $('<img/>'); |
| 615 | 403 display($img, settings); |
|
606
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
404 } |
| 601 | 405 } |
|
606
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
406 // create new html |
|
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
407 $elem.empty(); // TODO: should we keep stuff for customization? |
|
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
408 var $scaler = $('<div class="scaler"/>'); |
|
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
409 $elem.append($scaler); |
|
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
410 $scaler.append($img); |
| 615 | 411 $img.addClass('pic'); |
| 620 | 412 data.img = $img; |
| 413 $img.load(scalerImgLoadedFn(data)); | |
| 601 | 414 }; |
| 608 | 415 |
| 603 | 416 // creates HTML structure for buttons in elem |
|
611
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
417 var setupButtons = function ($elem, settings, actionGroup) { |
| 603 | 418 if (settings.interactionMode === 'fullscreen') { |
| 419 // fullscreen -- create new | |
| 605 | 420 var $buttonsDiv = $('<div class="buttons"></div>'); |
| 421 $elem.append($buttonsDiv); | |
|
611
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
422 var actionNames = settings[actionGroup]; |
|
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
423 for (var i = 0; i < actionNames.length; i++) { |
|
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
424 var actionName = actionNames[i]; |
|
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
425 var actionSettings = settings.actions[actionName]; |
| 605 | 426 // construct the button html |
| 427 var $button = $('<div class="button"></div>'); | |
| 428 var $a = $('<a/>'); | |
| 607 | 429 var $img = $('<img class="button"/>'); |
| 605 | 430 $buttonsDiv.append($button); |
| 431 $button.append($a); | |
| 432 $a.append($img); | |
| 433 // add attributes and bindings | |
|
611
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
434 $button.attr('title', actionSettings.tooltip); |
|
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
435 $button.addClass('button-' + actionName); |
| 605 | 436 // let the clicked <a> element know about the digilib context |
|
611
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
437 $a.data('digilib', { 'action' : actionName, 'settings' : settings } ); |
|
606
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
438 $a.bind('click', function() { |
| 612 | 439 var $elem = $(this); |
| 440 // get the context data | |
| 441 var data = $elem.data('digilib'); | |
| 605 | 442 // find the action for the clicked element |
|
611
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
443 var method = data.settings.actions[data.action].onclick; |
| 612 | 444 if ($.isArray(method)) { |
| 445 $elem.digilib.apply(this, method); | |
| 446 } else { | |
| 447 $elem.digilib(method); | |
| 448 }; | |
|
611
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
449 console.log(method); |
| 605 | 450 }); |
| 451 // binding mit closure | |
| 612 | 452 //(function(){ var action = actionSettings.onclick; |
| 605 | 453 // $a.bind('click', function(){ console.log( action )} ); |
| 454 //})(); | |
|
611
d332c61da1b0
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
610
diff
changeset
|
455 $img.attr('src', settings.buttonsImagePath + actionSettings.img); |
| 604 | 456 }; |
| 457 } | |
| 605 | 458 return $buttonsDiv; |
| 603 | 459 }; |
| 608 | 460 |
| 461 // creates HTML structure for the bird's eye view in elem | |
| 462 var setupBirdviewDiv = function ($elem, settings) { | |
| 463 // use only the relevant parameters | |
| 464 var keys = ['fn','pn','dw','dh']; | |
| 465 var birdDimensions = { | |
| 466 'dw' : settings.birdMaxX, | |
| 467 'dh' : settings.birdMaxY | |
| 468 }; | |
| 469 var birdSettings = $.extend({}, settings, birdDimensions); | |
| 470 var birdUrl = settings.scalerBaseUrl + '?' + makeParamString(birdSettings, keys); | |
| 471 // the bird's eye div | |
| 618 | 472 var $birdviewDiv = $('<div class="birdview" style="display:none"/>'); |
| 608 | 473 // the detail indicator frame |
| 474 var $birdzoomDiv = $('<div class="birdzoom"/>'); | |
| 475 // the small image | |
| 476 var $birdImg = $('<img class="birdimg"/>'); | |
| 477 $elem.append($birdviewDiv); | |
| 478 $birdviewDiv.append($birdzoomDiv); | |
| 479 $birdviewDiv.append($birdImg); | |
| 480 $birdImg.attr('src', birdUrl); | |
| 481 }; | |
| 482 | |
| 618 | 483 // creates HTML structure for the about view in elem |
| 609 | 484 var setupAboutDiv = function ($elem, settings) { |
| 618 | 485 var $aboutDiv = $('<div class="about" style="display:none"/>'); |
| 609 | 486 var $header = $('<p>Digilib Graphic Viewer</p>'); |
| 487 var $link = $('<a/>'); | |
| 488 var $logo = $('<img class="logo" title="digilib"/>'); | |
| 489 var $content = $('<p/>'); | |
| 490 $elem.append($aboutDiv); | |
| 491 $aboutDiv.append($header); | |
| 492 $aboutDiv.append($link); | |
| 493 $aboutDiv.append($content); | |
| 494 $link.append($logo); | |
| 495 $logo.attr('src', settings.logoUrl); | |
| 496 $link.attr('href', settings.reposUrl); | |
| 497 $content.text('Version: ' + settings.version); | |
| 612 | 498 // let the element know about the digilib context |
| 499 $aboutDiv.data('digilib', { 'settings' : settings } ); | |
| 500 $aboutDiv.bind('click', function() { | |
| 501 console.log($(this)); | |
| 502 $(this).digilib('toggleAboutDiv'); | |
| 503 }); | |
| 609 | 504 }; |
| 505 | |
|
606
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
506 // returns function for load event of scaler img |
| 620 | 507 var scalerImgLoadedFn = function(data) { |
| 508 var settings = data.settings; | |
| 509 var $elem = data.target; | |
| 510 var $img = data.img; | |
| 511 | |
|
606
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
512 return function() { |
| 620 | 513 console.debug("img loaded! this=", this, " data=", data); |
| 514 var area = geom.rectangle(settings.wx, settings.wy, settings.ww, settings.wh); | |
| 515 settings.zoomArea = area; | |
| 516 // create Transform from current area and picsize | |
| 517 var picpos = $img.offset(); | |
| 518 var picrect = geom.rectangle(picpos.left, picpos.top, $img.width(), $img.height()); | |
| 519 var trafo = geom.transform(); | |
| 520 // subtract area offset and size | |
| 521 trafo.concat(trafo.getTranslation(geom.position(area.x, area.y))); | |
| 522 trafo.concat(trafo.getScale(geom.size(1/area.width, 1/area.height))); | |
| 523 // scale to screen size | |
| 524 trafo.concat(trafo.getScale(picrect)); | |
| 525 trafo.concat(trafo.getTranslation(picrect)); | |
| 526 data.imgTrafo = trafo; | |
| 527 // display marks | |
| 528 //digilib.renderMarks(); | |
| 529 //digilib.showBirdDiv(isBirdDivVisible); | |
| 530 //digilib.showArrows(); // show arrow overlays for zoom navigation | |
| 531 | |
|
606
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
532 }; |
|
d08d095430c3
keeping img tag for embedded mode seems to work now
robcast
parents:
605
diff
changeset
|
533 }; |
| 598 | 534 // hook plugin into jquery |
| 535 $.fn.digilib = function(method) { | |
| 536 if (methods[method]) { | |
| 537 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); | |
| 538 } else if (typeof(method) === 'object' || !method) { | |
| 539 return methods.init.apply(this, arguments); | |
| 540 } else { | |
| 541 $.error( 'Method ' + method + ' does not exist on jQuery.digilib' ); | |
| 542 } | |
| 543 }; | |
| 597 | 544 |
| 545 })(jQuery); |
