diff --git a/.dictionary b/.dictionary index e554a3bcc..ca517c689 100644 --- a/.dictionary +++ b/.dictionary @@ -41,7 +41,6 @@ HeaderAnchor HeaderAnchor's highlighter's html -IE8 inline Inline InlineHilite @@ -56,6 +55,7 @@ KBD kbd LaTeX Limberg +linkafies linter MagicLink MathJax @@ -115,6 +115,7 @@ sublicense SuperFences SVG SVGs +syntaxes Tasklist th thumbsup diff --git a/.travis.yml b/.travis.yml index fd3a0e83f..20bdd4de6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,29 +2,49 @@ sudo: false language: python matrix: include: - - python: 2.7 - env: TOXENV=py27-unittests - - python: 3.3 - env: TOXENV=py33-unittests - - python: 3.4 - env: TOXENV=py34-unittests - - python: 3.5 - env: TOXENV=py35-unittests - - python: 3.6 - env: TOXENV=py36-unittests - - python: 2.7 - env: TOXENV=lint - - python: 2.7 - env: TOXENV=spelling + - python: 2.7 + env: TOXENV=py27-unittests + - python: 3.3 + env: TOXENV=py33-unittests + - python: 3.4 + env: TOXENV=py34-unittests + - python: 3.5 + env: TOXENV=py35-unittests + - python: 3.6 + env: TOXENV=py36-unittests + - python: 2.7 + env: TOXENV=lint + - python: 2.7 + env: TOXENV=documents addons: apt: packages: - - aspell - - aspell-en + - aspell + - aspell-en install: - - pip install tox - - pip install codecov +- pip install tox +- pip install codecov script: - - tox +- tox after_success: - - codecov +- codecov +deploy: + - provider: pypi + user: facelessuser + password: + secure: S/7VvUM4b8dViV5YtOJOE3+w8u/n0nV3b3nyYzcgdetxYp9ppUq7wRZEwWRXGkLH7LPHxprq8n7EGHBVpfDHbesUqj+m93OPVNBlNy8Uh3p6bUlaI0f8MW2zAPq04oOHZ0mbWuDe34aHW3IEoCFCFL5gUAgx7cBIjcHPFFyTPsHnQGAVf/cLHfEE+OtJgUeFLgdBKehbcN9P7W96o8TMrJL6bQObytzzLUFN0LfkqBmqnZH+7g1Hlxw3k9ajSC2edLjCDmuEQy+NYsVrW6/XB9vzNzYA1/JREdP+6IEQ+V4temRzgVWNgWjrl83Du+c73Cc/DkVPoOw/udAHqFk/nNYQCZJbzZnuQxqrp/MDKZxmJzmspDX7PCQV3Mw0pxYTbE/3bWSVVPfwi2VCbaOkELndHBOCBXK0U12exlg9vidJA+18M5TkiNIBCjkWAI9uUeLxfQcW9q7hWeiKgbD2VJPpp4V4TjtTAAMEIyq2Eie2uoreKL07Q82QcKKqudKZWaUl++nh/ZNo5u8X0K2YZQWOD9iKrsCOgpov8Bh9Kz57QpBTDgx6l1NTovmbQ4v1vFgGZVx4MnhpQgIqzHU+5Bb8E/ar0FtsCEfG0m5yLwKA0SOrX8vSAlTu8w3yN+Q/pbbetVsvMR3pCeh8bu+s742wS6Llx5RxALi8nJygm6k= + distributions: "sdist bdist_wheel" + on: + tags: true + repo: facelessuser/pymdown-extensions + condition: "$TOXENV = documents" + - provider: pages + github_token: $GITHUB_TOKEN + name: $GITHUB_USER + email: $GITHUB_EMAIL + skip_cleanup: true + local_dir: site + on: + tags: true + repo: facelessuser/pymdown-extensions + condition: "$TOXENV = documents" diff --git a/docs/src/js/uml.js b/docs/src/js/uml.js index 818157d0f..505a1290a 100644 --- a/docs/src/js/uml.js +++ b/docs/src/js/uml.js @@ -6,6 +6,8 @@ * @return {void} */ export default (converter, className, settings) => { + // Change article to whatever element your main Markdown content lives. + const article = document.querySelectorAll("article") const blocks = document.querySelectorAll(`pre.${className},div.${className}`) // Is there a settings object? @@ -15,11 +17,15 @@ export default (converter, className, settings) => { for (let i = 0; i < blocks.length; i++) { const block = blocks[i] let text = null - let el = null + const parentEl = block + const el = document.createElement("div") + el.className = className + el.style.visibility = "hidden" + el.style.position = "absolute" + if (block.tagName.toLowerCase() === "pre") { // Handles

       const childEl = block.firstChild
-      const parentEl = childEl.parentNode
       text = ""
       for (let j = 0; j < childEl.childNodes.length; j++) {
         const child = childEl.childNodes[j]
@@ -29,22 +35,30 @@ export default (converter, className, settings) => {
           break
         }
       }
-      // Do UML conversion and replace source
-      el = document.createElement("div")
-      el.className = className
-      parentEl.parentNode.insertBefore(el, parentEl)
-      parentEl.parentNode.removeChild(parentEl)
     } else {
       // Handles 
- el = block - text = el.textContent || el.innerText - if (el.innerText){ - el.innerText = "" + text = parentEl.textContent || parentEl.innerText + if (parentEl.innerText){ + parentEl.innerText = "" } else { - el.textContent = "" + parentEl.textContent = "" } } + + // Insert our new div at the end of our content to get general + // typset and page sizes as our parent might be `display:none` + // keeping us from getting the right sizes for our SVG. + // Our new div will be hidden via "visibility" and take no space + // via `poistion: absolute`. When we are all done, use the + // original node as a reference to insert our SVG back + // into the proper place, and then make our SVG visilbe again. + // Lastly, clean up the old node. + article[0].appendChild(el) const diagram = converter.parse(text) diagram.drawSVG(el, config) + el.style.visibility = "visible" + el.style.position = "static" + parentEl.parentNode.insertBefore(el, parentEl) + parentEl.parentNode.removeChild(parentEl) } } diff --git a/docs/src/markdown/changelog.md b/docs/src/markdown/changelog.md index a7938cb78..062a6df3a 100644 --- a/docs/src/markdown/changelog.md +++ b/docs/src/markdown/changelog.md @@ -1,14 +1,21 @@ # Changelog +## 3.3.0 + +Released May 26, 2017 + +- **NEW**: Added support for pull request link shortening in MagicLink (https://github.com/facelessuser/pymdown-extensions/pull/88). +- **NEW**: Added new Spoilers extension (https://github.com/facelessuser/pymdown-extensions/issues/85). + ## 3.2.1 -> Released May 23, 2017 +Released May 23, 2017 - **FIX**: Cannot set Highlight's CSS class. ## 3.2.0 -> Released May 15, 2017 +Released May 15, 2017 - **NEW**: Add support for Twemoji 2.3.5. - **NEW**: Update to EmojiOne 3.0.2. @@ -17,14 +24,14 @@ ## 3.1.0 -> Released May 7, 2017 +Released May 7, 2017 - **NEW**: Highlight extension now runs normal indented code blocks through highlighter. - **FIX**: When Pygments is disabled, `linenums` class was attached to code blocks even if `linenums` was disabled and not enabled via fence headers. ## 3.0.0 -> Released Apr 16, 2017 +Released Apr 16, 2017 - **NEW**: Added Keys extension. - **NEW**: Generalized custom fences (https://github.com/facelessuser/pymdown-extensions/issues/60). `flow` and `sequence` fence are now just custom fences and can be disabled simply by overwriting the `custom_fences` setting. @@ -39,7 +46,7 @@ ## 2.0.0 -> Released Feb 12, 2017 +Released Feb 12, 2017 - **NEW**: SuperFences and InlineHilite can be configured via the new Highlight extension. - **NEW**: InlineHilite now has all highlighting features pushed to the Highlight extension. This removes all the CodeHilite code that used to be in it and instead relocates it to Highlight. @@ -47,7 +54,7 @@ ## 1.8.0 -> Released Jan 27, 2017 +Released Jan 27, 2017 - **NEW**: MagicLink special repository link shortener for GitHub, GitLab, and Bitbucket (https://github.com/facelessuser/pymdown-extensions/issues/49). - **FIX**: GitHub asterisk emphasis should never have had smart enabled for it (https://github.com/facelessuser/pymdown-extensions/issues/50). @@ -59,7 +66,7 @@ ## 1.7.0 -> Released Jan 21, 2017 +Released Jan 21, 2017 - **NEW**: Arithmatex now supports `\(...\)`, `\[...\]`, and `\begin{}...\end{}`. - **NEW**: Arithmatex has an option to embed the math code in MathJax script tags. @@ -71,13 +78,13 @@ ## 1.6.1 -> Released Jan 16, 2017 +Released Jan 16, 2017 - **FIX**: Don't install tools or tests folder when installing from Pypi. ## 1.6.0 -> Released Jan 15, 2017 +Released Jan 15, 2017 - **NEW**: EscapeAll has the option to perform more like Pandoc in that you can enable escaped newlines to be `hardbreaks`, and escaped spaces to be `nbsp`. - **NEW**: Rework poorly thought out snippets format to require quoting file names with single line format. Add a block format. Allow commenting out lines temporarily. And allow a way to escape them by placing a space after them. @@ -85,7 +92,7 @@ ## 1.5.0 -> Released Jan 13, 2017 +Released Jan 13, 2017 - **NEW**: New EscapeAll extension. - **NEW**: New Snippets extension for including external files into a Markdown file. @@ -100,7 +107,7 @@ ## 1.4.0 -> Released Jan 5, 2017 +Released Jan 5, 2017 - **NEW**: HeaderAnchor extension is now deprecated. It will be removed in a future version. - **NEW**: HeaderAnchor is no longer included in the `pymdownx.github` extension. @@ -109,7 +116,7 @@ ## 1.3.0 -> Released Jan 1, 2017 +Released Jan 1, 2017 - **NEW**: New Emoji extension that aims to replace GitHubEmoji. By default it is configured for EmojiOne and Gemoji (GitHub's emoji). - **NEW**: GitHubEmoji is deprecated. Please use the Emoji extension instead. @@ -118,13 +125,13 @@ ## 1.2.0 -> Released Nov 1, 2016 +Released Nov 1, 2016 - **NEW**: Add option to output task lists in a more customizable way. ## 1.1.0 -> Released Mar 1, 2016 +Released Mar 1, 2016 - **NEW**: Add pypi 3.5 info in setup - **NEW**: Add option to MagicLink extension to allow the stripping of link protocols (`http://` etc.). @@ -132,12 +139,12 @@ ## 1.0.1 -> Released Dec 10, 2015 +Released Dec 10, 2015 - **FIX**: Ordinal number 11th, 12th, and 13th ## 1.0.0 -> Released Dec 8, 2015 +Released Dec 8, 2015 - **NEW**: Initial release. diff --git a/docs/src/markdown/extensions/critic.md b/docs/src/markdown/extensions/critic.md index 6277d67e5..ba35bc918 100644 --- a/docs/src/markdown/extensions/critic.md +++ b/docs/src/markdown/extensions/critic.md @@ -70,121 +70,123 @@ Classes | Description `block` | Applied to critic HTML tags that are detected as surrounding a block region. `comment` | A CriticMarkup comment. -Here is some example CSS you can use for rendering the visualization. - -```css -/* Critic Markup */ -.markdown-body .critic { - font-family: inherit; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - border-style: solid; - border-width: 1px; - padding-top: 0.1em; - padding-bottom: 0.1em; - text-decoration: none; -} - -.markdown-body .critic:before, -.markdown-body .critic:after { - content: '\00a0'; - padding-top: 0.1em; - padding-bottom: 0.1em; - font-size: initial; -} - -.markdown-body .block:before, -.markdown-body .block:after { - content: ''; -} - -.markdown-body mark.critic { - border-color: #ff8600; - background: #ffddaa; -} - -.markdown-body ins.critic { - border-color: #00bb00; - background: #ddffdd; -} - -.markdown-body del.critic { - border-color: #dd0000; - background: #ffdddd; -} - -.markdown-body ins.break, -.markdown-body del.break { - font-size: 0; - border: none; -} - -.markdown-body ins.break:before, -.markdown-body del.break:before { - content: '\00a0\b6\00a0'; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.markdown-body ins.after, -.markdown-body del.after { - content: ''; -} - -.markdown-body ins.break:before { - color: #00bb00; - border: 1px solid #00bb00; - background: #ddffdd; -} - -.markdown-body del.break:before { - color: #bb0000; - border: 1px solid #bb0000; - background: #ffdddd; -} - -.markdown-body span.critic { - background: #ddddff; - border: 0; - border-top: 1px solid #0000bb; - border-bottom: 1px solid #0000bb; -} - -.markdown-body span.critic:before, -.markdown-body span.critic:after { - font-size: inherit; - background: #ddddff; - border: 1px solid #0000bb; -} - -.markdown-body span.critic:before { - content: '\00a0\bb'; - border-right: none; - -webkit-border-top-left-radius: 3px; - -moz-border-top-left-radius: 3px; - border-top-left-radius: 3px; - -webkit-border-bottom-left-radius: 3px; - -moz-border-bottom-left-radius: 3px; - border-bottom-left-radius: 3px; -} - -.markdown-body span.critic:after { - content: '\ab\00a0'; - border-left: none; - -webkit-border-top-right-radius: 3px; - -moz-border-top-right-radius: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - -moz-border-bottom-right-radius: 3px; - border-bottom-right-radius: 3px; -} - -.markdown-body .block { - display: block; - padding: .02em; -} -``` +??? settings "Example CSS" + + Here is some example CSS you can use for rendering the visualization. + + ```css + /* Critic Markup */ + .markdown-body .critic { + font-family: inherit; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + border-style: solid; + border-width: 1px; + padding-top: 0.1em; + padding-bottom: 0.1em; + text-decoration: none; + } + + .markdown-body .critic:before, + .markdown-body .critic:after { + content: '\00a0'; + padding-top: 0.1em; + padding-bottom: 0.1em; + font-size: initial; + } + + .markdown-body .block:before, + .markdown-body .block:after { + content: ''; + } + + .markdown-body mark.critic { + border-color: #ff8600; + background: #ffddaa; + } + + .markdown-body ins.critic { + border-color: #00bb00; + background: #ddffdd; + } + + .markdown-body del.critic { + border-color: #dd0000; + background: #ffdddd; + } + + .markdown-body ins.break, + .markdown-body del.break { + font-size: 0; + border: none; + } + + .markdown-body ins.break:before, + .markdown-body del.break:before { + content: '\00a0\b6\00a0'; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + + .markdown-body ins.after, + .markdown-body del.after { + content: ''; + } + + .markdown-body ins.break:before { + color: #00bb00; + border: 1px solid #00bb00; + background: #ddffdd; + } + + .markdown-body del.break:before { + color: #bb0000; + border: 1px solid #bb0000; + background: #ffdddd; + } + + .markdown-body span.critic { + background: #ddddff; + border: 0; + border-top: 1px solid #0000bb; + border-bottom: 1px solid #0000bb; + } + + .markdown-body span.critic:before, + .markdown-body span.critic:after { + font-size: inherit; + background: #ddddff; + border: 1px solid #0000bb; + } + + .markdown-body span.critic:before { + content: '\00a0\bb'; + border-right: none; + -webkit-border-top-left-radius: 3px; + -moz-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + -moz-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + } + + .markdown-body span.critic:after { + content: '\ab\00a0'; + border-left: none; + -webkit-border-top-right-radius: 3px; + -moz-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + -moz-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + } + + .markdown-body .block { + display: block; + padding: .02em; + } + ``` --8<-- "links.md" diff --git a/docs/src/markdown/extensions/progressbar.md b/docs/src/markdown/extensions/progressbar.md index 4165d72dc..29e75dc39 100644 --- a/docs/src/markdown/extensions/progressbar.md +++ b/docs/src/markdown/extensions/progressbar.md @@ -15,37 +15,47 @@ Option | Type | Default | Description | ## Examples +Colors by percent with labels: + +``` +[=0% "0%"] +[=5% "5%"] +[=25% "25%"] +[=45% "45%"] +[=65% "65%"] +[=85% "85%"] +[=100% "100%"] +``` + +[=0% "0%"] +[=5% "5%"] +[=25% "25%"] +[=45% "45%"] +[=65% "65%"] +[=85% "85%"] +[=100% "100%"] + +Apply a class: + ``` -Test | Result -------------------- | ------ -Animated: 0% |[=0% "0%"]{: .candystripe-animate} -Animated: 5% |[=5% "5%"]{: .candystripe-animate} -Animated: 25% |[=25% "25%"]{: .candystripe-animate} -Animated: 45% |[=45% "45%"]{: .candystripe-animate} -Animated: 65% |[=65% "65%"]{: .candystripe-animate} -Animated: 85% |[=85% "85%"]{: .candystripe-animate} -Animated: 100% |[=100% "100%"]{: .candystripe-animate} -Division Percentage |[= 212.2/537 "212.2/537 Testing division"] -No Label |[=== 50%] -Inline |Before[= 50% "I'm a block!"]After -Animated with Gloss |[= 50% "Glossy"]{: .candystripe-animate .gloss} +[=0%]{: .thin} +[=5%]{: .thin} +[=25%]{: .thin} +[=45%]{: .thin} +[=65%]{: .thin} +[=85%]{: .thin} +[=100%]{: .thin} ``` -Test | Result -------------------- | ------ -Animated: 0% |[=0% "0%"]{: .candystripe-animate} -Animated: 5% |[=5% "5%"]{: .candystripe-animate} -Animated: 25% |[=25% "25%"]{: .candystripe-animate} -Animated: 45% |[=45% "45%"]{: .candystripe-animate} -Animated: 65% |[=65% "65%"]{: .candystripe-animate} -Animated: 85% |[=85% "85%"]{: .candystripe-animate} -Animated: 100% |[=100% "100%"]{: .candystripe-animate} -Division Percentage |[= 212.2/537 "212.2/537 Testing division"] -No Label |[=== 50%] -Inline |Before[= 50% "I'm a block!"]After -Animated with Gloss |[= 50% "Glossy"]{: .candystripe-animate .gloss} - -## CSS +[=0%]{: .thin} +[=5%]{: .thin} +[=25%]{: .thin} +[=45%]{: .thin} +[=65%]{: .thin} +[=85%]{: .thin} +[=100%]{: .thin} + +## Styling with CSS The general HTML structure of the progress bar is as follows: @@ -64,143 +74,71 @@ Classes | Description `progress-label` | This is attached to the `p` element that will contain the desired label. `progress-plus` | This is an optional class that indicates the percentage of the progress bar by increments of 20. -```css -/* Progress Bars */ -.markdown-body .progress { - display: block; - width: 300px; - margin: 10px 0; - height: 24px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - background-color: #ededed; - position: relative; - box-shadow: inset -1px 1px 3px rgba(0, 0, 0, .1); -} - -.markdown-body .progress-label { - position: absolute; - text-align: center; - font-weight: bold; - width: 100%; margin: 0; - line-height: 24px !important; - color: #333; - text-shadow: 1px 1px 0 #fefefe, -1px -1px 0 #fefefe, -1px 1px 0 #fefefe, 1px -1px 0 #fefefe, 0 1px 0 #fefefe, 0 -1px 0 #fefefe, 1px 0 0 #fefefe, -1px 0 0 #fefefe, 1px 1px 2px #000; - -webkit-font-smoothing: antialiased !important; - white-space: nowrap; - overflow: hidden; -} - -.markdown-body .progress-bar { - height: 24px; - float: left; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - background-color: #96c6d7; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .5), inset 0 -1px 0 rgba(0, 0, 0, .1); - background-size: 30px 30px; - background-image: -webkit-linear-gradient( - 135deg, rgba(255, 255, 255, .4) 27%, - transparent 27%, - transparent 52%, rgba(255, 255, 255, .4) 52%, - rgba(255, 255, 255, .4) 77%, - transparent 77%, transparent - ); - background-image: -moz-linear-gradient( - 135deg, - rgba(255, 255, 255, .4) 27%, transparent 27%, - transparent 52%, rgba(255, 255, 255, .4) 52%, - rgba(255, 255, 255, .4) 77%, transparent 77%, - transparent - ); - background-image: -ms-linear-gradient( - 135deg, - rgba(255, 255, 255, .4) 27%, transparent 27%, - transparent 52%, rgba(255, 255, 255, .4) 52%, - rgba(255, 255, 255, .4) 77%, transparent 77%, - transparent - ); - background-image: -o-linear-gradient( - 135deg, - rgba(255, 255, 255, .4) 27%, transparent 27%, - transparent 52%, rgba(255, 255, 255, .4) 52%, - rgba(255, 255, 255, .4) 77%, transparent 77%, - transparent - ); - background-image: linear-gradient( - 135deg, - rgba(255, 255, 255, .4) 27%, transparent 27%, - transparent 52%, rgba(255, 255, 255, .4) 52%, - rgba(255, 255, 255, .4) 77%, transparent 77%, - transparent - ); -} - -.markdown-body .progress-100plus .progress-bar { - background-color: #a6d796; -} - -.markdown-body .progress-80plus .progress-bar { - background-color: #c6d796; -} - -.markdown-body .progress-60plus .progress-bar { - background-color: #d7c896; -} - -.markdown-body .progress-40plus .progress-bar { - background-color: #d7a796; -} - -.markdown-body .progress-20plus .progress-bar { - background-color: #d796a6; -} - -.markdown-body .progress-0plus .progress-bar { - background-color: #c25f77; -} - -.markdown-body .candystripe-animate .progress-bar{ - -webkit-animation: animate-stripes 3s linear infinite; - -moz-animation: animate-stripes 3s linear infinite; - animation: animate-stripes 3s linear infinite; -} - -@-webkit-keyframes animate-stripes { - 0% { - background-position: 0 0; - } - - 100% { - background-position: 60px 0; - } -} - -@-moz-keyframes animate-stripes { - 0% { - background-position: 0 0; - } - - 100% { - background-position: 60px 0; - } -} - -@keyframes animate-stripes { - 0% { - background-position: 0 0; - } - - 100% { - background-position: 60px 0; - } -} - -.markdown-body .gloss .progress-bar { - box-shadow: - inset 0 4px 12px rgba(255, 255, 255, .7), - inset 0 -12px 0 rgba(0, 0, 0, .05); -} -``` +??? settings "Example CSS" + + You are able to style your progress bars as fancy or plain as you want. Do this documents current style, the CSS is pretty plain. You can see it down below. + + ```css + .progress-label { + position: absolute; + text-align: center; + font-weight: 700; + width: 100%; + margin: 0; + line-height: 1.2rem; + white-space: nowrap; + overflow: hidden; + } + + .progress-bar { + height: 1.2rem; + float: left; + background-color: #2979ff; + } + + .progress { + display: block; + width: 100%; + margin: 0.5rem 0; + height: 1.2rem; + background-color: #eeeeee; + position: relative; + } + + .progress.thin { + margin-top: 0.9rem; + height: 0.4rem; + } + + .progress.thin .progress-label { + margin-top: -0.4rem; + } + + .progress.thin .progress-bar { + height: 0.4rem; + } + + .progress-100plus .progress-bar { + background-color: #00e676; + } + + .progress-80plus .progress-bar { + background-color: #fbc02d; + } + + .progress-60plus .progress-bar { + background-color: #ff9100; + } + + .progress-40plus .progress-bar { + background-color: #ff5252; + } + + .progress-20plus .progress-bar { + background-color: #ff1744; + } + + .progress-0plus .progress-bar { + background-color: #f50057; + } + ``` diff --git a/docs/src/markdown/extensions/spoilers.md b/docs/src/markdown/extensions/spoilers.md index 9634cda83..a58ba67c8 100644 --- a/docs/src/markdown/extensions/spoilers.md +++ b/docs/src/markdown/extensions/spoilers.md @@ -23,114 +23,113 @@ Spoilers will be output in the format below. The content will always be encapsul Unfortunately, due to how new `#!html
` tags are, not all browsers support them yet. In order to have them supported in all new browsers, you will have to provide some fallback styling and JavaScript until all browsers catch up. -This extension's goal is not to provide you with the perfect polyfill (you can design or find you own), but we will show the basic polyfill that is being used in this document. - -Here is the basic CSS that is being used. It is meant to provide a consistent CSS in both browsers that support `#!html
` tags and those that do not. - -```css -details { - display: block; -} - -details[open] > summary::before { - content: "\25BC"; -} - -details summary { - display: block; - cursor: pointer; -} - -details summary:focus { - outline: none; -} - -details summary::before { - content: "\25B6"; - padding-right: 0.5em; -} - -details summary::-webkit-details-marker { - display: none; -} - -/* Attach the "no-details" class to details tags - in browsers that do not support them to get - open/show functionality. */ -details.no-details:not([open]) > * { - display: none; -} - -details.no-details:not([open]) summary { - display: block; -} -``` +This extension's goal is not to provide you with the perfect polyfill (you can design or find you own), but a basic example is provided to show the basic polyfill that is being used in this document. There are more elaborate polyfills available that support jQuery, add keyboard events, or even support back to IE8. Feel free to modify what is here or find a solution that fits your needs. -And below is the JavaScript that will detect browsers that do not support `#!html
` tags and apply a `no-details` class to all details in those browsers. It will also attach a click event that will toggle the open state. The CSS above will target the `no-details` class and the `open` attribute to hide/show the content of your `#!html
` tag. Just run the code after the HTML content is loaded. +??? settings "Polyfill Example" + Here is the basic CSS that is being used. It is meant to provide a consistent CSS in both browsers that support `#!html
` tags and those that do not. -```js -/** - * Converts details/summary tags into working elements in browsers that don't yet support them. - * @return {void} - */ -var spoilers = (function () { + ```css + details { + display: block; + } - var isDetailsSupported = function () { - // https://mathiasbynens.be/notes/html5-details-jquery#comment-35 - // Detect if details is supported in the browser - var el = document.createElement("details"); - var fake = false; + details[open] > summary::before { + content: "\25BC"; + } - if (!("open" in el)) { - return false; + details summary { + display: block; + cursor: pointer; } - var root = document.body || function () { - var de = document.documentElement; - fake = true; - return de.insertBefore(document.createElement("body"), de.firstElementChild || de.firstChild); - }(); - - el.innerHTML = "ab"; - el.style.display = "block"; - root.appendChild(el); - var diff = el.offsetHeight; - el.open = true; - diff = diff !== el.offsetHeight; - root.removeChild(el); - - if (fake) { - root.parentNode.removeChild(root); + details summary:focus { + outline: none; } - return diff; - }(); + details summary::before { + content: "\25B6"; + padding-right: 0.5em; + } - if (!isDetailsSupported) { - var blocks = document.querySelectorAll("details>summary"); - for (var i = 0; i < blocks.length; i++) { - var summary = blocks[i]; - var details = summary.parentNode; + details summary::-webkit-details-marker { + display: none; + } - // Apply "no-details" to unsupported details tags - if (!details.className.match(new RegExp("(\\s|^)no-details(\\s|$)"))) { - details.className += " no-details"; - } + /* Attach the "no-details" class to details tags + in browsers that do not support them to get + open/show functionality. */ + details.no-details:not([open]) > * { + display: none; + } - summary.addEventListener("click", function (e) { - var node = e.target.parentNode; - if (node.hasAttribute("open")) { - node.removeAttribute("open"); - } else { - node.setAttribute("open", "open"); - } - }); + details.no-details:not([open]) summary { + display: block; } - } -}); -``` + ``` -There are more elaborate polyfills available that support jQuery, add keyboard events, or even support back to IE8. Feel free to modify what is here or find a solution that fits your needs. + And below is the JavaScript that will detect browsers that do not support `#!html
` tags and apply a `no-details` class to all details in those browsers. It will also attach a click event that will toggle the open state. The CSS above will target the `no-details` class and the `open` attribute to hide/show the content of your `#!html
` tag. Just run the code after the HTML content is loaded. + + ```js + /** + * Converts details/summary tags into working elements in browsers that don't yet support them. + * @return {void} + */ + var spoilers = (function () { + + var isDetailsSupported = function () { + // https://mathiasbynens.be/notes/html5-details-jquery#comment-35 + // Detect if details is supported in the browser + var el = document.createElement("details"); + var fake = false; + + if (!("open" in el)) { + return false; + } + + var root = document.body || function () { + var de = document.documentElement; + fake = true; + return de.insertBefore(document.createElement("body"), de.firstElementChild || de.firstChild); + }(); + + el.innerHTML = "ab"; + el.style.display = "block"; + root.appendChild(el); + var diff = el.offsetHeight; + el.open = true; + diff = diff !== el.offsetHeight; + root.removeChild(el); + + if (fake) { + root.parentNode.removeChild(root); + } + + return diff; + }(); + + if (!isDetailsSupported) { + var blocks = document.querySelectorAll("details>summary"); + for (var i = 0; i < blocks.length; i++) { + var summary = blocks[i]; + var details = summary.parentNode; + + // Apply "no-details" to unsupported details tags + if (!details.className.match(new RegExp("(\\s|^)no-details(\\s|$)"))) { + details.className += " no-details"; + } + + summary.addEventListener("click", function (e) { + var node = e.target.parentNode; + if (node.hasAttribute("open")) { + node.removeAttribute("open"); + } else { + node.setAttribute("open", "open"); + } + }); + } + } + }); + ``` ## Examples diff --git a/docs/src/markdown/extensions/superfences.md b/docs/src/markdown/extensions/superfences.md index c28b48f28..4666f2bf3 100644 --- a/docs/src/markdown/extensions/superfences.md +++ b/docs/src/markdown/extensions/superfences.md @@ -205,29 +205,36 @@ As mentioned earlier, our flowchart elements have the `uml-flowchart` class assi In the below example we create an `onReady` function to execute the conversion when the HTML is loaded. We create a `convertUML` function that takes the class name to search for, the converter to use, and a settings object to feed into the converter. We then call `onReady` and feed it a callback function that will execute `convertUML` for flowcharts and for sequence diagrams. Notice that `convertUML` can handle both the `#!html
` format or the `#!html 
` format we mentioned earlier. +The actual `convertUML` function reads UML instructions from our element and sticks it in a div that gets appended to our main HTML content (in this case we look for the the `article` tag, but it could be anything, even `body`). We don't want to do it in place our UML instructions are because it might be under an element that is hiding it with `display: none` (like a `details` tag); it won't render correctly if its parent is not displayed. After we render the SVG, we insert it back where it belongs throwing away the original element that had the instructions. + ```js (function (document) { function convertUML(className, converter, settings) { var charts = document.querySelectorAll("pre." + className + ',div.' + className), + // Change article to whatever element your main Markdown content lives. + article = document.querySelectorAll("article"), arr = [], - i, j, maxItem, diagaram, text, curNode, - isPre; + i, j, maxItem, diagram, text, curNode, + isPre, el, parentEl, childEl; // Is there a settings object? if (settings === void 0) { settings = {}; } - // Make sure we are dealing with an array - for(i = 0, maxItem = charts.length; i < maxItem; i++) arr.push(charts[i]); - // Find the UML source element and get the text for (i = 0, maxItem = arr.length; i < maxItem; i++) { isPre = arr[i].tagName.toLowerCase() == 'pre'; + parentEl = arr[i]; + + el = document.createElement("div"); + el.className = className; + el.style.visibility = "hidden"; + el.style.position = "absolute"; + if (isPre) { // Handles

-                childEl = arr[i].firstChild;
-                parentEl = childEl.parentNode;
+                childEl = parentEl.firstChild;
                 text = "";
                 for (j = 0; j < childEl.childNodes.length; j++) {
                     curNode = childEl.childNodes[j];
@@ -237,23 +244,31 @@ In the below example we create an `onReady` function to execute the conversion w
                         break;
                     }
                 }
-                // Do UML conversion and replace source
-                el = document.createElement('div');
-                el.className = className;
-                parentEl.parentNode.insertBefore(el, parentEl);
-                parentEl.parentNode.removeChild(parentEl);
             } else {
                 // Handles 
- el = arr[i]; - text = el.textContent || el.innerText; - if (el.innerText){ - el.innerText = ''; + text = parentEl.textContent || parentEl.innerText; + if (parentEl.innerText){ + parentEl.innerText = ''; } else { - el.textContent = ''; + parentEl.textContent = ''; } } + + // Insert our new div at the end of our content to get general + // typset and page sizes as our parent might be `display:none` + // keeping us from getting the right sizes for our SVG. + // Our new div will be hidden via "visibility" and take no space + // via `poistion: absolute`. When we are all done, use the + // original node as a reference to insert our SVG back + // into the proper place, and then make our SVG visilbe again. + // Lastly, clean up the old node. + article[0].appendChild(el), diagram = converter.parse(text); diagram.drawSVG(el, settings); + el.style.visibility = "visible"; + el.style.position = "static"; + parentEl.parentNode.insertBefore(el, parentEl); + parentEl.parentNode.removeChild(parentEl); } }; diff --git a/docs/src/markdown/extensions/tasklist.md b/docs/src/markdown/extensions/tasklist.md index 55bff29c8..ab2f68328 100644 --- a/docs/src/markdown/extensions/tasklist.md +++ b/docs/src/markdown/extensions/tasklist.md @@ -76,69 +76,71 @@ Classes | Description `task-list-control` | This is attached to the `label` tag and represents the control object. `task-list-indicator` | This is attached to the `span` directly following the input and is used to style the visual indicator. -In order to style these we mainly remove the list type style and adjust the margins to align with normal list styles. - -```css -.markdown-body .task-list-item { - list-style-type: none !important; -} - -.markdown-body .task-list-item input[type="checkbox"] { - margin: 0 4px 0.25em -20px; - vertical-align: middle; -} -``` - -If custom check box icons are desired, custom styles can be used to give a unique look to the check marks. Below is a very simple CSS example that creates a light gray square with rounded corners and displays a green Unicode check mark when the control is checked. This can be adapted to use web fonts, images, etc. - -```css -.markdown-body .task-list-item { - list-style-type: none !important; -} - -.markdown-body .task-list-item input[type="checkbox"] { - margin: 0 4px 0.25em -20px; - vertical-align: middle; -} - -.markdown-body .task-list-control { - display: inline; /* Ensure label is inline incase theme sets it to block.*/ -} - -.markdown-body .task-list-control { - position: relative; - display: inline-block; - color: #555; - cursor: pointer; -} - -.markdown-body .task-list-control input[type="checkbox"] { - position: absolute; - opacity: 0; - z-index: -1; /* Put the input behind the label so it doesn't overlay text */ -} - -.markdown-body .task-list-indicator { - position: absolute; - top: -8px; - left: -18px; - display: block; - width: 14px; - height: 14px; - color: #eee; - background-color: #eee; - border-radius: .25rem; -} - -.markdown-body .task-list-control input[type="checkbox"]:checked + .task-list-indicator::before { - display: block; - margin-top: -4px; - margin-left: 2px; - font-size: 16px; - line-height: 1; - content: "✔"; - color: #1EBB52; -} -``` +??? settings "Example CSS" + + In order to style these we mainly remove the list type style and adjust the margins to align with normal list styles. + + ```css + .markdown-body .task-list-item { + list-style-type: none !important; + } + + .markdown-body .task-list-item input[type="checkbox"] { + margin: 0 4px 0.25em -20px; + vertical-align: middle; + } + ``` + + If custom check box icons are desired, custom styles can be used to give a unique look to the check marks. Below is a very simple CSS example that creates a light gray square with rounded corners and displays a green Unicode check mark when the control is checked. This can be adapted to use web fonts, images, etc. + + ```css + .markdown-body .task-list-item { + list-style-type: none !important; + } + + .markdown-body .task-list-item input[type="checkbox"] { + margin: 0 4px 0.25em -20px; + vertical-align: middle; + } + + .markdown-body .task-list-control { + display: inline; /* Ensure label is inline incase theme sets it to block.*/ + } + + .markdown-body .task-list-control { + position: relative; + display: inline-block; + color: #555; + cursor: pointer; + } + + .markdown-body .task-list-control input[type="checkbox"] { + position: absolute; + opacity: 0; + z-index: -1; /* Put the input behind the label so it doesn't overlay text */ + } + + .markdown-body .task-list-indicator { + position: absolute; + top: -8px; + left: -18px; + display: block; + width: 14px; + height: 14px; + color: #eee; + background-color: #eee; + border-radius: .25rem; + } + + .markdown-body .task-list-control input[type="checkbox"]:checked + .task-list-indicator::before { + display: block; + margin-top: -4px; + margin-left: 2px; + font-size: 16px; + line-height: 1; + content: "✔"; + color: #1EBB52; + } + ``` --8<-- "abbr.md" diff --git a/docs/src/markdown/index.md b/docs/src/markdown/index.md index 1010b2baa..18e44ee09 100644 --- a/docs/src/markdown/index.md +++ b/docs/src/markdown/index.md @@ -1,35 +1,114 @@ # PyMdown Extensions -# Available Extensions +## Usage PyMdown Extensions is a collection of extensions for Python Markdown. Keep in mind, the PyMdown extensions were designed to work with the default extensions, so your mileage may vary in regards to compatibility when paired with other 3rd party extensions. +All extensions are found under `pymdownx`. Assuming we wanted to specify the use of the MagicLink extension, we would include it in Python Markdown like so: + +``` +import markdown +text = "A link https://google.com" +html = markdown.markdown(text, ['pymdownx.magiclink']) +``` + +Check out documentation on each extension to learn more about how to configure and use each one. + !!! danger "Reminder" Please read the [Usage Notes](usage_notes.md) for information on extension compatibility and general notes to be aware of when using these extensions. -Extension | Name ----------------------------------------------------------- | ---- -[Arithmatex](extensions/arithmatex.md) | `pymdownx.arithmatex` -[B64](extensions/b64.md) | `pymdownx.b64` -[BetterEm](extensions/betterem.md) | `pymdownx.betterem` -[Caret](extensions/caret.md) | `pymdownx.caret` -[Critic](extensions/critic.md) | `pymdownx.critic` -[Emoji](extensions/emoji.md) | `pymdownx.emoji` -[EscapeAll](extensions/escapeall.md) | `pymdownx.escapeall` -[Extra](extensions/extra.md) | `pymdownx.extra` -[ExtraRawHTML](extensions/extrarawhtml.md) | `pymdownx.extrarawhtml` -[GitHub](extensions/github.md) | `pymdownx.github` -[Highlight](extensions/highlight.md) | `pymdownx.highlight` -[Keys](extensions/keys.md) | `pymdownx.keys` -[MagicLink](extensions/magiclink.md) | `pymdownx.magiclink` -[Mark](extensions/mark.md) | `pymdownx.mark` -[ProgressBar](extensions/progressbar.md) | `pymdownx.progressbar` -[SmartSymbols](extensions/smartsymbols.md) | `pymdownx.smartsymbols` -[Snippets](extensions/snippets.md) | `pymdownx.snippets` -[Spoilers](extensions/spoilers.md) | `pymdownx.spoilers` -[SuperFences](extensions/superfences.md) | `pymdownx.superfences` -[Tasklist](extensions/tasklist.md) | `pymdownx.tasklist` -[Tilde](extensions/tilde.md) | `pymdownx.tilde` -[InlineHilite](extensions/inlinehilite.md) | `pymdownx.inlinehilite` -[PathConverter](extensions/pathconverter.md) | `pymdownx.pathconverter` -[PlainHTML](extensions/plainhtml.md) | `pymdownx.plainhtml` +## Extensions + +??? summary "Arithmatex" + [Arithmatex](extensions/arithmatex.md) is an extension that preserves LaTeX math equations ($\frac{\sqrt x}{y^3}$) during the Markdown conversion process so that they can be used with [MathJax][mathjax]. + +??? summary "B64" + [B64](extensions/b64.md) converts all local images in a document to base64 encoding and embeds them in the document. + +??? summary "BetterEm" + [BetterEm](extensions/betterem.md) is a different approach to **emphasis** than Python Markdown's default. It works similar but handles certain corner cases differently. + +??? summary "Caret" + [Caret](extensions/caret.md) is an extension that is syntactically built around the `^` character. It adds support for inserting super^scripts^ and adds an easy way to place ^^text^^ in an `#!html ` tag. + +??? summary "Critic" + [Critic](extensions/critic.md) adds handling and support of [Critic Markup][critic-markup]. + +??? summary "Emoji" + [Emoji](extensions/emoji.md) makes adding emoji via Markdown easy :smile:. + +??? summary "EscapeAll" + [EscapeAll](extensions/escapeall.md) allows the escaping of any character, some with additional effects. Check it out to learn more. + +??? summary "Extra" + [Extra](extensions/extra.md) is just like Python Markdown's Extra package except it uses PyMdown Extensions to substitute similar extensions. + +??? summary "ExtraRawHTML" + [ExtraRawHTML](extensions/extrarawhtml.md) exposes Python Markdown's feature of parsing markdown in HTML blocks. No longer do you have to include all of Extra when all you want to do is parse Markdown in HTML blocks. + +??? summary "GitHub" + [GitHub](extensions/github.md) uses extensions from Python Markdown and PyMdown Extensions to give a GitHub-ish feel. + +??? summary "Highlight" + [Highlight](extensions/highlight.md) allows you to configure the syntax highlighting of SuperFences and InlineHilite. Also passes standard Markdown indented code blocks through the syntax highlighter. + +??? summary "Keys" + [Keys](extensions/keys.md) makes inserting key inputs into documents as easy as pressing ++ctrl+alt+delete++. + +??? summary "MagicLink" + [MagicLink](extensions/magiclink.md) linkafies URL and email links without having to wrap them in Markdown syntax. + +??? summary "Mark" + [Mark](extensions/mark.md) allows you to ==mark== words easily. + +??? summary "ProgressBar" + [ProgressBar](extensions/progressbar.md) creates progress bars quick and easy. + + [== 75%]{: .success} + +??? summary "SmartSymbols" + [SmartSymbols](extensions/smartsymbols.md) inserts commonly used Unicode characters via simple ASCII representations: `=/=` --> =/=. + +??? summary "Snippets" + [Snippets](extensions/snippets.md) include other Markdown or HTML snippets into the current Markdown file being parsed. + +??? summary "Spoilers" + [Spoilers](extensions/spoilers.md) creates collapsible elements with `#!html
` tags. + +??? summary "SuperFences" + [SuperFences](extensions/superfences.md) is like Python Markdown's fences, but better. Nest fences under lists, admonitions, and other syntaxes. Also create special custom fences for content like UML. + + ```sequence + Title: Here is a title + A->B: Normal line + B-->C: Dashed line + C->>D: Open arrow + D-->>A: Dashed open arrow + ``` + +??? summary "Tasklist" + [Tasklist](extensions/tasklist.md) allows inserting lists with check boxes. + + - [x] eggs + - [x] bread + - [ ] milk + +??? summary "Tilde" + [Tilde](extensions/tilde.md) is syntactically built around the `~` character. It adds support for inserting sub^scripts^ and adds an easy way to place ~~text~~ in a `#!html ` tag. + +??? summary "InlineHilite" + [InlineHilite](extensions/inlinehilite.md) highlights inline code: `#!py from module import function as func`. + +??? summary "PathConverter" + [PathConverter](extensions/pathconverter.md) convert paths to absolute or relative to a base path. + +??? summary "PlainHTML" + [PlainHTML](extensions/plainhtml.md) can strip out HTML comments and specific tag attributes. + +--8<-- +refs.md + +uml.md + +mathjax.md +--8<-- diff --git a/docs/src/mkdocs.yml b/docs/src/mkdocs.yml index 6d9089a86..3e2e3b575 100644 --- a/docs/src/mkdocs.yml +++ b/docs/src/mkdocs.yml @@ -101,5 +101,4 @@ extra: extra_css: - extra.css extra_javascript: - - https://cdn.jsdelivr.net/clipboard.js/1.6.1/clipboard.min.js - extra.js diff --git a/docs/src/scss/_clipboardjs.scss b/docs/src/scss/_clipboardjs.scss index 871001e3d..3158e7419 100644 --- a/docs/src/scss/_clipboardjs.scss +++ b/docs/src/scss/_clipboardjs.scss @@ -38,6 +38,7 @@ pre, code { + min-width: auto; display: block; position: static; padding: 1rem 1.2rem 0.8rem; diff --git a/docs/src/scss/_progressbar.scss b/docs/src/scss/_progressbar.scss index 1a4e3750f..a634f7043 100644 --- a/docs/src/scss/_progressbar.scss +++ b/docs/src/scss/_progressbar.scss @@ -1,96 +1,71 @@ -/* Colors */ -$pb-100: #A6D796; -$pb-80: #C6D796; -$pb-60: #D7C896; -$pb-40: #D7A796; -$pb-20: #D796A6; -$pb-0: #C25F77; -$pg-default: #96C6D7; -$pb-bg: #EDEDED; - -/* Label */ -$pb-inset-shadow: rgba(0, 0, 0, 0.1); -$pb-label: #333333; -$pb-label-emphasis: #FEFEFE; -$pb-label-shadow: #000000; - -/* Meter bevel */ -$pb-top-bevel: rgba(255, 255, 255, 0.5); -$pb-bottom-bevel: rgba(0, 0, 0, 0.1); - /* Stripes */ -$pb-stripe: rgba(255, 255, 255, 0.4); - -/* Gloss */ -$pb-gloss-top: rgba(255, 255, 255, 0.7); -$pb-gloss-bottom: rgba(0, 0, 0, 0.05); +$pb-stripe: transparentize($clr-white, 0.2); .md-typeset { /* Progress Bars */ - .progress { - display: block; - width: 30rem; - margin: 0.3rem 0; - height: 2.4rem; - border-radius: 0.3rem; - background-color: $pb-bg; - position: relative; - box-shadow: inset -0.08rem 0.08rem 0.5rem $pb-inset-shadow; - } - .progress-label { position: absolute; text-align: center; + color: transparentize($clr-black, 0.5); font-weight: 700; width: 100%; margin: 0; - line-height: 2.4rem !important; - color: $pb-label; - text-shadow: - 0.1rem 0.1rem 0 $pb-label-emphasis, - -0.1rem -0.1rem 0 $pb-label-emphasis, - -0.1rem 0.1rem 0 $pb-label-emphasis, - 0.1rem -0.1rem 0 $pb-label-emphasis, - 0 0.1rem 0 $pb-label-emphasis, - 0 -0.1rem 0 $pb-label-emphasis, - 0.1rem 0 0 $pb-label-emphasis, - -0.1rem 0 0 $pb-label-emphasis, - 0.1rem 0.1rem 0.2rem $pb-label-shadow; + line-height: 1.2rem; white-space: nowrap; overflow: hidden; } .progress-bar { - height: 2.4rem; + height: 1.2rem; float: left; - border-radius: 0.3rem; - background-color: $pg-default; - box-shadow: - inset 0 0.08rem 0 $pb-top-bevel, - inset 0 -0.08rem 0 $pb-bottom-bevel; - background-size: 3rem 3rem; - background-image: - linear-gradient( - 135deg, - $pb-stripe 27%, - transparent 27%, - transparent 52%, - $pb-stripe 52%, - $pb-stripe 77%, - transparent 77%, - transparent - ); + background-color: $clr-blue-a400; + } + + .progress { + display: block; + width: 100%; + margin: 0.5rem 0; + height: 1.2rem; + background-color: $clr-grey-200; + position: relative; + + &.thin { + margin-top: 0.9rem; + height: 0.4rem; + + .progress-label { + margin-top: -0.4rem; + } + + .progress-bar { + height: 0.4rem; + } + } + + &.candystripe .progress-bar { + background-size: 2rem 2rem; + background-image: + linear-gradient( + 135deg, + $pb-stripe 27%, + transparent 27%, + transparent 52%, + $pb-stripe 52%, + $pb-stripe 77%, + transparent 77%, + transparent + ); + } } - // Build primary colors @each $percent, $color in ( - "100": $pb-100, - "80": $pb-80, - "60": $pb-60, - "40": $pb-40, - "20": $pb-20, - "0": $pb-0 + "100": $clr-green-a400, + "80": $clr-green-a400, + "60": $clr-yellow-700, + "40": $clr-orange-a400, + "20": $clr-red-a200, + "0": $clr-red-a400 ) { .progress-#{$percent}plus { .progress-bar { @@ -99,6 +74,24 @@ $pb-gloss-bottom: rgba(0, 0, 0, 0.05); } } + @each $names, $color in ( + note seealso: $clr-blue-a400, + summary tldr: $clr-light-blue-a400, + tip hint important : $clr-teal-a700, + success check done: $clr-green-a400, + warning caution attention: $clr-orange-a400, + failure fail missing: $clr-red-a200, + danger error: $clr-red-a400, + bug: $clr-pink-a400, + quote cite: $clr-grey + ) { + .progress.#{nth($names, 1)} { + .progress-bar { + background-color: $color; + } + } + } + /* Stripe animation */ .candystripe-animate { .progress-bar{ @@ -115,13 +108,4 @@ $pb-gloss-bottom: rgba(0, 0, 0, 0.05); background-position: 6rem 0; } } - - /* Gloss */ - .gloss { - .progress-bar { - box-shadow: - inset 0 0.4rem 1.2rem $pb-gloss-top, - inset 0 -1.2rem 0 $pb-gloss-bottom; - } - } } diff --git a/docs/src/scss/_spoilers.scss b/docs/src/scss/_spoilers.scss index 72cb0948e..801e6745a 100644 --- a/docs/src/scss/_spoilers.scss +++ b/docs/src/scss/_spoilers.scss @@ -53,7 +53,8 @@ failure fail missing: $clr-red-a200 "clear", danger error: $clr-red-a400 "flash_on", bug: $clr-pink-a400 "bug_report", - quote cite: $clr-grey "format_quote" + quote cite: $clr-grey "format_quote", + settings: $clr-purple-a700 "settings" ) { $tint: nth($appearance, 1); $icon: nth($appearance, 2); @@ -61,8 +62,10 @@ &.#{nth($names, 1)} { @include z-depth(2); + position: relative; padding: 1.2rem; margin-bottom: 1rem; + overflow: hidden; *:nth-child(2) { margin-top: 0; @@ -80,19 +83,29 @@ background-color: $tint; color: $clr-white; - &::after { + &::after, + &::before { position: absolute; - top: 0.5rem; - right: 1rem; + top: 0.7rem; font-family: "Material Icons"; - font-size: 1.5rem; + font-size: 2rem; + font-style: normal; + font-variant: normal; + font-weight: 400; + line-height: 1; + text-transform: none; + white-space: nowrap; + speak: none; + word-wrap: normal; + direction: ltr; + } + + &::after { + right: 1rem; } &::before { - position: absolute; - top: 0.5rem; left: 1rem; - font-family: "Material Icons"; content: $icon; } } diff --git a/docs/src/scss/_uml.scss b/docs/src/scss/_uml.scss index 49cf1b682..769615e6d 100644 --- a/docs/src/scss/_uml.scss +++ b/docs/src/scss/_uml.scss @@ -5,7 +5,7 @@ .uml-flowchart { width: 100%; overflow: auto; - padding: 1rem 1.2rem 0.8rem; + padding: 1rem 0; svg { max-width: initial; diff --git a/docs/theme/extra-0d49409391.js b/docs/theme/extra-0d49409391.js new file mode 100644 index 000000000..8441c39f3 --- /dev/null +++ b/docs/theme/extra-0d49409391.js @@ -0,0 +1 @@ +!function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=4)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(e.isSupported()){for(var t=document.querySelectorAll("div.codehilite>pre,pre.codehilite>code"),n=0;nab",e.style.display="block",n.appendChild(e);var r=e.offsetHeight;return e.open=!0,r=r!==e.offsetHeight,n.removeChild(e),t&&n.parentNode.removeChild(n),r}())for(var e=document.querySelectorAll("details>summary"),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=document.body.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,r.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(document.body.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,r.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":o(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),e}();e.exports=a})},{select:5}],8:[function(t,n,r){!function(o,i){if("function"==typeof e&&e.amd)e(["module","./clipboard-action","tiny-emitter","good-listener"],i);else if(void 0!==r)i(n,t("./clipboard-action"),t("tiny-emitter"),t("good-listener"));else{var a={exports:{}};i(a,o.clipboardAction,o.tinyEmitter,o.goodListener),o.clipboard=a.exports}}(this,function(e,t,n,r){function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==(void 0===t?"undefined":l(t))&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":l(t)));e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function u(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}var s=o(t),f=o(n),d=o(r),p=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText}},{key:"listenClick",value:function(e){var t=this;this.listener=(0,d.default)(e,"click",function(e){return t.onClick(e)})}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new s.default({action:this.action(t),target:this.target(t),text:this.text(t),trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return u("action",e)}},{key:"defaultTarget",value:function(e){var t=u("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return u("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach(function(e){n=n&&!!document.queryCommandSupported(e)}),n}}]),t}(f.default);e.exports=h})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)})},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var o=n(3),i=r(o),a=n(2),l=r(a),c=n(0),u=r(c),s=n(1),f=r(s);!function(){!function(e){document.addEventListener?document.addEventListener("DOMContentLoaded",e):document.attachEvent("onreadystatechange",function(){"interactive"===document.readyState&&e()})}(function(){(0,f.default)(),void 0!==i.default&&i.default.isSupported()&&(0,u.default)(i.default),"undefined"!=typeof flowchart&&(0,l.default)(flowchart,"uml-flowchart"),"undefined"!=typeof Diagram&&(0,l.default)(Diagram,"uml-sequence-diagram",{theme:"simple"})})}()}]); \ No newline at end of file diff --git a/docs/theme/extra-2c36206460.js b/docs/theme/extra-2c36206460.js deleted file mode 100644 index 219a8d0c4..000000000 --- a/docs/theme/extra-2c36206460.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){"use strict";e="default"in e?e.default:e;var t=function(e,t,r){for(var n=document.querySelectorAll("pre."+t+",div."+t),i=void 0===r?{}:r,a=0;apre,pre.codehilite>code"),r=0;ra
b",e.style.display="block",r.appendChild(e);var n=e.offsetHeight;return e.open=!0,n=n!==e.offsetHeight,r.removeChild(e),t&&r.parentNode.removeChild(r),n}())for(var e=document.querySelectorAll("details>summary"),t=0;tcode{display:block;padding:1rem 1.2rem;overflow:auto}.md-typeset .codehilite{position:relative;padding:0;overflow:visible}.md-typeset .codehilite[id]:before{display:inline}.md-typeset .codehilite code,.md-typeset .codehilite pre{display:block;position:static;padding:1rem 1.2rem .8rem;overflow:auto}.md-typeset>.codehilitetable .codehilite{padding:0}.md-typeset .clip-btn{overflow:visible;display:inline-block;position:absolute;top:.2rem;right:.2rem;width:3.2rem;height:3.2rem;-webkit-transition:opacity .3s;transition:opacity .3s;border-radius:50%;background-color:#bdbdbd;color:#fff;cursor:pointer;opacity:0}.md-typeset .clip-btn .md-icon--clipboard{position:relative;top:.1rem;font-size:1.8rem}.md-typeset .clip-btn .md-icon--clipboard:before{content:"assignment"}.md-typeset .codehilite:hover .clip-btn{-webkit-transition:opacity .3s;transition:opacity .3s;opacity:.4}.md-typeset .codehilite:hover .clip-btn:hover{-webkit-box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12),0 3px 3px -2px rgba(0,0,0,.4);box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12),0 3px 3px -2px rgba(0,0,0,.4);-webkit-transition:opacity .1s;transition:opacity .1s;opacity:1}.md-typeset .clip-tip:after{position:absolute;top:.3rem;left:-.5rem;padding:.6rem 1rem;-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition:opacity .2s;transition:opacity .2s;border-radius:.2rem;background:#424242;color:#fff;font-size:.66667em;font-weight:700;white-space:nowrap;content:attr(aria-label);opacity:1;visibility:hidden}.md-typeset .clip-tip:hover:after{display:block;opacity:.9;visibility:visible}[data-md-color-primary=red] .codehilite:hover .clip-btn:hover{background-color:#ef5350}[data-md-color-primary=pink] .codehilite:hover .clip-btn:hover{background-color:#e91e63}[data-md-color-primary=purple] .codehilite:hover .clip-btn:hover{background-color:#ab47bc}[data-md-color-primary=deep-purple] .codehilite:hover .clip-btn:hover{background-color:#7e57c2}[data-md-color-primary=indigo] .codehilite:hover .clip-btn:hover{background-color:#3f51b5}[data-md-color-primary=blue] .codehilite:hover .clip-btn:hover{background-color:#2196f3}[data-md-color-primary=light-blue] .codehilite:hover .clip-btn:hover{background-color:#03a9f4}[data-md-color-primary=cyan] .codehilite:hover .clip-btn:hover{background-color:#00bcd4}[data-md-color-primary=teal] .codehilite:hover .clip-btn:hover{background-color:#009688}[data-md-color-primary=green] .codehilite:hover .clip-btn:hover{background-color:#4caf50}[data-md-color-primary=light-green] .codehilite:hover .clip-btn:hover{background-color:#7cb342}[data-md-color-primary=lime] .codehilite:hover .clip-btn:hover{background-color:#c0ca33}[data-md-color-primary=yellow] .codehilite:hover .clip-btn:hover{background-color:#f9a825}[data-md-color-primary=amber] .codehilite:hover .clip-btn:hover{background-color:#ffb300}[data-md-color-primary=orange] .codehilite:hover .clip-btn:hover{background-color:#fb8c00}[data-md-color-primary=deep-orange] .codehilite:hover .clip-btn:hover{background-color:#ff7043}[data-md-color-primary=brown] .codehilite:hover .clip-btn:hover{background-color:#795548}[data-md-color-primary=grey] .codehilite:hover .clip-btn:hover{background-color:#757575}[data-md-color-primary=blue-grey] .codehilite:hover .clip-btn:hover{background-color:#546e7a}.md-typeset .keys kbd:after,.md-typeset .keys kbd:before{color:#bdbdbd;font-weight:400;position:relative;font-family:sans-serif;-webkit-font-smoothing:initial;-moz-osx-font-smoothing:initial;margin:0}.md-typeset .keys span{color:#bdbdbd;padding:0 .2rem}.md-typeset .keys .key-backspace:before{content:"←";padding-left:.2rem}.md-typeset .keys .key-command:before{content:"⌘";padding-left:.2rem}.md-typeset .keys .key-windows:before{content:"⊞";padding-left:.2rem}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-left:.2rem}.md-typeset .keys .key-control:before{content:"⌃";padding-left:.2rem}.md-typeset .keys .key-meta:before{content:"◆";padding-left:.2rem}.md-typeset .keys .key-shift:before{content:"⇧";padding-left:.2rem}.md-typeset .keys .key-option:before{content:"⌥";padding-left:.2rem}.md-typeset .keys .key-tab:after{content:"↹";padding-left:.2rem}.md-typeset .keys .key-num-enter:after{content:"↵";padding-left:.2rem}.md-typeset .keys .key-enter:after{content:"↩";padding-left:.2rem}.md-typeset .uml-flowchart,.md-typeset .uml-sequence-diagram{width:100%;overflow:auto;padding:1rem 1.2rem .8rem}.md-typeset .uml-flowchart svg,.md-typeset .uml-sequence-diagram svg{max-width:none}.md-typeset a>code{margin:0 .29412em;padding:.07353em 0;background-color:hsla(0,0%,93%,.5);border-radius:.2rem;-webkit-box-shadow:.29412em 0 0 hsla(0,0%,93%,.5),-.29412em 0 0 hsla(0,0%,93%,.5);box-shadow:.29412em 0 0 hsla(0,0%,93%,.5),-.29412em 0 0 hsla(0,0%,93%,.5);-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset td code{word-break:normal}.md-typeset .headerlink{vertical-align:middle;font:normal 400 2rem Material Icons}.md-typeset h2 .headerlink{margin-top:-.4rem}.md-typeset h3 .headerlink{margin-top:-.3rem}.md-typeset h4 .headerlink,.md-typeset h5 .headerlink,.md-typeset h6 .headerlink{margin-top:-.2rem}.md-typeset .progress{display:block;width:30rem;margin:.3rem 0;height:2.4rem;border-radius:.3rem;background-color:#ededed;position:relative;-webkit-box-shadow:inset -.08rem .08rem .5rem rgba(0,0,0,.1);box-shadow:inset -.08rem .08rem .5rem rgba(0,0,0,.1)}.md-typeset .progress-label{position:absolute;text-align:center;font-weight:700;width:100%;margin:0;line-height:2.4rem!important;color:#333;text-shadow:.1rem .1rem 0 #fefefe,-.1rem -.1rem 0 #fefefe,-.1rem .1rem 0 #fefefe,.1rem -.1rem 0 #fefefe,0 .1rem 0 #fefefe,0 -.1rem 0 #fefefe,.1rem 0 0 #fefefe,-.1rem 0 0 #fefefe,.1rem .1rem .2rem #000;white-space:nowrap;overflow:hidden}.md-typeset .progress-bar{height:2.4rem;float:left;border-radius:.3rem;background-color:#96c6d7;-webkit-box-shadow:inset 0 .08rem 0 hsla(0,0%,100%,.5),inset 0 -.08rem 0 rgba(0,0,0,.1);box-shadow:inset 0 .08rem 0 hsla(0,0%,100%,.5),inset 0 -.08rem 0 rgba(0,0,0,.1);background-size:3rem 3rem;background-image:linear-gradient(135deg,hsla(0,0%,100%,.4) 27%,transparent 0,transparent 52%,hsla(0,0%,100%,.4) 0,hsla(0,0%,100%,.4) 77%,transparent 0,transparent)}.md-typeset .progress-100plus .progress-bar{background-color:#a6d796}.md-typeset .progress-80plus .progress-bar{background-color:#c6d796}.md-typeset .progress-60plus .progress-bar{background-color:#d7c896}.md-typeset .progress-40plus .progress-bar{background-color:#d7a796}.md-typeset .progress-20plus .progress-bar{background-color:#d796a6}.md-typeset .progress-0plus .progress-bar{background-color:#c25f77}.md-typeset .candystripe-animate .progress-bar{-webkit-animation:a 3s linear infinite;animation:a 3s linear infinite}@-webkit-keyframes a{0%{background-position:0 0}to{background-position:6rem 0}}@keyframes a{0%{background-position:0 0}to{background-position:6rem 0}}.md-typeset .gloss .progress-bar{-webkit-box-shadow:inset 0 .4rem 1.2rem hsla(0,0%,100%,.7),inset 0 -1.2rem 0 rgba(0,0,0,.05);box-shadow:inset 0 .4rem 1.2rem hsla(0,0%,100%,.7),inset 0 -1.2rem 0 rgba(0,0,0,.05)}.md-typeset details{display:block;margin:1em 0}.md-typeset details[open]>summary:before{content:"\25BC"}.md-typeset details summary{display:block;cursor:pointer}.md-typeset details summary:before{content:"\25B6";padding-right:.5em}.md-typeset details summary::-webkit-details-marker{display:none}.md-typeset details.no-details:not([open])>*{display:none}.md-typeset details.no-details:not([open])>summary{display:block}.md-typeset details.note{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);padding:1.2rem;margin-bottom:1rem}.md-typeset details.note :nth-child(2){margin-top:0}.md-typeset details.note :last-child{margin-bottom:0}.md-typeset details.note>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#2979ff;color:#fff}.md-typeset details.note>summary:after{position:absolute;top:.5rem;right:1rem;font-family:Material Icons;font-size:1.5rem}.md-typeset details.note>summary:before{position:absolute;top:.5rem;left:1rem;font-family:Material Icons;content:"edit"}.md-typeset details.note[open]>summary{margin-bottom:1.2rem}.md-typeset details.note[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.note:not([open]){padding-bottom:0}.md-typeset details.note:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.summary{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);padding:1.2rem;margin-bottom:1rem}.md-typeset details.summary :nth-child(2){margin-top:0}.md-typeset details.summary :last-child{margin-bottom:0}.md-typeset details.summary>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#00b0ff;color:#fff}.md-typeset details.summary>summary:after{position:absolute;top:.5rem;right:1rem;font-family:Material Icons;font-size:1.5rem}.md-typeset details.summary>summary:before{position:absolute;top:.5rem;left:1rem;font-family:Material Icons;content:"subject"}.md-typeset details.summary[open]>summary{margin-bottom:1.2rem}.md-typeset details.summary[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.summary:not([open]){padding-bottom:0}.md-typeset details.summary:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.tip{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);padding:1.2rem;margin-bottom:1rem}.md-typeset details.tip :nth-child(2){margin-top:0}.md-typeset details.tip :last-child{margin-bottom:0}.md-typeset details.tip>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#00bfa5;color:#fff}.md-typeset details.tip>summary:after{position:absolute;top:.5rem;right:1rem;font-family:Material Icons;font-size:1.5rem}.md-typeset details.tip>summary:before{position:absolute;top:.5rem;left:1rem;font-family:Material Icons;content:"whatshot"}.md-typeset details.tip[open]>summary{margin-bottom:1.2rem}.md-typeset details.tip[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.tip:not([open]){padding-bottom:0}.md-typeset details.tip:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.success{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);padding:1.2rem;margin-bottom:1rem}.md-typeset details.success :nth-child(2){margin-top:0}.md-typeset details.success :last-child{margin-bottom:0}.md-typeset details.success>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#00e676;color:#fff}.md-typeset details.success>summary:after{position:absolute;top:.5rem;right:1rem;font-family:Material Icons;font-size:1.5rem}.md-typeset details.success>summary:before{position:absolute;top:.5rem;left:1rem;font-family:Material Icons;content:"done"}.md-typeset details.success[open]>summary{margin-bottom:1.2rem}.md-typeset details.success[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.success:not([open]){padding-bottom:0}.md-typeset details.success:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.warning{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);padding:1.2rem;margin-bottom:1rem}.md-typeset details.warning :nth-child(2){margin-top:0}.md-typeset details.warning :last-child{margin-bottom:0}.md-typeset details.warning>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#ff9100;color:#fff}.md-typeset details.warning>summary:after{position:absolute;top:.5rem;right:1rem;font-family:Material Icons;font-size:1.5rem}.md-typeset details.warning>summary:before{position:absolute;top:.5rem;left:1rem;font-family:Material Icons;content:"warning"}.md-typeset details.warning[open]>summary{margin-bottom:1.2rem}.md-typeset details.warning[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.warning:not([open]){padding-bottom:0}.md-typeset details.warning:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.failure{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);padding:1.2rem;margin-bottom:1rem}.md-typeset details.failure :nth-child(2){margin-top:0}.md-typeset details.failure :last-child{margin-bottom:0}.md-typeset details.failure>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#ff5252;color:#fff}.md-typeset details.failure>summary:after{position:absolute;top:.5rem;right:1rem;font-family:Material Icons;font-size:1.5rem}.md-typeset details.failure>summary:before{position:absolute;top:.5rem;left:1rem;font-family:Material Icons;content:"clear"}.md-typeset details.failure[open]>summary{margin-bottom:1.2rem}.md-typeset details.failure[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.failure:not([open]){padding-bottom:0}.md-typeset details.failure:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.danger{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);padding:1.2rem;margin-bottom:1rem}.md-typeset details.danger :nth-child(2){margin-top:0}.md-typeset details.danger :last-child{margin-bottom:0}.md-typeset details.danger>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#ff1744;color:#fff}.md-typeset details.danger>summary:after{position:absolute;top:.5rem;right:1rem;font-family:Material Icons;font-size:1.5rem}.md-typeset details.danger>summary:before{position:absolute;top:.5rem;left:1rem;font-family:Material Icons;content:"flash_on"}.md-typeset details.danger[open]>summary{margin-bottom:1.2rem}.md-typeset details.danger[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.danger:not([open]){padding-bottom:0}.md-typeset details.danger:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.bug{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);padding:1.2rem;margin-bottom:1rem}.md-typeset details.bug :nth-child(2){margin-top:0}.md-typeset details.bug :last-child{margin-bottom:0}.md-typeset details.bug>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#f50057;color:#fff}.md-typeset details.bug>summary:after{position:absolute;top:.5rem;right:1rem;font-family:Material Icons;font-size:1.5rem}.md-typeset details.bug>summary:before{position:absolute;top:.5rem;left:1rem;font-family:Material Icons;content:"bug_report"}.md-typeset details.bug[open]>summary{margin-bottom:1.2rem}.md-typeset details.bug[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.bug:not([open]){padding-bottom:0}.md-typeset details.bug:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.quote{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);padding:1.2rem;margin-bottom:1rem}.md-typeset details.quote :nth-child(2){margin-top:0}.md-typeset details.quote :last-child{margin-bottom:0}.md-typeset details.quote>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#9e9e9e;color:#fff}.md-typeset details.quote>summary:after{position:absolute;top:.5rem;right:1rem;font-family:Material Icons;font-size:1.5rem}.md-typeset details.quote>summary:before{position:absolute;top:.5rem;left:1rem;font-family:Material Icons;content:"format_quote"}.md-typeset details.quote[open]>summary{margin-bottom:1.2rem}.md-typeset details.quote[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.quote:not([open]){padding-bottom:0}.md-typeset details.quote:not([open])>summary:after{content:"keyboard_arrow_left"}@media only screen and (max-width:44.9375em){.md-typeset pre{padding:0}.md-typeset pre>code{padding:1rem 1.6rem}.md-typeset>.codehilite{padding:0}.md-typeset>.codehilite code,.md-typeset>.codehilite pre{padding:1rem 1.6rem .8rem}.md-typeset>.codehilitetable .codehilite{padding:0}.md-typeset>.codehilitetable .codehilite>pre{padding:1rem 1.6rem}}@media only screen and (min-width:76.1876em){.md-typeset .headerlink{float:left;margin-left:-2.4rem}.md-typeset h2 .headerlink{margin-top:.6rem}.md-typeset h3 .headerlink{margin-top:.4rem}.md-typeset h4 .headerlink{margin-top:.2rem}.md-typeset h5 .headerlink,.md-typeset h6 .headerlink{margin-top:0}} \ No newline at end of file diff --git a/docs/theme/extra-effadd97dd.css b/docs/theme/extra-effadd97dd.css new file mode 100644 index 000000000..fb760e952 --- /dev/null +++ b/docs/theme/extra-effadd97dd.css @@ -0,0 +1 @@ +@charset "UTF-8";.md-header .md-icon.md-icon--home:before{content:"description"}[data-md-color-accent=red] .md-typeset a:active,[data-md-color-accent=red] .md-typeset a:hover{color:#ff1744}[data-md-color-accent=pink] .md-typeset a:active,[data-md-color-accent=pink] .md-typeset a:hover{color:#f50057}[data-md-color-accent=purple] .md-typeset a:active,[data-md-color-accent=purple] .md-typeset a:hover{color:#e040fb}[data-md-color-accent=deep-purple] .md-typeset a:active,[data-md-color-accent=deep-purple] .md-typeset a:hover{color:#7c4dff}[data-md-color-accent=indigo] .md-typeset a:active,[data-md-color-accent=indigo] .md-typeset a:hover{color:#536dfe}[data-md-color-accent=blue] .md-typeset a:active,[data-md-color-accent=blue] .md-typeset a:hover{color:#2962ff}[data-md-color-accent=light-blue] .md-typeset a:active,[data-md-color-accent=light-blue] .md-typeset a:hover{color:#40c4ff}[data-md-color-accent=cyan] .md-typeset a:active,[data-md-color-accent=cyan] .md-typeset a:hover{color:#00e5ff}[data-md-color-accent=teal] .md-typeset a:active,[data-md-color-accent=teal] .md-typeset a:hover{color:#00bfa5}[data-md-color-accent=green] .md-typeset a:active,[data-md-color-accent=green] .md-typeset a:hover{color:#00c853}[data-md-color-accent=light-green] .md-typeset a:active,[data-md-color-accent=light-green] .md-typeset a:hover{color:#64dd17}[data-md-color-accent=lime] .md-typeset a:active,[data-md-color-accent=lime] .md-typeset a:hover{color:#aeea00}[data-md-color-accent=yellow] .md-typeset a:active,[data-md-color-accent=yellow] .md-typeset a:hover{color:#ffd600}[data-md-color-accent=amber] .md-typeset a:active,[data-md-color-accent=amber] .md-typeset a:hover{color:#ffab00}[data-md-color-accent=orange] .md-typeset a:active,[data-md-color-accent=orange] .md-typeset a:hover{color:#ff9100}[data-md-color-accent=deep-orange] .md-typeset a:active,[data-md-color-accent=deep-orange] .md-typeset a:hover{color:#ff6e40}.md-typeset pre{position:relative;padding:0;overflow:visible}.md-typeset pre[id]:before{display:inline}.md-typeset pre>code{display:block;padding:1rem 1.2rem;overflow:auto}.md-typeset .codehilite{position:relative;padding:0;overflow:visible}.md-typeset .codehilite[id]:before{display:inline}.md-typeset .codehilite code,.md-typeset .codehilite pre{min-width:auto;display:block;position:static;padding:1rem 1.2rem .8rem;overflow:auto}.md-typeset>.codehilitetable .codehilite{padding:0}.md-typeset .clip-btn{overflow:visible;display:inline-block;position:absolute;top:.2rem;right:.2rem;width:3.2rem;height:3.2rem;-webkit-transition:opacity .3s;transition:opacity .3s;border-radius:50%;background-color:#bdbdbd;color:#fff;cursor:pointer;opacity:0}.md-typeset .clip-btn .md-icon--clipboard{position:relative;top:.1rem;font-size:1.8rem}.md-typeset .clip-btn .md-icon--clipboard:before{content:"assignment"}.md-typeset .codehilite:hover .clip-btn{-webkit-transition:opacity .3s;transition:opacity .3s;opacity:.4}.md-typeset .codehilite:hover .clip-btn:hover{-webkit-box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12),0 3px 3px -2px rgba(0,0,0,.4);box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12),0 3px 3px -2px rgba(0,0,0,.4);-webkit-transition:opacity .1s;transition:opacity .1s;opacity:1}.md-typeset .clip-tip:after{position:absolute;top:.3rem;left:-.5rem;padding:.6rem 1rem;-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition:opacity .2s;transition:opacity .2s;border-radius:.2rem;background:#424242;color:#fff;font-size:.66667em;font-weight:700;white-space:nowrap;content:attr(aria-label);opacity:1;visibility:hidden}.md-typeset .clip-tip:hover:after{display:block;opacity:.9;visibility:visible}[data-md-color-primary=red] .codehilite:hover .clip-btn:hover{background-color:#ef5350}[data-md-color-primary=pink] .codehilite:hover .clip-btn:hover{background-color:#e91e63}[data-md-color-primary=purple] .codehilite:hover .clip-btn:hover{background-color:#ab47bc}[data-md-color-primary=deep-purple] .codehilite:hover .clip-btn:hover{background-color:#7e57c2}[data-md-color-primary=indigo] .codehilite:hover .clip-btn:hover{background-color:#3f51b5}[data-md-color-primary=blue] .codehilite:hover .clip-btn:hover{background-color:#2196f3}[data-md-color-primary=light-blue] .codehilite:hover .clip-btn:hover{background-color:#03a9f4}[data-md-color-primary=cyan] .codehilite:hover .clip-btn:hover{background-color:#00bcd4}[data-md-color-primary=teal] .codehilite:hover .clip-btn:hover{background-color:#009688}[data-md-color-primary=green] .codehilite:hover .clip-btn:hover{background-color:#4caf50}[data-md-color-primary=light-green] .codehilite:hover .clip-btn:hover{background-color:#7cb342}[data-md-color-primary=lime] .codehilite:hover .clip-btn:hover{background-color:#c0ca33}[data-md-color-primary=yellow] .codehilite:hover .clip-btn:hover{background-color:#f9a825}[data-md-color-primary=amber] .codehilite:hover .clip-btn:hover{background-color:#ffb300}[data-md-color-primary=orange] .codehilite:hover .clip-btn:hover{background-color:#fb8c00}[data-md-color-primary=deep-orange] .codehilite:hover .clip-btn:hover{background-color:#ff7043}[data-md-color-primary=brown] .codehilite:hover .clip-btn:hover{background-color:#795548}[data-md-color-primary=grey] .codehilite:hover .clip-btn:hover{background-color:#757575}[data-md-color-primary=blue-grey] .codehilite:hover .clip-btn:hover{background-color:#546e7a}.md-typeset .keys kbd:after,.md-typeset .keys kbd:before{color:#bdbdbd;font-weight:400;position:relative;font-family:sans-serif;-webkit-font-smoothing:initial;-moz-osx-font-smoothing:initial;margin:0}.md-typeset .keys span{color:#bdbdbd;padding:0 .2rem}.md-typeset .keys .key-backspace:before{content:"←";padding-left:.2rem}.md-typeset .keys .key-command:before{content:"⌘";padding-left:.2rem}.md-typeset .keys .key-windows:before{content:"⊞";padding-left:.2rem}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-left:.2rem}.md-typeset .keys .key-control:before{content:"⌃";padding-left:.2rem}.md-typeset .keys .key-meta:before{content:"◆";padding-left:.2rem}.md-typeset .keys .key-shift:before{content:"⇧";padding-left:.2rem}.md-typeset .keys .key-option:before{content:"⌥";padding-left:.2rem}.md-typeset .keys .key-tab:after{content:"↹";padding-left:.2rem}.md-typeset .keys .key-num-enter:after{content:"↵";padding-left:.2rem}.md-typeset .keys .key-enter:after{content:"↩";padding-left:.2rem}.md-typeset .uml-flowchart,.md-typeset .uml-sequence-diagram{width:100%;overflow:auto;padding:1rem 0}.md-typeset .uml-flowchart svg,.md-typeset .uml-sequence-diagram svg{max-width:none}.md-typeset a>code{margin:0 .29412em;padding:.07353em 0;background-color:hsla(0,0%,93%,.5);border-radius:.2rem;-webkit-box-shadow:.29412em 0 0 hsla(0,0%,93%,.5),-.29412em 0 0 hsla(0,0%,93%,.5);box-shadow:.29412em 0 0 hsla(0,0%,93%,.5),-.29412em 0 0 hsla(0,0%,93%,.5);-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset td code{word-break:normal}.md-typeset .headerlink{vertical-align:middle;font:normal 400 2rem Material Icons}.md-typeset h2 .headerlink{margin-top:-.4rem}.md-typeset h3 .headerlink{margin-top:-.3rem}.md-typeset h4 .headerlink,.md-typeset h5 .headerlink,.md-typeset h6 .headerlink{margin-top:-.2rem}.md-typeset .progress-label{position:absolute;text-align:center;color:rgba(0,0,0,.5);font-weight:700;width:100%;margin:0;line-height:1.2rem;white-space:nowrap;overflow:hidden}.md-typeset .progress-bar{height:1.2rem;float:left;background-color:#2979ff}.md-typeset .progress{display:block;width:100%;margin:.5rem 0;height:1.2rem;background-color:#eee;position:relative}.md-typeset .progress.thin{margin-top:.9rem;height:.4rem}.md-typeset .progress.thin .progress-label{margin-top:-.4rem}.md-typeset .progress.thin .progress-bar{height:.4rem}.md-typeset .progress.candystripe .progress-bar{background-size:2rem 2rem;background-image:linear-gradient(135deg,hsla(0,0%,100%,.8) 27%,transparent 0,transparent 52%,hsla(0,0%,100%,.8) 0,hsla(0,0%,100%,.8) 77%,transparent 0,transparent)}.md-typeset .progress-80plus .progress-bar,.md-typeset .progress-100plus .progress-bar{background-color:#00e676}.md-typeset .progress-60plus .progress-bar{background-color:#fbc02d}.md-typeset .progress-40plus .progress-bar{background-color:#ff9100}.md-typeset .progress-20plus .progress-bar{background-color:#ff5252}.md-typeset .progress-0plus .progress-bar{background-color:#ff1744}.md-typeset .progress.note .progress-bar{background-color:#2979ff}.md-typeset .progress.summary .progress-bar{background-color:#00b0ff}.md-typeset .progress.tip .progress-bar{background-color:#00bfa5}.md-typeset .progress.success .progress-bar{background-color:#00e676}.md-typeset .progress.warning .progress-bar{background-color:#ff9100}.md-typeset .progress.failure .progress-bar{background-color:#ff5252}.md-typeset .progress.danger .progress-bar{background-color:#ff1744}.md-typeset .progress.bug .progress-bar{background-color:#f50057}.md-typeset .progress.quote .progress-bar{background-color:#9e9e9e}.md-typeset .candystripe-animate .progress-bar{-webkit-animation:a 3s linear infinite;animation:a 3s linear infinite}@-webkit-keyframes a{0%{background-position:0 0}to{background-position:6rem 0}}@keyframes a{0%{background-position:0 0}to{background-position:6rem 0}}.md-typeset details{display:block;margin:1em 0}.md-typeset details[open]>summary:before{content:"\25BC"}.md-typeset details summary{display:block;cursor:pointer}.md-typeset details summary:before{content:"\25B6";padding-right:.5em}.md-typeset details summary::-webkit-details-marker{display:none}.md-typeset details.no-details:not([open])>*{display:none}.md-typeset details.no-details:not([open])>summary{display:block}.md-typeset details.note{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;padding:1.2rem;margin-bottom:1rem;overflow:hidden}.md-typeset details.note :nth-child(2){margin-top:0}.md-typeset details.note :last-child{margin-bottom:0}.md-typeset details.note>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#2979ff;color:#fff}.md-typeset details.note>summary:after,.md-typeset details.note>summary:before{position:absolute;top:.7rem;font-family:Material Icons;font-size:2rem;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-typeset details.note>summary:after{right:1rem}.md-typeset details.note>summary:before{left:1rem;content:"edit"}.md-typeset details.note[open]>summary{margin-bottom:1.2rem}.md-typeset details.note[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.note:not([open]){padding-bottom:0}.md-typeset details.note:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.summary{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;padding:1.2rem;margin-bottom:1rem;overflow:hidden}.md-typeset details.summary :nth-child(2){margin-top:0}.md-typeset details.summary :last-child{margin-bottom:0}.md-typeset details.summary>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#00b0ff;color:#fff}.md-typeset details.summary>summary:after,.md-typeset details.summary>summary:before{position:absolute;top:.7rem;font-family:Material Icons;font-size:2rem;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-typeset details.summary>summary:after{right:1rem}.md-typeset details.summary>summary:before{left:1rem;content:"subject"}.md-typeset details.summary[open]>summary{margin-bottom:1.2rem}.md-typeset details.summary[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.summary:not([open]){padding-bottom:0}.md-typeset details.summary:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.tip{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;padding:1.2rem;margin-bottom:1rem;overflow:hidden}.md-typeset details.tip :nth-child(2){margin-top:0}.md-typeset details.tip :last-child{margin-bottom:0}.md-typeset details.tip>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#00bfa5;color:#fff}.md-typeset details.tip>summary:after,.md-typeset details.tip>summary:before{position:absolute;top:.7rem;font-family:Material Icons;font-size:2rem;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-typeset details.tip>summary:after{right:1rem}.md-typeset details.tip>summary:before{left:1rem;content:"whatshot"}.md-typeset details.tip[open]>summary{margin-bottom:1.2rem}.md-typeset details.tip[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.tip:not([open]){padding-bottom:0}.md-typeset details.tip:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.success{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;padding:1.2rem;margin-bottom:1rem;overflow:hidden}.md-typeset details.success :nth-child(2){margin-top:0}.md-typeset details.success :last-child{margin-bottom:0}.md-typeset details.success>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#00e676;color:#fff}.md-typeset details.success>summary:after,.md-typeset details.success>summary:before{position:absolute;top:.7rem;font-family:Material Icons;font-size:2rem;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-typeset details.success>summary:after{right:1rem}.md-typeset details.success>summary:before{left:1rem;content:"done"}.md-typeset details.success[open]>summary{margin-bottom:1.2rem}.md-typeset details.success[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.success:not([open]){padding-bottom:0}.md-typeset details.success:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.warning{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;padding:1.2rem;margin-bottom:1rem;overflow:hidden}.md-typeset details.warning :nth-child(2){margin-top:0}.md-typeset details.warning :last-child{margin-bottom:0}.md-typeset details.warning>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#ff9100;color:#fff}.md-typeset details.warning>summary:after,.md-typeset details.warning>summary:before{position:absolute;top:.7rem;font-family:Material Icons;font-size:2rem;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-typeset details.warning>summary:after{right:1rem}.md-typeset details.warning>summary:before{left:1rem;content:"warning"}.md-typeset details.warning[open]>summary{margin-bottom:1.2rem}.md-typeset details.warning[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.warning:not([open]){padding-bottom:0}.md-typeset details.warning:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.failure{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;padding:1.2rem;margin-bottom:1rem;overflow:hidden}.md-typeset details.failure :nth-child(2){margin-top:0}.md-typeset details.failure :last-child{margin-bottom:0}.md-typeset details.failure>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#ff5252;color:#fff}.md-typeset details.failure>summary:after,.md-typeset details.failure>summary:before{position:absolute;top:.7rem;font-family:Material Icons;font-size:2rem;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-typeset details.failure>summary:after{right:1rem}.md-typeset details.failure>summary:before{left:1rem;content:"clear"}.md-typeset details.failure[open]>summary{margin-bottom:1.2rem}.md-typeset details.failure[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.failure:not([open]){padding-bottom:0}.md-typeset details.failure:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.danger{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;padding:1.2rem;margin-bottom:1rem;overflow:hidden}.md-typeset details.danger :nth-child(2){margin-top:0}.md-typeset details.danger :last-child{margin-bottom:0}.md-typeset details.danger>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#ff1744;color:#fff}.md-typeset details.danger>summary:after,.md-typeset details.danger>summary:before{position:absolute;top:.7rem;font-family:Material Icons;font-size:2rem;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-typeset details.danger>summary:after{right:1rem}.md-typeset details.danger>summary:before{left:1rem;content:"flash_on"}.md-typeset details.danger[open]>summary{margin-bottom:1.2rem}.md-typeset details.danger[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.danger:not([open]){padding-bottom:0}.md-typeset details.danger:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.bug{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;padding:1.2rem;margin-bottom:1rem;overflow:hidden}.md-typeset details.bug :nth-child(2){margin-top:0}.md-typeset details.bug :last-child{margin-bottom:0}.md-typeset details.bug>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#f50057;color:#fff}.md-typeset details.bug>summary:after,.md-typeset details.bug>summary:before{position:absolute;top:.7rem;font-family:Material Icons;font-size:2rem;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-typeset details.bug>summary:after{right:1rem}.md-typeset details.bug>summary:before{left:1rem;content:"bug_report"}.md-typeset details.bug[open]>summary{margin-bottom:1.2rem}.md-typeset details.bug[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.bug:not([open]){padding-bottom:0}.md-typeset details.bug:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.quote{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;padding:1.2rem;margin-bottom:1rem;overflow:hidden}.md-typeset details.quote :nth-child(2){margin-top:0}.md-typeset details.quote :last-child{margin-bottom:0}.md-typeset details.quote>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#9e9e9e;color:#fff}.md-typeset details.quote>summary:after,.md-typeset details.quote>summary:before{position:absolute;top:.7rem;font-family:Material Icons;font-size:2rem;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-typeset details.quote>summary:after{right:1rem}.md-typeset details.quote>summary:before{left:1rem;content:"format_quote"}.md-typeset details.quote[open]>summary{margin-bottom:1.2rem}.md-typeset details.quote[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.quote:not([open]){padding-bottom:0}.md-typeset details.quote:not([open])>summary:after{content:"keyboard_arrow_left"}.md-typeset details.settings{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;padding:1.2rem;margin-bottom:1rem;overflow:hidden}.md-typeset details.settings :nth-child(2){margin-top:0}.md-typeset details.settings :last-child{margin-bottom:0}.md-typeset details.settings>summary{outline:none;position:relative;margin:-1.2rem -1.2rem 0;padding:.5rem 3.2rem;background-color:#a0f;color:#fff}.md-typeset details.settings>summary:after,.md-typeset details.settings>summary:before{position:absolute;top:.7rem;font-family:Material Icons;font-size:2rem;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-typeset details.settings>summary:after{right:1rem}.md-typeset details.settings>summary:before{left:1rem;content:"settings"}.md-typeset details.settings[open]>summary{margin-bottom:1.2rem}.md-typeset details.settings[open]>summary:after{content:"keyboard_arrow_down"}.md-typeset details.settings:not([open]){padding-bottom:0}.md-typeset details.settings:not([open])>summary:after{content:"keyboard_arrow_left"}@media only screen and (max-width:44.9375em){.md-typeset pre{padding:0}.md-typeset pre>code{padding:1rem 1.6rem}.md-typeset>.codehilite{padding:0}.md-typeset>.codehilite code,.md-typeset>.codehilite pre{padding:1rem 1.6rem .8rem}.md-typeset>.codehilitetable .codehilite{padding:0}.md-typeset>.codehilitetable .codehilite>pre{padding:1rem 1.6rem}}@media only screen and (min-width:76.1876em){.md-typeset .headerlink{float:left;margin-left:-2.4rem}.md-typeset h2 .headerlink{margin-top:.6rem}.md-typeset h3 .headerlink{margin-top:.4rem}.md-typeset h4 .headerlink{margin-top:.2rem}.md-typeset h5 .headerlink,.md-typeset h6 .headerlink{margin-top:0}} \ No newline at end of file diff --git a/gulpfile.babel.js b/gulpfile.babel.js index 93efed218..f040e9a5f 100644 --- a/gulpfile.babel.js +++ b/gulpfile.babel.js @@ -33,9 +33,10 @@ const args = yargs .default("lint", false) .default("clean", false) .default("sourcemaps", false) - .default("webpack", false) + // .default("webpack", false) .default("buildmkdocs", false) .default("revision", false) + .default("mkdocs", "mkdocs") .argv /* Create a gulp sync object */ @@ -82,9 +83,10 @@ const config = { }, clean: args.clean, sourcemaps: args.sourcemaps, - webpack: args.webpack, + webpack: true, // args.webpack, buildmkdocs: args.buildmkdocs, - revision: args.revision + revision: args.revision, + mkdocsCmd: args.mkdocs } // ------------------------------ @@ -269,9 +271,14 @@ gulp.task("mkdocs:serve", () => { if (mkdocs) { mkdocs.kill() } + + const cmdParts = (`${config.mkdocsCmd} serve --dev-addr=0.0.0.0:8000`).split(/ +/) + const cmd = cmdParts[0] + const cmdArgs = cmdParts.slice(1, cmdParts.length - 1) + mkdocs = childProcess.spawn( - "mkdocs", - ["serve", "--dev-addr", "0.0.0.0:8000"], + cmd, + cmdArgs, {stdio: "inherit"}) }) @@ -285,7 +292,11 @@ gulp.task("mkdocs:watch", () => { }) gulp.task("mkdocs:build", () => { - const proc = childProcess.spawnSync("mkdocs", ["build"]) + const cmdParts = (`${config.mkdocsCmd} build`).split(/ +/) + const cmd = cmdParts[0] + const cmdArgs = cmdParts.slice(1, cmdParts.length - 1) + + const proc = childProcess.spawnSync(cmd, cmdArgs) if (proc.status) throw new Error(`MkDocs error:\n${proc.stderr.toString()}`) return proc diff --git a/mkdocs.yml b/mkdocs.yml index 46a741c3a..2d2873fd7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -99,7 +99,6 @@ extra: - type: github link: https://github.com/facelessuser extra_css: - - extra-b9e7995759.css + - extra-effadd97dd.css extra_javascript: - - https://cdn.jsdelivr.net/clipboard.js/1.6.1/clipboard.min.js - - extra-2c36206460.js + - extra-0d49409391.js diff --git a/pymdownx/__version__.py b/pymdownx/__version__.py index 1551cf4b8..a8439032a 100644 --- a/pymdownx/__version__.py +++ b/pymdownx/__version__.py @@ -1,7 +1,7 @@ """Version.""" # (major, minor, micro, release type, pre-release build, post-release build) -version_info = (3, 2, 1, 'final', 0, 0) +version_info = (3, 3, 0, 'final', 0, 0) def _version(): diff --git a/tox.ini b/tox.ini index 3ee0d92eb..f05fe4543 100644 --- a/tox.ini +++ b/tox.ini @@ -12,7 +12,7 @@ commands= {envbindir}/coverage html -d {envtmpdir}/coverage {envbindir}/coverage report --show-missing -[testenv:spelling] +[testenv:documents] basepython = python2.7 deps= -rrequirements/docs.txt @@ -20,6 +20,7 @@ deps= commands= {envpython} setup.py install {envpython} {toxinidir}/tests/spellcheck.py + {envpython} -m mkdocs build --clean --verbose --strict [testenv:lint] basepython = python2.7