Mercurial > hg > digilib-old
comparison client/digitallibrary/jquery/jquery.digilib.regions.js @ 808:ae8e98c479d5 jquery
stub for new plugins; overlay div for regions plugin
| author | hertzhaft |
|---|---|
| date | Sun, 20 Feb 2011 13:24:49 +0100 |
| parents | 12f790cb30de |
| children | 1a7b14deae3a |
comparison
equal
deleted
inserted
replaced
| 807:1b1728926534 | 808:ae8e98c479d5 |
|---|---|
| 51 // array of defined regions | 51 // array of defined regions |
| 52 'regions' : [] | 52 'regions' : [] |
| 53 }; | 53 }; |
| 54 | 54 |
| 55 var actions = { | 55 var actions = { |
| 56 | |
| 56 // define a region interactively with two clicked points | 57 // define a region interactively with two clicked points |
| 57 "setRegion" : function(data) { | 58 "setRegion" : function(data) { |
| 58 var $elem = data.$elem; | 59 var $elem = data.$elem; |
| 60 var $body = $('body'); | |
| 61 var bodyRect = geom.rectangle($body); | |
| 59 var $scaler = data.$scaler; | 62 var $scaler = data.$scaler; |
| 60 var picRect = geom.rectangle($scaler); | 63 var scalerRect = geom.rectangle($scaler); |
| 61 var pt1, pt2; | 64 var pt1, pt2; |
| 62 // TODO: temporary rectangle only, pass values to "addRegion" factory | 65 // overlay prevents other elements from reacting to mouse events |
| 63 var $tempDiv = $('<div class="region" style="display:none"/>'); | 66 var $overlay = $('<div class="digilib-overlay"/>'); |
| 64 $elem.append($tempDiv); | 67 $body.append($overlay); |
| 65 | 68 bodyRect.adjustDiv($overlay); |
| 69 // the region to be defined | |
| 70 var $regionDiv = $('<div class="region" style="display:none"/>'); | |
| 71 $elem.append($regionDiv); | |
| 72 | |
| 73 // mousedown handler: start sizing | |
| 66 var regionStart = function (evt) { | 74 var regionStart = function (evt) { |
| 67 pt1 = geom.position(evt); | 75 pt1 = geom.position(evt); |
| 68 // setup and show zoom div | 76 // setup and show zoom div |
| 69 pt1.adjustDiv($tempDiv); | 77 pt1.adjustDiv($regionDiv); |
| 70 $tempDiv.width(0).height(0); | 78 $regionDiv.width(0).height(0); |
| 71 $tempDiv.show(); | 79 $regionDiv.show(); |
| 72 // register events | 80 // register mouse events |
| 73 $elem.bind("mousemove.dlRegion", regionMove); | 81 $overlay.bind("mousemove.dlRegion", regionMove); |
| 74 $elem.bind("mouseup.dlRegion", regionEnd); | 82 $overlay.bind("mouseup.dlRegion", regionEnd); |
| 75 return false; | 83 return false; |
| 76 }; | 84 }; |
| 77 | 85 |
| 78 // mouse move handler | 86 // mousemove handler: size region |
| 79 var regionMove = function (evt) { | 87 var regionMove = function (evt) { |
| 80 pt2 = geom.position(evt); | 88 pt2 = geom.position(evt); |
| 81 var rect = geom.rectangle(pt1, pt2); | 89 var rect = geom.rectangle(pt1, pt2); |
| 82 rect.clipTo(picRect); | 90 rect.clipTo(scalerRect); |
| 83 // update zoom div | 91 // update region |
| 84 rect.adjustDiv($tempDiv); | 92 rect.adjustDiv($regionDiv); |
| 85 return false; | 93 return false; |
| 86 }; | 94 }; |
| 87 | 95 |
| 88 // mouseup handler: end moving | 96 // mouseup handler: end sizing |
| 89 var regionEnd = function (evt) { | 97 var regionEnd = function (evt) { |
| 90 pt2 = geom.position(evt); | 98 pt2 = geom.position(evt); |
| 91 // assume a click and continue if the area is too small | 99 // assume a click and continue if the area is too small |
| 92 var clickRect = geom.rectangle(pt1, pt2); | 100 var clickRect = geom.rectangle(pt1, pt2); |
| 93 if (clickRect.getArea() <= 5) return false; | 101 if (clickRect.getArea() <= 5) return false; |
| 94 // unregister events | 102 // unregister mouse events and get rid of overlay |
| 95 $elem.unbind("mousemove.dlRegion", regionMove); | 103 $overlay.unbind("mousemove.dlRegion", regionMove); |
| 96 $elem.unbind("mouseup.dlRegion", regionEnd); | 104 $overlay.unbind("mouseup.dlRegion", regionEnd); |
| 97 // clip and transform | 105 $overlay.remove(); |
| 98 clickRect.clipTo(picRect); | 106 // clip region |
| 99 clickRect.adjustDiv($tempDiv); | 107 clickRect.clipTo(scalerRect); |
| 100 $tempDiv.remove(); | 108 clickRect.adjustDiv($regionDiv); |
| 101 data.settings.regions.push(clickRect); | 109 data.settings.regions.push(clickRect); // TODO: trafo, params |
| 102 // fn.redisplay(data); | 110 // fn.redisplay(data); |
| 103 return false; | 111 return false; |
| 104 }; | 112 }; |
| 105 | 113 |
| 106 // clear old handler (also ZoomDrag) | |
| 107 $scaler.unbind('.dlRegion'); | |
| 108 $elem.unbind('.dlRegion'); | |
| 109 // bind start zoom handler | 114 // bind start zoom handler |
| 110 $scaler.one('mousedown.dlRegion', regionStart); | 115 $overlay.one('mousedown.dlRegion', regionStart); |
| 111 }, | 116 }, |
| 112 | 117 |
| 113 // remove the last added region | 118 // remove the last added region |
| 114 "removeRegion" : function (data) { | 119 "removeRegion" : function (data) { |
| 115 var $regionDiv = data.settings.regions.pop(); | 120 var $regionDiv = data.settings.regions.pop(); |
| 216 // } | 221 // } |
| 217 }; | 222 }; |
| 218 | 223 |
| 219 // plugin installation called by digilib on plugin object. | 224 // plugin installation called by digilib on plugin object. |
| 220 var install = function(digilib) { | 225 var install = function(digilib) { |
| 226 console.debug('installing regions plugin. digilib:', digilib); | |
| 221 // import geometry classes | 227 // import geometry classes |
| 222 geom = digilib.fn.geometry; | 228 geom = digilib.fn.geometry; |
| 223 FULL_AREA = geom.rectangle(0,0,1,1); | 229 FULL_AREA = geom.rectangle(0,0,1,1); |
| 224 // add defaults | 230 // add defaults, actions, buttons |
| 225 $.extend(digilib.defaults, defaults); | 231 $.extend(digilib.defaults, defaults); |
| 226 // add actions | |
| 227 $.extend(digilib.actions, actions); | 232 $.extend(digilib.actions, actions); |
| 228 // add buttons | |
| 229 $.extend(digilib.buttons, buttons); | 233 $.extend(digilib.buttons, buttons); |
| 230 }; | 234 }; |
| 231 | 235 |
| 232 // plugin initialization | 236 // plugin initialization |
| 233 var init = function (data) { | 237 var init = function (data) { |
| 246 $data.bind('update', handleUpdate); | 250 $data.bind('update', handleUpdate); |
| 247 $data.bind('redisplay', handleRedisplay); | 251 $data.bind('redisplay', handleRedisplay); |
| 248 $data.bind('dragZoom', handleDragZoom); | 252 $data.bind('dragZoom', handleDragZoom); |
| 249 }; | 253 }; |
| 250 | 254 |
| 251 // plugin object with name and init | 255 // plugin object with name and install/init methods |
| 252 // shared objects filled by digilib on registration | 256 // shared objects filled by digilib on registration |
| 253 var pluginProperties = { | 257 var pluginProperties = { |
| 254 name : 'region', | 258 name : 'region', |
| 255 install : install, | 259 install : install, |
| 256 init : init, | 260 init : init, |
| 259 fn : {}, | 263 fn : {}, |
| 260 plugins : {} | 264 plugins : {} |
| 261 }; | 265 }; |
| 262 | 266 |
| 263 if ($.fn.digilib == null) { | 267 if ($.fn.digilib == null) { |
| 264 $.error("jquery.digilib.birdview must be loaded after jquery.digilib!"); | 268 $.error("jquery.digilib.regions must be loaded after jquery.digilib!"); |
| 265 } else { | 269 } else { |
| 266 $.fn.digilib('plugin', pluginProperties); | 270 $.fn.digilib('plugin', pluginProperties); |
| 267 } | 271 } |
| 268 })(jQuery); | 272 })(jQuery); |
