ParameterTypes::INTEGER, 'range' => [ 0, 20 ], 'default' => false, 'message' => 'maps-par-zoom' ]; $params['defzoom'] = [ 'type' => ParameterTypes::INTEGER, 'range' => [ 0, 20 ], 'default' => self::getDefaultZoom(), 'message' => 'maps-leaflet-par-defzoom' ]; $params['layers'] = [ 'aliases' => 'layer', 'type' => 'string', 'values' => array_keys( $GLOBALS['egMapsLeafletAvailableLayers'], true, true ), 'default' => $GLOBALS['egMapsLeafletLayers'], 'message' => 'maps-leaflet-par-layers', 'islist' => true, ]; $params['overlays'] = [ 'aliases' => [ 'overlaylayers' ], 'type' => ParameterTypes::STRING, 'values' => array_keys( $GLOBALS['egMapsLeafletAvailableOverlayLayers'], true, true ), 'default' => $GLOBALS['egMapsLeafletOverlayLayers'], 'message' => 'maps-leaflet-par-overlaylayers', 'islist' => true, ]; $params['resizable'] = [ 'type' => ParameterTypes::BOOLEAN, 'default' => $GLOBALS['egMapsResizableByDefault'], 'message' => 'maps-par-resizable' ]; $params['fullscreen'] = [ 'aliases' => [ 'enablefullscreen' ], 'type' => ParameterTypes::BOOLEAN, 'default' => false, 'message' => 'maps-par-enable-fullscreen', ]; $params['scrollwheelzoom'] = [ 'aliases' => [ 'scrollzoom' ], 'type' => ParameterTypes::BOOLEAN, 'default' => true, 'message' => 'maps-par-scrollwheelzoom', ]; $params['cluster'] = [ 'aliases' => [ 'markercluster' ], 'type' => ParameterTypes::BOOLEAN, 'default' => false, 'message' => 'maps-par-markercluster', ]; $params['clustermaxzoom'] = [ 'type' => ParameterTypes::INTEGER, 'default' => 20, 'message' => 'maps-par-clustermaxzoom', ]; $params['clusterzoomonclick'] = [ 'type' => ParameterTypes::BOOLEAN, 'default' => true, 'message' => 'maps-par-clusterzoomonclick', ]; $params['clustermaxradius'] = [ 'type' => ParameterTypes::INTEGER, 'default' => 80, 'message' => 'maps-par-maxclusterradius', ]; $params['clusterspiderfy'] = [ 'type' => ParameterTypes::BOOLEAN, 'default' => true, 'message' => 'maps-leaflet-par-clusterspiderfy', ]; $params['geojson'] = [ 'type' => ParameterTypes::STRING, 'default' => '', 'message' => 'maps-displaymap-par-geojson', ]; $params['clicktarget'] = [ 'type' => ParameterTypes::STRING, 'default' => '', 'message' => 'maps-leaflet-par-clicktarget', ]; return $params; } /** * @since 3.0 */ public function getDefaultZoom() { return $GLOBALS['egMapsLeafletZoom']; } public function newMapId(): string { static $mapsOnThisPage = 0; $mapsOnThisPage++; return 'map_leaflet_' . $mapsOnThisPage; } public function getResourceModules(): array { return [ 'ext.maps.leaflet.loader', 'ext.maps.leaflet.leafletajax' ]; } public function getDependencyHtml( array $params ): string { $dependencies = []; // Only add dependencies that have not yet been added. foreach ( $this->getDependencies( $params ) as $dependency ) { if ( !in_array( $dependency, $this->addedDependencies ) ) { $dependencies[] = $dependency; $this->addedDependencies[] = $dependency; } } // If there are dependencies, put them all together in a string, otherwise return false. return $dependencies !== [] ? implode( '', $dependencies ) : false; } private function getDependencies( array $params ): array { $leafletPath = $GLOBALS['wgScriptPath'] . '/extensions/Maps/resources/lib/leaflet'; return array_merge( [ Html::linkedStyle( "$leafletPath/leaflet.css" ), Html::linkedScript( "$leafletPath/leaflet.js" ), ], $this->getLayerDependencies( $params ) ); } private function getLayerDependencies( array $params ) { global $egMapsLeafletLayerDependencies, $egMapsLeafletAvailableLayers, $egMapsLeafletLayersApiKeys; $layerDependencies = []; foreach ( $params['layers'] as $layerName ) { if ( array_key_exists( $layerName, $egMapsLeafletAvailableLayers ) && $egMapsLeafletAvailableLayers[$layerName] && array_key_exists( $layerName, $egMapsLeafletLayersApiKeys ) && array_key_exists( $layerName, $egMapsLeafletLayerDependencies ) ) { $layerDependencies[] = ''; } } return array_unique( $layerDependencies ); } public function processingResultToMapParams( ProcessingResult $processingResult ): array { $mapParams = $processingResult->getParameterArray(); if ( $mapParams['geojson'] !== '' ) { $fetcher = MapsFactory::newDefault()->newGeoJsonFetcher(); $result = $fetcher->fetch( $mapParams['geojson'] ); $mapParams['geojson'] = $result->getContent(); $mapParams['GeoJsonSource'] = $result->getTitleValue() === null ? null : $result->getTitleValue()->getText(); $mapParams['GeoJsonRevisionId'] = $result->getRevisionId(); } return $mapParams; } }