diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-05-07 18:12:54 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-07 18:12:54 +0200 |
| commit | 7af9ad1465c32eaa6abdd4469161042467ad01ec (patch) | |
| tree | 5c5e941b4baeb06d583c2f7f41b118e2802ad9c4 /src/librustdoc/html/static | |
| parent | cc8d9b692720c7d15445024485c4bbfce35dbce6 (diff) | |
| parent | 926281619479776ab56870424c16a8a968ed637d (diff) | |
| download | rust-7af9ad1465c32eaa6abdd4469161042467ad01ec.tar.gz rust-7af9ad1465c32eaa6abdd4469161042467ad01ec.zip | |
Rollup merge of #124738 - notriddle:notriddle/search-form-js, r=GuillaumeGomez
rustdoc: dedup search form HTML This change constructs the search form HTML using JavaScript, instead of plain HTML. It uses a custom element because - the [parser]'s insert algorithm runs the connected callback synchronously, so we won't get layout jank - it requires very little HTML, so it's a real win in size [parser]: https://html.spec.whatwg.org/multipage/parsing.html#create-an-element-for-the-token This shrinks the standard library by about 60MiB, by my test. There should be no visible changes. Just use less disk space.
Diffstat (limited to 'src/librustdoc/html/static')
| -rw-r--r-- | src/librustdoc/html/static/js/storage.js | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/librustdoc/html/static/js/storage.js b/src/librustdoc/html/static/js/storage.js index 73c543567c0..4a27ca92fff 100644 --- a/src/librustdoc/html/static/js/storage.js +++ b/src/librustdoc/html/static/js/storage.js @@ -239,3 +239,46 @@ window.addEventListener("pageshow", ev => { setTimeout(updateSidebarWidth, 0); } }); + +// Custom elements are used to insert some JS-dependent features into Rustdoc, +// because the [parser] runs the connected callback +// synchronously. It needs to be added synchronously so that nothing below it +// becomes visible until after it's done. Otherwise, you get layout jank. +// +// That's also why this is in storage.js and not main.js. +// +// [parser]: https://html.spec.whatwg.org/multipage/parsing.html +class RustdocSearchElement extends HTMLElement { + constructor() { + super(); + } + connectedCallback() { + const rootPath = getVar("root-path"); + const currentCrate = getVar("current-crate"); + this.innerHTML = `<nav class="sub"> + <form class="search-form"> + <span></span> <!-- This empty span is a hacky fix for Safari - See #93184 --> + <div id="sidebar-button" tabindex="-1"> + <a href="${rootPath}${currentCrate}/all.html" title="show sidebar"></a> + </div> + <input + class="search-input" + name="search" + aria-label="Run search in the documentation" + autocomplete="off" + spellcheck="false" + placeholder="Type ‘S’ or ‘/’ to search, ‘?’ for more options…" + type="search"> + <div id="help-button" tabindex="-1"> + <a href="${rootPath}help.html" title="help">?</a> + </div> + <div id="settings-menu" tabindex="-1"> + <a href="${rootPath}settings.html" title="settings"> + Settings + </a> + </div> + </form> + </nav>`; + } +} +window.customElements.define("rustdoc-search", RustdocSearchElement); |
