1
0
mirror of http://git.whoc.org.uk/git/password-manager.git synced 2025-10-29 10:27:35 +01:00

First version of the newly restructured repository

This commit is contained in:
Giulio Cesare Solaroli
2011-10-03 00:56:18 +01:00
parent 597ecfbc02
commit ef68436ac0
729 changed files with 232898 additions and 0 deletions

View File

@@ -0,0 +1,784 @@
/*
Copyright 2008-2011 Clipperz Srl
This file is part of Clipperz's Javascript Crypto Library.
Javascript Crypto Library provides web developers with an extensive
and efficient set of cryptographic functions. The library aims to
obtain maximum execution speed while preserving modularity and
reusability.
For further information about its features and functionalities please
refer to http://www.clipperz.com
* Javascript Crypto Library is free software: you can redistribute
it and/or modify it under the terms of the GNU Affero General Public
License as published by the Free Software Foundation, either version
3 of the License, or (at your option) any later version.
* Javascript Crypto Library is distributed in the hope that it will
be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public
License along with Javascript Crypto Library. If not, see
<http://www.gnu.org/licenses/>.
*/
if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
//#############################################################################
Clipperz.PM.Components.Panels.AccountPanel = function(anElement, args) {
//MochiKit.Logging.logDebug(">>> new AccountPanel");
args = args || {};
Clipperz.PM.Components.Panels.AccountPanel.superclass.constructor.call(this, anElement, args);
Clipperz.NotificationCenter.register(null, 'setupDone', this, 'render');
this._shouldLoadLoginHistory = true;
// this.render();
//MochiKit.Logging.logDebug("<<< new AccountPanel");
return this;
}
//=============================================================================
YAHOO.extendX(Clipperz.PM.Components.Panels.AccountPanel, Clipperz.PM.Components.Panels.BasePanel, {
'toString': function() {
return "Clipperz.PM.Components.AccountPanel component";
},
//-------------------------------------------------------------------------
'render': function() {
var errorMessageActor;
var changePasswordButton;
var deleteAccountButton;
try {
//MochiKit.Logging.logDebug(">>> AccountPanel.render");
Clipperz.NotificationCenter.unregister(this);
MochiKit.Signal.disconnectAllTo(this);
this.element().update("");
Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', valign:'top', width:'200', children:[
{tag:'ul', id:"accountSubMenu", cls:'subMenu', children:[
{tag:'li', id:'changePassphraseTab', htmlString:Clipperz.PM.Strings['changePasswordTabLabel']},
{tag:'li', id:'manageOTPTab', htmlString:Clipperz.PM.Strings['manageOTPTabLabel']},
{tag:'li', id:'accountPreferencesTab', htmlString:Clipperz.PM.Strings['accountPreferencesLabel']},
{tag:'li', id:'loginHistoryTab', htmlString:Clipperz.PM.Strings['accountLoginHistoryLabel']},
{tag:'li', id:'deleteAccountTab', htmlString:Clipperz.PM.Strings['deleteAccountTabLabel']}
// {tag:'li', id:'paidAccountTab'), htmlString:Clipperz.PM.Strings['paidAccountTabLabel']}
]}
]},
{tag:'td', valign:'top', children:[
{tag:'ul', cls:'clipperzTabPanels', children:[
{tag:'li', id:this.getId('changePassphrasePanel'), children:[
{tag:'div', cls:'clipperzSubPanel', children:[
{tag:'h5', htmlString:Clipperz.PM.Strings['changePasswordTabTitle']},
{tag:'div', cls:'panelBody', id:'changePassphraseBlock', children:[
{tag:'form', id:this.getId('changePassphraseForm'), children:[
{tag:'h5', cls:'errorMessage', id:this.getId('changePassphrase_errorMessage')},
{tag:'table', cls:'panelBody', children:[
{tag:'tr', children:[
{tag:'td', children:[
{tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['changePasswordFormUsernameLabel']}
]},
{tag:'td', children:[
{tag:'input', type:'text', name:'username', id:this.getId('changePassphrase_username')}
]}
]},
{tag:'tr', children:[
{tag:'td', children:[
{tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['changePasswordFormOldPassphraseLabel']}
]},
{tag:'td', children:[
{tag:'input', type:'password', name:'oldPassphrase', id:this.getId('changePassphrase_oldPassphrase')}
]}
]},
{tag:'tr', children:[
{tag:'td', children:[
{tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['changePasswordFormNewPassphraseLabel']}
]},
{tag:'td', children:[
{tag:'input', type:'password', name:'newPassphrase', id:this.getId('changePassphrase_newPassphrase')}
]}
]},
{tag:'tr', children:[
{tag:'td', children:[
{tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['changePasswordFormRetypePassphraseLabel']}
]},
{tag:'td', children:[
{tag:'input', type:'password', name:'renewPassphrase', id:this.getId('changePassphrase_renewPassphrase')}
]}
]},
{tag:'tr', children:[
{tag:'td', align:'right', children:[
{tag:'input', type:'checkbox', id:this.getId('changePassphrase_safetyCheck')}
]},
{tag:'td', children:[
{tag:'span', htmlString:Clipperz.PM.Strings['changePasswordFormSafetyCheckboxLabel']}
]}
]}
]},
{tag:'div', cls:'clipperzSubPanelButtonBox', children:[
{tag:'div', id:this.getId('changePassphraseButton')}
]}
]}
]}
]}
]},
{tag:'li', id:this.getId('manageOTPPanel'), children:[
{tag:'div', cls:'clipperzSubPanel', children:[
{tag:'h5', htmlString:Clipperz.PM.Strings['manageOTPTabTitle']},
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['manageOTPTabDescription']},
{tag:'div', id:'OTPComponent'}
]}
]},
{tag:'li', id:this.getId('accountPreferencesPanel'), children:[
{tag:'div', cls:'clipperzSubPanel', children:[
{tag:'h5', htmlString:Clipperz.PM.Strings['accountPreferencesTabTitle']},
{tag:'div', cls:'panelBody', id:this.getId('preferencesPanelBody')}
]}
]},
{tag:'li', id:this.getId('loginHistoryAccountPanel'), children:[
{tag:'div', cls:'clipperzSubPanel', children:[
{tag:'h5', htmlString:Clipperz.PM.Strings['loginHistoryTabTitle']},
{tag:'div', cls:'panelBody', id:'loginHistoryAccountBlock'}
]}
]},
{tag:'li', id:this.getId('deleteAccountPanel'), children:[
{tag:'div', cls:'clipperzSubPanel', children:[
{tag:'h5', htmlString:Clipperz.PM.Strings['deleteAccountTabTitle']},
{tag:'div', cls:'panelBody', id:'deleteAccountBlock', children:[
{tag:'form', id:this.getId('deleteAccountForm'), children:[
{tag:'h5', cls:'errorMessage', id:this.getId('deleteAccount_errorMessage')},
{tag:'table', cls:'panelBody', children:[
{tag:'tr', children:[
{tag:'td', children:[
{tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['deleteAccountFormUsernameLabel']}
]},
{tag:'td', children:[
{tag:'input', type:'text', name:'username', id:this.getId('deleteAccount_username')}
]}
]},
{tag:'tr', children:[
{tag:'td', children:[
{tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['deleteAccountFormPassphraseLabel']}
]},
{tag:'td', children:[
{tag:'input', type:'password', name:'passphrase', id:this.getId('deleteAccount_passphrase')}
]}
]},
{tag:'tr', children:[
{tag:'td', align:'right', children:[
{tag:'input', type:'checkbox', id:this.getId('deleteAccount_safetyCheck')}
]},
{tag:'td', children:[
{tag:'span', htmlString:Clipperz.PM.Strings['deleteAccountFormSafetyCheckboxLabel']}
]}
]}
]},
{tag:'div', cls:'clipperzSubPanelButtonBox', children:[
{tag:'div', id:this.getId('deleteAccountButton')}
]}
]}
]}
]}
]}
/*
{tag:'li', id:this.getId('paidAccountPanel'), children:[
{tag:'div', cls:'clipperzSubPanel', children:[
{tag:'h5', htmlString:Clipperz.PM.Strings['upgradeAccountTabTitle']},
{tag:'div', htmlString:Clipperz.PM.Strings['comingSoon']}
]}
]}
*/
]}
]}
]}
]}
]});
//MochiKit.Logging.logDebug("--- AccountPanel.render - 1");
MochiKit.Signal.connect(this.getId('changePassphraseForm'), 'onkeydown', this, 'onkeydown');
errorMessageActor = this.getActor('changePassphrase_errorMessage');
errorMessageActor.setVisibilityMode(YAHOO.ext.Element.DISPLAY);
errorMessageActor.update("---");
errorMessageActor.hide();
changePasswordButton = new YAHOO.ext.Button(this.getDom('changePassphraseButton'), {text:Clipperz.PM.Strings['changePasswordFormSubmitLabel'], handler:this.doChangePassphrase, scope:this});
//MochiKit.Logging.logDebug("--- AccountPanel.render - 2");
MochiKit.Signal.connect(this.getId('deleteAccountForm'), 'onkeydown', this, 'onkeydown');
errorMessageActor = this.getActor('deleteAccount_errorMessage');
errorMessageActor.setVisibilityMode(YAHOO.ext.Element.DISPLAY);
errorMessageActor.update(Clipperz.PM.Strings['deleteAccountFormEmptyErrorMessage']);
errorMessageActor.hide();
deleteAccountButton = new YAHOO.ext.Button(this.getDom('deleteAccountButton'), {text:Clipperz.PM.Strings['deleteAccountFormSubmitLabel'], handler:this.doDeleteAccount, scope:this});
//MochiKit.Logging.logDebug("--- AccountPanel.render - 5");
if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) {
this.getElement('changePassphraseForm').addClass('read-only');
// this.getElement('accountPreferencesForm').addClass('read-only');
this.getElement('deleteAccountForm').addClass('read-only');
changePasswordButton.disable();
deleteAccountButton.disable();
}
//MochiKit.Logging.logDebug("--- AccountPanel.render - 6");
new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('changePassphrase_oldPassphrase'));
new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('changePassphrase_newPassphrase'));
new Clipperz.PM.Components.OTP.MainComponent(YAHOO.ext.Element.get('OTPComponent'), {user:this.user()});
this.tabPanelController().setUp();
Clipperz.NotificationCenter.register(null, 'tabSelected', this, 'tabSelectedHandler');
Clipperz.NotificationCenter.register(null, 'updatedPreferences', this, 'renderPreferences');
Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler');
//MochiKit.Logging.logDebug("<<< AccountPanel.render");
} catch(exception) {
MochiKit.Logging.logError("### " + exception);
throw exception;
}
},
//-------------------------------------------------------------------------
'tabPanelController': function() {
if (this._tabPanelController == null) {
var tabPanelControllerConfig;
tabPanelControllerConfig = {}
tabPanelControllerConfig['changePassphraseTab'] = this.getId('changePassphrasePanel');
tabPanelControllerConfig['manageOTPTab'] = this.getId('manageOTPPanel');
tabPanelControllerConfig['accountPreferencesTab'] = this.getId('accountPreferencesPanel');
tabPanelControllerConfig['loginHistoryTab'] = this.getId('loginHistoryAccountPanel');
tabPanelControllerConfig['deleteAccountTab'] = this.getId('deleteAccountPanel');
// tabPanelControllerConfig['paidAccountTab'] = this.getId('paidAccountPanel');
this._tabPanelController = new Clipperz.PM.Components.TabPanel.TabPanelController({
name:'accountTabPanel',
config:tabPanelControllerConfig,
selectedTab:'changePassphraseTab'
});
}
return this._tabPanelController;
},
//-------------------------------------------------------------------------
'doChangePassphrase': function() {
if (Clipperz.PM.Proxy.defaultProxy.isReadOnly() == false) {
var username;
var oldPassphrase;
var newPassphrase;
var renewPassphrase;
var safetyCheck;
var areThereAnyErrors;
var errorMessageActor;
errorMessageActor = this.getActor('changePassphrase_errorMessage');
areThereAnyErrors = false;
username = this.getDom('changePassphrase_username').value;
oldPassphrase= this.getDom('changePassphrase_oldPassphrase').value;
newPassphrase= this.getDom('changePassphrase_newPassphrase').value;
renewPassphrase= this.getDom('changePassphrase_renewPassphrase').value;
safetyCheck = this.getDom('changePassphrase_safetyCheck').checked;
if (this.user().username() != username) {
this.showFormErrorMessageAnimation(errorMessageActor, Clipperz.PM.Strings['changePasswordFormWrongUsernameWarning']);
this.getElement('changePassphrase_username').focus().dom.select();
areThereAnyErrors = true;
} else if (this.user().passphrase() != oldPassphrase) {
this.showFormErrorMessageAnimation(errorMessageActor, Clipperz.PM.Strings['changePasswordFormWrongPassphraseWarning']);
this.getElement('changePassphrase_oldPassphrase').focus().dom.select();
areThereAnyErrors = true;
} else if (newPassphrase != renewPassphrase) {
this.showFormErrorMessageAnimation(errorMessageActor, Clipperz.PM.Strings['changePasswordFormWrongRetypePassphraseWarning']);
this.getElement('changePassphrase_renewPassphrase').focus().dom.select();
areThereAnyErrors = true;
} else if (safetyCheck != true) {
this.showFormErrorMessageAnimation(errorMessageActor, Clipperz.PM.Strings['changePasswordFormSafetyCheckWarning']);
this.getElement('changePassphrase_safetyCheck').focus();
areThereAnyErrors = true;
}
if (areThereAnyErrors == false) {
errorMessageActor.hide();
this.doChangePassphraseWithUsernameAndPassphrase(username, newPassphrase);
}
}
},
//-------------------------------------------------------------------------
'doChangePassphraseWithUsernameAndPassphrase': function(anUsername, aPassphrase) {
var deferredResult;
//MochiKit.Logging.logDebug(">>> AccountPanel.doChangePassphraseWithUsernameAndPassphrase - this.user: " + this.user());
deferredResult = new MochiKit.Async.Deferred();
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug(" AccountPanel.doChangePassphraseWithUsernameAndPassphrase 1: " + res); return res;});
deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Components.MessageBox(), 'deferredShow'),
{
title:Clipperz.PM.Strings['changePasswordFormProgressDialogTitle'],
text:Clipperz.PM.Strings['changePasswordFormProgressDialogEmptyText'],
width:240,
showProgressBar:true,
showCloseButton:false,
steps:4
},
this.getDom('changePassphraseButton')
);
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug(" AccountPanel.doChangePassphraseWithUsernameAndPassphrase 2: " + res); return res;});
deferredResult.addCallback(MochiKit.Base.method(this.user(), 'changeCredentials'), anUsername, aPassphrase);
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug(" AccountPanel.doChangePassphraseWithUsernameAndPassphrase 3: " + res); return res;});
deferredResult.addCallback(function() {
Clipperz.PM.Components.MessageBox().update({
title:Clipperz.PM.Strings['changePasswordFormProgressDialogConnectedMessageTitle'],
text:Clipperz.PM.Strings['changePasswordFormProgressDialogConnectedMessageText'],
/*showProgressBar:false,*/
step:'next'
});
});
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug(" AccountPanel.doChangePassphraseWithUsernameAndPassphrase 4: " + res); return res;});
deferredResult.addCallback(MochiKit.Async.wait, 1);
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug(" AccountPanel.doChangePassphraseWithUsernameAndPassphrase 5: " + res); return res;});
deferredResult.addCallback(function(anAccountPanel, res) {
Clipperz.PM.Components.MessageBox().hide(YAHOO.ext.Element.get('main'));
anAccountPanel.getDom('changePassphrase_username').value = "";
anAccountPanel.getDom('changePassphrase_oldPassphrase').value = "";
anAccountPanel.getElement('changePassphrase_oldPassphrase').focus();
anAccountPanel.getDom('changePassphrase_newPassphrase').value = "";
anAccountPanel.getElement('changePassphrase_newPassphrase').focus();
anAccountPanel.getDom('changePassphrase_renewPassphrase').value = "";
anAccountPanel.getDom('changePassphrase_safetyCheck').checked = false;
anAccountPanel.getElement('changePassphrase_username').focus();
return res;
}, this);
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug(" AccountPanel.doChangePassphraseWithUsernameAndPassphrase 6: " + res); return res;});
deferredResult.addErrback(function() {
Clipperz.PM.Components.MessageBox().update({
title:Clipperz.PM.Strings['changePasswordFormProgressDialogErrorMessageTitle'],
text:Clipperz.PM.Strings['changePasswordFormProgressDialogErrorMessageText'],
buttons:{'ok':"close"}
});
});
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug(" AccountPanel.doChangePassphraseWithUsernameAndPassphrase 7: " + res); return res;});
deferredResult.callback();
//MochiKit.Logging.logDebug("<<< AccountPanel.doChangePassphraseWithUsernameAndPassphrase");
},
//-------------------------------------------------------------------------
'doDeleteAccount': function() {
if (Clipperz.PM.Proxy.defaultProxy.isReadOnly() == false) {
var username;
var passphrase;
var safetyCheck;
var areThereAnyErrors;
var errorMessageActor;
errorMessageActor = this.getActor('deleteAccount_errorMessage');
areThereAnyErrors = false;
username = this.getDom('deleteAccount_username').value;
passphrase= this.getDom('deleteAccount_passphrase').value;
safetyCheck = this.getDom('deleteAccount_safetyCheck').checked;
if (this.user().username() != username) {
this.showFormErrorMessageAnimation(errorMessageActor, Clipperz.PM.Strings['deleteAccountFormWrongUsernameWarning']);
this.getElement('deleteAccount_username').focus().dom.select();
areThereAnyErrors = true;
} else if (this.user().passphrase() != passphrase) {
this.showFormErrorMessageAnimation(errorMessageActor, Clipperz.PM.Strings['deleteAccountFormWrongPassphraseWarning']);
this.getElement('deleteAccount_passphrase').focus().dom.select();
areThereAnyErrors = true;
} else if (safetyCheck != true) {
this.showFormErrorMessageAnimation(errorMessageActor, Clipperz.PM.Strings['deleteAccountFormSafetyCheckWarning']);
this.getElement('deleteAccount_safetyCheck').focus();
areThereAnyErrors = true;
}
if (areThereAnyErrors == false) {
var deferred;
deferred = new MochiKit.Async.Deferred();
errorMessageActor.hide();
deferred.addCallback(function() {
var deferredResult;
// TODO: if the form is submitted with the return key, the confirmation dialog is skipped!?
deferredResult = new MochiKit.Async.Deferred();
Clipperz.PM.Components.MessageBox().deferredShow({
title:Clipperz.PM.Strings['accountPanelDeletingAccountPanelConfirmationTitle'],
text:Clipperz.PM.Strings['accountPanelDeleteAccountPanelConfirmationText'],
width:240,
showProgressBar:false,
showCloseButton:false,
buttons:{
'yes':Clipperz.PM.Strings['accountPanelDeleteAccountPanelConfirmButtonLabel'],
'no':Clipperz.PM.Strings['accountPanelDeleteAccountPanelDenyButtonLabel']
},
fn:MochiKit.Base.partial(function(aDeferred, aResult) {
if (aResult == 'yes') {
aDeferred.callback(aResult);
} else {
aDeferred.errback(aResult);
}
}, deferredResult)
});
return deferredResult;
});
deferred.addCallback(MochiKit.Base.method(Clipperz.PM.Components.MessageBox(), 'deferredShow'),
{
title:Clipperz.PM.Strings['accountPanelDeletingAccountPanelProgressTitle'],
text:Clipperz.PM.Strings['accountPanelDeletingAccountPanelProgressText'],
width:240,
showProgressBar:true,
showCloseButton:false
}
);
deferred.addCallback(MochiKit.Base.method(this.user(), 'deleteAccountAction'));
deferred.addCallback(Clipperz.PM.exit, 'accountDeleted.html');
deferred.addErrback(function(res) {
alert(res);
})
deferred.callback();
}
}
},
//-------------------------------------------------------------------------
'showFormErrorMessageAnimation': function(anActor, anErrorMessage, aCallback) {
anActor.update(anErrorMessage);
anActor.show(true);
anActor.play(aCallback);
},
//-------------------------------------------------------------------------
'onkeydown': function(anEvent) {
//MochiKit.Logging.logDebug(">>> onkeydown - " + anEvent.src().id);
if (anEvent.key().code == 13) {
anEvent.stop();
if (anEvent.src() == this.getDom('changePassphraseForm')) {
this.doChangePassphrase();
} else if (anEvent.src() == this.getDom('deleteAccountForm')) {
this.doDeleteAccount();
} else {
}
}
},
//-------------------------------------------------------------------------
'selectSelectedLanguageOption': function() {
var userSelectedLanguage;
userSelectedLanguage = this.user().preferences().preferredLanguage() || "default";
MochiKit.Base.filter(function(anOption) {return (anOption.value == userSelectedLanguage)}, this.getDom('languageSelector').childNodes)[0].selected = true;
},
//-------------------------------------------------------------------------
'doSaveUserPreferences': function() {
var selectedLanguage;
var showDonationReminderDialog;
// var disableUnsecureFaviconLoadingForIE;
//MochiKit.Logging.logDebug(">>> AccountPanel.doSaveUserPreferences");
selectedLanguage = this.getDom('languageSelector').value;
if (selectedLanguage == "default") {
selectedLanguage = null;
}
this.user().preferences().setPreferredLanguage(selectedLanguage);
showDonationReminderDialog = this.getDom('showDonationReminderCheckbox').checked;
this.user().preferences().setShouldShowDonationPanel(showDonationReminderDialog);
// disableUnsecureFaviconLoadingForIE = this.getDom('disableFaviconForIECheckbox').checked;
// this.user().preferences().setDisableUnsecureFaviconLoadingForIE(disableUnsecureFaviconLoadingForIE);
this.user().preferences().saveChanges(this.getDom('saveUserPreferences'));
},
'doCancelUserPreferences': function() {
this.renderPreferences();
},
// 'switchLanguage': function(anEvent) {
// Clipperz.PM.Strings.Languages.setSelectedLanguage(anEvent.src().value);
// },
//-------------------------------------------------------------------------
'renderLoginHistory': function() {
var element;
//MochiKit.Logging.logDebug(">>> AccountPanel.renderLoginHistory");
element = YAHOO.ext.Element.get('loginHistoryAccountBlock');
if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) {
element.update("");
this.domHelper().append(element, {tag:'div', cls:'loginHistoryReadOnlyMessage', htmlString:Clipperz.PM.Strings['loginHistoryReadOnlyMessage']});
} else {
var deferredResult;
deferredResult = new MochiKit.Async.Deferred();
deferredResult.addCallback(MochiKit.Base.bind(function(anElement) {
anElement.update("");
Clipperz.YUI.DomHelper.append(anElement, {tag:'div', cls:'loadingMessage', htmlString:Clipperz.PM.Strings['loginHistoryLoadingMessage']});
}, this), element);
deferredResult.addCallback(MochiKit.Base.method(this.user(), 'loadLoginHistory'));
deferredResult.addCallback(MochiKit.Base.bind(function(anElement, aResult) {
var loginListItems;
var tBodyElement;
var imageExtension;
var now;
var i, c;
loginListItems = aResult;
//MochiKit.Logging.logDebug("=== loginListItems: " + Clipperz.Base.serializeJSON(loginListItems));
imageExtension = (Clipperz_IEisBroken == true) ? 'gif': 'png';
now = new Date();
anElement.update("");
Clipperz.YUI.DomHelper.append(anElement, {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['loginHistoryLoadedMessage']});
Clipperz.YUI.DomHelper.append(anElement, {tag:'table', id:'loginHistoryTable', cellspacing:'0', cellpadding:'2', border:'0', children:[
{tag:'tbody', id:this.getId('loginHistoryTBody'), children:[]}
]});
//# Clipperz.YUI.DomHelper.append(anElement, {tag:'div', id:'loginHistoryFooter', children:[
Clipperz.YUI.DomHelper.append(anElement, {tag:'div', cls:'clipperzSubPanelButtonBox', children:[
{tag:'div', id:this.getId('reloadHistoryButton')}
]});
new YAHOO.ext.Button(this.getDom('reloadHistoryButton'), {text:Clipperz.PM.Strings['loginHistoryReloadButtonLabel'], handler:this.reloadHistory, scope:this});
tBodyElement = this.getElement('loginHistoryTBody');
c = loginListItems.length;
for (i=0; i<c; i++) {
var ip;
var date;
var mainText;
date = Clipperz.PM.Date.parseDateWithUTCFormat(loginListItems[i]['date']);
if (loginListItems[i]['isCurrent'] === true) {
mainText ={tag:'div', cls:'currentSession', htmlString:Clipperz.PM.Strings['loginHistoryCurrentSessionText']}
} else {
mainText = {tag:'div', cls:'elapsedTime', html:Clipperz.PM.Date.getElapsedTimeDescription(date)}
}
if (loginListItems[i]['connectionType'] == "ONE_TIME_PASSPHRASE") {
optionalInfo = [
{tag:'span', html:"OTP"}
];
} else {
optionalInfo = [];
}
ip = (loginListItems[i]['ip'].match(/^\d{1,3}(.\d{1,3}){3}$/)) ? loginListItems[i]['ip'] : Clipperz.PM.Strings['unknown_ip'];
Clipperz.YUI.DomHelper.append(tBodyElement, {tag:'tr', children:[
{tag:'td', cls:'loginHistoryValues', valign:'top', children:[
mainText,
{tag:'div', cls:'fullDate', html:Clipperz.PM.Date.formatDateWithTemplate(date, Clipperz.PM.Strings['fullDate_format'])},
{tag:'div', cls:'loginHistoryIP', children:[
{tag:'span', cls:'loginHistoryIPLabel', htmlString:Clipperz.PM.Strings['loginHistoryIPLabel']},
{tag:'span', cls:'loginHistoryIPValue', html:ip}
]}
]},
{tag:'td', cls:'loginHistoryCountry', valign:'top', children:optionalInfo},
{tag:'td', cls:'loginHistoryCountry', valign:'top', align:'center', children:[
{tag:'img', title:Clipperz.PM.Strings['countries'][loginListItems[i]['country']], cls:'flag', src:Clipperz.PM.Strings['icons_baseUrl'] + "/flags/" + loginListItems[i]['country'].toLowerCase() + "." + imageExtension, width:'32', height:'32'}
// {tag:'span', cls:'label', htmlString:Clipperz.PM.Strings['countries'][loginListItems[i]['country']]}
]},
{tag:'td', cls:'loginHistoryBrowser', valign:'top', align:'center', children:[
{tag:'img', title:Clipperz.PM.Strings['browsers'][loginListItems[i]['browser']], cls:'browser', src:Clipperz.PM.Strings['icons_baseUrl'] + "/browsers/" + loginListItems[i]['browser'].toLowerCase() + "." + imageExtension, width:'32', height:'32'}
// {tag:'span', cls:'label', htmlString:Clipperz.PM.Strings['browsers'][loginListItems[i]['browser']]}
]},
{tag:'td', cls:'loginHistoryOperatingSystem', valign:'top', align:'center', children:[
{tag:'img', title:Clipperz.PM.Strings['operatingSystems'][loginListItems[i]['operatingSystem']], cls:'operatingSystem', src:Clipperz.PM.Strings['icons_baseUrl'] + "/operatingSystems/" + loginListItems[i]['operatingSystem'].toLowerCase() + "." + imageExtension, width:'32', height:'32'}
// {tag:'span', cls:'label', htmlString:Clipperz.PM.Strings['operatingSystems'][loginListItems[i]['operatingSystem']]}
]}
]});
}
Clipperz.Style.applyZebraStylesToTable('loginHistoryTable');
}, this), element);
deferredResult.callback();
}
//MochiKit.Logging.logDebug("<<< AccountPanel.renderLoginHistory");
},
//-------------------------------------------------------------------------
'renderPreferences': function() {
var saveUserPreferencesButton;
var cancelUserPreferencesButton;
var preferencedPanelBodyElement;
preferencedPanelBodyElement = this.getElement('preferencesPanelBody');
preferencedPanelBodyElement.update("");
Clipperz.YUI.DomHelper.append(preferencedPanelBodyElement,
{tag:'form', id:this.getId('accountPreferencesForm'), children:[
{tag:'table', cls:'panelBody', children:[
{tag:'tr', cls:'openPreferenceBlock', children:[
{tag:'td', children:[
{tag:'div', cls:'preferenceBlockTitle', htmlString:Clipperz.PM.Strings['accountPreferencesLanguageTitle']},
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['accountPreferencesLanguageDescription']},
{tag:'div', cls:'panelDescription', children:[
{tag:'select',
id:this.getId('languageSelector'),
children:MochiKit.Base.concat([{tag:'option', value:"default", html:"---"}], Clipperz.PM.Strings['loginPanelSwitchLanguageSelectOptions'])
}
]}
]}
]},
{tag:'tr', cls:'openPreferenceBlock', children:[
{tag:'td', children:[
{tag:'div', cls:'preferenceBlockTitle', htmlString:Clipperz.PM.Strings['showDonationReminderPanelTitle']},
{tag:'table', cellpadding:'0', cellspacing:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', valign:'top', children:[
{tag:'div', cls:'panelDescription', children:[
{tag:'input', type:'checkbox', id:this.getId('showDonationReminderCheckbox')}
]}
]},
{tag:'td', valign:'top', children:[
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['showDonationReminderPanelDescription']}
]}
]}
]}
]}
]}
]} //,
/*
{tag:'tr', cls:'openPreferenceBlock', children:[
{tag:'td', children:[
{tag:'div', cls:'preferenceBlockTitle', htmlString:Clipperz.PM.Strings['disableFaviconForIETitle']},
{tag:'table', cellpadding:'0', cellspacing:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', valign:'top', children:[
{tag:'div', cls:'panelDescription', children:[
{tag:'input', type:'checkbox', id:this.getId('disableFaviconForIECheckbox')}
]}
]},
{tag:'td', valign:'top', children:[
{tag:'div', cls:'panelDescription', children:Clipperz.PM.Strings['disableFaviconForIEDescriptionConfig']}
]}
]}
]}
]}
]}
]},
*/
// {tag:'tr', cls:'openPreferenceBlock', children:[
// {tag:'td', children:[
// {tag:'div', cls:'preferenceBlockTitle', htmlString:Clipperz.PM.Strings['accountPreferencesInterfaceTitle']},
// {tag:'div', cls:'panelDescription', children:Clipperz.PM.Strings['accountPreferencesInterfaceDescriptionConfig']}
// ]}
// ]}
]},
{tag:'div', cls:'clipperzSubPanelButtonBox', children:[
{tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', width:'100', align:'right', cls:'newRecordPanelButtonTD', children:[
{tag:'div', id:this.getId('saveUserPreferences')}
]},
{tag:'td', width:'10', html:"&nbsp;"},
{tag:'td', cls:'newRecordPanelButtonTD', children:[
{tag:'div', id:this.getId('cancelUserPreferences')}
]}
]}
]}
]}
]}
]}
);
this.selectSelectedLanguageOption();
if (this.user().preferences().shouldShowDonationPanel()) {
this.getDom('showDonationReminderCheckbox').checked = true;
}
// if (this.user().preferences().disableUnsecureFaviconLoadingForIE()) {
// this.getDom('disableFaviconForIECheckbox').checked = true;
// }
//MochiKit.Logging.logDebug("--- AccountPanel.render - 3");
//# saveUserPreferencesButton = new YAHOO.ext.Button(this.getDom('saveUserPreferences'), {text:Clipperz.PM.Strings['saveUserPreferencesFormSubmitLabel'], handler:this.doSaveUserPreferences, scope:this});
saveUserPreferencesButton = new YAHOO.ext.Button(this.getDom('saveUserPreferences'), {text:'-----------------', handler:this.doSaveUserPreferences, scope:this});
saveUserPreferencesButton.setText(Clipperz.PM.Strings['saveUserPreferencesFormSubmitLabel']);
//# cancelUserPreferencesButton = new YAHOO.ext.Button(this.getDom('cancelUserPreferences'), {text:Clipperz.PM.Strings['cancelUserPreferencesFormSubmitLabel'], handler:this.doCancelUserPreferences, scope:this});
cancelUserPreferencesButton = new YAHOO.ext.Button(this.getDom('cancelUserPreferences'), {text:'-----------------', handler:this.doCancelUserPreferences, scope:this});
cancelUserPreferencesButton.setText(Clipperz.PM.Strings['cancelUserPreferencesFormSubmitLabel']);
//MochiKit.Logging.logDebug("--- AccountPanel.render - 4");
if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) {
this.getElement('accountPreferencesForm').addClass('read-only');
saveUserPreferencesButton.disable();
cancelUserPreferencesButton.disable();
}
},
//-------------------------------------------------------------------------
'reloadHistory': function() {
this.setShouldLoadLoginHistory(true);
this.renderLoginHistory();
},
'shouldLoadLoginHistory': function() {
return this._shouldLoadLoginHistory;
},
'setShouldLoadLoginHistory': function(aValue) {
this._shouldLoadLoginHistory = aValue;
},
'tabSelectedHandler': function(anEvent) {
if (anEvent.parameters() == 'accountPreferencesTab') {
this.renderPreferences();
}
if ((this.shouldLoadLoginHistory()) && (anEvent.parameters() == 'loginHistoryTab')) {
this.renderLoginHistory();
this.setShouldLoadLoginHistory(false);
}
},
//-------------------------------------------------------------------------
__syntaxFix__: "syntax fix"
});

