PageSourceSearch

https://bildungsprojekte.ruhr/sites/all/modules/drugis/modules/dru…/js/src/DgsMapToolQuickInfo.js?v=1.x

js bildungsprojekte.ruhr collected 2026-10-09 03:15:37 UTC 15,884 bytes, 548 lines download raw bytes

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.