Mercurial > hg > digilib
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 |