Mercurial > hg > digilib
comparison client/digitallibrary/jquery/jquery.digilib.regions.js @ 811:29de310ed4f3 jquery
read regions from HTML (not working yet), show info
author | hertzhaft |
---|---|
date | Mon, 21 Feb 2011 18:37:44 +0100 |
parents | 58dca7a7fe37 |
children | 36fbccbaf413 |
comparison
equal
deleted
inserted
replaced
808:58dca7a7fe37 | 811:29de310ed4f3 |
---|---|
39 onclick : "toggleRegions", | 39 onclick : "toggleRegions", |
40 tooltip : "show or hide regions", | 40 tooltip : "show or hide regions", |
41 icon : "regions.png" | 41 icon : "regions.png" |
42 }, | 42 }, |
43 regioninfo : { | 43 regioninfo : { |
44 onclick : "infoRegions", | 44 onclick : "toggleRegionInfo", |
45 tooltip : "information about regions", | 45 tooltip : "show information about regions", |
46 icon : "regioninfo.png" | 46 icon : "regioninfo.png" |
47 } | 47 } |
48 }; | 48 }; |
49 | 49 |
50 var defaults = { | 50 var defaults = { |
51 // are regions shown? | 51 // are regions shown? |
52 'isRegionVisible' : true, | 52 'isRegionVisible' : true, |
53 // are region numbers shown? | 53 // are region numbers shown? |
54 'showRegionNumbers' : false, | 54 'showRegionNumbers' : false, |
55 // is region info shown? | |
56 'showRegionInfo' : false, | |
57 // should digilib look for region content in the page? | |
58 'includeRegionContent' : false, | |
59 // class name for content divs | |
60 'regionContentSelector' : 'div.regioncontent', | |
55 // buttonset of this plugin | 61 // buttonset of this plugin |
56 'regionSet' : ['addregion', 'delregion', 'regions', 'regioninfo', 'lessoptions'], | 62 'regionSet' : ['regions', 'addregion', 'delregion', 'regioninfo', 'lessoptions'], |
57 // url param for regions | 63 // url param for regions |
58 'rg' : null, | 64 'rg' : null, |
59 }; | 65 }; |
60 | 66 |
61 var actions = { | 67 var actions = { |
142 | 148 |
143 // show/hide regions | 149 // show/hide regions |
144 "toggleRegions" : function (data) { | 150 "toggleRegions" : function (data) { |
145 var show = !data.settings.isRegionVisible; | 151 var show = !data.settings.isRegionVisible; |
146 data.settings.isRegionVisible = show; | 152 data.settings.isRegionVisible = show; |
147 fn.highlightButtons(data, 'regions' , show); | 153 fn.highlightButtons(data, 'regions', show); |
148 showRegionDivs(data); | 154 showRegionDivs(data, 1); |
155 }, | |
156 | |
157 // show/hide region info | |
158 "toggleRegionInfo" : function (data) { | |
159 var show = !data.settings.showRegionInfo; | |
160 data.settings.showRegionInfo = show; | |
161 fn.highlightButtons(data, 'regioninfo', show); | |
162 var $info = $('.regioninfo'); | |
163 if (show) { | |
164 $info.fadeIn(); | |
165 } else { | |
166 $info.fadeOut(); | |
167 } | |
149 } | 168 } |
150 }; | 169 }; |
151 | 170 |
152 var addRegion = actions.addRegion; | 171 var addRegion = actions.addRegion; |
153 | 172 |
172 $regionDiv.append($regionNr); | 191 $regionDiv.append($regionNr); |
173 } | 192 } |
174 return $regionDiv; | 193 return $regionDiv; |
175 }; | 194 }; |
176 | 195 |
196 // add region info | |
197 var addRegionInfo = function (region) { | |
198 var $regionDiv = region.$div; | |
199 var $regionInfoDiv = $('<div class="regioninfo" />'); | |
200 $regionInfoDiv.text(region.toString()); | |
201 $regionDiv.append($regionInfoDiv); | |
202 } | |
203 | |
204 // add region content | |
205 var addRegionContent = function (region, $elem) { | |
206 var $regionDiv = region.$div; | |
207 $regionDiv.append($elem); | |
208 } | |
209 | |
177 // create a region div from the data.regions collection | 210 // create a region div from the data.regions collection |
178 var createRegionDiv = function (data, index) { | 211 var createRegionDiv = function (regions, index) { |
179 var regions = data.regions; | |
180 if (index > regions.length) return null; | |
181 var region = regions[index]; | 212 var region = regions[index]; |
182 var $regionDiv = addRegionDiv(data, index + 1); // we count regions from 1 | 213 var $regionDiv = addRegionDiv(data, index + 1); // we count regions from 1 |
183 region.$div = $regionDiv; | 214 region.$div = $regionDiv; |
184 // TODO store original coords in $regionDiv.data for embedded mode? | 215 addRegionInfo(region); |
185 return $regionDiv; | 216 return $regionDiv; |
186 }; | 217 }; |
187 | 218 |
188 // create regions | 219 // create regions |
189 var createRegionDivs = function (data) { | 220 var createRegionDivs = function (data) { |
190 for (var i = 0; i < data.regions.length ; i++) { | 221 var regions = data.regions; |
191 createRegionDiv(data, i); | 222 for (var i = 0; i < regions.length ; i++) { |
192 } | 223 createRegionDiv(regions, i); |
224 } | |
225 }; | |
226 | |
227 // create regions from HTML | |
228 var createRegionsFromHTML = function (data) { | |
229 var selector = data.settings.regionContentSelector; | |
230 // TODO: has digilib div already been emptied here? | |
231 var $content = data.$elem.find(selector); | |
232 console.debug("createRegionsFromHTML", $content); | |
233 $content.each(function(index, $div) { | |
234 var r = $div.attr('title'); | |
235 var pos = r.split("/", 4); | |
236 var rect = geom.rectangle(pos[0], pos[1], pos[2], pos[3]); | |
237 regions.push(rect); | |
238 var $regionDiv = createRegionDiv(regions, index); | |
239 $regionDiv.append($div); | |
240 }); | |
193 }; | 241 }; |
194 | 242 |
195 // show a region on top of the scaler image | 243 // show a region on top of the scaler image |
196 var showRegionDiv = function (data, index) { | 244 var showRegionDiv = function (data, index, anim) { |
197 if (!data.imgTrafo) return; | 245 if (!data.imgTrafo) return; |
198 var $elem = data.$elem; | 246 var $elem = data.$elem; |
199 var regions = data.regions; | 247 var regions = data.regions; |
200 if (index > regions.length) return; | 248 if (index > regions.length) return; |
201 var region = regions[index] | 249 var region = regions[index] |
209 var show = data.settings.isRegionVisible; | 257 var show = data.settings.isRegionVisible; |
210 if (show && data.zoomArea.overlapsRect(regionRect)) { | 258 if (show && data.zoomArea.overlapsRect(regionRect)) { |
211 regionRect.clipTo(data.zoomArea); | 259 regionRect.clipTo(data.zoomArea); |
212 var screenRect = data.imgTrafo.transform(regionRect); | 260 var screenRect = data.imgTrafo.transform(regionRect); |
213 screenRect.adjustDiv($regionDiv); | 261 screenRect.adjustDiv($regionDiv); |
214 $regionDiv.show(); | 262 if (anim) { |
263 $regionDiv.fadeIn(); | |
264 } else{ | |
265 $regionDiv.show(); | |
266 } | |
215 } else { | 267 } else { |
216 $regionDiv.hide(); | 268 if (anim) { |
269 $regionDiv.fadeOut(); | |
270 } else{ | |
271 $regionDiv.show(); | |
272 } | |
217 } | 273 } |
218 }; | 274 }; |
219 | 275 |
220 // show regions | 276 // show regions |
221 var showRegionDivs = function (data) { | 277 var showRegionDivs = function (data, anim) { |
222 for (var i = 0; i < data.regions.length ; i++) { | 278 for (var i = 0; i < data.regions.length ; i++) { |
223 showRegionDiv(data, i); | 279 showRegionDiv(data, i, anim); |
224 } | 280 } |
225 }; | 281 }; |
226 | 282 |
227 var unpackRegions = function (data) { | 283 var unpackRegions = function (data) { |
228 // create regions from parameters | 284 // create regions from parameters |
261 ].join('/'); | 317 ].join('/'); |
262 } | 318 } |
263 data.settings.rg = rg; | 319 data.settings.rg = rg; |
264 }; | 320 }; |
265 | 321 |
322 // reload display after a region has been added or removed | |
266 var redisplay = function (data) { | 323 var redisplay = function (data) { |
267 packRegions(data); | 324 if (!data.settings.includeRegionContent) { |
325 packRegions(data); | |
326 } | |
268 fn.redisplay(data); | 327 fn.redisplay(data); |
269 } | 328 }; |
270 | 329 |
330 // TODO: turn region numbers or region divs into links to zoomed details | |
331 var getDigilibUrl = function (data) { | |
332 packParams(data); | |
333 var settings = data.settings; | |
334 var queryString = getParamString(settings, settings.digilibParamNames, defaults); | |
335 return settings.digilibBaseUrl + '?' + queryString; | |
336 }; | |
337 | |
338 // event handler, reads region parameter and creates region divs | |
271 var handleSetup = function (evt) { | 339 var handleSetup = function (evt) { |
272 data = this; | 340 data = this; |
273 console.debug("regions: handleSetup", data.settings.rg); | 341 console.debug("regions: handleSetup", data.settings.rg); |
274 unpackRegions(data); | 342 // content is given in HTML divs |
275 createRegionDivs(data); | 343 if (data.settings.includeRegionContent) { |
276 }; | 344 createRegionsFromHTML(data); |
277 | 345 } else { |
346 unpackRegions(data); | |
347 createRegionDivs(data); | |
348 } | |
349 }; | |
350 | |
351 // event handler, sets buttons and shows regions | |
278 var handleUpdate = function (evt) { | 352 var handleUpdate = function (evt) { |
279 data = this; | 353 data = this; |
280 fn.highlightButtons(data, 'regions' , data.settings.isRegionVisible); | 354 fn.highlightButtons(data, 'regions' , data.settings.isRegionVisible); |
355 fn.highlightButtons(data, 'regioninfo' , data.settings.showRegionInfo); | |
281 showRegionDivs(data); | 356 showRegionDivs(data); |
282 console.debug("regions: handleUpdate", data.settings.rg); | 357 console.debug("regions: handleUpdate", data.settings.rg); |
283 }; | 358 }; |
284 | 359 |
360 // event handler, redisplays regions (e.g. in a new position) | |
285 var handleRedisplay = function (evt) { | 361 var handleRedisplay = function (evt) { |
286 data = this; | 362 data = this; |
287 showRegionDivs(data); | 363 showRegionDivs(data); |
288 console.debug("regions: handleRedisplay"); | 364 console.debug("regions: handleRedisplay"); |
289 }; | 365 }; |
290 | 366 |
367 // event handler | |
291 var handleDragZoom = function (evt, zoomArea) { | 368 var handleDragZoom = function (evt, zoomArea) { |
292 console.debug("regions: handleDragZoom, zoomArea:", zoomArea); | 369 // console.debug("regions: handleDragZoom, zoomArea:", zoomArea); |
293 data = this; | 370 // data = this; |
294 }; | 371 }; |
295 | 372 |
296 // plugin installation called by digilib on plugin object. | 373 // plugin installation called by digilib on plugin object. |
297 var install = function(plugin) { | 374 var install = function(plugin) { |
298 digilib = plugin; | 375 digilib = plugin; |