Merge of features tied to 'Trinidad Scorpion' funding goal

This commit is contained in:
squidfunk 2022-06-02 17:20:33 +02:00
parent a3f457ecb1
commit e2556d84d6
89 changed files with 13701 additions and 290 deletions

View File

@ -1,3 +1,12 @@
mkdocs-material-8.3.0 (2022-06-02)
* Added support for custom admonition icons
* Added support for linking of content tabs
* Added support for boosting pages in search
* Added previous/next next indicators to content tabs
* Improved typeset link colors in light and dark modes
* Fixed #3954: add option to hide footer navigation
mkdocs-material-8.2.16+insiders-4.16.2 (2022-05-28) mkdocs-material-8.2.16+insiders-4.16.2 (2022-05-28)
* Fixed #3961: Nested sections triggered build error for navigation tabs * Fixed #3961: Nested sections triggered build error for navigation tabs

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

View File

@ -6,6 +6,15 @@ template: overrides/main.html
## Material for MkDocs ## Material for MkDocs
### 8.3.0 <small>_ June 2, 2022</small> { id="8.3.0" }
- Added support for custom admonition icons
- Added support for linking of content tabs
- Added support for boosting pages in search
- Added previous/next next indicators to content tabs
- Fixed #3954: add option to hide footer navigation
- Improved typeset link colors in light and dark modes
### 8.2.16 <small>_ May 28, 2022</small> { id="8.2.16" } ### 8.2.16 <small>_ May 28, 2022</small> { id="8.2.16" }
- Fixed #3957: Only animate code annotations when visible (save CPU cycles) - Fixed #3957: Only animate code annotations when visible (save CPU cycles)

View File

@ -195,9 +195,6 @@ which are currently exclusively available to sponsors:
- [x] [Excluding content from search] - [x] [Excluding content from search]
- [x] [Social cards] - [x] [Social cards]
- [x] [Cookie consent] - [x] [Cookie consent]
- [x] [Linking content tabs]
- [x] [Boosting pages in search]
- [x] [Custom admonition icons]
</div> </div>
@ -211,16 +208,6 @@ features prefixed with a checkmark symbol, denoting whether a feature is
:octicons-check-circle-fill-24:{ style="color: var(--md-default-fg-color--lightest)" } planned, but not yet implemented. When the funding goal is hit, the features :octicons-check-circle-fill-24:{ style="color: var(--md-default-fg-color--lightest)" } planned, but not yet implemented. When the funding goal is hit, the features
are released for general availability. are released for general availability.
#### $ 6,000 Trinidad Scorpion
- [x] [Boosting pages in search]
- [x] [Custom admonition icons]
- [x] [Linking content tabs]
[Boosting pages in search]: ../setup/setting-up-site-search.md#search-boosting
[Custom admonition icons]: ../reference/admonitions.md#admonition-icons
[Linking content tabs]: ../reference/content-tabs.md#linked-content-tabs
#### $ 7,000 Royal Gold #### $ 7,000 Royal Gold
- [x] [Cookie consent] - [x] [Cookie consent]
@ -296,6 +283,16 @@ This section lists all funding goals that were previously completed, which means
that those features were part of Insiders, but are now generally available and that those features were part of Insiders, but are now generally available and
can be used by all users. can be used by all users.
#### $ 6,000 Trinidad Scorpion
- [x] [Boosting pages in search]
- [x] [Custom admonition icons]
- [x] [Linking content tabs]
[Boosting pages in search]: ../setup/setting-up-site-search.md#search-boosting
[Custom admonition icons]: ../reference/admonitions.md#admonition-icons
[Linking content tabs]: ../reference/content-tabs.md#linked-content-tabs
#### $ 5,000 Aji Panca #### $ 5,000 Aji Panca
- [x] [Mermaid.js integration] - [x] [Mermaid.js integration]

View File

@ -35,8 +35,8 @@ See additional configuration options:
### Admonition icons ### Admonition icons
[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } · [:octicons-tag-24: 8.3.0][icon support] ·
[:octicons-tag-24: insiders-2.4.0][Insiders] :octicons-beaker-24: Experimental
Each of the supported admonition types has a distinct icon, which can be changed Each of the supported admonition types has a distinct icon, which can be changed
to any icon bundled with the theme, or even a [custom icon]. Add the following to any icon bundled with the theme, or even a [custom icon]. Add the following
@ -82,12 +82,6 @@ theme:
quote: octicons/quote-16 quote: octicons/quote-16
``` ```
<div class="result" markdown>
[![Octicons]][Octicons]
</div>
=== ":fontawesome-brands-font-awesome: FontAwesome" === ":fontawesome-brands-font-awesome: FontAwesome"
@ -109,18 +103,10 @@ theme:
quote: fontawesome/solid/quote-left quote: fontawesome/solid/quote-left
``` ```
<div class="result" markdown> [icon support]: https://github.com/squidfunk/mkdocs-material/releases/tag/8.3.0
[![FontAwesome]][FontAwesome]
</div>
[Insiders]: ../insiders/index.md
[custom icon]: ../setup/changing-the-logo-and-icons.md#additional-icons [custom icon]: ../setup/changing-the-logo-and-icons.md#additional-icons
[supported types]: #supported-types [supported types]: #supported-types
[icon search]: icons-emojis.md#search [icon search]: icons-emojis.md#search
[Octicons]: ../assets/screenshots/admonition-octicons.png
[FontAwesome]: ../assets/screenshots/admonition-fontawesome.png
## Usage ## Usage

View File

@ -46,8 +46,7 @@ See additional configuration options:
### Code annotations ### Code annotations
[:octicons-tag-24: 8.0.0][Code annotations support] · [:octicons-tag-24: 8.0.0][Code annotations support] ·
:octicons-unlock-24: Feature flag · :octicons-unlock-24: Feature flag
:octicons-beaker-24: Experimental
Code annotations offer a comfortable and friendly way to attach arbitrary Code annotations offer a comfortable and friendly way to attach arbitrary
content to specific sections of code blocks by adding numeric markers in block content to specific sections of code blocks by adding numeric markers in block
@ -127,8 +126,7 @@ import tensorflow as tf
### Adding a title ### Adding a title
[:octicons-tag-24: 7.3.6][Title support] · [:octicons-tag-24: 7.3.6][Title support]
:octicons-beaker-24: Experimental
In order to provide additional context, a custom title can be added to a code In order to provide additional context, a custom title can be added to a code
block by using the `title="<custom title>"` option directly after the shortcode, block by using the `title="<custom title>"` option directly after the shortcode,

View File

@ -33,8 +33,7 @@ See additional configuration options:
### Linked content tabs ### Linked content tabs
[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } · [:octicons-tag-24: 8.3.0][link support] ·
[:octicons-tag-24: insiders-2.9.0][Insiders] ·
:octicons-unlock-24: Feature flag · :octicons-unlock-24: Feature flag ·
:octicons-beaker-24: Experimental :octicons-beaker-24: Experimental
@ -61,7 +60,7 @@ integrated with [instant loading] and persisted across page loads.
[![content.tabs.link disabled]][content.tabs.link disabled] [![content.tabs.link disabled]][content.tabs.link disabled]
[Insiders]: ../insiders/index.md [link support]: https://github.com/squidfunk/mkdocs-material/releases/tag/8.3.0
[instant loading]: ../setup/setting-up-navigation.md#instant-loading [instant loading]: ../setup/setting-up-navigation.md#instant-loading
[content.tabs.link enabled]: ../assets/screenshots/content-tabs-link.png [content.tabs.link enabled]: ../assets/screenshots/content-tabs-link.png
[content.tabs.link disabled]: ../assets/screenshots/content-tabs.png [content.tabs.link disabled]: ../assets/screenshots/content-tabs.png

View File

@ -17,8 +17,7 @@ support for many of its features.
[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } · [:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } ·
[:octicons-tag-24: insiders-4.10.0][Insiders] · [:octicons-tag-24: insiders-4.10.0][Insiders] ·
:octicons-cpu-24: Plugin · :octicons-cpu-24: Plugin
:octicons-beaker-24: Experimental
The built-in offline plugin makes sure that the [site search] works when you The built-in offline plugin makes sure that the [site search] works when you
distribute the contents of your [site directory] as a download. Simply add distribute the contents of your [site directory] as a download. Simply add

View File

@ -96,8 +96,7 @@ theme:
#### Sticky navigation tabs #### Sticky navigation tabs
[:octicons-tag-24: 7.3.0][navigation.tabs.sticky support] · [:octicons-tag-24: 7.3.0][navigation.tabs.sticky support] ·
:octicons-unlock-24: Feature flag · :octicons-unlock-24: Feature flag
:octicons-beaker-24: Experimental
When sticky tabs are enabled, navigation tabs will lock below the header and When sticky tabs are enabled, navigation tabs will lock below the header and
always remain visible when scrolling down. Just add the following two feature always remain visible when scrolling down. Just add the following two feature
@ -211,8 +210,7 @@ page in that section (or the section index page).
### Section index pages ### Section index pages
[:octicons-tag-24: 7.3.0][navigation.indexes support] · [:octicons-tag-24: 7.3.0][navigation.indexes support] ·
:octicons-unlock-24: Feature flag · :octicons-unlock-24: Feature flag
:octicons-beaker-24: Experimental
When section index pages are enabled, documents can be directly attached to When section index pages are enabled, documents can be directly attached to
sections, which is particularly useful for providing overview pages. Add the sections, which is particularly useful for providing overview pages. Add the

View File

