mirror of
https://github.com/discourse/DiscoTOC.git
synced 2025-03-07 01:39:50 +00:00
We previously added a reset to the topic body to fix some wrapping issues, but looks like a) the reset is no longer necessary and b) it causes jumping on scroll. So let's remove it.
240 lines
4.9 KiB
SCSS
240 lines
4.9 KiB
SCSS
$padding-basis: 0.75em;
|
|
|
|
.d-toc-main {
|
|
display: none;
|
|
width: 225px;
|
|
@media screen and (max-width: 1045px) {
|
|
.desktop-view & {
|
|
width: 150px;
|
|
}
|
|
}
|
|
border-left: 1px solid var(--primary-low);
|
|
box-sizing: border-box;
|
|
a {
|
|
display: block;
|
|
padding: 0.15em 0;
|
|
color: var(--primary-medium);
|
|
&.scroll-to-bottom {
|
|
padding-left: $padding-basis;
|
|
}
|
|
}
|
|
#d-toc {
|
|
max-height: calc(100vh - 4.5em - var(--header-offset));
|
|
padding-bottom: 0.5em;
|
|
overflow: auto;
|
|
ul {
|
|
list-style-type: none;
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
li.d-toc-item {
|
|
margin: 0;
|
|
padding: 0;
|
|
padding-left: $padding-basis;
|
|
line-height: var(--line-height-large);
|
|
> ul {
|
|
max-height: 0;
|
|
overflow: hidden;
|
|
opacity: 0.5;
|
|
transition: opacity 0.3s ease-in-out, max-height 0.3s ease-in-out;
|
|
}
|
|
&.active,
|
|
.d-toc-wrapper.overlay & {
|
|
ul {
|
|
max-height: 500em;
|
|
overflow: visible;
|
|
opacity: 1;
|
|
}
|
|
}
|
|
> a:hover {
|
|
color: var(--primary-high);
|
|
}
|
|
&.direct-active > a {
|
|
position: relative;
|
|
color: var(--primary);
|
|
&:before {
|
|
content: "";
|
|
width: 1px;
|
|
margin-top: -1px;
|
|
background-color: var(--tertiary);
|
|
position: absolute;
|
|
height: 100%;
|
|
}
|
|
}
|
|
}
|
|
|
|
> ul > li > ul {
|
|
font-size: var(--font-down-1);
|
|
> li:first-child {
|
|
padding-top: 0.25em;
|
|
}
|
|
> li {
|
|
padding-bottom: 0.15em;
|
|
}
|
|
li.direct-active > a:before {
|
|
// it's odd that we need this
|
|
margin-left: -1px;
|
|
}
|
|
|
|
li.d-toc-h2 ~ li.d-toc-h3,
|
|
li.d-toc-h2 ~ li.d-toc-h4,
|
|
li.d-toc-h2 ~ li.d-toc-h5,
|
|
li.d-toc-h3 ~ li.d-toc-h4,
|
|
li.d-toc-h3 ~ li.d-toc-h5,
|
|
li.d-toc-h4 ~ li.d-toc-h5 {
|
|
> a {
|
|
padding-left: $padding-basis;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// active line marker
|
|
$selector: "> ul > li.direct-active > a:before";
|
|
$map: (
|
|
"left": "html:not(.rtl)",
|
|
"right": "html.rtl",
|
|
);
|
|
|
|
/*
|
|
// loop below generates styling for non-RTL and RTL
|
|
// Example:
|
|
html:not(.rtl) SELECTOR {
|
|
left: -.75em
|
|
}
|
|
html.rtl SELECTOR {
|
|
right: -.75em
|
|
}
|
|
*/
|
|
@each $prop, $parent in $map {
|
|
#{$parent} #d-toc {
|
|
#{$selector} {
|
|
#{$prop}: (-$padding-basis);
|
|
}
|
|
> ul > li #{$selector} {
|
|
#{$prop}: (-$padding-basis) * 2;
|
|
}
|
|
}
|
|
}
|
|
// END active line marker
|
|
|
|
.d-toc-mini,
|
|
a.d-toc-close {
|
|
display: none;
|
|
}
|
|
|
|
.d-toc-timeline-visible {
|
|
.d-toc-main,
|
|
.d-toc-mini {
|
|
display: block;
|
|
}
|
|
// overlayed timeline (on mobile and narrow screens)
|
|
.topic-navigation.with-topic-progress {
|
|
.d-toc-wrapper {
|
|
position: fixed;
|
|
margin-top: 0.25em;
|
|
height: calc(100vh - 50px - var(--header-offset));
|
|
opacity: 0.5;
|
|
right: -100vw;
|
|
top: var(--header-offset);
|
|
width: 75vw;
|
|
max-width: 350px;
|
|
background-color: var(--secondary);
|
|
box-shadow: shadow("dropdown");
|
|
z-index: z("modal", "overlay");
|
|
transition: all 0.2s ease-in-out;
|
|
.d-toc-main {
|
|
width: 100%;
|
|
padding: 0.5em;
|
|
height: 100%;
|
|
#d-toc {
|
|
max-height: calc(100% - 3em);
|
|
}
|
|
}
|
|
&.overlay {
|
|
right: 0;
|
|
width: 75vw;
|
|
opacity: 1;
|
|
.d-toc-main #d-toc li.d-toc-item ul {
|
|
transition: none;
|
|
}
|
|
}
|
|
|
|
a.scroll-to-bottom,
|
|
a.d-toc-close {
|
|
display: inline-block;
|
|
padding: 0.5em;
|
|
}
|
|
|
|
.d-toc-icons {
|
|
text-align: right;
|
|
}
|
|
}
|
|
}
|
|
|
|
// core overrides when timeline is active
|
|
.timeline-container,
|
|
#topic-progress {
|
|
display: none;
|
|
}
|
|
.container.posts .topic-navigation.with-topic-progress {
|
|
align-self: start;
|
|
}
|
|
}
|
|
|
|
// core sets first child's top margin to 0
|
|
// ensure it's also 0 when TOC markup is first
|
|
.cooked > div[data-theme-toc]:first-child + * {
|
|
margin-top: 0px;
|
|
}
|
|
|
|
// RTL Support
|
|
.rtl {
|
|
.d-toc-main {
|
|
border-left: none;
|
|
border-right: 1px solid var(--primary-low);
|
|
|
|
#d-toc li.d-toc-item,
|
|
a.scroll-to-bottom {
|
|
padding-left: 0;
|
|
padding-right: $padding-basis;
|
|
}
|
|
}
|
|
|
|
.d-toc-timeline-visible .topic-navigation.with-topic-progress .d-toc-wrapper {
|
|
right: unset;
|
|
left: -100vw;
|
|
&.overlay {
|
|
right: unset;
|
|
left: 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Composer preview notice
|
|
.edit-title .d-editor-preview [data-theme-toc] {
|
|
background: var(--tertiary);
|
|
color: var(--secondary);
|
|
border-top: 2px solid var(--secondary);
|
|
position: sticky;
|
|
top: 0;
|
|
height: 30px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
&:before {
|
|
content: "#{$composer_toc_text}";
|
|
}
|
|
}
|
|
|
|
// Docs plugin outlet
|
|
.below-docs-topic-outlet.d-toc-wrapper {
|
|
position: sticky;
|
|
top: calc(var(--header-offset, 60px) + 1em);
|
|
max-height: calc(100vh - 2em - var(--header-offset, 60px));
|
|
.mobile-view & {
|
|
display: none;
|
|
}
|
|
}
|