From ef68436ac04da078ffdcacd7e1f785473a303d45 Mon Sep 17 00:00:00 2001 From: Giulio Cesare Solaroli Date: Sun, 02 Oct 2011 23:56:18 +0000 Subject: First version of the newly restructured repository --- (limited to 'frontend/beta/js/Clipperz/PM/Components/RecordDetail/CreationWizard.js') diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/CreationWizard.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/CreationWizard.js new file mode 100644 index 0000000..a92285f --- a/dev/null +++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/CreationWizard.js @@ -0,0 +1,317 @@ +/* + +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 + . + +*/ + +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" +}); + -- cgit v0.9.0.2