Skip to content

Commit c7bae84

Browse files
Page load improvements (#2007)
1 parent d9eaba3 commit c7bae84

28 files changed

+458
-733
lines changed

assets/build/build.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,22 @@ Promise.all(formatters.map(async ({formatter, ...options}) => {
7171
}
7272
})
7373

74+
// Load html templates.
75+
build.onLoad({
76+
filter: /\.html$/
77+
}, async ({ path: filename }) => {
78+
try {
79+
const source = await fs.readFile(filename, 'utf-8')
80+
// Remove newlines and leading whitespace.
81+
// Shouldn't have any effect on content.
82+
const compressed = source.replace(/\n\s*/g, '')
83+
const contents = `export default ${JSON.stringify(compressed)}`
84+
return { contents }
85+
} catch (error) {
86+
return { errors: [{ text: error.message }] }
87+
}
88+
})
89+
7490
// Generate docs with new assets (watch mode only).
7591
if (watchMode) {
7692
build.onEnd(async result => {

assets/css/sidebar.css

Lines changed: 82 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@
127127
padding: 0;
128128
}
129129

130-
.sidebar .sidebar-list-nav li button {
130+
.sidebar .sidebar-list-nav button {
131131
background: none;
132132
border: 0;
133133
border-radius: 0;
@@ -142,29 +142,30 @@
142142
transition: all 150ms;
143143
}
144144

145-
.sidebar .sidebar-list-nav li:is(.selected) button {
146-
background-color: var(--sidebarBackground);
147-
border-top: var(--navTabBorderWidth) solid var(--sidebarLanguageAccentBar);
148-
}
149-
150-
.sidebar .sidebar-list-nav li:not(.selected) button {
145+
.sidebar .sidebar-list-nav button {
151146
border-top: var(--navTabBorderWidth) solid var(--sidebarHeader);
152147
}
153148

154-
.sidebar .sidebar-list-nav li:is(:hover):not(.selected) button {
149+
.sidebar .sidebar-list-nav button:not([aria-selected]):hover {
155150
background-color: var(--sidebarInactiveItemMarker);
156151
border-top: var(--navTabBorderWidth) solid var(--sidebarInactiveItemBorder);
157152
color: var(--sidebarAccentMain);
158153
transition: all 150ms;
159154
}
160155

156+
.sidebar .sidebar-list-nav button[aria-selected] {
157+
background-color: var(--sidebarBackground);
158+
border-top: var(--navTabBorderWidth) solid var(--sidebarLanguageAccentBar);
159+
}
160+
161161
.sidebar .sidebar-tabpanel {
162162
flex: 1 1 0.01%;
163163
overflow-y: auto;
164164
overscroll-behavior: contain;
165165
position: relative;
166166
-webkit-overflow-scrolling: touch;
167-
margin-top: 12px;
167+
padding-top: 12px;
168+
scroll-padding-top: 40px;
168169
}
169170

170171
.sidebar .full-list {
@@ -174,127 +175,106 @@
174175
}
175176

176177
.sidebar .full-list :is(li, a) {
178+
display: block;
177179
overflow: hidden;
180+
white-space: nowrap;
178181
text-overflow: ellipsis;
179182
}
180183

181184
.sidebar .full-list li {
182185
padding: 0;
183-
margin-right: 30px;
184186
line-height: 27px;
185-
white-space: nowrap;
186187
}
187188

188-
.sidebar .full-list li.docs {
189-
margin-right: 0;
189+
.sidebar .full-list li.group {
190+
text-transform: uppercase;
191+
font-weight: bold;
192+
font-size: 0.8em;
193+
margin: 1.5em 0 0;
194+
line-height: 1.8em;
195+
color: var(--sidebarSubheadings);
196+
padding-left: 15px;
190197
}
191198

192-
.sidebar .full-list li.open > ul {
193-
display: block;
194-
margin-left: 10px;
199+
.sidebar .full-list li.nesting-context {
200+
font-weight: bold;
201+
font-size: 0.9em;
202+
line-height: 1.8em;
203+
color: var(--sidebarSubheadings);
204+
margin-top: 10px;
205+
padding-left: 15px;
206+
}
207+
208+
.sidebar .full-list a {
209+
margin-right: 30px;
210+
padding: 3px 0 3px 15px;
211+
color: var(--sidebarItem);
212+
}
213+
214+
.sidebar .full-list a[aria-selected] {
215+
color: var(--sidebarActiveItem);
195216
}
196217

197-
.sidebar .full-list li a.expand + button.icon-expand {
218+
.sidebar .full-list button {
198219
appearance: none;
199220
background-color: transparent;
200221
border: 0;
201222
padding: 0;
202223
cursor: pointer;
203224
color: inherit;
204-
margin-right: 10px;
225+
width: 20px;
226+
text-align: center;
205227
font-size: calc(1.2 * var(--sidebarFontSize));
206228
line-height: var(--sidebarLineHeight);
207229
position: absolute;
208-
display: flex;
209-
right: 0;
210-
transform: translateY(calc(-100% - 4px));
230+
display: block;
231+
right: 10px;
232+
transform: translateY(-100%);
233+
}
234+
235+
.sidebar .full-list a[aria-selected] + button {
236+
color: var(--sidebarActiveItem);
211237
}
212238

213-
.sidebar .full-list li a + button.icon-expand:after {
239+
.sidebar .full-list button:after {
214240
font-family: remixicon;
215241
font-style: normal;
216242
-webkit-font-smoothing: antialiased;
217243
-moz-osx-font-smoothing: grayscale;
218-
}
219-
220-
.sidebar .full-list li a.expand + button.icon-expand:after {
221244
content: var(--icon-arrow-down-s);
222245
}
223246

224-
.sidebar .full-list li.open > a.expand + button.icon-expand:after {
247+
.sidebar .full-list button[aria-expanded=true]:after {
225248
content: var(--icon-arrow-up-s);
226249
}
227250

228-
.sidebar .full-list li.docs > a + button.icon-expand {
229-
margin-right: 12px;
230-
font-size: var(--sidebarFontSize);
231-
line-height: var(--sidebarFontSize);
232-
transform: translateY(calc(-100% - 5px));
233-
}
234-
235-
.sidebar .full-list li.docs > a + button.icon-expand:after {
236-
content: var(--icon-add);
237-
}
238-
239-
.sidebar .full-list li.docs.open > a + button.icon-expand:after {
240-
content: var(--icon-subtract);
241-
}
242-
243-
.sidebar .full-list li.nesting-context {
244-
font-weight: bold;
245-
font-size: 0.9em;
246-
line-height: 1.8em;
247-
color: var(--sidebarSubheadings);
248-
margin-top: 10px;
249-
padding-left: 15px;
251+
.sidebar .full-list ul {
252+
display: none;
253+
margin: 10px 0 10px 10px;
254+
padding: 0;
250255
}
251256

252-
.sidebar .full-list li.group {
253-
text-transform: uppercase;
254-
font-weight: bold;
255-
font-size: 0.8em;
256-
margin: 1.5em 0 0;
257-
line-height: 1.8em;
258-
color: var(--sidebarSubheadings);
259-
padding-left: 15px;
257+
.sidebar .full-list button[aria-expanded=true] + ul {
258+
display: block;
260259
}
261260

262-
.sidebar .full-list li a {
263-
padding: 3px 0 3px 15px;
264-
color: var(--sidebarItem);
265-
}
261+
/* Level 1 */
266262

267263
.sidebar .full-list > li > a {
268-
display: block;
269-
width: 100%;
270264
height: 27px;
271265
line-height: var(--sidebarLineHeight);
272266
}
273267

274-
.sidebar .full-list li .current-section > a {
275-
color: var(--sidebarActiveItem);
276-
}
277-
278-
.sidebar .full-list li .current-section > a + button.icon-expand {
279-
color: var(--sidebarActiveItem);
280-
}
281-
282268
.sidebar .full-list > li > a:hover {
283269
border-left: 3px solid var(--sidebarLanguageAccentBar);
284270
padding-left: 12px;
285271
}
286272

287-
.sidebar .full-list > li.current-page > a {
288-
color: var(--sidebarActiveItem);
273+
.sidebar .full-list > li > a[aria-selected] {
289274
border-left: 3px solid var(--sidebarLanguageAccentBar);
290275
padding-left: 12px;
291276
}
292277

293-
.sidebar .full-list > li.current-page > a:after,
294-
.sidebar .full-list > li.current-page {
295-
color: var(--sidebarActiveItem);
296-
}
297-
298278
.sidebar .full-list > li:last-child {
299279
margin-bottom: 30px;
300280
}
@@ -303,84 +283,65 @@
303283
margin-top: 0;
304284
}
305285

306-
.sidebar .full-list ul {
307-
display: none;
308-
margin: 10px 15px;
309-
margin-right: 0;
310-
padding: 0;
286+
/* Level 2 */
287+
288+
.sidebar .full-list > li > ul > li > a:hover:before {
289+
content: "\2022";
290+
position: absolute;
291+
margin-left: -15px;
292+
color: var(--sidebarActiveItem);
311293
}
312294

295+
/* Level 2+ */
296+
313297
.sidebar .full-list ul li {
314-
font-weight: 300;
315298
line-height: var(--sidebarFontSize);
316299
padding: 0 8px;
317-
margin-right: 0;
318-
color: var(--sidebarAccentMain);
319300
}
320301

321-
:root:not(.apple-os) .sidebar .full-list ul li {
322-
font-weight: 400; /* Non-Apple OSes render small light type too thinly */
302+
.sidebar .full-list ul a {
303+
padding-left: 15px;
304+
height: 24px;
323305
}
324306

325-
.sidebar .full-list ul li.current-hash {
326-
color: var(--sidebarActiveItem);
307+
.sidebar .full-list ul button {
308+
font-size: var(--sidebarFontSize);
327309
}
328310

329-
.sidebar .full-list ul li.current-hash > a {
330-
color: var(--sidebarActiveItem);
311+
.sidebar .full-list ul button:after {
312+
content: var(--icon-add);
331313
}
332314

333-
.sidebar .full-list ul li.current-hash > a:before,
334-
.sidebar .full-list > li > ul > li > a:hover:before {
335-
content: "\2022";
336-
position: absolute;
337-
margin-left: -15px;
338-
color: var(--sidebarActiveItem);
315+
.sidebar .full-list ul button[aria-expanded=true]:after {
316+
content: var(--icon-subtract);
339317
}
340318

341-
.sidebar .full-list ul li a {
342-
padding-left: 15px;
343-
display: block;
344-
width: 100%;
345-
height: 24px;
346-
}
319+
/* Level 3+ */
347320

348-
.sidebar .full-list ul li ul {
349-
display: none;
350-
margin: 9px 20px;
351-
margin-right: 0;
321+
.sidebar .full-list ul ul {
322+
margin: 9px 0 9px 10px;
352323
}
353324

354-
.sidebar .full-list ul li ul li {
355-
margin-right: 0;
325+
.sidebar .full-list ul ul li {
356326
height: 20px;
357327
color: var(--sidebarAccentMain);
358328
}
359329

360-
.sidebar .full-list ul li ul li a {
330+
.sidebar .full-list ul ul a {
361331
border-left: 1px solid var(--sidebarInactiveItemMarker);
362332
padding: 0 10px;
363333
height: 20px;
364334
}
365335

366-
.sidebar .full-list ul li ul li.current-hash > a:before {
367-
content: none;
368-
}
369-
370-
.sidebar .full-list ul li ul li > a:hover {
336+
.sidebar .full-list ul ul a:hover {
371337
border-color: var(--sidebarLanguageAccentBar);
372338
}
373339

374-
.sidebar .full-list ul li ul li.current-hash > a {
340+
.sidebar .full-list ul ul a[aria-selected] {
375341
color: var(--sidebarActiveItem);
376342
border-color: var(--sidebarLanguageAccentBar);
377343
}
378344

379-
.sidebar .full-list ul li ul li.current-hash > a {
380-
color: var(--sidebarActiveItem);
381-
margin-left: 0;
382-
}
383-
384345
.sidebar ::-webkit-scrollbar {
385346
width: 14px;
386347
}

assets/js/copy-button.js

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
import { qsAll } from './helpers'
2+
import buttonHtml from './handlebars/templates/copy-button.html'
23

3-
const template = document.createElement('div')
4-
template.innerHTML = '<button class="copy-button"><svg role="img" aria-label="copy" viewBox="0 0 24 24" fill="currentColor"><path d="M0 0h24v24H0z" fill="none"/><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg><span aria-live="polite"></span></button>'
5-
const buttonTemplate = template.firstChild
4+
/** @type {HTMLButtonElement} */
5+
let buttonTemplate
66

77
/**
88
* Initializes copy buttons.
99
*/
1010
export function initialize () {
11-
if ('clipboard' in navigator) {
12-
addCopyButtons()
13-
}
14-
}
11+
if (!('clipboard' in navigator)) return
1512

16-
/**
17-
* Find pre tags, add copy buttons, copy <code> content on click.
18-
*/
19-
function addCopyButtons () {
2013
qsAll('pre:has(> code:first-child):not(:has(.copy-button))').forEach(pre => {
14+
if (!buttonTemplate) {
15+
const div = document.createElement('div')
16+
div.innerHTML = buttonHtml
17+
buttonTemplate = div.firstChild
18+
}
19+
2120
const button = buttonTemplate.cloneNode(true)
2221
pre.appendChild(button)
2322

0 commit comments

Comments
 (0)