View File

@@ -0,0 +1,96 @@
/*
Copyright 2008-2011 Clipperz Srl
This file is part of Clipperz's Javascript Crypto Library.
Javascript Crypto Library provides web developers with an extensive
and efficient set of cryptographic functions. The library aims to
obtain maximum execution speed while preserving modularity and
reusability.
For further information about its features and functionalities please
refer to http://www.clipperz.com
* Javascript Crypto Library is free software: you can redistribute
it and/or modify it under the terms of the GNU Affero General Public
License as published by the Free Software Foundation, either version
3 of the License, or (at your option) any later version.
* Javascript Crypto Library is distributed in the hope that it will
be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public
License along with Javascript Crypto Library. If not, see
<http://www.gnu.org/licenses/>.
*/
if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
//var _Clipperz_PM_Components_Panels_base_id_ = 0;
//#############################################################################
Clipperz.PM.Components.Panels.BasePanel = function(anElement, args) {
args = args || {};
Clipperz.PM.Components.Panels.BasePanel.superclass.constructor.call(this, anElement, args);
this._user = args.user || null;
this._delegate = args.delegate || null;
this._tabPanelController = null;
// Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler');
// this._ids = {};
return this;
}
//=============================================================================
YAHOO.extendX(Clipperz.PM.Components.Panels.BasePanel, Clipperz.PM.Components.BaseComponent, {
'toString': function() {
return "Clipperz.PM.Components.Panels.BasePanel component";
},
//-------------------------------------------------------------------------
'user': function() {
return this._user;
},
'setUser': function(aValue) {
this._user = aValue;
},
//-------------------------------------------------------------------------
'delegate': function() {
return this._delegate;
},
'setDelegate': function(aValue) {
this._delegate = aValue;
},
//-------------------------------------------------------------------------
'tabPanelController': function() {
return this._tabPanelController;
},
'switchLanguageHandler': function() {
//MochiKit.Logging.logDebug(">>> BasePanel.switchLanguageHandler [" + this.toString() + "]");
this.render();
//MochiKit.Logging.logDebug("<<< BasePanel.switchLanguageHandler [" + this.toString() + "]");
},
//-------------------------------------------------------------------------
__syntaxFix__: "syntax fix"
});

