Mercurial > hg > digilib-old
annotate webapp/src/main/webapp/jquery/jquery.digilib.regions.js @ 1091:897268e47ce4
some events: newRegion and regionClick
author | hertzhaft |
---|---|
date | Fri, 12 Oct 2012 20:16:40 +0200 |
parents | 16215fc22fbf |
children | 4964a1e252eb |
rev | line source |
---|---|
792 | 1 /** optional digilib regions plugin |
2 | |
1023 | 3 Mark up a digilib image with rectangular regions. |
4 | |
5 If hasRegionInfo=true reads regions from page HTML. | |
6 Element with regions has to be in digilib element, e.g. | |
792 | 7 |
1025 | 8 <map class="dl-keep dl-regioncontent"> |
9 <area href="http://www.mpiwg-berlin.mpg.de" coords="0.1,0.1,0.4,0.1" alt="MPI fuer Wissenschaftsgeschichte"/> | |
10 <area href="http://www.biblhertz.it" coords="0.5,0.8,0.4,0.1" alt="Bibliotheca Hertziana"/> | |
11 <area coords="0.3,0.5,0.15,0.1" /> | |
12 </map> | |
1023 | 13 |
1067 | 14 According to the HTML specs, "area" and "a" elements are allowed inside of a "map". |
15 Both can have a "coords" attribute, but "area" elements can't contain child nodes. | |
16 To have regions with content use "a" tags, e.g. | |
17 | |
18 <map class="dl-keep dl-regioncontent"> | |
19 <a href="http://www.mpiwg-berlin.mpg.de" coords="0.4907,0.3521,0.1458,0.107"> | |
20 MPI fuer Wissenschaftsgeschichte | |
21 </a> | |
22 <a href="http://www.biblhertz.it" coords="0.3413,0.2912,0.4345,0.2945"> | |
23 Bibliotheca Hertziana | |
24 </a> | |
25 <area coords="0.3,0.5,0.15,0.1" /> | |
26 </map> | |
27 | |
792 | 28 */ |
29 | |
30 (function($) { | |
813 | 31 // the digilib object |
996 | 32 var digilib = null; |
813 | 33 // the functions made available by digilib |
1048 | 34 var fn = { |
35 // dummy function to avoid errors, gets overwritten by buttons plugin | |
36 highlightButtons : function () { | |
37 console.debug('regions: dummy function - highlightButtons'); | |
38 } | |
39 }; | |
813 | 40 // affine geometry plugin |
996 | 41 var geom = null; |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
42 |
792 | 43 var buttons = { |
1091 | 44 defineregion : { |
45 onclick : "defineUserRegion", | |
813 | 46 tooltip : "define a region", |
792 | 47 icon : "addregion.png" |
48 }, | |
1091 | 49 removeregion : { |
50 onclick : "removeUserRegion", | |
51 tooltip : "delete the last user defined region", | |
792 | 52 icon : "delregion.png" |
53 }, | |
1091 | 54 removeallregions : { |
55 onclick : "removeAllUserRegions", | |
56 tooltip : "delete all user defined regions", | |
1067 | 57 icon : "delallregions.png" |
58 }, | |
792 | 59 regions : { |
60 onclick : "toggleRegions", | |
61 tooltip : "show or hide regions", | |
62 icon : "regions.png" | |
63 }, | |
1048 | 64 regioninfo : { |
855 | 65 onclick : "showRegionInfo", |
1091 | 66 tooltip : "show information about user defined regions", |
792 | 67 icon : "regioninfo.png" |
68 } | |
69 }; | |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
70 |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
71 var defaults = { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
72 // are regions being edited? |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
73 'editRegions' : false, |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
74 // are regions shown? |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
75 'isRegionVisible' : true, |
813 | 76 // are region numbers shown? |
1023 | 77 'showRegionNumbers' : true, |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
78 // is there region content in the page? |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
79 'processHtmlRegions' : false, |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
80 // region defined by users and in the URL |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
81 'processUserRegions' : true, |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
82 // callback for click on region |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
83 'onClickRegion' : null, |
1091 | 84 // callback when new user region is defined |
85 'onNewRegion' : null, | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
86 // turn any region into a clickable link to its detail view (DEPRECATED) |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
87 'autoZoomOnClick' : false, |
1091 | 88 // css selector for area/a elements (must also be marked with class "dl-keep") |
1067 | 89 'htmlRegionsSelector' : 'map.dl-regioncontent area, map.dl-regioncontent a', |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
90 // buttonset of this plugin |
1091 | 91 'regionSet' : ['regions', 'defineregion', 'removeregion', 'removeallregions', 'regioninfo', 'lessoptions'], |
813 | 92 // url param for regions |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
93 'rg' : null, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
94 // region attributes to copy from HTML |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
95 'regionAttributes' : { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
96 'id' :1, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
97 'href' :1, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
98 'title' :1, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
99 'target':1, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
100 'style' :1, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
101 'class' :1 |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
102 } |
813 | 103 }; |
792 | 104 |
105 var actions = { | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
106 |
792 | 107 // define a region interactively with two clicked points |
1091 | 108 defineUserRegion : function(data) { |
813 | 109 if (!data.settings.isRegionVisible) { |
110 alert("Please turn on regions visibility!"); | |
111 return; | |
112 } | |
996 | 113 var cssPrefix = data.settings.cssPrefix; |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
114 var $elem = data.$elem; |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
115 var $body = $('body'); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
116 var bodyRect = geom.rectangle($body); |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
117 var $scaler = data.$scaler; |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
118 var scalerRect = geom.rectangle($scaler); |
792 | 119 var pt1, pt2; |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
120 // overlay prevents other elements from reacting to mouse events |
996 | 121 var $overlay = $('<div class="'+cssPrefix+'overlay" style="position:absolute"/>'); |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
122 $body.append($overlay); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
123 bodyRect.adjustDiv($overlay); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
124 var attr = {'class' : cssPrefix+"regionURL"}; |
1091 | 125 var $regionDiv = addRegionDiv(data, data.userRegions, data.userRegions.length, attr); |
792 | 126 |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
127 // mousedown handler: start sizing |
792 | 128 var regionStart = function (evt) { |
129 pt1 = geom.position(evt); | |
130 // setup and show zoom div | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
131 pt1.adjustDiv($regionDiv); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
132 $regionDiv.width(0).height(0); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
133 $regionDiv.show(); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
134 // register mouse events |
920 | 135 $overlay.on("mousemove.dlRegion", regionMove); |
136 $overlay.on("mouseup.dlRegion", regionEnd); | |
792 | 137 return false; |
138 }; | |
139 | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
140 // mousemove handler: size region |
792 | 141 var regionMove = function (evt) { |
142 pt2 = geom.position(evt); | |
143 var rect = geom.rectangle(pt1, pt2); | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
144 rect.clipTo(scalerRect); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
145 // update region |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
146 rect.adjustDiv($regionDiv); |
792 | 147 return false; |
148 }; | |
149 | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
150 // mouseup handler: end sizing |
792 | 151 var regionEnd = function (evt) { |
152 pt2 = geom.position(evt); | |
153 // assume a click and continue if the area is too small | |
154 var clickRect = geom.rectangle(pt1, pt2); | |
155 if (clickRect.getArea() <= 5) return false; | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
156 // unregister mouse events and get rid of overlay |
920 | 157 $overlay.off("mousemove.dlRegion", regionMove); |
158 $overlay.off("mouseup.dlRegion", regionEnd); | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
159 $overlay.remove(); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
160 // clip region |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
161 clickRect.clipTo(scalerRect); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
162 clickRect.adjustDiv($regionDiv); |
1091 | 163 var region = storeUserRegion(data, $regionDiv); |
792 | 164 // fn.redisplay(data); |
1091 | 165 fn.highlightButtons(data, 'defineregion', 0); |
813 | 166 redisplay(data); |
1091 | 167 $(data).trigger('newRegion', region); |
792 | 168 return false; |
169 }; | |
170 | |
171 // bind start zoom handler | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
172 $overlay.one('mousedown.dlRegion', regionStart); |
1091 | 173 fn.highlightButtons(data, 'defineregion', 1); |
792 | 174 }, |
175 | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
176 // remove the last added URL region |
1091 | 177 removeUserRegion : function (data) { |
813 | 178 if (!data.settings.isRegionVisible) { |
179 alert("Please turn on regions visibility!"); | |
180 return; | |
181 } | |
1091 | 182 var r = data.userRegions.pop(); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
183 // no more URL regions to delete |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
184 if (r == null) return; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
185 var $regionDiv = r.$div; |
792 | 186 $regionDiv.remove(); |
813 | 187 redisplay(data); |
792 | 188 }, |
189 | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
190 // remove all manually added regions (defined through URL "rg" parameter) |
1091 | 191 removeAllUserRegions : function (data) { |
1067 | 192 if (!data.settings.isRegionVisible) { |
193 alert("Please turn on regions visibility!"); | |
194 return; | |
195 } | |
196 var cssPrefix = data.settings.cssPrefix; | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
197 var $regions = data.$elem.find('div.'+cssPrefix+'regionURL'); |
1067 | 198 $regions.remove(); |
1091 | 199 data.userRegions = []; // remove only URL regions |
1067 | 200 redisplay(data); |
201 }, | |
202 | |
813 | 203 // show/hide regions |
1060 | 204 toggleRegions : function (data) { |
813 | 205 var show = !data.settings.isRegionVisible; |
206 data.settings.isRegionVisible = show; | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
207 fn.highlightButtons(data, 'regions', show); |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
208 renderRegions(data, 1); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
209 }, |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
210 |
1048 | 211 // show region info in a window |
1060 | 212 showRegionInfo : function (data) { |
1048 | 213 var $elem = data.$elem; |
214 var cssPrefix = data.settings.cssPrefix; | |
1060 | 215 var infoselector = '#'+cssPrefix+'regionInfo'; |
216 if (fn.find(data, infoselector)) { | |
1048 | 217 fn.withdraw($info); |
218 return; | |
219 } | |
220 var html = '\ | |
221 <div id="'+cssPrefix+'regionInfo" class="'+cssPrefix+'keep '+cssPrefix+'regionInfo">\ | |
1060 | 222 <table class="'+cssPrefix+'infoheader">\ |
223 <tr>\ | |
224 <td class="'+cssPrefix+'infobutton html">HTML</td>\ | |
225 <td class="'+cssPrefix+'infobutton svgattr">SVG</td>\ | |
226 <td class="'+cssPrefix+'infobutton csv">CSV</td>\ | |
227 <td class="'+cssPrefix+'infobutton digilib">Digilib</td>\ | |
228 <td class="'+cssPrefix+'infobutton x">X</td>\ | |
229 </tr>\ | |
230 </table>\ | |
1048 | 231 </div>'; |
232 $info = $(html); | |
233 $info.appendTo($elem); | |
234 $info.append(regionInfoHTML(data)); | |
235 $info.append(regionInfoSVG(data)); | |
1060 | 236 $info.append(regionInfoCSV(data)); |
1048 | 237 $info.append(regionInfoDigilib(data)); |
238 var bind = function(name) { | |
1060 | 239 $info.find('.'+name).on('click.regioninfo', function () { |
1048 | 240 $info.find('div.'+cssPrefix+'info').hide(); |
241 $info.find('div.'+cssPrefix+name).show(); | |
1060 | 242 fn.centerOnScreen(data, $info); |
832
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
243 }); |
1048 | 244 }; |
245 bind('html'); | |
246 bind('svgattr'); | |
1060 | 247 bind('csv'); |
1048 | 248 bind('digilib'); |
249 $info.find('.x').on('click.regioninfo', function () { | |
250 fn.withdraw($info); | |
251 }); | |
252 $info.fadeIn(); | |
1060 | 253 fn.centerOnScreen(data, $info); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
254 }, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
255 |
1091 | 256 // display region coordinates in an edit line |
257 showRegionCoords : function (data, region) { | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
258 var $elem = data.$elem; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
259 var cssPrefix = data.settings.cssPrefix; |
1091 | 260 // var infoselector = '#'+cssPrefix+'regionInfo'; |
261 // var $info = fn.find(data, infoselector); | |
262 var coords = regionCoordsString(region, ','); | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
263 var html = '\ |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
264 <div id="'+cssPrefix+'regionInfo" class="'+cssPrefix+'keep '+cssPrefix+'regionInfo">\ |
1091 | 265 <input name="coords" type="text" size="30" maxlength="40" value="'+coords+'"/>\ |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
266 </div>'; |
1091 | 267 var $info = $(html); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
268 $info.appendTo($elem); |
1091 | 269 $input = $info.find('input'); |
270 $input.on('focus.regioninfo', function (event) { | |
271 this.select(); | |
272 }); | |
273 $input.on('blur.regioninfo', function (event) { | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
274 fn.withdraw($info); |
1091 | 275 return false; |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
276 }); |
1091 | 277 $input.on('keypress.regioninfo', function (event) { |
278 fn.withdraw($info); | |
279 return false; | |
280 }); | |
281 $input.prop("readonly",true); | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
282 $info.fadeIn(); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
283 fn.centerOnScreen(data, $info); |
1091 | 284 $input.focus(); |
285 console.debug('showRegionCoords', coords); | |
286 | |
991
497ab03868ab
moved marks to separate plugin. (pack and unpack is still in digilib.js)
robcast
parents:
969
diff
changeset
|
287 } |
792 | 288 }; |
289 | |
813 | 290 // store a region div |
1091 | 291 var storeUserRegion = function (data, $regionDiv) { |
292 var regions = data.userRegions; | |
813 | 293 var rect = geom.rectangle($regionDiv); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
294 var rectangle = data.imgTrafo.invtransform(rect); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
295 rectangle.$div = $regionDiv; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
296 regions.push(rectangle); |
1091 | 297 console.debug("storeUserRegion", data.userRegions, "rectangle", rectangle); |
298 return rectangle; | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
299 }; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
300 |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
301 // open region as detail |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
302 var openDetail = function (data, region) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
303 digilib.actions.zoomArea(data, region); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
304 }; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
305 |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
306 // make a coords string |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
307 var regionCoordsString = function (rect, sep) { |
1091 | 308 if (sep == null) sep = ','; // comma as default separator |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
309 return [ |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
310 fn.cropFloatStr(rect.x), |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
311 fn.cropFloatStr(rect.y), |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
312 fn.cropFloatStr(rect.width), |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
313 fn.cropFloatStr(rect.height) |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
314 ].join(sep); |
813 | 315 }; |
316 | |
855 | 317 // html for later insertion |
318 var regionInfoHTML = function (data) { | |
996 | 319 var cssPrefix = data.settings.cssPrefix; |
320 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'html"/>'); | |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
321 $infoDiv.append($('<div/>').text('<map class="'+cssPrefix+'keep '+cssPrefix+'regioncontent">')); |
1091 | 322 $.each(data.userRegions, function(index, r) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
323 var coords = regionCoordsString(r, ','); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
324 $infoDiv.append($('<div/>').text('<area coords="' + coords + '"/>')); |
855 | 325 }); |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
326 $infoDiv.append($('<div/>').text('</map>')); |
855 | 327 return $infoDiv; |
328 }; | |
329 | |
330 // SVG-style | |
331 var regionInfoSVG = function (data) { | |
996 | 332 var cssPrefix = data.settings.cssPrefix; |
333 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'svgattr"/>'); | |
1091 | 334 $.each(data.userRegions, function(index, r) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
335 var coords = regionCoordsString(r, ' '); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
336 $infoDiv.append($('<div/>').text('"' + coords + '"')); |
855 | 337 }); |
338 return $infoDiv; | |
339 }; | |
340 | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
341 // CSV-style |
1060 | 342 var regionInfoCSV = function (data) { |
343 var cssPrefix = data.settings.cssPrefix; | |
344 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'csv"/>'); | |
1091 | 345 $.each(data.userRegions, function(index, r) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
346 var coords = regionCoordsString(r, ','); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
347 $infoDiv.append($('<div/>').text(index+1 + ": " + coords)); |
1060 | 348 }); |
349 return $infoDiv; | |
350 }; | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
351 |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
352 // digilib-style (h,w@x,y) |
855 | 353 var regionInfoDigilib = function (data) { |
996 | 354 var cssPrefix = data.settings.cssPrefix; |
355 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'digilib"/>'); | |
1091 | 356 $.each(data.userRegions, function(index, r) { |
1067 | 357 if (r.fromHtml) return; |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
358 var coords = r.toString(); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
359 $infoDiv.append($('<div/>').text(coords)); |
855 | 360 }); |
361 return $infoDiv; | |
362 }; | |
363 | |
813 | 364 // add a region to data.$elem |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
365 var addRegionDiv = function (data, regions, index, attributes) { |
1025 | 366 var settings = data.settings; |
367 var cssPrefix = settings.cssPrefix; | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
368 // var nr = regions.length; // we count regions from 1 |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
369 var cls = cssPrefix+'region '+cssPrefix+'overlay'; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
370 if (attributes && attributes['class']) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
371 cls = cls+' '+attributes['class']; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
372 delete attributes['class']; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
373 } |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
374 var $regionDiv = $('<div class="'+cls+'" style="display:none"/>'); |
813 | 375 data.$elem.append($regionDiv); |
1025 | 376 if (settings.showRegionNumbers) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
377 var $regionLink = $('<a class="'+cssPrefix+'regionnumber">'+index+'</a>'); |
920 | 378 if (attributes) $regionLink.attr(attributes); |
851 | 379 $regionDiv.append($regionLink); |
813 | 380 } |
1025 | 381 if (attributes) { |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
382 // copy attributes to div except href |
1025 | 383 if (attributes.href) { |
1091 | 384 region.href = attributes.href; |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
385 // copy attributes |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
386 var attrs = $.extend({}, attributes); |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
387 delete attrs.href; |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
388 $regionDiv.attr(attrs); |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
389 } else { |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
390 $regionDiv.attr(attributes); |
1025 | 391 } |
392 } | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
393 // DEPRECATED |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
394 if (settings.autoZoomOnClick) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
395 if (settings.onClickRegion == null) settings.onClickRegion = openDetail; |
823 | 396 } |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
397 // handle click events on div |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
398 var region = regions[index]; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
399 $regionDiv.on('click.dlRegion', function(evt) { |
1091 | 400 $(data).trigger('regionClick', region); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
401 }); |
813 | 402 return $regionDiv; |
403 }; | |
404 | |
851 | 405 // create a region div from the data.regions array |
947 | 406 var createRegionDiv = function (data, regions, index, attributes) { |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
407 var region = regions[index]; |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
408 // check if div exists |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
409 if (region.$div != null) return region.$div; |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
410 // create and add div |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
411 var $regionDiv = addRegionDiv(data, regions, index, attributes); |
813 | 412 region.$div = $regionDiv; |
413 return $regionDiv; | |
414 }; | |
415 | |
851 | 416 // create regions from URL parameters |
417 var createRegionsFromURL = function (data) { | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
418 var cssPrefix = data.settings.cssPrefix; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
419 var attr = {'class' : cssPrefix+"regionURL"}; |
851 | 420 unpackRegions(data); |
1091 | 421 var regions = data.userRegions; |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
422 $.each(regions, function(index, region) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
423 createRegionDiv(data, regions, index, attr); |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
424 }); |
792 | 425 }; |
426 | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
427 // create regions from HTML |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
428 var createRegionsFromHTML = function (data) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
429 var cssPrefix = data.settings.cssPrefix; |
1091 | 430 var regions = data.htmlRegions; |
1025 | 431 // regions are defined in "area" tags |
1067 | 432 var $content = data.$elem.find(data.settings.htmlRegionsSelector); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
433 console.debug("createRegionsFromHTML. Number of elems: ", $content.length); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
434 $content.each(function(index, area) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
435 var $area = $(area); |
852 | 436 // the "coords" attribute contains the region coords (0..1) |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
437 var coords = $area.attr('coords'); |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
438 var pos = coords.split(',', 4); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
439 var rect = geom.rectangle(pos[0], pos[1], pos[2], pos[3]); |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
440 rect.fromHtml = true; |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
441 regions.push(rect); |
1024 | 442 // copy some attributes |
873 | 443 var attributes = {}; |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
444 for (var n in data.settings.regionAttributes) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
445 attributes[n] = $area.attr(n); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
446 } |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
447 // mark div as regionHTML |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
448 regionClass = cssPrefix+'regionHTML'; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
449 if (attributes['class']) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
450 attributes['class'] += ' ' + regionClass |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
451 } else { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
452 attributes['class'] = regionClass |
1024 | 453 } |
851 | 454 // create the div |
947 | 455 var $regionDiv = createRegionDiv(data, regions, index, attributes); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
456 var $contents = $area.contents().clone(); |
1025 | 457 if (attributes.href != null) { |
458 // wrap contents in a-tag | |
459 var $ca = $('<a href="'+attributes.href+'"/>'); | |
460 $ca.append($contents); | |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
461 // alt attribute is also content (BTW: area-tag has no content()) |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
462 $ca.append($area.attr('alt')); |
1025 | 463 $regionDiv.append($ca); |
464 } else { | |
465 $regionDiv.append($contents); | |
466 // alt attribute is also content (BTW: area-tag has no content()) | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
467 $regionDiv.append($area.attr('alt')); |
1025 | 468 } |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
469 }); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
470 }; |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
471 |
813 | 472 // show a region on top of the scaler image |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
473 var renderRegion = function (data, region, anim) { |
813 | 474 if (!data.imgTrafo) return; |
950
164d69e2c481
much nicer implementation of preview for scrolling and zooming.
robcast
parents:
947
diff
changeset
|
475 var zoomArea = data.zoomArea; |
813 | 476 var $regionDiv = region.$div; |
477 if (!$regionDiv) { | |
950
164d69e2c481
much nicer implementation of preview for scrolling and zooming.
robcast
parents:
947
diff
changeset
|
478 console.error("renderRegion: region has no $div", region); |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
479 // alert("renderRegion: region has no $div to show"); |
813 | 480 return; |
481 } | |
482 var regionRect = region.copy(); | |
483 var show = data.settings.isRegionVisible; | |
1067 | 484 if (show && zoomArea.overlapsRect(regionRect) && !regionRect.containsRect(zoomArea)) { |
950
164d69e2c481
much nicer implementation of preview for scrolling and zooming.
robcast
parents:
947
diff
changeset
|
485 regionRect.clipTo(zoomArea); |
813 | 486 var screenRect = data.imgTrafo.transform(regionRect); |
1067 | 487 // console.debug("renderRegion: pos=",geom.position(screenRect)); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
488 if (anim) { |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
489 $regionDiv.fadeIn(); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
490 } else{ |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
491 $regionDiv.show(); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
492 } |
1024 | 493 // adjustDiv sets wrong coords when called BEFORE show() |
851 | 494 screenRect.adjustDiv($regionDiv); |
813 | 495 } else { |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
496 if (anim) { |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
497 $regionDiv.fadeOut(); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
498 } else{ |
824 | 499 $regionDiv.hide(); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
500 } |
813 | 501 } |
502 }; | |
503 | |
504 // show regions | |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
505 var renderRegions = function (data, anim) { |
1091 | 506 $.each(data.htmlRegions, function(index, region) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
507 renderRegion(data, region, anim); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
508 }); |
1091 | 509 $.each(data.userRegions, function(index, region) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
510 renderRegion(data, region, anim); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
511 }); |
813 | 512 }; |
513 | |
1091 | 514 // read region data from URL parameters |
813 | 515 var unpackRegions = function (data) { |
516 var rg = data.settings.rg; | |
517 if (rg == null) return; | |
1091 | 518 var regions = data.userRegions; |
958
2a2e8c039c29
changed regions parameter separator to the same as for marks
hertzhaft
parents:
950
diff
changeset
|
519 var rs = rg.split(","); |
813 | 520 for (var i = 0; i < rs.length; i++) { |
521 var r = rs[i]; | |
958
2a2e8c039c29
changed regions parameter separator to the same as for marks
hertzhaft
parents:
950
diff
changeset
|
522 var pos = r.split("/", 4); |
813 | 523 var rect = geom.rectangle(pos[0], pos[1], pos[2], pos[3]); |
524 regions.push(rect); | |
792 | 525 } |
526 }; | |
527 | |
1091 | 528 // pack user regions array into a URL parameter string |
813 | 529 var packRegions = function (data) { |
1091 | 530 var regions = data.userRegions; |
815 | 531 if (!regions.length) { |
532 data.settings.rg = null; | |
533 return; | |
534 } | |
813 | 535 var rg = ''; |
536 for (var i = 0; i < regions.length; i++) { | |
1024 | 537 var region = regions[i]; |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
538 if (rg) { |
958
2a2e8c039c29
changed regions parameter separator to the same as for marks
hertzhaft
parents:
950
diff
changeset
|
539 rg += ','; |
792 | 540 } |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
541 rg += regionCoordsString(region, '/'); |
813 | 542 } |
543 data.settings.rg = rg; | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
544 console.debug('pack regions:', rg); |
792 | 545 }; |
546 | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
547 // reload display after a region has been added or removed |
813 | 548 var redisplay = function (data) { |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
549 if (data.settings.processUserRegions) { |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
550 packRegions(data); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
551 } |
813 | 552 fn.redisplay(data); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
553 }; |
813 | 554 |
1091 | 555 // event handler, gets called when a newRegion event is triggered |
556 var handleNewRegion = function (evt, region) { | |
557 var data = this; | |
558 var settings = data.settings; | |
559 console.debug("regions: handleNewRegion", region); | |
560 if (typeof settings.onNewRegion === 'function') { | |
561 // execute callback | |
562 return settings.onNewRegion(data, region); | |
563 } | |
564 if (typeof settings.onNewRegion === 'string') { | |
565 // execute action | |
566 return actions[settings.onNewRegion](data, region); | |
567 } | |
568 }; | |
569 | |
570 // event handler, gets called when a regionClick event is triggered | |
571 var handleRegionClick = function (evt, region) { | |
572 var data = this; | |
573 var settings = data.settings; | |
574 console.debug("regions: handleRegionClick", region); | |
575 if (region.href) { | |
576 // follow the href attribute of the region area | |
577 window.location = region.href; //TODO: how about target? | |
578 } | |
579 if (typeof settings.onClickRegion === 'function') { | |
580 // execute callback | |
581 return settings.onClickRegion(data, region); | |
582 } | |
583 if (typeof settings.onClickRegion === 'string') { | |
584 // execute action | |
585 return actions[settings.onClickRegion](data, region); | |
586 } | |
587 }; | |
588 | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
589 // event handler, reads region parameter and creates region divs |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
590 var handleSetup = function (evt) { |
941 | 591 var data = this; |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
592 var settings = data.settings; |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
593 console.debug("regions: handleSetup", settings.rg); |
1048 | 594 // regions with content are given in HTML divs |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
595 if (settings.processHtmlRegions) { |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
596 createRegionsFromHTML(data); |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
597 } |
1048 | 598 // regions are defined in the URL |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
599 if (settings.processUserRegions) { |
851 | 600 createRegionsFromURL(data); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
601 } |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
602 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
603 |
851 | 604 // event handler, sets buttons and shows regions when scaler img is reloaded |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
605 var handleUpdate = function (evt) { |
941 | 606 var data = this; |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
607 console.debug("regions: handleUpdate"); |
848 | 608 var settings = data.settings; |
609 fn.highlightButtons(data, 'regions' , settings.isRegionVisible); | |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
610 renderRegions(data); |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
611 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
612 |
1048 | 613 // additional buttons |
614 var installButtons = function (data) { | |
615 var settings = data.settings; | |
616 var mode = settings.interactionMode; | |
617 var buttonSettings = settings.buttonSettings[mode]; | |
618 // configure buttons through digilib "regionSet" option | |
619 var buttonSet = settings.regionSet || regionSet; | |
620 // set regionSet to [] or '' for no buttons (when showing regions only) | |
621 if (buttonSet.length && buttonSet.length > 0) { | |
622 buttonSettings.regionSet = buttonSet; | |
623 buttonSettings.buttonSets.push('regionSet'); | |
624 } | |
625 }; | |
626 | |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
627 // plugin installation called by digilib on plugin object. |
813 | 628 var install = function(plugin) { |
629 digilib = plugin; | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
630 console.debug('installing regions plugin. digilib:', digilib); |
1048 | 631 // import digilib functions |
632 $.extend(fn, digilib.fn); | |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
633 // import geometry classes |
813 | 634 geom = fn.geometry; |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
635 // add defaults, actions, buttons |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
636 $.extend(digilib.defaults, defaults); |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
637 $.extend(digilib.actions, actions); |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
638 $.extend(digilib.buttons, buttons); |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
639 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
640 |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
641 // plugin initialization |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
642 var init = function (data) { |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
643 console.debug('initialising regions plugin. data:', data); |
835 | 644 var $elem = data.$elem; |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
645 var settings = data.settings; |
996 | 646 var cssPrefix = data.settings.cssPrefix; |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
647 // region arrays |
1091 | 648 data.userRegions = []; |
649 data.htmlRegions = []; | |
1048 | 650 // install event handlers |
848 | 651 var $data = $(data); |
920 | 652 $data.on('setup', handleSetup); |
653 $data.on('update', handleUpdate); | |
1091 | 654 $data.on('newRegion', handleNewRegion); |
655 $data.on('regionClick', handleRegionClick); | |
1048 | 656 // install buttons |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
657 if (settings.processUserRegions) { |
1091 | 658 // add "rg" to digilibParamNames |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
659 // settings.digilibParamNames.push('rg'); |
1091 | 660 // TODO: this leads double params, because |
661 // settings.additionalParamNames is created earlier than this plugin's init() action | |
1048 | 662 if (digilib.plugins.buttons != null) { |
663 installButtons(data); | |
823 | 664 } |
813 | 665 } |
792 | 666 }; |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
667 |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
668 // plugin object with name and install/init methods |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
669 // shared objects filled by digilib on registration |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
670 var pluginProperties = { |
1048 | 671 name : 'regions', |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
672 install : install, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
673 init : init, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
674 buttons : {}, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
675 actions : {}, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
676 fn : {}, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
677 plugins : {} |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
678 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
679 |
792 | 680 if ($.fn.digilib == null) { |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
681 $.error("jquery.digilib.regions must be loaded after jquery.digilib!"); |
792 | 682 } else { |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
683 $.fn.digilib('plugin', pluginProperties); |
792 | 684 } |
685 })(jQuery); |