Mercurial > hg > digilib-old
comparison client/digitallibrary/jquery/jquery.digilib.regions.js @ 823:8af71d9d830b jquery
fixed automatic region links and region content
author | hertzhaft |
---|---|
date | Wed, 23 Feb 2011 02:06:41 +0100 |
parents | eff74cfaaf97 |
children | f0a5e4d2cba7 |
comparison
equal
deleted
inserted
replaced
822:637e8b601763 | 823:8af71d9d830b |
---|---|
54 'showRegionNumbers' : false, | 54 'showRegionNumbers' : false, |
55 // is region info shown? | 55 // is region info shown? |
56 'showRegionInfo' : false, | 56 'showRegionInfo' : false, |
57 // should digilib look for region content in the page? | 57 // should digilib look for region content in the page? |
58 'includeRegionContent' : false, | 58 'includeRegionContent' : false, |
59 // class name for content divs | 59 // turn any region into a clickable link to its detail view |
60 'autoRegionLinks' : false, | |
61 // class name for content divs (must additionally be marked with class "keep") | |
60 'regionContentSelector' : 'div.regioncontent', | 62 'regionContentSelector' : 'div.regioncontent', |
61 // buttonset of this plugin | 63 // buttonset of this plugin |
62 'regionSet' : ['regions', 'addregion', 'delregion', 'regioninfo', 'lessoptions'], | 64 'regionSet' : ['regions', 'addregion', 'delregion', 'regioninfo', 'lessoptions'], |
63 // url param for regions | 65 // url param for regions |
64 'rg' : null, | 66 'rg' : null, |
80 var pt1, pt2; | 82 var pt1, pt2; |
81 // overlay prevents other elements from reacting to mouse events | 83 // overlay prevents other elements from reacting to mouse events |
82 var $overlay = $('<div class="digilib-overlay"/>'); | 84 var $overlay = $('<div class="digilib-overlay"/>'); |
83 $body.append($overlay); | 85 $body.append($overlay); |
84 bodyRect.adjustDiv($overlay); | 86 bodyRect.adjustDiv($overlay); |
85 // we count regions from 1 | 87 var $regionDiv = addRegionDiv(data, data.regions.length); |
86 var $regionDiv = addRegionDiv(data, data.regions.length + 1); | |
87 | 88 |
88 // mousedown handler: start sizing | 89 // mousedown handler: start sizing |
89 var regionStart = function (evt) { | 90 var regionStart = function (evt) { |
90 pt1 = geom.position(evt); | 91 pt1 = geom.position(evt); |
91 // setup and show zoom div | 92 // setup and show zoom div |
179 regions.push(regionRect); | 180 regions.push(regionRect); |
180 console.debug("regions", data.regions, "regionRect", regionRect); | 181 console.debug("regions", data.regions, "regionRect", regionRect); |
181 }; | 182 }; |
182 | 183 |
183 // add a region to data.$elem | 184 // add a region to data.$elem |
184 var addRegionDiv = function (data, nr) { | 185 var addRegionDiv = function (data, index) { |
186 var nr = index + 1; // we count regions from 1 | |
187 // create a digilib URL for this detail | |
188 var regionUrl = getRegionUrl(data, index); | |
185 var $regionDiv = $('<div class="region overlay" style="display:none"/>'); | 189 var $regionDiv = $('<div class="region overlay" style="display:none"/>'); |
186 $regionDiv.attr("id", ID_PREFIX + nr); | 190 $regionDiv.attr("id", ID_PREFIX + nr); |
187 data.$elem.append($regionDiv); | 191 data.$elem.append($regionDiv); |
188 if (data.settings.showRegionNumbers) { | 192 if (data.settings.showRegionNumbers) { |
189 var $regionNr = $('<div class="regionnumber" />'); | 193 var $regionNr = $('<div class="regionnumber"/>'); |
190 $regionNr.text(nr); | 194 var $regionLink = $('<a/>'); |
195 $regionLink.attr('href', regionUrl); | |
196 $regionLink.text(nr); | |
197 $regionNr.append($regionLink); | |
191 $regionDiv.append($regionNr); | 198 $regionDiv.append($regionNr); |
199 } | |
200 if (data.settings.autoRegionLinks) { | |
201 $regionDiv.bind('click.dlRegion', function() { | |
202 window.location = regionUrl; | |
203 }) | |
192 } | 204 } |
193 return $regionDiv; | 205 return $regionDiv; |
194 }; | 206 }; |
195 | 207 |
196 // add region info | 208 // add region info |
208 } | 220 } |
209 | 221 |
210 // create a region div from the data.regions collection | 222 // create a region div from the data.regions collection |
211 var createRegionDiv = function (regions, index) { | 223 var createRegionDiv = function (regions, index) { |
212 var region = regions[index]; | 224 var region = regions[index]; |
213 var $regionDiv = addRegionDiv(data, index + 1); // we count regions from 1 | 225 var $regionDiv = addRegionDiv(data, index); |
214 region.$div = $regionDiv; | 226 region.$div = $regionDiv; |
215 addRegionInfo(region); | 227 addRegionInfo(region); |
216 return $regionDiv; | 228 return $regionDiv; |
217 }; | 229 }; |
218 | 230 |
224 } | 236 } |
225 }; | 237 }; |
226 | 238 |
227 // create regions from HTML | 239 // create regions from HTML |
228 var createRegionsFromHTML = function (data) { | 240 var createRegionsFromHTML = function (data) { |
241 var regions = data.regions; | |
229 var selector = data.settings.regionContentSelector; | 242 var selector = data.settings.regionContentSelector; |
230 // TODO: has digilib div already been emptied here? | |
231 var $content = data.$elem.find(selector); | 243 var $content = data.$elem.find(selector); |
232 console.debug("createRegionsFromHTML", $content); | 244 console.debug("createRegionsFromHTML", $content); |
233 $content.each(function(index, $div) { | 245 $content.each(function(index, elem) { |
246 var $div = $(elem); | |
234 var r = $div.attr('title'); | 247 var r = $div.attr('title'); |
235 var pos = r.split("/", 4); | 248 var pos = r.split("/", 4); |
236 var rect = geom.rectangle(pos[0], pos[1], pos[2], pos[3]); | 249 var rect = geom.rectangle(pos[0], pos[1], pos[2], pos[3]); |
237 regions.push(rect); | 250 regions.push(rect); |
238 var $regionDiv = createRegionDiv(regions, index); | 251 var $regionDiv = createRegionDiv(regions, index); |
239 $regionDiv.append($div); | 252 $regionDiv.append($div); |
253 $div.show(); | |
240 }); | 254 }); |
241 }; | 255 }; |
242 | 256 |
243 // show a region on top of the scaler image | 257 // show a region on top of the scaler image |
244 var showRegionDiv = function (data, index, anim) { | 258 var showRegionDiv = function (data, index, anim) { |
325 packRegions(data); | 339 packRegions(data); |
326 } | 340 } |
327 fn.redisplay(data); | 341 fn.redisplay(data); |
328 }; | 342 }; |
329 | 343 |
330 // TODO: turn region numbers or region divs into links to zoomed details | 344 // for turning region numbers/region divs into links to zoomed details |
331 var getDigilibUrl = function (data) { | 345 var getRegionUrl = function (data, index) { |
332 packParams(data); | 346 var region = data.regions[index]; |
333 var settings = data.settings; | 347 var settings = data.settings; |
334 var queryString = getParamString(settings, settings.digilibParamNames, defaults); | 348 var params = { |
349 "fn" : settings.fn, | |
350 "pn" : settings.pn | |
351 }; | |
352 fn.packArea(params, region); | |
353 fn.packMarks(params, data.marks); | |
354 fn.packScalerFlags(params, data.scalerFlags); | |
355 var paramNames = digilib.defaults.digilibParamNames; | |
356 // build our own digilib URL without storing anything | |
357 var queryString = fn.getParamString(params, paramNames, digilib.defaults); | |
335 return settings.digilibBaseUrl + '?' + queryString; | 358 return settings.digilibBaseUrl + '?' + queryString; |
336 }; | 359 }; |
337 | 360 |
338 // event handler, reads region parameter and creates region divs | 361 // event handler, reads region parameter and creates region divs |
339 var handleSetup = function (evt) { | 362 var handleSetup = function (evt) { |
340 data = this; | 363 data = this; |
341 console.debug("regions: handleSetup", data.settings.rg); | 364 console.debug("regions: handleSetup", data.settings.rg); |
342 // content is given in HTML divs | 365 // regions with content are given in HTML divs |
343 if (data.settings.includeRegionContent) { | 366 if (data.settings.includeRegionContent) { |
344 createRegionsFromHTML(data); | 367 createRegionsFromHTML(data); |
368 // regions are defined in the URL | |
345 } else { | 369 } else { |
346 unpackRegions(data); | 370 unpackRegions(data); |
347 createRegionDivs(data); | 371 createRegionDivs(data); |
348 } | 372 } |
349 }; | 373 }; |
386 | 410 |
387 // plugin initialization | 411 // plugin initialization |
388 var init = function (data) { | 412 var init = function (data) { |
389 console.debug('initialising regions plugin. data:', data); | 413 console.debug('initialising regions plugin. data:', data); |
390 var $data = $(data); | 414 var $data = $(data); |
391 var buttonSettings = data.settings.buttonSettings.fullscreen; | 415 // regions array |
392 // configure buttons through digilib "regionSet" option | 416 data.regions = []; |
393 var buttonSet = data.settings.regionSet || regionSet; | 417 // no URL-defined regions, no buttons when regions are predefined in HTML |
394 // set regionSet to [] or '' for no buttons (when showing regions only) | 418 if (!data.settings.includeRegionContent) { |
395 if (buttonSet.length && buttonSet.length > 0) { | 419 // add "rg" to digilibParamNames |
396 buttonSettings['regionSet'] = buttonSet; | 420 data.settings.digilibParamNames.push('rg'); |
397 buttonSettings.buttonSets.push('regionSet'); | 421 // additional buttons |
422 var buttonSettings = data.settings.buttonSettings.fullscreen; | |
423 // configure buttons through digilib "regionSet" option | |
424 var buttonSet = data.settings.regionSet || regionSet; | |
425 // set regionSet to [] or '' for no buttons (when showing regions only) | |
426 if (buttonSet.length && buttonSet.length > 0) { | |
427 buttonSettings['regionSet'] = buttonSet; | |
428 buttonSettings.buttonSets.push('regionSet'); | |
429 } | |
398 } | 430 } |
399 // install event handler | 431 // install event handler |
400 $data.bind('setup', handleSetup); | 432 $data.bind('setup', handleSetup); |
401 $data.bind('update', handleUpdate); | 433 $data.bind('update', handleUpdate); |
402 $data.bind('redisplay', handleRedisplay); | 434 $data.bind('redisplay', handleRedisplay); |
403 $data.bind('dragZoom', handleDragZoom); | 435 $data.bind('dragZoom', handleDragZoom); |
404 // regions array | |
405 data.regions = []; | |
406 // add "rg" to digilibParamNames | |
407 data.settings.digilibParamNames.push('rg'); | |
408 }; | 436 }; |
409 | 437 |
410 // plugin object with name and install/init methods | 438 // plugin object with name and install/init methods |
411 // shared objects filled by digilib on registration | 439 // shared objects filled by digilib on registration |
412 var pluginProperties = { | 440 var pluginProperties = { |