View File

@@ -0,0 +1,105 @@
/*
Copyright 2008-2011 Clipperz Srl
This file is part of Clipperz's Javascript Crypto Library.
Javascript Crypto Library provides web developers with an extensive
and efficient set of cryptographic functions. The library aims to
obtain maximum execution speed while preserving modularity and
reusability.
For further information about its features and functionalities please
refer to http://www.clipperz.com
* Javascript Crypto Library is free software: you can redistribute
it and/or modify it under the terms of the GNU Affero General Public
License as published by the Free Software Foundation, either version
3 of the License, or (at your option) any later version.
* Javascript Crypto Library is distributed in the hope that it will
be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public
License along with Javascript Crypto Library. If not, see
<http://www.gnu.org/licenses/>.
*/
if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
//#############################################################################
Clipperz.PM.Components.Panels.ContactsPanel = function(anElement, args) {
args = args || {};
Clipperz.PM.Components.Panels.ContactsPanel.superclass.constructor.call(this, anElement, args);
this.render();
return this;
}
//=============================================================================
YAHOO.extendX(Clipperz.PM.Components.Panels.ContactsPanel, Clipperz.PM.Components.Panels.BasePanel, {
'toString': function() {
return "Clipperz.PM.Components.ContactsPanel component";
},
//-------------------------------------------------------------------------
'render': function() {
// var tabPanelControllerConfig;
Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', valign:'top', width:'200', children:[
{tag:'ul', id:"dataSubMenu", cls:'subMenu', children:[
{tag:'li', id:this.getId('contacts'), htmlString:Clipperz.PM.Strings['contactsTabLabel']},
]}
]},
{tag:'td', valign:'top', children:[
{tag:'ul', cls:'clipperzTabPanels', children:[
{tag:'li', id:this.getId('contactsPanel'), children:[
{tag:'div', cls:'clipperzSubPanel', children:[
{tag:'h5', htmlString:Clipperz.PM.Strings['contactsTabTitle']},
{tag:'div', htmlString:Clipperz.PM.Strings['comingSoon']}
]}
]}
]}
]}
]}
]}
]});
// tabPanelControllerConfig = {}
// tabPanelControllerConfig[this.getId('contacts')] = this.getId('contactsPanel');
// new Clipperz.PM.Components.TabPanel.TabPanelController({ config:tabPanelControllerConfig, selectedTab:this.getId('contacts') });
this.tabPanelController().setUp();
},
//-------------------------------------------------------------------------
'tabPanelController': function() {
if (this._tabPanelController == null) {
var tabPanelControllerConfig;
tabPanelControllerConfig = {}
tabPanelControllerConfig[this.getId('contacts')] = this.getId('contactsPanel');
this._tabPanelController = new Clipperz.PM.Components.TabPanel.TabPanelController({ config:tabPanelControllerConfig, selectedTab:this.getId('contacts') });
}
return this._tabPanelController;
},
//-------------------------------------------------------------------------
__syntaxFix__: "syntax fix"
});

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,73 @@
/*
Copyright 2008-2011 Clipperz Srl
This file is part of Clipperz's Javascript Crypto Library.
Javascript Crypto Library provides web developers with an extensive
and efficient set of cryptographic functions. The library aims to
obtain maximum execution speed while preserving modularity and
reusability.
For further information about its features and functionalities please
refer to http://www.clipperz.com
* Javascript Crypto Library is free software: you can redistribute
it and/or modify it under the terms of the GNU Affero General Public
License as published by the Free Software Foundation, either version
3 of the License, or (at your option) any later version.
* Javascript Crypto Library is distributed in the hope that it will
be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public
License along with Javascript Crypto Library. If not, see
<http://www.gnu.org/licenses/>.
*/
if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
//#############################################################################
Clipperz.PM.Components.Panels.LogoutPanel = function(args) {
args = args || {};
Clipperz.PM.Components.Panels.LogoutPanel.superclass.constructor.call(this, args);
return this;
}
//=============================================================================
YAHOO.extendX(Clipperz.PM.Components.Panels.LogoutPanel, Clipperz.PM.Components.Panels.BasePanel, {
'toString': function() {
return "Clipperz.PM.Components.LogoutPanel component";
},
//-------------------------------------------------------------------------
'initPanel': function() {
var result;
var layout;
result = new YAHOO.ext.ContentPanel(this.getId('panel'), {title:'logout', closable:false, autoCreate:true});
Clipperz.YUI.DomHelper.append(result.getEl().dom,
{tag:'div', children:[
{tag:'h2', html:'Logout panel'}
]}
);
return result;
},
//-------------------------------------------------------------------------
__syntaxFix__: "syntax fix"
});

