From 96e42db3dc6ca7352fae00c8f5a9d0001ad59ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20O=E2=80=99Shannessy?= Date: Mon, 2 Aug 2010 16:37:56 -0700 Subject: [PATCH] Bug 571897 (Sync UI) - Part 7: Generic Change dialog [r=dolske] --- browser/base/content/syncGenericChange.js | 228 ++++++++++++++++++ browser/base/content/syncGenericChange.xul | 95 ++++++++ browser/base/jar.mn | 2 + .../browser/syncGenericChange.properties | 37 +++ browser/locales/jar.mn | 1 + 5 files changed, 363 insertions(+) create mode 100644 browser/base/content/syncGenericChange.js create mode 100644 browser/base/content/syncGenericChange.xul create mode 100644 browser/locales/en-US/chrome/browser/syncGenericChange.properties diff --git a/browser/base/content/syncGenericChange.js b/browser/base/content/syncGenericChange.js new file mode 100644 index 000000000000..75b4782b63c4 --- /dev/null +++ b/browser/base/content/syncGenericChange.js @@ -0,0 +1,228 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Weave. + * + * The Initial Developer of the Original Code is the Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2009 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Edward Lee + * Mike Connor + * Paul O’Shannessy + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +Components.utils.import("resource://services-sync/service.js"); +Components.utils.import("resource://gre/modules/Services.jsm"); + +let Change = { + _dialog: null, + _dialogType: null, + _status: null, + _statusIcon: null, + _firstBox: null, + _secondBox: null, + + get _currentPasswordInvalid() { + return Weave.Status.login == Weave.LOGIN_FAILED_LOGIN_REJECTED; + }, + + get _updatingPassphrase() { + return this._dialogType == "UpdatePassphrase"; + }, + + onLoad: function Change_onLoad() { + /* Load labels */ + let box1label = document.getElementById("textBox1Label"); + let box2label = document.getElementById("textBox2Label"); + let introText = document.getElementById("introText"); + let introText2 = document.getElementById("introText2"); + let warningText = document.getElementById("warningText"); + + // load some other elements & info from the window + this._dialog = document.getElementById("change-dialog"); + this._dialogType = window.arguments[0]; + this._status = document.getElementById("status"); + this._statusIcon = document.getElementById("statusIcon"); + this._firstBox = document.getElementById("textBox1"); + this._secondBox = document.getElementById("textBox2"); + + this._stringBundle = + Services.strings.createBundle("chrome://browser/locale/syncGenericChange.properties"); + + switch (this._dialogType) { + case "UpdatePassphrase": + case "ResetPassphrase": + box1label.value = this._str("new.passphrase.label"); + + if (this._updatingPassphrase) { + document.title = this._str("new.passphrase.title"); + introText.textContent = this._str("new.passphrase.introText"); + this._dialog.getButton("accept") + .setAttribute("label", this._str("new.passphrase.acceptButton")); + document.getElementById("textBox2Row").hidden = true; + } + else { + document.title = this._str("change.passphrase.title"); + box2label.value = this._str("new.passphrase.confirm"); + introText.textContent = this._str("change.passphrase.introText"); + introText2.textContent = this._str("change.passphrase.introText2"); + warningText.textContent = this._str("change.passphrase.warningText"); + this._dialog.getButton("accept") + .setAttribute("label", this._str("change.passphrase.acceptButton")); + } + break; + case "ChangePassword": + box1label.value = this._str("new.password.label"); + + if (this._currentPasswordInvalid) { + document.title = this._str("new.password.title"); + introText.textContent = this._str("new.password.introText"); + this._dialog.getButton("accept") + .setAttribute("label", this._str("new.password.acceptButton")); + document.getElementById("textBox2Row").hidden = true; + } + else { + document.title = this._str("change.password.title"); + box2label.value = this._str("new.password.confirm"); + introText.textContent = this._str("change.password.introText"); + warningText.textContent = this._str("change.password.warningText"); + this._dialog.getButton("accept") + .setAttribute("label", this._str("change.password.acceptButton")); + } + break; + } + }, + + _clearStatus: function _clearStatus() { + this._status.value = ""; + this._statusIcon.removeAttribute("status"); + }, + + _updateStatus: function Change__updateStatus(str, state) { + this._updateStatusWithString(this._str(str), state); + }, + + _updateStatusWithString: function Change__updateStatusWithString(string, state) { + this._status.value = string; + this._statusIcon.setAttribute("status", state); + + let error = state == "error"; + this._dialog.getButton("cancel").setAttribute("disabled", !error); + this._dialog.getButton("accept").setAttribute("disabled", !error); + + if (state == "success") + window.setTimeout(window.close, 1500); + }, + + onDialogAccept: function() { + switch (this._dialogType) { + case "UpdatePassphrase": + case "ResetPassphrase": + return this.doChangePassphrase(); + break; + case "ChangePassword": + return this.doChangePassword(); + break; + } + }, + + doChangePassphrase: function Change_doChangePassphrase() { + if (this._updatingPassphrase) { + Weave.Service.passphrase = this._firstBox.value; + if (Weave.Service.login()) { + this._updateStatus("change.passphrase.success", "success"); + Weave.Service.persistLogin(); + } + else { + this._updateStatus("new.passphrase.status.incorrect", "error"); + } + } + else { + this._updateStatus("change.passphrase.label", "active"); + + if (Weave.Service.changePassphrase(this._firstBox.value)) + this._updateStatus("change.passphrase.success", "success"); + else + this._updateStatus("change.passphrase.error", "error"); + } + + return false; + }, + + doChangePassword: function Change_doChangePassword() { + if (this._currentPasswordInvalid) { + Weave.Service.password = this._firstBox.value; + if (Weave.Service.login()) { + this._updateStatus("change.password.status.success", "success"); + Weave.Service.persistLogin(); + } + else { + this._updateStatus("new.password.status.incorrect", "error"); + } + } + else { + this._updateStatus("change.password.status.active", "active"); + + if (Weave.Service.changePassword(this._firstBox.value)) + this._updateStatus("change.password.status.success", "success"); + else + this._updateStatus("change.password.status.error", "error"); + } + + return false; + }, + + validate: function (event) { + let valid = false; + let errorString = ""; + + if (this._dialogType == "ChangePassword") { + if (this._currentPasswordInvalid) + [valid, errorString] = gSyncUtils.validatePassword(this._firstBox); + else + [valid, errorString] = gSyncUtils.validatePassword(this._firstBox, this._secondBox); + } + else { + if (this._updatingPassphrase) + [valid, errorString] = gSyncUtils.validatePassphrase(this._firstBox); + else + [valid, errorString] = gSyncUtils.validatePassphrase(this._firstBox, this._secondBox); + } + + if (errorString == "") + this._clearStatus(); + else + this._updateStatusWithString(errorString, "error"); + + this._dialog.getButton("accept").disabled = !valid; + }, + + _str: function Change__string(str) { + return this._stringBundle.GetStringFromName(str); + } +}; diff --git a/browser/base/content/syncGenericChange.xul b/browser/base/content/syncGenericChange.xul new file mode 100644 index 000000000000..ef84f5549334 --- /dev/null +++ b/browser/base/content/syncGenericChange.xul @@ -0,0 +1,95 @@ + + +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Weave. +# +# The Initial Developer of the Original Code is the Mozilla Foundation. +# Portions created by the Initial Developer are Copyright (C) 2009 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Edward Lee +# Mike Connor +# Paul O’Shannessy +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + + + + + + +