1bea711feSMark Prins<?php 2*a760825cSgithub-actions[bot] 3*a760825cSgithub-actions[bot]use dokuwiki\Extension\SyntaxPlugin; 4*a760825cSgithub-actions[bot] 5bea711feSMark Prins/* 6bea711feSMark Prins * Copyright (c) 2023 Mark C. Prins <mprins@users.sf.net> 7bea711feSMark Prins * 8bea711feSMark Prins * Permission to use, copy, modify, and distribute this software for any 9bea711feSMark Prins * purpose with or without fee is hereby granted, provided that the above 10bea711feSMark Prins * copyright notice and this permission notice appear in all copies. 11bea711feSMark Prins * 12bea711feSMark Prins * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 13bea711feSMark Prins * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 14bea711feSMark Prins * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 15bea711feSMark Prins * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 16bea711feSMark Prins * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 17bea711feSMark Prins * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 18bea711feSMark Prins * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 19bea711feSMark Prins * 20bea711feSMark Prins * @phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps 21bea711feSMark Prins */ 22bea711feSMark Prins/** 23bea711feSMark Prins * adds a WMTS 1.0.0 layer to your map. 24bea711feSMark Prins */ 25*a760825cSgithub-actions[bot]class syntax_plugin_openlayersmap_wmtslayer extends SyntaxPlugin 26bea711feSMark Prins{ 27*a760825cSgithub-actions[bot] private $dflt = ['id' => 'olmap', 'name' => '', 'url' => '', 'opacity' => 0.8, 'attribution' => '', 'visible' => false, 'layer' => '', 'matrixSet' => '', 'transparent' => 'true', 'baselayer' => 'false']; 28bea711feSMark Prins 29bea711feSMark Prins /** 30bea711feSMark Prins * (non-PHPdoc) 31bea711feSMark Prins * 32bea711feSMark Prins * @see DokuWiki_Syntax_Plugin::getPType() 33bea711feSMark Prins */ 34bea711feSMark Prins final public function getPType(): string 35bea711feSMark Prins { 36bea711feSMark Prins return 'block'; 37bea711feSMark Prins } 38bea711feSMark Prins 39bea711feSMark Prins /** 40bea711feSMark Prins * (non-PHPdoc) 41bea711feSMark Prins * 42bea711feSMark Prins * @see DokuWiki_Syntax_Plugin::getType() 43bea711feSMark Prins */ 44bea711feSMark Prins final public function getType(): string 45bea711feSMark Prins { 46bea711feSMark Prins return 'baseonly'; 47bea711feSMark Prins } 48bea711feSMark Prins 49bea711feSMark Prins /** 50bea711feSMark Prins * (non-PHPdoc) 51bea711feSMark Prins * 52bea711feSMark Prins * @see Doku_Parser_Mode::getSort() 53bea711feSMark Prins */ 54bea711feSMark Prins final public function getSort(): int 55bea711feSMark Prins { 56bea711feSMark Prins return 902; 57bea711feSMark Prins } 58bea711feSMark Prins 59bea711feSMark Prins /** 60bea711feSMark Prins * Connect to our special pattern. 61bea711feSMark Prins * 62bea711feSMark Prins * @see Doku_Parser_Mode::connectTo() 63bea711feSMark Prins */ 64bea711feSMark Prins final public function connectTo($mode): void 65bea711feSMark Prins { 66bea711feSMark Prins // look for: <olmap_wmstlayer id="olmap" name="geolandbasemap" url="https://mapsneu.wien.gv.at/basemapneu/1.0.0/WMTSCapabilities.xml" 67bea711feSMark Prins // attribution="basemap.at" visible="true" layer="geolandbasemap" matrixSet=google3857></olmap_wmtslayer> 68bea711feSMark Prins $this->Lexer->addSpecialPattern( 69bea711feSMark Prins '<olmap_wmtslayer ?[^>\n]*>.*?</olmap_wmtslayer>', 70bea711feSMark Prins $mode, 71bea711feSMark Prins 'plugin_openlayersmap_wmtslayer' 72bea711feSMark Prins ); 73bea711feSMark Prins } 74bea711feSMark Prins 75bea711feSMark Prins /** 76bea711feSMark Prins * (non-PHPdoc) 77bea711feSMark Prins * 78bea711feSMark Prins * @see DokuWiki_Syntax_Plugin::handle() 79bea711feSMark Prins */ 80bea711feSMark Prins final public function handle($match, $state, $pos, Doku_Handler $handler): array 81bea711feSMark Prins { 82*a760825cSgithub-actions[bot] $param = []; 83bea711feSMark Prins $data = $this->dflt; 84bea711feSMark Prins 85bea711feSMark Prins preg_match_all('/(\w*)="(.*?)"/us', $match, $param, PREG_SET_ORDER); 86bea711feSMark Prins 87bea711feSMark Prins foreach ($param as $kvpair) { 88*a760825cSgithub-actions[bot] [$matched, $key, $val] = $kvpair; 89bea711feSMark Prins if (isset($data [$key])) { 90bea711feSMark Prins $key = strtolower($key); 91bea711feSMark Prins $data [$key] = $val; 92bea711feSMark Prins } 93bea711feSMark Prins } 94bea711feSMark Prins return $data; 95bea711feSMark Prins } 96bea711feSMark Prins 97bea711feSMark Prins /** 98bea711feSMark Prins * (non-PHPdoc) 99bea711feSMark Prins * 100bea711feSMark Prins * @see DokuWiki_Syntax_Plugin::render() 101bea711feSMark Prins */ 102bea711feSMark Prins final public function render($format, Doku_Renderer $renderer, $data): bool 103bea711feSMark Prins { 104bea711feSMark Prins if ($format !== 'xhtml') { 105bea711feSMark Prins return false; 106bea711feSMark Prins } 107bea711feSMark Prins 108bea711feSMark Prins // incremented for each olmap_wmtslayer tag in the page source 109bea711feSMark Prins static $overlaynumber = 0; 110bea711feSMark Prins 111bea711feSMark Prins $renderer->doc .= DOKU_LF . '<script defer="defer" src="data:text/javascript;base64,'; 112bea711feSMark Prins $str = '{'; 113bea711feSMark Prins foreach ($data as $key => $val) { 114bea711feSMark Prins $str .= "'" . $key . "':'" . $val . "', "; 115bea711feSMark Prins } 116bea711feSMark Prins $str .= "'type':'wmts'}"; 117bea711feSMark Prins $renderer->doc .= base64_encode("olMapOverlays['wmts" . $overlaynumber . "'] = " . $str . ";") 118bea711feSMark Prins . '"></script>'; 119bea711feSMark Prins $overlaynumber++; 120bea711feSMark Prins return true; 121bea711feSMark Prins } 122bea711feSMark Prins} 123