View File

@@ -0,0 +1,906 @@
/*
Copyright 2008-2011 Clipperz Srl
This file is part of Clipperz's Javascript Crypto Library.
Javascript Crypto Library provides web developers with an extensive
and efficient set of cryptographic functions. The library aims to
obtain maximum execution speed while preserving modularity and
reusability.
For further information about its features and functionalities please
refer to http://www.clipperz.com
* Javascript Crypto Library is free software: you can redistribute
it and/or modify it under the terms of the GNU Affero General Public
License as published by the Free Software Foundation, either version
3 of the License, or (at your option) any later version.
* Javascript Crypto Library is distributed in the hope that it will
be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public
License along with Javascript Crypto Library. If not, see
<http://www.gnu.org/licenses/>.
*/
if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
//#############################################################################
Clipperz.PM.Components.Panels.MainPanel = function(anElement, args) {
args = args || {};
Clipperz.PM.Components.Panels.MainPanel.superclass.constructor.call(this, anElement, args);
this._recordListDataModel = null;
this._selectedRecord = null;
this._recordDetailComponent = null;
this._recordListGrid = null;
this._directLinkItemTemplate = null;
this._recordItemTemplate = null;
this._addNewRecordButton = null;
this._deleteRecordButton = null;
this._creationWizard = null;
Clipperz.NotificationCenter.register(null, 'selectAndEnterEditMode', this, 'selectRecordAndEnterEditModeHandler');
Clipperz.NotificationCenter.register(null, 'recordAdded', this, 'recordAddedHandler');
Clipperz.NotificationCenter.register(null, 'recordUpdated', this, 'recordUpdatedHandler');
Clipperz.NotificationCenter.register(null, 'recordRemoved', this, 'recordRemovedHandler');
Clipperz.NotificationCenter.register(null, 'directLoginAdded', this, 'directLoginAddedHandler');
Clipperz.NotificationCenter.register(null, 'directLoginUpdated', this, 'directLoginUpdatedHandler');
Clipperz.NotificationCenter.register(null, 'directLoginRemoved', this, 'directLoginRemovedHandler');
Clipperz.NotificationCenter.register(null, 'accountLocked', this, 'accountLockedHandler');
MochiKit.Signal.connect(MochiKit.DOM.currentWindow(), 'onresize', this, 'resizeModalMask');
this.render();
return this;
}
//=============================================================================
YAHOO.extendX(Clipperz.PM.Components.Panels.MainPanel, Clipperz.PM.Components.Panels.BasePanel, {
'toString': function() {
return "Clipperz.PM.Components.Panels.MainPanel component";
},
//-------------------------------------------------------------------------
'render': function() {
this.element().update("");
Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', id:'mainPanelTABLE', border:'0', cellspacing:'0', cellpadding:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', width:'15', children:[
{tag:'div', cls:'mainPanelMinHeightDiv'}
]},
{tag:'td', valign:'top', id:'directLoginsTD', width:'200', children:[
{tag:'div', id:'directLoginsBlock', children:[
{tag:'div', cls:'directLoginsBlockHeaderBox', children:[{tag:'h3', id:'directLoginTitle', htmlString:Clipperz.PM.Strings['mainPanelDirectLoginBlockLabel']}]},
{tag:'div', id:'directLoginsDescription', htmlString:Clipperz.PM.Strings['mainPanelDirectLoginBlockDescription']},
{tag:'ul', id:'directLogins'}
]}
]},
{tag:'td', width:'15', children:[
{tag:'div', cls:'mainPanelMinHeightDiv'}
]},
{tag:'td', valign:'top', children:[
{tag:'div', id:'mainContent', children:[
{tag:'div', id:'recordListBlockHeader'},
{tag:'div', id:'recordListAndDetailBlock', children:[
{tag:'table', id:'recordListAndDetailBlockTABLE', border:'0', cellspacing:'0', cellpadding:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', valign:'top', width:'250', children:[
{tag:'div', id:'recordListBlock', children:[
{tag:'div', id:'recordListFilterHeader'},
{tag:'ul', id:'records'}
]}
]},
{tag:'td', id:'recordDetailSeparatorTD', rowspan:'2', valign:'top', bgcolor:'#ddddff', html:'&nbsp;'},
{tag:'td', valign:'top', children:[
{tag:'div', id:'recordDetailMainBlock', children:[
{tag:'div', id:'recordTitleTopBlock'},
{tag:'div', id:'recordDetailBlock', children:[
{tag:'div', id:'recordDetail'}
]}
]},
{tag:'div', id:'recordCreationWizardMainBlock', children:[
{tag:'div', id:'recordCreationWizard', html:"WIZARD"}
]}
]}
]},
{tag:'tr', children:[
{tag:'td', id:'cardBoxLowerLeftTD', html:'&nbsp;'},
{tag:'td', id:'cardBoxLowerRightTD', html:'&nbsp;'}
]}
]}
]}
]}
]}
]},
{tag:'td', width:'15', html:"&nbsp;"}
]}
]}
]});
this.renderRecordListBlockHeader();
// this.renderRecordListFilterHeader();
YAHOO.ext.Element.get('directLogins').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
this.recordDetailComponent();
YAHOO.ext.Element.get('recordDetailMainBlock').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show();
YAHOO.ext.Element.get('recordCreationWizardMainBlock').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
},
//-------------------------------------------------------------------------
'addNewRecordButton': function() {
return this._addNewRecordButton;
},
'setAddNewRecordButton': function(aValue) {
this._addNewRecordButton = aValue;
},
'deleteRecordButton': function() {
return this._deleteRecordButton;
},
'setDeleteRecordButton': function(aValue) {
this._deleteRecordButton = aValue;
},
//-------------------------------------------------------------------------
'addNewRecord': function(anEvent) {
var deferredResult;
// var currentNumberOfRecords;
deferredResult = new MochiKit.Async.Deferred();
// currentNumberOfRecords = MochiKit.Base.keys(this.user().records()).length;
/*
// if ((this.user().preferences().shouldShowDonationPanel()) && (currentNumberOfRecords > 0) && ((currentNumberOfRecords%10) == 0)) {
// if (true) {
if ((this.user().preferences().shouldShowDonationPanel()) && (currentNumberOfRecords >= 5)) {
deferredResult.addCallback(Clipperz.PM.showDonationSplashScreen, this.user(), 'recordListAddRecordButton');
}
*/
deferredResult.addCallback(MochiKit.Base.bind(function() {
var currentlySelectedRecord;
currentlySelecedRecord = this.selectedRecord();
this.setSelectedRecord(null);
YAHOO.ext.Element.get('recordDetailMainBlock').hide();
YAHOO.ext.Element.get('recordCreationWizardMainBlock').show();
this.setCreationWizard(new Clipperz.PM.Components.RecordDetail.CreationWizard(YAHOO.ext.Element.get('recordCreationWizardMainBlock'), {previouslySelectedRecord:currentlySelecedRecord, mainComponent:this}));
this.enterModalView();
}, this));
deferredResult.callback();
},
//-------------------------------------------------------------------------
'creationWizard': function() {
return this._creationWizard;
},
'setCreationWizard': function(aValue) {
this._creationWizard = aValue;
},
//-------------------------------------------------------------------------
'exitWizard': function(aSelectedRecord, shouldEnterEditMode) {
//MochiKit.Logging.logDebug(">>> MainPanel.exitWizard - " + aSelectedRecord)
YAHOO.ext.Element.get('recordCreationWizardMainBlock').hide();
YAHOO.ext.Element.get('recordDetailMainBlock').show();
if (shouldEnterEditMode == true) {
this.selectRecordAndEnterEditMode(aSelectedRecord);
} else {
this.setSelectedRecord(aSelectedRecord);
this.exitModalView();
}
this.creationWizard().remove();
this.setCreationWizard(null);
//MochiKit.Logging.logDebug("<<< MainPanel.exitWizard");
},
//-------------------------------------------------------------------------
'selectRecordAndEnterEditMode': function(aRecord) {
this.setSelectedRecord(aRecord);
this.recordDetailComponent().setEditMode('EDIT');
},
'selectRecordAndEnterEditModeHandler': function(anEvent) {
this.selectRecordAndEnterEditMode(anEvent.source());
},
//-------------------------------------------------------------------------
'resizeModalMask': function() {
//MochiKit.Logging.logDebug(">>> MainPanel.resizeModalMask");
MochiKit.Style.setElementDimensions('recordDetailEditModeHeaderMask', {w:MochiKit.Style.getElementDimensions('mainDiv').w, h:119});
MochiKit.Style.setElementDimensions('recordDetailEditModeVerticalMask', {w:511, h:MochiKit.Style.getElementDimensions('mainDiv').h - 119});
//MochiKit.Logging.logDebug("<<< MainPanel.resizeModalMask");
},
//-------------------------------------------------------------------------
'enterModalView': function() {
if (this.user().preferences().useSafeEditMode()) {
var headerMaskElement;
var verticalMaskElement;
this.resizeModalMask();
headerMaskElement = YAHOO.ext.Element.get('recordDetailEditModeHeaderMask');
headerMaskElement.show();
headerMaskElement.mask();
verticalMaskElement = YAHOO.ext.Element.get('recordDetailEditModeVerticalMask');
verticalMaskElement.show();
verticalMaskElement.mask();
}
},
//-------------------------------------------------------------------------
'exitModalView': function() {
if (this.user().preferences().useSafeEditMode()) {
var headerMaskElement;
var verticalMaskElement;
headerMaskElement = YAHOO.ext.Element.get('recordDetailEditModeHeaderMask');
headerMaskElement.unmask();
headerMaskElement.hide();
verticalMaskElement = YAHOO.ext.Element.get('recordDetailEditModeVerticalMask');
verticalMaskElement.unmask();
verticalMaskElement.hide();
}
},
//-------------------------------------------------------------------------
'removeSelectedRecord': function() {
var selectedRecordReferences;
//MochiKit.Logging.logDebug(">>> MainPanel.removeSelectedRecord");
if (this.selectedRecord() != null) {
selectedRecordReferences = [this.selectedRecord().reference()];
} else {
selectedRecordReferences = [];
}
if (selectedRecordReferences.length > 0 ) {
var recordReference;
var records;
var deferred;
records = [];
for (recordReference in selectedRecordReferences) {
var record;
//MochiKit.Logging.logDebug("### MainPanel.removeSelectedRecord - recordReference: " + selectedRecordReferences[recordReference]);
record = this.user().records()[selectedRecordReferences[recordReference]];
//MochiKit.Logging.logDebug("### MainPanel.removeSelectedRecord - record: " + record);
records.push(record);
}
//MochiKit.Logging.logDebug("### MainPanel.removeSelectedRecord - records.length: " + records.length);
deferred = new MochiKit.Async.Deferred();
//MochiKit.Logging.logDebug("--- MainPanel.removeSelectedRecord - 1:");
//deferred.addBoth(function(res) {MochiKit.Logging.logDebug("MainPanel.removeSelectedRecord - 1: " + res); return res;});
//MochiKit.Logging.logDebug("--- MainPanel.removeSelectedRecord - 2:");
deferred.addCallback(function() {
var deferredResult;
deferredResult = new MochiKit.Async.Deferred();
Clipperz.PM.Components.MessageBox().deferredShow({
title:Clipperz.PM.Strings['mainPanelDeletingRecordPanelConfirmationTitle'],
text:Clipperz.PM.Strings['mainPanelDeleteRecordPanelConfirmationText'],
width:240,
showProgressBar:false,
showCloseButton:false,
buttons:{
'yes':Clipperz.PM.Strings['mainPanelDeleteRecordPanelConfirmButtonLabel'],
'no':Clipperz.PM.Strings['mainPanelDeleteRecordPanelDenyButtonLabel']
},
fn:MochiKit.Base.partial(function(aDeferred, aResult) {
if (aResult == 'yes') {
aDeferred.callback(aResult);
} else {
aDeferred.errback(aResult);
}
}, deferredResult)
}, 'recordListRemoveRecordButton');
return deferredResult;
});
//MochiKit.Logging.logDebug("--- MainPanel.removeSelectedRecord - 3:");
//deferred.addBoth(function(res) {MochiKit.Logging.logDebug("MainPanel.removeSelectedRecord - 2: " + res); return res;});
//MochiKit.Logging.logDebug("--- MainPanel.removeSelectedRecord - 4:");
//deferred.addBoth(function(res) {MochiKit.Logging.logDebug("MainPanel.removeSelectedRecord - 3: " + res); return res;});
deferred.addCallback(MochiKit.Base.method(Clipperz.PM.Components.MessageBox(), 'deferredShow'),
{
title:Clipperz.PM.Strings['mainPanelDeletingRecordPanelInitialTitle'],
text:Clipperz.PM.Strings['mainPanelDeletingRecordPanelInitialText'],
width:240,
showProgressBar:true,
showCloseButton:false,
steps:5
}
);
//MochiKit.Logging.logDebug("--- MainPanel.removeSelectedRecord - 5:");
//deferred.addBoth(function(res) {MochiKit.Logging.logDebug("MainPanel.removeSelectedRecord - 4: " + res); return res;});
deferred.addCallback(MochiKit.Base.method(this.user(), 'deleteRecordsAction'), records);
//MochiKit.Logging.logDebug("--- MainPanel.removeSelectedRecord - 6:");
//deferred.addBoth(function(res) {MochiKit.Logging.logDebug("MainPanel.removeSelectedRecord - 5: " + res); return res;});
//MochiKit.Logging.logDebug("--- MainPanel.removeSelectedRecord - 7:");
//deferred.addBoth(function(res) {MochiKit.Logging.logDebug("MainPanel.removeSelectedRecord - 6: " + res); return res;});
deferred.addCallback(function() {
Clipperz.PM.Components.MessageBox().update({
title:null,
text:Clipperz.PM.Strings['mainPanelDeletingRecordPanelCompletedText'],
step:'next',
buttons:{}
});
});
//MochiKit.Logging.logDebug("--- MainPanel.removeSelectedRecord - 8:");
//deferred.addBoth(function(res) {MochiKit.Logging.logDebug("MainPanel.removeSelectedRecord - 7: " + res); return res;});
deferred.addCallback(MochiKit.Async.wait, 1);
//MochiKit.Logging.logDebug("--- MainPanel.removeSelectedRecord - 9:");
//deferred.addBoth(function(res) {MochiKit.Logging.logDebug("MainPanel.removeSelectedRecord - 8: " + res); return res;});
deferred.addCallback(function(res) {
Clipperz.PM.Components.MessageBox().hide(YAHOO.ext.Element.get('main'));
return res;
});
//MochiKit.Logging.logDebug("--- MainPanel.removeSelectedRecord - 10:");
//deferred.addBoth(function(res) {MochiKit.Logging.logDebug("MainPanel.removeSelectedRecord - 9: " + res); return res;});
deferred.callback();
} else {
//MochiKit.Logging.logDebug("+++ MainPanel.removeSelectedRecord - nothing selected");
}
},
//-------------------------------------------------------------------------
'recordDetailComponent': function() {
//MochiKit.Logging.logDebug(">>> MainPanel.recordDetailComponent");
if (this._recordDetailComponent == null) {
//MochiKit.Logging.logDebug("--- MainPanel.recordDetailComponent - 1");
//MochiKit.Logging.logDebug("--- MainPanel.recordDetailComponent - 1 - user: " + this.user());
this._recordDetailComponent = new Clipperz.PM.Components.RecordDetail.MainComponent(
YAHOO.ext.Element.get('recordDetail'),
{user:this.user(), mainPanel:this}
);
}
//MochiKit.Logging.logDebug("<<< MainPanel.recordDetailComponent");
return this._recordDetailComponent;
},
//-------------------------------------------------------------------------
'selectedRecord': function() {
return this._selectedRecord;
},
'setSelectedRecord': function(aValue) {
// this.hideNewRecordPanel();
//MochiKit.Logging.logDebug(">>> MainPanel.setSelectedRecord");
if (aValue != this._selectedRecord) {
//MochiKit.Logging.logDebug("--- MainPanel.setSelectedRecord - 1");
this._selectedRecord = aValue;
//MochiKit.Logging.logDebug("--- MainPanel.setSelectedRecord - 2");
this.redrawRecordItems();
//MochiKit.Logging.logDebug("--- MainPanel.setSelectedRecord - 3");
this.recordDetailComponent().setRecord(aValue);
//MochiKit.Logging.logDebug("--- MainPanel.setSelectedRecord - 4");
}
if ((aValue == null) || (Clipperz.PM.Proxy.defaultProxy.isReadOnly())) {
this.deleteRecordButton().disable();
} else {
this.deleteRecordButton().enable();
}
//MochiKit.Logging.logDebug("<<< MainPanel.setSelectedRecord");
},
//-------------------------------------------------------------------------
'recordAddedHandler': function(anEvent) {
//MochiKit.Logging.logDebug(">>> MainPanel.recordAddedHandler");
this.recordDetailComponent();
this.redrawRecordItems();
//MochiKit.Logging.logDebug("<<< MainPanel.recordAddedHandler");
},
'recordUpdatedHandler': function(anEvent) {
//MochiKit.Logging.logDebug(">>> MainPanel.recordUpdatedHandler");
this.redrawRecordItems();
//MochiKit.Logging.logDebug("<<< MainPanel.recordUpdatedHandler");
},
'recordRemovedHandler': function(anEvent) {
//MochiKit.Logging.logDebug(">>> MainPanel.recordRemovedHandler");
this.setSelectedRecord(null);
//MochiKit.Logging.logDebug("--- MainPanel.recordRemovedHandler - 1");
this.redrawRecordItems();
//MochiKit.Logging.logDebug("<<< MainPanel.recordRemovedHandler");
},
'compareRecords': function(a, b) {
//MochiKit.Logging.logDebug("=== compareRecords: " + a.toString() + " - " + b.toString());
return MochiKit.Base.compare(a.label().toLowerCase(), b.label().toLowerCase());
},
'redrawRecordItems': function() {
var template;
var allRecords;
//MochiKit.Logging.logDebug(">>> MainPanel.redrawRecordItems");
MochiKit.Iter.forEach(YAHOO.ext.Element.get('records').getChildrenByTagName('li'), function(aRecordElement) {
MochiKit.Signal.disconnectAll(aRecordElement.dom);
})
//MochiKit.Logging.logDebug("--- MainPanel.redrawRecordItems - 1");
YAHOO.ext.Element.get('records').update("");
//MochiKit.Logging.logDebug("--- MainPanel.redrawRecordItems - 2");
allRecords = MochiKit.Base.values(this.user().records());
//MochiKit.Logging.logDebug("--- MainPanel.redrawRecordItems - 3");
allRecords.sort(this.compareRecords);
//MochiKit.Logging.logDebug("--- MainPanel.redrawRecordItems - 4");
template = this.recordItemTemplate();
//MochiKit.Logging.logDebug("--- MainPanel.redrawRecordItems - 5");
MochiKit.Iter.forEach(allRecords, MochiKit.Base.bind(function(aRecord) {
var recordElement;
recordElement = template.append('records', {
recordTitle:aRecord.label(),
recordReference:aRecord.reference(),
cls:((aRecord == this.selectedRecord()) ? 'selected': '')
}, true);
//MochiKit.Logging.logDebug("--- MainPanel.redrawRecordItems - 6: " + recordElement.dom);
recordElement.addClassOnOver('hover');
MochiKit.Signal.connect(recordElement.dom, 'onclick', this, 'selectRecord');
}, this));
//MochiKit.Logging.logDebug("<<< MainPanel.redrawRecordItems");
},
'selectRecord': function(anEvent) {
//MochiKit.Logging.logDebug(">>> MainPanel.selectRecord");
//MochiKit.Logging.logDebug("--- MainPanel.selectRecord !!! - ", this.user().records()[anEvent.src().id].label());
this.setSelectedRecord(this.user().records()[anEvent.src().id]);
//MochiKit.Logging.logDebug("<<< MainPanel.selectRecord");
},
//-------------------------------------------------------------------------
'directLoginAddedHandler': function(anEvent) {
//MochiKit.Logging.logDebug(">>> MainPanel.recordRemovedHandler");
this.redrawDirectLoginItems();
//MochiKit.Logging.logDebug("<<< MainPanel.recordRemovedHandler");
},
'directLoginUpdatedHandler': function(anEvent) {
//MochiKit.Logging.logDebug(">>> MainPanel.directLoginUpdatedHandler");
this.redrawDirectLoginItems();
//MochiKit.Logging.logDebug("<<< MainPanel.directLoginUpdatedHandler");
},
'directLoginRemovedHandler': function(anEvent) {
//MochiKit.Logging.logDebug(">>> MainPanel.directLoginRemovedHandler");
this.redrawDirectLoginItems();
//MochiKit.Logging.logDebug("<<< MainPanel.directLoginRemovedHandler");
},
'compareDirectLogins': function(a, b) {
return MochiKit.Base.compare(a.label().toLowerCase(), b.label().toLowerCase());
},
'redrawDirectLoginItems': function() {
var template;
var allDirectLogins;
//MochiKit.Logging.logDebug(">>> MainPanel.redrawDirectLoginItems");
MochiKit.Iter.forEach(YAHOO.ext.Element.get('directLogins').getChildrenByTagName('li'), function(aDirectLoginElement) {
MochiKit.Signal.disconnectAll(aDirectLoginElement.dom);
//MochiKit.Logging.logDebug("disconnecting IMG " + aDirectLoginElement.getChildrenByTagName('img')[0].dom.src);
MochiKit.Signal.disconnectAll(aDirectLoginElement.getChildrenByTagName('img')[0].dom);
})
//MochiKit.Logging.logDebug("--- MainPanel.redrawDirectLoginItems - 1");
YAHOO.ext.Element.get('directLogins').update("");
//MochiKit.Logging.logDebug("--- MainPanel.redrawDirectLoginItems - 2");
allDirectLogins = MochiKit.Base.values(this.user().directLoginReferences());
//MochiKit.Logging.logDebug("--- MainPanel.redrawDirectLoginItems - 3");
allDirectLogins.sort(this.compareDirectLogins);
if (allDirectLogins.length == 0) {
YAHOO.ext.Element.get('directLoginsDescription').show();
YAHOO.ext.Element.get('directLogins').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
} else {
YAHOO.ext.Element.get('directLoginsDescription').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
YAHOO.ext.Element.get('directLogins').show();
}
//MochiKit.Logging.logDebug("--- MainPanel.redrawDirectLoginItems - 4");
template = this.directLoginItemTemplate();
//MochiKit.Logging.logDebug("--- MainPanel.redrawDirectLoginItems - 5");
MochiKit.Iter.forEach(allDirectLogins, MochiKit.Base.bind(function(aDirectLogin) {
var directLoginElement;
var faviconImageElementID;
faviconImageElementID = aDirectLogin.reference() + "_faviconIMG";
directLoginElement = template.append('directLogins', {
elementID:faviconImageElementID,
faviconUrl:aDirectLogin.fixedFavicon(),
directLoginTitle:aDirectLogin.label(),
directLoginReference:aDirectLogin.reference()
}, true);
//MochiKit.Logging.logDebug("--- MainPanel.redrawDirectLoginItems - 6: " + recordElement.dom);
directLoginElement.addClassOnOver("hover");
MochiKit.Signal.connect(directLoginElement.dom, 'onclick', this, 'handleDirectLoginClick');
MochiKit.Signal.connect(faviconImageElementID, 'onload', this, 'handleLoadedFaviconImage');
MochiKit.Signal.connect(faviconImageElementID, 'onerror', aDirectLogin, 'handleMissingFaviconImage');
MochiKit.Signal.connect(faviconImageElementID, 'onabort', aDirectLogin, 'handleMissingFaviconImage');
// YAHOO.ext.Element.get(faviconImageElementID).dom.src = aDirectLogin.fixedFavicon();
}, this));
//MochiKit.Logging.logDebug("<<< MainPanel.redrawDirectLoginItems");
},
//-------------------------------------------------------------------------
'handleDirectLoginClick': function(anEvent) {
var directLoginReference;
//MochiKit.Logging.logDebug(">>> MainPanel.handleDirectLoginClick !!!");
directLoginReference = this.user().directLoginReferences()[anEvent.src().id];
if (anEvent.target().className == 'directLoginItemEditButton') {
this.editDirectLogin(directLoginReference);
} else {
this.openDirectLogin(directLoginReference);
}
//MochiKit.Logging.logDebug("<<< MainPanel.handleDirectLoginClick");
},
'editDirectLogin': function(aDirectLoginReference) {
//MochiKit.Logging.logDebug("=== MainPanel.editDirectLogin - " + aDirectLoginReference.label());
this.setSelectedRecord(aDirectLoginReference.record());
},
'openDirectLogin': function(aDirectLoginReference) {
var deferredResult;
var newWindow;
//MochiKit.Logging.logDebug(">>> MainPanel.openDirectLogin - " + aDirectLoginReference.label());
deferredResult = new MochiKit.Async.Deferred();
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("MainPanel.openDirectLogin - 1: " + res); return res;});
deferredResult.addCallback(MochiKit.Base.method(aDirectLoginReference, 'setupJumpPageWindow'));
deferredResult.addCallback(MochiKit.Base.method(aDirectLoginReference, 'deferredDirectLogin'));
deferredResult.addCallback(function(aDirectLogin) {
aDirectLogin.runDirectLogin(newWindow);
});
newWindow = window.open(Clipperz.PM.Strings['directLoginJumpPageUrl'], "");
// MochiKit.Signal.connect(newWindow, 'onload', MochiKit.Base.method(deferredResult, 'callback', newWindow))
// MochiKit.Signal.connect(newWindow, 'onload', MochiKit.Base.partial(alert, "done"));
deferredResult.callback(newWindow);
//MochiKit.Logging.logDebug("<<< MainPanel.openDirectLogin");
},
//-------------------------------------------------------------------------
'handleLoadedFaviconImage': function(anEvent) {
//MochiKit.Logging.logDebug(">>> MainPanel.handleLoadedFaviconImage");
MochiKit.Signal.disconnectAll(anEvent.src())
//MochiKit.Logging.logDebug("<<< MainPanel.handleLoadedFaviconImage");
},
//-------------------------------------------------------------------------
'recordItemTemplate': function() {
if (this._recordItemTemplate == null) {
this._recordItemTemplate = Clipperz.YUI.DomHelper.createTemplate({tag:'li', cls:'{cls}', id:'{recordReference}', children:[
{tag:'span', html:'{recordTitle}'}
]});
this._recordItemTemplate.compile();
}
return this._recordItemTemplate;
},
'directLoginItemTemplate': function() {
if (this._directLoginItemTemplate == null) {
this._directLoginItemTemplate = Clipperz.YUI.DomHelper.createTemplate({tag:'li', id:'{directLoginReference}', children:[
{tag:'table', border:'0', cellpadding:'0', cellspacing:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', width:'20', align:'center', valign:'top', children:[
{tag:'img', id:'{elementID}', src:'{faviconUrl}'}
]},
{tag:'td', valign:'top', children:[
{tag:'a', cls:'directLoginItemTitle', html:'{directLoginTitle}'}
]},
{tag:'td', valign:'top', align:'right', children:[
// {tag:'span', cls:'directLoginItemEditButton', htmlString:Clipperz.PM.Strings['directLinkReferenceShowButtonLabel']}
{tag:'a', cls:'directLoginItemEditButton', htmlString:Clipperz.PM.Strings['directLinkReferenceShowButtonLabel']}
]}
]}
]}
]}
]});
this._directLoginItemTemplate.compile();
}
return this._directLoginItemTemplate;
},
//-------------------------------------------------------------------------
/*
'newRecordButton': function() {
return this._newRecordButton;
},
'setNewRecordButton': function(aValue) {
this._newRecordButton = aValue;
},
'newRecordCancelButton': function() {
return this._newRecordCancelButton;
},
'setNewRecordCancelButton': function(aValue) {
this._newRecordCancelButton = aValue;
},
*/
//-------------------------------------------------------------------------
'onkeydown': function(anEvent) {
//MochiKit.Logging.logDebug(">>> onkeydown - " + anEvent.src().id + ": " + anEvent.key().code);
switch (anEvent.src().id) {
/*
case this.getId('newRecordForm'):
if (anEvent.key().code == 13) {
this.newRecordButton().focus();
// this.addNewRecord();
} else if (anEvent.key().code == 27) {
this.newRecordCancelButton().focus();
this.hideNewRecordPanel(true);
}
break;
*/
case "recordFilterSearchForm":
if (anEvent.key().code == 13) {
//MochiKit.Logging.logDebug("SEARCH");
this.filterCardsWithName(YAHOO.ext.Element.get('recordFilterSearchValue').dom.value);
anEvent.event().stopPropagation();
YAHOO.ext.Element.get('recordFilterSearchValue').focus();
} else if (anEvent.key().code == 27) {
this.hideRecordFilterSearchPanel(true);
this.showRecordFilterAllPanel();
}
break;
}
},
//-------------------------------------------------------------------------
'renderRecordListBlockHeader': function(){
var recordListBlockHeaderElement;
recordListBlockHeaderElement = YAHOO.ext.Element.get('recordListBlockHeader');
recordListBlockHeaderElement.update("");
Clipperz.YUI.DomHelper.append(recordListBlockHeaderElement.dom,
{tag:'table', cls:'recordListBlockHeaderTABLE', border:'0', cellspacing:'0', cellpadding:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', /*width:'50%',*/ cls:'recordBlockTitleTD', children:[
{tag:'h3', id:'recordBlockTitle', htmlString:Clipperz.PM.Strings['mainPanelRecordsBlockLabel']}
]},
{tag:'td', align:'right', children:[
{tag:'table', id:'recordListButtonsTABLE', border:'0', cellspacing:'0', cellpadding:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', cls:'recordButtonTD', align:'right', children:[
{tag:'div', cls:'recordButton', id:'recordListAddRecordButton'}
]},
{tag:'td', cls:'recordButtonTD', align:'left', children:[
{tag:'div', cls:'recordButton', id:'recordListRemoveRecordButton'}
]}
]}
]}
]}
]},
{tag:'td', width:'15', html:"&nbsp;"}
]}
]}
]}
);
this.setAddNewRecordButton(new YAHOO.ext.Button('recordListAddRecordButton', {text:Clipperz.PM.Strings['mainPanelAddRecordButtonLabel'], handler:this.addNewRecord, scope:this}));
// this.setAddNewRecordButton(new YAHOO.ext.Button('recordListAddRecordButton', {text:Clipperz.PM.Strings['mainPanelAddRecordButtonLabel'], handler:this.showNewRecordPanel, scope:this}));
this.setDeleteRecordButton(new YAHOO.ext.Button('recordListRemoveRecordButton', {text:Clipperz.PM.Strings['mainPanelRemoveRecordButtonLabel'], handler:this.removeSelectedRecord, scope:this}));
if ((Clipperz.PM.Proxy.defaultProxy.isReadOnly()) || (this.selectedRecord() == null)) {
this.deleteRecordButton().disable();
}
if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) {
this.addNewRecordButton().disable();
}
},
//-------------------------------------------------------------------------
'renderRecordListFilterHeader': function(){
var recordListFilterHeaderElement;
recordListFilterHeaderElement = YAHOO.ext.Element.get('recordListFilterHeader');
recordListFilterHeaderElement.update("");
Clipperz.YUI.DomHelper.append(recordListFilterHeaderElement.dom,
{tag:'div', id:'recordFiltersDIV', children:[
{tag:'div', id:'recordFiltersTableWrapper', children:[
{tag:'table', id:'recordFiltersTABLE', border:'0', cellspacing:'0', cellpadding:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', id:'recordFilterAllTD', children:[{tag:'div', children:[{tag:'a', id:'recordFilterAll', htmlString:Clipperz.PM.Strings['mainPanelRecordFilterBlockAllLabel']}]}]},
{tag:'td', id:'recordFilterTagsTD', children:[{tag:'div', children:[{tag:'a', id:'recordFilterTags', htmlString:Clipperz.PM.Strings['mainPanelRecordFilterBlockTagsLabel']}]}]},
{tag:'td', id:'recordFilterSearchTD', children:[{tag:'div', children:[{tag:'a', id:'recordFilterSearch', htmlString:Clipperz.PM.Strings['mainPanelRecordFilterBlockSearchLabel']}]}]}
]}
]}
]}
]},
{tag:'div', id:'recordFiltersTagsPanel'},
{tag:'div', id:'recordFiltersSearchPanel', children:[{tag:'div', id:'recordFiltersSearchInnerPanel', children:[{tag:'div', id:'recordFiltersSearchInnerInnerPanel', children:[
{tag:'form', id:'recordFilterSearchForm', children:[
{tag:'input', type:'text', name:'search', id:'recordFilterSearchValue'}
]}
]}]}]}
]}
);
/// YAHOO.ext.Element.get('recordFiltersSearchPanel').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
this.showRecordFilterAllPanel(false);
MochiKit.Signal.connect('recordFilterSearchForm', 'onkeydown', this, 'onkeydown');
MochiKit.Signal.connect('recordFilterSearchForm', 'onsubmit', this, 'onkeydown');
MochiKit.Signal.connect('recordFilterAll', 'onclick', this, 'showRecordFilterAllPanel');
MochiKit.Signal.connect('recordFilterTags', 'onclick', this, 'showRecordFilterTagsPanel');
MochiKit.Signal.connect('recordFilterSearch', 'onclick', this, 'showRecordFilterSearchPanel');
},
//-------------------------------------------------------------------------
'showRecordFilterAllPanel': function(shouldSlide) {
this.hideRecordFilterTagsPanel(shouldSlide);
this.hideRecordFilterSearchPanel(shouldSlide);
YAHOO.ext.Element.get('recordFilterAllTD').addClass('selectedTab');
},
'hideRecordFilterAllPanel': function(shouldSlide) {
YAHOO.ext.Element.get('recordFilterAllTD').removeClass('selectedTab');
},
//-------------------------------------------------------------------------
'showRecordFilterTagsPanel': function(shouldSlide) {
this.hideRecordFilterAllPanel(shouldSlide);
this.hideRecordFilterSearchPanel(shouldSlide);
YAHOO.ext.Element.get('recordFilterTagsTD').addClass('selectedTab');
},
'hideRecordFilterTagsPanel': function(shouldSlide) {
YAHOO.ext.Element.get('recordFilterTagsTD').removeClass('selectedTab');
},
//-------------------------------------------------------------------------
'showRecordFilterSearchPanel': function(shouldSlide) {
var searchPanelActor;
this.hideRecordFilterAllPanel(shouldSlide);
this.hideRecordFilterTagsPanel(shouldSlide);
YAHOO.ext.Element.get('recordFilterSearchTD').addClass('selectedTab');
YAHOO.ext.Element.get('recordFilterSearchValue').dom.value = "";
searchPanelActor = new YAHOO.ext.Actor('recordFiltersSearchPanel');
searchPanelActor.startCapture(true);
searchPanelActor.slideShow('top', 54);
searchPanelActor.play(MochiKit.Base.bind(function() {
YAHOO.ext.Element.get('recordFilterSearchValue').focus();
}, this));
},
'hideRecordFilterSearchPanel': function(shouldSlide) {
var searchPanelActor;
var callback;
YAHOO.ext.Element.get('recordFilterSearchTD').removeClass('selectedTab');
searchPanelActor = new YAHOO.ext.Actor('recordFiltersSearchPanel');
searchPanelActor.startCapture(true)
if (shouldSlide === false) {
searchPanelActor.hide();
searchPanelActor.slideHide('top');
searchPanelActor.show();
} else {
searchPanelActor.slideHide('top');
}
callback = MochiKit.Base.bind(function() {
}, this);
searchPanelActor.play(callback);
},
//-------------------------------------------------------------------------
'filterCardsWithName': function(aValue) {
MochiKit.Logging.logDebug(">>> filterCardsWithName: " + aValue);
MochiKit.Logging.logDebug("<<< filterCardsWithName");
},
'accountLockedHandler': function() {
this.setSelectedRecord(null);
},
//-------------------------------------------------------------------------
'switchLanguageHandler': function() {
YAHOO.ext.Element.get('directLoginTitle').update(Clipperz.PM.Strings['mainPanelDirectLoginBlockLabel']);
YAHOO.ext.Element.get('directLoginsDescription').update("");
MochiKit.Iter.forEach(Clipperz.PM.Strings['mainPanelDirectLoginBlockDescriptionConfig'], function(aConfigItem) {
Clipperz.YUI.DomHelper.append(YAHOO.ext.Element.get('directLoginsDescription').dom, aConfigItem);
});
YAHOO.ext.Element.get('recordBlockTitle').update(Clipperz.PM.Strings['mainPanelRecordsBlockLabel']);
this.renderRecordListBlockHeader();
// this.renderRecordListFilterHeader();
// YAHOO.ext.Element.get('newRecordPanelTitleH2').update(Clipperz.PM.Strings['mainPanelNewRecordPanelTitle']);
// YAHOO.ext.Element.get('newRecordPanelTitleLabel').update(Clipperz.PM.Strings['mainPanelNewRecordPanelRecordTitleLabel']);
// YAHOO.ext.Element.get('newRecordPanelConfigLabel').update("");
// MochiKit.Iter.forEach(Clipperz.PM.Strings['mainPanelNewRecordPanelRecordConfigConfig'], function(aConfigItem) {
// Clipperz.YUI.DomHelper.append(YAHOO.ext.Element.get('newRecordPanelConfigLabel').dom, aConfigItem);
// });
// this.newRecordButton().setText(Clipperz.PM.Strings['mainPanelNewRecordPanelCreateButtonLabel']);
// this.newRecordCancelButton().setText(Clipperz.PM.Strings['mainPanelNewRecordPanelCancelButtonLabel']);
this.recordDetailComponent().render();
},
//-------------------------------------------------------------------------
__syntaxFix__: "syntax fix"
});

