mirror of
https://github.com/snachodog/just-the-docs.git
synced 2025-04-15 23:52:23 -06:00
Hello everyone, this is my implementation for the copy button on the snippet (requested in #924) The implementation is made 100% javascript as with or without a jekyll template modification you still have to execute some javascript code, and I consider it the best choice. the button only appears if the mouse is over it, to allow the entire line to be read the important CSS changes were made to make the copy button work even in the long code situation:  to avoid this:  Co-authored-by: Matt Wang <matt@matthewwang.me>
211 lines
5.4 KiB
SCSS
211 lines
5.4 KiB
SCSS
// Code and syntax highlighting
|
|
// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty
|
|
|
|
// {% raw %}
|
|
|
|
// This instruction applies to all queues not within 'pre', avoiding 'code' generated by the highlight.
|
|
:not(pre) {
|
|
& > code {
|
|
padding: 0.2em 0.15em;
|
|
font-weight: 400;
|
|
background-color: $code-background-color;
|
|
border: $border $border-color;
|
|
border-radius: $border-radius;
|
|
}
|
|
}
|
|
|
|
// Avoid appearance of dark border around visited code links in Safari
|
|
a:visited code {
|
|
border-color: $border-color;
|
|
}
|
|
|
|
// Content structure for highlighted code blocks using fences or Liquid
|
|
//
|
|
// ```[LANG]...```, no kramdown line_numbers:
|
|
// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code
|
|
//
|
|
// ```[LANG]...```, kramdown line_numbers = true:
|
|
// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code
|
|
// > div.table-wrapper > table.rouge-table > tbody > tr
|
|
// > td.rouge-gutter.gl > pre.lineno
|
|
// | td.rouge-code > pre
|
|
//
|
|
// {% highlight LANG %}...{% endhighlight %}:
|
|
// figure.highlight > pre > code.language-LANG
|
|
//
|
|
// {% highlight LANG linenos %}...{% endhighlight %}:
|
|
// figure.highlight > pre > code.language-LANG
|
|
// > div.table-wrapper > table.rouge-table > tbody > tr
|
|
// > td.gutter.gl > pre.lineno
|
|
// | td.code > pre
|
|
//
|
|
// ----...---- (AsciiDoc)
|
|
// div.listingblock > div.content > pre.rouge.highlight
|
|
//
|
|
// fix_linenos removes the outermost pre when it encloses table.rouge-table
|
|
//
|
|
// See docs/index-test.md for some tests.
|
|
//
|
|
// No kramdown line_numbers: fences and Liquid highlighting look the same.
|
|
// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?
|
|
|
|
// ```[LANG]...```
|
|
|
|
// the code may appear with 3 different types:
|
|
// container \ case: default case, code with line number, code with html rendering
|
|
// top level: div.highlighter-rouge, div.listingblock > div.content, figure.highlight
|
|
// second level: div.highlight, .table-wrapper, pre
|
|
// third level: pre.highlight, td.code, absent
|
|
// last level: code, pre, code (optionality)
|
|
// highlighter level: span, span, span
|
|
// the spacing are only in the second level for case 1, 3 and in the thirt level for case 2
|
|
|
|
// select top level container
|
|
div.highlighter-rouge,
|
|
div.listingblock > div.content,
|
|
figure.highlight {
|
|
margin-top: 0;
|
|
margin-bottom: $sp-3;
|
|
background-color: $code-background-color;
|
|
border-radius: $border-radius;
|
|
box-shadow: none;
|
|
-webkit-overflow-scrolling: touch;
|
|
position: relative;
|
|
padding: 0;
|
|
|
|
// copy button (or other button)
|
|
// the button appear only when there is a hover on the code or focus on button
|
|
> button {
|
|
width: $sp-3;
|
|
opacity: 0;
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
border: $sp-3 solid $code-background-color;
|
|
background-color: $code-background-color;
|
|
color: $body-text-color;
|
|
box-sizing: content-box;
|
|
|
|
svg {
|
|
fill: $body-text-color;
|
|
}
|
|
|
|
&:active {
|
|
text-decoration: none;
|
|
outline: none;
|
|
opacity: 1;
|
|
}
|
|
|
|
&:focus {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
// the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button
|
|
&:hover {
|
|
> button {
|
|
cursor: copy;
|
|
opacity: 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
// setting the spacing and scrollbar on the second level for the first case
|
|
// remove all space on the second and thirt level
|
|
div.highlighter-rouge,
|
|
div.listingblock {
|
|
div.highlight {
|
|
overflow-x: auto;
|
|
padding: $sp-3;
|
|
margin: 0;
|
|
border: 0;
|
|
}
|
|
|
|
pre.highlight,
|
|
code {
|
|
padding: 0;
|
|
margin: 0;
|
|
border: 0;
|
|
}
|
|
}
|
|
|
|
// {% highlight LANG %}...{% endhighlight %},
|
|
// {% highlight LANG linenos %}...{% endhighlight %}:
|
|
|
|
// setting the spacing and scrollbar on the second level for the thirt case
|
|
// the css rule are apply only to the last code enviroment
|
|
// setting the scroolbar
|
|
figure.highlight {
|
|
pre,
|
|
:not(pre) > code {
|
|
overflow-x: auto;
|
|
padding: $sp-3;
|
|
margin: 0;
|
|
border: 0;
|
|
}
|
|
}
|
|
|
|
// ```[LANG]...```, kramdown line_numbers = true,
|
|
// {% highlight LANG linenos %}...{% endhighlight %}:
|
|
|
|
// setting the spacing and scrollbar on the thirt level for the second case
|
|
.highlight .table-wrapper {
|
|
padding: 0;
|
|
margin: 0;
|
|
border: 0;
|
|
box-shadow: none;
|
|
|
|
td,
|
|
pre {
|
|
@include fs-2;
|
|
|
|
min-width: 0;
|
|
padding: 0;
|
|
background-color: $code-background-color;
|
|
border: 0;
|
|
}
|
|
|
|
td.gl {
|
|
width: 1em;
|
|
padding-right: $sp-3;
|
|
padding-left: $sp-3;
|
|
}
|
|
|
|
pre {
|
|
margin: 0;
|
|
line-height: 2;
|
|
}
|
|
}
|
|
|
|
// Code examples: html render of a code
|
|
.code-example,
|
|
.listingblock > .title {
|
|
padding: $sp-3;
|
|
margin-bottom: $sp-3;
|
|
overflow: auto;
|
|
border: 1px solid $border-color;
|
|
border-radius: $border-radius;
|
|
|
|
+ .highlighter-rouge,
|
|
+ .sectionbody .listingblock,
|
|
+ .content,
|
|
+ figure.highlight {
|
|
position: relative;
|
|
margin-top: -$sp-4;
|
|
border-right: 1px solid $border-color;
|
|
border-bottom: 1px solid $border-color;
|
|
border-left: 1px solid $border-color;
|
|
border-top-left-radius: 0;
|
|
border-top-right-radius: 0;
|
|
}
|
|
}
|
|
|
|
// Mermaid diagram code blocks should be left unstyled.
|
|
code.language-mermaid {
|
|
padding: 0;
|
|
background-color: inherit;
|
|
border: 0;
|
|
}
|
|
|
|
// {% endraw %}
|