summaryrefslogtreecommitdiff
path: root/frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js
authorGiulio Cesare Solaroli <giulio.cesare@clipperz.com>2011-10-02 23:56:18 (UTC)
committer Giulio Cesare Solaroli <giulio.cesare@clipperz.com>2011-10-02 23:56:18 (UTC)
commitef68436ac04da078ffdcacd7e1f785473a303d45 (patch) (side-by-side diff)
treec403752d66a2c4775f00affd4fa8431b29c5b68c /frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js
parent597ecfbc0249d83e1b856cbd558340c01237a360 (diff)
downloadclipperz-ef68436ac04da078ffdcacd7e1f785473a303d45.zip
clipperz-ef68436ac04da078ffdcacd7e1f785473a303d45.tar.gz
clipperz-ef68436ac04da078ffdcacd7e1f785473a303d45.tar.bz2
First version of the newly restructured repository
Diffstat (limited to 'frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js305
1 files changed, 305 insertions, 0 deletions
diff --git a/frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js b/frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js
new file mode 100644
index 0000000..abd2621
--- a/dev/null
+++ b/frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js
@@ -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"
+
+});
+