Add a legal disclaimer view

This commit is contained in:
Danila Fedorin 2021-08-25 14:47:42 -07:00
parent c25a9dae4d
commit 34b30de288
3 changed files with 34 additions and 0 deletions

View File

@ -18,10 +18,12 @@ import {TemplateView} from "./utils/TemplateView.js";
import {OpenLinkView} from "./open/OpenLinkView.js"; import {OpenLinkView} from "./open/OpenLinkView.js";
import {CreateLinkView} from "./create/CreateLinkView.js"; import {CreateLinkView} from "./create/CreateLinkView.js";
import {LoadServerPolicyView} from "./policy/LoadServerPolicyView.js"; import {LoadServerPolicyView} from "./policy/LoadServerPolicyView.js";
import {DisclaimerView} from "./disclaimer/DisclaimerView.js";
export class RootView extends TemplateView { export class RootView extends TemplateView {
render(t, vm) { render(t, vm) {
return t.div({className: "RootView"}, [ return t.div({className: "RootView"}, [
t.mapView(vm => vm.showDisclaimer, disclaimer => disclaimer ? new DisclaimerView() : null),
t.mapView(vm => vm.openLinkViewModel, vm => vm ? new OpenLinkView(vm) : null), 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.createLinkViewModel, vm => vm ? new CreateLinkView(vm) : null),
t.mapView(vm => vm.loadServerPolicyViewModel, vm => vm ? new LoadServerPolicyView(vm) : null), t.mapView(vm => vm.loadServerPolicyViewModel, vm => vm ? new LoadServerPolicyView(vm) : null),
@ -33,6 +35,8 @@ export class RootView extends TemplateView {
t.li(externalLink(t, "https://github.com/matrix-org/matrix.to/tree/main/src/open/clients", "Add your app")), 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.li({className: {hidden: vm => !vm.hasPreferences}},
t.button({className: "text", onClick: () => vm.clearPreferences()}, "Clear preferences")), t.button({className: "text", onClick: () => vm.clearPreferences()}, "Clear preferences")),
t.li(
t.button({className: "text", onClick: () => vm.openLink("/#/disclaimer/")}, "Disclaimer")),
]) ])
]) ])
]); ]);

View File

@ -29,6 +29,7 @@ export class RootViewModel extends ViewModel {
this.openLinkViewModel = null; this.openLinkViewModel = null;
this.createLinkViewModel = null; this.createLinkViewModel = null;
this.loadServerPolicyViewModel = null; this.loadServerPolicyViewModel = null;
this.showDisclaimer = false;
this.preferences.on("canClear", () => { this.preferences.on("canClear", () => {
this.emitChange(); this.emitChange();
}); });
@ -50,11 +51,23 @@ export class RootViewModel extends ViewModel {
this.emitChange(); this.emitChange();
} }
_showDisclaimer() {
this.showDisclaimer = true;
this.link = null;
this.openLinkViewModel = null;
this.createLinkViewModel = null;
this.loadServerPolicyViewModel = null;
this.emitChange();
}
updateHash(hash) { updateHash(hash) {
this.showDisclaimer = false;
if (hash.startsWith("#/policy/")) { if (hash.startsWith("#/policy/")) {
const server = hash.substr(9); const server = hash.substr(9);
this.loadServerPolicyViewModel = new LoadServerPolicyViewModel(this.childOptions({server})); this.loadServerPolicyViewModel = new LoadServerPolicyViewModel(this.childOptions({server}));
this.loadServerPolicyViewModel.load(); this.loadServerPolicyViewModel.load();
} else if (hash.startsWith("#/disclaimer/")) {
this._showDisclaimer();
} else { } else {
const oldLink = this.link; const oldLink = this.link;
this.link = Link.parse(hash); this.link = Link.parse(hash);

View File

@ -0,0 +1,17 @@
import {TemplateView} from "../utils/TemplateView.js";
export class DisclaimerView extends TemplateView {
render(t) {
return t.div({ className: "DisclaimerView card" }, [
t.h1("Disclaimer"),
t.p(
'Matrix.to is a service provided by the Matrix.org Foundation ' +
'which allows you to easily create invites to Matrix rooms and accounts, ' +
'regardless of your Matrix homeserver. The service is provided "as is" without ' +
'warranty of any kind, either express, implied, statutory or otherwise. ' +
'The Matrix.org Foundation shall not be responsible or liable for the room ' +
'and account contents shared via this service.'
),
]);
}
}