mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 02:57:37 +00:00
rustdoc: use checkbox instead of switch for settings toggles
The switch is designed to give the application a "physical" feel, but nothing else in here really followed through. They didn't support the "flick" gesture that real iOS switches support, and the radio buttons that were also used in Rustdoc Settings were a more "classic" form element anyway. Also, while "switches" are the exclusive toggle design on iOS (since [Apple HIG] reserves checkboxes for Mac only), the [Google Material] guidelines say that lists of switches are bad, and you should just use check boxes. [Apple HIG]: https://developer.apple.com/design/human-interface-guidelines/components/selection-and-input/toggles [Google Material]: https://m3.material.io/components/checkbox/guidelines#6902f23d-ceba-4b19-ae3b-b78b9b01d185
This commit is contained in:
parent
a3c0a02361
commit
0f3ae6218e
@ -8,7 +8,8 @@
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.setting-line .radio-line input {
|
||||
.setting-line .radio-line input,
|
||||
.setting-line .toggle input {
|
||||
margin-right: 0.3em;
|
||||
height: 1.2rem;
|
||||
width: 1.2rem;
|
||||
@ -17,9 +18,18 @@
|
||||
outline: none;
|
||||
-webkit-appearance: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
.setting-line .radio-line input {
|
||||
border-radius: 50%;
|
||||
}
|
||||
.setting-line .radio-line input + span {
|
||||
.setting-line .toggle input:checked {
|
||||
content: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40">\
|
||||
<path d="M7,25L17,32L33,12" fill="none" stroke="black" stroke-width="5"/>\
|
||||
<path d="M7,23L17,30L33,10" fill="none" stroke="white" stroke-width="5"/></svg>');
|
||||
}
|
||||
|
||||
.setting-line .radio-line input + span,
|
||||
.setting-line .toggle span {
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
|
||||
@ -49,37 +59,6 @@
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.toggle input {
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.slider {
|
||||
position: relative;
|
||||
width: 45px;
|
||||
min-width: 45px;
|
||||
display: block;
|
||||
height: 28px;
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
background-color: #ccc;
|
||||
transition: .3s;
|
||||
}
|
||||
|
||||
.slider:before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
height: 19px;
|
||||
width: 19px;
|
||||
left: 4px;
|
||||
bottom: 4px;
|
||||
transition: .3s;
|
||||
}
|
||||
|
||||
input:checked + .slider:before {
|
||||
transform: translateX(19px);
|
||||
}
|
||||
|
||||
.setting-line > .sub-settings {
|
||||
padding-left: 42px;
|
||||
width: 100%;
|
||||
@ -94,7 +73,11 @@ input:checked + .slider:before {
|
||||
box-shadow: inset 0 0 0 3px var(--main-background-color);
|
||||
background-color: var(--settings-input-color);
|
||||
}
|
||||
.setting-line .radio-line input:focus {
|
||||
.setting-line .toggle input:checked {
|
||||
background-color: var(--settings-input-color);
|
||||
}
|
||||
.setting-line .radio-line input:focus,
|
||||
.setting-line .toggle input:focus {
|
||||
box-shadow: 0 0 1px 1px var(--settings-input-color);
|
||||
}
|
||||
/* In here we combine both `:focus` and `:checked` properties. */
|
||||
@ -102,9 +85,7 @@ input:checked + .slider:before {
|
||||
box-shadow: inset 0 0 0 3px var(--main-background-color),
|
||||
0 0 2px 2px var(--settings-input-color);
|
||||
}
|
||||
.setting-line .radio-line input:hover {
|
||||
.setting-line .radio-line input:hover,
|
||||
.setting-line .toggle input:hover {
|
||||
border-color: var(--settings-input-color) !important;
|
||||
}
|
||||
input:checked + .slider {
|
||||
background-color: var(--settings-input-color);
|
||||
}
|
||||
|
@ -75,16 +75,6 @@ Original by Dempfi (https://github.com/dempfi/ayu)
|
||||
--crate-search-hover-border: #e0e0e0;
|
||||
}
|
||||
|
||||
.slider {
|
||||
background-color: #ccc;
|
||||
}
|
||||
.slider:before {
|
||||
background-color: white;
|
||||
}
|
||||
input:focus + .slider {
|
||||
box-shadow: 0 0 0 2px #0a84ff, 0 0 0 6px rgba(10, 132, 255, 0.3);
|
||||
}
|
||||
|
||||
h1, h2, h3, h4 {
|
||||
color: white;
|
||||
}
|
||||
|
@ -70,16 +70,6 @@
|
||||
--crate-search-hover-border: #2196f3;
|
||||
}
|
||||
|
||||
.slider {
|
||||
background-color: #ccc;
|
||||
}
|
||||
.slider:before {
|
||||
background-color: white;
|
||||
}
|
||||
input:focus + .slider {
|
||||
box-shadow: 0 0 0 2px #0a84ff, 0 0 0 6px rgba(10, 132, 255, 0.3);
|
||||
}
|
||||
|
||||
.content .item-info::before { color: #ccc; }
|
||||
|
||||
body.source .example-wrap pre.rust a {
|
||||
|
@ -67,15 +67,6 @@
|
||||
--crate-search-hover-border: #717171;
|
||||
}
|
||||
|
||||
.slider {
|
||||
background-color: #ccc;
|
||||
}
|
||||
.slider:before {
|
||||
background-color: white;
|
||||
}
|
||||
input:focus + .slider {
|
||||
box-shadow: 0 0 0 2px #0a84ff, 0 0 0 6px rgba(10, 132, 255, 0.3);
|
||||
}
|
||||
|
||||
.content .item-info::before { color: #ccc; }
|
||||
|
||||
|
@ -66,8 +66,7 @@
|
||||
|
||||
function setEvents(settingsElement) {
|
||||
updateLightAndDark();
|
||||
onEachLazy(settingsElement.getElementsByClassName("slider"), elem => {
|
||||
const toggle = elem.previousElementSibling;
|
||||
onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"), toggle => {
|
||||
const settingId = toggle.id;
|
||||
const settingValue = getSettingValue(settingId);
|
||||
if (settingValue !== null) {
|
||||
@ -139,7 +138,6 @@
|
||||
const checked = setting["default"] === true ? " checked" : "";
|
||||
output += `<label class="toggle">\
|
||||
<input type="checkbox" id="${js_data_name}"${checked}>\
|
||||
<span class="slider"></span>\
|
||||
<span class="label">${setting_name}</span>\
|
||||
</label>`;
|
||||
}
|
||||
|
@ -30,10 +30,10 @@ wait-for: "#settings"
|
||||
assert-css: ("#settings", {"display": "block"})
|
||||
|
||||
// Then, click the toggle button.
|
||||
click: "input#line-numbers + .slider"
|
||||
click: "input#line-numbers"
|
||||
wait-for: 100 // wait-for-false does not exist
|
||||
assert-false: "pre.example-line-numbers"
|
||||
|
||||
// Finally, turn it on again.
|
||||
click: "input#line-numbers + .slider"
|
||||
click: "input#line-numbers"
|
||||
wait-for: "pre.example-line-numbers"
|
||||
|
@ -118,7 +118,7 @@ assert: ".setting-line.hidden #theme"
|
||||
assert-text: ("#preferred-dark-theme .setting-name", "Preferred dark theme")
|
||||
assert-text: ("#preferred-light-theme .setting-name", "Preferred light theme")
|
||||
|
||||
// We now check that clicking on the "sliders"' text is like clicking on the slider.
|
||||
// We now check that clicking on the toggles' text is like clicking on the checkbox.
|
||||
// To test it, we use the "Disable keyboard shortcuts".
|
||||
local-storage: {"rustdoc-disable-shortcuts": "false"}
|
||||
click: ".setting-line:last-child .toggle .label"
|
||||
@ -141,10 +141,7 @@ assert-css: ("#settings-menu .popover", {"display": "none"})
|
||||
// Now we go to the settings page to check that the CSS is loaded as expected.
|
||||
goto: "file://" + |DOC_PATH| + "/settings.html"
|
||||
wait-for: "#settings"
|
||||
assert-css: (
|
||||
".setting-line .toggle .slider",
|
||||
{"width": "45px", "margin-right": "20px", "border": "0px none rgb(0, 0, 0)"},
|
||||
)
|
||||
assert-css: (".setting-line", {"position": "relative"})
|
||||
|
||||
assert-attribute-false: ("#settings", {"class": "popover"}, CONTAINS)
|
||||
compare-elements-position: (".sub form", "#settings", ("x"))
|
||||
@ -162,4 +159,4 @@ reload:
|
||||
size: (300, 1000)
|
||||
click: "#settings-menu"
|
||||
wait-for: "#settings"
|
||||
assert-css: ("#settings .slider", {"width": "45px"}, ALL)
|
||||
assert-css: (".setting-line", {"position": "relative"})
|
||||
|
Loading…
Reference in New Issue
Block a user