summaryrefslogtreecommitdiff
path: root/frontend/beta/js/Clipperz/PM/Components/RecordDetail/MainComponent.js
Side-by-side diff
Diffstat (limited to 'frontend/beta/js/Clipperz/PM/Components/RecordDetail/MainComponent.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/MainComponent.js758
1 files changed, 758 insertions, 0 deletions
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/MainComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/MainComponent.js
new file mode 100644
index 0000000..53bf9c5
--- a/dev/null
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/MainComponent.js
@@ -0,0 +1,758 @@
+/*
+
+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.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
+
+//#############################################################################
+
+Clipperz.PM.Components.RecordDetail.MainComponent = function(anElement, args) {
+ args = args || {};
+
+ Clipperz.PM.Components.RecordDetail.MainComponent.superclass.constructor.call(this, anElement, args);
+
+// this._element = args.element;
+ this._user = args.user;
+ this._editMode = args.editMode || 'VIEW'; // [ 'VIEW' | 'EDIT' ]
+ this._mainPanel = args.mainPanel;
+
+ this._record = null;
+ this._editComponents = [];
+ this._addFieldButton = null;
+
+ this._enableSaveButton = true;
+ this._shouldShowLoginInfo = (Clipperz.PM.Proxy.defaultProxy.isReadOnly() ? false : true);
+
+// this._mainLayoutManager = null;
+// this._layoutRegion = null;
+
+ Clipperz.NotificationCenter.register(null, 'loadingRecordData', this, 'render');
+ Clipperz.NotificationCenter.register(null, 'decryptingRecordData', this, 'render');
+ Clipperz.NotificationCenter.register(null, 'loadingRecordVersionData', this, 'render');
+ Clipperz.NotificationCenter.register(null, 'decryptingRecordVersionData', this, 'render');
+ Clipperz.NotificationCenter.register(null, 'setupDone', this, 'render');
+ Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'render');
+
+ this.render();
+
+ return this;
+}
+
+//=============================================================================
+
+YAHOO.extendX(Clipperz.PM.Components.RecordDetail.MainComponent, Clipperz.PM.Components.BaseComponent, {
+
+ 'toString': function() {
+ return "Clipperz.PM.Components.RecordDetail.MainComponent component";
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'editMode': function() {
+ return this._editMode;
+ },
+
+ 'setEditMode': function(aValue, aButtonElement, shouldSkipComponentSynchronization) {
+//MochiKit.Logging.logDebug(">>> MainComponent.setEditingMode");
+ this.scrollToTop();
+
+ if (aValue == 'VIEW') {
+ if (shouldSkipComponentSynchronization == true) {
+ this.exitModalView();
+ } else {
+ this.synchronizeComponentValues();
+ if (this.record().hasPendingChanges()) {
+ if (this.record().isBrandNew()) {
+ this.record().removeEmptyFields();
+ }
+ this.saveCurrentRecordChanges(aButtonElement);
+ } else {
+ if (this.record().isBrandNew()) {
+ this.record().user().removeRecord(this.record());
+ }
+ this.exitModalView();
+ }
+ }
+ } else if (aValue == 'EDIT') {
+ this.enterModalView();
+ } else {
+ // ????
+ }
+
+ this._editMode = aValue;
+ this.render();
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'user': function() {
+ return this._user;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'mainPanel': function() {
+ return this._mainPanel;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'render': function() {
+//MochiKit.Logging.logDebug(">>> RecordDetail.MainComponent.render");
+ this.setEnableSaveButton(true);
+ this.element().update("");
+
+ if (this.record() == null) {
+ if (MochiKit.Base.keys(this.user().records()).length == 0) {
+ this.renderWithNoRecordAtAll();
+ } else {
+ this.renderWithNoSelectedRecord();
+ }
+ } else {
+ this.renderWithSelectedRecord();
+ }
+//MochiKit.Logging.logDebug("<<< RecordDetail.MainComponent.render");
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'renderWithNoRecordAtAll': function() {
+//MochiKit.Logging.logDebug(">>> RecordDetail.MainComponent.renderWithNoRecordAtAll");
+ Clipperz.YUI.DomHelper.append(this.element().dom,
+ {tag:'form', cls:'noRecordAtAllFORM', children:[
+ {tag:'div', cls:'recordTitleBlock', children:[
+ {tag:'h2', id:'recordTitle', htmlString:Clipperz.PM.Strings['recordDetailNoRecordAtAllTitle']}
+ ]},
+ {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
+ {tag:'tbody', children:[
+ {tag:'tr', children:[
+ {tag:'td', colspan:'5', children:[
+ {tag:'div', cls:'recordDetailDescriptionBox', htmlString:Clipperz.PM.Strings['recordDetailNoRecordAtAllDescription']}
+ ]}
+ ]}
+ ]}
+ ]}
+ ]}
+ );
+//MochiKit.Logging.logDebug("<<< RecordDetail.MainComponent.renderWithNoRecordAtAll");
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'renderWithNoSelectedRecord': function() {
+//MochiKit.Logging.logDebug(">>> RecordDetail.MainComponent.renderWithNoSelectedRecord");
+ Clipperz.YUI.DomHelper.append(this.element().dom,
+ {tag:'form', cls:'noRecordSelectedFORM', children:[
+ {tag:'div', cls:'recordTitleBlock', children:[
+ {tag:'h2', id:'recordTitle', htmlString:Clipperz.PM.Strings['recordDetailNoRecordSelectedTitle']}
+ ]},
+ {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
+ {tag:'tbody', children:[
+ {tag:'tr', children:[
+ {tag:'td', colspan:'5', children:[
+ {tag:'div', cls:'recordDetailDescriptionBox', htmlString:Clipperz.PM.Strings['recordDetailNoRecordSelectedDescription']}
+ ]}
+ ]},
+ {tag:'tr', colspan:'5', children:[
+ {tag:'td', colspan:'5', children:this.loginInfo()}
+ ]}
+ ]}
+ ]}
+ ]}
+ );
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithNoSelectedRecord - 1");
+
+ if (MochiKit.DOM.getElement('fullLoginHistoryLink') != null) {
+ MochiKit.Signal.connect('fullLoginHistoryLink', 'onclick', this, 'showLoginHistoryPanel');
+ }
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithNoSelectedRecord - 2");
+
+ if (MochiKit.DOM.getElement('offlineCopyDownloadWarningLink') != null) {
+ MochiKit.Signal.connect('offlineCopyDownloadWarningLink', 'onclick', this, 'showDownloadOfflineCopyPanel');
+ }
+//MochiKit.Logging.logDebug("<<< RecordDetail.MainComponent.renderWithNoSelectedRecord");
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'renderWithSelectedRecord': function() {
+//MochiKit.Logging.logDebug(">>> RecordDetail.MainComponent.renderWithSelectedRecord");
+ if (this.record().shouldLoadData() === true) {
+// this.renderWithSelectedRecordLoading();
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecord - 1.1");
+ this.renderWhileProcessingWithMessage(Clipperz.PM.Strings['recordDetailLoadingRecordMessage']);
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecord - 1.2");
+ } else if (this.record().shouldDecryptData() === true) {
+// this.renderWithSelectedRecordDecrypting();
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecord - 2.1");
+ this.renderWhileProcessingWithMessage(Clipperz.PM.Strings['recordDetailDecryptingRecordMessage']);
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecord - 2.2");
+ } else if (this.record().currentVersion().shouldLoadData() === true) {
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecord - 3.1");
+ this.renderWhileProcessingWithMessage(Clipperz.PM.Strings['recordDetailLoadingRecordVersionMessage']);
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecord - 3.2");
+ } else if (this.record().currentVersion().shouldDecryptData() === true) {
+// this.renderWithSelectedRecordCurrentVersionDecrypting();
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecord - 4.1");
+ this.renderWhileProcessingWithMessage(Clipperz.PM.Strings['recordDetailDecryptingRecordVersionMessage']);
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecord - 4.2");
+ } else {
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecord - 5.1");
+ this.renderWithSelectedRecordData();
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecord - 5.2");
+ }
+//MochiKit.Logging.logDebug("<<< RecordDetail.MainComponent.renderWithSelectedRecord");
+ },
+
+ //.........................................................................
+
+ 'renderWhileProcessingWithMessage': function(aMessage) {
+//MochiKit.Logging.logDebug(">>> RecordDetail.MainComponent.renderWhileProcessingWithMessage");
+ Clipperz.YUI.DomHelper.append(this.element().dom,
+ {tag:'form', cls:'processingRecordFORM', children:[
+ {tag:'div', cls:'recordTitleBlock', children:[
+ {tag:'h2', id:'recordTitle', html:this.record().label()}
+ ]},
+ {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
+ {tag:'tbody', children:[
+ {tag:'tr', cls:'recordTR', children:[
+ {tag:'td', colspan:'5', children:[
+ {tag:'div', cls:'recordDetailDescriptionBox', children:[
+ {tag:'h5', cls:'recordLoadingMessage', html:aMessage}
+ ]}
+ ]}
+ ]}
+ ]}
+ ]}
+ ]}
+ );
+//MochiKit.Logging.logDebug("<<< RecordDetail.MainComponent.renderWhileProcessingWithMessage");
+ },
+
+ //.........................................................................
+/*
+ 'renderWithSelectedRecordLoading': function() {
+ Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', cls:'', style:'border:1px solid red; padding: 20px;', children:[
+ {tag:'div', cls:'Clipprez_RecordDetailTitle', children:[
+ {tag:'h3', html:this.record().label()},
+ {tag:'h3', html:"loading"}
+ ]}
+ ]});
+ },
+
+ //.........................................................................
+
+ 'renderWithSelectedRecordDecrypting': function() {
+ Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', cls:'', style:'border:1px solid red; padding: 20px;', children:[
+ {tag:'div', cls:'Clipprez_RecordDetailTitle', children:[
+ {tag:'h3', html:this.record().label()},
+ {tag:'h3', html:"decrypting ... "}
+ ]}
+ ]});
+ },
+
+ //.........................................................................
+
+ 'renderWithSelectedRecordCurrentVersionDecrypting': function() {
+ Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', cls:'', style:'border:1px solid red; padding: 20px;', children:[
+ {tag:'div', cls:'Clipprez_RecordDetailTitle', children:[
+ {tag:'h3', html:this.record().label()},
+ {tag:'h3', html:"decrypting version ... "}
+ ]}
+ ]});
+ },
+*/
+ //-------------------------------------------------------------------------
+
+ 'renderWithErrorMessage': function(anErrorMessage) {
+//MochiKit.Logging.logDebug(">>> RecordDetail.MainComponent.renderWithErrorMessage");
+ this.element().update("");
+
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithErrorMessage - 1");
+ Clipperz.YUI.DomHelper.append(this.element().dom,
+ {tag:'form', cls:'errorMessageFORM', children:[
+ {tag:'div', cls:'recordTitleBlock', children:[
+ {tag:'h2', id:'recordTitle', html:this.record().label()}
+ ]},
+ {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
+ {tag:'tbody', children:[
+ {tag:'tr', cls:'recordTR', children:[
+ {tag:'td', colspan:'5', children:[
+ {tag:'div', cls:'recordDetailDescriptionBox loadingError', children:[
+ {tag:'h5', htmlString:Clipperz.PM.Strings['recordDetailLoadingErrorMessageTitle']},
+ {tag:'p', html:anErrorMessage.message}
+ ]}
+ ]}
+ ]}
+ ]}
+ ]}
+ ]}
+ );
+//MochiKit.Logging.logDebug("<<< RecordDetail.MainComponent.renderWithErrorMessage");
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'renderWithSelectedRecordData': function() {
+ var columns;
+
+ this.resetEditComponents();
+
+ columns = [
+ {tag:'td', width:'25', html:'&#160'},
+ {tag:'td', width:'25%', htmlString:Clipperz.PM.Strings['recordDetailLabelFieldColumnLabel']},
+ {tag:'td', width:'3', html:'&#160'},
+ {tag:'td', /*width:'80%',*/ htmlString:Clipperz.PM.Strings['recordDetailDataFieldColumnLabel']}
+ ];
+
+ if (this.editMode() == 'EDIT') {
+ columns.push({tag:'td', /*width:'55',*/ htmlString:Clipperz.PM.Strings['recordDetailTypeFieldColumnLabel']})
+ }
+
+//MochiKit.Logging.logDebug(">>> RecordDetail.MainComponent.renderWithSelectedRecordData");
+ Clipperz.YUI.DomHelper.append(this.element().dom,
+ {tag:'form', cls:'recordDataFORM', children:[
+ {tag:'div', cls:'recordTitleBlock', id:this.getId('title')},
+ {tag:'div', id:'recordDetailDataBox', cls:'recordDetailDataBox', children:[
+
+{tag:'table', width:'100%', border:'0', cellspacing:'0', cellpadding:'0', children:[
+ {tag:'tbody', children:[
+ {tag:'tr', children:[
+ {tag:'td', width:'5', html:"&nbsp;"},
+ {tag:'td', children:[
+
+ {tag:'table', cls:'recordDetailDataBoxTABLE', border:'0', cellspacing:'0', cellpadding:'0', children:[
+ {tag:'tbody', id:this.getId('tbody'), children:[
+ {tag:'tr', /*cls:'recordNoteTR',*/ children:[
+ {tag:'td', colspan:'5', id:this.getId('notes')}
+ ]},
+ {tag:'tr', cls:'recordFieldsTR', children:columns /* [
+ {tag:'td', width:'25', html:'&#160'},
+ {tag:'td', width:'25%', htmlString:Clipperz.PM.Strings['recordDetailLabelFieldColumnLabel']},
+ {tag:'td', width:'3', html:'&#160'},
+ {tag:'td', / *width:'80%',* / htmlString:Clipperz.PM.Strings['recordDetailDataFieldColumnLabel']},
+ {tag:'td', / *width:'55',* / htmlString:Clipperz.PM.Strings['recordDetailTypeFieldColumnLabel']}
+ ] */ }
+ ]}
+ ]},
+ {tag:'div', cls:'addFieldButton', id:this.getId('addField'), children:[
+ {tag:'div', id:this.getId('addFieldButton')}
+ ]},
+ {tag:'div', id:this.getId('directLogins')},
+ {tag:'div', id:this.getId('footer')}
+
+ ]}
+ ]}
+ ]}
+]}
+
+ ]}
+ ]}
+ );
+
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecordData - 1");
+
+ new Clipperz.PM.Components.RecordDetail.TitleComponent(this.getElement('title'), {mainComponent:this});
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecordData - 2");
+ new Clipperz.PM.Components.RecordDetail.NotesComponent(this.getElement('notes'), {mainComponent:this});
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecordData - 3");
+ new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent(this.getElement('directLogins'), {mainComponent:this});
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecordData - 4");
+ new Clipperz.PM.Components.RecordDetail.HeaderComponent(this.getElement('footer'), {mainComponent:this});
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecordData - 5");
+ MochiKit.Iter.forEach(MochiKit.Base.values(this.record().currentVersion().fields()), this.appendFieldComponent, this);
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecordData - 6");
+ this.setAddFieldButton(new YAHOO.ext.Button(this.getDom('addFieldButton'), {text:Clipperz.PM.Strings['recordDetailAddFieldButtonLabel'], handler:this.addNewRecordField, scope:this}));
+//MochiKit.Logging.logDebug("--- RecordDetail.MainComponent.renderWithSelectedRecordData - 7");
+
+ this.update();
+
+//MochiKit.Logging.logDebug("<<< RecordDetail.MainComponent.renderWithSelectedRecordData");
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'editComponents': function() {
+ return this._editComponents;
+ },
+
+ 'resetEditComponents': function() {
+ this._editComponents = [];
+ },
+
+ 'addEditComponent': function(aValue) {
+ this.editComponents().push(aValue);
+ },
+
+ 'removeEditComponent': function(aValue) {
+ Clipperz.Base.removeFromArray(this.editComponents(), aValue);
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'record': function() {
+ return this._record;
+ },
+
+ 'setRecord': function(aValue) {
+ var result;
+
+//MochiKit.Logging.logDebug(">>> MainComponent.setRecord")
+ if (this._record != aValue) {
+ var deferredResult;
+
+ deferredResult = new MochiKit.Async.Deferred();
+
+ if ((this._record != null) && (this.editMode() == 'EDIT')) {
+ this.synchronizeComponentValues();
+ deferredResult.addCallback(MochiKit.Base.method(this._record, 'saveChanges'));
+ }
+
+ this._record = aValue;
+
+ if (aValue != null) {
+ this.setShouldShowLoginInfo(false);
+ deferredResult.addCallback(MochiKit.Base.method(this._record, 'deferredData'));
+ }
+ deferredResult.addCallbacks(
+ MochiKit.Base.method(this, 'render'),
+ MochiKit.Base.method(this, 'renderWithErrorMessage')
+ );
+ deferredResult.callback();
+ this.scrollToTop();
+
+ result = deferredResult;
+ } else {
+ result = MochiKit.Async.success();
+ }
+//MochiKit.Logging.logDebug("<<< MainComponent.setRecord")
+
+ return result;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'saveCurrentRecordChanges': function(aButtonElement) {
+ var deferred;
+ var currentNumberOfRecords;
+
+ deferred = new MochiKit.Async.Deferred();
+ deferred.addCallback(MochiKit.Base.method(Clipperz.PM.Components.MessageBox(), 'deferredShow'),
+ {
+ title:Clipperz.PM.Strings['recordDetailSavingChangesMessagePanelInitialTitle'],
+ text:Clipperz.PM.Strings['recordDetailSavingChangesMessagePanelInitialText'],
+ width:240,
+ showProgressBar:true,
+ showCloseButton:false,
+ steps:6
+ },
+ aButtonElement.dom
+ );
+ deferred.addCallback(MochiKit.Base.method(this, 'exitModalView'));
+ deferred.addCallback(MochiKit.Base.method(this.record(), 'saveChanges'));
+ deferred.addCallback(Clipperz.NotificationCenter.deferredNotification, this.record(), 'recordUpdated');
+ deferred.addCallback(function(res) {
+ Clipperz.PM.Components.MessageBox().hide(YAHOO.ext.Element.get('main'));
+ return res;
+ });
+
+ currentNumberOfRecords = MochiKit.Base.keys(this.user().records()).length;
+ if ((this.record().isBrandNew()) && (this.user().preferences().shouldShowDonationPanel()) && (currentNumberOfRecords >= 5)) {
+ deferred.addCallback(Clipperz.PM.showDonationSplashScreen, this.user(), 'recordListAddRecordButton');
+ }
+
+ deferred.callback();
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'update': function(anEvent) {
+ if (this.editMode() == 'EDIT') {
+ this.updateEditMode();
+ } else if (this.editMode() == 'VIEW') {
+ this.updateViewMode();
+ }
+
+ MochiKit.Iter.forEach(this.editComponents(), MochiKit.Base.methodcaller('update'));
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'updateViewMode': function() {
+ this.addFieldButton().hide();
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'updateEditMode': function() {
+ this.addFieldButton().show();
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'appendFieldComponent': function(aRecordField) {
+//MochiKit.Logging.logDebug(">>> MainComponent.appendFieldComponent");
+ new Clipperz.PM.Components.RecordDetail.FieldComponent(
+ Clipperz.YUI.DomHelper.append(this.getDom('tbody'), {tag:'tr'}, true),
+ {recordField:aRecordField, mainComponent:this}
+ );
+//MochiKit.Logging.logDebug("<<< MainComponent.appendFieldComponent");
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'removeField': function(aFieldComponent) {
+ var recordField;
+
+//MochiKit.Logging.logDebug(">>> MainComponent.removeField")
+ recordField = aFieldComponent.recordField();
+ this.removeEditComponent(aFieldComponent);
+ aFieldComponent.destroy();
+ this.record().removeField(recordField);
+
+ Clipperz.NotificationCenter.notify(this.record(), 'removedField');
+//MochiKit.Logging.logDebug("<<< MainComponent.removeField")
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'synchronizeComponentValues': function() {
+ MochiKit.Iter.forEach(this.editComponents(), MochiKit.Base.methodcaller('synchronizeComponentValues'));
+ },
+
+ //=========================================================================
+
+ 'addFieldButton': function() {
+ return this._addFieldButton;
+ },
+
+ 'setAddFieldButton': function(aValue) {
+ this._addFieldButton = aValue;
+ },
+
+ 'addNewRecordField': function() {
+ var newField;
+
+ newField = this.record().addNewField();
+ this.appendFieldComponent(newField);
+
+ Clipperz.NotificationCenter.notify(this.record(), 'addNewRecordField');
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'enterModalView': function() {
+/*
+ if (this.user().preferences().useSafeEditMode()) {
+ var headerMaskElement;
+ var verticalMaskElement;
+
+ headerMaskElement = YAHOO.ext.Element.get('recordDetailEditModeHeaderMask');
+ headerMaskElement.show().mask();
+
+ verticalMaskElement = YAHOO.ext.Element.get('recordDetailEditModeVerticalMask');
+ verticalMaskElement.show().mask();
+ }
+*/
+ this.mainPanel().enterModalView();
+ },
+
+ //-------------------------------------------------------------------------
+
+ '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();
+ }
+*/
+ this.mainPanel().exitModalView();
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'enableSaveButton': function() {
+ return this._enableSaveButton;
+ },
+
+ 'setEnableSaveButton': function(aValue) {
+ this._enableSaveButton = aValue;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'scrollToTop': function() {
+ YAHOO.ext.Element.get('recordTitleTopBlock').scrollIntoView(document.body);
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loginInfo': function() {
+ var result;
+
+ if (this.shouldShowLoginInfo() == true) {
+// && (typeof(this.user().loginInfo()['latest']) != 'undefined')) {
+ var imageExtension;
+ var currentConnectionText;
+ var currentIP;
+ var contentChildren;
+
+ result = [];
+ contentChildren = [];
+
+ imageExtension = (Clipperz_IEisBroken == true) ? 'gif': 'png';
+
+ contentChildren.push({tag:'h4', valign:'top', htmlString:Clipperz.PM.Strings['WELCOME_BACK']});
+
+ currentIP = (this.user().loginInfo()['current']['ip'].match(/^\d{1,3}(.\d{1,3}){3}$/)) ? this.user().loginInfo()['current']['ip'] : Clipperz.PM.Strings['unknown_ip'];
+ currentConnectionText = Clipperz.PM.Strings['currentConnectionText'];
+ currentConnectionText = currentConnectionText.replace(/__ip__/, "<b>" + Clipperz.Base.sanitizeString(this.user().loginInfo()['current']['ip']) + "</b>");
+ currentConnectionText = currentConnectionText.replace(/__country__/, "<b>" + Clipperz.PM.Strings['countries'][Clipperz.Base.sanitizeString(this.user().loginInfo()['current']['country'])] + "</b>");
+ currentConnectionText = currentConnectionText.replace(/__browser__/, "<b>" + Clipperz.PM.Strings['browsers'][Clipperz.Base.sanitizeString(this.user().loginInfo()['current']['browser'])] + "</b>");
+ currentConnectionText = currentConnectionText.replace(/__operatingSystem__/, "<b>" + Clipperz.PM.Strings['operatingSystems'][Clipperz.Base.sanitizeString(this.user().loginInfo()['current']['operatingSystem'])] + "</b>");
+
+ contentChildren.push(
+ {tag:'div', cls:'loginInfo_now', children:[
+ {tag:'div', cls:'text', htmlString:currentConnectionText},
+ {tag:'div', cls:'icons', children:[
+ {tag:'img', title:Clipperz.PM.Strings['countries'][Clipperz.Base.sanitizeString(this.user().loginInfo()['current']['country'])], cls:'flag', src:Clipperz.PM.Strings['icons_baseUrl'] + "/flags/" + Clipperz.Base.sanitizeString(this.user().loginInfo()['current']['country']).toLowerCase() + "." + imageExtension, width:'32', height:'32'},
+ {tag:'img', title:Clipperz.PM.Strings['browsers'][Clipperz.Base.sanitizeString(this.user().loginInfo()['current']['browser'])], src:Clipperz.PM.Strings['icons_baseUrl'] + "/browsers/" + Clipperz.Base.sanitizeString(this.user().loginInfo()['current']['browser']).toLowerCase() + "." + imageExtension, width:'32', height:'32'},
+ {tag:'img', title:Clipperz.PM.Strings['operatingSystems'][Clipperz.Base.sanitizeString(this.user().loginInfo()['current']['operatingSystem'])], src:Clipperz.PM.Strings['icons_baseUrl'] + "/operatingSystems/" + Clipperz.Base.sanitizeString(this.user().loginInfo()['current']['operatingSystem']).toLowerCase() + "." + imageExtension, width:'32', height:'32'}
+ ]}
+ ]}
+ );
+
+ if (typeof(this.user().loginInfo()['latest']) != 'undefined') {
+ var latestLoginDate;
+ var elapsedTimeDescription;
+ var latestIP;
+ var latestConnectionText;
+
+ latestLoginDate = Clipperz.PM.Date.parseDateWithUTCFormat(Clipperz.Base.sanitizeString(this.user().loginInfo()['latest']['date']));
+
+ elapsedTimeDescription = Clipperz.PM.Date.getElapsedTimeDescription(latestLoginDate);
+ latestIP = (this.user().loginInfo()['latest']['ip'].match(/^\d{1,3}(.\d{1,3}){3}$/)) ? this.user().loginInfo()['latest']['ip'] : Clipperz.PM.Strings['unknown_ip'];
+
+ latestConnectionText = Clipperz.PM.Strings['latestConnectionText'];
+ latestConnectionText = latestConnectionText.replace(/__elapsedTimeDescription__/, "<b>" + elapsedTimeDescription + "</b>");
+ latestConnectionText = latestConnectionText.replace(/__time__/, Clipperz.PM.Date.formatDateWithTemplate(latestLoginDate, Clipperz.PM.Strings['fullDate_format']));
+ latestConnectionText = latestConnectionText.replace(/__ip__/, "<b>" + Clipperz.Base.sanitizeString(this.user().loginInfo()['latest']['ip']) + "</b>");
+ latestConnectionText = latestConnectionText.replace(/__country__/, "<b>" + Clipperz.PM.Strings['countries'][Clipperz.Base.sanitizeString(this.user().loginInfo()['latest']['country'])] + "</b>");
+ latestConnectionText = latestConnectionText.replace(/__browser__/, "<b>" + Clipperz.PM.Strings['browsers'][Clipperz.Base.sanitizeString(this.user().loginInfo()['latest']['browser'])] + "</b>");
+ latestConnectionText = latestConnectionText.replace(/__operatingSystem__/, "<b>" + Clipperz.PM.Strings['operatingSystems'][Clipperz.Base.sanitizeString(this.user().loginInfo()['latest']['operatingSystem'])] + "</b>");
+
+
+ contentChildren.push(
+ {tag:'div', cls:'loginInfo_latest', children:[
+ {tag:'div', cls:'inner_header', html:'&nbsp;'},
+ {tag:'div', cls:'content', children:[
+ {tag:'div', cls:'text', htmlString:latestConnectionText},
+ {tag:'div', cls:'icons', children:[
+ {tag:'img', title:Clipperz.PM.Strings['countries'][Clipperz.Base.sanitizeString(this.user().loginInfo()['latest']['country'])], cls:'flag', src:Clipperz.PM.Strings['icons_baseUrl'] + "/flags/" + Clipperz.Base.sanitizeString(this.user().loginInfo()['latest']['country']).toLowerCase() + "." + imageExtension, width:'32', height:'32'},
+ {tag:'img', title:Clipperz.PM.Strings['browsers'][Clipperz.Base.sanitizeString(this.user().loginInfo()['latest']['browser'])], src:Clipperz.PM.Strings['icons_baseUrl'] + "/browsers/" + Clipperz.Base.sanitizeString(this.user().loginInfo()['latest']['browser']).toLowerCase() + "." + imageExtension, width:'32', height:'32'},
+ {tag:'img', title:Clipperz.PM.Strings['operatingSystems'][Clipperz.Base.sanitizeString(this.user().loginInfo()['latest']['operatingSystem'])], src:Clipperz.PM.Strings['icons_baseUrl'] + "/operatingSystems/" + Clipperz.Base.sanitizeString(this.user().loginInfo()['latest']['operatingSystem']).toLowerCase() + "." + imageExtension, width:'32', height:'32'}
+ ]}
+ ]},
+ {tag:'div', children:[
+ {tag:'a', href:'#', id:'fullLoginHistoryLink', htmlString:Clipperz.PM.Strings['fullLoginHistoryLinkLabel']}
+ ]},
+ {tag:'div', cls:'inner_footer', html:'&nbsp;'}
+ ]}
+ );
+ }
+
+ contentChildren.push(
+ {tag:'table', id:'shouldDownloadOfflineCopyWarningBox', children:[
+ {tag:'tbody', width:'100%', children:[
+ {tag:'tr', children:[
+ {tag:'td', cls:'offlineCopyDownloadWarningIconTD', valign:'top', align:'center', width:'50', children:(this.user().shouldDownloadOfflineCopy() ? [{tag:'img', src:Clipperz.PM.Strings['icons_baseUrl'] + "/misc/offlineCopyWarning.png" , width:'32', height:'32'}]: [])},
+ {tag:'td', children:[
+ {tag:'div', cls:'offlineCopyDownloadWarning', htmlString:(this.user().shouldDownloadOfflineCopy() ? Clipperz.PM.Strings['offlineCopyDownloadWarning']: Clipperz.PM.Strings['offlineCopyDownloadOk'])}
+ ]}
+ ]}
+ ]}
+ ]}
+ );
+
+
+ result = [{tag:'div', id:'loginInfoWrapper', children:[{tag:'div', id:'loginInfo', children:[
+ {tag:'div', cls:'header', html:'&nbsp;'},
+ {tag:'div', cls:'content', children:contentChildren},
+ {tag:'div', cls:'footer', html:'&nbsp;'}
+ ]}]}];
+
+// this.setShouldShowLoginInfo(false);
+ } else {
+ resut = [];
+ }
+
+ return result;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'shouldShowLoginInfo': function() {
+ return this._shouldShowLoginInfo;
+ },
+
+ 'setShouldShowLoginInfo': function(aValue) {
+ this._shouldShowLoginInfo = aValue;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'showLoginHistoryPanel': function(anEvent) {
+ anEvent.stop();
+
+ Clipperz.NotificationCenter.notify(this, 'selectTab', 'mainTabPanel.accountTab', true);
+ Clipperz.NotificationCenter.notify(this, 'selectTab', 'accountTabPanel.loginHistoryTab', true);
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'showDownloadOfflineCopyPanel': function(anEvent) {
+ anEvent.stop();
+
+ Clipperz.NotificationCenter.notify(this, 'selectTab', 'mainTabPanel.dataTab', true);
+ Clipperz.NotificationCenter.notify(this, 'selectTab', 'dataTabPanel.offlineCopyTab', true);
+ },
+
+ //-------------------------------------------------------------------------
+ __syntaxFix__: "syntax fix"
+});
+