1007225e5Sgerardnico<?php 2007225e5Sgerardnico 3*4cadd4f8SNickeauuse ComboStrap\ColorRgb; 4*4cadd4f8SNickeauuse ComboStrap\Mime; 5*4cadd4f8SNickeauuse ComboStrap\Site; 6*4cadd4f8SNickeau 7007225e5Sgerardnicoif (!defined('DOKU_INC')) die(); 8007225e5Sgerardnico 9007225e5Sgerardnico 10007225e5Sgerardnico/** 11007225e5Sgerardnico * 12007225e5Sgerardnico * To add the manifest image 13007225e5Sgerardnico * 14007225e5Sgerardnico * https://www.dokuwiki.org/devel:manifest 15007225e5Sgerardnico * 16007225e5Sgerardnico * @see <a href="https://combostrap.com/manifest">manifest</a> 17007225e5Sgerardnico * 18c3437056SNickeau * [[doku>devel:manifest|webmanifest]] 19c3437056SNickeau * https://developer.mozilla.org/en-US/docs/Web/Manifest 20007225e5Sgerardnico */ 21007225e5Sgerardnicoclass action_plugin_combo_manifest extends DokuWiki_Action_Plugin 22007225e5Sgerardnico{ 23007225e5Sgerardnico 24007225e5Sgerardnico 25007225e5Sgerardnico function register(Doku_Event_Handler $controller) 26007225e5Sgerardnico { 27007225e5Sgerardnico 28007225e5Sgerardnico /* This will call the function _manifest */ 29007225e5Sgerardnico $controller->register_hook( 30007225e5Sgerardnico 'MANIFEST_SEND', 31*4cadd4f8SNickeau 'AFTER', 32007225e5Sgerardnico $this, 33007225e5Sgerardnico '_manifest', 34007225e5Sgerardnico array() 35007225e5Sgerardnico ); 36007225e5Sgerardnico 37007225e5Sgerardnico 38007225e5Sgerardnico } 39007225e5Sgerardnico 40007225e5Sgerardnico 41007225e5Sgerardnico /** 42007225e5Sgerardnico * Main function; dispatches the visual comment actions 43007225e5Sgerardnico * @param $event Doku_Event 44007225e5Sgerardnico * 45007225e5Sgerardnico * We take into account the file generated by https://realfavicongenerator.net/ 46007225e5Sgerardnico * 47007225e5Sgerardnico * 48007225e5Sgerardnico * 49007225e5Sgerardnico */ 50007225e5Sgerardnico function _manifest(&$event, $param) 51007225e5Sgerardnico { 52007225e5Sgerardnico 53007225e5Sgerardnico $mediaId = ":android-chrome-192x192.png"; 54007225e5Sgerardnico $mediaFile = mediaFN($mediaId); 55007225e5Sgerardnico if (file_exists($mediaFile)) { 56007225e5Sgerardnico $url = ml($mediaId, '', true, '', true); 57007225e5Sgerardnico $event->data['icons'][] = 58007225e5Sgerardnico array( 59007225e5Sgerardnico "src" => $url, 60007225e5Sgerardnico "sizes" => "192x192", 61007225e5Sgerardnico "type" => "image/png" 62007225e5Sgerardnico ); 63007225e5Sgerardnico } 64007225e5Sgerardnico 65*4cadd4f8SNickeau $primaryColor = Site::getPrimaryColor(); 66*4cadd4f8SNickeau if ($primaryColor !== null) { 67*4cadd4f8SNickeau $event->data["theme_color"] = $primaryColor->toRgbHex(); 68*4cadd4f8SNickeau } 69*4cadd4f8SNickeau 70*4cadd4f8SNickeau /** 71*4cadd4f8SNickeau * Id setting 72*4cadd4f8SNickeau * https://developer.chrome.com/blog/pwa-manifest-id/ 73*4cadd4f8SNickeau * It seems that this is a unique id domain based 74*4cadd4f8SNickeau * We set then the start_url (ie another pwa may be living on another path) 75*4cadd4f8SNickeau */ 76*4cadd4f8SNickeau $event->data["id"] = $event->data["start_url"]; 77*4cadd4f8SNickeau 78*4cadd4f8SNickeau 79*4cadd4f8SNickeau /** 80*4cadd4f8SNickeau * Svg must be size any for svg 81*4cadd4f8SNickeau * https://html.spec.whatwg.org/multipage/semantics.html#attr-link-sizes 82*4cadd4f8SNickeau * otherwise we get this kind of error in devtool. 83*4cadd4f8SNickeau * `` 84*4cadd4f8SNickeau * Actual Size (150x150)px of Icon .... svg does not match the specified size (17x17, 512x512) 85*4cadd4f8SNickeau * `` 86*4cadd4f8SNickeau * Note: 87*4cadd4f8SNickeau * * 150x150 is not the true size 88*4cadd4f8SNickeau * * (17x17, 512x512) is set by dokuwiki 89*4cadd4f8SNickeau */ 90*4cadd4f8SNickeau foreach ($event->data['icons'] as &$iconArray) { 91*4cadd4f8SNickeau if ($iconArray["type"] === Mime::SVG) { 92*4cadd4f8SNickeau $iconArray["sizes"] = "any"; 93*4cadd4f8SNickeau } 94007225e5Sgerardnico } 95007225e5Sgerardnico 96007225e5Sgerardnico 97*4cadd4f8SNickeau } 98007225e5Sgerardnico 99007225e5Sgerardnico 100007225e5Sgerardnico} 101