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;
}
}