From 1af8d96db938dfad38b315020248364ae3c3d36f Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 9 Oct 2020 09:26:52 -0600 Subject: [PATCH] Fix templating for v1 jitsi widgets Fixes https://github.com/vector-im/element-web/issues/15427 --- src/stores/widgets/StopGapWidget.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/stores/widgets/StopGapWidget.ts b/src/stores/widgets/StopGapWidget.ts index dde756cf3b..1eb4f9cd27 100644 --- a/src/stores/widgets/StopGapWidget.ts +++ b/src/stores/widgets/StopGapWidget.ts @@ -19,11 +19,13 @@ import { ClientWidgetApi, IStickerActionRequest, IStickyActionRequest, + ITemplateParams, IWidget, IWidgetApiRequest, IWidgetApiRequestEmptyData, IWidgetData, MatrixCapabilities, + runTemplate, Widget, WidgetApiFromWidgetAction, } from "matrix-widget-api"; @@ -76,15 +78,33 @@ class ElementWidget extends Widget { let conferenceId = super.rawData['conferenceId']; if (conferenceId === undefined) { // we'll need to parse the conference ID out of the URL for v1 Jitsi widgets - const parsedUrl = new URL(this.templateUrl); + const parsedUrl = new URL(super.templateUrl); // use super to get the raw widget URL conferenceId = parsedUrl.searchParams.get("confId"); } + let domain = super.rawData['domain']; + if (domain === undefined) { + // v1 widgets default to jitsi.riot.im regardless of user settings + domain = "jitsi.riot.im"; + } return { ...super.rawData, theme: SettingsStore.getValue("theme"), conferenceId, + domain, }; } + + public getCompleteUrl(params: ITemplateParams): string { + return runTemplate(this.templateUrl, { + // we need to supply a whole widget to the template, but don't have + // easy access to the definition the superclass is using, so be sad + // and gutwrench it. + // This isn't a problem when the widget architecture is fixed and this + // subclass gets deleted. + ...super['definition'], // XXX: Private member access + data: this.rawData, + }, params); + } } export class StopGapWidget extends EventEmitter {