From 34b30de288d8221d3c530799e96bf61a16f2760b Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Wed, 25 Aug 2021 14:47:42 -0700 Subject: [PATCH] Add a legal disclaimer view --- src/RootView.js | 4 ++++ src/RootViewModel.js | 13 +++++++++++++ src/disclaimer/DisclaimerView.js | 17 +++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 src/disclaimer/DisclaimerView.js diff --git a/src/RootView.js b/src/RootView.js index 315fbd9..64962b8 100644 --- a/src/RootView.js +++ b/src/RootView.js @@ -18,10 +18,12 @@ import {TemplateView} from "./utils/TemplateView.js"; import {OpenLinkView} from "./open/OpenLinkView.js"; import {CreateLinkView} from "./create/CreateLinkView.js"; import {LoadServerPolicyView} from "./policy/LoadServerPolicyView.js"; +import {DisclaimerView} from "./disclaimer/DisclaimerView.js"; export class RootView extends TemplateView { render(t, vm) { 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.createLinkViewModel, vm => vm ? new CreateLinkView(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({className: {hidden: vm => !vm.hasPreferences}}, t.button({className: "text", onClick: () => vm.clearPreferences()}, "Clear preferences")), + t.li( + t.button({className: "text", onClick: () => vm.openLink("/#/disclaimer/")}, "Disclaimer")), ]) ]) ]); diff --git a/src/RootViewModel.js b/src/RootViewModel.js index 6c05cc9..4a21140 100644 --- a/src/RootViewModel.js +++ b/src/RootViewModel.js @@ -29,6 +29,7 @@ export class RootViewModel extends ViewModel { this.openLinkViewModel = null; this.createLinkViewModel = null; this.loadServerPolicyViewModel = null; + this.showDisclaimer = false; this.preferences.on("canClear", () => { this.emitChange(); }); @@ -50,11 +51,23 @@ export class RootViewModel extends ViewModel { this.emitChange(); } + _showDisclaimer() { + this.showDisclaimer = true; + this.link = null; + this.openLinkViewModel = null; + this.createLinkViewModel = null; + this.loadServerPolicyViewModel = null; + this.emitChange(); + } + updateHash(hash) { + this.showDisclaimer = false; if (hash.startsWith("#/policy/")) { const server = hash.substr(9); this.loadServerPolicyViewModel = new LoadServerPolicyViewModel(this.childOptions({server})); this.loadServerPolicyViewModel.load(); + } else if (hash.startsWith("#/disclaimer/")) { + this._showDisclaimer(); } else { const oldLink = this.link; this.link = Link.parse(hash); diff --git a/src/disclaimer/DisclaimerView.js b/src/disclaimer/DisclaimerView.js new file mode 100644 index 0000000..a728162 --- /dev/null +++ b/src/disclaimer/DisclaimerView.js @@ -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.' + ), + ]); + } +}