Mercurial > hg > digilib-old
annotate client/digitallibrary/jquery/jquery.digilib.js @ 626:f2ab7d4eedc2 jquery
Merge with HEAD
author | robcast |
---|---|
date | Mon, 17 Jan 2011 22:10:12 +0100 |
parents | 5f3564a21a9c 7d13b7e5140e |
children | c2566e470569 |
rev | line source |
---|---|
604 | 1 /* |
2 * digilib jQuery plugin | |
3 * | |
4 */ | |
5 | |
6 (function($) { | |
618
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
7 var actions = { |
610 | 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 : { | |
623 | 39 onclick : ["gotoPage", "-1"], |
610 | 40 tooltip : "goto previous image", |
41 img : "back.png" | |
42 }, | |
43 fwd : { | |
623 | 44 onclick : ["gotoPage", "+1"], |
610 | 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 : { | |
617
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
54 onclick : "toggleBirdDiv", |
610 | 55 tooltip : "show bird's eye view", |
56 img : "birds-eye.png" | |
57 }, | |
58 help : { | |
623 | 59 onclick : "toggleAboutDiv", |
610 | 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 }; | |
617
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
137 |
605 | 138 var defaults = { |
617
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
139 // the root digilib element, for easy retrieval |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
140 'digilibRoot' : null, |
616 | 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', | |
610 | 147 // base URL to Scaler servlet |
148 'scalerBaseUrl' : 'http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler', | |
149 // list of Scaler parameters | |
609 | 150 'scalerParamNames' : ['fn','pn','dw','dh','ww','wh','wx','wy','ws','mo', |
151 'rot','cont','brgt','rgbm','rgba','ddpi','ddpix','ddpiy'], | |
610 | 152 // mode of operation. |
153 // fullscreen: takes parameters from page URL, keeps state in page URL | |
154 // embedded: takes parameters from Javascript options, keeps state inside object | |
155 'interactionMode' : 'fullscreen', | |
618
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
156 // actions |
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
157 'actions' : actions, |
612 | 158 // path to button images (must end with a slash) |
159 'buttonsImagePath' : '../greyskin/', | |
618
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
160 // actions groups |
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
161 'actionsStandard' : ["reference","zoomin","zoomout","zoomarea","zoomfull","pagewidth","back","fwd","page","bird","SEP","help","reset","options"], |
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
162 'actionsSpecial' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","size","calibrationx","scale","SEP","options"], |
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
163 'actionsCustom' : [], |
616 | 164 // is birdView shown? |
165 'isBirdDivVisible' : false, | |
615 | 166 // dimensions of bird's eye window |
167 'birdMaxX' : 200, | |
616 | 168 'birdMaxY' : 200, |
169 // is the "about" window shown? | |
170 'isAboutDivVisible' : false | |
171 | |
610 | 172 }; |
605 | 173 |
608 | 174 // parameters from the query string |
607 | 175 var queryParams = {}; |
608 | 176 |
177 // affine geometry classes | |
178 var geom = dlGeometry(); | |
604 | 179 |
180 var methods = { | |
608 | 181 // digilib initialization |
604 | 182 init : function(options) { |
608 | 183 // settings for this digilib instance are merged from defaults and options |
607 | 184 var settings = $.extend({}, defaults, options); |
185 var isFullscreen = settings.interactionMode === 'fullscreen'; | |
186 if (isFullscreen) { | |
187 queryParams = parseQueryParams(); | |
188 }; | |
604 | 189 return this.each(function() { |
605 | 190 var $elem = $(this); |
191 var data = $elem.data('digilib'); | |
607 | 192 var elemSettings; |
608 | 193 // if the plugin hasn't been initialized yet |
604 | 194 if (!data) { |
605 | 195 // merge query parameters |
607 | 196 if (isFullscreen) { |
197 elemSettings = $.extend({}, settings, queryParams); | |
198 } else { | |
199 elemSettings = $.extend({}, settings, parseImgParams($elem)); | |
200 }; | |
617
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
201 // store $(this) element in the settings |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
202 elemSettings.digilibRoot = $elem; |
605 | 203 // store in data element |
204 $elem.data('digilib', { | |
205 target : $elem, | |
607 | 206 settings : elemSettings |
604 | 207 }); |
208 } | |
608 | 209 // create HTML structure |
210 setupScalerDiv($elem, elemSettings); | |
618
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
211 setupButtons($elem, elemSettings, 'actionsStandard'); |
617
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
212 // bird's eye view creation - could be deferred? |
615 | 213 setupBirdviewDiv($elem, elemSettings); |
617
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
214 // about window creation - could be deferred? restrict to only one item? |
616 | 215 setupAboutDiv($elem, elemSettings); |
604 | 216 }); |
217 }, | |
608 | 218 |
219 // clean up digilib | |
604 | 220 destroy : function() { |
221 return this.each(function(){ | |
222 var $this = $(this); | |
223 var data = $this.data('digilib'); | |
224 // Namespacing FTW | |
605 | 225 $(window).unbind('.digilib'); // unbinds all digilibs(?) |
604 | 226 data.digilib.remove(); |
227 $this.removeData('digilib'); | |
228 }); | |
617
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
229 }, |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
230 |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
231 // event handler: toggles the visibility of the 'about' window |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
232 toggleAboutDiv : function () { |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
233 var $elem = $(this); // the clicked button |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
234 var settings = $elem.data('digilib').settings; |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
235 var $root = settings.digilibRoot; |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
236 var $about = $root.find('div.about'); |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
237 settings.isAboutDivVisible = !settings.isAboutDivVisible; |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
238 if (settings.isAboutDivVisible) { |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
239 $about.fadeIn(); |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
240 } else { |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
241 $about.fadeOut(); |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
242 }; |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
243 return false; |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
244 }, |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
245 |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
246 // event handler: toggles the visibility of the bird's eye window |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
247 toggleBirdDiv : function () { |
623 | 248 // TODO: red frame functionality |
617
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
249 var $elem = $(this); // the clicked button |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
250 var settings = $elem.data('digilib').settings; |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
251 var $root = settings.digilibRoot; |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
252 var $bird = $root.find('div.birdview'); |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
253 settings.isBirdDivVisible = !settings.isBirdDivVisible; |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
254 if (settings.isBirdDivVisible) { |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
255 $bird.fadeIn(); |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
256 } else { |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
257 $bird.fadeOut(); |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
258 }; |
cd846b5c8be8
toggle view event handlers for bird's eye and 'about windows
hertzhaft
parents:
616
diff
changeset
|
259 return false; |
623 | 260 }, |
261 | |
262 // goto given page nr (+/-: relative) | |
263 gotoPage : function(pageNr, keepMarks) { | |
264 var $elem = $(this); // the clicked button | |
265 var settings = $elem.data('digilib').settings; | |
266 var oldpn = settings.pn; | |
624 | 267 var pn = setNumValue(settings, "pn", pageNr); |
268 if (pn == null) return false; // nothing happened | |
623 | 269 if (pn < 1) { |
270 alert("no such page (page number too low)"); | |
271 settings.pn = oldpn; | |
272 return false; | |
273 }; | |
274 if (settings.pt) { | |
275 if (pn > settings.pt) { | |
276 alert("no such page (page number too high)"); | |
277 settings.pn = oldpn; | |
278 return false; | |
279 } | |
280 }; | |
281 // TODO: keepMarks | |
282 var $root = settings.digilibRoot; | |
283 var $img = $root.find('img.pic'); | |
284 display($img, settings); | |
624 | 285 return false; |
604 | 286 } |
605 | 287 }; |
604 | 288 |
623 | 289 // sets a key to a value (relative values with +/- if relative=true) |
290 var setNumValue = function(settings, key, value) { | |
291 // TODO: type and error checking | |
292 if (settings[key] == null) return null; | |
293 var sign = value.substring(0,1); | |
294 if (sign === '+' || sign === '-') { | |
295 settings[key] = parseFloat(settings[key]) + parseFloat(value); | |
296 } else { | |
297 settings[key] = value; | |
298 } | |
299 return settings[key]; | |
300 }; | |
301 | |
608 | 302 // returns parameters from page url |
607 | 303 var parseQueryParams = function() { |
304 return parseQueryString(location.search.slice(1)); | |
305 }; | |
306 | |
608 | 307 // returns parameters taken from embedded img-element |
607 | 308 var parseImgParams = function($elem) { |
613
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
309 var src = $elem.find('img').first().attr('src'); |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
310 if (!src) { |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
311 return null; |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
312 } |
607 | 313 var pos = src.indexOf('?'); |
314 var query = (pos < 0) ? '' : src.substring(pos + 1); | |
315 var scalerUrl = src.substring(0, pos); | |
316 var hash = parseQueryString(query); | |
609 | 317 hash.scalerBaseUrl = scalerUrl; |
607 | 318 // console.log(hash); |
319 return hash; | |
320 }; | |
321 | |
608 | 322 // parses query parameter string into parameter object |
607 | 323 var parseQueryString = function(query) { |
324 var pairs = query.split("&"); | |
325 var hash = {}; | |
326 for (var i = 0; i < pairs.length; i++) { | |
327 var pair = pairs[i].split("="); | |
328 if (pair.length === 2) { | |
608 | 329 hash[pair[0]] = pair[1]; |
607 | 330 }; |
331 }; | |
332 return hash; | |
333 }; | |
604 | 334 |
615 | 335 // returns a query string from key names from a parameter hash |
336 var makeParamString = function (settings, keys) { | |
337 var paramString = ''; | |
338 var latter = false; | |
339 for (i = 0; i < keys.length; ++i) { | |
340 var key = keys[i]; | |
341 if (settings[key]) { | |
342 // first param gets no '&' | |
343 paramString += latter ? '&' : ''; | |
344 latter = true; | |
345 // add parm=val | |
346 paramString += key + '=' + settings[key]; | |
347 }; | |
348 } | |
349 return paramString; | |
350 }; | |
351 | |
608 | 352 // returns URL and query string for Scaler |
353 var getScalerString = function (settings) { | |
615 | 354 var keys = settings.scalerParamNames; |
355 var queryString = makeParamString(settings, keys); | |
356 var url = settings.scalerBaseUrl + '?' + queryString; | |
609 | 357 return url; |
358 }; | |
615 | 359 |
609 | 360 // returns maximum size for scaler img in fullscreen mode |
361 var getFullscreenImgSize = function($elem) { | |
362 var winH = $(window).height(); | |
363 var winW = $(window).width(); | |
364 // TODO: account for borders? | |
365 return geom.size(winW, winH); | |
608 | 366 }; |
367 | |
622 | 368 // (re)load the img from a new scaler URL |
369 var display = function ($img, settings) { | |
623 | 370 // TODO: update location.href (browser URL) in fullscreen mode |
622 | 371 var scalerUrl = getScalerString(settings); |
372 $img.attr('src', scalerUrl); | |
623 | 373 // TODO: update bird view? |
622 | 374 }; |
375 | |
608 | 376 // creates HTML structure for digilib in elem |
377 var setupScalerDiv = function ($elem, settings) { | |
623 | 378 var $img; |
608 | 379 if (settings.interactionMode === 'fullscreen') { |
609 | 380 // fullscreen |
381 var imgSize = getFullscreenImgSize($elem); | |
382 settings.dw = imgSize.width; | |
383 settings.dh = imgSize.height; | |
613
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
384 $img = $('<img/>'); |
622 | 385 display($img, settings); |
609 | 386 } else { |
613
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
387 // embedded mode -- try to keep img tag |
623 | 388 $img = $elem.find('img'); |
613
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
389 if ($img.length > 0) { |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
390 console.debug("img detach:",$img); |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
391 $img.detach(); |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
392 } else { |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
393 $img = $('<img/>'); |
622 | 394 display($img, settings); |
613
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
395 } |
608 | 396 } |
613
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
397 // create new html |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
398 $elem.empty(); // TODO: should we keep stuff for customization? |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
399 var $scaler = $('<div class="scaler"/>'); |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
400 $elem.append($scaler); |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
401 $scaler.append($img); |
622 | 402 $img.addClass('pic'); |
623 | 403 $img.load(scalerImgLoadedFn(settings)); |
608 | 404 }; |
615 | 405 |
610 | 406 // creates HTML structure for buttons in elem |
618
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
407 var setupButtons = function ($elem, settings, actionGroup) { |
610 | 408 if (settings.interactionMode === 'fullscreen') { |
409 // fullscreen -- create new | |
612 | 410 var $buttonsDiv = $('<div class="buttons"></div>'); |
411 $elem.append($buttonsDiv); | |
618
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
412 var actionNames = settings[actionGroup]; |
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
413 for (var i = 0; i < actionNames.length; i++) { |
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
414 var actionName = actionNames[i]; |
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
415 var actionSettings = settings.actions[actionName]; |
612 | 416 // construct the button html |
417 var $button = $('<div class="button"></div>'); | |
418 var $a = $('<a/>'); | |
614 | 419 var $img = $('<img class="button"/>'); |
612 | 420 $buttonsDiv.append($button); |
421 $button.append($a); | |
422 $a.append($img); | |
423 // add attributes and bindings | |
618
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
424 $button.attr('title', actionSettings.tooltip); |
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
425 $button.addClass('button-' + actionName); |
612 | 426 // let the clicked <a> element know about the digilib context |
618
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
427 $a.data('digilib', { 'action' : actionName, 'settings' : settings } ); |
613
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
428 $a.bind('click', function() { |
619 | 429 var $elem = $(this); |
430 // get the context data | |
431 var data = $elem.data('digilib'); | |
612 | 432 // find the action for the clicked element |
618
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
433 var method = data.settings.actions[data.action].onclick; |
619 | 434 if ($.isArray(method)) { |
435 $elem.digilib.apply(this, method); | |
436 } else { | |
437 $elem.digilib(method); | |
438 }; | |
618
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
439 console.log(method); |
612 | 440 }); |
441 // binding mit closure | |
619 | 442 //(function(){ var action = actionSettings.onclick; |
612 | 443 // $a.bind('click', function(){ console.log( action )} ); |
444 //})(); | |
618
09167ef1512e
some refactoring, onclick handlers now work with arguments
hertzhaft
parents:
617
diff
changeset
|
445 $img.attr('src', settings.buttonsImagePath + actionSettings.img); |
611 | 446 }; |
447 } | |
612 | 448 return $buttonsDiv; |
610 | 449 }; |
615 | 450 |
451 // creates HTML structure for the bird's eye view in elem | |
452 var setupBirdviewDiv = function ($elem, settings) { | |
453 // use only the relevant parameters | |
454 var keys = ['fn','pn','dw','dh']; | |
455 var birdDimensions = { | |
456 'dw' : settings.birdMaxX, | |
457 'dh' : settings.birdMaxY | |
458 }; | |
459 var birdSettings = $.extend({}, settings, birdDimensions); | |
460 var birdUrl = settings.scalerBaseUrl + '?' + makeParamString(birdSettings, keys); | |
461 // the bird's eye div | |
625 | 462 var $birdviewDiv = $('<div class="birdview" style="display:none"/>'); |
615 | 463 // the detail indicator frame |
464 var $birdzoomDiv = $('<div class="birdzoom"/>'); | |
465 // the small image | |
466 var $birdImg = $('<img class="birdimg"/>'); | |
467 $elem.append($birdviewDiv); | |
468 $birdviewDiv.append($birdzoomDiv); | |
469 $birdviewDiv.append($birdImg); | |
470 $birdImg.attr('src', birdUrl); | |
471 }; | |
472 | |
625 | 473 // creates HTML structure for the about view in elem |
616 | 474 var setupAboutDiv = function ($elem, settings) { |
625 | 475 var $aboutDiv = $('<div class="about" style="display:none"/>'); |
616 | 476 var $header = $('<p>Digilib Graphic Viewer</p>'); |
477 var $link = $('<a/>'); | |
478 var $logo = $('<img class="logo" title="digilib"/>'); | |
479 var $content = $('<p/>'); | |
480 $elem.append($aboutDiv); | |
481 $aboutDiv.append($header); | |
482 $aboutDiv.append($link); | |
483 $aboutDiv.append($content); | |
484 $link.append($logo); | |
485 $logo.attr('src', settings.logoUrl); | |
486 $link.attr('href', settings.reposUrl); | |
487 $content.text('Version: ' + settings.version); | |
619 | 488 // let the element know about the digilib context |
489 $aboutDiv.data('digilib', { 'settings' : settings } ); | |
490 $aboutDiv.bind('click', function() { | |
491 console.log($(this)); | |
492 $(this).digilib('toggleAboutDiv'); | |
493 }); | |
616 | 494 }; |
495 | |
613
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
496 // returns function for load event of scaler img |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
497 var scalerImgLoadedFn = function(settings) { |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
498 return function() { |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
499 console.debug("img loaded! settings=", settings); |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
500 }; |
53ee659e2d00
keeping img tag for embedded mode seems to work now
robcast
parents:
612
diff
changeset
|
501 }; |
605 | 502 // hook plugin into jquery |
503 $.fn.digilib = function(method) { | |
504 if (methods[method]) { | |
505 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); | |
506 } else if (typeof(method) === 'object' || !method) { | |
507 return methods.init.apply(this, arguments); | |
508 } else { | |
509 $.error( 'Method ' + method + ' does not exist on jQuery.digilib' ); | |
510 } | |
511 }; | |
604 | 512 |
513 })(jQuery); |