1( function( $ ) { 2 3 DruGIS.DgsQuickInfoViewsWidget = DruGIS.Class( DruGIS.DWidget, { 4 5 initialize: function( ) { 6 7 var self = this; 8 9 self._htmlElement = self._htmlElement == undefined ? 'span' : self._htmlElement; 10 DruGIS.DWidget.prototype.initialize.apply( self ); 11 self._domObject.addClass( 'drugis-dgsquickinfoviewswidget' ); 12 self._domObject.append( $( "<span class='content'></span>" ) ); 13 }, 14 }); 15 16 DruGIS.DgsQuickInfoItemWidget = DruGIS.Class( DruGIS.DWidget, { 17 18 initialize: function( widgetOrHtml, listWidget ) { 19 20 var self = this; 21 self._listWidget = listWidget; 22 23 self._htmlElement = self._htmlElement == undefined ? 'li' : self._htmlElement; 24 DruGIS.DWidget.prototype.initialize.apply( self, [ listWidget ] ); 25 26 self._domObject.addClass( 'drugis-dgslistitemwidget' ); 27 listWidget._domObject.append( self._domObject ); 28 widgetOrHtml instanceof DruGIS.DWidget ? widgetOrHtml.setParent( self ) : self.domObject().html( widgetOrHtml ); 29 30 }, 31 }); 32 33 DruGIS.DgsQuickInfoListWidget = DruGIS.Class( DruGIS.DWidget, { 34 35 initialize: function( popupWidget ) { 36 37 var self = this; 38 self._popupWidget = popupWidget; 39 40 self._htmlElement = self._htmlElement == undefined ? 'ul' : self._htmlElement; 41 DruGIS.DWidget.prototype.initialize.apply( self, [ popupWidget ] ); 42 43 self._domObject.addClass( 'drugis-dgsquickinfolistwidget' ); 44 popupWidget._domObject.append( self._domObject ); 45 46 }, 47 }); 48 49 /* 50 * Class DruGIS - DgsMapToolQuickInfo 51 */ 52 53 DruGIS.DgsMapToolQuickInfo = DruGIS.Class( DruGIS.DgsMapTool, { 54 55 initialize: function( canvas, vl, params ) { 56 57 var self = this; 58 DruGIS.DgsMapTool.prototype.initialize.apply( self, arguments ); 59 60 self._canvas = canvas ; 61 self._params = params == undefined ? { 62 replace : true, 63 bufferSize : self.__bufferSize, 64 layerCondition : self.__layerCondition, 65 attributeName : 'drugis_quickinfo', 66 attributeShortName : 'dqinf', 67 condition : ol.events.condition.pointerMove, 68 } : params; 69 70 self._attributeName = self._params._attributeName != undefined ? self._params._attributeName : 'drugis_quickinfo'; 71 self._attributeShortName = self._params._attributeShortName != undefined ? self._params._attributeShortName : 'dqinf'; 72 self._toolName = self._toolName != undefined && self._toolName != "" ? self._toolName : "DgsQuickInfoInteraction"; 73 self._popup = new DruGIS.DgsMapPopupWidget( self ); 74 self._active = false; 75 76 self.mapLibraryBridge( self._params ); 77 78 }, 79 80 showBufferedExtent: function( bufferedExtent ){ 81 82 var self = this; 83 var mpGeom = new ol.geom.Polygon.fromExtent(bufferedExtent); 84 var mousePointFeature = new ol.Feature( { 85 geometry: mpGeom, 86 name : 'Polygon' }); 87 var polyStyle = new ol.style.Style({ 88 fill: new ol.style.Fill({ 89 color: "rgba( 255,0,0,0.1 )" 90 }), 91 stroke: new ol.style.Stroke({ 92 color: 'rgba( 255,0,0,1 )', 93 width: 2, 94 zIndex: 10, 95 }) 96 }); 97 mousePointFeature.setStyle(polyStyle); 98 self._featureOverlay.addFeature( mousePointFeature ); 99 100 }, 101 102 attributeName: function( ) { 103 var self=this; 104 return self._attributeName; 105 }, 106 107 attributeShortName: function( ) { 108 var self=this; 109 return self._attributeShortName; 110 }, 111 112 featureGetQuickInfoByAttr: function( feature ) { 113 var self=this; 114 115 var k = feature.getKeys(); 116 var attribute = self.attributeName(); 117 if ( $.inArray( attribute, k ) >= 0 ) { 118 return feature.get( attribute ); 119 } 120 var attribute = self.attributeShortName(); 121 if ( $.inArray( attribute, k ) >= 0 ) { 122 return feature.get( attribute ); 123 } 124 return false; 125 }, 126 127 //featureGetQuickInfoByView: function( feature, opt_layer ) { 128 //var self=this; 129// 130 //if ( opt_layer != undefined ) { 131// 132 //var layer = DruGIS.iface.mapCanvas().layerByMachineName( opt_layer ); 133// 134 //} 135 //return false;
136 //}, 137 138 overlayAddFeature: function( feature, opt_coordinate, opt_withClosestPoint ) { 139 140 var self=this; 141 142 self._featureOverlay.addFeature( feature ); 143 144 var coordinate = opt_coordinate != undefined ? opt_coordinate : ol.extent.getCenter( feature.getGeometry().getExtent() ); 145 var withClosestPoint = opt_withClosestPoint != undefined ? opt_withClosestPoint : false; 146 147 if ( withClosestPoint ) { 148 var geometry = feature.getGeometry(); 149 var closestPoint = geometry.getClosestPoint( coordinate ); 150 self._featureOverlay.addFeature( 151 new ol.Feature( { 152 geometry: new ol.geom.Point( closestPoint ), 153 name : 'Point' }) 154 ); 155 } 156 }, 157 158 eventGetLayers: function( params ) { 159 var self = this; 160 161 return params.layerFeaturesMap != undefined ? params.layerFeaturesMap.keys() : params.layers; 162 }, 163 164 handler: function( event, params ) { 165 166 var self = ( event != undefined && event.data != undefined && event.data.scope != undefined ) ? event.data.scope : this; 167 //console.log( "DruGIS.DgsMapToolQuickInfo.handler(): ", self, event, params ); 168 169 switch ( event.type ) { 170 case "DgsEFeaturePointerHasFeature": 171 if ( !self._active ) { 172 return true; 173 } 174 if ( params.interaction == self.mapLibraryBridge().interaction() ){ 175 176 //var prettyCoord = ol.coordinate.toStringHDMS(ol.proj.transform(params.coordinate, 'EPSG:3857', 'EPSG:4326'), 2); 177 178 var refresh = self._currentFeatures.size() != params.layerFeaturesMap.size(); 179 180 var layers = self.eventGetLayers( params ); 181 var currentLayers = self._currentFeatures.keys(); 182 183 var layer; 184 var currentLayer; 185 186 var hasCtrlKey = params.mapBrowserEvent != undefined ? params.mapBrowserEvent.originalEvent.ctrlKey : false; 187 188 var activeLayers = []; 189 for ( var i=0; i<layers.length; i++ ) { 190 layer = layers[ i ]; 191 if ( ! self._params.layerCondition( layer ) ) { 192 continue; 193 } 194 activeLayers.push( DruGIS.iface.mapCanvas().layerByMachineName( layer ) ); 195 } 196 197 for ( var i=0; !refresh && i<activeLayers.length; i++ ) { 198 layer = activeLayers[ i ].machineName(); 199 200 currentLayer = currentLayers[ i ]; 201 refresh = refresh || layer != currentLayer; 202 if ( refresh ) { 203 break; 204 } 205 var features = params.layerFeaturesMap.value( layer ).features; 206 var currentFeatures = self._currentFeatures.value( layer ).features; 207 208 refresh = refresh || features.length !== currentFeatures.length; 209 var feature; 210 var currentFeature; 211 for ( var j=0; !refresh && j<features.length; j++ ) { 212 feature = features[ j ]; 213 currentFeature = currentFeatures[ j ]; 214 refresh = refresh || features != currentFeature; 215 if ( refresh ) { 216 break; 217 } 218 } 219 } 220 221 if ( refresh ) { 222 223 var theItem; 224 self._featureOverlay.clear(); 225 226 // bufferedExtent 227 if ( hasCtrlKey ) { 228 self.showBufferedExtent( params.mapBrowserEvent.bufferedExtent ); 229 } 230 231 var quickInfos = self.layersGetQuickInfos( params, activeLayers ); 232 233 self.emit( "DgsEClearHighlightOverlay" ); 234 self.popup().unload(); 235 self._currentFeatures = new DruGIS.DMap(); 236 237 if ( quickInfos.length > 0 ) { 238 var theList = new DruGIS.DgsQuickInfoListWidget( self.popup() ); 239 240 //var coordinate = params.coordinate; 241 for ( var i=0; i<quickInfos.length; i++ ) { 242 quickInfo = quickInfos[ i ]; 243 theItem = new DruGIS.DgsQuickInfoItemWidget( quickInfo, theList ); 244 } 245 self._currentFeatures = params.layerFeaturesMap; 246 self.popup().show(params.coordinate); 247 self.popup().addActionsByCssClasses(); 248 } 249 } 250 } 251 break; 252 case "DgsEFeaturePointerNoFeature": 253 if ( params.interaction._originalEvent.type == 'singleclick' ) { 254 self.emit( "DgsEClearHighlightOverlay" ); 255 self.popup().unload(); 256 self._featureOverlay.clear(); 257 self._currentFeatures = new DruGIS.DMap(); 258 // bufferedExtent 259 if ( params.mapBrowserEvent.originalEvent.ctrlKey ) { 260 self.showBufferedExtent( params.mapBrowserEvent.bufferedExtent ); 261 } 262 } 263 break; 264 default: 265 break; 266 } 267 268 return true; 269 }, 270 271 layersGetQuickInfos: function( params, activeLayers ) { 272 var self = this; 273 self._quickInfos = []; 274 var quickInfo; 275 for ( var i=0; i<activeLayers.length; i++ ) { 276 layer = activeLayers[ i ].machineName(); 277 //if ( ! self._params.layerCondition( layer ) ) { 278 //continue; 279 //} 280 var features = params.layerFeaturesMap.value( layer ).features; 281 self.layerGetQuickInfo( layer, features, params ); 282 } 283 return self._quickInfos; 284 }, 285 286 layerGetQuickInfo: function( layer, features, params ) { 287 var self = this; 288 289 // Quickinfo unique id => check an attribute for uniqueness 290 var quids = new Array(); 291 //var features = params.layerFeaturesMap.value( layer ).features; 292 var view = false;
293 var fids = []; 294 for ( var j=0; j<features.length; j++ ) { 295 var feature = features[ j ]; 296 // unique? 297 var quid = feature.get( 'quid' ); 298 if ( !!quid ) { 299 if ( $.inArray( quid, quids ) >= 0 ) { 300 continue; 301 } 302 quids.push( quid ); 303 } 304 305 //var k = feature.getKeys(); 306 if ( ( quickInfo = self.featureGetQuickInfoByAttr( feature, layer ) ) !== false && ( $.inArray( quickInfo, self._quickInfos ) < 0 ) ) { 307 self._quickInfos.push( quickInfo ); 308 self.overlayAddFeature( feature, params.mapBrowserEvent.coordinate, !params.mapBrowserEvent.originalEvent.ctrlKey ); 309 } else { 310 fids.push( self.featureGetFid( feature )); 311 view = view || self.featureGetView( feature, layer ); 312 } 313 314 } 315 if ( fids.length > 0 ) { 316 quickInfo = self.featureGetQuickInfoByView( view, layer, fids ); 317 self._quickInfos.push( quickInfo ); 318 self.overlayAddFeature( feature, params.mapBrowserEvent.coordinate, !params.mapBrowserEvent.originalEvent.ctrlKey ); 319 } 320 }, 321 322 featureGetFid: function( feature ) { 323 var self = this; 324 var fid = feature.getId() != undefined ? feature.getId() : feature.get( 'id' ); 325 var quid = feature.get( 'quid' ); 326 if ( !!quid && ! $.isNumeric( quid ) ) { 327 quid = quid.split( ':' ); 328 fid = quid.length > 1 ? parseInt( quid[ 1 ] ) : false; 329 } 330 return fid; 331 }, 332 333 featureGetView: function( feature ) { 334 var theLayer = DruGIS.iface.mapCanvas().layerByMachineName( layer ); 335 var self = this; 336 var quid = feature.get( 'quid' ); 337 var view = false; 338 //quid with view ? 339 if ( !!quid && ! $.isNumeric( quid ) ) { 340 view = quid.split( ':' ); 341 view = view.length > 1 ? view[ 0 ] : theLayer.view(); 342 } 343 return view = !!view ? view : theLayer.view(); 344 }, 345 346 featureGetQuickInfoByView: function( view, layer, fids ) { 347 var self = this; 348 var theLayer = DruGIS.iface.mapCanvas().layerByMachineName( layer ); 349 if ( !theLayer.hasQuickInfoWidget() ) { 350 return false; 351 } 352 //var fid = self.featureGetFid( feature ); 353 //var view = self.featureGetView( feature ); 354 //view = !!view ? view : theLayer.view(); 355 356 if ( !view || !fids ) { 357 return false; 358 } 359 360 var filter = fids.join( '+' ); 361 //var widget = new DruGIS.DgsQuickInfoViewsWidget(); 362 var qiWidget = new DruGIS.DgsView( undefined, undefined, { 'view' : view, 'display' : 'quick_info', 'initialLoad' : false } ); 363 //var wrapper = $( "<span></span>" ).append( qiWidget.domObject() ); 364 //widget._qiWidget.domObject().append( widget.domObject() ); 365 qiWidget.pushWidget( "#" + qiWidget.domObject().attr( 'id' ), 'append', { 'fid' : filter } ); 366 //return wrapper.html(); 367 //return qiWidget.domObject().html(); 368 return qiWidget; 369 }, 370/* 371 __popupUnload: function( ) { 372 var self = this; 373 self._currentFeatures = new DruGIS.DMap(); 374 self.popup().removeActions(); 375 self.popup().clear(); 376 self.popup().hide(); 377 self.popup().domObject().empty(); 378 }, 379*/ 380 381 mapLibraryBridge: function( params ) { 382 383 var self = this; 384 self._mapLibraryBridge = self._mapLibraryBridge != undefined ? self._mapLibraryBridge : new DruGIS.DgsMapToolQuickInfoMapLibraryBridge( self, params ); 385 return self._mapLibraryBridge; 386 }, 387 388 /* 389 * public methods 390 */ 391 392 // A 393 activate: function( ) { 394 395 var self = this; 396 self._currentFeatures = new DruGIS.DMap(); 397 self._featureOverlay = new DruGIS.DgsFeatureOverlay(); 398 self.connect( "DgsEFeaturePointerHasFeature" ); 399 self.connect( "DgsEFeaturePointerNoFeature" ); 400 self._active = true; 401 return self.mapLibraryBridge().activate( ); 402 403 }, 404 405 // D 406 407 deactivate: function( ) { 408 409 var self = this; 410 self.emit( "DgsEClearHighlightOverlay" ); 411 self.popup().unload(); 412 self._currentFeatures = new DruGIS.DMap(); 413 self.disconnect( "DgsEFeaturePointerHasFeature" ); 414 self.disconnect( "DgsEFeaturePointerNoFeature" ); 415 if ( self._featureOverlay != undefined ) { 416 self._featureOverlay.destroyLayer(); 417 delete self._featureOverlay; 418 } 419 self._active = false; 420 return self.mapLibraryBridge().deactivate( ); 421 422 }, 423 424 popup: function( ) { 425 426 var self = this; 427 return self._popup; 428 429 }, 430 431 __bufferSize: function () { 432/* 433 var zoomLevel = DruGIS.iface.mapCanvas().zoomLevel(); 434 if ( zoomLevel > 20 ) { 435 return 3; 436 } 437 if ( zoomLevel < 10 ) { 438 return 40-zoomLevel; 439 } 440 bufferSize = 20-zoomLevel; 441 return bufferSize <= 0 ? 1 : bufferSize; 442*/ 443 444 var buffer; 445 var zoomLevel = DruGIS.iface.mapCanvas().zoomLevel(); 446 switch ( zoomLevel ) { 447 case 0: 448 case 1: 449 case 2: 450 case 3:
451 case 4: 452 case 5: 453 case 6: 454 case 7: 455 case 8: 456 buffer = 1000; 457 break; 458 case 9: 459 buffer = 800; 460 break; 461 case 10: 462 buffer = 600; 463 break; 464 case 11: 465 buffer = 500; 466 break; 467 case 12: 468 buffer = 380; 469 break; 470 case 13: 471 buffer = 150; 472 break; 473 case 14: 474 buffer = 100; 475 break; 476 case 15: 477 buffer = 50; 478 break; 479 case 16: 480 buffer = 30; 481 break; 482 case 17: 483 buffer = 10; 484 break; 485 case 18: 486 case 19: 487 buffer = 5; 488 break; 489 case 20: 490 case 21: 491 case 22: 492 case 23: 493 buffer = 3; 494 break; 495 case 24: 496 case 25: 497 case 26: 498 buffer = 2; 499 break; 500 case 27: 501 case 28: 502 case 29: 503 default: 504 buffer = 1; 505 break; 506 } 507 return buffer; 508 //return 0; 509 }, 510 511 __layerCondition: function ( layer ) { 512 513 var theLayer = DruGIS.iface.mapCanvas().layerByMachineName( layer ); 514 if ( theLayer == undefined ) { 515 return false; 516 } 517 return theLayer == DruGIS.iface.mapCanvas().currentLayer() && theLayer.visible(); 518 }, 519 520 CLASS_NAME: DruGIS.DgsMapTool.prototype.CLASS_NAME + ".DgsMapToolQuickInfo", 521 } ); 522 523 DruGIS.DgsMapToolQuickInfoMapLibraryBridge = DruGIS.Class( DruGIS.DgsMapToolPointerMapLibraryBridge, { 524 525 /* 526 * DgsMapToolQuickInfoMapLibraryBridge 527 * 528 * Status: Todo 529 */ 530 initialize: function( mapTool, params ){ 531 var self = this; 532 DruGIS.DgsMapToolPointerMapLibraryBridge.prototype.initialize.apply( self, arguments ); 533 534 }, 535 536 instance: function() { 537 var self = this; 538 if ( self._instance == undefined ) { 539 self._instance = new DruGIS.DgsMapToolQuickInfoMapLibraryBridge( self, arguments ); 540 } 541 return self._instance; 542 }, 543 544 CLASS_NAME: DruGIS.DgsMapToolPointerMapLibraryBridge.prototype.CLASS_NAME + ".DgsMapToolQuickInfoMapLibraryBridge", 545 } ); 546 547 548} ) (jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.