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;