password-manager-mirror/frontend/beta/js/Clipperz/PM/Components/RecordDetail/CreationWizard.js

313 lines
12 KiB
JavaScript

/*
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.CreationWizard = function(anElement, args) {
args = args || {};
Clipperz.PM.Components.RecordDetail.CreationWizard.superclass.constructor.call(this, anElement, args);
this._mainComponent = args.mainComponent;
this._previouslySelectedRecord = args.previouslySelectedRecord;
//MochiKit.Logging.logDebug("--- new CreationWizard - previouslySelectedRecord: " + args.previouslySelectedRecord);
this._createButton_header = null;
this._createButton_footer = null;
this._cancelButton_header = null;
this._cancelButton_footer = null;
this.render();
return this;
}
//=============================================================================
YAHOO.extendX(Clipperz.PM.Components.RecordDetail.CreationWizard, Clipperz.PM.Components.BaseComponent, {
'toString': function() {
return "Clipperz.PM.Components.RecordDetail.CreationWizard component";
},
//-------------------------------------------------------------------------
'previouslySelectedRecord': function() {
return this._previouslySelectedRecord;
},
//-------------------------------------------------------------------------
'render': function() {
var templateListElement;
var templates;
this.element().update("");
Clipperz.YUI.DomHelper.append(this.element().dom,
{tag:'form', cls:'recordDataFORM', id:this.getId('form'), children:[
{tag:'div', id:'recordDetailDataBox', cls:'recordDetailDataBox', children:[
{tag:'div', id:this.getId('wizardBox'), cls:'recordCreationWizard', children:[
{tag:'div', id:this.getId('recordCreationWizardTitleBox'), cls:'recordCreationWizardTitleBox', htmlString:Clipperz.PM.Strings['newRecordWizardTitleBox']},
{tag:'ul', id:this.getId('templateList'), cls:'radioList'}
]}
]}
]}
);
Clipperz.YUI.DomHelper.append(this.getDom('recordCreationWizardTitleBox'), {tag:'div', cls:'newRecordWizardHeader', children:[
{tag:'table', width:'100%', cellpadding:'5', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', width:'49%', align:'right', children:[
{tag:'div', id:this.getId('cancelButton_header')}
]},
{tag:'td', width:'10', html:' '},
{tag:'td', width:'49%', align:'left', children:[
{tag:'div', id:this.getId('createButton_header')}
]}
]}
]}
]}
]});
templateListElement = this.getElement('templateList');
templates = Clipperz.PM.Strings['recordTemplates'];
MochiKit.Iter.forEach(MochiKit.Base.keys(templates), MochiKit.Base.bind(function(aTemplateKey) {
Clipperz.YUI.DomHelper.append(templateListElement.dom, {tag:'li', children:[
{tag:'table', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', valign:'top', children:[
{tag:'input', id:this.getId(aTemplateKey+"_radio"), type:'radio', name:'recordTemplate', value:"aTemplateKey"}
]},
{tag:'td', valign:'top', children:[
{tag:'h4', id:this.getId(aTemplateKey+"_title"), html:templates[aTemplateKey]['title']},
{tag:'div', cls:'templateDescription', htmlString:templates[aTemplateKey]['description']}
]}
]}
]}
]}
]});
this.getElement(aTemplateKey+"_radio").dom.value = aTemplateKey;
MochiKit.Signal.connect(this.getDom(aTemplateKey+"_title"), 'onclick', MochiKit.Base.partial(function(aRadioButton) {aRadioButton.click();}, this.getDom(aTemplateKey+"_radio")));
}, this));
Clipperz.YUI.DomHelper.append(templateListElement.dom, {tag:'li', children:[
{tag:'table', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', valign:'top', children:[
{tag:'input', type:'radio', name:'recordTemplate', id:this.getId('bookmarkletRadioButton'), value:'BookmarkletConfigurationTemplate'}
]},
{tag:'td', valign:'top', children:[
{tag:'h4', htmlString:Clipperz.PM.Strings['newRecordWizardBookmarkletConfigurationTitle']},
{tag:'div', cls:'templateDescription', htmlString:Clipperz.PM.Strings['newRecordWizardBookmarkletConfigurationDescription']},
{tag:'div', cls:'bookmarkletConfiguration', children:[
// {tag:'span', htmlString:Clipperz.PM.Strings['newRecordWizardBookmarkletConfigurationLabel']},
{tag:'div', htmlString:Clipperz.PM.Strings['recordDetailNewDirectLoginDescription']},
{tag:'textarea', id:this.getId('bookmarkletConfiguration')}
]}
]}
]}
]}
]}
]});
Clipperz.YUI.DomHelper.append(this.getDom('wizardBox'), {tag:'div', cls:'newRecordWizardFooter', children:[
{tag:'table', width:'100%', cellpadding:'5', children:[
{tag:'tbody', children:[
{tag:'tr', children:[
{tag:'td', width:'49%', align:'right', children:[
{tag:'div', id:this.getId('cancelButton_footer')}
]},
{tag:'td', width:'10', html:' '},
{tag:'td', width:'49%', align:'left', children:[
{tag:'div', id:this.getId('createButton_footer')}
]}
]}
]}
]}
]});
this.setCreateButton_header(new YAHOO.ext.Button(this.getDom('createButton_header'), {text:Clipperz.PM.Strings['newRecordWizardCreateButtonLabel'], handler:this.createRecord, scope:this}));
this.setCreateButton_footer(new YAHOO.ext.Button(this.getDom('createButton_footer'), {text:Clipperz.PM.Strings['newRecordWizardCreateButtonLabel'], handler:this.createRecord, scope:this}));
this.setCancelButton_header(new YAHOO.ext.Button(this.getDom('cancelButton_header'), {text:Clipperz.PM.Strings['newRecordWizardCancelButtonLabel'], handler:this.exitWizard, scope:this}));
this.setCancelButton_footer(new YAHOO.ext.Button(this.getDom('cancelButton_footer'), {text:Clipperz.PM.Strings['newRecordWizardCancelButtonLabel'], handler:this.exitWizard, scope:this}));
this.createButton_header().disable();
this.createButton_footer().disable();
MochiKit.Iter.forEach(this.getElement('form').getChildrenByTagName('input'), MochiKit.Base.bind(function(anInput) {
// MochiKit.Signal.connect(anInput.dom, 'onchange', this, 'enableCreateButton');
MochiKit.Signal.connect(anInput.dom, 'onclick', this, 'enableCreateButton'); // for Safari
},this));
MochiKit.Signal.connect(this.getDom('bookmarkletConfiguration'), 'onkeyup', this, 'enableCreateButton');
MochiKit.Signal.connect(this.getDom('bookmarkletConfiguration'), 'onkeydown', this, 'enableCreateButton'); // for Safari
},
//-------------------------------------------------------------------------
'createButton_header': function() {
return this._createButton_header;
},
'setCreateButton_header': function(aValue) {
this._createButton_header = aValue;
},
//.........................................................................
'createButton_footer': function() {
return this._createButton_footer;
},
'setCreateButton_footer': function(aValue) {
this._createButton_footer = aValue;
},
//-------------------------------------------------------------------------
'cancelButton_header': function() {
return this._cancelButton_header;
},
'setCancelButton_header': function(aValue) {
this._cancelButton_header = aValue;
},
//.........................................................................
'cancelButton_footer': function() {
return this._cancelButton_footer;
},
'setCancelButton_footer': function(aValue) {
this._cancelButton_footer = aValue;
},
//-------------------------------------------------------------------------
'enableCreateButton': function(anEvent, skipKeyDownCheck) {
//MochiKit.Logging.logDebug(">>> CreationWizard.enableCreateButton (" + anEvent.type() + ")");
if ((anEvent.type() == "keydown") && (skipKeyDownCheck != true)) {
//MochiKit.Logging.logDebug("--- CreationWizard.enableCreateButton - handling 'keydown' event with a postponed execution of the check");
MochiKit.Async.callLater(0.3, MochiKit.Base.method(this, 'enableCreateButton', anEvent, true));
} else {
var shouldEnableCreateButton;
var isBookmarkletConfigurationEmpty;
//MochiKit.Logging.logDebug("--- CreationWizard.enableCreateButton - common execution");
shouldEnableCreateButton = true;
isBookmarkletConfigurationEmpty = !/[^ \n]/.test(this.getDom('bookmarkletConfiguration').value);
//MochiKit.Logging.logDebug("--- CreationWizard.enableCreateButton - isBookmarkletConfigurationEmpty: " + isBookmarkletConfigurationEmpty);
if ((anEvent.src() == this.getDom('bookmarkletConfiguration')) && !isBookmarkletConfigurationEmpty) {
this.getDom('bookmarkletRadioButton').checked = true;
}
if ((this.getDom('bookmarkletRadioButton').checked) && isBookmarkletConfigurationEmpty) {
shouldEnableCreateButton = false;
}
if (shouldEnableCreateButton) {
//MochiKit.Logging.logDebug("--- CreationWizard.enableCreateButton - enabling button");
this.createButton_header().enable();
this.createButton_footer().enable();
} else {
//MochiKit.Logging.logDebug("--- CreationWizard.enableCreateButton - disabling button");
this.createButton_header().disable();
this.createButton_footer().disable();
}
}
//MochiKit.Logging.logDebug("<<< CreationWizard.enableCreateButton");
},
//-------------------------------------------------------------------------
'createRecord': function() {
var selectedTemplateKey;
var newRecord;
selectedTemplateKey = MochiKit.Base.filter(function(aCheckBoxElement) {
return aCheckBoxElement.dom.checked;
},this.getElement('form').getChildrenByTagName('input'))[0].dom.value;
//MochiKit.Logging.logDebug("--- CreationWizard.createRecord - selectedTemplateKey: " + selectedTemplateKey);
if (selectedTemplateKey == 'BookmarkletConfigurationTemplate') {
var bookmarkletConfiguration;
this.mainComponent().exitModalView();
bookmarkletConfiguration = Clipperz.PM.BookmarkletProcessor.checkBookmarkletConfiguration(this.getDom('bookmarkletConfiguration').value, this.getDom('createButton'), MochiKit.Base.method(this.mainComponent(), 'enterModalView'));
this.mainComponent().enterModalView();
newRecord = Clipperz.PM.BookmarkletProcessor.createRecordFromBookmarkletConfiguration(this.mainComponent().user(), bookmarkletConfiguration);
} else {
var fieldsConfigurations;
newRecord = this.mainComponent().user().addNewRecord();
newRecord.setLabel(Clipperz.PM.Strings['recordTemplates'][selectedTemplateKey]['title']);
fieldsConfigurations = Clipperz.PM.Strings['recordTemplates'][selectedTemplateKey]['fields'];
MochiKit.Iter.forEach(fieldsConfigurations, MochiKit.Base.partial(function(aRecord, aFieldConfiguration) {
var newField;
newField = new Clipperz.PM.DataModel.RecordField({recordVersion:aRecord.currentVersion()});
newField.setLabel(aFieldConfiguration['label']);
newField.setType(aFieldConfiguration['type']);
aRecord.currentVersion().addField(newField);
}, newRecord));
}
this.mainComponent().exitWizard(newRecord, true);
},
//-------------------------------------------------------------------------
'exitWizard': function() {
//MochiKit.Logging.logDebug(">>> CreationWizard.exitWizard - " + this.previouslySelectedRecord());
this.mainComponent().exitWizard(this.previouslySelectedRecord());
//MochiKit.Logging.logDebug("<<< CreationWizard.exitWizard");
},
//-------------------------------------------------------------------------
'mainComponent': function() {
return this._mainComponent;
},
//-------------------------------------------------------------------------
__syntaxFix__: "syntax fix"
});