*/ class renderer_plugin_linkfavicon extends Doku_Renderer_xhtml { function canRender($format) { return ($format=='xhtml'); } /** * Render an external link * * @param string $url full URL with scheme * @param string|array $name name for the link, array for media file * @param bool $returnonly whether to return html or write to doc attribute * @return void|string writes to doc attribute or returns html depends on $returnonly */ public function externallink($url, $name = null, $returnonly = false) { $result = parent::externallink($url, $name, true); // Presume that the result contains class="urlextern" when it's an external link if (strpos($result, 'urlextern') !== false) { $result = preg_replace('/(]*class="[^"]*)"/', '$1 linkfavicon"', $result, 1); $parsedUrl = parse_url($url); $domain = $parsedUrl['host']; $iconUrl = 'https://www.faviconextractor.com/favicon/' . $domain; // $iconUrl = 'https://www.google.com/s2/favicons?domain=' . $domain . '&sz=16'; // $iconUrl = 'https://icons.duckduckgo.com/ip3/' . $domain . '.ico'; $result = preg_replace('/(]*href="[^"]*")/', '$1 data-linkfavicon="' . $iconUrl . '"', $result, 1); } if ($returnonly) { return $result; } else { $this->doc .= $result; } } }