|
11 | 11 | <!-- DNS prefetch for external resources --> |
12 | 12 | <link rel="dns-prefetch" href="https://www.wikidata.org"> |
13 | 13 | <!-- Load Google Fonts CSS asynchronously to prevent render-blocking --> |
| 14 | + <!-- Modern browsers support onload on link tags, so we only need a minimal polyfill for older browsers --> |
14 | 15 | <link rel="preload" href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'"> |
15 | 16 | <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap"></noscript> |
16 | | - <!-- Polyfill for browsers that don't support onload on link tags --> |
| 17 | + <!-- Minimal polyfill only for browsers that don't support onload on link tags (IE11 and older) --> |
17 | 18 | <script> |
18 | | - /*! loadCSS. [c]2017 Filament Group, Inc. MIT License */ |
19 | | - (function(w){"use strict";if(!w.loadCSS){w.loadCSS=function(){}} |
20 | | - var loadCSS=function(href,before,media){var doc=w.document;var ss=doc.createElement("link");var ref;if(before){ref=before}else{var refs=(doc.body||doc.getElementsByTagName("head")[0]).childNodes;ref=refs[refs.length-1]}var sheets=doc.styleSheets;ss.rel="stylesheet";ss.href=href;ss.media="only x";function ready(cb){if(doc.body){return cb()}setTimeout(function(){ready(cb)})}ready(function(){ref.parentNode.insertBefore(ss,before?ref:ref.nextSibling)});var onloadcssdefined=function(cb){var resolvedHref=ss.href;var i=sheets.length;while(i--){if(sheets[i].href===resolvedHref){return cb()}}setTimeout(function(){onloadcssdefined(cb)})};ss.onloadcssdefined=onloadcssdefined;onloadcssdefined(function(){if(ss.media!=="all"){ss.media=media||"all"}});return ss}; |
21 | | - w.loadCSS=loadCSS})(typeof global!=="undefined"?global:this); |
| 19 | + // Only load polyfill if onload is not supported (modern browsers skip this) |
| 20 | + if (!document.createElement('link').onload) { |
| 21 | + (function(w){var loadCSS=function(href){var doc=w.document,ss=doc.createElement("link"),ref=doc.getElementsByTagName("head")[0].childNodes[ref.length-1];ss.rel="stylesheet";ss.href=href;ss.media="only x";function ready(cb){if(doc.body)return cb();setTimeout(function(){ready(cb)},9)}ready(function(){ref.parentNode.insertBefore(ss,ref.nextSibling)});var onloadcssdefined=function(cb){var resolvedHref=ss.href,i=doc.styleSheets.length;while(i--){if(doc.styleSheets[i].href===resolvedHref)return cb()}setTimeout(function(){onloadcssdefined(cb)},9)};ss.onloadcssdefined=onloadcssdefined;onloadcssdefined(function(){if(ss.media!=="all")ss.media="all"});return ss};w.loadCSS=loadCSS})(window); |
| 22 | + } |
22 | 23 | </script> |
23 | 24 | </head> |
24 | 25 |
|
25 | 26 | <body ${bodyAttrs}> |
26 | 27 | <script> |
27 | | - // dark / light detection that runs before Vue.js load. Borrowed from overreacted.io |
28 | | - (function () { |
29 | | - window.__onThemeChange = function () { }; |
30 | | - function setTheme(newTheme) { |
| 28 | + // Modern theme detection script (ES6+ syntax for modern browsers) |
| 29 | + (() => { |
| 30 | + 'use strict'; |
| 31 | + |
| 32 | + window.__onThemeChange = () => {}; |
| 33 | + |
| 34 | + const setTheme = (newTheme) => { |
31 | 35 | window.__theme = newTheme; |
32 | | - preferredTheme = newTheme; |
33 | 36 | document.body.setAttribute('data-theme', newTheme); |
34 | 37 | window.__onThemeChange(newTheme); |
35 | | - } |
| 38 | + }; |
36 | 39 |
|
37 | | - var preferredTheme; |
| 40 | + let preferredTheme; |
38 | 41 | try { |
39 | 42 | preferredTheme = localStorage.getItem('theme'); |
40 | | - } catch (err) { } |
| 43 | + } catch (err) { |
| 44 | + // localStorage not available |
| 45 | + } |
41 | 46 |
|
42 | | - window.__setPreferredTheme = function (newTheme) { |
| 47 | + window.__setPreferredTheme = (newTheme) => { |
43 | 48 | setTheme(newTheme); |
44 | 49 | try { |
45 | 50 | localStorage.setItem('theme', newTheme); |
46 | | - } catch (err) { } |
47 | | - } |
| 51 | + } catch (err) { |
| 52 | + // localStorage not available |
| 53 | + } |
| 54 | + }; |
48 | 55 |
|
49 | | - var darkQuery = window.matchMedia('(prefers-color-scheme: dark)'); |
50 | | - // Use addEventListener instead of deprecated addListener |
51 | | - if (darkQuery.addEventListener) { |
52 | | - darkQuery.addEventListener('change', function (e) { |
53 | | - window.__setPreferredTheme(e.matches ? 'dark' : 'light') |
54 | | - }); |
55 | | - } else { |
56 | | - // Fallback for older browsers |
57 | | - darkQuery.addListener(function (e) { |
58 | | - window.__setPreferredTheme(e.matches ? 'dark' : 'light') |
59 | | - }); |
60 | | - } |
| 56 | + const darkQuery = window.matchMedia('(prefers-color-scheme: dark)'); |
| 57 | + |
| 58 | + // Modern browsers support addEventListener |
| 59 | + darkQuery.addEventListener('change', (e) => { |
| 60 | + window.__setPreferredTheme(e.matches ? 'dark' : 'light'); |
| 61 | + }); |
61 | 62 |
|
62 | 63 | setTheme(preferredTheme || (darkQuery.matches ? 'dark' : 'light')); |
63 | 64 | })(); |
|
0 commit comments