diff --git a/package.json b/package.json index 81a5d67..28f5f95 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "replaywebpage", "productName": "ReplayWeb.page", - "version": "2.2.5", + "version": "2.3.0", "description": "Serverless Web Archive Replay", "repository": "https://github.com/webrecorder/replayweb.page", "homepage": "https://replayweb.page/", @@ -18,7 +18,7 @@ "dependencies": { "@fortawesome/fontawesome-free": "^5.15.4", "@shoelace-style/shoelace": "~2.15.1", - "@webrecorder/wabac": "^2.20.8", + "@webrecorder/wabac": "^2.21.0", "bulma": "^0.9.3", "electron-log": "^4.4.1", "electron-updater": "^6.3.9", diff --git a/src/embed.ts b/src/embed.ts index 6594aba..0799436 100644 --- a/src/embed.ts +++ b/src/embed.ts @@ -7,9 +7,9 @@ import { } from "lit"; import { ifDefined } from "lit/directives/if-defined.js"; -import { wrapCss, updateFaviconLinks } from "./misc"; +import { wrapCss, updateFaviconLinks, apiPrefix } from "./misc"; import { SWManager } from "./swmanager"; -import { property } from "lit/decorators.js"; +import { property, query } from "lit/decorators.js"; import type { FavIconEventDetail } from "./types"; import type { EmbedReplayData, EmbedReplayEvent } from "./item"; @@ -82,6 +82,9 @@ class Embed extends LitElement { @property({ type: Boolean }) useRuffle = false; + @query("iframe") + private readonly iframe?: HTMLIFrameElement | null; + replayfile = defaultReplayFile; mainElementName = "replay-app-main"; appName = "ReplayWeb.page"; @@ -126,17 +129,28 @@ class Embed extends LitElement { } } - fullReload() { - const iframe = this.renderRoot.querySelector("iframe"); - if (iframe?.contentWindow) { - iframe.contentWindow.postMessage({ type: "fullReload" }); + async fullReload() { + if (!this.iframe?.contentWindow) { + return false; } + + const deleteURL = apiPrefix + "/c/" + this.coll + "?reload=1"; + + const resp = await this.iframe.contentWindow.fetch(deleteURL, { + method: "DELETE", + }); + + if (resp.status !== 200) { + return false; + } + + this.iframe.contentWindow.location.reload(); + + return true; } handleMessage(event: IframeMessage) { - const iframe = this.renderRoot.querySelector("iframe"); - - if (iframe && event.source === iframe.contentWindow) { + if (this.iframe && event.source === this.iframe.contentWindow) { switch (event.data.type) { case "urlchange": if (this.deepLink) { diff --git a/src/item.ts b/src/item.ts index f5c6f14..e50216c 100644 --- a/src/item.ts +++ b/src/item.ts @@ -85,6 +85,7 @@ export type EmbedReplayData = { ts?: string; title?: string; query?: string; + waczhash?: string; }; export type EmbedReplayEvent = EmbedReplayData & { @@ -229,16 +230,6 @@ class Item extends LitElement { this.observer.observe(this); } - - if (this.embed) { - window.addEventListener("message", (event: MessageEvent) => { - if (event.source === window.parent) { - if (event.data.type === "fullReload") { - void this.deleteFully(true); - } - } - }); - } } async runUpdateLoop() { @@ -976,6 +967,7 @@ class Item extends LitElement { sourceUrl="${this.sourceUrl || ""}" url="${this.tabData.url || ""}" ts="${this.tabData.ts || ""}" + waczhash="${this.tabData.waczhash || ""}" @coll-tab-nav="${this.onItemTabNav}" id="replay" @replay-loading="${this.onReplayLoading}" diff --git a/src/pageentry.ts b/src/pageentry.ts index 9df724e..0350474 100644 --- a/src/pageentry.ts +++ b/src/pageentry.ts @@ -5,7 +5,7 @@ import { property, state } from "lit/decorators.js"; import "keyword-mark-element/lib/keyword-mark.js"; -import { getReplayLink } from "./pageutils"; +import { getPageDateTS, getReplayLink } from "./pageutils"; import { wrapCss } from "./misc"; import type { URLResource } from "./types"; @@ -192,7 +192,7 @@ class PageEntry extends LitElement { render() { const p = this.page!; - const date = this.page!.date; + const { date } = getPageDateTS(p); const hasSize = typeof p.size === "number"; @@ -245,6 +245,7 @@ class PageEntry extends LitElement { "pages", this.page!.url, this.page!.timestamp!, + this.page!.waczhash, )}" >