Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions src/Link.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,16 @@ function asPrefix(identifierKind) {
}
}

function asPath(identifierKind) {
switch (identifierKind) {
case IdentifierKind.RoomId: return "roomid";
case IdentifierKind.RoomAlias: return "r";
case IdentifierKind.GroupId: return null;
case IdentifierKind.UserId: return "u";
default: throw new Error("invalid id kind " + identifierKind);
}
}

function getWebInstanceMap(queryParams) {
const prefix = "web-instance[";
const postfix = "]";
Expand Down Expand Up @@ -183,4 +193,15 @@ export class Link {
return `/${this.identifier}`;
}
}

toMatrixUrl() {
const prefix = asPath(this.identifierKind);
if (!prefix) {
// Some matrix.to links aren't valid matrix: links (i.e. groups)
return null;
}
const identifier = this.identifier.substring(1);
const suffix = this.eventId ? `/e/${this.eventId.substring(1)}` : "";
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

need to url-encode event id and identifier here I think

return `matrix:${prefix}/${identifier}${suffix}`;
}
}
28 changes: 15 additions & 13 deletions src/RootView.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,23 @@ import {LoadServerPolicyView} from "./policy/LoadServerPolicyView.js";

export class RootView extends TemplateView {
render(t, vm) {
return t.div({className: "RootView"}, [
t.mapView(vm => vm.openLinkViewModel, vm => vm ? new OpenLinkView(vm) : null),
t.mapView(vm => vm.createLinkViewModel, vm => vm ? new CreateLinkView(vm) : null),
t.mapView(vm => vm.loadServerPolicyViewModel, vm => vm ? new LoadServerPolicyView(vm) : null),
t.div({className: "footer"}, [
t.p(t.img({src: "images/matrix-logo.svg"})),
t.p(["This invite uses ", externalLink(t, "https://matrix.org", "Matrix"), ", an open network for secure, decentralized communication."]),
t.ul({className: "links"}, [
t.li(externalLink(t, "https://github.com/matrix-org/matrix.to", "GitHub project")),
t.li(externalLink(t, "https://github.com/matrix-org/matrix.to/tree/main/src/open/clients", "Add your app")),
t.li({className: {hidden: vm => !vm.hasPreferences}},
t.button({className: "text", onClick: () => vm.clearPreferences()}, "Clear preferences")),
return t.if(vm => !vm.hidden,
vm => t.div({className: "RootView"}, [
t.mapView(vm => vm.openLinkViewModel, vm => vm ? new OpenLinkView(vm) : null),
t.mapView(vm => vm.createLinkViewModel, vm => vm ? new CreateLinkView(vm) : null),
t.mapView(vm => vm.loadServerPolicyViewModel, vm => vm ? new LoadServerPolicyView(vm) : null),
t.div({className: "footer"}, [
t.p(t.img({src: "images/matrix-logo.svg"})),
t.p(["This invite uses ", externalLink(t, "https://matrix.org", "Matrix"), ", an open network for secure, decentralized communication."]),
t.ul({className: "links"}, [
t.li(externalLink(t, "https://github.com/matrix-org/matrix.to", "GitHub project")),
t.li(externalLink(t, "https://github.com/matrix-org/matrix.to/tree/main/src/open/clients", "Add your app")),
t.li({className: {hidden: vm => !vm.hasPreferences}},
t.button({className: "text", onClick: () => vm.clearPreferences()}, "Clear preferences")),
])
])
])
]);
);
}
}

Expand Down
10 changes: 10 additions & 0 deletions src/RootViewModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import {Platform} from "./Platform.js";
export class RootViewModel extends ViewModel {
constructor(options) {
super(options);
this.hidden = false;
this.link = null;
this.openLinkViewModel = null;
this.createLinkViewModel = null;
Expand Down Expand Up @@ -58,6 +59,15 @@ export class RootViewModel extends ViewModel {
} else {
const oldLink = this.link;
this.link = Link.parse(hash);
const matrixUrl = this.link.toMatrixUrl()
if (matrixUrl) {
this.hidden = true;
setTimeout(() => {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

perhaps pass setTimeout in as a view model option in case we want to unit test these one day

this.hidden = false;
this.emitChange();
}, 1000);
this.openLink(this.link.toMatrixUrl());
}
this._updateChildVMs(oldLink);
}
}
Expand Down