17390889dSMark Prins<?php 2*a760825cSgithub-actions[bot] 3*a760825cSgithub-actions[bot]use dokuwiki\Extension\SyntaxPlugin; 4*a760825cSgithub-actions[bot] 57390889dSMark Prins/* 67390889dSMark Prins * Copyright (c) 2012-2020 Mark C. Prins <mprins@users.sf.net> 77390889dSMark Prins * 87390889dSMark Prins * Permission to use, copy, modify, and distribute this software for any 97390889dSMark Prins * purpose with or without fee is hereby granted, provided that the above 107390889dSMark Prins * copyright notice and this permission notice appear in all copies. 117390889dSMark Prins * 127390889dSMark Prins * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 137390889dSMark Prins * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 147390889dSMark Prins * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 157390889dSMark Prins * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 167390889dSMark Prins * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 177390889dSMark Prins * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 187390889dSMark Prins * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 197390889dSMark Prins * 207390889dSMark Prins * @phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps 217390889dSMark Prins */ 227390889dSMark Prins/** 237390889dSMark Prins * Add OSM style layer to your map. 247390889dSMark Prins */ 25*a760825cSgithub-actions[bot]class syntax_plugin_openlayersmap_osmlayer extends SyntaxPlugin 267390889dSMark Prins{ 27*a760825cSgithub-actions[bot] private $dflt = ['id' => 'olmap', 'name' => '', 'url' => '', 'opacity' => 0.8, 'attribution' => '', 'visible' => false, 'cors' => null, 'baselayer' => 'false']; 287390889dSMark Prins 297390889dSMark Prins /** 307390889dSMark Prins * (non-PHPdoc) 317390889dSMark Prins * 327390889dSMark Prins * @see DokuWiki_Syntax_Plugin::getPType() 337390889dSMark Prins */ 347390889dSMark Prins public function getPType(): string 357390889dSMark Prins { 367390889dSMark Prins return 'block'; 377390889dSMark Prins } 387390889dSMark Prins 397390889dSMark Prins /** 407390889dSMark Prins * (non-PHPdoc) 417390889dSMark Prins * 427390889dSMark Prins * @see DokuWiki_Syntax_Plugin::getType() 437390889dSMark Prins */ 447390889dSMark Prins public function getType(): string 457390889dSMark Prins { 467390889dSMark Prins // return 'FIXME: container|baseonly|formatting|substition|protected|disabled|paragraphs'; 477390889dSMark Prins return 'baseonly'; 487390889dSMark Prins } 497390889dSMark Prins 507390889dSMark Prins /** 517390889dSMark Prins * (non-PHPdoc) 527390889dSMark Prins * 537390889dSMark Prins * @see Doku_Parser_Mode::getSort() 547390889dSMark Prins */ 557390889dSMark Prins public function getSort(): int 567390889dSMark Prins { 577390889dSMark Prins return 902; 587390889dSMark Prins } 597390889dSMark Prins 607390889dSMark Prins /** 617390889dSMark Prins * Connect to our special pattern. 627390889dSMark Prins * 637390889dSMark Prins * @see Doku_Parser_Mode::connectTo() 647390889dSMark Prins */ 657390889dSMark Prins public function connectTo($mode): void 667390889dSMark Prins { 677390889dSMark Prins // look for: <olmap_osmlayer id="olmap" name="sport" url="http://tiles.openseamap.org/sport/${z}/${x}/${y}.png" 687390889dSMark Prins // visible="false" opacity=0.6 attribution="Some attribution"></olmap_osmlayer> 697390889dSMark Prins $this->Lexer->addSpecialPattern( 707390889dSMark Prins '<olmap_osmlayer ?[^>\n]*>.*?</olmap_osmlayer>', 717390889dSMark Prins $mode, 727390889dSMark Prins 'plugin_openlayersmap_osmlayer' 737390889dSMark Prins ); 747390889dSMark Prins } 757390889dSMark Prins 767390889dSMark Prins /** 777390889dSMark Prins * (non-PHPdoc) 787390889dSMark Prins * 797390889dSMark Prins * @see DokuWiki_Syntax_Plugin::handle() 807390889dSMark Prins */ 817390889dSMark Prins public function handle($match, $state, $pos, Doku_Handler $handler): array 827390889dSMark Prins { 83*a760825cSgithub-actions[bot] $param = []; 847390889dSMark Prins $data = $this->dflt; 857390889dSMark Prins 867390889dSMark Prins preg_match_all('/(\w*)="(.*?)"/us', $match, $param, PREG_SET_ORDER); 877390889dSMark Prins 887390889dSMark Prins foreach ($param as $kvpair) { 89*a760825cSgithub-actions[bot] [$matched, $key, $val] = $kvpair; 907390889dSMark Prins if (isset($data [$key])) { 917390889dSMark Prins $key = strtolower($key); 927390889dSMark Prins $data [$key] = $val; 937390889dSMark Prins } 947390889dSMark Prins } 957390889dSMark Prins // dbglog($data,'syntax_plugin_overlayer::handle: parsed data is:'); 967390889dSMark Prins return $data; 977390889dSMark Prins } 987390889dSMark Prins 997390889dSMark Prins /** 1007390889dSMark Prins * (non-PHPdoc) 1017390889dSMark Prins * 1027390889dSMark Prins * @see DokuWiki_Syntax_Plugin::render() 1037390889dSMark Prins */ 1047390889dSMark Prins public function render($format, Doku_Renderer $renderer, $data): bool 1057390889dSMark Prins { 1067390889dSMark Prins if ($format !== 'xhtml') { 1077390889dSMark Prins return false; 1087390889dSMark Prins } 1097390889dSMark Prins 1107390889dSMark Prins // incremented for each olmap_osmlayer tag in the page source 1117390889dSMark Prins static $overlaynumber = 0; 1127390889dSMark Prins 1137390889dSMark Prins $renderer->doc .= DOKU_LF . '<script defer="defer" src="data:text/javascript;base64,'; 1147390889dSMark Prins $str = '{'; 1157390889dSMark Prins foreach ($data as $key => $val) { 1167390889dSMark Prins $str .= "'" . $key . "' : '" . $val . "',"; 1177390889dSMark Prins } 1187390889dSMark Prins $str .= '"type":"osm"}'; 1197390889dSMark Prins $renderer->doc .= base64_encode("olMapOverlays['osm" . $overlaynumber . "'] = " . $str . ";") 1207390889dSMark Prins . '"></script>'; 1217390889dSMark Prins $overlaynumber++; 1227390889dSMark Prins return true; 1237390889dSMark Prins } 1247390889dSMark Prins} 125