mirror of
https://github.com/squidfunk/mkdocs-material.git
synced 2024-06-14 11:52:32 +03:00
Link header to viewport resizes
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
material/assets/javascripts/bundle.eb1b83da.min.js.map
Normal file
1
material/assets/javascripts/bundle.eb1b83da.min.js.map
Normal file
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"assets/javascripts/bundle.js": "assets/javascripts/bundle.1cb58dcf.min.js",
|
"assets/javascripts/bundle.js": "assets/javascripts/bundle.eb1b83da.min.js",
|
||||||
"assets/javascripts/bundle.js.map": "assets/javascripts/bundle.1cb58dcf.min.js.map",
|
"assets/javascripts/bundle.js.map": "assets/javascripts/bundle.eb1b83da.min.js.map",
|
||||||
"assets/javascripts/worker/packer.js": "assets/javascripts/worker/packer.c14659e8.min.js",
|
"assets/javascripts/worker/packer.js": "assets/javascripts/worker/packer.c14659e8.min.js",
|
||||||
"assets/javascripts/worker/packer.js.map": "assets/javascripts/worker/packer.c14659e8.min.js.map",
|
"assets/javascripts/worker/packer.js.map": "assets/javascripts/worker/packer.c14659e8.min.js.map",
|
||||||
"assets/javascripts/worker/search.js": "assets/javascripts/worker/search.0a5433f7.min.js",
|
"assets/javascripts/worker/search.js": "assets/javascripts/worker/search.0a5433f7.min.js",
|
||||||
|
|||||||
@@ -190,7 +190,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script src="{{ 'assets/javascripts/bundle.1cb58dcf.min.js' | url }}"></script>
|
<script src="{{ 'assets/javascripts/bundle.eb1b83da.min.js' | url }}"></script>
|
||||||
<script id="__lang" type="application/json">
|
<script id="__lang" type="application/json">
|
||||||
{%- set translations = {} -%}
|
{%- set translations = {} -%}
|
||||||
{%- for key in [
|
{%- for key in [
|
||||||
|
|||||||
@@ -20,10 +20,21 @@
|
|||||||
* IN THE SOFTWARE.
|
* IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { OperatorFunction, pipe } from "rxjs"
|
import { Observable, OperatorFunction, pipe } from "rxjs"
|
||||||
import { shareReplay, switchMap } from "rxjs/operators"
|
import { shareReplay, switchMap } from "rxjs/operators"
|
||||||
|
|
||||||
import { Header, watchHeader } from "observables"
|
import { Header, Viewport, watchHeader } from "observables"
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------------
|
||||||
|
* Helper types
|
||||||
|
* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mount options
|
||||||
|
*/
|
||||||
|
interface MountOptions {
|
||||||
|
viewport$: Observable<Viewport> /* Viewport observable */
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------
|
||||||
* Functions
|
* Functions
|
||||||
@@ -32,11 +43,15 @@ import { Header, watchHeader } from "observables"
|
|||||||
/**
|
/**
|
||||||
* Mount header from source observable
|
* Mount header from source observable
|
||||||
*
|
*
|
||||||
|
* @param options - Options
|
||||||
|
*
|
||||||
* @return Header observable
|
* @return Header observable
|
||||||
*/
|
*/
|
||||||
export function mountHeader(): OperatorFunction<HTMLElement, Header> {
|
export function mountHeader(
|
||||||
|
{ viewport$ }: MountOptions
|
||||||
|
): OperatorFunction<HTMLElement, Header> {
|
||||||
return pipe(
|
return pipe(
|
||||||
switchMap(watchHeader),
|
switchMap(el => watchHeader(el, { viewport$ })),
|
||||||
shareReplay(1)
|
shareReplay(1)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ export function initialize(config: unknown) {
|
|||||||
/* Create header observable */
|
/* Create header observable */
|
||||||
const header$ = useComponent("header")
|
const header$ = useComponent("header")
|
||||||
.pipe(
|
.pipe(
|
||||||
mountHeader()
|
mountHeader({ viewport$ })
|
||||||
)
|
)
|
||||||
|
|
||||||
const main$ = useComponent("main")
|
const main$ = useComponent("main")
|
||||||
|
|||||||
@@ -21,6 +21,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Observable, of } from "rxjs"
|
import { Observable, of } from "rxjs"
|
||||||
|
import { distinctUntilKeyChanged, switchMap } from "rxjs/operators"
|
||||||
|
|
||||||
|
import { Viewport } from "../../agent"
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------
|
||||||
* Types
|
* Types
|
||||||
@@ -34,6 +37,17 @@ export interface Header {
|
|||||||
height: number /* Header visible height */
|
height: number /* Header visible height */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------------
|
||||||
|
* Helper types
|
||||||
|
* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Watch options
|
||||||
|
*/
|
||||||
|
interface WatchOptions {
|
||||||
|
viewport$: Observable<Viewport> /* Viewport observable */
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------
|
||||||
* Functions
|
* Functions
|
||||||
* ------------------------------------------------------------------------- */
|
* ------------------------------------------------------------------------- */
|
||||||
@@ -45,19 +59,26 @@ export interface Header {
|
|||||||
* other dynamic behaviors that may be implemented later on.
|
* other dynamic behaviors that may be implemented later on.
|
||||||
*
|
*
|
||||||
* @param el - Header element
|
* @param el - Header element
|
||||||
|
* @param options - Options
|
||||||
*
|
*
|
||||||
* @return Header observable
|
* @return Header observable
|
||||||
*/
|
*/
|
||||||
export function watchHeader(
|
export function watchHeader(
|
||||||
el: HTMLElement
|
el: HTMLElement, { viewport$ }: WatchOptions
|
||||||
): Observable<Header> {
|
): Observable<Header> {
|
||||||
const styles = getComputedStyle(el)
|
return viewport$
|
||||||
const sticky = [
|
.pipe(
|
||||||
"sticky", /* Modern browsers */
|
distinctUntilKeyChanged("size"),
|
||||||
"-webkit-sticky" /* Old Safari */
|
switchMap(() => {
|
||||||
].includes(styles.position)
|
const styles = getComputedStyle(el)
|
||||||
return of({
|
const sticky = [
|
||||||
sticky,
|
"sticky", /* Modern browsers */
|
||||||
height: sticky ? el.offsetHeight : 0
|
"-webkit-sticky" /* Old Safari */
|
||||||
})
|
].includes(styles.position)
|
||||||
|
return of({
|
||||||
|
sticky,
|
||||||
|
height: sticky ? el.offsetHeight : 0
|
||||||
|
})
|
||||||
|
})
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user