@ -316,8 +316,8 @@ clipboard.
### Search boosting ### Search boosting
[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } · [:octicons-tag-24: 8.3.0][boost support] ·
[:octicons-tag-24: insiders-2.8.0][Insiders] :octicons-beaker-24: Experimental
When [Metadata] is enabled, pages can be boosted in search with custom front When [Metadata] is enabled, pages can be boosted in search with custom front
matter, which will make them rank higher. Add the following lines at the top of matter, which will make them rank higher. Add the following lines at the top of
@ -336,6 +336,7 @@ search:
1. :woman_in_lotus_position: When boosting pages, be gentle and start with 1. :woman_in_lotus_position: When boosting pages, be gentle and start with
__low values__. __low values__.
[boost support]: https://github.com/squidfunk/mkdocs-material/releases/tag/8.3.0
[Metadata]: extensions/python-markdown.md#metadata [Metadata]: extensions/python-markdown.md#metadata
### Search exclusion ### Search exclusion

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -43,6 +43,6 @@
* Copyright(c) 2015 Andreas Lubbe * Copyright(c) 2015 Andreas Lubbe
* Copyright(c) 2015 Tiancheng "Timothy" Gu * Copyright(c) 2015 Tiancheng "Timothy" Gu
* MIT Licensed * MIT Licensed
*/var Le=/["'&<>]/;ne.exports=we;function we(t){var e=""+t,r=Le.exec(e);if(!r)return e;var n,i="",s=0,o=0;for(s=r.index;s<e.length;s++){switch(e.charCodeAt(s)){case 34:n="&quot;";break;case 38:n="&amp;";break;case 39:n="&#39;";break;case 60:n="&lt;";break;case 62:n="&gt;";break;default:continue}o!==s&&(i+=e.substring(o,s)),o=s+1,i+=n}return o!==s?i+e.substring(o,s):i}});var le=H(re());Object.entries||(Object.entries=function(t){let e=[];for(let r of Object.keys(t))e.push([r,t[r]]);return e});Object.values||(Object.values=function(t){let e=[];for(let r of Object.keys(t))e.push(t[r]);return e});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(t,e){typeof t=="object"?(this.scrollLeft=t.left,this.scrollTop=t.top):(this.scrollLeft=t,this.scrollTop=e)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...t){let e=this.parentNode;if(e){t.length===0&&e.removeChild(this);for(let r=t.length-1;r>=0;r--){let n=t[r];typeof n!="object"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?e.insertBefore(this.previousSibling,n):e.replaceChild(n,this)}}}));var ie=H(q());function se(t){let e=new Map,r=new Set;for(let n of t){let[i,s]=n.location.split("#"),o=n.location,a=n.title,u=n.tags,c=(0,ie.default)(n.text).replace(/\s+(?=[,.:;!?])/g,"").replace(/\s+/g," ");if(s){let h=e.get(i);r.has(h)?e.set(o,{location:o,title:a,text:c,parent:h}):(h.title=n.title,h.text=c,r.add(h))}else e.set(o,M({location:o,title:a,text:c},u&&{tags:u}))}return e}var oe=H(q());function ae(t,e){let r=new RegExp(t.separator,"img"),n=(i,s,o)=>`${s}<mark data-md-highlight>${o}</mark>`;return i=>{i=i.replace(/[\s*+\-:~^]+/g," ").trim();let s=new RegExp(`(^|${t.separator})(${i.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return o=>(e?(0,oe.default)(o):o).replace(s,n).replace(/<\/mark>(\s+)<mark[^>]*>/img,"$1")}}function ue(t){let e=new lunr.Query(["title","text"]);return new lunr.QueryParser(t,e).parse(),e.clauses}function ce(t,e){var i;let r=new Set(t),n={};for(let s=0;s<e.length;s++)for(let o of r)e[s].startsWith(o.term)&&(n[o.term]=!0,r.delete(o));for(let s of r)(i=lunr.stopWordFilter)!=null&&i.call(lunr,s.term)&&(n[s.term]=!1);return n}function Ee(t,e){let[r,n]=[new Set(t),new Set(e)];return[...new Set([...r].filter(i=>!n.has(i)))]}var U=class{constructor({config:e,docs:r,options:n}){this.options=n,this.documents=se(r),this.highlight=ae(e,!1),lunr.tokenizer.separator=new RegExp(e.separator),this.index=lunr(function(){e.lang.length===1&&e.lang[0]!=="en"?this.use(lunr[e.lang[0]]):e.lang.length>1&&this.use(lunr.multiLanguage(...e.lang));let i=Ee(["trimmer","stopWordFilter","stemmer"],n.pipeline);for(let s of e.lang.map(o=>o==="en"?lunr:lunr[o]))for(let o of i)this.pipeline.remove(s[o]),this.searchPipeline.remove(s[o]);this.ref("location"),this.field("title",{boost:1e3}),this.field("text"),this.field("tags",{boost:1e6});for(let s of r)this.add(s)})}search(e){if(e)try{let r=this.highlight(e),n=ue(e).filter(o=>o.presence!==lunr.Query.presence.PROHIBITED),i=this.index.search(`${e}*`).reduce((o,{ref:a,score:u,matchData:c})=>{let h=this.documents.get(a);if(typeof h!="undefined"){let{location:y,title:g,text:b,tags:m,parent:Q}=h,p=ce(n,Object.keys(c.metadata)),d=+!Q+ +Object.values(p).every(w=>w);o.push(Z(M({location:y,title:r(g),text:r(b)},m&&{tags:m.map(r)}),{score:u*(1+d),terms:p}))}return o},[]).sort((o,a)=>a.score-o.score).reduce((o,a)=>{let u=this.documents.get(a.location);if(typeof u!="undefined"){let c="parent"in u?u.parent.location:u.location;o.set(c,[...o.get(c)||[],a])}return o},new Map),s;if(this.options.suggestions){let o=this.index.query(a=>{for(let u of n)a.term(u.term,{fields:["title"],presence:lunr.Query.presence.REQUIRED,wildcard:lunr.Query.wildcard.TRAILING})});s=o.length?Object.keys(o[0].matchData.metadata):[]}return M({items:[...i.values()]},typeof s!="undefined"&&{suggestions:s})}catch(r){console.warn(`Invalid query: ${e} \u2013 see https://bit.ly/2s3ChXG`)}return{items:[]}}};var Y;function ke(t){return z(this,null,function*(){let e="../lunr";if(typeof parent!="undefined"&&"IFrameWorker"in parent){let n=document.querySelector("script[src]"),[i]=n.src.split("/worker");e=e.replace("..",i)}let r=[];for(let n of t.lang){switch(n){case"ja":r.push(`${e}/tinyseg.js`);break;case"hi":case"th":r.push(`${e}/wordcut.js`);break}n!=="en"&&r.push(`${e}/min/lunr.${n}.min.js`)}t.lang.length>1&&r.push(`${e}/min/lunr.multi.min.js`),r.length&&(yield importScripts(`${e}/min/lunr.stemmer.support.min.js`,...r))})}function Te(t){return z(this,null,function*(){switch(t.type){case 0:return yield ke(t.data.config),Y=new U(t.data),{type:1};case 2:return{type:3,data:Y?Y.search(t.data):{items:[]}};default:throw new TypeError("Invalid message type")}})}self.lunr=le.default;addEventListener("message",t=>z(void 0,null,function*(){postMessage(yield Te(t.data))}));})(); */var Le=/["'&<>]/;ne.exports=we;function we(t){var e=""+t,r=Le.exec(e);if(!r)return e;var n,i="",s=0,o=0;for(s=r.index;s<e.length;s++){switch(e.charCodeAt(s)){case 34:n="&quot;";break;case 38:n="&amp;";break;case 39:n="&#39;";break;case 60:n="&lt;";break;case 62:n="&gt;";break;default:continue}o!==s&&(i+=e.substring(o,s)),o=s+1,i+=n}return o!==s?i+e.substring(o,s):i}});var le=H(re());Object.entries||(Object.entries=function(t){let e=[];for(let r of Object.keys(t))e.push([r,t[r]]);return e});Object.values||(Object.values=function(t){let e=[];for(let r of Object.keys(t))e.push(t[r]);return e});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(t,e){typeof t=="object"?(this.scrollLeft=t.left,this.scrollTop=t.top):(this.scrollLeft=t,this.scrollTop=e)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...t){let e=this.parentNode;if(e){t.length===0&&e.removeChild(this);for(let r=t.length-1;r>=0;r--){let n=t[r];typeof n!="object"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?e.insertBefore(this.previousSibling,n):e.replaceChild(n,this)}}}));var ie=H(q());function se(t){let e=new Map,r=new Set;for(let n of t){let[i,s]=n.location.split("#"),o=n.location,a=n.title,u=n.tags,c=(0,ie.default)(n.text).replace(/\s+(?=[,.:;!?])/g,"").replace(/\s+/g," ");if(s){let h=e.get(i);r.has(h)?e.set(o,{location:o,title:a,text:c,parent:h}):(h.title=n.title,h.text=c,r.add(h))}else e.set(o,M({location:o,title:a,text:c},u&&{tags:u}))}return e}var oe=H(q());function ae(t,e){let r=new RegExp(t.separator,"img"),n=(i,s,o)=>`${s}<mark data-md-highlight>${o}</mark>`;return i=>{i=i.replace(/[\s*+\-:~^]+/g," ").trim();let s=new RegExp(`(^|${t.separator})(${i.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return o=>(e?(0,oe.default)(o):o).replace(s,n).replace(/<\/mark>(\s+)<mark[^>]*>/img,"$1")}}function ue(t){let e=new lunr.Query(["title","text"]);return new lunr.QueryParser(t,e).parse(),e.clauses}function ce(t,e){var i;let r=new Set(t),n={};for(let s=0;s<e.length;s++)for(let o of r)e[s].startsWith(o.term)&&(n[o.term]=!0,r.delete(o));for(let s of r)(i=lunr.stopWordFilter)!=null&&i.call(lunr,s.term)&&(n[s.term]=!1);return n}function Ee(t,e){let[r,n]=[new Set(t),new Set(e)];return[...new Set([...r].filter(i=>!n.has(i)))]}var U=class{constructor({config:e,docs:r,options:n}){this.options=n,this.documents=se(r),this.highlight=ae(e,!1),lunr.tokenizer.separator=new RegExp(e.separator),this.index=lunr(function(){e.lang.length===1&&e.lang[0]!=="en"?this.use(lunr[e.lang[0]]):e.lang.length>1&&this.use(lunr.multiLanguage(...e.lang));let i=Ee(["trimmer","stopWordFilter","stemmer"],n.pipeline);for(let s of e.lang.map(o=>o==="en"?lunr:lunr[o]))for(let o of i)this.pipeline.remove(s[o]),this.searchPipeline.remove(s[o]);this.ref("location"),this.field("title",{boost:1e3}),this.field("text"),this.field("tags",{boost:1e6});for(let s of r)this.add(s,{boost:s.boost})})}search(e){if(e)try{let r=this.highlight(e),n=ue(e).filter(o=>o.presence!==lunr.Query.presence.PROHIBITED),i=this.index.search(`${e}*`).reduce((o,{ref:a,score:u,matchData:c})=>{let h=this.documents.get(a);if(typeof h!="undefined"){let{location:y,title:g,text:b,tags:m,parent:Q}=h,p=ce(n,Object.keys(c.metadata)),d=+!Q+ +Object.values(p).every(w=>w);o.push(Z(M({location:y,title:r(g),text:r(b)},m&&{tags:m.map(r)}),{score:u*(1+d),terms:p}))}return o},[]).sort((o,a)=>a.score-o.score).reduce((o,a)=>{let u=this.documents.get(a.location);if(typeof u!="undefined"){let c="parent"in u?u.parent.location:u.location;o.set(c,[...o.get(c)||[],a])}return o},new Map),s;if(this.options.suggestions){let o=this.index.query(a=>{for(let u of n)a.term(u.term,{fields:["title"],presence:lunr.Query.presence.REQUIRED,wildcard:lunr.Query.wildcard.TRAILING})});s=o.length?Object.keys(o[0].matchData.metadata):[]}return M({items:[...i.values()]},typeof s!="undefined"&&{suggestions:s})}catch(r){console.warn(`Invalid query: ${e} \u2013 see https://bit.ly/2s3ChXG`)}return{items:[]}}};var Y;function ke(t){return z(this,null,function*(){let e="../lunr";if(typeof parent!="undefined"&&"IFrameWorker"in parent){let n=document.querySelector("script[src]"),[i]=n.src.split("/worker");e=e.replace("..",i)}let r=[];for(let n of t.lang){switch(n){case"ja":r.push(`${e}/tinyseg.js`);break;case"hi":case"th":r.push(`${e}/wordcut.js`);break}n!=="en"&&r.push(`${e}/min/lunr.${n}.min.js`)}t.lang.length>1&&r.push(`${e}/min/lunr.multi.min.js`),r.length&&(yield importScripts(`${e}/min/lunr.stemmer.support.min.js`,...r))})}function Te(t){return z(this,null,function*(){switch(t.type){case 0:return yield ke(t.data.config),Y=new U(t.data),{type:1};case 2:return{type:3,data:Y?Y.search(t.data):{items:[]}};default:throw new TypeError("Invalid message type")}})}self.lunr=le.default;addEventListener("message",t=>z(void 0,null,function*(){postMessage(yield Te(t.data))}));})();
//# sourceMappingURL=search.e82c77d7.min.js.map //# sourceMappingURL=search.b028fd86.min.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"sources":["src/assets/stylesheets/palette/_scheme.scss","../../../src/assets/stylesheets/palette.scss","src/assets/stylesheets/palette/_accent.scss","src/assets/stylesheets/palette/_primary.scss","src/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"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","file":"palette.css"}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"version":3,"sources":["src/assets/stylesheets/palette/_accent.scss","../../../src/assets/stylesheets/palette.scss","src/assets/stylesheets/palette/_primary.scss","src/assets/stylesheets/utilities/_break.scss","src/assets/stylesheets/palette/_scheme.scss"],"names":[],"mappings":"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","file":"palette.css"}

View File

@ -22,7 +22,7 @@
<link rel="canonical" href="{{ page.canonical_url }}"> <link rel="canonical" href="{{ page.canonical_url }}">
{% endif %} {% endif %}
<link rel="icon" href="{{ config.theme.favicon | url }}"> <link rel="icon" href="{{ config.theme.favicon | url }}">
<meta name="generator" content="mkdocs-{{ mkdocs_version }}, mkdocs-material-8.2.16"> <meta name="generator" content="mkdocs-{{ mkdocs_version }}, mkdocs-material-8.3.0">
{% endblock %} {% endblock %}
{% block htmltitle %} {% block htmltitle %}
{% if page and page.meta and page.meta.title %} {% if page and page.meta and page.meta.title %}
@ -34,10 +34,10 @@
{% endif %} {% endif %}
{% endblock %} {% endblock %}
{% block styles %} {% block styles %}
<link rel="stylesheet" href="{{ 'assets/stylesheets/main.64b3143d.min.css' | url }}"> <link rel="stylesheet" href="{{ 'assets/stylesheets/main.fd896c8a.min.css' | url }}">
{% if config.theme.palette %} {% if config.theme.palette %}
{% set palette = config.theme.palette %} {% set palette = config.theme.palette %}
<link rel="stylesheet" href="{{ 'assets/stylesheets/palette.cc9b2e1e.min.css' | url }}"> <link rel="stylesheet" href="{{ 'assets/stylesheets/palette.cbb835fc.min.css' | url }}">
{% if palette.primary %} {% if palette.primary %}
{% import "partials/palette.html" as map %} {% import "partials/palette.html" as map %}
{% set primary = map.primary( {% set primary = map.primary(
@ -46,6 +46,7 @@
<meta name="theme-color" content="{{ primary }}"> <meta name="theme-color" content="{{ primary }}">
{% endif %} {% endif %}
{% endif %} {% endif %}
{% include "partials/icons.html" %}
{% endblock %} {% endblock %}
{% block libs %}{% endblock %} {% block libs %}{% endblock %}
{% block fonts %} {% block fonts %}
@ -164,10 +165,11 @@
{% include "partials/content.html" %} {% include "partials/content.html" %}
{% endblock %} {% endblock %}
</article> </article>
{% include "partials/javascripts/content.html" %}
</div> </div>
</div> </div>
{% if "navigation.top" in features %} {% if "navigation.top" in features %}
<a href="#" class="md-top md-icon" data-md-component="top" data-md-state="hidden"> <a href="#" class="md-top md-top--hidden md-icon" data-md-component="top">
{% include ".icons/material/arrow-up.svg" %} {% include ".icons/material/arrow-up.svg" %}
{{ lang.t('top.title') }} {{ lang.t('top.title') }}
</a> </a>
@ -185,7 +187,7 @@
"base": base_url, "base": base_url,
"features": features, "features": features,
"translations": {}, "translations": {},
"search": "assets/javascripts/workers/search.e82c77d7.min.js" | url "search": "assets/javascripts/workers/search.b028fd86.min.js" | url
} -%} } -%}
{%- if config.extra.version -%} {%- if config.extra.version -%}
{%- set _ = app.update({ "version": config.extra.version }) -%} {%- set _ = app.update({ "version": config.extra.version }) -%}
@ -214,7 +216,7 @@
</script> </script>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script src="{{ 'assets/javascripts/bundle.3a4b43e5.min.js' | url }}"></script> <script src="{{ 'assets/javascripts/bundle.0f659f14.min.js' | url }}"></script>
{% for path in config["extra_javascript"] %} {% for path in config["extra_javascript"] %}
<script src="{{ path | url }}"></script> <script src="{{ path | url }}"></script>
{% endfor %} {% endfor %}

View File

@ -19,5 +19,5 @@
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
{{ super() }} {{ super() }}
<script src="{{ 'overrides/assets/javascripts/bundle.2bc01bfd.min.js' | url }}"></script> <script src="{{ 'overrides/assets/javascripts/bundle.1ff6d521.min.js' | url }}"></script>
{% endblock %} {% endblock %}

View File

@ -3,7 +3,8 @@
-#} -#}
<footer class="md-footer"> <footer class="md-footer">
{% if page.previous_page or page.next_page %} {% if page.previous_page or page.next_page %}
<nav class="md-footer__inner md-grid" aria-label="{{ lang.t('footer.title') }}"> {% set hidden = "hidden" if "footer" in page.meta.hide %}
<nav class="md-footer__inner md-grid" aria-label="{{ lang.t('footer.title') }}" {{ hidden }}>
{% if page.previous_page %} {% if page.previous_page %}
{% set direction = lang.t("footer.previous") %} {% set direction = lang.t("footer.previous") %}
<a href="{{ page.previous_page.url | url }}" class="md-footer__link md-footer__link--prev" aria-label="{{ direction }}: {{ page.previous_page.title | e }}" rel="prev"> <a href="{{ page.previous_page.url | url }}" class="md-footer__link md-footer__link--prev" aria-label="{{ direction }}: {{ page.previous_page.title | e }}" rel="prev">

View File

@ -0,0 +1,17 @@
{#-
This file was automatically generated - do not edit
-#}
{% if config.theme.icon.admonition %}
{% set style = ["\x3cstyle\x3e:root{"] %}
{% for type, icon in config.theme.icon.admonition.items() %}
{% import ".icons/" ~ icon ~ ".svg" as icon %}
{% set _ = style.append(
"--md-admonition-icon--" ~ type ~ ":" ~
"url('data:image/svg+xml;charset=utf-8," ~
icon | replace("\n", "") ~
"');"
) %}
{% endfor %}
{% set _ = style.append("}\x3c/style\x3e") %}
{{ style | join }}
{% endif %}

View File

@ -0,0 +1,6 @@
{#-
This file was automatically generated - do not edit
-#}
{% if "content.tabs.link" in features %}
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
{% endif %}

View File

@ -3,7 +3,6 @@
-#} -#}
{% macro t(key) %}{{ { {% macro t(key) %}{{ {
"language": "el", "language": "el",
"direction": "ltr",
"clipboard.copy": "Αντιγραφή στο πρόχειρο", "clipboard.copy": "Αντιγραφή στο πρόχειρο",
"clipboard.copied": "Αντιγράφηκε στο πρόχειρο", "clipboard.copied": "Αντιγράφηκε στο πρόχειρο",
"edit.link.title": "Επεξεργασία αυτής της σελίδας", "edit.link.title": "Επεξεργασία αυτής της σελίδας",

View File

@ -3,7 +3,6 @@
-#} -#}
{% macro t(key) %}{{ { {% macro t(key) %}{{ {
"language": "it", "language": "it",
"direction": "ltr",
"clipboard.copy": "Copia", "clipboard.copy": "Copia",
"clipboard.copied": "Copiato", "clipboard.copied": "Copiato",
"edit.link.title": "Modifica", "edit.link.title": "Modifica",

View File

@ -3,7 +3,6 @@
-#} -#}
{% macro t(key) %}{{ { {% macro t(key) %}{{ {
"language": "pt", "language": "pt",
"direction": "ltr",
"clipboard.copy": "Copiar para área de Transferência", "clipboard.copy": "Copiar para área de Transferência",
"clipboard.copied": "Copiado para área de Transferência", "clipboard.copied": "Copiado para área de Transferência",
"edit.link.title": "Editar esta página", "edit.link.title": "Editar esta página",

View File

@ -3,7 +3,6 @@
-#} -#}
{% macro t(key) %}{{ { {% macro t(key) %}{{ {
"language": "zh", "language": "zh",
"direction": "ltr",
"clipboard.copy": "复制", "clipboard.copy": "复制",
"clipboard.copied": "已复制", "clipboard.copied": "已复制",
"edit.link.title": "编辑此页", "edit.link.title": "编辑此页",

View File

@ -15,7 +15,7 @@
<li class="{{ class }} md-nav__item--nested"> <li class="{{ class }} md-nav__item--nested">
{% set checked = "checked" if nav_item.active %} {% set checked = "checked" if nav_item.active %}
{% if "navigation.expand" in features and not checked %} {% if "navigation.expand" in features and not checked %}
<input class="md-nav__toggle md-toggle" data-md-toggle="{{ path }}" data-md-state="indeterminate" type="checkbox" id="{{ path }}" checked> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" data-md-toggle="{{ path }}" type="checkbox" id="{{ path }}" checked>
{% else %} {% else %}
<input class="md-nav__toggle md-toggle" data-md-toggle="{{ path }}" type="checkbox" id="{{ path }}" {{ checked }}> <input class="md-nav__toggle md-toggle" data-md-toggle="{{ path }}" type="checkbox" id="{{ path }}" {{ checked }}>
{% endif %} {% endif %}

View File

@ -47,3 +47,9 @@ class SearchIndex(BaseIndex):
# Add document tags # Add document tags
if "tags" in page.meta: if "tags" in page.meta:
entry["tags"] = page.meta["tags"] entry["tags"] = page.meta["tags"]
# Add document boost for search
if "search" in page.meta:
search = page.meta["search"]
if "boost" in search:
entry["boost"] = search["boost"]

View File

@ -27,7 +27,6 @@ from markdown.extensions.toc import slugify
from mkdocs import utils from mkdocs import utils
from mkdocs.commands.build import DuplicateFilter from mkdocs.commands.build import DuplicateFilter
from mkdocs.config.config_options import Type from mkdocs.config.config_options import Type
from mkdocs.exceptions import ConfigurationError
from mkdocs.plugins import BasePlugin from mkdocs.plugins import BasePlugin
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------

13079
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{ {
"name": "mkdocs-material", "name": "mkdocs-material",
"version": "8.2.16", "version": "8.3.0",
"description": "Documentation that simply works", "description": "Documentation that simply works",
"keywords": [ "keywords": [
"mkdocs", "mkdocs",

View File

@ -31,6 +31,7 @@ import { getElement, getLocation } from "~/browser"
*/ */
export type Flag = export type Flag =
| "content.code.annotate" /* Code annotations */ | "content.code.annotate" /* Code annotations */
| "content.tabs.link" /* Link content tabs */
| "header.autohide" /* Hide header */ | "header.autohide" /* Hide header */
| "navigation.expand" /* Automatic expansion */ | "navigation.expand" /* Automatic expansion */
| "navigation.indexes" /* Section pages */ | "navigation.indexes" /* Section pages */

View File

@ -54,9 +54,9 @@ export interface Mermaid {}
let mermaid$: Observable<void> let mermaid$: Observable<void>
/** /**
* Global index for Mermaid integration * Global sequence number for diagrams
*/ */
let index = 0 let sequence = 0
/* ---------------------------------------------------------------------------- /* ----------------------------------------------------------------------------
* Helper functions * Helper functions
@ -101,7 +101,7 @@ export function mountMermaid(
/* Render diagram */ /* Render diagram */
mermaid$.subscribe(() => { mermaid$.subscribe(() => {
el.classList.add("mermaid") // Hack: mitigate https://bit.ly/3CiN6Du el.classList.add("mermaid") // Hack: mitigate https://bit.ly/3CiN6Du
const id = `__mermaid_${index++}` const id = `__mermaid_${sequence++}`
const host = h("div", { class: "mermaid" }) const host = h("div", { class: "mermaid" })
mermaid.mermaidAPI.render(id, el.textContent, (svg: string) => { mermaid.mermaidAPI.render(id, el.textContent, (svg: string) => {

View File

@ -32,6 +32,7 @@ import {
fromEvent, fromEvent,
map, map,
merge, merge,
skip,
startWith, startWith,
subscribeOn, subscribeOn,
takeLast, takeLast,
@ -39,13 +40,18 @@ import {
tap tap
} from "rxjs" } from "rxjs"
import { feature } from "~/_"
import { import {
getElement, getElement,
getElementContentOffset,
getElementContentSize,
getElementOffset, getElementOffset,
getElementSize, getElementSize,
getElements, getElements,
watchElementContentOffset,
watchElementSize watchElementSize
} from "~/browser" } from "~/browser"
import { renderTabbedControl } from "~/templates"
import { Component } from "../../_" import { Component } from "../../_"
@ -75,18 +81,15 @@ export function watchContentTabs(
el: HTMLElement el: HTMLElement
): Observable<ContentTabs> { ): Observable<ContentTabs> {
const inputs = getElements<HTMLInputElement>(":scope > input", el) const inputs = getElements<HTMLInputElement>(":scope > input", el)
const active = inputs.find(input => input.checked) || inputs[0] const initial = inputs.find(input => input.checked) || inputs[0]
return merge(...inputs.map(input => fromEvent(input, "change") return merge(...inputs.map(input => fromEvent(input, "change")
.pipe( .pipe(
map(() => ({ map(() => getElement<HTMLLabelElement>(`label[for=${input.id}]`))
active: getElement(`label[for=${input.id}]`)
}) as ContentTabs)
) )
)) ))
.pipe( .pipe(
startWith({ startWith(getElement<HTMLLabelElement>(`label[for=${initial.id}]`)),
active: getElement(`label[for=${active.id}]`) map(active => ({ active }))
} as ContentTabs)
) )
} }
@ -105,18 +108,29 @@ export function watchContentTabs(
export function mountContentTabs( export function mountContentTabs(
el: HTMLElement el: HTMLElement
): Observable<Component<ContentTabs>> { ): Observable<Component<ContentTabs>> {
/* Render content tab previous button for pagination */
const prev = renderTabbedControl("prev")
el.append(prev)
/* Render content tab next button for pagination */
const next = renderTabbedControl("next")
el.append(next)
/* Mount component on subscription */
const container = getElement(".tabbed-labels", el) const container = getElement(".tabbed-labels", el)
return defer(() => { return defer(() => {
const push$ = new Subject<ContentTabs>() const push$ = new Subject<ContentTabs>()
const done$ = push$.pipe(takeLast(1))
combineLatest([push$, watchElementSize(el)]) combineLatest([push$, watchElementSize(el)])
.pipe( .pipe(
auditTime(1, animationFrameScheduler), auditTime(1, animationFrameScheduler),
takeUntil(push$.pipe(takeLast(1))) takeUntil(done$)
) )
.subscribe({ .subscribe({
/* Handle emission */ /* Handle emission */
next([{ active }]) { next([{ active }, size]) {
const offset = getElementOffset(active) const offset = getElementOffset(active)
const { width } = getElementSize(active) const { width } = getElementSize(active)
@ -124,11 +138,12 @@ export function mountContentTabs(
el.style.setProperty("--md-indicator-x", `${offset.x}px`) el.style.setProperty("--md-indicator-x", `${offset.x}px`)
el.style.setProperty("--md-indicator-width", `${width}px`) el.style.setProperty("--md-indicator-width", `${width}px`)
/* Smoothly scroll container */ /* Scroll container to active content tab */
container.scrollTo({ const content = getElementContentOffset(container)
behavior: "smooth", if (offset.x < content.x)
left: offset.x prev.click()
}) else if (offset.x + width > content.x + size.width)
next.click()
}, },
/* Handle complete */ /* Handle complete */
@ -138,6 +153,57 @@ export function mountContentTabs(
} }
}) })
/* Hide content tab buttons on borders */
combineLatest([
watchElementContentOffset(container),
watchElementSize(container)
])
.pipe(
takeUntil(done$)
)
.subscribe(([offset, size]) => {
const content = getElementContentSize(container)
prev.hidden = offset.x < 16
next.hidden = offset.x > content.width - size.width - 16
})
/* Paginate content tab container on click */
merge(
fromEvent(prev, "click").pipe(map(() => -1)),
fromEvent(next, "click").pipe(map(() => +1))
)
.pipe(
takeUntil(done$)
)
.subscribe(direction => {
const { width } = getElementSize(container)
container.scrollBy({
left: width * direction,
behavior: "smooth"
})
})
/* Set up linking of content tabs, if enabled */
if (feature("content.tabs.link"))
push$.pipe(skip(1))
.subscribe(({ active }) => {
const tab = active.innerText.trim()
for (const set of getElements("[data-tabs]"))
for (const input of getElements<HTMLInputElement>(
":scope > input", set
)) {
const label = getElement(`label[for=${input.id}]`)
if (label.innerText.trim() === tab) {
input.click()
break
}
}
/* Persist active tabs in local storage */
const tabs = __md_get<string[]>("__tabs") || []
__md_set("__tabs", [...new Set([tab, ...tabs])])
})
/* Create and return component */ /* Create and return component */
return watchContentTabs(el) return watchContentTabs(el)
.pipe( .pipe(

View File

@ -113,11 +113,8 @@ export function mountDialog(
return defer(() => { return defer(() => {
const push$ = new Subject<Dialog>() const push$ = new Subject<Dialog>()
push$.subscribe(({ message, active }) => { push$.subscribe(({ message, active }) => {
el.classList.toggle("md-dialog--active", active)
inner.textContent = message inner.textContent = message
if (active)
el.setAttribute("data-md-state", "open")
else
el.removeAttribute("data-md-state")
}) })
/* Create and return component */ /* Create and return component */

View File

@ -175,16 +175,15 @@ export function mountHeader(
): Observable<Component<Header>> { ): Observable<Component<Header>> {
return defer(() => { return defer(() => {
const push$ = new Subject<Main>() const push$ = new Subject<Main>()
const done$ = push$.pipe(takeLast(1))
push$ push$
.pipe( .pipe(
distinctUntilKeyChanged("active"), distinctUntilKeyChanged("active"),
combineLatestWith(header$) combineLatestWith(header$)
) )
.subscribe(([{ active }, { hidden }]) => { .subscribe(([{ active }, { hidden }]) => {
if (active) el.classList.toggle("md-header--hidden", hidden)
el.setAttribute("data-md-state", hidden ? "hidden" : "shadow") el.classList.toggle("md-header--shadow", active && !hidden)
else
el.removeAttribute("data-md-state")
}) })
/* Link to main area */ /* Link to main area */
@ -193,7 +192,7 @@ export function mountHeader(
/* Create and return component */ /* Create and return component */
return header$ return header$
.pipe( .pipe(
takeUntil(push$.pipe(takeLast(1))), takeUntil(done$),
map(state => ({ ref: el, ...state })) map(state => ({ ref: el, ...state }))
) )
}) })

View File

@ -116,10 +116,7 @@ export function mountHeaderTitle(
return defer(() => { return defer(() => {
const push$ = new Subject<HeaderTitle>() const push$ = new Subject<HeaderTitle>()
push$.subscribe(({ active }) => { push$.subscribe(({ active }) => {
if (active) el.classList.toggle("md-header__title--active", active)
el.setAttribute("data-md-state", "active")
else
el.removeAttribute("data-md-state")
}) })
/* Obtain headline, if any */ /* Obtain headline, if any */

View File

@ -32,6 +32,7 @@ import {
fromEvent, fromEvent,
map, map,
merge, merge,
share,
shareReplay, shareReplay,
startWith, startWith,
take, take,
@ -155,6 +156,7 @@ export function mountSearchQuery(
el: HTMLInputElement, { tx$, rx$ }: SearchWorker el: HTMLInputElement, { tx$, rx$ }: SearchWorker
): Observable<Component<SearchQuery, HTMLInputElement>> { ): Observable<Component<SearchQuery, HTMLInputElement>> {
const push$ = new Subject<SearchQuery>() const push$ = new Subject<SearchQuery>()
const done$ = push$.pipe(takeLast(1))
/* Handle value changes */ /* Handle value changes */
push$ push$
@ -184,7 +186,7 @@ export function mountSearchQuery(
/* Handle reset */ /* Handle reset */
fromEvent(el.form!, "reset") fromEvent(el.form!, "reset")
.pipe( .pipe(
takeUntil(push$.pipe(takeLast(1))) takeUntil(done$)
) )
.subscribe(() => el.focus()) .subscribe(() => el.focus())
@ -193,6 +195,7 @@ export function mountSearchQuery(
.pipe( .pipe(
tap(state => push$.next(state)), tap(state => push$.next(state)),
finalize(() => push$.complete()), finalize(() => push$.complete()),
map(state => ({ ref: el, ...state })) map(state => ({ ref: el, ...state })),
share()
) )
} }

View File

@ -113,7 +113,7 @@ export function mountSource(
const push$ = new Subject<Source>() const push$ = new Subject<Source>()
push$.subscribe(({ facts }) => { push$.subscribe(({ facts }) => {
inner.appendChild(renderSourceFacts(facts)) inner.appendChild(renderSourceFacts(facts))
inner.setAttribute("data-md-state", "done") inner.classList.add("md-source__repository--active")
}) })
/* Create and return component */ /* Create and return component */

View File

@ -120,15 +120,12 @@ export function mountTabs(
/* Handle emission */ /* Handle emission */
next({ hidden }) { next({ hidden }) {
if (hidden) el.classList.toggle("md-tabs--hidden", hidden)
el.setAttribute("data-md-state", "hidden")
else
el.removeAttribute("data-md-state")
}, },
/* Handle complete */ /* Handle complete */
complete() { complete() {
el.removeAttribute("data-md-state") el.classList.remove("md-tabs--hidden")
} }
}) })

View File

@ -269,19 +269,18 @@ export function mountTableOfContents(
): Observable<Component<TableOfContents>> { ): Observable<Component<TableOfContents>> {
return defer(() => { return defer(() => {
const push$ = new Subject<TableOfContents>() const push$ = new Subject<TableOfContents>()
const done$ = push$.pipe(takeLast(1))
push$.subscribe(({ prev, next }) => { push$.subscribe(({ prev, next }) => {
/* Look forward */ /* Look forward */
for (const [anchor] of next) { for (const [anchor] of next) {
anchor.removeAttribute("data-md-state") anchor.classList.remove("md-nav__link--passed")
anchor.classList.remove( anchor.classList.remove("md-nav__link--active")
"md-nav__link--active"
)
} }
/* Look backward */ /* Look backward */
for (const [index, [anchor]] of prev.entries()) { for (const [index, [anchor]] of prev.entries()) {
anchor.setAttribute("data-md-state", "blur") anchor.classList.add("md-nav__link--passed")
anchor.classList.toggle( anchor.classList.toggle(
"md-nav__link--active", "md-nav__link--active",
index === prev.length - 1 index === prev.length - 1
@ -293,7 +292,7 @@ export function mountTableOfContents(
if (feature("navigation.tracking")) if (feature("navigation.tracking"))
viewport$ viewport$
.pipe( .pipe(
takeUntil(push$.pipe(takeLast(1))), takeUntil(done$),
distinctUntilKeyChanged("offset"), distinctUntilKeyChanged("offset"),
debounceTime(250), debounceTime(250),
skip(1), skip(1),

View File

@ -134,16 +134,16 @@ export function mountBackToTop(
el: HTMLElement, { viewport$, header$, main$, target$ }: MountOptions el: HTMLElement, { viewport$, header$, main$, target$ }: MountOptions
): Observable<Component<BackToTop>> { ): Observable<Component<BackToTop>> {
const push$ = new Subject<BackToTop>() const push$ = new Subject<BackToTop>()
const done$ = push$.pipe(takeLast(1))
push$.subscribe({ push$.subscribe({
/* Handle emission */ /* Handle emission */
next({ hidden }) { next({ hidden }) {
el.classList.toggle("md-top--hidden", hidden)
if (hidden) { if (hidden) {
el.setAttribute("data-md-state", "hidden")
el.setAttribute("tabindex", "-1") el.setAttribute("tabindex", "-1")
el.blur() el.blur()
} else { } else {
el.removeAttribute("data-md-state")
el.removeAttribute("tabindex") el.removeAttribute("tabindex")
} }
}, },
@ -151,7 +151,7 @@ export function mountBackToTop(
/* Handle complete */ /* Handle complete */
complete() { complete() {
el.style.top = "" el.style.top = ""
el.setAttribute("data-md-state", "hidden") el.classList.add("md-top--hidden")
el.removeAttribute("tabindex") el.removeAttribute("tabindex")
} }
}) })
@ -159,7 +159,7 @@ export function mountBackToTop(
/* Watch header height */ /* Watch header height */
header$ header$
.pipe( .pipe(
takeUntil(push$.pipe(endWith(0), takeLast(1))), takeUntil(done$),
distinctUntilKeyChanged("height") distinctUntilKeyChanged("height")
) )
.subscribe(({ height }) => { .subscribe(({ height }) => {

View File

@ -56,6 +56,7 @@ export interface SearchIndexDocument {
title: string /* Document title */ title: string /* Document title */
text: string /* Document text */ text: string /* Document text */
tags?: string[] /* Document tags */ tags?: string[] /* Document tags */
boost?: number /* Document boost */
} }
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
@ -207,7 +208,7 @@ export class Search {
/* Index documents */ /* Index documents */
for (const doc of docs) for (const doc of docs)
this.add(doc) this.add(doc, { boost: doc.boost })
}) })
} }

View File

@ -63,7 +63,8 @@ export function patchIndeterminate(
document$ document$
.pipe( .pipe(
switchMap(() => getElements<HTMLInputElement>( switchMap(() => getElements<HTMLInputElement>(
"[data-md-state=indeterminate]" // @todo `data-md-state` is deprecated and removed in v9
".md-toggle--indeterminate, [data-md-state=indeterminate]"
)), )),
tap(el => { tap(el => {
el.indeterminate = true el.indeterminate = true
@ -71,14 +72,14 @@ export function patchIndeterminate(
}), }),
mergeMap(el => fromEvent(el, "change") mergeMap(el => fromEvent(el, "change")
.pipe( .pipe(
takeWhile(() => el.hasAttribute("data-md-state")), takeWhile(() => el.classList.contains("md-toggle--indeterminate")),
map(() => el) map(() => el)
) )
), ),
withLatestFrom(tablet$) withLatestFrom(tablet$)
) )
.subscribe(([el, tablet]) => { .subscribe(([el, tablet]) => {
el.removeAttribute("data-md-state") el.classList.remove("md-toggle--indeterminate")
if (tablet) if (tablet)
el.checked = false el.checked = false
}) })

View File

@ -76,11 +76,11 @@ export function patchScrolllock(
) )
.subscribe(([active, { offset: { y }}]) => { .subscribe(([active, { offset: { y }}]) => {
if (active) { if (active) {
document.body.setAttribute("data-md-state", "lock") document.body.setAttribute("data-md-scrolllock", "")
document.body.style.top = `-${y}px` document.body.style.top = `-${y}px`
} else { } else {
const value = -1 * parseInt(document.body.style.top, 10) const value = -1 * parseInt(document.body.style.top, 10)
document.body.removeAttribute("data-md-state") document.body.removeAttribute("data-md-scrolllock")
document.body.style.top = "" document.body.style.top = ""
if (value) if (value)
window.scrollTo(0, value) window.scrollTo(0, value)

View File

@ -24,5 +24,6 @@ export * from "./annotation"
export * from "./clipboard" export * from "./clipboard"
export * from "./search" export * from "./search"
export * from "./source" export * from "./source"
export * from "./tabbed"
export * from "./table" export * from "./table"
export * from "./version" export * from "./version"

View File

@ -0,0 +1,56 @@
/*
* Copyright (c) 2016-2022 Martin Donath <martin.donath@squidfunk.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
import { h } from "~/utilities"
/* ----------------------------------------------------------------------------
* Helper types
* ------------------------------------------------------------------------- */
/**
* Tabbed control type
*/
type TabbedControlType =
| "prev"
| "next"
/* ----------------------------------------------------------------------------
* Functions
* ------------------------------------------------------------------------- */
/**
* Render control for content tabs
*
* @param type - Control type
*
* @returns Element
*/
export function renderTabbedControl(
type: TabbedControlType
): HTMLElement {
const classes = `tabbed-control tabbed-control--${type}`
return (
<div class={classes} hidden>
<button class="tabbed-button" tabIndex={-1}></button>
</div>
)
}

View File

@ -54,7 +54,7 @@ function renderVersion(version: Version): HTMLElement {
const url = new URL(`../${version.version}/`, config.base) const url = new URL(`../${version.version}/`, config.base)
return ( return (
<li class="md-version__item"> <li class="md-version__item">
<a href={url.toString()} class="md-version__link"> <a href={`${url}`} class="md-version__link">
{version.title} {version.title}
</a> </a>
</li> </li>

View File

@ -100,11 +100,16 @@ export function h<T extends h.JSX.Element>(
/* Set attributes, if any */ /* Set attributes, if any */
if (attributes) if (attributes)
for (const attr of Object.keys(attributes)) for (const attr of Object.keys(attributes)) {
if (typeof attributes[attr] === "undefined")
continue
/* Set default attribute or boolean */
if (typeof attributes[attr] !== "boolean") if (typeof attributes[attr] !== "boolean")
el.setAttribute(attr, attributes[attr]) el.setAttribute(attr, attributes[attr])
else if (attributes[attr]) else
el.setAttribute(attr, "") el.setAttribute(attr, "")
}
/* Append child nodes */ /* Append child nodes */
for (const child of children) for (const child of children)

View File

@ -50,60 +50,56 @@
--md-accent-bg-color: hsla(0, 0%, 100%, 1); --md-accent-bg-color: hsla(0, 0%, 100%, 1);
--md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7); --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);
// Light theme (default) // Code color shades
> * { --md-code-fg-color: hsla(200, 18%, 26%, 1);
--md-code-bg-color: hsla(0, 0%, 96%, 1);
// Code color shades // Code highlighting color shades
--md-code-fg-color: hsla(200, 18%, 26%, 1); --md-code-hl-color: hsla(#{hex2hsl($clr-yellow-a200)}, 0.5);
--md-code-bg-color: hsla(0, 0%, 96%, 1); --md-code-hl-number-color: hsla(0, 67%, 50%, 1);
--md-code-hl-special-color: hsla(340, 83%, 47%, 1);
--md-code-hl-function-color: hsla(291, 45%, 50%, 1);
--md-code-hl-constant-color: hsla(250, 63%, 60%, 1);
--md-code-hl-keyword-color: hsla(219, 54%, 51%, 1);
--md-code-hl-string-color: hsla(150, 63%, 30%, 1);
--md-code-hl-name-color: var(--md-code-fg-color);
--md-code-hl-operator-color: var(--md-default-fg-color--light);
--md-code-hl-punctuation-color: var(--md-default-fg-color--light);
--md-code-hl-comment-color: var(--md-default-fg-color--light);
--md-code-hl-generic-color: var(--md-default-fg-color--light);
--md-code-hl-variable-color: var(--md-default-fg-color--light);
// Code highlighting color shades // Typeset color shades
--md-code-hl-color: hsla(#{hex2hsl($clr-yellow-a200)}, 0.5); --md-typeset-color: var(--md-default-fg-color);
--md-code-hl-number-color: hsla(0, 67%, 50%, 1);
--md-code-hl-special-color: hsla(340, 83%, 47%, 1);
--md-code-hl-function-color: hsla(291, 45%, 50%, 1);
--md-code-hl-constant-color: hsla(250, 63%, 60%, 1);
--md-code-hl-keyword-color: hsla(219, 54%, 51%, 1);
--md-code-hl-string-color: hsla(150, 63%, 30%, 1);
--md-code-hl-name-color: var(--md-code-fg-color);
--md-code-hl-operator-color: var(--md-default-fg-color--light);
--md-code-hl-punctuation-color: var(--md-default-fg-color--light);
--md-code-hl-comment-color: var(--md-default-fg-color--light);
--md-code-hl-generic-color: var(--md-default-fg-color--light);
--md-code-hl-variable-color: var(--md-default-fg-color--light);
// Typeset color shades // Typeset `a` color shades
--md-typeset-color: var(--md-default-fg-color); --md-typeset-a-color: var(--md-primary-fg-color);
// Typeset `a` color shades // Typeset `mark` color shades
--md-typeset-a-color: var(--md-primary-fg-color); --md-typeset-mark-color: hsla(#{hex2hsl($clr-yellow-a200)}, 0.5);
// Typeset `mark` color shades // Typeset `del` and `ins` color shades
--md-typeset-mark-color: hsla(#{hex2hsl($clr-yellow-a200)}, 0.5); --md-typeset-del-color: hsla(6, 90%, 60%, 0.15);
--md-typeset-ins-color: hsla(150, 90%, 44%, 0.15);
// Typeset `del` and `ins` color shades // Typeset `kbd` color shades
--md-typeset-del-color: hsla(6, 90%, 60%, 0.15); --md-typeset-kbd-color: hsla(0, 0%, 98%, 1);
--md-typeset-ins-color: hsla(150, 90%, 44%, 0.15); --md-typeset-kbd-accent-color: hsla(0, 100%, 100%, 1);
--md-typeset-kbd-border-color: hsla(0, 0%, 72%, 1);
// Typeset `kbd` color shades // Typeset `table` color shades
--md-typeset-kbd-color: hsla(0, 0%, 98%, 1); --md-typeset-table-color: hsla(0, 0%, 0%, 0.12);
--md-typeset-kbd-accent-color: hsla(0, 100%, 100%, 1);
--md-typeset-kbd-border-color: hsla(0, 0%, 72%, 1);
// Typeset `table` color shades // Admonition color shades
--md-typeset-table-color: hsla(0, 0%, 0%, 0.12); --md-admonition-fg-color: var(--md-default-fg-color);
--md-admonition-bg-color: var(--md-default-bg-color);
// Admonition color shades // Footer color shades
--md-admonition-fg-color: var(--md-default-fg-color); --md-footer-fg-color: hsla(0, 0%, 100%, 1);
--md-admonition-bg-color: var(--md-default-bg-color); --md-footer-fg-color--light: hsla(0, 0%, 100%, 0.7);
--md-footer-fg-color--lighter: hsla(0, 0%, 100%, 0.3);
// Footer color shades --md-footer-bg-color: hsla(0, 0%, 0%, 0.87);
--md-footer-fg-color: hsla(0, 0%, 100%, 1); --md-footer-bg-color--dark: hsla(0, 0%, 0%, 0.32);
--md-footer-fg-color--light: hsla(0, 0%, 100%, 0.7);
--md-footer-fg-color--lighter: hsla(0, 0%, 100%, 0.3);
--md-footer-bg-color: hsla(0, 0%, 0%, 0.87);
--md-footer-bg-color--dark: hsla(0, 0%, 0%, 0.32);
}
// Shadow depth 1 // Shadow depth 1
--md-shadow-z1: --md-shadow-z1:
@ -120,3 +116,10 @@
0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.2), 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.2),
0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.35); 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.35);
} }
// ----------------------------------------------------------------------------
// Allow to explicitly use color schemes in nested content
[data-md-color-scheme="default"] {
@extend :root;
}

View File

@ -152,6 +152,7 @@ $admonitions: (
// Rules: flavours // Rules: flavours
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Define admonition flavors
@each $names, $props in $admonitions { @each $names, $props in $admonitions {
$name: list.nth($names, 1); $name: list.nth($names, 1);
$tint: list.nth($props, 2); $tint: list.nth($props, 2);

View File

@ -24,6 +24,14 @@
// Rules // Rules
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Tabbed variables
:root {
--md-tabbed-icon--prev: svg-load("material/chevron-left.svg");
--md-tabbed-icon--next: svg-load("material/chevron-right.svg");
}
// ----------------------------------------------------------------------------
// Scoped in typesetted content to match specificity of regular content // Scoped in typesetted content to match specificity of regular content
.md-typeset { .md-typeset {
@ -139,6 +147,7 @@
transition: transition:
background-color 250ms, background-color 250ms,
color 250ms; color 250ms;
scroll-margin-inline-start: px2rem(20px);
// [print]: Intersperse labels with containers // [print]: Intersperse labels with containers
@media print { @media print {
@ -239,6 +248,85 @@
margin: 0; margin: 0;
} }
} }
// Tabbed button
.tabbed-button {
display: block;
align-self: center;
width: px2rem(18px);
height: px2rem(18px);
margin-top: px2rem(2px);
color: var(--md-default-fg-color--light);
border-radius: 100%;
cursor: pointer;
transition: background-color 250ms;
pointer-events: initial;
// Tabbed button on hover
&:hover {
color: var(--md-accent-fg-color);
background-color: var(--md-accent-fg-color--transparent);
}
// Tabbed button icon
&::after {
display: block;
width: 100%;
height: 100%;
background-color: currentcolor;
transition:
background-color 250ms,
transform 250ms;
mask-image: var(--md-tabbed-icon--prev);
mask-repeat: no-repeat;
mask-size: contain;
content: "";
}
}
// Tabbed control
.tabbed-control {
position: absolute;
display: flex;
justify-content: start;
width: px2rem(24px);
height: px2rem(38px);
background:
linear-gradient(
to right,
var(--md-default-bg-color) 60%,
transparent
);
transition: opacity 125ms;
pointer-events: none;
// Adjust for right-to-left languages
[dir="rtl"] & {
transform: rotate(180deg);
}
// Tabbed control is hidden
&[hidden] {
opacity: 0;
}
// Tabbed control next
&--next {
right: 0;
justify-content: end;
background:
linear-gradient(
to left,
var(--md-default-bg-color) 60%,
transparent
);
// Tabbed button icon content
.tabbed-button::after {
mask-image: var(--md-tabbed-icon--next);
}
}
}
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -261,6 +349,20 @@
padding-inline-end: px2rem(16px); padding-inline-end: px2rem(16px);
content: ""; content: "";
} }
// Tabbed control previous
~ .tabbed-control--prev {
width: px2rem(40px);
margin-inline-start: px2rem(-16px);
padding-inline-start: px2rem(16px);
}
// Tabbed control next
~ .tabbed-control--next {
width: px2rem(40px);
margin-inline-end: px2rem(-16px);
padding-inline-end: px2rem(16px);
}
} }
} }

View File

@ -25,7 +25,7 @@
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// All definitions // All definitions
:root > * { :root {
--md-mermaid-font-family: var(--md-text-font-family), sans-serif; --md-mermaid-font-family: var(--md-text-font-family), sans-serif;
// Colors // Colors

View File

@ -66,7 +66,7 @@ body {
} }
// Body in locked state // Body in locked state
&[data-md-state="lock"] { &[data-md-scrolllock] {
// [tablet portrait -]: Omit scroll bubbling // [tablet portrait -]: Omit scroll bubbling
@include break-to-device(tablet portrait) { @include break-to-device(tablet portrait) {

View File

@ -47,8 +47,8 @@
display: none; display: none;
} }
// Dialog in open state // Active dialog
&[data-md-state="open"] { &--active {
transform: translateY(0); transform: translateY(0);
opacity: 1; opacity: 1;
transition: transition:

View File

@ -36,10 +36,14 @@
// Footer wrapper // Footer wrapper
&__inner { &__inner {
display: flex;
justify-content: space-between; justify-content: space-between;
padding: px2rem(4px); padding: px2rem(4px);
overflow: auto; overflow: auto;
// Footer is visible
&:not([hidden]) {
display: flex;
}
} }
// Footer link to previous and next page // Footer link to previous and next page
@ -99,6 +103,7 @@
padding: 0 px2rem(20px); padding: 0 px2rem(20px);
font-size: px2rem(18px); font-size: px2rem(18px);
line-height: px2rem(48px); line-height: px2rem(48px);
white-space: nowrap;
} }
// Footer link button // Footer link button

View File

@ -45,7 +45,7 @@
} }
// Header in shadow state, i.e. shadow is visible // Header in shadow state, i.e. shadow is visible
&[data-md-state="shadow"] { &--shadow {
box-shadow: box-shadow:
0 0 px2rem(4px) rgba(0, 0, 0, 0.1), 0 0 px2rem(4px) rgba(0, 0, 0, 0.1),
0 px2rem(4px) px2rem(8px) rgba(0, 0, 0, 0.2); 0 px2rem(4px) px2rem(8px) rgba(0, 0, 0, 0.2);
@ -55,7 +55,7 @@
} }
// Header in hidden state, i.e. moved out of sight // Header in hidden state, i.e. moved out of sight
&[data-md-state="hidden"] { &--hidden {
transform: translateY(-100%); transform: translateY(-100%);
transition: transition:
transform 250ms cubic-bezier(0.8, 0, 0.6, 1), transform 250ms cubic-bezier(0.8, 0, 0.6, 1),
@ -150,6 +150,7 @@
position: absolute; position: absolute;
display: flex; display: flex;
max-width: 100%; max-width: 100%;
white-space: nowrap;
transition: transition:
transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),
opacity 150ms; opacity 150ms;
@ -186,7 +187,7 @@
line-height: px2rem(48px); line-height: px2rem(48px);
// Header title in active state, i.e. page title is visible // Header title in active state, i.e. page title is visible
&[data-md-state="active"] .md-header__topic { &--active .md-header__topic {
z-index: -1; z-index: -1;
transform: translateX(px2rem(-25px)); transform: translateX(px2rem(-25px));
opacity: 0; opacity: 0;

View File

@ -101,8 +101,8 @@
transition: color 125ms; transition: color 125ms;
scroll-snap-align: start; scroll-snap-align: start;
// Navigation link in blurred state // Navigation link that was passed
&[data-md-state="blur"] { &--passed {
color: var(--md-default-fg-color--light); color: var(--md-default-fg-color--light);
} }

View File

@ -529,6 +529,8 @@
margin: 0; margin: 0;
padding: 0; padding: 0;
list-style: none; list-style: none;
// Hack: omit accidental text selection on fast toggle of more button
user-select: none;
} }
// Search result item // Search result item

View File

@ -122,7 +122,7 @@
opacity: 0.75; opacity: 0.75;
// Show after the data was loaded // Show after the data was loaded
[data-md-state="done"] & { .md-source__repository--active & {
animation: facts 250ms ease-in; animation: facts 250ms ease-in;
} }
} }
@ -132,7 +132,7 @@
display: inline-block; display: inline-block;
// Show after the data was loaded // Show after the data was loaded
[data-md-state="done"] & { .md-source__repository--active & {
animation: fact 400ms ease-out; animation: fact 400ms ease-out;
} }

View File

@ -29,6 +29,7 @@
width: 100%; width: 100%;
overflow: auto; overflow: auto;
color: var(--md-primary-bg-color); color: var(--md-primary-bg-color);
line-height: 1.3;
background-color: var(--md-primary-fg-color); background-color: var(--md-primary-fg-color);
// [print]: Hide tabs // [print]: Hide tabs
@ -41,8 +42,8 @@
display: none; display: none;
} }
// Tabs in hidden state, i.e. when scrolling down // Navigation tabs are hidden
&[data-md-state="hidden"] { &--hidden {
pointer-events: none; pointer-events: none;
} }
@ -94,7 +95,7 @@
// Hide tabs upon scrolling - disable transition to minimizes repaints // Hide tabs upon scrolling - disable transition to minimizes repaints
// while scrolling down, while scrolling up seems to be okay // while scrolling down, while scrolling up seems to be okay
.md-tabs[data-md-state="hidden"] & { .md-tabs.md-tabs--hidden & {
transform: translateY(50%); transform: translateY(50%);
opacity: 0; opacity: 0;
transition: transition:

View File

@ -61,12 +61,10 @@
clamp( clamp(
var(--md-tooltip-0, #{px2rem(0px)}) + #{px2rem(16px)}, var(--md-tooltip-0, #{px2rem(0px)}) + #{px2rem(16px)},
var(--md-tooltip-x), var(--md-tooltip-x),
( 100vw +
100vw + var(--md-tooltip-0, #{px2rem(0px)}) + #{px2rem(16px)} -
var(--md-tooltip-0, #{px2rem(0px)}) + #{px2rem(16px)} - var(--md-tooltip-width) -
var(--md-tooltip-width) - 2 * #{px2rem(16px)}
2 * #{px2rem(16px)}
)
); );
// Hack: set an explicit `z-index` so we can transition it to ensure that any // Hack: set an explicit `z-index` so we can transition it to ensure that any
// following elements are not overlaying the tooltip during the transition. // following elements are not overlaying the tooltip during the transition.

View File

@ -54,8 +54,8 @@
transform: translate(50%, 0); transform: translate(50%, 0);
} }
// Back-to-top button in hidden state // Back-to-top button is hidden
&[data-md-state="hidden"] { &--hidden {
transform: translate(-50%, px2rem(4px)); transform: translate(-50%, px2rem(4px));
opacity: 0; opacity: 0;
transition-duration: 0ms; transition-duration: 0ms;

View File

@ -35,6 +35,6 @@
@import "config"; @import "config";
@import "palette/scheme";
@import "palette/accent"; @import "palette/accent";
@import "palette/primary"; @import "palette/primary";
@import "palette/scheme";

View File

@ -24,6 +24,7 @@
// Rules // Rules
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Define accent colors
@each $name, $color in ( @each $name, $color in (
"red": $clr-red-a400, "red": $clr-red-a400,
"pink": $clr-pink-a400, "pink": $clr-pink-a400,

View File

@ -26,6 +26,7 @@
// Rules // Rules
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Define primary colors
@each $name, $colors in ( @each $name, $colors in (
"red": $clr-red-400 $clr-red-300 $clr-red-600, "red": $clr-red-400 $clr-red-300 $clr-red-600,
"pink": $clr-pink-500 $clr-pink-400 $clr-pink-700, "pink": $clr-pink-500 $clr-pink-400 $clr-pink-700,
@ -62,6 +63,26 @@
--md-primary-bg-color: hsla(0, 0%, 100%, 1); --md-primary-bg-color: hsla(0, 0%, 100%, 1);
--md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7); --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);
} }
// Typeset color shades
@if index("grey" "blue-grey", $name) {
--md-typeset-a-color: hsl(#{hex2hsl($clr-indigo-500)});
}
}
}
// ----------------------------------------------------------------------------
// Adjust link colors for light primary colors
@each $name, $color in (
"light-green": hsl(88, 58%, 43%),
"lime": hsl(66, 88%, 32%),
"yellow": hsl(54, 100%, 36%),
"amber": hsl(45, 100%, 41%),
"orange": hsl(36, 100%, 45%)
) {
[data-md-color-primary="#{$name}"]:not([data-md-color-scheme="slate"]) {
--md-typeset-a-color: #{$color};
} }
} }
@ -69,7 +90,7 @@
// Rules: white // Rules: white
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Color palette // Define primary colors for white
[data-md-color-primary="white"] { [data-md-color-primary="white"] {
--md-primary-fg-color: hsla(0, 0%, 100%, 1); --md-primary-fg-color: hsla(0, 0%, 100%, 1);
--md-primary-fg-color--light: hsla(0, 0%, 100%, 0.7); --md-primary-fg-color--light: hsla(0, 0%, 100%, 0.7);
@ -77,8 +98,8 @@
--md-primary-bg-color: hsla(0, 0%, 0%, 0.87); --md-primary-bg-color: hsla(0, 0%, 0%, 0.87);
--md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54); --md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54);
// Typeset color shades // Typeset `a` color shades
--md-typeset-a-color: hsla(#{hex2hsl($clr-indigo-500)}, 1); --md-typeset-a-color: hsl(#{hex2hsl($clr-indigo-500)});
// [tablet portrait +]: Header-embedded search // [tablet portrait +]: Header-embedded search
@include break-from-device(tablet landscape) { @include break-from-device(tablet landscape) {
@ -113,7 +134,7 @@
// Rules: black // Rules: black
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Color palette // Define primary colors for black
[data-md-color-primary="black"] { [data-md-color-primary="black"] {
--md-primary-fg-color: hsla(0, 0%, 0%, 1); --md-primary-fg-color: hsla(0, 0%, 0%, 1);
--md-primary-fg-color--light: hsla(0, 0%, 0%, 0.54); --md-primary-fg-color--light: hsla(0, 0%, 0%, 0.54);
@ -121,8 +142,8 @@
--md-primary-bg-color: hsla(0, 0%, 100%, 1); --md-primary-bg-color: hsla(0, 0%, 100%, 1);
--md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7); --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);
// Text color shades // Typeset `a` color shades
--md-typeset-a-color: hsla(#{hex2hsl($clr-indigo-500)}, 1); --md-typeset-a-color: hsl(#{hex2hsl($clr-indigo-500)});
// Header // Header
.md-header { .md-header {

View File

@ -82,19 +82,27 @@
--md-typeset-table-color: hsla(var(--md-hue), 75%, 95%, 0.12); --md-typeset-table-color: hsla(var(--md-hue), 75%, 95%, 0.12);
// Admonition color shades // Admonition color shades
--md-admonition-bg-color: hsla(var(--md-hue), 0%, 100%, 0.025); --md-admonition-fg-color: var(--md-default-fg-color);
--md-admonition-bg-color: var(--md-default-bg-color);
// Footer color shades // Footer color shades
--md-footer-bg-color: hsla(var(--md-hue), 15%, 12%, 0.87); --md-footer-bg-color: hsla(var(--md-hue), 15%, 12%, 0.87);
--md-footer-bg-color--dark: hsla(var(--md-hue), 15%, 10%, 1); --md-footer-bg-color--dark: hsla(var(--md-hue), 15%, 10%, 1);
// Black and white primary colors // Shadow depth 1
&[data-md-color-primary="black"], --md-shadow-z1:
&[data-md-color-primary="white"] { 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.2),
0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.1);
// Typeset color shades // Shadow depth 2
--md-typeset-a-color: hsla(#{hex2hsl($clr-indigo-400)}, 1); --md-shadow-z2:
} 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.3),
0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.25);
// Shadow depth 3
--md-shadow-z3:
0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.4),
0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.35);
// Hide images for light mode // Hide images for light mode
img[src$="#only-light"], img[src$="#only-light"],
@ -109,6 +117,32 @@
} }
} }
// --------------------------------------------------------------------------
// Adjust link colors for dark primary colors
@each $name, $color in (
"pink": hsl(340, 81%, 63%),
"purple": hsl(291, 43%, 63%),
"deep-purple": hsl(262, 63%, 70%),
"indigo": hsl(219, 56%, 63%),
"teal": hsl(174, 100%, 40%),
"green": hsl(122, 39%, 60%),
"deep-orange": hsl(14, 100%, 73%),
"brown": hsl(16, 45%, 60%),
// Set neutral colors to indigo
"grey": hsl(219, 56%, 63%),
"blue-grey": hsl(219, 56%, 63%),
"white": hsl(219, 56%, 63%),
"black": hsl(219, 56%, 63%)
) {
[data-md-color-scheme="slate"][data-md-color-primary="#{$name}"] {
--md-typeset-a-color: #{$color};
}
}
// --------------------------------------------------------------------------
// Switching in progress - disable all transitions temporarily // Switching in progress - disable all transitions temporarily
[data-md-color-switching] *, [data-md-color-switching] *,
[data-md-color-switching] *::before, [data-md-color-switching] *::before,

View File

@ -92,6 +92,9 @@
<meta name="theme-color" content="{{ primary }}" /> <meta name="theme-color" content="{{ primary }}" />
{% endif %} {% endif %}
{% endif %} {% endif %}
<!-- Custom icons -->
{% include "partials/icons.html" %}
{% endblock %} {% endblock %}
<!-- JavaScript libraries --> <!-- JavaScript libraries -->
@ -157,8 +160,6 @@
{% else %} {% else %}
<body dir="{{ direction }}"> <body dir="{{ direction }}">
{% endif %} {% endif %}
<!-- Retrieve features from configuration -->
{% set features = config.theme.features or [] %} {% set features = config.theme.features or [] %}
<!-- User preference: color palette --> <!-- User preference: color palette -->
@ -247,10 +248,10 @@
<main class="md-main" data-md-component="main"> <main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid"> <div class="md-main__inner md-grid">
<!-- Navigation --> <!-- Sidebars -->
{% block site_nav %} {% block site_nav %}
<!-- Main navigation --> <!-- Navigation -->
{% if nav %} {% if nav %}
{% if page and page.meta and page.meta.hide %} {% if page and page.meta and page.meta.hide %}
{% set hidden = "hidden" if "navigation" in page.meta.hide %} {% set hidden = "hidden" if "navigation" in page.meta.hide %}
@ -296,6 +297,9 @@
{% include "partials/content.html" %} {% include "partials/content.html" %}
{% endblock %} {% endblock %}
</article> </article>
<!-- User preference: content -->
{% include "partials/javascripts/content.html" %}
</div> </div>
</div> </div>
@ -303,9 +307,8 @@
{% if "navigation.top" in features %} {% if "navigation.top" in features %}
<a <a
href="#" href="#"
class="md-top md-icon" class="md-top md-top--hidden md-icon"
data-md-component="top" data-md-component="top"
data-md-state="hidden"
> >
{% include ".icons/material/arrow-up.svg" %} {% include ".icons/material/arrow-up.svg" %}
{{ lang.t('top.title') }} {{ lang.t('top.title') }}

View File

@ -25,9 +25,11 @@
<!-- Link to previous and/or next page --> <!-- Link to previous and/or next page -->
{% if page.previous_page or page.next_page %} {% if page.previous_page or page.next_page %}
{% set hidden = "hidden" if "footer" in page.meta.hide %}
<nav <nav
class="md-footer__inner md-grid" class="md-footer__inner md-grid"
aria-label="{{ lang.t('footer.title') }}" aria-label="{{ lang.t('footer.title') }}"
{{ hidden }}
> >
<!-- Link to previous page --> <!-- Link to previous page -->

37
src/partials/icons.html Normal file
View File

@ -0,0 +1,37 @@
<!--
Copyright (c) 2016-2022 Martin Donath <martin.donath@squidfunk.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
<!-- Custom admonition icons -->
{% if config.theme.icon.admonition %}
{% set style = ["\x3cstyle\x3e:root{"] %}
{% for type, icon in config.theme.icon.admonition.items() %}
{% import ".icons/" ~ icon ~ ".svg" as icon %}
{% set _ = style.append(
"--md-admonition-icon--" ~ type ~ ":" ~
"url('data:image/svg+xml;charset=utf-8," ~
icon | replace("\n", "") ~
"');"
) %}
{% endfor %}
{% set _ = style.append("}\x3c/style\x3e") %}
{{ style | join }}
{% endif %}

View File

@ -0,0 +1,39 @@
<!--
Copyright (c) 2016-2022 Martin Donath <martin.donath@squidfunk.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
<!-- User-preference: link content tabs -->
{% if "content.tabs.link" in features %}
<script>
var tabs = __md_get("__tabs")
if (Array.isArray(tabs))
main: for (var set of document.querySelectorAll(".tabbed-set")) {
var labels = set.querySelector(".tabbed-labels")
for (var tab of tabs)
for (var label of labels.getElementsByTagName("label"))
if (label.innerText.trim() === tab) {
var input = document.getElementById(label.htmlFor)
input.checked = true
continue main
}
}
</script>
{% endif %}

View File

@ -23,7 +23,6 @@
<!-- Translations: Greek --> <!-- Translations: Greek -->
{% macro t(key) %}{{ { {% macro t(key) %}{{ {
"language": "el", "language": "el",
"direction": "ltr",
"clipboard.copy": "Αντιγραφή στο πρόχειρο", "clipboard.copy": "Αντιγραφή στο πρόχειρο",
"clipboard.copied": "Αντιγράφηκε στο πρόχειρο", "clipboard.copied": "Αντιγράφηκε στο πρόχειρο",
"edit.link.title": "Επεξεργασία αυτής της σελίδας", "edit.link.title": "Επεξεργασία αυτής της σελίδας",

View File

@ -23,7 +23,6 @@
<!-- Translations: Italian --> <!-- Translations: Italian -->
{% macro t(key) %}{{ { {% macro t(key) %}{{ {
"language": "it", "language": "it",
"direction": "ltr",
"clipboard.copy": "Copia", "clipboard.copy": "Copia",
"clipboard.copied": "Copiato", "clipboard.copied": "Copiato",
"edit.link.title": "Modifica", "edit.link.title": "Modifica",

View File

@ -23,7 +23,6 @@
<!-- Translations: Portuguese (Brasilian) --> <!-- Translations: Portuguese (Brasilian) -->
{% macro t(key) %}{{ { {% macro t(key) %}{{ {
"language": "pt", "language": "pt",
"direction": "ltr",
"clipboard.copy": "Copiar para área de Transferência", "clipboard.copy": "Copiar para área de Transferência",
"clipboard.copied": "Copiado para área de Transferência", "clipboard.copied": "Copiado para área de Transferência",
"edit.link.title": "Editar esta página", "edit.link.title": "Editar esta página",

View File

@ -23,7 +23,6 @@
<!-- Translations: Chinese (Simplified) --> <!-- Translations: Chinese (Simplified) -->
{% macro t(key) %}{{ { {% macro t(key) %}{{ {
"language": "zh", "language": "zh",
"direction": "ltr",
"clipboard.copy": "复制", "clipboard.copy": "复制",
"clipboard.copied": "已复制", "clipboard.copied": "已复制",
"edit.link.title": "编辑此页", "edit.link.title": "编辑此页",

View File

@ -46,9 +46,8 @@
{% set checked = "checked" if nav_item.active %} {% set checked = "checked" if nav_item.active %}
{% if "navigation.expand" in features and not checked %} {% if "navigation.expand" in features and not checked %}
<input <input
class="md-nav__toggle md-toggle" class="md-nav__toggle md-toggle md-toggle--indeterminate"
data-md-toggle="{{ path }}" data-md-toggle="{{ path }}"
data-md-state="indeterminate"
type="checkbox" type="checkbox"
id="{{ path }}" id="{{ path }}"
checked checked

View File

@ -26,7 +26,7 @@
{{ toc_item.title }} {{ toc_item.title }}
</a> </a>
<!-- Render nested item list --> <!-- Table of contents list -->
{% if toc_item.children %} {% if toc_item.children %}
<nav class="md-nav" aria-label="{{ toc_item.title }}"> <nav class="md-nav" aria-label="{{ toc_item.title }}">
<ul class="md-nav__list"> <ul class="md-nav__list">

View File

@ -41,7 +41,7 @@
{% set toc = first.children %} {% set toc = first.children %}
{% endif %} {% endif %}
<!-- Render item list --> <!-- Table of contents title and list -->
{% if toc %} {% if toc %}
<label class="md-nav__title" for="__toc"> <label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span> <span class="md-nav__icon md-icon"></span>

View File

@ -47,3 +47,9 @@ class SearchIndex(BaseIndex):
# Add document tags # Add document tags
if "tags" in page.meta: if "tags" in page.meta:
entry["tags"] = page.meta["tags"] entry["tags"] = page.meta["tags"]
# Add document boost for search
if "search" in page.meta:
search = page.meta["search"]
if "boost" in search:
entry["boost"] = search["boost"]

View File

@ -27,7 +27,6 @@ from markdown.extensions.toc import slugify
from mkdocs import utils from mkdocs import utils
from mkdocs.commands.build import DuplicateFilter from mkdocs.commands.build import DuplicateFilter
from mkdocs.config.config_options import Type from mkdocs.config.config_options import Type
from mkdocs.exceptions import ConfigurationError
from mkdocs.plugins import BasePlugin from mkdocs.plugins import BasePlugin
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------