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