Fixed details not opening on navigation (7.0.0 regression)

This commit is contained in:
squidfunk 2021-09-19 15:08:27 +02:00
parent 4a2af4ceaf
commit 726888cb56
5 changed files with 25 additions and 16 deletions

View File

@ -223,7 +223,7 @@
</script> </script>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script src="{{ 'assets/javascripts/bundle.77d4fa84.min.js' | url }}"></script> <script src="{{ 'assets/javascripts/bundle.527e4d51.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

@ -20,8 +20,13 @@
* IN THE SOFTWARE. * IN THE SOFTWARE.
*/ */
import { Observable, fromEvent, of } from "rxjs" import { Observable, fromEvent } from "rxjs"
import { filter, map, share, startWith, switchMap } from "rxjs/operators" import {
filter,
map,
shareReplay,
startWith
} from "rxjs/operators"
import { createElement, getElement } from "~/browser" import { createElement, getElement } from "~/browser"
@ -68,7 +73,7 @@ export function watchLocationHash(): Observable<string> {
map(getLocationHash), map(getLocationHash),
startWith(getLocationHash()), startWith(getLocationHash()),
filter(hash => hash.length > 0), filter(hash => hash.length > 0),
share() shareReplay(1)
) )
} }
@ -80,6 +85,7 @@ export function watchLocationHash(): Observable<string> {
export function watchLocationTarget(): Observable<HTMLElement> { export function watchLocationTarget(): Observable<HTMLElement> {
return watchLocationHash() return watchLocationHash()
.pipe( .pipe(
switchMap(id => of(getElement(`[id="${id}"]`)!)) map(id => getElement(`[id="${id}"]`)!),
filter(el => typeof el !== "undefined")
) )
} }

View File

@ -39,7 +39,9 @@ import { Component } from "../../_"
/** /**
* Details * Details
*/ */
export interface Details {} export interface Details {
scroll?: boolean /* Scroll into view */
}
/* ---------------------------------------------------------------------------- /* ----------------------------------------------------------------------------
* Helper types * Helper types
@ -80,8 +82,8 @@ export function watchDetails(
.pipe( .pipe(
map(target => target.closest("details:not([open])")!), map(target => target.closest("details:not([open])")!),
filter(details => el === details), filter(details => el === details),
mergeWith(print$), mapTo({ scroll: true }),
mapTo(el) mergeWith(print$.pipe(mapTo({})))
) )
} }
@ -100,9 +102,10 @@ export function mountDetails(
el: HTMLDetailsElement, options: MountOptions el: HTMLDetailsElement, options: MountOptions
): Observable<Component<Details>> { ): Observable<Component<Details>> {
const internal$ = new Subject<Details>() const internal$ = new Subject<Details>()
internal$.subscribe(() => { internal$.subscribe(({ scroll }) => {
el.setAttribute("open", "") el.setAttribute("open", "")
el.scrollIntoView() if (scroll)
el.scrollIntoView()
}) })
/* Create and return component */ /* Create and return component */