summaryrefslogtreecommitdiff
path: root/frontend/beta
Side-by-side diff
Diffstat (limited to 'frontend/beta') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Panels/AccountPanel.js8
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js12
2 files changed, 10 insertions, 10 deletions
diff --git a/frontend/beta/js/Clipperz/PM/Components/Panels/AccountPanel.js b/frontend/beta/js/Clipperz/PM/Components/Panels/AccountPanel.js
index defce91..a627adc 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Panels/AccountPanel.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Panels/AccountPanel.js
@@ -1,503 +1,503 @@
/*
Copyright 2008-2013 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
refer to http://www.clipperz.com.
* Clipperz 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.
* Clipperz 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 Clipperz. 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:'input', type:'text', name:'username', id:this.getId('changePassphrase_username'), autocomplete:'off'}
]}
]},
{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:'input', type:'password', name:'oldPassphrase', id:this.getId('changePassphrase_oldPassphrase'), autocomplete:'off'}
]}
]},
{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:'input', type:'password', name:'newPassphrase', id:this.getId('changePassphrase_newPassphrase'), autocomplete:'off'}
]}
]},
{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:'input', type:'password', name:'renewPassphrase', id:this.getId('changePassphrase_renewPassphrase'), autocomplete:'off'}
]}
]},
{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;
},
//-------------------------------------------------------------------------
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js
index f2c70aa..a8117d7 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js
@@ -1,270 +1,270 @@
/*
Copyright 2008-2013 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
refer to http://www.clipperz.com.
* Clipperz 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.
* Clipperz 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 Clipperz. 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.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
//#############################################################################
Clipperz.PM.Components.RecordDetail.FieldValueComponent = function(anElement, args) {
args = args || {};
Clipperz.PM.Components.RecordDetail.FieldValueComponent.superclass.constructor.call(this, anElement, args);
this._inputElement = null;
this._scrambledStatus = 'SCRAMBLED'; // 'UNSCRAMBLED'
this.render();
return this;
}
//=============================================================================
YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldValueComponent, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, {
'toString': function() {
return "Clipperz.PM.Components.RecordDetail.FieldValueComponent component";
},
//-------------------------------------------------------------------------
'value': function() {
return this.recordField().value();
},
'setValue': function(aValue) {
this.recordField().setValue(aValue);
},
//-------------------------------------------------------------------------
'inputElement': function() {
return this._inputElement;
},
'setInputElement': function(aValue) {
this._inputElement = aValue;
},
//-------------------------------------------------------------------------
'scrambledStatus': function() {
return this._scrambledStatus;
},
'setScrambledStatus': function(aValue) {
this._scrambledStatus = aValue;
},
//-------------------------------------------------------------------------
'handleTypeChange': function() {
//MochiKit.Logging.logDebug(">>> handling type change - " + this.recordField().type());
this.synchronizeComponentValues();
this.update();
},
//-------------------------------------------------------------------------
'addrUrl': function() {
var result;
result = "http://maps.google.com/maps?q=" + this.value().split(' ').join('+');
return result;
},
//-------------------------------------------------------------------------
'updateViewMode': function() {
var scarmbledStatus;
scrambledStatus = this.scrambledStatus() || 'SCRAMBLED';
this.element().update("");
if (this.recordField().hidden() == false) {
switch(this.recordField().type()) {
case 'TXT':
case 'PWD':
Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', html:this.value()});
break;
case 'URL':
var urlLocation;
urlLocation = Clipperz.Base.sanitizeString(this.value());
if (! (/^(https?|ftp|svn):\/\//.test(urlLocation))) {
urlLocation = 'http://' + urlLocation;
}
Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'a', href:urlLocation, html:this.value(), target:'_blank'});
break;
case 'DATE':
Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', html:this.value()});
break;
case 'ADDR':
Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'a', href:this.addrUrl(), html:this.value(), target:'_blank'});
break;
}
} else {
var tableElement;
var tdElement;
var inputElement;
var passwordElementConfiguration;
if (scrambledStatus == 'SCRAMBLED') {
var scrambledInputElement;
if ((Clipperz_IEisBroken === true) && (Clipperz.PM.Proxy.defaultProxy.isReadOnly())) {
- scrambledInputElement = {tag:'input', type:'password', value:"this.value()"};
+ scrambledInputElement = {tag:'input', type:'password', value:"this.value()", autocomplete:"off"};
} else {
- scrambledInputElement = {tag:'input', type:'text', cls:'scrambledField', title:Clipperz.PM.Strings['recordDetailPasswordFieldTooltipLabel'], value:"this.value()"};
+ scrambledInputElement = {tag:'input', type:'text', cls:'scrambledField', title:Clipperz.PM.Strings['recordDetailPasswordFieldTooltipLabel'], value:"this.value()", autocomplete:"off"};
}
passwordElementConfiguration =
{tag:'table', border:'0', cellspacing:'2', cellpadding:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', valign:'top', children:[
scrambledInputElement,
{tag:'a', cls:'scrambleLink', id:this.getId('scrambleLink'), href:'#', htmlString:Clipperz.PM.Strings['recordDetailPasswordFieldUnscrambleLabel']}
]},
{tag:'td', valign:'top', children:[
{tag:'span', cls:'scrambledFieldLabel', htmlString:Clipperz.PM.Strings['recordDetailPasswordFieldHelpLabel']}
]}
]}
]}
]};
} else {
passwordElementConfiguration =
{tag:'div', children:[
- {tag:'input', type:'text', cls:'unscrambledField', value:"this.value()"},
+ {tag:'input', type:'text', cls:'unscrambledField', value:"this.value()", autocomplete:"off"},
{tag:'a', cls:'scrambleLink', id:this.getId('scrambleLink'), href:'#', htmlString:Clipperz.PM.Strings['recordDetailPasswordFieldScrambleLabel']}
]};
}
tableElement = Clipperz.YUI.DomHelper.append(this.element().dom, passwordElementConfiguration, true);
inputElement = tableElement.getChildrenByTagName('input')[0];
inputElement.dom.value = this.value();
inputElement.wrap({tag:'div', cls:'passwordBackground'}).setStyle('background-position', "0px -" + Math.min(128, Clipperz.PM.Crypto.passwordEntropy(this.value())) + "px");
MochiKit.Signal.connect(inputElement.dom, 'onfocus', this, 'selectHiddenFieldOnFocus');
MochiKit.Signal.connect(this.getDom('scrambleLink'), 'onclick', this, 'toggleScramble');
}
},
//-------------------------------------------------------------------------
'updateEditMode': function() {
var inputElement;
var scarmbledStatus;
scrambledStatus = this.scrambledStatus() || 'SCRAMBLED';
this.element().update("");
switch(this.recordField().type()) {
case 'TXT':
case 'URL':
case 'ADDR':
- inputElement = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'input', type:'text', value:"this.value()"}, true);
+ inputElement = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'input', type:'text', value:"this.value()", autocomplete:"off"}, true);
inputElement.dom.value = this.value();
break;
case 'PWD':
Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', width:'100%', cellpadding:'0', cellspacing:'0', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', valign:'top', children:[
- {tag:'input', type:((scrambledStatus == 'SCRAMBLED') ? 'password' : 'text'), id:this.getId('passwordInputElement'), value:"this.value()"},
+ {tag:'input', type:((scrambledStatus == 'SCRAMBLED') ? 'password' : 'text'), id:this.getId('passwordInputElement'), value:"this.value()", autocomplete:"off"},
{tag:'a', cls:'scrambleLink', id:this.getId('scrambleLink'), href:'#', html:(scrambledStatus == 'SCRAMBLED' ? Clipperz.PM.Strings['recordDetailPasswordFieldUnscrambleLabel'] : Clipperz.PM.Strings['recordDetailPasswordFieldScrambleLabel'])}
]},
{tag:'td', valign:'top', children:[
{tag:'div', id:this.getId('passwordGenerator'), cls:'Clipperz_PasswordGenerator_button', html:'&nbsp;'}
]}
]}
]}
]})
inputElement = this.getElement('passwordInputElement');
inputElement.dom.value = this.value();
new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('passwordInputElement'));
new Clipperz.PM.Components.PasswordGenerator(this.getElement('passwordGenerator'), this);
MochiKit.Signal.connect(this.getDom('scrambleLink'), 'onclick', this, 'toggleScramble');
break;
// case 'NOTE':
// inputElement = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'textarea', rows:'5', html:this.value()}, true);
// break
case 'DATE':
- inputElement = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'input', type:'text', value:"this.value()"}, true);
+ inputElement = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'input', type:'text', value:"this.value()", autocomplete:"off"}, true);
inputElement.dom.value = this.value();
break;
}
this.setInputElement(inputElement);
},
//-------------------------------------------------------------------------
'synchronizeComponentValues': function() {
//MochiKit.Logging.logDebug(">>> FieldValueComponent.synchronizeComponentValues");
if (this.inputElement() != null) {
var value;
switch(this.recordField().type()) {
case 'TXT':
case 'URL':
case 'ADDR':
case 'PWD':
case 'DATE':
value = this.inputElement().dom.value;
break;
}
this.setValue(value);
}
//MochiKit.Logging.logDebug("<<< FieldValueComponent.synchronizeComponentValues");
},
//-------------------------------------------------------------------------
'selectHiddenFieldOnFocus': function(anEvent) {
anEvent.src().select();
},
//-------------------------------------------------------------------------
'toggleScramble': function(anEvent) {
this.synchronizeComponentValues();
if (this.scrambledStatus() == 'SCRAMBLED') {
this.setScrambledStatus('UNSCRAMBLED');
} else {
this.setScrambledStatus('SCRAMBLED');
};
this.update();
},
//-------------------------------------------------------------------------
__syntaxFix__: "syntax fix"
});