diff --git a/client/lib/effects/set-scroll.ts b/client/lib/effects/set-scroll.ts index 39a374b10..9cf2ee790 100644 --- a/client/lib/effects/set-scroll.ts +++ b/client/lib/effects/set-scroll.ts @@ -135,7 +135,7 @@ export function setScrollEffect( } function scrollElement(element, scrollProportionally, event: IncomingPayload) { - if (scrollProportionally) { + if (scrollProportionally && element.scrollTo) { return element.scrollTo( 0, element.scrollHeight * event.position.proportional diff --git a/client/lib/index.ts b/client/lib/index.ts index 117223a75..2ce689423 100644 --- a/client/lib/index.ts +++ b/client/lib/index.ts @@ -10,7 +10,7 @@ import { merge } from "rxjs/observable/merge"; import { initLogger, logHandler$ } from "./log"; import { effectOutputHandlers$ } from "./effects"; import { Nanologger } from "../vendor/logger"; -import { scrollRestoreHandlers$ } from "./scroll-restore"; +import { scrollRestoreHandlers$, initWindowName } from "./scroll-restore"; import { initListeners } from "./listeners"; import { groupBy } from "rxjs/operators/groupBy"; import { withLatestFrom } from "rxjs/operators/withLatestFrom"; @@ -18,7 +18,6 @@ import { mergeMap } from "rxjs/operators/mergeMap"; import { share } from "rxjs/operators/share"; import { filter } from "rxjs/operators/filter"; import { pluck } from "rxjs/operators/pluck"; -import { tap } from "rxjs/operators/tap"; import { of } from "rxjs/observable/of"; export interface Inputs { @@ -35,6 +34,7 @@ export interface Inputs { const window$ = initWindow(); const document$ = initDocument(); +const names$ = initWindowName(window); const { socket$, io$ } = initSocket(); const option$ = initOptions(); const navigator$ = of(navigator); @@ -86,7 +86,10 @@ const output$ = getStream("[socket]", inputs)( ); const effect$ = getStream("[effect]", inputs)(combinedEffectHandler$, output$); -const dom$ = getStream("[dom-effect]", inputs)(domHandlers$, effect$); +const dom$ = getStream("[dom-effect]", inputs)( + domHandlers$, + merge(effect$, names$) +); const merged$ = merge(output$, effect$, dom$); diff --git a/client/lib/scroll-restore.ts b/client/lib/scroll-restore.ts index e04d98256..8ba3095de 100644 --- a/client/lib/scroll-restore.ts +++ b/client/lib/scroll-restore.ts @@ -7,15 +7,24 @@ import { empty } from "rxjs/observable/empty"; import { of } from "rxjs/observable/of"; import * as Log from "./log"; import { withLatestFrom } from "rxjs/operators/withLatestFrom"; -import { take } from "rxjs/operators/take"; -import { mergeMap } from "rxjs/operators/mergeMap"; import { map } from "rxjs/operators/map"; import { setWindowName } from "./dom-effects/set-window-name.dom-effect"; import { setScroll } from "./dom-effects/set-scroll.dom-effect"; export const PREFIX = "<>"; export const SUFFIX = "<>"; -export const regex = new RegExp(PREFIX + "(.+?)" + SUFFIX); +export const regex = new RegExp(PREFIX + "(.+?)" + SUFFIX, "g"); + +function parseFromString(input: string): any { + var match; + var last; + while ((match = regex.exec(input))) { + last = match[1]; + } + if (last) { + return JSON.parse(last); + } +} export function initWindowName(window: Window) { const saved = (() => { @@ -24,10 +33,7 @@ export function initWindowName(window: Window) { * BS json blob & parse it. */ try { - const json = window.name.match(regex); - if (json) { - return JSON.parse(json[1]); - } + return parseFromString(window.name); } catch (e) { return {}; } diff --git a/cypress.json b/cypress.json index 2594608b0..60ed5aa53 100644 --- a/cypress.json +++ b/cypress.json @@ -1,3 +1,3 @@ { - "videoRecording": false + "video": false }