summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Maps/src/Presentation/GeoJsonMapPageUi.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Maps/src/Presentation/GeoJsonMapPageUi.php')
-rw-r--r--www/wiki/extensions/Maps/src/Presentation/GeoJsonMapPageUi.php83
1 files changed, 83 insertions, 0 deletions
diff --git a/www/wiki/extensions/Maps/src/Presentation/GeoJsonMapPageUi.php b/www/wiki/extensions/Maps/src/Presentation/GeoJsonMapPageUi.php
new file mode 100644
index 00000000..89440f1f
--- /dev/null
+++ b/www/wiki/extensions/Maps/src/Presentation/GeoJsonMapPageUi.php
@@ -0,0 +1,83 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace Maps\Presentation;
+
+use Html;
+
+class GeoJsonMapPageUi {
+
+ private $json;
+
+ public static function forExistingPage( string $mapJson ): self {
+ return new self( $mapJson );
+ }
+
+ private function __construct( ?string $json ) {
+ $this->json = $json;
+ }
+
+ public function addToOutput( OutputFacade $output ) {
+ $leafletPath = $GLOBALS['wgScriptPath'] . '/extensions/Maps/resources/lib/leaflet';
+
+ $output->addHeadItem(
+ 'MapsGeoJsonHeadItem',
+ Html::linkedStyle( "$leafletPath/leaflet.css" ) . Html::linkedScript( "$leafletPath/leaflet.js" )
+ );
+
+ $output->addHTML( $this->getJavascript() . $this->getHtml() );
+ $output->addModules( 'ext.maps.geojson.page' );
+ }
+
+ private function getJavascript(): string {
+ return Html::element(
+ 'script',
+ [],
+ $this->getJsonJs()
+ );
+ }
+
+ private function getJsonJs(): string {
+ return 'var GeoJson ='
+ . $this->json
+ . ';';
+ }
+
+ private function getHtml(): string {
+ return $this->wrapHtmlInThumbDivs(
+ Html::rawElement(
+ 'div',
+ [
+ 'id' => 'GeoJsonMap',
+ 'style' => 'width: 100%; height: 600px; background-color: #eeeeee; overflow: hidden;',
+ 'class' => 'maps-map maps-leaflet maps-geojson-editor'
+ ],
+ Html::element(
+ 'div',
+ [
+ 'class' => 'maps-loading-message'
+ ],
+ wfMessage( 'maps-loading-map' )->inContentLanguage()->text()
+ )
+ )
+ );
+ }
+
+ private function wrapHtmlInThumbDivs( string $html ): string {
+ return Html::rawElement(
+ 'div',
+ [
+ 'class' => 'thumb'
+ ],
+ Html::rawElement(
+ 'div',
+ [
+ 'class' => 'thumbinner'
+ ],
+ $html
+ )
+ );
+ }
+
+}