comparison client/digitallibrary/jquery/jquery.digilib.regions.js @ 825:f07b8ed13194 jquery

display regions as HTML for use in digilib element
author hertzhaft
date Tue, 01 Mar 2011 01:31:26 +0100
parents 874d781dd7ec
children 7b3e5c666269
comparison
equal deleted inserted replaced
817:874d781dd7ec 825:f07b8ed13194
38 regions : { 38 regions : {
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 regionhtml : {
44 onclick : "toggleRegionInfo", 44 onclick : "showRegionHTML",
45 tooltip : "show 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? 55 // is window with region HTML shown?
56 'showRegionInfo' : false, 56 'showRegionHTML' : 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 // turn any region into a clickable link to its detail view 59 // turn any region into a clickable link to its detail view
60 'autoRegionLinks' : false, 60 'autoRegionLinks' : false,
61 // class name for content divs (must additionally be marked with class "keep") 61 // class name for content divs (must additionally be marked with class "keep")
62 'regionContentSelector' : 'div.regioncontent', 62 'regionContentSelector' : 'div.regioncontent',
63 // buttonset of this plugin 63 // buttonset of this plugin
64 'regionSet' : ['regions', 'addregion', 'delregion', 'regioninfo', 'lessoptions'], 64 'regionSet' : ['regions', 'addregion', 'delregion', 'regionhtml', 'lessoptions'],
65 // url param for regions 65 // url param for regions
66 'rg' : null, 66 'rg' : null,
67 }; 67 };
68 68
69 var actions = { 69 var actions = {
153 data.settings.isRegionVisible = show; 153 data.settings.isRegionVisible = show;
154 fn.highlightButtons(data, 'regions', show); 154 fn.highlightButtons(data, 'regions', show);
155 showRegionDivs(data, 1); 155 showRegionDivs(data, 1);
156 }, 156 },
157 157
158 // show/hide region info 158 // show/hide region HTML code
159 "toggleRegionInfo" : function (data) { 159 "showRegionHTML" : function (data) {
160 var show = !data.settings.showRegionInfo; 160 var show = !data.settings.showRegionHTML;
161 data.settings.showRegionInfo = show; 161 data.settings.showRegionHTML = show;
162 fn.highlightButtons(data, 'regioninfo', show); 162 fn.highlightButtons(data, 'regionhtml', show);
163 var $info = $('.regioninfo'); 163 var $html = data.$htmlDiv;
164 if (show) { 164 if (!show) {
165 $info.fadeIn(); 165 $html.fadeOut(function () {
166 } else { 166 $html.contents().remove();
167 $info.fadeOut(); 167 });
168 } 168 return;
169 } 169 }
170 }; 170 // empty the div for HTML display
171 171 $.each(data.regions, function(index, region) {
172 var addRegion = actions.addRegion; 172 var title = "area="
173 + region.x + "/" + region.y + "/"
174 + region.width + "/" + region.height;
175 $html.append($('<div/>').text('<div class="keep regioncontent" title="' + title + '">'));
176 $html.append($('<div/>').text('</div>'));
177 });
178 $html.fadeIn();
179 }
180 };
173 181
174 // store a region div 182 // store a region div
175 var storeRegion = function (data, $regionDiv) { 183 var storeRegion = function (data, $regionDiv) {
176 var regions = data.regions; 184 var regions = data.regions;
177 var rect = geom.rectangle($regionDiv); 185 var rect = geom.rectangle($regionDiv);
203 }) 211 })
204 } 212 }
205 return $regionDiv; 213 return $regionDiv;
206 }; 214 };
207 215
208 // add region info
209 var addRegionInfo = function (region) {
210 var $regionDiv = region.$div;
211 var $regionInfoDiv = $('<div class="regioninfo" />');
212 $regionInfoDiv.text(region.toString());
213 $regionDiv.append($regionInfoDiv);
214 }
215
216 // add region content 216 // add region content
217 var addRegionContent = function (region, $elem) { 217 var addRegionContent = function (region, $elem) {
218 var $regionDiv = region.$div; 218 var $regionDiv = region.$div;
219 $regionDiv.append($elem); 219 $regionDiv.append($elem);
220 } 220 }
222 // create a region div from the data.regions collection 222 // create a region div from the data.regions collection
223 var createRegionDiv = function (regions, index) { 223 var createRegionDiv = function (regions, index) {
224 var region = regions[index]; 224 var region = regions[index];
225 var $regionDiv = addRegionDiv(data, index); 225 var $regionDiv = addRegionDiv(data, index);
226 region.$div = $regionDiv; 226 region.$div = $regionDiv;
227 addRegionInfo(region);
228 return $regionDiv; 227 return $regionDiv;
229 }; 228 };
230 229
231 // create regions 230 // create regions
232 var createRegionDivs = function (data) { 231 var createRegionDivs = function (data) {
233 var regions = data.regions; 232 var regions = data.regions;
234 for (var i = 0; i < regions.length ; i++) { 233 $.each(regions, function(i) {
235 createRegionDiv(regions, i); 234 createRegionDiv(regions, i);
236 } 235 });
237 }; 236 };
238 237
239 // create regions from HTML 238 // create regions from HTML
240 var createRegionsFromHTML = function (data) { 239 var createRegionsFromHTML = function (data) {
241 var regions = data.regions; 240 var regions = data.regions;
242 var selector = data.settings.regionContentSelector; 241 var selector = data.settings.regionContentSelector;
243 var $content = data.$elem.find(selector); 242 var $content = data.$elem.find(selector);
244 console.debug("createRegionsFromHTML", $content); 243 console.debug("createRegionsFromHTML", $content);
245 $content.each(function(index, elem) { 244 $content.each(function(index, elem) {
246 var $div = $(elem); 245 var $div = $(elem);
247 var r = $div.attr('title'); 246 var title = $div.attr('title');
247 var r = title.replace(/^area=/i, '');
248 var pos = r.split("/", 4); 248 var pos = r.split("/", 4);
249 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]);
250 regions.push(rect); 250 regions.push(rect);
251 var $regionDiv = createRegionDiv(regions, index); 251 var $regionDiv = createRegionDiv(regions, index);
252 $regionDiv.append($div); 252 $regionDiv.append($div);
365 createRegionsFromHTML(data); 365 createRegionsFromHTML(data);
366 // regions are defined in the URL 366 // regions are defined in the URL
367 } else { 367 } else {
368 unpackRegions(data); 368 unpackRegions(data);
369 createRegionDivs(data); 369 createRegionDivs(data);
370 fn.highlightButtons(data, 'regionhtml', data.settings.showRegionHTML);
370 } 371 }
371 }; 372 };
372 373
373 // event handler, sets buttons and shows regions 374 // event handler, sets buttons and shows regions
374 var handleUpdate = function (evt) { 375 var handleUpdate = function (evt) {
375 data = this; 376 data = this;
376 fn.highlightButtons(data, 'regions' , data.settings.isRegionVisible); 377 fn.highlightButtons(data, 'regions' , data.settings.isRegionVisible);
377 fn.highlightButtons(data, 'regioninfo' , data.settings.showRegionInfo); 378 fn.highlightButtons(data, 'regionhtml' , data.settings.showRegionHTML);
378 showRegionDivs(data); 379 showRegionDivs(data);
379 console.debug("regions: handleUpdate", data.settings.rg); 380 console.debug("regions: handleUpdate", data.settings.rg);
380 }; 381 };
381 382
382 // event handler, redisplays regions (e.g. in a new position) 383 // event handler, redisplays regions (e.g. in a new position)
410 var init = function (data) { 411 var init = function (data) {
411 console.debug('initialising regions plugin. data:', data); 412 console.debug('initialising regions plugin. data:', data);
412 var $data = $(data); 413 var $data = $(data);
413 // regions array 414 // regions array
414 data.regions = []; 415 data.regions = [];
416 // regions HTML div
417 var $html = $('<div class="keep regionhtml"/>');
418 data.$htmlDiv = $html;
419 data.$elem.append($html);
415 // no URL-defined regions, no buttons when regions are predefined in HTML 420 // no URL-defined regions, no buttons when regions are predefined in HTML
416 if (!data.settings.includeRegionContent) { 421 if (!data.settings.includeRegionContent) {
417 // add "rg" to digilibParamNames 422 // add "rg" to digilibParamNames
418 data.settings.digilibParamNames.push('rg'); 423 data.settings.digilibParamNames.push('rg');
419 // additional buttons 424 // additional buttons