View File

@@ -0,0 +1,305 @@
/*
Copyright 2008-2011 Clipperz Srl
This file is part of Clipperz's Javascript Crypto Library.
Javascript Crypto Library provides web developers with an extensive
and efficient set of cryptographic functions. The library aims to
obtain maximum execution speed while preserving modularity and
reusability.
For further information about its features and functionalities please
refer to http://www.clipperz.com
* Javascript Crypto Library is free software: you can redistribute
it and/or modify it under the terms of the GNU Affero General Public
License as published by the Free Software Foundation, either version
3 of the License, or (at your option) any later version.
* Javascript Crypto Library is distributed in the hope that it will
be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public
License along with Javascript Crypto Library. If not, see
<http://www.gnu.org/licenses/>.
*/
if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
//#############################################################################
Clipperz.PM.Components.Panels.ToolsPanel = function(anElement, args) {
args = args || {};
Clipperz.PM.Components.Panels.ToolsPanel.superclass.constructor.call(this, anElement, args);
this._generateButtonElement = null;
this._needsRenderingUponTabSwitch = false;
this.render();
return this;
}
//=============================================================================
YAHOO.extendX(Clipperz.PM.Components.Panels.ToolsPanel, Clipperz.PM.Components.Panels.BasePanel, {
'toString': function() {
return "Clipperz.PM.Components.Panels.ToolsPanel component";
},
//-------------------------------------------------------------------------
'render': function() {
var bookmarkletUrl;
//MochiKit.Logging.logDebug(">>> ToolsPanel.render");
Clipperz.NotificationCenter.unregister(this);
MochiKit.Signal.disconnectAllTo(this);
if (Clipperz_IEisBroken == true) {
bookmarkletUrl = bookmarklet_ie;
} else {
bookmarkletUrl = bookmarklet;
}
this.element().update("");
Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', valign:'top', width:'200', children:[
{tag:'ul', id:"dataSubMenu", cls:'subMenu', children:[
{tag:'li', id:this.getId('passwordGenerator'), htmlString:Clipperz.PM.Strings['passwordGeneratorTabLabel']},
{tag:'li', id:this.getId('bookmarklet'), htmlString:Clipperz.PM.Strings['bookmarkletTabLabel']},
{tag:'li', id:this.getId('compact'), htmlString:Clipperz.PM.Strings['compactTabLabel']},
{tag:'li', id:this.getId('httpAuth'), htmlString:Clipperz.PM.Strings['httpAuthTabLabel']}
]}
]},
{tag:'td', valign:'top', children:[
{tag:'ul', cls:'clipperzTabPanels', children:[
{tag:'li', id:this.getId('passwordGeneratorPanel'), children:[
{tag:'div', cls:'clipperzSubPanel', children:[
{tag:'h5', htmlString:Clipperz.PM.Strings['passwordGeneratorTabTitle']},
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['paswordGeneratorTabDescription']},
//---------------------------------------------------
{tag:'div', children:[
{tag:'form', id:this.getId('passwordGeneratorForm'), cls:'passwordGenerator', children:[
{tag:'input', type:'text', cls:'clipperz_passwordGenerator_password', id:this.getId('passwordField')},
{tag:'table', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', width:'20%', children:[
{tag:'input', type:'checkbox', name:'lowercase', id:this.getId('lowercase'), checked:true},
{tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorLowercaseLabel']}
]},
{tag:'td', width:'20%', children:[
{tag:'input', type:'checkbox', name:'uppercase', id:this.getId('uppercase'), checked:true},
{tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorUppercaseLabel']}
]},
{tag:'td', width:'20%', children:[
{tag:'input', type:'checkbox', name:'numbers', id:this.getId('numbers'), checked:true},
{tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorNumberLabel']}
]},
{tag:'td', width:'20%', children:[
{tag:'input', type:'checkbox', name:'symbols', id:this.getId('symbols'), checked:true},
{tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorSymbolLabel']}
]},
{tag:'td', width:'20%', children:[
{tag:'span', cls:'passwordGeneratorLength', children:[
{tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorLengthLabel']},
{tag:'span', id:this.getId('passwordLength'), cls:'passwordGeneratorLengthValue', html:'0'}
]}
]}
]}
]}
]}
]},
{tag:'div', id:this.getId('generateRandomPassword')}
]}
//---------------------------------------------------
]}
]},
{tag:'li', id:this.getId('bookmarkletPanel'), children:[
{tag:'div', cls:'clipperzSubPanel', children:[
{tag:'h5', htmlString:Clipperz.PM.Strings['bookmarkletTabTitle']},
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['bookmarkletTabDescription']},
{tag:'a', href:bookmarkletUrl, cls:'bookmarkletLink', htmlString:Clipperz.PM.Strings['bookmarkletTabBookmarkletTitle']},
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['bookmarkletTabInstructions']}
]}
]},
{tag:'li', id:this.getId('compactPanel'), children:[
{tag:'div', cls:'clipperzSubPanel', children:[
{tag:'h5', htmlString:Clipperz.PM.Strings['compactTabTitle']},
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['compactTabDescription']}
]}
]},
{tag:'li', id:this.getId('httpAuthPanel'), children:[
{tag:'div', cls:'clipperzSubPanel', children:[
{tag:'h5', htmlString:Clipperz.PM.Strings['httpAuthTabTitle']},
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['httpAuthTabDescription']},
{tag:'div', cls:'bookmarkletConfiguration', children:[Clipperz.PM.Strings['httpAuthBookmarkletConfiguration']]}
]}
]}
]}
]}
]}
]}
]});
new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('passwordField'));
MochiKit.Signal.connect(this.getId('lowercase'), 'onclick', this, 'updatePasswordValue');
MochiKit.Signal.connect(this.getId('uppercase'), 'onclick', this, 'updatePasswordValue');
MochiKit.Signal.connect(this.getId('numbers'), 'onclick', this, 'updatePasswordValue');
MochiKit.Signal.connect(this.getId('symbols'), 'onclick', this, 'updatePasswordValue');
MochiKit.Signal.connect(this.getDom('passwordField'), 'onkeyup', this, 'updatePasswordLengthLabel');
MochiKit.Signal.connect(this.getDom('passwordField'), 'onchange', this, 'updatePasswordLengthLabel');
MochiKit.Signal.connect(this.getDom('passwordField'), 'onblur', this, 'updatePasswordLengthLabel');
this.setGenerateButtonElement(new YAHOO.ext.Button(this.getDom('generateRandomPassword'), {text:Clipperz.PM.Strings['passwordGeneratorTabButtonLabel'], handler:this.updatePasswordValue, scope:this}));
this.setNeedsRenderingUponTabSwitch(false);
this.tabPanelController().setUp();
Clipperz.NotificationCenter.register(null, 'tabSelected', this, 'tabSelectedHandler');
Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler');
//MochiKit.Logging.logDebug("<<< ToolsPanel.render");
},
//-------------------------------------------------------------------------
'needsRenderingUponTabSwitch': function() {
return this._needsRenderingUponTabSwitch;
},
'setNeedsRenderingUponTabSwitch': function(aValue) {
this._needsRenderingUponTabSwitch = aValue;
},
'tabSelectedHandler': function(anEvent) {
if (this.needsRenderingUponTabSwitch()) {
this.render();
}
if (anEvent.parameters() == this.getId('httpAuth')) {
var textarea;
textarea = document.getElementById("httpAuthDefaultConfiguration");
textarea.focus();
textarea.select();
}
},
//-------------------------------------------------------------------------
'tabPanelController': function() {
if (this._tabPanelController == null) {
var tabPanelControllerConfig;
tabPanelControllerConfig = {}
tabPanelControllerConfig[this.getId('passwordGenerator')] = this.getId('passwordGeneratorPanel');
tabPanelControllerConfig[this.getId('bookmarklet')] = this.getId('bookmarkletPanel');
tabPanelControllerConfig[this.getId('compact')] = this.getId('compactPanel');
tabPanelControllerConfig[this.getId('httpAuth')] = this.getId('httpAuthPanel');
this._tabPanelController = new Clipperz.PM.Components.TabPanel.TabPanelController({ config:tabPanelControllerConfig, selectedTab:this.getId('passwordGenerator') });
}
return this._tabPanelController;
},
//-------------------------------------------------------------------------
'generateButtonElement': function() {
return this._generateButtonElement;
},
'setGenerateButtonElement': function(aValue) {
this._generateButtonElement = aValue;
},
//-------------------------------------------------------------------------
'updatePasswordValue': function(anEvent) {
var randomBytes;
var randomValue;
var charset;
var charsetBitSize;
var stringValue;
var blockIndex;
//MochiKit.Logging.logDebug(">>> updatePasswordValue");
randomBytes = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(50);
stringValue = "";
blockIndex = 0;
charset = "";
if (this.getDom('lowercase').checked) {
charset += Clipperz.PM.Strings['passwordGeneratorLowercaseCharset'];
}
if (this.getDom('uppercase').checked) {
charset += Clipperz.PM.Strings['passwordGeneratorUppercaseCharset'];
}
if (this.getDom('numbers').checked) {
charset += Clipperz.PM.Strings['passwordGeneratorNumberCharset'];
}
if (this.getDom('symbols').checked) {
charset += Clipperz.PM.Strings['passwordGeneratorSymbolCharset'];
}
charsetBitSize = 0;
while (Math.pow(2, charsetBitSize) < charset.length) {
charsetBitSize ++;
}
if (charsetBitSize > 0) {
while (Clipperz.PM.Crypto.passwordEntropy(stringValue) < 128) {
if (((blockIndex + 1)*charsetBitSize) > (randomBytes.length() * 8)) {
randomBytes = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(50);
blockIndex = 0;
}
randomValue = randomBytes.bitBlockAtIndexWithSize(blockIndex*charsetBitSize, charsetBitSize);
if (randomValue < charset.length) {
stringValue += charset.charAt(randomValue);
}
blockIndex ++;
}
} else {
stringValue = "";
}
this.getElement('passwordField').dom.focus()
this.getElement('passwordField').dom.value = stringValue;
if (anEvent.src) {
anEvent.src().focus();
} else {
this.generateButtonElement().el.focus();
}
this.setNeedsRenderingUponTabSwitch(true);
return false;
//MochiKit.Logging.logDebug("<<< updatePasswordValue");
},
//-----------------------------------------------------
'updatePasswordLengthLabel': function() {
this.getElement('passwordLength').update(this.getDom('passwordField').value.length);
},
//-------------------------------------------------------------------------
__syntaxFix__: "syntax fix"
});