|
1 | 1 | // Local js definitions:
|
2 |
| -/* global addClass, getSettingValue, hasClass, searchState */ |
| 2 | +/* global addClass, getSettingValue, hasClass, searchState, updateLocalStorage */ |
3 | 3 | /* global onEach, onEachLazy, removeClass, getVar */
|
4 | 4 |
|
5 | 5 | "use strict";
|
@@ -1230,6 +1230,71 @@ href="https://doc.rust-lang.org/${channel}/rustdoc/how-to-read-rustdoc.html\
|
1230 | 1230 | searchState.setup();
|
1231 | 1231 | }());
|
1232 | 1232 |
|
| 1233 | +(function() { |
| 1234 | + const resizer = document.getElementsByClassName("sidebar-resizer")[0]; |
| 1235 | + const sidebar = document.getElementsByClassName("sidebar")[0]; |
| 1236 | + if (!resizer || !sidebar) { |
| 1237 | + return; |
| 1238 | + } |
| 1239 | + const isSrcPage = hasClass(document.body, "src"); |
| 1240 | + const hideSidebar = () => { |
| 1241 | + if (isSrcPage) { |
| 1242 | + window.rustdocCloseSourceSidebar(); |
| 1243 | + } else { |
| 1244 | + addClass(document.documentElement, "hide-sidebar"); |
| 1245 | + updateLocalStorage("hide-sidebar", "true"); |
| 1246 | + } |
| 1247 | + }; |
| 1248 | + const showSidebar = () => { |
| 1249 | + if (isSrcPage) { |
| 1250 | + window.rustdocShowSourceSidebar(); |
| 1251 | + } else { |
| 1252 | + removeClass(document.documentElement, "hide-sidebar"); |
| 1253 | + updateLocalStorage("hide-sidebar", "false"); |
| 1254 | + } |
| 1255 | + }; |
| 1256 | + const changeSidebarSize = size => { |
| 1257 | + if (isSrcPage) { |
| 1258 | + updateLocalStorage("src-sidebar-width", size); |
| 1259 | + document.documentElement.style.setProperty("--src-sidebar-width", size + "px"); |
| 1260 | + } else { |
| 1261 | + updateLocalStorage("desktop-sidebar-width", size); |
| 1262 | + document.documentElement.style.setProperty("--desktop-sidebar-width", size + "px"); |
| 1263 | + } |
| 1264 | + }; |
| 1265 | + const isSidebarHidden = () => { |
| 1266 | + return isSrcPage ? |
| 1267 | + !hasClass(document.documentElement, "src-sidebar-expanded") : |
| 1268 | + hasClass(document.documentElement, "hide-sidebar"); |
| 1269 | + }; |
| 1270 | + const resize = e => { |
| 1271 | + const pos = e.clientX - sidebar.offsetLeft - 3; |
| 1272 | + if (pos < 50) { |
| 1273 | + hideSidebar(); |
| 1274 | + } else if (pos >= 100) { |
| 1275 | + // 100 is the size of the logo |
| 1276 | + // don't let it get smaller, or it'll get squished |
| 1277 | + if (isSidebarHidden()) { |
| 1278 | + showSidebar(); |
| 1279 | + } |
| 1280 | + changeSidebarSize(Math.min(pos, window.innerWidth - 100)); |
| 1281 | + } |
| 1282 | + }; |
| 1283 | + const stopResize = () => { |
| 1284 | + removeClass(resizer, "active"); |
| 1285 | + window.removeEventListener("mousemove", resize, false); |
| 1286 | + window.removeEventListener("mouseup", stopResize, false); |
| 1287 | + removeClass(document.documentElement, "sidebar-resizing"); |
| 1288 | + }; |
| 1289 | + const initResize = () => { |
| 1290 | + window.addEventListener("mousemove", resize, false); |
| 1291 | + window.addEventListener("mouseup", stopResize, false); |
| 1292 | + addClass(resizer, "active"); |
| 1293 | + addClass(document.documentElement, "sidebar-resizing"); |
| 1294 | + }; |
| 1295 | + resizer.addEventListener("mousedown", initResize, false); |
| 1296 | +}()); |
| 1297 | + |
1233 | 1298 | (function() {
|
1234 | 1299 | let reset_button_timeout = null;
|
1235 | 1300 |
|
|
0 commit comments