summaryrefslogtreecommitdiffstats
path: root/browser/components/aboutlogins/content/components/fxaccounts-button.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/aboutlogins/content/components/fxaccounts-button.mjs')
-rw-r--r--browser/components/aboutlogins/content/components/fxaccounts-button.mjs83
1 files changed, 83 insertions, 0 deletions
diff --git a/browser/components/aboutlogins/content/components/fxaccounts-button.mjs b/browser/components/aboutlogins/content/components/fxaccounts-button.mjs
new file mode 100644
index 0000000000..d39969d726
--- /dev/null
+++ b/browser/components/aboutlogins/content/components/fxaccounts-button.mjs
@@ -0,0 +1,83 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+export default class FxAccountsButton extends HTMLElement {
+ connectedCallback() {
+ if (this.shadowRoot) {
+ return;
+ }
+ let template = document.querySelector("#fxaccounts-button-template");
+ let shadowRoot = this.attachShadow({ mode: "open" });
+ document.l10n.connectRoot(shadowRoot);
+ shadowRoot.appendChild(template.content.cloneNode(true));
+
+ this._avatarButton = shadowRoot.querySelector(".fxaccounts-avatar-button");
+ this._extraText = shadowRoot.querySelector(".fxaccounts-extra-text");
+ this._enableButton = shadowRoot.querySelector(".fxaccounts-enable-button");
+ this._loggedOutView = shadowRoot.querySelector(".logged-out-view");
+ this._loggedInView = shadowRoot.querySelector(".logged-in-view");
+ this._emailText = shadowRoot.querySelector(".fxaccount-email");
+
+ this._avatarButton.addEventListener("click", this);
+ this._enableButton.addEventListener("click", this);
+
+ this.render();
+ }
+
+ handleEvent(event) {
+ if (event.currentTarget == this._avatarButton) {
+ document.dispatchEvent(
+ new CustomEvent("AboutLoginsSyncOptions", {
+ bubbles: true,
+ })
+ );
+ return;
+ }
+ if (event.target == this._enableButton) {
+ document.dispatchEvent(
+ new CustomEvent("AboutLoginsSyncEnable", {
+ bubbles: true,
+ })
+ );
+ }
+ }
+
+ render() {
+ this._loggedOutView.hidden = !!this._loggedIn;
+ this._loggedInView.hidden = !this._loggedIn;
+ this._emailText.textContent = this._email;
+ if (this._avatarURL) {
+ this._avatarButton.style.setProperty(
+ "--avatar-url",
+ `url(${this._avatarURL})`
+ );
+ } else {
+ let defaultAvatar = "chrome://browser/skin/fxa/avatar-color.svg";
+ this._avatarButton.style.setProperty(
+ "--avatar-url",
+ `url(${defaultAvatar})`
+ );
+ }
+ }
+
+ /**
+ *
+ * @param {object} state
+ * loggedIn: {Boolean} FxAccount authentication
+ * status.
+ * email: {String} Email address used with FxAccount. Must
+ * be empty if `loggedIn` is false.
+ * avatarURL: {String} URL of account avatar. Must
+ * be empty if `loggedIn` is false.
+ */
+ updateState(state) {
+ this.hidden = !state.fxAccountsEnabled;
+ this._loggedIn = state.loggedIn;
+ this._email = state.email;
+ this._avatarURL = state.avatarURL;
+
+ this.render();
+ }
+}
+customElements.define("fxaccounts-button", FxAccountsButton);