]>
Commit | Line | Data |
---|---|---|
8f9d1d4d | 1 | <!DOCTYPE html> |
f2a92ac6 | 2 | <html lang="{{ config.lang }}" class="no-js" id="site_top"> |
8f9d1d4d DC |
3 | <head> |
4 | <meta charset="UTF-8"> | |
5 | <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
6 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
7 | {% if NOINDEX %} | |
8 | <meta name="robots" content="noindex"> | |
9 | {% endif %} | |
10 | {% if title %} | |
11 | {% set page_title = title %} | |
12 | {% else %} | |
13 | {% set page_title = site[hook].title %} | |
14 | {% endif %} | |
15 | ||
16 | {% set page_title = site.shared.title_format | replace("PAGE_TITLE", page_title) %} | |
17 | {% set cover_image = ["https://", site.hostname, "/icon-512.png" ] | join %} | |
18 | {% set cover_image_alt = site.shared.eslint_logo_alt %} | |
19 | {% set page_desc = site.shared.description %} | |
20 | {% set relative_page_url = page.url | url | prettyURL %} | |
21 | {% set page_url = ["https://", site.hostname, relative_page_url ] | join %} | |
22 | ||
23 | <!-- SEO --> | |
24 | <title>{{ page_title }}</title> | |
25 | <meta name="description" content="{{ page_desc }}"> | |
26 | <link rel="canonical" href="{{ page_url }}"> | |
f2a92ac6 | 27 | |
8f9d1d4d DC |
28 | <!-- https://github.com/eslint/eslint/issues/15844 --> |
29 | <base href="{{ relative_page_url }}"> | |
30 | ||
31 | <!-- favicon --> | |
32 | <link rel="icon" href="/favicon.ico" sizes="any"><!-- 32×32 --> | |
33 | <link rel="icon" href="/icon.svg" type="image/svg+xml"> | |
34 | <link rel="apple-touch-icon" href="/apple-touch-icon.png"><!-- 180×180 --> | |
35 | <link rel="manifest" href="/manifest.webmanifest"> | |
36 | ||
37 | <!-- social sharing previews. Make sure every page template has title, desc, and cover url --> | |
38 | <!-- Open graph --> | |
39 | <meta property="og:title" content="{{ page_title }}"> | |
40 | <meta property="og:description" content="{{ page_desc }}"> | |
41 | <meta property="og:image" content="{{ cover_image }}" /> | |
42 | <meta property="og:image:alt" content="{{ cover_image_alt }}"> | |
43 | <meta property="og:locale" content="{{ site.locale | replace("-", "_" ) }}"> | |
44 | <meta property="og:type" content="website"> | |
45 | <meta property="og:url" content="{{ page_url }}"> | |
46 | <!-- Twitter --> | |
47 | <meta name="twitter:title" content="{{ page_title }}"> | |
48 | <meta name="twitter:card" content="summary_large_image"> | |
49 | <meta name="twitter:site" content="@geteslint"> | |
50 | <meta name="twitter:description" content="{{ page_desc }}"> | |
51 | <meta name="twitter:image" content="{{ cover_image }}"> | |
52 | <meta name="twitter:creator" content="@geteslint"> | |
53 | ||
54 | ||
55 | <script type="module"> | |
56 | // This is a capable browser, let's improve the UI further! | |
57 | document.documentElement.classList.add("enhanced"); | |
58 | document.documentElement.classList.remove('no-js'); | |
59 | </script> | |
60 | ||
61 | <link rel="preload" href="{{ '/assets/fonts/SpaceGrotesk-Medium-subset.woff2' | url }}" as="font" type="font/woff2" crossorigin> | |
62 | <link rel="preload" href="{{ '/assets/fonts/Inter-Regular-subset.woff2' | url }}" as="font" type="font/woff2" crossorigin> | |
63 | <link rel="preload" href="{{ '/assets/fonts/SpaceMono-Regular-subset.woff2' | url }}" as="font" type="font/woff2" crossorigin> | |
64 | <link rel="preload" href="{{ '/assets/fonts/Consolas.woff' | url }}" as="font" type="font/woff" crossorigin> | |
65 | <link rel="preconnect" href="https://www.googletagmanager.com/"> | |
66 | ||
67 | <script> | |
68 | (function () { | |
69 | var theme = window.localStorage.getItem("theme"); | |
70 | if (theme) document.documentElement.setAttribute('data-theme', theme) | |
71 | else if (window.matchMedia('(prefers-color-scheme: dark)').matches) | |
72 | document.documentElement.setAttribute('data-theme', 'dark'); | |
73 | else document.documentElement.setAttribute('data-theme', 'light'); | |
74 | })(); | |
75 | </script> | |
76 | ||
77 | ||
78 | <style> | |
8f9d1d4d DC |
79 | /* Overrides for funky punctuators */ |
80 | @font-face { | |
81 | font-family: "Mono Punctuators"; | |
82 | src: url("{{ '/assets/fonts/Consolas.woff' | url }}") format("woff"); | |
83 | font-weight: 400; | |
84 | unicode-range: U+40, U+7B, U+7D, U+28, U+29; | |
85 | font-display: swap; | |
86 | } | |
f2a92ac6 | 87 | |
8f9d1d4d DC |
88 | /* Space Grotesk for headings */ |
89 | @font-face { | |
90 | font-family: "Space Grotesk"; | |
f2a92ac6 DC |
91 | src: |
92 | url("{{ '/assets/fonts/SpaceGrotesk-Medium-subset.woff2' | url }}") format("woff2"), | |
93 | url("{{ '/assets/fonts/SpaceGrotesk-Medium-subset.zopfli.woff' | url }}") format("woff"); | |
8f9d1d4d DC |
94 | font-weight: 500; |
95 | font-display: swap; | |
96 | } | |
97 | ||
98 | /* Inter for body text */ | |
99 | ||
100 | @font-face { | |
f2a92ac6 DC |
101 | font-family: Inter; |
102 | src: | |
103 | url("{{ '/assets/fonts/Inter-Regular-subset.woff2' | url }}") format("woff2"), | |
104 | url("{{ '/assets/fonts/Inter-Regular-subset.zopfli.woff' | url }}") format("woff"); | |
8f9d1d4d DC |
105 | font-weight: 400; |
106 | font-display: swap; | |
107 | } | |
108 | ||
109 | /* Space Mono for code snippets */ | |
110 | ||
111 | @font-face { | |
112 | font-family: "Space Mono"; | |
f2a92ac6 DC |
113 | src: |
114 | url("{{ '/assets/fonts/SpaceMono-Regular-subset.woff2' | url }}") format("woff2"), | |
115 | url("{{ '/assets/fonts/SpaceMono-Regular-subset.zopfli.woff' | url }}") format("woff"); | |
8f9d1d4d DC |
116 | font-weight: 400; |
117 | font-display: swap; | |
118 | } | |
f2a92ac6 DC |
119 | |
120 | /* Country Flags for Windows */ | |
121 | @font-face { | |
122 | font-family: "Twemoji Country Flags"; | |
123 | unicode-range: U+1F1E6-1F1FF, U+1F3F4, U+E0062-E0063, U+E0065, U+E0067, U+E006C, U+E006E, U+E0073-E0074, U+E0077, U+E007F; | |
124 | src: url("https://cdn.jsdelivr.net/npm/country-flag-emoji-polyfill@0.1/dist/TwemojiCountryFlags.woff2") format("woff2"); | |
125 | } | |
8f9d1d4d DC |
126 | </style> |
127 | <script> | |
128 | if ("fonts" in document) { | |
129 | var InterSemiBold = new FontFace("Inter", "url({{ '/assets/fonts/Inter-SemiBold-subset.woff2' | url }}) format('woff2'), url({{ '/assets/fonts/Inter-SemiBold-subset.zopfli.woff' | url }}) format('woff')", { | |
130 | weight: "500", | |
131 | style: "normal" | |
132 | }); | |
133 | ||
134 | Promise.all([InterSemiBold.load()]).then(function(fonts) { | |
135 | fonts.forEach(function(font) { | |
136 | document.fonts.add(font); | |
137 | }); | |
138 | }); | |
139 | } | |
140 | </script> | |
141 | <script src="{{ '/assets/js/themes.js' | url }}"></script> | |
142 | <script type="module" src="{{ '/assets/js/search.js' | url }}"></script> | |
143 | <link rel="stylesheet" type="text/css" href="{{ '/assets/css/styles.css' | url }}"> | |
144 | <link rel="stylesheet" href="{{ '/assets/css/print.css' | url }}" media="print"> | |
145 | <script src="https://unpkg.com/anchor-js@4.3.1/anchor.min.js"></script> | |
146 | </head> | |
147 | ||
f2a92ac6 | 148 | <body class="{{ hook }}"> |
8f9d1d4d DC |
149 | <a href="#main" class="c-btn c-btn--primary" id="skip-link">Skip to main content</a> |
150 | ||
151 | {{ content | safe }} | |
152 | ||
153 | <script src="{{ '/assets/js/css-vars-ponyfill@2.js' | url }}"></script> | |
154 | <script src="{{ '/assets/js/focus-visible.js' | url }}"></script> | |
155 | <script src="{{ '/assets/js/main.js' | url }}"></script> | |
156 | <script src="{{ '/assets/js/tabs.js' | url }}"></script> | |
f2a92ac6 | 157 | <script src="{{ '/assets/js/scroll-up-btn.js' | url }}"></script> |
8f9d1d4d DC |
158 | {% include 'partials/analytics.html' %} |
159 | ||
160 | {%- if hook == "component-library" -%} | |
161 | <script src="{{ '/assets/js/components-index.js' | url }}"></script> | |
162 | {%- endif -%} | |
163 | ||
164 | ||
165 | </body> | |
166 | ||
167 | </html> |