summaryrefslogtreecommitdiff
path: root/frontend/beta/js/Clipperz
Unidiff
Diffstat (limited to 'frontend/beta/js/Clipperz') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/Base.js22
-rw-r--r--frontend/beta/js/Clipperz/ByteArray.js22
-rw-r--r--frontend/beta/js/Clipperz/CSVProcessor.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/AES.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/Base.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/BigInt.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/BigInt_scoped.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/ECC.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Curve.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Point.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Value.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/PRNG.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/RSA.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/SHA.js22
-rw-r--r--frontend/beta/js/Clipperz/Crypto/SRP.js22
-rw-r--r--frontend/beta/js/Clipperz/DOM.js22
-rw-r--r--frontend/beta/js/Clipperz/Date.js22
-rw-r--r--frontend/beta/js/Clipperz/KeePassExportProcessor.js22
-rw-r--r--frontend/beta/js/Clipperz/NotificationCenter.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/BookmarkletProcessor.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/BaseComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Compact/CompactHeader.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Compact/CompactInterface.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Compact/LoginForm.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportColumns.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportFields.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportHeader.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportNotes.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportTitle.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/CSVImportComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/ClipperzImportComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/ExcelImportComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/GenericImportComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/KeePassImportComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/MainComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/PasswordPlusImportComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Import/RoboFormImportComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/MessageBox.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/OTP/MainComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Panels/AccountPanel.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Panels/BasePanel.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Panels/ContactsPanel.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Panels/DataPanel.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Panels/LoginPanel.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Panels/LogoutPanel.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Panels/MainPanel.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/PasswordEntropyDisplay.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/PasswordGenerator.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Printing/Footer.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Printing/Header.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/Printing/Record.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/AbstractComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/AbstractFieldSubComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/CreationWizard.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginBindingComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginValueComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginsComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldButtonComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldDragHandler.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldLabelComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldTypeComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/HeaderComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/MainComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/NotesComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/TitleComponent.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/TabPanel/TabPanelController.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/TextFormField.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Connection.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Crypto.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/DirectLogin.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/DirectLoginBinding.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/DirectLoginInput.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/DirectLoginReference.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/Header.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/OneTimePassword.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/OneTimePasswordManager.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/Record.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/RecordField.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/RecordVersion.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/Statistics.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/User.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/UserPreferences.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Date.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Main.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Proxy.js22
-rwxr-xr-xfrontend/beta/js/Clipperz/PM/Proxy/Proxy.JSON.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Proxy/Proxy.Offline.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Proxy/Proxy.Test.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/MessagePanelConfigurations.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_de-DE.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_el-GR.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_en-CA.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_en-GB.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_en-US.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_es-ES.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_fr-FR.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_he-IL.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_it-IT.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_ja-JP.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_pt-BR.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_pt-PT.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_ru-RU.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_zh-CN.js22
-rw-r--r--frontend/beta/js/Clipperz/PM/Toll.js22
-rw-r--r--frontend/beta/js/Clipperz/Profile.js22
-rw-r--r--frontend/beta/js/Clipperz/Set.js22
-rw-r--r--frontend/beta/js/Clipperz/Signal.js22
-rw-r--r--frontend/beta/js/Clipperz/Style.js22
-rw-r--r--frontend/beta/js/Clipperz/YUI/Collapser.js22
-rw-r--r--frontend/beta/js/Clipperz/YUI/DomHelper.js22
-rw-r--r--frontend/beta/js/Clipperz/YUI/DomQuery.js22
-rw-r--r--frontend/beta/js/Clipperz/YUI/Drawer.js22
-rw-r--r--frontend/beta/js/Clipperz/YUI/IBLayoutManager.js22
-rw-r--r--frontend/beta/js/Clipperz/YUI/IBLayoutRegion.js22
-rw-r--r--frontend/beta/js/Clipperz/YUI/MessageBox.js22
122 files changed, 1220 insertions, 1464 deletions
diff --git a/frontend/beta/js/Clipperz/Base.js b/frontend/beta/js/Clipperz/Base.js
index 1c0504b..cf40314 100644
--- a/frontend/beta/js/Clipperz/Base.js
+++ b/frontend/beta/js/Clipperz/Base.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.Base) == 'undefined') { Clipperz.Base = {}; } 25if (typeof(Clipperz.Base) == 'undefined') { Clipperz.Base = {}; }
28 26
29Clipperz.Base.VERSION = "0.1"; 27Clipperz.Base.VERSION = "0.1";
30Clipperz.Base.NAME = "Clipperz.Base"; 28Clipperz.Base.NAME = "Clipperz.Base";
31 29
32MochiKit.Base.update(Clipperz.Base, { 30MochiKit.Base.update(Clipperz.Base, {
33 31
34 //------------------------------------------------------------------------- 32 //-------------------------------------------------------------------------
35 33
36 '__repr__': function () { 34 '__repr__': function () {
37 return "[" + this.NAME + " " + this.VERSION + "]"; 35 return "[" + this.NAME + " " + this.VERSION + "]";
38 }, 36 },
39 37
40 //------------------------------------------------------------------------- 38 //-------------------------------------------------------------------------
41 39
42 'toString': function () { 40 'toString': function () {
43 return this.__repr__(); 41 return this.__repr__();
44 }, 42 },
45 43
46 //------------------------------------------------------------------------- 44 //-------------------------------------------------------------------------
47 45
48 'trim': function (aValue) { 46 'trim': function (aValue) {
49 return aValue.replace(/^\s+|\s+$/g, ""); 47 return aValue.replace(/^\s+|\s+$/g, "");
50 }, 48 },
51 49
52 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
53 51
54 'stringToByteArray': function (aValue) { 52 'stringToByteArray': function (aValue) {
55 varresult; 53 varresult;
56 var i, c; 54 var i, c;
57 55
58 result = []; 56 result = [];
59 57
60 c = aValue.length; 58 c = aValue.length;
61 for (i=0; i<c; i++) { 59 for (i=0; i<c; i++) {
62 result[i] = aValue.charCodeAt(i); 60 result[i] = aValue.charCodeAt(i);
63 } 61 }
64 62
65 return result; 63 return result;
66 }, 64 },
67 65
68 //......................................................................... 66 //.........................................................................
69 67
70 'byteArrayToString': function (anArrayOfBytes) { 68 'byteArrayToString': function (anArrayOfBytes) {
71 varresult; 69 varresult;
72 var i, c; 70 var i, c;
73 71
74 result = ""; 72 result = "";
75 73
76 c = anArrayOfBytes.length; 74 c = anArrayOfBytes.length;
77 for (i=0; i<c; i++) { 75 for (i=0; i<c; i++) {
78 result += String.fromCharCode(anArrayOfBytes[i]); 76 result += String.fromCharCode(anArrayOfBytes[i]);
79 } 77 }
80 78
81 return result; 79 return result;
82 }, 80 },
83 81
84 //------------------------------------------------------------------------- 82 //-------------------------------------------------------------------------
85 83
86 'getValueForKeyInFormContent': function (aFormContent, aKey) { 84 'getValueForKeyInFormContent': function (aFormContent, aKey) {
87 return aFormContent[1][MochiKit.Base.find(aFormContent[0], aKey)]; 85 return aFormContent[1][MochiKit.Base.find(aFormContent[0], aKey)];
88 }, 86 },
89 87
90 //------------------------------------------------------------------------- 88 //-------------------------------------------------------------------------
91 89
92 'indexOfObjectInArray': function(anObject, anArray) { 90 'indexOfObjectInArray': function(anObject, anArray) {
93 varresult; 91 varresult;
94 vari, c; 92 vari, c;
95 93
96 result = -1; 94 result = -1;
97 95
98 c = anArray.length; 96 c = anArray.length;
99 for (i=0; ((i<c) && (result < 0)); i++) { 97 for (i=0; ((i<c) && (result < 0)); i++) {
100 if (anArray[i] === anObject) { 98 if (anArray[i] === anObject) {
101 result = i; 99 result = i;
102 } 100 }
103 } 101 }
104 102
105 return result; 103 return result;
106 }, 104 },
107 105
108 'removeObjectAtIndexFromArray': function(anIndex, anArray) { 106 'removeObjectAtIndexFromArray': function(anIndex, anArray) {
109 anArray.splice(anIndex, 1); 107 anArray.splice(anIndex, 1);
110 }, 108 },
111 109
112 'removeObjectFromArray': function(anObject, anArray) { 110 'removeObjectFromArray': function(anObject, anArray) {
113 varobjectIndex; 111 varobjectIndex;
114 112
115 objectIndex = Clipperz.Base.indexOfObjectInArray(anObject, anArray); 113 objectIndex = Clipperz.Base.indexOfObjectInArray(anObject, anArray);
116 if (objectIndex > -1) { 114 if (objectIndex > -1) {
117 Clipperz.Base.removeObjectAtIndexFromArray(objectIndex, anArray); 115 Clipperz.Base.removeObjectAtIndexFromArray(objectIndex, anArray);
118 } else { 116 } else {
119 // jslog.error("Trying to remove an object not present in the array"); 117 // jslog.error("Trying to remove an object not present in the array");
120 //TODO: raise an exception 118 //TODO: raise an exception
121 } 119 }
122 }, 120 },
123 121
124 'removeFromArray': function(anArray, anObject) { 122 'removeFromArray': function(anArray, anObject) {
125 return Clipperz.Base.removeObjectFromArray(anObject, anArray); 123 return Clipperz.Base.removeObjectFromArray(anObject, anArray);
126 }, 124 },
127 125
128 //------------------------------------------------------------------------- 126 //-------------------------------------------------------------------------
129 127
130 'splitStringAtFixedTokenSize': function(aString, aTokenSize) { 128 'splitStringAtFixedTokenSize': function(aString, aTokenSize) {
131 var result; 129 var result;
132 varstringToProcess; 130 varstringToProcess;
133 131
134 stringToProcess = aString; 132 stringToProcess = aString;
135 result = []; 133 result = [];
136 if (stringToProcess != null) { 134 if (stringToProcess != null) {
137 while (stringToProcess.length > aTokenSize) { 135 while (stringToProcess.length > aTokenSize) {
138 result.push(stringToProcess.substring(0, aTokenSize)); 136 result.push(stringToProcess.substring(0, aTokenSize));
139 stringToProcess = stringToProcess.substring(aTokenSize); 137 stringToProcess = stringToProcess.substring(aTokenSize);
140 } 138 }
141 139
142 result.push(stringToProcess); 140 result.push(stringToProcess);
143 } 141 }
144 142
145 return result; 143 return result;
146 }, 144 },
147 145
148 //------------------------------------------------------------------------- 146 //-------------------------------------------------------------------------
149 147
150 'objectType': function(anObject) { 148 'objectType': function(anObject) {
diff --git a/frontend/beta/js/Clipperz/ByteArray.js b/frontend/beta/js/Clipperz/ByteArray.js
index a69aa43..540563f 100644
--- a/frontend/beta/js/Clipperz/ByteArray.js
+++ b/frontend/beta/js/Clipperz/ByteArray.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27 25
28//============================================================================= 26//=============================================================================
29 27
30Clipperz.ByteArray_abstract = function(args) { 28Clipperz.ByteArray_abstract = function(args) {
31 return this; 29 return this;
32} 30}
33 31
34Clipperz.ByteArray_abstract.prototype = MochiKit.Base.update(null, { 32Clipperz.ByteArray_abstract.prototype = MochiKit.Base.update(null, {
35 33
36 //------------------------------------------------------------------------- 34 //-------------------------------------------------------------------------
37 35
38 'toString': function() { 36 'toString': function() {
39 return "Clipperz.ByteArray_abstract"; 37 return "Clipperz.ByteArray_abstract";
40 }, 38 },
41 39
42 //------------------------------------------------------------------------- 40 //-------------------------------------------------------------------------
43 41
44 'equals': function(aValue) { 42 'equals': function(aValue) {
45 return (this.compare(aValue) == 0); 43 return (this.compare(aValue) == 0);
46 }, 44 },
47 45
48 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
49 47
50 'compare': function(aValue) { 48 'compare': function(aValue) {
51 var result; 49 var result;
52 var i; 50 var i;
53 51
54 result = MochiKit.Base.compare(this.length(), aValue.length()); 52 result = MochiKit.Base.compare(this.length(), aValue.length());
55 i = this.length(); 53 i = this.length();
56 54
57 while ((result == 0) && (i>0)) { 55 while ((result == 0) && (i>0)) {
58 i--; 56 i--;
59 result = MochiKit.Base.compare(this.byteAtIndex(i), aValue.byteAtIndex(i)); 57 result = MochiKit.Base.compare(this.byteAtIndex(i), aValue.byteAtIndex(i));
60 } 58 }
61 59
62 return result; 60 return result;
63 }, 61 },
64 62
65 //------------------------------------------------------------------------- 63 //-------------------------------------------------------------------------
66 64
67 'clone': function() { 65 'clone': function() {
68 throw Clipperz.Base.exception.AbstractMethod; 66 throw Clipperz.Base.exception.AbstractMethod;
69 }, 67 },
70 68
71 //------------------------------------------------------------------------- 69 //-------------------------------------------------------------------------
72 70
73 'newInstance': function() { 71 'newInstance': function() {
74 throw Clipperz.Base.exception.AbstractMethod; 72 throw Clipperz.Base.exception.AbstractMethod;
75 }, 73 },
76 74
77 //------------------------------------------------------------------------- 75 //-------------------------------------------------------------------------
78 76
79 'reset': function() { 77 'reset': function() {
80 throw Clipperz.Base.exception.AbstractMethod; 78 throw Clipperz.Base.exception.AbstractMethod;
81 }, 79 },
82 80
83 //------------------------------------------------------------------------- 81 //-------------------------------------------------------------------------
84 82
85 'length': function() { 83 'length': function() {
86 throw Clipperz.Base.exception.AbstractMethod; 84 throw Clipperz.Base.exception.AbstractMethod;
87 }, 85 },
88 86
89 //------------------------------------------------------------------------- 87 //-------------------------------------------------------------------------
90 88
91 'checkValue': function(aValue) { 89 'checkValue': function(aValue) {
92 if ((aValue & 0xff) != aValue) { 90 if ((aValue & 0xff) != aValue) {
93 MochiKit.Logging.logError("Clipperz.ByteArray.appendByte: the provided value (0x" + aValue.toString(16) + ") is not a byte value."); 91 MochiKit.Logging.logError("Clipperz.ByteArray.appendByte: the provided value (0x" + aValue.toString(16) + ") is not a byte value.");
94 throw Clipperz.ByteArray.exception.InvalidValue; 92 throw Clipperz.ByteArray.exception.InvalidValue;
95 } 93 }
96 }, 94 },
97 95
98 //------------------------------------------------------------------------- 96 //-------------------------------------------------------------------------
99 97
100 'xorMergeWithBlock': function(aBlock, anAllignment, paddingMode) { 98 'xorMergeWithBlock': function(aBlock, anAllignment, paddingMode) {
101 var result; 99 var result;
102 var a, b; 100 var a, b;
103 var aLength; 101 var aLength;
104 var bLength; 102 var bLength;
105 var i, c; 103 var i, c;
106 104
107 if (this.length() > aBlock.length()) { 105 if (this.length() > aBlock.length()) {
108 a = this; 106 a = this;
109 b = aBlock; 107 b = aBlock;
110 } else { 108 } else {
111 a = aBlock; 109 a = aBlock;
112 b = this; 110 b = this;
113 } 111 }
114 112
115 aLength = a.length(); 113 aLength = a.length();
116 bLength = b.length(); 114 bLength = b.length();
117 115
118 if (aLength != bLength) { 116 if (aLength != bLength) {
119 if (paddingMode == 'truncate') { 117 if (paddingMode == 'truncate') {
120 if (anAllignment == 'left') { 118 if (anAllignment == 'left') {
121 a = a.split(0, bLength); 119 a = a.split(0, bLength);
122 } else { 120 } else {
123 a = a.split(aLength - bLength); 121 a = a.split(aLength - bLength);
124 } 122 }
125 } else { 123 } else {
126 var ii, cc; 124 var ii, cc;
127 var padding; 125 var padding;
128 126
129 // padding = new Clipperz.ByteArray(); 127 // padding = new Clipperz.ByteArray();
130 padding = this.newInstance(); 128 padding = this.newInstance();
131 cc = aLength - bLength; 129 cc = aLength - bLength;
132 for (ii=0; ii<cc; ii++) { 130 for (ii=0; ii<cc; ii++) {
133 padding.appendByte(0); 131 padding.appendByte(0);
134 } 132 }
135 133
136 if (anAllignment == 'left') { 134 if (anAllignment == 'left') {
137 b = b.appendBlock(padding); 135 b = b.appendBlock(padding);
138 } else { 136 } else {
139 b = padding.appendBlock(b); 137 b = padding.appendBlock(b);
140 } 138 }
141 } 139 }
142 } 140 }
143 141
144 142
145 // result = new Clipperz.ByteArray(); 143 // result = new Clipperz.ByteArray();
146 result = this.newInstance(); 144 result = this.newInstance();
147 c = a.length(); 145 c = a.length();
148 for (i=0; i<c; i++) { 146 for (i=0; i<c; i++) {
149 result.appendByte(a.byteAtIndex(i) ^ b.byteAtIndex(i)); 147 result.appendByte(a.byteAtIndex(i) ^ b.byteAtIndex(i));
150 } 148 }
diff --git a/frontend/beta/js/Clipperz/CSVProcessor.js b/frontend/beta/js/Clipperz/CSVProcessor.js
index ec94206..f429468 100644
--- a/frontend/beta/js/Clipperz/CSVProcessor.js
+++ b/frontend/beta/js/Clipperz/CSVProcessor.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27 25
28 26
29Clipperz.CSVProcessor = function(args) { 27Clipperz.CSVProcessor = function(args) {
30 args = args || {}; 28 args = args || {};
31 29
32 // this._status = undefined; 30 // this._status = undefined;
33 // this._error_input= undefined; 31 // this._error_input= undefined;
34 // this._string = undefined; 32 // this._string = undefined;
35 // this._fields = undefined; 33 // this._fields = undefined;
36 34
37 this._quoteChar = args['quoteChar'] ||"\042"; 35 this._quoteChar = args['quoteChar'] ||"\042";
38 this._eol = args['eol'] ||""; 36 this._eol = args['eol'] ||"";
39 this._escapeChar = args['escapeChar'] ||"\042"; 37 this._escapeChar = args['escapeChar'] ||"\042";
40 this._separatorChar = args['separatorChar'] ||","; 38 this._separatorChar = args['separatorChar'] ||",";
41 this._binary = args['binary'] ||false; 39 this._binary = args['binary'] ||false;
42 this._alwaysQuote = args['alwaysQuote'] ||false; 40 this._alwaysQuote = args['alwaysQuote'] ||false;
43 41
44 return this; 42 return this;
45} 43}
46 44
47//============================================================================= 45//=============================================================================
48 46
49Clipperz.CSVProcessor.prototype = MochiKit.Base.update(null, { 47Clipperz.CSVProcessor.prototype = MochiKit.Base.update(null, {
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 50
53 'quoteChar': function() { 51 'quoteChar': function() {
54 return this._quoteChar; 52 return this._quoteChar;
55 }, 53 },
56 54
57 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
58 56
59 'eol': function() { 57 'eol': function() {
60 return this._eol; 58 return this._eol;
61 }, 59 },
62 60
63 //------------------------------------------------------------------------- 61 //-------------------------------------------------------------------------
64 62
65 'escapeChar': function() { 63 'escapeChar': function() {
66 return this._escapeChar; 64 return this._escapeChar;
67 }, 65 },
68 66
69 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
70 68
71 'separatorChar': function() { 69 'separatorChar': function() {
72 return this._separatorChar; 70 return this._separatorChar;
73 }, 71 },
74 72
75 'setSeparatorChar': function(aValue) { 73 'setSeparatorChar': function(aValue) {
76 this._separatorChar = aValue; 74 this._separatorChar = aValue;
77 }, 75 },
78 76
79 //------------------------------------------------------------------------- 77 //-------------------------------------------------------------------------
80 78
81 'binary': function() { 79 'binary': function() {
82 return this._binary; 80 return this._binary;
83 }, 81 },
84 82
85 //------------------------------------------------------------------------- 83 //-------------------------------------------------------------------------
86 84
87 'alwaysQuote': function() { 85 'alwaysQuote': function() {
88 return this._alwaysQuote; 86 return this._alwaysQuote;
89 }, 87 },
90 88
91 //------------------------------------------------------------------------- 89 //-------------------------------------------------------------------------
92/* 90/*
93 'parse': function(aValue) { 91 'parse': function(aValue) {
94 var result; 92 var result;
95 var lines; 93 var lines;
96 var parameter; 94 var parameter;
97 95
98//MochiKit.Logging.logDebug(">>> CSVProcessor.parse"); 96//MochiKit.Logging.logDebug(">>> CSVProcessor.parse");
99 result = []; 97 result = [];
100 98
101 lines = aValue.replace(/\r?\n/g, "\n").replace(/^\n* /g, "").replace(/\n$/g, "");; 99 lines = aValue.replace(/\r?\n/g, "\n").replace(/^\n* /g, "").replace(/\n$/g, "");;
102 parameter = { 100 parameter = {
103 line: lines 101 line: lines
104 } 102 }
105 103
106 do { 104 do {
107 var fields; 105 var fields;
108 106
109 fields = this.parseLine(parameter); 107 fields = this.parseLine(parameter);
110 108
111 if (fields != null) { 109 if (fields != null) {
112 result.push(fields); 110 result.push(fields);
113 } 111 }
114 112
115 parameter.line = parameter.line.replace(/^\n* /g, "").replace(/\n$/g, ""); 113 parameter.line = parameter.line.replace(/^\n* /g, "").replace(/\n$/g, "");
116 114
117//MochiKit.Logging.logDebug("line: '" + parameter.line + "'"); 115//MochiKit.Logging.logDebug("line: '" + parameter.line + "'");
118 } while (parameter.line != ""); 116 } while (parameter.line != "");
119//MochiKit.Logging.logDebug("--- CSVProcessor.parse - result: " + Clipperz.Base.serializeJSON(result)); 117//MochiKit.Logging.logDebug("--- CSVProcessor.parse - result: " + Clipperz.Base.serializeJSON(result));
120//MochiKit.Logging.logDebug("<<< CSVProcessor.parse"); 118//MochiKit.Logging.logDebug("<<< CSVProcessor.parse");
121 119
122 return result; 120 return result;
123 }, 121 },
124*/ 122*/
125 //------------------------------------------------------------------------- 123 //-------------------------------------------------------------------------
126 124
127 'deferredParse_core': function(aContext) { 125 'deferredParse_core': function(aContext) {
128 var deferredResult; 126 var deferredResult;
129 127
130 if (aContext.line == "") { 128 if (aContext.line == "") {
131 deferredResult = MochiKit.Async.succeed(aContext.result); 129 deferredResult = MochiKit.Async.succeed(aContext.result);
132 } else { 130 } else {
133 var fields; 131 var fields;
134 132
135 fields = this.parseLine(aContext); 133 fields = this.parseLine(aContext);
136 if (fields != null) { 134 if (fields != null) {
137 aContext.result.push(fields); 135 aContext.result.push(fields);
138 } 136 }
139 137
140 aContext.line = aContext.line.replace(/^\n*/g, "").replace(/\n$/g, ""); 138 aContext.line = aContext.line.replace(/^\n*/g, "").replace(/\n$/g, "");
141 139
142 deferredResult = new MochiKit.Async.Deferred(); 140 deferredResult = new MochiKit.Async.Deferred();
143 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'importProcessorProgressUpdate', {status:'processing', size:aContext.size, progress:(aContext.size - aContext.line.length)}); 141 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'importProcessorProgressUpdate', {status:'processing', size:aContext.size, progress:(aContext.size - aContext.line.length)});
144 deferredResult.addCallback(MochiKit.Async.wait, 0.2); 142 deferredResult.addCallback(MochiKit.Async.wait, 0.2);
145 deferredResult.addCallback(MochiKit.Base.method(this, 'deferredParse_core')) 143 deferredResult.addCallback(MochiKit.Base.method(this, 'deferredParse_core'))
146 deferredResult.callback(aContext); 144 deferredResult.callback(aContext);
147 } 145 }
148 146
149 return deferredResult; 147 return deferredResult;
150 }, 148 },
diff --git a/frontend/beta/js/Clipperz/Crypto/AES.js b/frontend/beta/js/Clipperz/Crypto/AES.js
index 7ddda3e..a5c63fb 100644
--- a/frontend/beta/js/Clipperz/Crypto/AES.js
+++ b/frontend/beta/js/Clipperz/Crypto/AES.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) {
27 throw "Clipperz.Crypto.AES depends on Clipperz.ByteArray!"; 25 throw "Clipperz.Crypto.AES depends on Clipperz.ByteArray!";
28} 26}
29 27
30 //Dependency commented to avoid a circular reference 28 //Dependency commented to avoid a circular reference
31//try { if (typeof(Clipperz.Crypto.PRNG) == 'undefined') { throw ""; }} catch (e) { 29//try { if (typeof(Clipperz.Crypto.PRNG) == 'undefined') { throw ""; }} catch (e) {
32 //throw "Clipperz.Crypto.AES depends on Clipperz.Crypto.PRNG!"; 30 //throw "Clipperz.Crypto.AES depends on Clipperz.Crypto.PRNG!";
33//} 31//}
34 32
35if (typeof(Clipperz.Crypto.AES) == 'undefined') { Clipperz.Crypto.AES = {}; } 33if (typeof(Clipperz.Crypto.AES) == 'undefined') { Clipperz.Crypto.AES = {}; }
36 34
37//############################################################################# 35//#############################################################################
38 36
39Clipperz.Crypto.AES.DeferredExecutionContext = function(args) { 37Clipperz.Crypto.AES.DeferredExecutionContext = function(args) {
40 args = args || {}; 38 args = args || {};
41 39
42 this._key = args.key; 40 this._key = args.key;
43 this._message = args.message; 41 this._message = args.message;
44 this._result = args.message.clone(); 42 this._result = args.message.clone();
45 this._nonce = args.nonce; 43 this._nonce = args.nonce;
46 this._messageLength = this._message.length(); 44 this._messageLength = this._message.length();
47 45
48 this._messageArray = this._message.arrayValues(); 46 this._messageArray = this._message.arrayValues();
49 this._resultArray = this._result.arrayValues(); 47 this._resultArray = this._result.arrayValues();
50 this._nonceArray = this._nonce.arrayValues(); 48 this._nonceArray = this._nonce.arrayValues();
51 49
52 this._executionStep = 0; 50 this._executionStep = 0;
53 51
54 return this; 52 return this;
55} 53}
56 54
57Clipperz.Crypto.AES.DeferredExecutionContext.prototype = MochiKit.Base.update(null, { 55Clipperz.Crypto.AES.DeferredExecutionContext.prototype = MochiKit.Base.update(null, {
58 56
59 'key': function() { 57 'key': function() {
60 return this._key; 58 return this._key;
61 }, 59 },
62 60
63 'message': function() { 61 'message': function() {
64 return this._message; 62 return this._message;
65 }, 63 },
66 64
67 'messageLength': function() { 65 'messageLength': function() {
68 return this._messageLength; 66 return this._messageLength;
69 }, 67 },
70 68
71 'result': function() { 69 'result': function() {
72 return new Clipperz.ByteArray(this.resultArray()); 70 return new Clipperz.ByteArray(this.resultArray());
73 }, 71 },
74 72
75 'nonce': function() { 73 'nonce': function() {
76 return this._nonce; 74 return this._nonce;
77 }, 75 },
78 76
79 'messageArray': function() { 77 'messageArray': function() {
80 return this._messageArray; 78 return this._messageArray;
81 }, 79 },
82 80
83 'resultArray': function() { 81 'resultArray': function() {
84 return this._resultArray; 82 return this._resultArray;
85 }, 83 },
86 84
87 'nonceArray': function() { 85 'nonceArray': function() {
88 return this._nonceArray; 86 return this._nonceArray;
89 }, 87 },
90 88
91 'elaborationChunkSize': function() { 89 'elaborationChunkSize': function() {
92 return Clipperz.Crypto.AES.DeferredExecution.chunkSize; 90 return Clipperz.Crypto.AES.DeferredExecution.chunkSize;
93 }, 91 },
94 92
95 'executionStep': function() { 93 'executionStep': function() {
96 return this._executionStep; 94 return this._executionStep;
97 }, 95 },
98 96
99 'setExecutionStep': function(aValue) { 97 'setExecutionStep': function(aValue) {
100 this._executionStep = aValue; 98 this._executionStep = aValue;
101 }, 99 },
102 100
103 'pause': function(aValue) { 101 'pause': function(aValue) {
104 return MochiKit.Async.wait(Clipperz.Crypto.AES.DeferredExecution.pauseTime, aValue); 102 return MochiKit.Async.wait(Clipperz.Crypto.AES.DeferredExecution.pauseTime, aValue);
105 }, 103 },
106 104
107 //----------------------------------------------------------------------------- 105 //-----------------------------------------------------------------------------
108 __syntaxFix__: "syntax fix" 106 __syntaxFix__: "syntax fix"
109 107
110}); 108});
111 109
112//############################################################################# 110//#############################################################################
113 111
114Clipperz.Crypto.AES.Key = function(args) { 112Clipperz.Crypto.AES.Key = function(args) {
115 args = args || {}; 113 args = args || {};
116 114
117 this._key = args.key; 115 this._key = args.key;
118 this._keySize = args.keySize || this.key().length(); 116 this._keySize = args.keySize || this.key().length();
119 117
120 if (this.keySize() == 128/8) { 118 if (this.keySize() == 128/8) {
121 this._b = 176; 119 this._b = 176;
122 this._numberOfRounds = 10; 120 this._numberOfRounds = 10;
123 } else if (this.keySize() == 256/8) { 121 } else if (this.keySize() == 256/8) {
124 this._b = 240; 122 this._b = 240;
125 this._numberOfRounds = 14; 123 this._numberOfRounds = 14;
126 } else { 124 } else {
127 MochiKit.Logging.logError("AES unsupported key size: " + (this.keySize() * 8) + " bits"); 125 MochiKit.Logging.logError("AES unsupported key size: " + (this.keySize() * 8) + " bits");
128 throw Clipperz.Crypto.AES.exception.UnsupportedKeySize; 126 throw Clipperz.Crypto.AES.exception.UnsupportedKeySize;
129 } 127 }
130 128
131 this._stretchedKey = null; 129 this._stretchedKey = null;
132 130
133 return this; 131 return this;
134} 132}
135 133
136Clipperz.Crypto.AES.Key.prototype = MochiKit.Base.update(null, { 134Clipperz.Crypto.AES.Key.prototype = MochiKit.Base.update(null, {
137 135
138 'asString': function() { 136 'asString': function() {
139 return "Clipperz.Crypto.AES.Key (" + this.key().toHexString() + ")"; 137 return "Clipperz.Crypto.AES.Key (" + this.key().toHexString() + ")";
140 }, 138 },
141 139
142 //----------------------------------------------------------------------------- 140 //-----------------------------------------------------------------------------
143 141
144 'key': function() { 142 'key': function() {
145 return this._key; 143 return this._key;
146 }, 144 },
147 145
148 'keySize': function() { 146 'keySize': function() {
149 return this._keySize; 147 return this._keySize;
150 }, 148 },
diff --git a/frontend/beta/js/Clipperz/Crypto/Base.js b/frontend/beta/js/Clipperz/Crypto/Base.js
index d3a8e36..9acfc49 100644
--- a/frontend/beta/js/Clipperz/Crypto/Base.js
+++ b/frontend/beta/js/Clipperz/Crypto/Base.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26try { if (typeof(Clipperz.Base) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.Base) == 'undefined') { throw ""; }} catch (e) {
27 throw "Clipperz.Crypto.Base depends on Clipperz.Base!"; 25 throw "Clipperz.Crypto.Base depends on Clipperz.Base!";
28} 26}
29 27
30if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; } 28if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; }
31if (typeof(Clipperz.Crypto.Base) == 'undefined') { Clipperz.Crypto.Base = {}; } 29if (typeof(Clipperz.Crypto.Base) == 'undefined') { Clipperz.Crypto.Base = {}; }
32 30
33Clipperz.Crypto.Base.VERSION = "0.1"; 31Clipperz.Crypto.Base.VERSION = "0.1";
34Clipperz.Crypto.Base.NAME = "Clipperz.Crypto.Base"; 32Clipperz.Crypto.Base.NAME = "Clipperz.Crypto.Base";
35 33
36//############################################################################# 34//#############################################################################
37 //Downloaded on March 30, 2006 from http://anmar.eu.org/projects/jssha2/files/jssha2-0.3.zip (jsSha2/sha256.js) 35 //Downloaded on March 30, 2006 from http://anmar.eu.org/projects/jssha2/files/jssha2-0.3.zip (jsSha2/sha256.js)
38//############################################################################# 36//#############################################################################
39 37
40/* A JavaScript implementation of the Secure Hash Algorithm, SHA-256 38/* A JavaScript implementation of the Secure Hash Algorithm, SHA-256
41 * Version 0.3 Copyright Angel Marin 2003-2004 - http://anmar.eu.org/ 39 * Version 0.3 Copyright Angel Marin 2003-2004 - http://anmar.eu.org/
42 * Distributed under the BSD License 40 * Distributed under the BSD License
43 * Some bits taken from Paul Johnston's SHA-1 implementation 41 * Some bits taken from Paul Johnston's SHA-1 implementation
44 */ 42 */
45var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ 43var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
46function safe_add (x, y) { 44function safe_add (x, y) {
47 var lsw = (x & 0xFFFF) + (y & 0xFFFF); 45 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
48 var msw = (x >> 16) + (y >> 16) + (lsw >> 16); 46 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
49 return (msw << 16) | (lsw & 0xFFFF); 47 return (msw << 16) | (lsw & 0xFFFF);
50} 48}
51function S (X, n) {return ( X >>> n ) | (X << (32 - n));} 49function S (X, n) {return ( X >>> n ) | (X << (32 - n));}
52function R (X, n) {return ( X >>> n );} 50function R (X, n) {return ( X >>> n );}
53function Ch(x, y, z) {return ((x & y) ^ ((~x) & z));} 51function Ch(x, y, z) {return ((x & y) ^ ((~x) & z));}
54function Maj(x, y, z) {return ((x & y) ^ (x & z) ^ (y & z));} 52function Maj(x, y, z) {return ((x & y) ^ (x & z) ^ (y & z));}
55function Sigma0256(x) {return (S(x, 2) ^ S(x, 13) ^ S(x, 22));} 53function Sigma0256(x) {return (S(x, 2) ^ S(x, 13) ^ S(x, 22));}
56function Sigma1256(x) {return (S(x, 6) ^ S(x, 11) ^ S(x, 25));} 54function Sigma1256(x) {return (S(x, 6) ^ S(x, 11) ^ S(x, 25));}
57function Gamma0256(x) {return (S(x, 7) ^ S(x, 18) ^ R(x, 3));} 55function Gamma0256(x) {return (S(x, 7) ^ S(x, 18) ^ R(x, 3));}
58function Gamma1256(x) {return (S(x, 17) ^ S(x, 19) ^ R(x, 10));} 56function Gamma1256(x) {return (S(x, 17) ^ S(x, 19) ^ R(x, 10));}
59function core_sha256 (m, l) { 57function core_sha256 (m, l) {
60 var K = new Array(0x428A2F98,0x71374491,0xB5C0FBCF,0xE9B5DBA5,0x3956C25B,0x59F111F1,0x923F82A4,0xAB1C5ED5,0xD807AA98,0x12835B01,0x243185BE,0x550C7DC3,0x72BE5D74,0x80DEB1FE,0x9BDC06A7,0xC19BF174,0xE49B69C1,0xEFBE4786,0xFC19DC6,0x240CA1CC,0x2DE92C6F,0x4A7484AA,0x5CB0A9DC,0x76F988DA,0x983E5152,0xA831C66D,0xB00327C8,0xBF597FC7,0xC6E00BF3,0xD5A79147,0x6CA6351,0x14292967,0x27B70A85,0x2E1B2138,0x4D2C6DFC,0x53380D13,0x650A7354,0x766A0ABB,0x81C2C92E,0x92722C85,0xA2BFE8A1,0xA81A664B,0xC24B8B70,0xC76C51A3,0xD192E819,0xD6990624,0xF40E3585,0x106AA070,0x19A4C116,0x1E376C08,0x2748774C,0x34B0BCB5,0x391C0CB3,0x4ED8AA4A,0x5B9CCA4F,0x682E6FF3,0x748F82EE,0x78A5636F,0x84C87814,0x8CC70208,0x90BEFFFA,0xA4506CEB,0xBEF9A3F7,0xC67178F2); 58 var K = new Array(0x428A2F98,0x71374491,0xB5C0FBCF,0xE9B5DBA5,0x3956C25B,0x59F111F1,0x923F82A4,0xAB1C5ED5,0xD807AA98,0x12835B01,0x243185BE,0x550C7DC3,0x72BE5D74,0x80DEB1FE,0x9BDC06A7,0xC19BF174,0xE49B69C1,0xEFBE4786,0xFC19DC6,0x240CA1CC,0x2DE92C6F,0x4A7484AA,0x5CB0A9DC,0x76F988DA,0x983E5152,0xA831C66D,0xB00327C8,0xBF597FC7,0xC6E00BF3,0xD5A79147,0x6CA6351,0x14292967,0x27B70A85,0x2E1B2138,0x4D2C6DFC,0x53380D13,0x650A7354,0x766A0ABB,0x81C2C92E,0x92722C85,0xA2BFE8A1,0xA81A664B,0xC24B8B70,0xC76C51A3,0xD192E819,0xD6990624,0xF40E3585,0x106AA070,0x19A4C116,0x1E376C08,0x2748774C,0x34B0BCB5,0x391C0CB3,0x4ED8AA4A,0x5B9CCA4F,0x682E6FF3,0x748F82EE,0x78A5636F,0x84C87814,0x8CC70208,0x90BEFFFA,0xA4506CEB,0xBEF9A3F7,0xC67178F2);
61 var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19); 59 var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19);
62 var W = new Array(64); 60 var W = new Array(64);
63 var a, b, c, d, e, f, g, h, i, j; 61 var a, b, c, d, e, f, g, h, i, j;
64 var T1, T2; 62 var T1, T2;
65 /* append padding */ 63 /* append padding */
66 m[l >> 5] |= 0x80 << (24 - l % 32); 64 m[l >> 5] |= 0x80 << (24 - l % 32);
67 m[((l + 64 >> 9) << 4) + 15] = l; 65 m[((l + 64 >> 9) << 4) + 15] = l;
68 for ( var i = 0; i<m.length; i+=16 ) { 66 for ( var i = 0; i<m.length; i+=16 ) {
69 a = HASH[0]; b = HASH[1]; c = HASH[2]; d = HASH[3]; e = HASH[4]; f = HASH[5]; g = HASH[6]; h = HASH[7]; 67 a = HASH[0]; b = HASH[1]; c = HASH[2]; d = HASH[3]; e = HASH[4]; f = HASH[5]; g = HASH[6]; h = HASH[7];
70 for ( var j = 0; j<64; j++) { 68 for ( var j = 0; j<64; j++) {
71 if (j < 16) W[j] = m[j + i]; 69 if (j < 16) W[j] = m[j + i];
72 else W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]); 70 else W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]);
73 T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]); 71 T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]);
74 T2 = safe_add(Sigma0256(a), Maj(a, b, c)); 72 T2 = safe_add(Sigma0256(a), Maj(a, b, c));
75 h = g; g = f; f = e; e = safe_add(d, T1); d = c; c = b; b = a; a = safe_add(T1, T2); 73 h = g; g = f; f = e; e = safe_add(d, T1); d = c; c = b; b = a; a = safe_add(T1, T2);
76 } 74 }
77 HASH[0] = safe_add(a, HASH[0]); HASH[1] = safe_add(b, HASH[1]); HASH[2] = safe_add(c, HASH[2]); HASH[3] = safe_add(d, HASH[3]); HASH[4] = safe_add(e, HASH[4]); HASH[5] = safe_add(f, HASH[5]); HASH[6] = safe_add(g, HASH[6]); HASH[7] = safe_add(h, HASH[7]); 75 HASH[0] = safe_add(a, HASH[0]); HASH[1] = safe_add(b, HASH[1]); HASH[2] = safe_add(c, HASH[2]); HASH[3] = safe_add(d, HASH[3]); HASH[4] = safe_add(e, HASH[4]); HASH[5] = safe_add(f, HASH[5]); HASH[6] = safe_add(g, HASH[6]); HASH[7] = safe_add(h, HASH[7]);
78 } 76 }
79 return HASH; 77 return HASH;
80} 78}
81function str2binb (str) { 79function str2binb (str) {
82 var bin = Array(); 80 var bin = Array();
83 var mask = (1 << chrsz) - 1; 81 var mask = (1 << chrsz) - 1;
84 for(var i = 0; i < str.length * chrsz; i += chrsz) 82 for(var i = 0; i < str.length * chrsz; i += chrsz)
85 bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32); 83 bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);
86 return bin; 84 return bin;
87} 85}
88function binb2hex (binarray) { 86function binb2hex (binarray) {
89 var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ 87 var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
90 var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; 88 var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
91 var str = ""; 89 var str = "";
92 for (var i = 0; i < binarray.length * 4; i++) { 90 for (var i = 0; i < binarray.length * 4; i++) {
93 str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) + hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF); 91 str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) + hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
94 } 92 }
95 return str; 93 return str;
96} 94}
97function hex_sha256(s){return binb2hex(core_sha256(str2binb(s),s.length * chrsz));} 95function hex_sha256(s){return binb2hex(core_sha256(str2binb(s),s.length * chrsz));}
98 96
99 97
100 98
101//############################################################################# 99//#############################################################################
102 //Downloaded on March 30, 2006 from http://www.fourmilab.ch/javascrypt/javascrypt.zip (entropy.js) 100 //Downloaded on March 30, 2006 from http://www.fourmilab.ch/javascrypt/javascrypt.zip (entropy.js)
103//############################################################################# 101//#############################################################################
104 102
105 // Entropy collection utilities 103 // Entropy collection utilities
106 104
107 /*Start by declaring static storage and initialise 105 /*Start by declaring static storage and initialise
108 the entropy vector from the time we come through 106 the entropy vector from the time we come through
109 here. */ 107 here. */
110 108
111 var entropyData = new Array(); // Collected entropy data 109 var entropyData = new Array(); // Collected entropy data
112 var edlen = 0; // Keyboard array data length 110 var edlen = 0; // Keyboard array data length
113 111
114 addEntropyTime(); // Start entropy collection with page load time 112 addEntropyTime(); // Start entropy collection with page load time
115 ce(); // Roll milliseconds into initial entropy 113 ce(); // Roll milliseconds into initial entropy
116 114
117 //Add a byte to the entropy vector 115 //Add a byte to the entropy vector
118 116
119 function addEntropyByte(b) { 117 function addEntropyByte(b) {
120 entropyData[edlen++] = b; 118 entropyData[edlen++] = b;
121 } 119 }
122 120
123 /*Capture entropy. When the user presses a key or performs 121 /*Capture entropy. When the user presses a key or performs
124 various other events for which we can request 122 various other events for which we can request
125 notification, add the time in 255ths of a second to the 123 notification, add the time in 255ths of a second to the
126 entropyData array. The name of the function is short 124 entropyData array. The name of the function is short
127 so it doesn't bloat the form object declarations in 125 so it doesn't bloat the form object declarations in
128 which it appears in various "onXXX" events. */ 126 which it appears in various "onXXX" events. */
129 127
130 function ce() { 128 function ce() {
131 addEntropyByte(Math.floor((((new Date).getMilliseconds()) * 255) / 999)); 129 addEntropyByte(Math.floor((((new Date).getMilliseconds()) * 255) / 999));
132 } 130 }
133 131
134 //Add a 32 bit quantity to the entropy vector 132 //Add a 32 bit quantity to the entropy vector
135 133
136 function addEntropy32(w) { 134 function addEntropy32(w) {
137 var i; 135 var i;
138 136
139 for (i = 0; i < 4; i++) { 137 for (i = 0; i < 4; i++) {
140 addEntropyByte(w & 0xFF); 138 addEntropyByte(w & 0xFF);
141 w >>= 8; 139 w >>= 8;
142 } 140 }
143 } 141 }
144 142
145 /*Add the current time and date (milliseconds since the epoch, 143 /*Add the current time and date (milliseconds since the epoch,
146 truncated to 32 bits) to the entropy vector. */ 144 truncated to 32 bits) to the entropy vector. */
147 145
148 function addEntropyTime() { 146 function addEntropyTime() {
149 addEntropy32((new Date()).getTime()); 147 addEntropy32((new Date()).getTime());
150 } 148 }
diff --git a/frontend/beta/js/Clipperz/Crypto/BigInt.js b/frontend/beta/js/Clipperz/Crypto/BigInt.js
index 41483a3..197cd9a 100644
--- a/frontend/beta/js/Clipperz/Crypto/BigInt.js
+++ b/frontend/beta/js/Clipperz/Crypto/BigInt.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; } 25if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; }
28 26
29//############################################################################# 27//#############################################################################
30 //Downloaded on March 05, 2007 from http://www.leemon.com/crypto/BigInt.js 28 //Downloaded on March 05, 2007 from http://www.leemon.com/crypto/BigInt.js
31//############################################################################# 29//#############################################################################
32 30
33 31
34//////////////////////////////////////////////////////////////////////////////////////// 32////////////////////////////////////////////////////////////////////////////////////////
35// Big Integer Library v. 5.0 33// Big Integer Library v. 5.0
36// Created 2000, last modified 2006 34// Created 2000, last modified 2006
37// Leemon Baird 35// Leemon Baird
38// www.leemon.com 36// www.leemon.com
39// 37//
40// This file is public domain. You can use it for any purpose without restriction. 38// This file is public domain. You can use it for any purpose without restriction.
41// I do not guarantee that it is correct, so use it at your own risk. If you use 39// I do not guarantee that it is correct, so use it at your own risk. If you use
42// it for something interesting, I'd appreciate hearing about it. If you find 40// it for something interesting, I'd appreciate hearing about it. If you find
43// any bugs or make any improvements, I'd appreciate hearing about those too. 41// any bugs or make any improvements, I'd appreciate hearing about those too.
44// It would also be nice if my name and address were left in the comments. 42// It would also be nice if my name and address were left in the comments.
45// But none of that is required. 43// But none of that is required.
46// 44//
47// This code defines a bigInt library for arbitrary-precision integers. 45// This code defines a bigInt library for arbitrary-precision integers.
48// A bigInt is an array of integers storing the value in chunks of bpe bits, 46// A bigInt is an array of integers storing the value in chunks of bpe bits,
49// little endian (buff[0] is the least significant word). 47// little endian (buff[0] is the least significant word).
50// Negative bigInts are stored two's complement. 48// Negative bigInts are stored two's complement.
51// Some functions assume their parameters have at least one leading zero element. 49// Some functions assume their parameters have at least one leading zero element.
52// Functions with an underscore at the end of the name have unpredictable behavior in case of overflow, 50// Functions with an underscore at the end of the name have unpredictable behavior in case of overflow,
53// so the caller must make sure overflow won't happen. 51// so the caller must make sure overflow won't happen.
54// For each function where a parameter is modified, that same 52// For each function where a parameter is modified, that same
55// variable must not be used as another argument too. 53// variable must not be used as another argument too.
56// So, you cannot square x by doing multMod_(x,x,n). 54// So, you cannot square x by doing multMod_(x,x,n).
57// You must use squareMod_(x,n) instead, or do y=dup(x); multMod_(x,y,n). 55// You must use squareMod_(x,n) instead, or do y=dup(x); multMod_(x,y,n).
58// 56//
59// These functions are designed to avoid frequent dynamic memory allocation in the inner loop. 57// These functions are designed to avoid frequent dynamic memory allocation in the inner loop.
60// For most functions, if it needs a BigInt as a local variable it will actually use 58// For most functions, if it needs a BigInt as a local variable it will actually use
61// a global, and will only allocate to it when it's not the right size. This ensures 59// a global, and will only allocate to it when it's not the right size. This ensures
62// that when a function is called repeatedly with same-sized parameters, it only allocates 60// that when a function is called repeatedly with same-sized parameters, it only allocates
63// memory on the first call. 61// memory on the first call.
64// 62//
65// Note that for cryptographic purposes, the calls to Math.random() must 63// Note that for cryptographic purposes, the calls to Math.random() must
66// be replaced with calls to a better pseudorandom number generator. 64// be replaced with calls to a better pseudorandom number generator.
67// 65//
68// In the following, "bigInt" means a bigInt with at least one leading zero element, 66// In the following, "bigInt" means a bigInt with at least one leading zero element,
69// and "integer" means a nonnegative integer less than radix. In some cases, integer 67// and "integer" means a nonnegative integer less than radix. In some cases, integer
70// can be negative. Negative bigInts are 2s complement. 68// can be negative. Negative bigInts are 2s complement.
71// 69//
72// The following functions do not modify their inputs, but dynamically allocate memory every time they are called: 70// The following functions do not modify their inputs, but dynamically allocate memory every time they are called:
73// 71//
74// function bigInt2str(x,base) //convert a bigInt into a string in a given base, from base 2 up to base 95 72// function bigInt2str(x,base) //convert a bigInt into a string in a given base, from base 2 up to base 95
75// function dup(x) //returns a copy of bigInt x 73// function dup(x) //returns a copy of bigInt x
76// function findPrimes(n) //return array of all primes less than integer n 74// function findPrimes(n) //return array of all primes less than integer n
77// function int2bigInt(t,n,m) //convert integer t to a bigInt with at least n bits and m array elements 75// function int2bigInt(t,n,m) //convert integer t to a bigInt with at least n bits and m array elements
78// function int2bigInt(s,b,n,m) //convert string s in base b to a bigInt with at least n bits and m array elements 76// function int2bigInt(s,b,n,m) //convert string s in base b to a bigInt with at least n bits and m array elements
79// function trim(x,k) //return a copy of x with exactly k leading zero elements 77// function trim(x,k) //return a copy of x with exactly k leading zero elements
80// 78//
81// The following functions do not modify their inputs, so there is never a problem with the result being too big: 79// The following functions do not modify their inputs, so there is never a problem with the result being too big:
82// 80//
83// function bitSize(x) //returns how many bits long the bigInt x is, not counting leading zeros 81// function bitSize(x) //returns how many bits long the bigInt x is, not counting leading zeros
84// function equals(x,y) //is the bigInt x equal to the bigint y? 82// function equals(x,y) //is the bigInt x equal to the bigint y?
85// function equalsInt(x,y) //is bigint x equal to integer y? 83// function equalsInt(x,y) //is bigint x equal to integer y?
86// function greater(x,y) //is x>y? (x and y are nonnegative bigInts) 84// function greater(x,y) //is x>y? (x and y are nonnegative bigInts)
87// function greaterShift(x,y,shift)//is (x <<(shift*bpe)) > y? 85// function greaterShift(x,y,shift)//is (x <<(shift*bpe)) > y?
88// function isZero(x) //is the bigInt x equal to zero? 86// function isZero(x) //is the bigInt x equal to zero?
89// function millerRabin(x,b) //does one round of Miller-Rabin base integer b say that bigInt x is possibly prime (as opposed to definitely composite)? 87// function millerRabin(x,b) //does one round of Miller-Rabin base integer b say that bigInt x is possibly prime (as opposed to definitely composite)?
90// function modInt(x,n) //return x mod n for bigInt x and integer n. 88// function modInt(x,n) //return x mod n for bigInt x and integer n.
91// function negative(x) //is bigInt x negative? 89// function negative(x) //is bigInt x negative?
92// 90//
93// The following functions do not modify their inputs, but allocate memory and call functions with underscores 91// The following functions do not modify their inputs, but allocate memory and call functions with underscores
94// 92//
95// function add(x,y) //return (x+y) for bigInts x and y. 93// function add(x,y) //return (x+y) for bigInts x and y.
96// function addInt(x,n) //return (x+n) where x is a bigInt and n is an integer. 94// function addInt(x,n) //return (x+n) where x is a bigInt and n is an integer.
97// function expand(x,n) //return a copy of x with at least n elements, adding leading zeros if needed 95// function expand(x,n) //return a copy of x with at least n elements, adding leading zeros if needed
98// function inverseMod(x,n) //return (x**(-1) mod n) for bigInts x and n. If no inverse exists, it returns null 96// function inverseMod(x,n) //return (x**(-1) mod n) for bigInts x and n. If no inverse exists, it returns null
99// function mod(x,n) //return a new bigInt equal to (x mod n) for bigInts x and n. 97// function mod(x,n) //return a new bigInt equal to (x mod n) for bigInts x and n.
100// function mult(x,y) //return x*y for bigInts x and y. This is faster when y<x. 98// function mult(x,y) //return x*y for bigInts x and y. This is faster when y<x.
101// function multMod(x,y,n) //return (x*y mod n) for bigInts x,y,n. For greater speed, let y<x. 99// function multMod(x,y,n) //return (x*y mod n) for bigInts x,y,n. For greater speed, let y<x.
102// function powMod(x,y,n) //return (x**y mod n) where x,y,n are bigInts and ** is exponentiation. 0**0=1. Faster for odd n. 100// function powMod(x,y,n) //return (x**y mod n) where x,y,n are bigInts and ** is exponentiation. 0**0=1. Faster for odd n.
103// function randTruePrime(k) //return a new, random, k-bit, true prime using Maurer's algorithm. 101// function randTruePrime(k) //return a new, random, k-bit, true prime using Maurer's algorithm.
104// function sub(x,y) //return (x-y) for bigInts x and y. Negative answers will be 2s complement 102// function sub(x,y) //return (x-y) for bigInts x and y. Negative answers will be 2s complement
105// 103//
106// The following functions write a bigInt result to one of the parameters, but 104// The following functions write a bigInt result to one of the parameters, but
107// the result is never bigger than the original, so there can't be overflow problems: 105// the result is never bigger than the original, so there can't be overflow problems:
108// 106//
109// function divInt_(x,n) //do x=floor(x/n) for bigInt x and integer n, and return the remainder 107// function divInt_(x,n) //do x=floor(x/n) for bigInt x and integer n, and return the remainder
110// function GCD_(x,y) //set x to the greatest common divisor of bigInts x and y, (y is destroyed). 108// function GCD_(x,y) //set x to the greatest common divisor of bigInts x and y, (y is destroyed).
111// function halve_(x) //do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement 109// function halve_(x) //do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement
112// function mod_(x,n) //do x=x mod n for bigInts x and n. 110// function mod_(x,n) //do x=x mod n for bigInts x and n.
113// function rightShift_(x,n) //right shift bigInt x by n bits. 0 <= n < bpe. 111// function rightShift_(x,n) //right shift bigInt x by n bits. 0 <= n < bpe.
114// 112//
115// The following functions write a bigInt result to one of the parameters. The caller is responsible for 113// The following functions write a bigInt result to one of the parameters. The caller is responsible for
116// ensuring it is large enough to hold the result. 114// ensuring it is large enough to hold the result.
117// 115//
118// function addInt_(x,n) //do x=x+n where x is a bigInt and n is an integer 116// function addInt_(x,n) //do x=x+n where x is a bigInt and n is an integer
119// function add_(x,y) //do x=x+y for bigInts x and y 117// function add_(x,y) //do x=x+y for bigInts x and y
120// function addShift_(x,y,ys) //do x=x+(y<<(ys*bpe)) 118// function addShift_(x,y,ys) //do x=x+(y<<(ys*bpe))
121// function copy_(x,y) //do x=y on bigInts x and y 119// function copy_(x,y) //do x=y on bigInts x and y
122// function copyInt_(x,n) //do x=n on bigInt x and integer n 120// function copyInt_(x,n) //do x=n on bigInt x and integer n
123// function carry_(x) //do carries and borrows so each element of the bigInt x fits in bpe bits. 121// function carry_(x) //do carries and borrows so each element of the bigInt x fits in bpe bits.
124// function divide_(x,y,q,r) //divide_ x by y giving quotient q and remainder r 122// function divide_(x,y,q,r) //divide_ x by y giving quotient q and remainder r
125// function eGCD_(x,y,d,a,b) //sets a,b,d to positive big integers such that d = GCD_(x,y) = a*x-b*y 123// function eGCD_(x,y,d,a,b) //sets a,b,d to positive big integers such that d = GCD_(x,y) = a*x-b*y
126// function inverseMod_(x,n) //do x=x**(-1) mod n, for bigInts x and n. Returns 1 (0) if inverse does (doesn't) exist 124// function inverseMod_(x,n) //do x=x**(-1) mod n, for bigInts x and n. Returns 1 (0) if inverse does (doesn't) exist
127// function inverseModInt_(x,n) //return x**(-1) mod n, for integers x and n. Return 0 if there is no inverse 125// function inverseModInt_(x,n) //return x**(-1) mod n, for integers x and n. Return 0 if there is no inverse
128// function leftShift_(x,n) //left shift bigInt x by n bits. n<bpe. 126// function leftShift_(x,n) //left shift bigInt x by n bits. n<bpe.
129// function linComb_(x,y,a,b) //do x=a*x+b*y for bigInts x and y and integers a and b 127// function linComb_(x,y,a,b) //do x=a*x+b*y for bigInts x and y and integers a and b
130// function linCombShift_(x,y,b,ys) //do x=x+b*(y<<(ys*bpe)) for bigInts x and y, and integers b and ys 128// function linCombShift_(x,y,b,ys) //do x=x+b*(y<<(ys*bpe)) for bigInts x and y, and integers b and ys
131// function mont_(x,y,n,np) //Montgomery multiplication (see comments where the function is defined) 129// function mont_(x,y,n,np) //Montgomery multiplication (see comments where the function is defined)
132// function mult_(x,y) //do x=x*y for bigInts x and y. 130// function mult_(x,y) //do x=x*y for bigInts x and y.
133// function multInt_(x,n) //do x=x*n where x is a bigInt and n is an integer. 131// function multInt_(x,n) //do x=x*n where x is a bigInt and n is an integer.
134// function multMod_(x,y,n) //do x=x*y mod n for bigInts x,y,n. 132// function multMod_(x,y,n) //do x=x*y mod n for bigInts x,y,n.
135// function powMod_(x,y,n) //do x=x**y mod n, where x,y,n are bigInts (n is odd) and ** is exponentiation. 0**0=1. 133// function powMod_(x,y,n) //do x=x**y mod n, where x,y,n are bigInts (n is odd) and ** is exponentiation. 0**0=1.
136// function randBigInt_(b,n,s) //do b = an n-bit random BigInt. if s=1, then nth bit (most significant bit) is set to 1. n>=1. 134// function randBigInt_(b,n,s) //do b = an n-bit random BigInt. if s=1, then nth bit (most significant bit) is set to 1. n>=1.
137// function randTruePrime_(ans,k) //do ans = a random k-bit true random prime (not just probable prime) with 1 in the msb. 135// function randTruePrime_(ans,k) //do ans = a random k-bit true random prime (not just probable prime) with 1 in the msb.
138// function squareMod_(x,n) //do x=x*x mod n for bigInts x,n 136// function squareMod_(x,n) //do x=x*x mod n for bigInts x,n
139// function sub_(x,y) //do x=x-y for bigInts x and y. Negative answers will be 2s complement. 137// function sub_(x,y) //do x=x-y for bigInts x and y. Negative answers will be 2s complement.
140// function subShift_(x,y,ys) //do x=x-(y<<(ys*bpe)). Negative answers will be 2s complement. 138// function subShift_(x,y,ys) //do x=x-(y<<(ys*bpe)). Negative answers will be 2s complement.
141// 139//
142// The following functions are based on algorithms from the _Handbook of Applied Cryptography_ 140// The following functions are based on algorithms from the _Handbook of Applied Cryptography_
143// powMod_() = algorithm 14.94, Montgomery exponentiation 141// powMod_() = algorithm 14.94, Montgomery exponentiation
144// eGCD_,inverseMod_() = algorithm 14.61, Binary extended GCD_ 142// eGCD_,inverseMod_() = algorithm 14.61, Binary extended GCD_
145// GCD_() = algorothm 14.57, Lehmer's algorithm 143// GCD_() = algorothm 14.57, Lehmer's algorithm
146// mont_() = algorithm 14.36, Montgomery multiplication 144// mont_() = algorithm 14.36, Montgomery multiplication
147// divide_() = algorithm 14.20 Multiple-precision division 145// divide_() = algorithm 14.20 Multiple-precision division
148// squareMod_() = algorithm 14.16 Multiple-precision squaring 146// squareMod_() = algorithm 14.16 Multiple-precision squaring
149// randTruePrime_() = algorithm 4.62, Maurer's algorithm 147// randTruePrime_() = algorithm 4.62, Maurer's algorithm
150// millerRabin() = algorithm 4.24, Miller-Rabin algorithm 148// millerRabin() = algorithm 4.24, Miller-Rabin algorithm
diff --git a/frontend/beta/js/Clipperz/Crypto/BigInt_scoped.js b/frontend/beta/js/Clipperz/Crypto/BigInt_scoped.js
index f91c7e9..bc60330 100644
--- a/frontend/beta/js/Clipperz/Crypto/BigInt_scoped.js
+++ b/frontend/beta/js/Clipperz/Crypto/BigInt_scoped.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; } 25if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; }
28 26
29if (typeof(Leemon) == 'undefined') { Leemon = {}; } 27if (typeof(Leemon) == 'undefined') { Leemon = {}; }
30if (typeof(Baird.Crypto) == 'undefined') { Baird.Crypto = {}; } 28if (typeof(Baird.Crypto) == 'undefined') { Baird.Crypto = {}; }
31if (typeof(Baird.Crypto.BigInt) == 'undefined') { Baird.Crypto.BigInt = {}; } 29if (typeof(Baird.Crypto.BigInt) == 'undefined') { Baird.Crypto.BigInt = {}; }
32 30
33 31
34//############################################################################# 32//#############################################################################
35 //Downloaded on March 05, 2007 from http://www.leemon.com/crypto/BigInt.js 33 //Downloaded on March 05, 2007 from http://www.leemon.com/crypto/BigInt.js
36//############################################################################# 34//#############################################################################
37 35
38//////////////////////////////////////////////////////////////////////////////////////// 36////////////////////////////////////////////////////////////////////////////////////////
39// Big Integer Library v. 5.0 37// Big Integer Library v. 5.0
40// Created 2000, last modified 2006 38// Created 2000, last modified 2006
41// Leemon Baird 39// Leemon Baird
42// www.leemon.com 40// www.leemon.com
43// 41//
44// This file is public domain. You can use it for any purpose without restriction. 42// This file is public domain. You can use it for any purpose without restriction.
45// I do not guarantee that it is correct, so use it at your own risk. If you use 43// I do not guarantee that it is correct, so use it at your own risk. If you use
46// it for something interesting, I'd appreciate hearing about it. If you find 44// it for something interesting, I'd appreciate hearing about it. If you find
47// any bugs or make any improvements, I'd appreciate hearing about those too. 45// any bugs or make any improvements, I'd appreciate hearing about those too.
48// It would also be nice if my name and address were left in the comments. 46// It would also be nice if my name and address were left in the comments.
49// But none of that is required. 47// But none of that is required.
50// 48//
51// This code defines a bigInt library for arbitrary-precision integers. 49// This code defines a bigInt library for arbitrary-precision integers.
52// A bigInt is an array of integers storing the value in chunks of bpe bits, 50// A bigInt is an array of integers storing the value in chunks of bpe bits,
53// little endian (buff[0] is the least significant word). 51// little endian (buff[0] is the least significant word).
54// Negative bigInts are stored two's complement. 52// Negative bigInts are stored two's complement.
55// Some functions assume their parameters have at least one leading zero element. 53// Some functions assume their parameters have at least one leading zero element.
56// Functions with an underscore at the end of the name have unpredictable behavior in case of overflow, 54// Functions with an underscore at the end of the name have unpredictable behavior in case of overflow,
57// so the caller must make sure overflow won't happen. 55// so the caller must make sure overflow won't happen.
58// For each function where a parameter is modified, that same 56// For each function where a parameter is modified, that same
59// variable must not be used as another argument too. 57// variable must not be used as another argument too.
60// So, you cannot square x by doing multMod_(x,x,n). 58// So, you cannot square x by doing multMod_(x,x,n).
61// You must use squareMod_(x,n) instead, or do y=dup(x); multMod_(x,y,n). 59// You must use squareMod_(x,n) instead, or do y=dup(x); multMod_(x,y,n).
62// 60//
63// These functions are designed to avoid frequent dynamic memory allocation in the inner loop. 61// These functions are designed to avoid frequent dynamic memory allocation in the inner loop.
64// For most functions, if it needs a BigInt as a local variable it will actually use 62// For most functions, if it needs a BigInt as a local variable it will actually use
65// a global, and will only allocate to it when it's not the right size. This ensures 63// a global, and will only allocate to it when it's not the right size. This ensures
66// that when a function is called repeatedly with same-sized parameters, it only allocates 64// that when a function is called repeatedly with same-sized parameters, it only allocates
67// memory on the first call. 65// memory on the first call.
68// 66//
69// Note that for cryptographic purposes, the calls to Math.random() must 67// Note that for cryptographic purposes, the calls to Math.random() must
70// be replaced with calls to a better pseudorandom number generator. 68// be replaced with calls to a better pseudorandom number generator.
71// 69//
72// In the following, "bigInt" means a bigInt with at least one leading zero element, 70// In the following, "bigInt" means a bigInt with at least one leading zero element,
73// and "integer" means a nonnegative integer less than radix. In some cases, integer 71// and "integer" means a nonnegative integer less than radix. In some cases, integer
74// can be negative. Negative bigInts are 2s complement. 72// can be negative. Negative bigInts are 2s complement.
75// 73//
76// The following functions do not modify their inputs, but dynamically allocate memory every time they are called: 74// The following functions do not modify their inputs, but dynamically allocate memory every time they are called:
77// 75//
78// function bigInt2str(x,base) //convert a bigInt into a string in a given base, from base 2 up to base 95 76// function bigInt2str(x,base) //convert a bigInt into a string in a given base, from base 2 up to base 95
79// function dup(x) //returns a copy of bigInt x 77// function dup(x) //returns a copy of bigInt x
80// function findPrimes(n) //return array of all primes less than integer n 78// function findPrimes(n) //return array of all primes less than integer n
81// function int2bigInt(t,n,m) //convert integer t to a bigInt with at least n bits and m array elements 79// function int2bigInt(t,n,m) //convert integer t to a bigInt with at least n bits and m array elements
82// function str2bigInt(s,b,n,m) //convert string s in base b to a bigInt with at least n bits and m array elements 80// function str2bigInt(s,b,n,m) //convert string s in base b to a bigInt with at least n bits and m array elements
83// function trim(x,k) //return a copy of x with exactly k leading zero elements 81// function trim(x,k) //return a copy of x with exactly k leading zero elements
84// 82//
85// The following functions do not modify their inputs, so there is never a problem with the result being too big: 83// The following functions do not modify their inputs, so there is never a problem with the result being too big:
86// 84//
87// function bitSize(x) //returns how many bits long the bigInt x is, not counting leading zeros 85// function bitSize(x) //returns how many bits long the bigInt x is, not counting leading zeros
88// function equals(x,y) //is the bigInt x equal to the bigint y? 86// function equals(x,y) //is the bigInt x equal to the bigint y?
89// function equalsInt(x,y) //is bigint x equal to integer y? 87// function equalsInt(x,y) //is bigint x equal to integer y?
90// function greater(x,y) //is x>y? (x and y are nonnegative bigInts) 88// function greater(x,y) //is x>y? (x and y are nonnegative bigInts)
91// function greaterShift(x,y,shift)//is (x <<(shift*bpe)) > y? 89// function greaterShift(x,y,shift)//is (x <<(shift*bpe)) > y?
92// function isZero(x) //is the bigInt x equal to zero? 90// function isZero(x) //is the bigInt x equal to zero?
93// function millerRabin(x,b) //does one round of Miller-Rabin base integer b say that bigInt x is possibly prime (as opposed to definitely composite)? 91// function millerRabin(x,b) //does one round of Miller-Rabin base integer b say that bigInt x is possibly prime (as opposed to definitely composite)?
94// function modInt(x,n) //return x mod n for bigInt x and integer n. 92// function modInt(x,n) //return x mod n for bigInt x and integer n.
95// function negative(x) //is bigInt x negative? 93// function negative(x) //is bigInt x negative?
96// 94//
97// The following functions do not modify their inputs, but allocate memory and call functions with underscores 95// The following functions do not modify their inputs, but allocate memory and call functions with underscores
98// 96//
99// function add(x,y) //return (x+y) for bigInts x and y. 97// function add(x,y) //return (x+y) for bigInts x and y.
100// function addInt(x,n) //return (x+n) where x is a bigInt and n is an integer. 98// function addInt(x,n) //return (x+n) where x is a bigInt and n is an integer.
101// function expand(x,n) //return a copy of x with at least n elements, adding leading zeros if needed 99// function expand(x,n) //return a copy of x with at least n elements, adding leading zeros if needed
102// function inverseMod(x,n) //return (x**(-1) mod n) for bigInts x and n. If no inverse exists, it returns null 100// function inverseMod(x,n) //return (x**(-1) mod n) for bigInts x and n. If no inverse exists, it returns null
103// function mod(x,n) //return a new bigInt equal to (x mod n) for bigInts x and n. 101// function mod(x,n) //return a new bigInt equal to (x mod n) for bigInts x and n.
104// function mult(x,y) //return x*y for bigInts x and y. This is faster when y<x. 102// function mult(x,y) //return x*y for bigInts x and y. This is faster when y<x.
105// function multMod(x,y,n) //return (x*y mod n) for bigInts x,y,n. For greater speed, let y<x. 103// function multMod(x,y,n) //return (x*y mod n) for bigInts x,y,n. For greater speed, let y<x.
106// function powMod(x,y,n) //return (x**y mod n) where x,y,n are bigInts and ** is exponentiation. 0**0=1. Faster for odd n. 104// function powMod(x,y,n) //return (x**y mod n) where x,y,n are bigInts and ** is exponentiation. 0**0=1. Faster for odd n.
107// function randTruePrime(k) //return a new, random, k-bit, true prime using Maurer's algorithm. 105// function randTruePrime(k) //return a new, random, k-bit, true prime using Maurer's algorithm.
108// function sub(x,y) //return (x-y) for bigInts x and y. Negative answers will be 2s complement 106// function sub(x,y) //return (x-y) for bigInts x and y. Negative answers will be 2s complement
109// 107//
110// The following functions write a bigInt result to one of the parameters, but 108// The following functions write a bigInt result to one of the parameters, but
111// the result is never bigger than the original, so there can't be overflow problems: 109// the result is never bigger than the original, so there can't be overflow problems:
112// 110//
113// function divInt_(x,n) //do x=floor(x/n) for bigInt x and integer n, and return the remainder 111// function divInt_(x,n) //do x=floor(x/n) for bigInt x and integer n, and return the remainder
114// function GCD_(x,y) //set x to the greatest common divisor of bigInts x and y, (y is destroyed). 112// function GCD_(x,y) //set x to the greatest common divisor of bigInts x and y, (y is destroyed).
115// function halve_(x) //do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement 113// function halve_(x) //do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement
116// function mod_(x,n) //do x=x mod n for bigInts x and n. 114// function mod_(x,n) //do x=x mod n for bigInts x and n.
117// function rightShift_(x,n) //right shift bigInt x by n bits. 0 <= n < bpe. 115// function rightShift_(x,n) //right shift bigInt x by n bits. 0 <= n < bpe.
118// 116//
119// The following functions write a bigInt result to one of the parameters. The caller is responsible for 117// The following functions write a bigInt result to one of the parameters. The caller is responsible for
120// ensuring it is large enough to hold the result. 118// ensuring it is large enough to hold the result.
121// 119//
122// function addInt_(x,n) //do x=x+n where x is a bigInt and n is an integer 120// function addInt_(x,n) //do x=x+n where x is a bigInt and n is an integer
123// function add_(x,y) //do x=x+y for bigInts x and y 121// function add_(x,y) //do x=x+y for bigInts x and y
124// function addShift_(x,y,ys) //do x=x+(y<<(ys*bpe)) 122// function addShift_(x,y,ys) //do x=x+(y<<(ys*bpe))
125// function copy_(x,y) //do x=y on bigInts x and y 123// function copy_(x,y) //do x=y on bigInts x and y
126// function copyInt_(x,n) //do x=n on bigInt x and integer n 124// function copyInt_(x,n) //do x=n on bigInt x and integer n
127// function carry_(x) //do carries and borrows so each element of the bigInt x fits in bpe bits. 125// function carry_(x) //do carries and borrows so each element of the bigInt x fits in bpe bits.
128// function divide_(x,y,q,r) //divide_ x by y giving quotient q and remainder r 126// function divide_(x,y,q,r) //divide_ x by y giving quotient q and remainder r
129// function eGCD_(x,y,d,a,b) //sets a,b,d to positive big integers such that d = GCD_(x,y) = a*x-b*y 127// function eGCD_(x,y,d,a,b) //sets a,b,d to positive big integers such that d = GCD_(x,y) = a*x-b*y
130// function inverseMod_(x,n) //do x=x**(-1) mod n, for bigInts x and n. Returns 1 (0) if inverse does (doesn't) exist 128// function inverseMod_(x,n) //do x=x**(-1) mod n, for bigInts x and n. Returns 1 (0) if inverse does (doesn't) exist
131// function inverseModInt_(x,n) //return x**(-1) mod n, for integers x and n. Return 0 if there is no inverse 129// function inverseModInt_(x,n) //return x**(-1) mod n, for integers x and n. Return 0 if there is no inverse
132// function leftShift_(x,n) //left shift bigInt x by n bits. n<bpe. 130// function leftShift_(x,n) //left shift bigInt x by n bits. n<bpe.
133// function linComb_(x,y,a,b) //do x=a*x+b*y for bigInts x and y and integers a and b 131// function linComb_(x,y,a,b) //do x=a*x+b*y for bigInts x and y and integers a and b
134// function linCombShift_(x,y,b,ys) //do x=x+b*(y<<(ys*bpe)) for bigInts x and y, and integers b and ys 132// function linCombShift_(x,y,b,ys) //do x=x+b*(y<<(ys*bpe)) for bigInts x and y, and integers b and ys
135// function mont_(x,y,n,np) //Montgomery multiplication (see comments where the function is defined) 133// function mont_(x,y,n,np) //Montgomery multiplication (see comments where the function is defined)
136// function mult_(x,y) //do x=x*y for bigInts x and y. 134// function mult_(x,y) //do x=x*y for bigInts x and y.
137// function multInt_(x,n) //do x=x*n where x is a bigInt and n is an integer. 135// function multInt_(x,n) //do x=x*n where x is a bigInt and n is an integer.
138// function multMod_(x,y,n) //do x=x*y mod n for bigInts x,y,n. 136// function multMod_(x,y,n) //do x=x*y mod n for bigInts x,y,n.
139// function powMod_(x,y,n) //do x=x**y mod n, where x,y,n are bigInts (n is odd) and ** is exponentiation. 0**0=1. 137// function powMod_(x,y,n) //do x=x**y mod n, where x,y,n are bigInts (n is odd) and ** is exponentiation. 0**0=1.
140// function randBigInt_(b,n,s) //do b = an n-bit random BigInt. if s=1, then nth bit (most significant bit) is set to 1. n>=1. 138// function randBigInt_(b,n,s) //do b = an n-bit random BigInt. if s=1, then nth bit (most significant bit) is set to 1. n>=1.
141// function randTruePrime_(ans,k) //do ans = a random k-bit true random prime (not just probable prime) with 1 in the msb. 139// function randTruePrime_(ans,k) //do ans = a random k-bit true random prime (not just probable prime) with 1 in the msb.
142// function squareMod_(x,n) //do x=x*x mod n for bigInts x,n 140// function squareMod_(x,n) //do x=x*x mod n for bigInts x,n
143// function sub_(x,y) //do x=x-y for bigInts x and y. Negative answers will be 2s complement. 141// function sub_(x,y) //do x=x-y for bigInts x and y. Negative answers will be 2s complement.
144// function subShift_(x,y,ys) //do x=x-(y<<(ys*bpe)). Negative answers will be 2s complement. 142// function subShift_(x,y,ys) //do x=x-(y<<(ys*bpe)). Negative answers will be 2s complement.
145// 143//
146// The following functions are based on algorithms from the _Handbook of Applied Cryptography_ 144// The following functions are based on algorithms from the _Handbook of Applied Cryptography_
147// powMod_() = algorithm 14.94, Montgomery exponentiation 145// powMod_() = algorithm 14.94, Montgomery exponentiation
148// eGCD_,inverseMod_() = algorithm 14.61, Binary extended GCD_ 146// eGCD_,inverseMod_() = algorithm 14.61, Binary extended GCD_
149// GCD_() = algorothm 14.57, Lehmer's algorithm 147// GCD_() = algorothm 14.57, Lehmer's algorithm
150// mont_() = algorithm 14.36, Montgomery multiplication 148// mont_() = algorithm 14.36, Montgomery multiplication
diff --git a/frontend/beta/js/Clipperz/Crypto/ECC.js b/frontend/beta/js/Clipperz/Crypto/ECC.js
index bdfd9be..74eb02f 100644
--- a/frontend/beta/js/Clipperz/Crypto/ECC.js
+++ b/frontend/beta/js/Clipperz/Crypto/ECC.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26/* 24/*
27try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { 25try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) {
28 throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!"; 26 throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!";
29} 27}
30 28
31if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; } 29if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; }
32 30
33 31
34//############################################################################# 32//#############################################################################
35 33
36Clipperz.Crypto.ECC.BinaryField = {}; 34Clipperz.Crypto.ECC.BinaryField = {};
37 35
38//############################################################################# 36//#############################################################################
39 37
40Clipperz.Crypto.ECC.BinaryField.AbstractValue = function(aValue, aBase) { 38Clipperz.Crypto.ECC.BinaryField.AbstractValue = function(aValue, aBase) {
41 return this; 39 return this;
42} 40}
43 41
44Clipperz.Crypto.ECC.BinaryField.AbstractValue.prototype = MochiKit.Base.update(null, { 42Clipperz.Crypto.ECC.BinaryField.AbstractValue.prototype = MochiKit.Base.update(null, {
45 43
46 'asString': function(aBase) { 44 'asString': function(aBase) {
47 throw Clipperz.Base.exception.AbstractMethod; 45 throw Clipperz.Base.exception.AbstractMethod;
48 }, 46 },
49 47
50 'isZero': function() { 48 'isZero': function() {
51 throw Clipperz.Base.exception.AbstractMethod; 49 throw Clipperz.Base.exception.AbstractMethod;
52 }, 50 },
53 51
54 'shiftLeft': function(aNumberOfBitsToShift) { 52 'shiftLeft': function(aNumberOfBitsToShift) {
55 throw Clipperz.Base.exception.AbstractMethod; 53 throw Clipperz.Base.exception.AbstractMethod;
56 }, 54 },
57 55
58 'bitSize': function() { 56 'bitSize': function() {
59 throw Clipperz.Base.exception.AbstractMethod; 57 throw Clipperz.Base.exception.AbstractMethod;
60 }, 58 },
61 59
62 'isBitSet': function(aBitPosition) { 60 'isBitSet': function(aBitPosition) {
63 throw Clipperz.Base.exception.AbstractMethod; 61 throw Clipperz.Base.exception.AbstractMethod;
64 }, 62 },
65 63
66 'xor': function(aValue) { 64 'xor': function(aValue) {
67 throw Clipperz.Base.exception.AbstractMethod; 65 throw Clipperz.Base.exception.AbstractMethod;
68 }, 66 },
69 67
70 'compare': function(aValue) { 68 'compare': function(aValue) {
71 throw Clipperz.Base.exception.AbstractMethod; 69 throw Clipperz.Base.exception.AbstractMethod;
72 }, 70 },
73 71
74 //----------------------------------------------------------------------------- 72 //-----------------------------------------------------------------------------
75 __syntaxFix__: "syntax fix" 73 __syntaxFix__: "syntax fix"
76}); 74});
77 75
78//***************************************************************************** 76//*****************************************************************************
79/ * 77/ *
80Clipperz.Crypto.ECC.BinaryField.BigIntValue = function(aValue, aBase) { 78Clipperz.Crypto.ECC.BinaryField.BigIntValue = function(aValue, aBase) {
81 this._value = new Clipperz.Crypto.BigInt(aValue, aBase); 79 this._value = new Clipperz.Crypto.BigInt(aValue, aBase);
82 return this; 80 return this;
83} 81}
84 82
85Clipperz.Crypto.ECC.BinaryField.BigIntValue.prototype = MochiKit.Base.update(new Clipperz.Crypto.ECC.BinaryField.AbstractValue(), { 83Clipperz.Crypto.ECC.BinaryField.BigIntValue.prototype = MochiKit.Base.update(new Clipperz.Crypto.ECC.BinaryField.AbstractValue(), {
86 84
87 'value': function() { 85 'value': function() {
88 return this._value; 86 return this._value;
89 }, 87 },
90 88
91 //----------------------------------------------------------------------------- 89 //-----------------------------------------------------------------------------
92 90
93 'isZero': function() { 91 'isZero': function() {
94 return (this.value().compare(Clipperz.Crypto.ECC.BinaryField.BigIntValue.O) == 0); 92 return (this.value().compare(Clipperz.Crypto.ECC.BinaryField.BigIntValue.O) == 0);
95 }, 93 },
96 94
97 //----------------------------------------------------------------------------- 95 //-----------------------------------------------------------------------------
98 96
99 'asString': function(aBase) { 97 'asString': function(aBase) {
100 return this.value().asString(aBase); 98 return this.value().asString(aBase);
101 }, 99 },
102 100
103 //----------------------------------------------------------------------------- 101 //-----------------------------------------------------------------------------
104 102
105 'shiftLeft': function(aNumberOfBitsToShift) { 103 'shiftLeft': function(aNumberOfBitsToShift) {
106 return new Clipperz.Crypto.ECC.BinaryField.BigIntValue(this.value().shiftLeft(aNumberOfBitsToShift)); 104 return new Clipperz.Crypto.ECC.BinaryField.BigIntValue(this.value().shiftLeft(aNumberOfBitsToShift));
107 }, 105 },
108 106
109 //----------------------------------------------------------------------------- 107 //-----------------------------------------------------------------------------
110 108
111 'bitSize': function() { 109 'bitSize': function() {
112 return this.value().bitSize(); 110 return this.value().bitSize();
113 }, 111 },
114 112
115 //----------------------------------------------------------------------------- 113 //-----------------------------------------------------------------------------
116 114
117 'isBitSet': function(aBitPosition) { 115 'isBitSet': function(aBitPosition) {
118 return this.value().isBitSet(aBitPosition); 116 return this.value().isBitSet(aBitPosition);
119 }, 117 },
120 118
121 //----------------------------------------------------------------------------- 119 //-----------------------------------------------------------------------------
122 120
123 'xor': function(aValue) { 121 'xor': function(aValue) {
124 return new Clipperz.Crypto.ECC.BinaryField.BigIntValue(this.value().xor(aValue.value())); 122 return new Clipperz.Crypto.ECC.BinaryField.BigIntValue(this.value().xor(aValue.value()));
125 }, 123 },
126 124
127 //----------------------------------------------------------------------------- 125 //-----------------------------------------------------------------------------
128 126
129 'compare': function(aValue) { 127 'compare': function(aValue) {
130 return this.value().compare(aValue.value()); 128 return this.value().compare(aValue.value());
131 }, 129 },
132 130
133 //----------------------------------------------------------------------------- 131 //-----------------------------------------------------------------------------
134 __syntaxFix__: "syntax fix" 132 __syntaxFix__: "syntax fix"
135}); 133});
136 134
137Clipperz.Crypto.ECC.BinaryField.BigIntValue.O = new Clipperz.Crypto.BigInt(0); 135Clipperz.Crypto.ECC.BinaryField.BigIntValue.O = new Clipperz.Crypto.BigInt(0);
138Clipperz.Crypto.ECC.BinaryField.BigIntValue.I = new Clipperz.Crypto.BigInt(1); 136Clipperz.Crypto.ECC.BinaryField.BigIntValue.I = new Clipperz.Crypto.BigInt(1);
139* / 137* /
140//***************************************************************************** 138//*****************************************************************************
141 139
142Clipperz.Crypto.ECC.BinaryField.WordArrayValue = function(aValue, aBase) { 140Clipperz.Crypto.ECC.BinaryField.WordArrayValue = function(aValue, aBase) {
143 if (aValue.constructor == String) { 141 if (aValue.constructor == String) {
144 varvalue; 142 varvalue;
145 varstringLength; 143 varstringLength;
146 var numberOfWords; 144 var numberOfWords;
147 vari,c; 145 vari,c;
148 146
149 if (aBase != 16) { 147 if (aBase != 16) {
150 throw Clipperz.Crypto.ECC.BinaryField.WordArrayValue.exception.UnsupportedBase; 148 throw Clipperz.Crypto.ECC.BinaryField.WordArrayValue.exception.UnsupportedBase;
diff --git a/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Curve.js b/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Curve.js
index 01127c3..c39a075 100644
--- a/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Curve.js
+++ b/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Curve.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) {
27 throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!"; 25 throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!";
28} 26}
29if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; } 27if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; }
30if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; } 28if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; }
31 29
32Clipperz.Crypto.ECC.BinaryField.Curve = function(args) { 30Clipperz.Crypto.ECC.BinaryField.Curve = function(args) {
33 args = args || {}; 31 args = args || {};
34 32
35 this._modulus = args.modulus; 33 this._modulus = args.modulus;
36 34
37 this._a = args.a; 35 this._a = args.a;
38 this._b = args.b; 36 this._b = args.b;
39 this._G = args.G; 37 this._G = args.G;
40 this._r = args.r; 38 this._r = args.r;
41 this._h = args.h; 39 this._h = args.h;
42 40
43 this._finiteField = null; 41 this._finiteField = null;
44 42
45 return this; 43 return this;
46} 44}
47 45
48Clipperz.Crypto.ECC.BinaryField.Curve.prototype = MochiKit.Base.update(null, { 46Clipperz.Crypto.ECC.BinaryField.Curve.prototype = MochiKit.Base.update(null, {
49 47
50 'asString': function() { 48 'asString': function() {
51 return "Clipperz.Crypto.ECC.BinaryField.Curve"; 49 return "Clipperz.Crypto.ECC.BinaryField.Curve";
52 }, 50 },
53 51
54 //----------------------------------------------------------------------------- 52 //-----------------------------------------------------------------------------
55 53
56 'modulus': function() { 54 'modulus': function() {
57 return this._modulus; 55 return this._modulus;
58 }, 56 },
59 57
60 'a': function() { 58 'a': function() {
61 return this._a; 59 return this._a;
62 }, 60 },
63 61
64 'b': function() { 62 'b': function() {
65 return this._b; 63 return this._b;
66 }, 64 },
67 65
68 'G': function() { 66 'G': function() {
69 return this._G; 67 return this._G;
70 }, 68 },
71 69
72 'r': function() { 70 'r': function() {
73 return this._r; 71 return this._r;
74 }, 72 },
75 73
76 'h': function() { 74 'h': function() {
77 return this._h; 75 return this._h;
78 }, 76 },
79 77
80 //----------------------------------------------------------------------------- 78 //-----------------------------------------------------------------------------
81 79
82 'finiteField': function() { 80 'finiteField': function() {
83 if (this._finiteField == null) { 81 if (this._finiteField == null) {
84 this._finiteField = new Clipperz.Crypto.ECC.BinaryField.FiniteField({modulus:this.modulus()}) 82 this._finiteField = new Clipperz.Crypto.ECC.BinaryField.FiniteField({modulus:this.modulus()})
85 } 83 }
86 84
87 return this._finiteField; 85 return this._finiteField;
88 }, 86 },
89 87
90 //----------------------------------------------------------------------------- 88 //-----------------------------------------------------------------------------
91 89
92 'negate': function(aPointA) { 90 'negate': function(aPointA) {
93 var result; 91 var result;
94 92
95 result = new Clipperz.Crypto.ECC.Point({x:aPointA.x(), y:this.finiteField().add(aPointA.y(), aPointA.x())}) 93 result = new Clipperz.Crypto.ECC.Point({x:aPointA.x(), y:this.finiteField().add(aPointA.y(), aPointA.x())})
96 94
97 return result; 95 return result;
98 }, 96 },
99 97
100 //----------------------------------------------------------------------------- 98 //-----------------------------------------------------------------------------
101 99
102 'add': function(aPointA, aPointB) { 100 'add': function(aPointA, aPointB) {
103 var result; 101 var result;
104 102
105//console.log(">>> ECC.BinaryField.Curve.add"); 103//console.log(">>> ECC.BinaryField.Curve.add");
106 if (aPointA.isZero()) { 104 if (aPointA.isZero()) {
107//console.log("--- pointA == zero"); 105//console.log("--- pointA == zero");
108 result = aPointB; 106 result = aPointB;
109 } else if (aPointB.isZero()) { 107 } else if (aPointB.isZero()) {
110//console.log("--- pointB == zero"); 108//console.log("--- pointB == zero");
111 result = aPointA; 109 result = aPointA;
112 } else if ((aPointA.x().compare(aPointB.x()) == 0) && ((aPointA.y().compare(aPointB.y()) != 0) || aPointB.x().isZero())) { 110 } else if ((aPointA.x().compare(aPointB.x()) == 0) && ((aPointA.y().compare(aPointB.y()) != 0) || aPointB.x().isZero())) {
113//console.log("compare A.x - B.x: ", aPointA.x().compare(aPointB.x())); 111//console.log("compare A.x - B.x: ", aPointA.x().compare(aPointB.x()));
114//console.log("compare A.y - B.y: ", (aPointA.y().compare(aPointB.y()) != 0)); 112//console.log("compare A.y - B.y: ", (aPointA.y().compare(aPointB.y()) != 0));
115//console.log("compare B.x.isZero(): ", aPointB.x().isZero()); 113//console.log("compare B.x.isZero(): ", aPointB.x().isZero());
116 114
117//console.log("--- result = zero"); 115//console.log("--- result = zero");
118 result = new Clipperz.Crypto.ECC.BinaryField.Point({x:Clipperz.Crypto.ECC.BinaryField.Value.O, y:Clipperz.Crypto.ECC.BinaryField.Value.O}); 116 result = new Clipperz.Crypto.ECC.BinaryField.Point({x:Clipperz.Crypto.ECC.BinaryField.Value.O, y:Clipperz.Crypto.ECC.BinaryField.Value.O});
119 } else { 117 } else {
120//console.log("--- result = ELSE"); 118//console.log("--- result = ELSE");
121 varf2m; 119 varf2m;
122 var x, y; 120 var x, y;
123 var lambda; 121 var lambda;
124 var aX, aY, bX, bY; 122 var aX, aY, bX, bY;
125 123
126 aX = aPointA.x()._value; 124 aX = aPointA.x()._value;
127 aY = aPointA.y()._value; 125 aY = aPointA.y()._value;
128 bX = aPointB.x()._value; 126 bX = aPointB.x()._value;
129 bY = aPointB.y()._value; 127 bY = aPointB.y()._value;
130 128
131 f2m = this.finiteField(); 129 f2m = this.finiteField();
132 130
133 if (aPointA.x().compare(aPointB.x()) != 0) { 131 if (aPointA.x().compare(aPointB.x()) != 0) {
134//console.log(" a.x != b.x"); 132//console.log(" a.x != b.x");
135 lambda =f2m._fastMultiply( 133 lambda =f2m._fastMultiply(
136 f2m._add(aY, bY), 134 f2m._add(aY, bY),
137 f2m._inverse(f2m._add(aX, bX)) 135 f2m._inverse(f2m._add(aX, bX))
138 ); 136 );
139 x = f2m._add(this.a()._value, f2m._square(lambda)); 137 x = f2m._add(this.a()._value, f2m._square(lambda));
140 f2m._overwriteAdd(x, lambda); 138 f2m._overwriteAdd(x, lambda);
141 f2m._overwriteAdd(x, aX); 139 f2m._overwriteAdd(x, aX);
142 f2m._overwriteAdd(x, bX); 140 f2m._overwriteAdd(x, bX);
143 } else { 141 } else {
144//console.log(" a.x == b.x"); 142//console.log(" a.x == b.x");
145 lambda = f2m._add(bX, f2m._fastMultiply(bY, f2m._inverse(bX))); 143 lambda = f2m._add(bX, f2m._fastMultiply(bY, f2m._inverse(bX)));
146//console.log(" lambda: " + lambda.asString(16)); 144//console.log(" lambda: " + lambda.asString(16));
147 x = f2m._add(this.a()._value, f2m._square(lambda)); 145 x = f2m._add(this.a()._value, f2m._square(lambda));
148//console.log(" x (step 1): " + x.asString(16)); 146//console.log(" x (step 1): " + x.asString(16));
149 f2m._overwriteAdd(x, lambda); 147 f2m._overwriteAdd(x, lambda);
150//console.log(" x (step 2): " + x.asString(16)); 148//console.log(" x (step 2): " + x.asString(16));
diff --git a/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js b/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js
index 650b479..de1e6a8 100644
--- a/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js
+++ b/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) {
27 throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!"; 25 throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!";
28} 26}
29if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; } 27if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; }
30if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; } 28if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; }
31 29
32Clipperz.Crypto.ECC.BinaryField.FiniteField = function(args) { 30Clipperz.Crypto.ECC.BinaryField.FiniteField = function(args) {
33 args = args || {}; 31 args = args || {};
34 this._modulus = args.modulus; 32 this._modulus = args.modulus;
35 33
36 return this; 34 return this;
37} 35}
38 36
39Clipperz.Crypto.ECC.BinaryField.FiniteField.prototype = MochiKit.Base.update(null, { 37Clipperz.Crypto.ECC.BinaryField.FiniteField.prototype = MochiKit.Base.update(null, {
40 38
41 'asString': function() { 39 'asString': function() {
42 return "Clipperz.Crypto.ECC.BinaryField.FiniteField (" + this.modulus().asString() + ")"; 40 return "Clipperz.Crypto.ECC.BinaryField.FiniteField (" + this.modulus().asString() + ")";
43 }, 41 },
44 42
45 //----------------------------------------------------------------------------- 43 //-----------------------------------------------------------------------------
46 44
47 'modulus': function() { 45 'modulus': function() {
48 return this._modulus; 46 return this._modulus;
49 }, 47 },
50 48
51 //----------------------------------------------------------------------------- 49 //-----------------------------------------------------------------------------
52 50
53 '_module': function(aValue) { 51 '_module': function(aValue) {
54 varresult; 52 varresult;
55 var modulusComparison; 53 var modulusComparison;
56//console.log(">>> binaryField.finiteField.(standard)module"); 54//console.log(">>> binaryField.finiteField.(standard)module");
57 55
58 modulusComparison = Clipperz.Crypto.ECC.BinaryField.Value._compare(aValue, this.modulus()._value); 56 modulusComparison = Clipperz.Crypto.ECC.BinaryField.Value._compare(aValue, this.modulus()._value);
59 57
60 if (modulusComparison < 0) { 58 if (modulusComparison < 0) {
61 result = aValue; 59 result = aValue;
62 } else if (modulusComparison == 0) { 60 } else if (modulusComparison == 0) {
63 result = [0]; 61 result = [0];
64 } else { 62 } else {
65 var modulusBitSize; 63 var modulusBitSize;
66 var resultBitSize; 64 var resultBitSize;
67 65
68 result = aValue; 66 result = aValue;
69 67
70 modulusBitSize = this.modulus().bitSize(); 68 modulusBitSize = this.modulus().bitSize();
71 resultBitSize = Clipperz.Crypto.ECC.BinaryField.Value._bitSize(result); 69 resultBitSize = Clipperz.Crypto.ECC.BinaryField.Value._bitSize(result);
72 while (resultBitSize >= modulusBitSize) { 70 while (resultBitSize >= modulusBitSize) {
73 Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(result, Clipperz.Crypto.ECC.BinaryField.Value._shiftLeft(this.modulus()._value, resultBitSize - modulusBitSize)); 71 Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(result, Clipperz.Crypto.ECC.BinaryField.Value._shiftLeft(this.modulus()._value, resultBitSize - modulusBitSize));
74 resultBitSize = Clipperz.Crypto.ECC.BinaryField.Value._bitSize(result); 72 resultBitSize = Clipperz.Crypto.ECC.BinaryField.Value._bitSize(result);
75 } 73 }
76 } 74 }
77//console.log("<<< binaryField.finiteField.(standard)module"); 75//console.log("<<< binaryField.finiteField.(standard)module");
78 76
79 return result; 77 return result;
80 }, 78 },
81 79
82 'module': function(aValue) { 80 'module': function(aValue) {
83 return new Clipperz.Crypto.ECC.BinaryField.Value(this._module(aValue._value.slice(0))); 81 return new Clipperz.Crypto.ECC.BinaryField.Value(this._module(aValue._value.slice(0)));
84 }, 82 },
85 83
86 //----------------------------------------------------------------------------- 84 //-----------------------------------------------------------------------------
87 85
88 '_add': function(a, b) { 86 '_add': function(a, b) {
89 return Clipperz.Crypto.ECC.BinaryField.Value._xor(a, b); 87 return Clipperz.Crypto.ECC.BinaryField.Value._xor(a, b);
90 }, 88 },
91 89
92 '_overwriteAdd': function(a, b) { 90 '_overwriteAdd': function(a, b) {
93 Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(a, b); 91 Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(a, b);
94 }, 92 },
95 93
96 'add': function(a, b) { 94 'add': function(a, b) {
97 return new Clipperz.Crypto.ECC.BinaryField.Value(this._add(a._value, b._value)); 95 return new Clipperz.Crypto.ECC.BinaryField.Value(this._add(a._value, b._value));
98 }, 96 },
99 97
100 //----------------------------------------------------------------------------- 98 //-----------------------------------------------------------------------------
101 99
102 'negate': function(aValue) { 100 'negate': function(aValue) {
103 return aValue.clone(); 101 return aValue.clone();
104 }, 102 },
105 103
106 //----------------------------------------------------------------------------- 104 //-----------------------------------------------------------------------------
107 105
108 '_multiply': function(a, b) { 106 '_multiply': function(a, b) {
109 var result; 107 var result;
110 var valueToXor; 108 var valueToXor;
111 var i,c; 109 var i,c;
112 110
113 result = [0]; 111 result = [0];
114 valueToXor = b; 112 valueToXor = b;
115 c = Clipperz.Crypto.ECC.BinaryField.Value._bitSize(a); 113 c = Clipperz.Crypto.ECC.BinaryField.Value._bitSize(a);
116 for (i=0; i<c; i++) { 114 for (i=0; i<c; i++) {
117 if (Clipperz.Crypto.ECC.BinaryField.Value._isBitSet(a, i) === true) { 115 if (Clipperz.Crypto.ECC.BinaryField.Value._isBitSet(a, i) === true) {
118 Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(result, valueToXor); 116 Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(result, valueToXor);
119 } 117 }
120 valueToXor = Clipperz.Crypto.ECC.BinaryField.Value._overwriteShiftLeft(valueToXor, 1); 118 valueToXor = Clipperz.Crypto.ECC.BinaryField.Value._overwriteShiftLeft(valueToXor, 1);
121 } 119 }
122 result = this._module(result); 120 result = this._module(result);
123 121
124 return result; 122 return result;
125 }, 123 },
126 124
127 'multiply': function(a, b) { 125 'multiply': function(a, b) {
128 return new Clipperz.Crypto.ECC.BinaryField.Value(this._multiply(a._value, b._value)); 126 return new Clipperz.Crypto.ECC.BinaryField.Value(this._multiply(a._value, b._value));
129 }, 127 },
130 128
131 //----------------------------------------------------------------------------- 129 //-----------------------------------------------------------------------------
132 130
133 '_fastMultiply': function(a, b) { 131 '_fastMultiply': function(a, b) {
134 var result; 132 var result;
135 var B; 133 var B;
136 var i,c; 134 var i,c;
137 135
138 result = [0]; 136 result = [0];
139 B = b.slice(0); //Is this array copy avoidable? 137 B = b.slice(0); //Is this array copy avoidable?
140 c = 32; 138 c = 32;
141 for (i=0; i<c; i++) { 139 for (i=0; i<c; i++) {
142 var ii, cc; 140 var ii, cc;
143 141
144 cc = a.length; 142 cc = a.length;
145 for (ii=0; ii<cc; ii++) { 143 for (ii=0; ii<cc; ii++) {
146 if (((a[ii] >>> i) & 0x01) == 1) { 144 if (((a[ii] >>> i) & 0x01) == 1) {
147 Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(result, B, ii); 145 Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(result, B, ii);
148 } 146 }
149 } 147 }
150 148
diff --git a/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Point.js b/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Point.js
index 6661839..c5db6c6 100644
--- a/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Point.js
+++ b/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Point.js
@@ -1,64 +1,62 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) {
27 throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!"; 25 throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!";
28} 26}
29if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; } 27if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; }
30if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; } 28if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; }
31 29
32Clipperz.Crypto.ECC.BinaryField.Point = function(args) { 30Clipperz.Crypto.ECC.BinaryField.Point = function(args) {
33 args = args || {}; 31 args = args || {};
34 this._x = args.x; 32 this._x = args.x;
35 this._y = args.y; 33 this._y = args.y;
36 34
37 return this; 35 return this;
38} 36}
39 37
40Clipperz.Crypto.ECC.BinaryField.Point.prototype = MochiKit.Base.update(null, { 38Clipperz.Crypto.ECC.BinaryField.Point.prototype = MochiKit.Base.update(null, {
41 39
42 'asString': function() { 40 'asString': function() {
43 return "Clipperz.Crypto.ECC.BinaryField.Point (" + this.x() + ", " + this.y() + ")"; 41 return "Clipperz.Crypto.ECC.BinaryField.Point (" + this.x() + ", " + this.y() + ")";
44 }, 42 },
45 43
46 //----------------------------------------------------------------------------- 44 //-----------------------------------------------------------------------------
47 45
48 'x': function() { 46 'x': function() {
49 return this._x; 47 return this._x;
50 }, 48 },
51 49
52 'y': function() { 50 'y': function() {
53 return this._y; 51 return this._y;
54 }, 52 },
55 53
56 //----------------------------------------------------------------------------- 54 //-----------------------------------------------------------------------------
57 55
58 'isZero': function() { 56 'isZero': function() {
59 return (this.x().isZero() && this.y().isZero()) 57 return (this.x().isZero() && this.y().isZero())
60 }, 58 },
61 59
62 //----------------------------------------------------------------------------- 60 //-----------------------------------------------------------------------------
63 __syntaxFix__: "syntax fix" 61 __syntaxFix__: "syntax fix"
64}); 62});
diff --git a/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Value.js b/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Value.js
index b5beafa..278c299 100644
--- a/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Value.js
+++ b/frontend/beta/js/Clipperz/Crypto/ECC/BinaryField/Value.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) {
27 throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!"; 25 throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!";
28} 26}
29if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; } 27if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; }
30if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; } 28if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; }
31 29
32Clipperz.Crypto.ECC.BinaryField.Value = function(aValue, aBase) { 30Clipperz.Crypto.ECC.BinaryField.Value = function(aValue, aBase) {
33 if (aValue.constructor == String) { 31 if (aValue.constructor == String) {
34 varvalue; 32 varvalue;
35 varstringLength; 33 varstringLength;
36 var numberOfWords; 34 var numberOfWords;
37 vari,c; 35 vari,c;
38 36
39 if (aBase != 16) { 37 if (aBase != 16) {
40 throw Clipperz.Crypto.ECC.BinaryField.Value.exception.UnsupportedBase; 38 throw Clipperz.Crypto.ECC.BinaryField.Value.exception.UnsupportedBase;
41 } 39 }
42 40
43 value = aValue.replace(/ /g, ''); 41 value = aValue.replace(/ /g, '');
44 stringLength = value.length; 42 stringLength = value.length;
45 numberOfWords = Math.ceil(stringLength / 8); 43 numberOfWords = Math.ceil(stringLength / 8);
46 this._value = new Array(numberOfWords); 44 this._value = new Array(numberOfWords);
47 45
48 c = numberOfWords; 46 c = numberOfWords;
49 for (i=0; i<c; i++) { 47 for (i=0; i<c; i++) {
50 varword; 48 varword;
51 49
52 if (i < (c-1)) { 50 if (i < (c-1)) {
53 word = parseInt(value.substr(stringLength-((i+1)*8), 8), 16); 51 word = parseInt(value.substr(stringLength-((i+1)*8), 8), 16);
54 } else { 52 } else {
55 word = parseInt(value.substr(0, stringLength-(i*8)), 16); 53 word = parseInt(value.substr(0, stringLength-(i*8)), 16);
56 } 54 }
57 55
58 this._value[i] = word; 56 this._value[i] = word;
59 } 57 }
60 } else if (aValue.constructor == Array) { 58 } else if (aValue.constructor == Array) {
61 var itemsToCopy; 59 var itemsToCopy;
62 60
63 itemsToCopy = aValue.length; 61 itemsToCopy = aValue.length;
64 while (aValue[itemsToCopy - 1] == 0) { 62 while (aValue[itemsToCopy - 1] == 0) {
65 itemsToCopy --; 63 itemsToCopy --;
66 } 64 }
67 65
68 this._value = aValue.slice(0, itemsToCopy); 66 this._value = aValue.slice(0, itemsToCopy);
69 } else if (aValue.constructor == Number) { 67 } else if (aValue.constructor == Number) {
70 this._value = [aValue]; 68 this._value = [aValue];
71 } else { 69 } else {
72 // throw Clipperz.Crypto.ECC.BinaryField.Value.exception.UnsupportedConstructorValueType; 70 // throw Clipperz.Crypto.ECC.BinaryField.Value.exception.UnsupportedConstructorValueType;
73 } 71 }
74 72
75 return this; 73 return this;
76} 74}
77 75
78Clipperz.Crypto.ECC.BinaryField.Value.prototype = MochiKit.Base.update(null, { 76Clipperz.Crypto.ECC.BinaryField.Value.prototype = MochiKit.Base.update(null, {
79 77
80 'value': function() { 78 'value': function() {
81 return this._value; 79 return this._value;
82 }, 80 },
83 81
84 //----------------------------------------------------------------------------- 82 //-----------------------------------------------------------------------------
85 83
86 'wordSize': function() { 84 'wordSize': function() {
87 return this._value.length 85 return this._value.length
88 }, 86 },
89 87
90 //----------------------------------------------------------------------------- 88 //-----------------------------------------------------------------------------
91 89
92 'clone': function() { 90 'clone': function() {
93 return new Clipperz.Crypto.ECC.BinaryField.Value(this._value.slice(0)); 91 return new Clipperz.Crypto.ECC.BinaryField.Value(this._value.slice(0));
94 }, 92 },
95 93
96 //----------------------------------------------------------------------------- 94 //-----------------------------------------------------------------------------
97 95
98 'isZero': function() { 96 'isZero': function() {
99 return (this.compare(Clipperz.Crypto.ECC.BinaryField.Value.O) == 0); 97 return (this.compare(Clipperz.Crypto.ECC.BinaryField.Value.O) == 0);
100 }, 98 },
101 99
102 //----------------------------------------------------------------------------- 100 //-----------------------------------------------------------------------------
103 101
104 'asString': function(aBase) { 102 'asString': function(aBase) {
105 varresult; 103 varresult;
106 var i,c; 104 var i,c;
107 105
108 if (aBase != 16) { 106 if (aBase != 16) {
109 throw Clipperz.Crypto.ECC.BinaryField.Value.exception.UnsupportedBase; 107 throw Clipperz.Crypto.ECC.BinaryField.Value.exception.UnsupportedBase;
110 } 108 }
111 109
112 result = ""; 110 result = "";
113 c = this.wordSize(); 111 c = this.wordSize();
114 for (i=0; i<c; i++) { 112 for (i=0; i<c; i++) {
115 varwordAsString; 113 varwordAsString;
116 114
117 // wordAsString = ("00000000" + this.value()[i].toString(16)); 115 // wordAsString = ("00000000" + this.value()[i].toString(16));
118 wordAsString = ("00000000" + this._value[i].toString(16)); 116 wordAsString = ("00000000" + this._value[i].toString(16));
119 wordAsString = wordAsString.substring(wordAsString.length - 8); 117 wordAsString = wordAsString.substring(wordAsString.length - 8);
120 result = wordAsString + result; 118 result = wordAsString + result;
121 } 119 }
122 120
123 result = result.replace(/^(00)*/, ""); 121 result = result.replace(/^(00)*/, "");
124 122
125 if (result == "") { 123 if (result == "") {
126 result = "0"; 124 result = "0";
127 } 125 }
128 126
129 return result; 127 return result;
130 }, 128 },
131 129
132 //----------------------------------------------------------------------------- 130 //-----------------------------------------------------------------------------
133 131
134 'shiftLeft': function(aNumberOfBitsToShift) { 132 'shiftLeft': function(aNumberOfBitsToShift) {
135 return new Clipperz.Crypto.ECC.BinaryField.Value(Clipperz.Crypto.ECC.BinaryField.Value._shiftLeft(this._value, aNumberOfBitsToShift)); 133 return new Clipperz.Crypto.ECC.BinaryField.Value(Clipperz.Crypto.ECC.BinaryField.Value._shiftLeft(this._value, aNumberOfBitsToShift));
136 }, 134 },
137 135
138 //----------------------------------------------------------------------------- 136 //-----------------------------------------------------------------------------
139 137
140 'bitSize': function() { 138 'bitSize': function() {
141 return Clipperz.Crypto.ECC.BinaryField.Value._bitSize(this._value); 139 return Clipperz.Crypto.ECC.BinaryField.Value._bitSize(this._value);
142 }, 140 },
143 141
144 //----------------------------------------------------------------------------- 142 //-----------------------------------------------------------------------------
145 143
146 'isBitSet': function(aBitPosition) { 144 'isBitSet': function(aBitPosition) {
147 return Clipperz.Crypto.ECC.BinaryField.Value._isBitSet(this._value, aBitPosition); 145 return Clipperz.Crypto.ECC.BinaryField.Value._isBitSet(this._value, aBitPosition);
148 }, 146 },
149 147
150 //----------------------------------------------------------------------------- 148 //-----------------------------------------------------------------------------
diff --git a/frontend/beta/js/Clipperz/Crypto/PRNG.js b/frontend/beta/js/Clipperz/Crypto/PRNG.js
index 39d0045..b5c3f8a 100644
--- a/frontend/beta/js/Clipperz/Crypto/PRNG.js
+++ b/frontend/beta/js/Clipperz/Crypto/PRNG.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) {
27 throw "Clipperz.Crypto.PRNG depends on Clipperz.ByteArray!"; 25 throw "Clipperz.Crypto.PRNG depends on Clipperz.ByteArray!";
28} 26}
29 27
30try { if (typeof(Clipperz.Crypto.SHA) == 'undefined') { throw ""; }} catch (e) { 28try { if (typeof(Clipperz.Crypto.SHA) == 'undefined') { throw ""; }} catch (e) {
31 throw "Clipperz.Crypto.PRNG depends on Clipperz.Crypto.SHA!"; 29 throw "Clipperz.Crypto.PRNG depends on Clipperz.Crypto.SHA!";
32} 30}
33 31
34try { if (typeof(Clipperz.Crypto.AES) == 'undefined') { throw ""; }} catch (e) { 32try { if (typeof(Clipperz.Crypto.AES) == 'undefined') { throw ""; }} catch (e) {
35 throw "Clipperz.Crypto.PRNG depends on Clipperz.Crypto.AES!"; 33 throw "Clipperz.Crypto.PRNG depends on Clipperz.Crypto.AES!";
36} 34}
37 35
38if (typeof(Clipperz.Crypto.PRNG) == 'undefined') { Clipperz.Crypto.PRNG = {}; } 36if (typeof(Clipperz.Crypto.PRNG) == 'undefined') { Clipperz.Crypto.PRNG = {}; }
39 37
40//############################################################################# 38//#############################################################################
41 39
42Clipperz.Crypto.PRNG.EntropyAccumulator = function(args) { 40Clipperz.Crypto.PRNG.EntropyAccumulator = function(args) {
43 args = args || {}; 41 args = args || {};
44 //MochiKit.Base.bindMethods(this); 42 //MochiKit.Base.bindMethods(this);
45 43
46 this._stack = new Clipperz.ByteArray(); 44 this._stack = new Clipperz.ByteArray();
47 this._maxStackLengthBeforeHashing = args.maxStackLengthBeforeHashing || 256; 45 this._maxStackLengthBeforeHashing = args.maxStackLengthBeforeHashing || 256;
48 return this; 46 return this;
49} 47}
50 48
51Clipperz.Crypto.PRNG.EntropyAccumulator.prototype = MochiKit.Base.update(null, { 49Clipperz.Crypto.PRNG.EntropyAccumulator.prototype = MochiKit.Base.update(null, {
52 50
53 'toString': function() { 51 'toString': function() {
54 return "Clipperz.Crypto.PRNG.EntropyAccumulator"; 52 return "Clipperz.Crypto.PRNG.EntropyAccumulator";
55 }, 53 },
56 54
57 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
58 56
59 'stack': function() { 57 'stack': function() {
60 return this._stack; 58 return this._stack;
61 }, 59 },
62 60
63 'setStack': function(aValue) { 61 'setStack': function(aValue) {
64 this._stack = aValue; 62 this._stack = aValue;
65 }, 63 },
66 64
67 'resetStack': function() { 65 'resetStack': function() {
68 this.stack().reset(); 66 this.stack().reset();
69 }, 67 },
70 68
71 'maxStackLengthBeforeHashing': function() { 69 'maxStackLengthBeforeHashing': function() {
72 return this._maxStackLengthBeforeHashing; 70 return this._maxStackLengthBeforeHashing;
73 }, 71 },
74 72
75 //------------------------------------------------------------------------- 73 //-------------------------------------------------------------------------
76 74
77 'addRandomByte': function(aValue) { 75 'addRandomByte': function(aValue) {
78 this.stack().appendByte(aValue); 76 this.stack().appendByte(aValue);
79 77
80 if (this.stack().length() > this.maxStackLengthBeforeHashing()) { 78 if (this.stack().length() > this.maxStackLengthBeforeHashing()) {
81 this.setStack(Clipperz.Crypto.SHA.sha_d256(this.stack())); 79 this.setStack(Clipperz.Crypto.SHA.sha_d256(this.stack()));
82 } 80 }
83 }, 81 },
84 82
85 //------------------------------------------------------------------------- 83 //-------------------------------------------------------------------------
86 __syntaxFix__: "syntax fix" 84 __syntaxFix__: "syntax fix"
87}); 85});
88 86
89//############################################################################# 87//#############################################################################
90 88
91Clipperz.Crypto.PRNG.RandomnessSource = function(args) { 89Clipperz.Crypto.PRNG.RandomnessSource = function(args) {
92 args = args || {}; 90 args = args || {};
93 MochiKit.Base.bindMethods(this); 91 MochiKit.Base.bindMethods(this);
94 92
95 this._generator = args.generator || null; 93 this._generator = args.generator || null;
96 this._sourceId = args.sourceId || null; 94 this._sourceId = args.sourceId || null;
97 this._boostMode = args.boostMode || false; 95 this._boostMode = args.boostMode || false;
98 96
99 this._nextPoolIndex = 0; 97 this._nextPoolIndex = 0;
100 98
101 return this; 99 return this;
102} 100}
103 101
104Clipperz.Crypto.PRNG.RandomnessSource.prototype = MochiKit.Base.update(null, { 102Clipperz.Crypto.PRNG.RandomnessSource.prototype = MochiKit.Base.update(null, {
105 103
106 'generator': function() { 104 'generator': function() {
107 return this._generator; 105 return this._generator;
108 }, 106 },
109 107
110 'setGenerator': function(aValue) { 108 'setGenerator': function(aValue) {
111 this._generator = aValue; 109 this._generator = aValue;
112 }, 110 },
113 111
114 //------------------------------------------------------------------------- 112 //-------------------------------------------------------------------------
115 113
116 'boostMode': function() { 114 'boostMode': function() {
117 return this._boostMode; 115 return this._boostMode;
118 }, 116 },
119 117
120 'setBoostMode': function(aValue) { 118 'setBoostMode': function(aValue) {
121 this._boostMode = aValue; 119 this._boostMode = aValue;
122 }, 120 },
123 121
124 //------------------------------------------------------------------------- 122 //-------------------------------------------------------------------------
125 123
126 'sourceId': function() { 124 'sourceId': function() {
127 return this._sourceId; 125 return this._sourceId;
128 }, 126 },
129 127
130 'setSourceId': function(aValue) { 128 'setSourceId': function(aValue) {
131 this._sourceId = aValue; 129 this._sourceId = aValue;
132 }, 130 },
133 131
134 //------------------------------------------------------------------------- 132 //-------------------------------------------------------------------------
135 133
136 'nextPoolIndex': function() { 134 'nextPoolIndex': function() {
137 return this._nextPoolIndex; 135 return this._nextPoolIndex;
138 }, 136 },
139 137
140 'incrementNextPoolIndex': function() { 138 'incrementNextPoolIndex': function() {
141 this._nextPoolIndex = ((this._nextPoolIndex + 1) % this.generator().numberOfEntropyAccumulators()); 139 this._nextPoolIndex = ((this._nextPoolIndex + 1) % this.generator().numberOfEntropyAccumulators());
142 }, 140 },
143 141
144 //------------------------------------------------------------------------- 142 //-------------------------------------------------------------------------
145 143
146 'updateGeneratorWithValue': function(aRandomValue) { 144 'updateGeneratorWithValue': function(aRandomValue) {
147 if (this.generator() != null) { 145 if (this.generator() != null) {
148 this.generator().addRandomByte(this.sourceId(), this.nextPoolIndex(), aRandomValue); 146 this.generator().addRandomByte(this.sourceId(), this.nextPoolIndex(), aRandomValue);
149 this.incrementNextPoolIndex(); 147 this.incrementNextPoolIndex();
150 } 148 }
diff --git a/frontend/beta/js/Clipperz/Crypto/RSA.js b/frontend/beta/js/Clipperz/Crypto/RSA.js
index 6844dba..5a480f1 100644
--- a/frontend/beta/js/Clipperz/Crypto/RSA.js
+++ b/frontend/beta/js/Clipperz/Crypto/RSA.js
@@ -1,148 +1,146 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26try { if (typeof(Clipperz.Crypto.BigInt) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.Crypto.BigInt) == 'undefined') { throw ""; }} catch (e) {
27 throw "Clipperz.Crypto.RSA depends on Clipperz.Crypto.BigInt!"; 25 throw "Clipperz.Crypto.RSA depends on Clipperz.Crypto.BigInt!";
28} 26}
29 27
30if (typeof(Clipperz.Crypto.RSA) == 'undefined') { Clipperz.Crypto.RSA = {}; } 28if (typeof(Clipperz.Crypto.RSA) == 'undefined') { Clipperz.Crypto.RSA = {}; }
31 29
32Clipperz.Crypto.RSA.VERSION = "0.1"; 30Clipperz.Crypto.RSA.VERSION = "0.1";
33Clipperz.Crypto.RSA.NAME = "Clipperz.RSA"; 31Clipperz.Crypto.RSA.NAME = "Clipperz.RSA";
34 32
35//############################################################################# 33//#############################################################################
36 34
37MochiKit.Base.update(Clipperz.Crypto.RSA, { 35MochiKit.Base.update(Clipperz.Crypto.RSA, {
38 36
39 //------------------------------------------------------------------------- 37 //-------------------------------------------------------------------------
40 38
41 'publicKeyWithValues': function (e, d, n) { 39 'publicKeyWithValues': function (e, d, n) {
42 varresult; 40 varresult;
43 41
44 result = {}; 42 result = {};
45 43
46 if (e.isBigInt) { 44 if (e.isBigInt) {
47 result.e = e; 45 result.e = e;
48 } else { 46 } else {
49 result.e = new Clipperz.Crypto.BigInt(e, 16); 47 result.e = new Clipperz.Crypto.BigInt(e, 16);
50 } 48 }
51 49
52 if (d.isBigInt) { 50 if (d.isBigInt) {
53 result.d = d; 51 result.d = d;
54 } else { 52 } else {
55 result.d = new Clipperz.Crypto.BigInt(d, 16); 53 result.d = new Clipperz.Crypto.BigInt(d, 16);
56 } 54 }
57 55
58 if (n.isBigInt) { 56 if (n.isBigInt) {
59 result.n = n; 57 result.n = n;
60 } else { 58 } else {
61 result.n = new Clipperz.Crypto.BigInt(n, 16); 59 result.n = new Clipperz.Crypto.BigInt(n, 16);
62 } 60 }
63 61
64 return result; 62 return result;
65 }, 63 },
66 64
67 'privateKeyWithValues': function(e, d, n) { 65 'privateKeyWithValues': function(e, d, n) {
68 return Clipperz.Crypto.RSA.publicKeyWithValues(e, d, n); 66 return Clipperz.Crypto.RSA.publicKeyWithValues(e, d, n);
69 }, 67 },
70 68
71 //----------------------------------------------------------------------------- 69 //-----------------------------------------------------------------------------
72 70
73 'encryptUsingPublicKey': function (aKey, aMessage) { 71 'encryptUsingPublicKey': function (aKey, aMessage) {
74 varmessageValue; 72 varmessageValue;
75 varresult; 73 varresult;
76 74
77 messageValue = new Clipperz.Crypto.BigInt(aMessage, 16); 75 messageValue = new Clipperz.Crypto.BigInt(aMessage, 16);
78 result = messageValue.powerModule(aKey.e, aKey.n); 76 result = messageValue.powerModule(aKey.e, aKey.n);
79 77
80 return result.asString(16); 78 return result.asString(16);
81 }, 79 },
82 80
83 //............................................................................. 81 //.............................................................................
84 82
85 'decryptUsingPublicKey': function (aKey, aMessage) { 83 'decryptUsingPublicKey': function (aKey, aMessage) {
86 return Clipperz.Crypto.RSA.encryptUsingPublicKey(aKey, aMessage); 84 return Clipperz.Crypto.RSA.encryptUsingPublicKey(aKey, aMessage);
87 }, 85 },
88 86
89 //----------------------------------------------------------------------------- 87 //-----------------------------------------------------------------------------
90 88
91 'encryptUsingPrivateKey': function (aKey, aMessage) { 89 'encryptUsingPrivateKey': function (aKey, aMessage) {
92 varmessageValue; 90 varmessageValue;
93 varresult; 91 varresult;
94 92
95 messageValue = new Clipperz.Crypto.BigInt(aMessage, 16); 93 messageValue = new Clipperz.Crypto.BigInt(aMessage, 16);
96 result = messageValue.powerModule(aKey.d, aKey.n); 94 result = messageValue.powerModule(aKey.d, aKey.n);
97 95
98 return result.asString(16); 96 return result.asString(16);
99 }, 97 },
100 98
101 //............................................................................. 99 //.............................................................................
102 100
103 'decryptUsingPrivateKey': function (aKey, aMessage) { 101 'decryptUsingPrivateKey': function (aKey, aMessage) {
104 return Clipperz.Crypto.RSA.encryptUsingPrivateKey(aKey, aMessage); 102 return Clipperz.Crypto.RSA.encryptUsingPrivateKey(aKey, aMessage);
105 }, 103 },
106 104
107 //----------------------------------------------------------------------------- 105 //-----------------------------------------------------------------------------
108 106
109 'generatePublicKey': function(aNumberOfBits) { 107 'generatePublicKey': function(aNumberOfBits) {
110 varresult; 108 varresult;
111 vare; 109 vare;
112 vard; 110 vard;
113 varn; 111 varn;
114 112
115 e = new Clipperz.Crypto.BigInt("10001", 16); 113 e = new Clipperz.Crypto.BigInt("10001", 16);
116 114
117 { 115 {
118 var p, q; 116 var p, q;
119 varphi; 117 varphi;
120 118
121 do { 119 do {
122 p = Clipperz.Crypto.BigInt.randomPrime(aNumberOfBits); 120 p = Clipperz.Crypto.BigInt.randomPrime(aNumberOfBits);
123 } while (p.module(e).equals(1)); 121 } while (p.module(e).equals(1));
124 122
125 do { 123 do {
126 q = Clipperz.Crypto.BigInt.randomPrime(aNumberOfBits); 124 q = Clipperz.Crypto.BigInt.randomPrime(aNumberOfBits);
127 } while ((q.equals(p)) || (q.module(e).equals(1))); 125 } while ((q.equals(p)) || (q.module(e).equals(1)));
128 126
129 n = p.multiply(q); 127 n = p.multiply(q);
130 phi = (p.subtract(1).multiply(q.subtract(1))); 128 phi = (p.subtract(1).multiply(q.subtract(1)));
131 d = e.powerModule(-1, phi); 129 d = e.powerModule(-1, phi);
132 } 130 }
133 131
134 result = Clipperz.Crypto.RSA.publicKeyWithValues(e, d, n); 132 result = Clipperz.Crypto.RSA.publicKeyWithValues(e, d, n);
135 133
136 return result; 134 return result;
137 }, 135 },
138 136
139 //------------------------------------------------------------------------- 137 //-------------------------------------------------------------------------
140 138
141 __syntaxFix__: "syntax fix" 139 __syntaxFix__: "syntax fix"
142 140
143 //------------------------------------------------------------------------- 141 //-------------------------------------------------------------------------
144 142
145}); 143});
146 144
147//############################################################################# 145//#############################################################################
148 146
diff --git a/frontend/beta/js/Clipperz/Crypto/SHA.js b/frontend/beta/js/Clipperz/Crypto/SHA.js
index 635eb90..9605d1c 100644
--- a/frontend/beta/js/Clipperz/Crypto/SHA.js
+++ b/frontend/beta/js/Clipperz/Crypto/SHA.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) {
27 throw "Clipperz.Crypto.PRNG depends on Clipperz.ByteArray!"; 25 throw "Clipperz.Crypto.PRNG depends on Clipperz.ByteArray!";
28} 26}
29 27
30if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; } 28if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; }
31if (typeof(Clipperz.Crypto.SHA) == 'undefined') { Clipperz.Crypto.SHA = {}; } 29if (typeof(Clipperz.Crypto.SHA) == 'undefined') { Clipperz.Crypto.SHA = {}; }
32 30
33Clipperz.Crypto.SHA.VERSION = "0.3"; 31Clipperz.Crypto.SHA.VERSION = "0.3";
34Clipperz.Crypto.SHA.NAME = "Clipperz.Crypto.SHA"; 32Clipperz.Crypto.SHA.NAME = "Clipperz.Crypto.SHA";
35 33
36MochiKit.Base.update(Clipperz.Crypto.SHA, { 34MochiKit.Base.update(Clipperz.Crypto.SHA, {
37 35
38 '__repr__': function () { 36 '__repr__': function () {
39 return "[" + this.NAME + " " + this.VERSION + "]"; 37 return "[" + this.NAME + " " + this.VERSION + "]";
40 }, 38 },
41 39
42 'toString': function () { 40 'toString': function () {
43 return this.__repr__(); 41 return this.__repr__();
44 }, 42 },
45 43
46 //----------------------------------------------------------------------------- 44 //-----------------------------------------------------------------------------
47 45
48 'rotateRight': function(aValue, aNumberOfBits) { 46 'rotateRight': function(aValue, aNumberOfBits) {
49//Clipperz.Profile.start("Clipperz.Crypto.SHA.rotateRight"); 47//Clipperz.Profile.start("Clipperz.Crypto.SHA.rotateRight");
50 var result; 48 var result;
51 49
52 result = (aValue >>> aNumberOfBits) | (aValue << (32 - aNumberOfBits)); 50 result = (aValue >>> aNumberOfBits) | (aValue << (32 - aNumberOfBits));
53 51
54//Clipperz.Profile.stop("Clipperz.Crypto.SHA.rotateRight"); 52//Clipperz.Profile.stop("Clipperz.Crypto.SHA.rotateRight");
55 return result; 53 return result;
56 }, 54 },
57 55
58 'shiftRight': function(aValue, aNumberOfBits) { 56 'shiftRight': function(aValue, aNumberOfBits) {
59//Clipperz.Profile.start("Clipperz.Crypto.SHA.shiftRight"); 57//Clipperz.Profile.start("Clipperz.Crypto.SHA.shiftRight");
60 var result; 58 var result;
61 59
62 result = aValue >>> aNumberOfBits; 60 result = aValue >>> aNumberOfBits;
63 61
64//Clipperz.Profile.stop("Clipperz.Crypto.SHA.shiftRight"); 62//Clipperz.Profile.stop("Clipperz.Crypto.SHA.shiftRight");
65 return result; 63 return result;
66 }, 64 },
67 65
68 //----------------------------------------------------------------------------- 66 //-----------------------------------------------------------------------------
69 67
70 'safeAdd': function() { 68 'safeAdd': function() {
71//Clipperz.Profile.start("Clipperz.Crypto.SHA.safeAdd"); 69//Clipperz.Profile.start("Clipperz.Crypto.SHA.safeAdd");
72 varresult; 70 varresult;
73 vari, c; 71 vari, c;
74 72
75 result = arguments[0]; 73 result = arguments[0];
76 c = arguments.length; 74 c = arguments.length;
77 for (i=1; i<c; i++) { 75 for (i=1; i<c; i++) {
78 varlowerBytesSum; 76 varlowerBytesSum;
79 77
80 lowerBytesSum = (result & 0xffff) + (arguments[i] & 0xffff); 78 lowerBytesSum = (result & 0xffff) + (arguments[i] & 0xffff);
81 result = (((result >> 16) + (arguments[i] >> 16) + (lowerBytesSum >> 16)) << 16) | (lowerBytesSum & 0xffff); 79 result = (((result >> 16) + (arguments[i] >> 16) + (lowerBytesSum >> 16)) << 16) | (lowerBytesSum & 0xffff);
82 } 80 }
83 81
84//Clipperz.Profile.stop("Clipperz.Crypto.SHA.safeAdd"); 82//Clipperz.Profile.stop("Clipperz.Crypto.SHA.safeAdd");
85 return result; 83 return result;
86 }, 84 },
87 85
88 //----------------------------------------------------------------------------- 86 //-----------------------------------------------------------------------------
89 87
90 'sha256_array': function(aValue) { 88 'sha256_array': function(aValue) {
91//Clipperz.Profile.start("Clipperz.Crypto.SHA.sha256_array"); 89//Clipperz.Profile.start("Clipperz.Crypto.SHA.sha256_array");
92 varresult; 90 varresult;
93 varmessage; 91 varmessage;
94 var h0, h1, h2, h3, h4, h5, h6, h7; 92 var h0, h1, h2, h3, h4, h5, h6, h7;
95 vark; 93 vark;
96 varmessageLength; 94 varmessageLength;
97 varmessageLengthInBits; 95 varmessageLengthInBits;
98 var_i, _c; 96 var_i, _c;
99 var charBits; 97 var charBits;
100 var rotateRight; 98 var rotateRight;
101 var shiftRight; 99 var shiftRight;
102 var safeAdd; 100 var safeAdd;
103 varbytesPerBlock; 101 varbytesPerBlock;
104 var currentMessageIndex; 102 var currentMessageIndex;
105 103
106 bytesPerBlock = 512/8; 104 bytesPerBlock = 512/8;
107 rotateRight = Clipperz.Crypto.SHA.rotateRight; 105 rotateRight = Clipperz.Crypto.SHA.rotateRight;
108 shiftRight = Clipperz.Crypto.SHA.shiftRight; 106 shiftRight = Clipperz.Crypto.SHA.shiftRight;
109 safeAdd = Clipperz.Crypto.SHA.safeAdd; 107 safeAdd = Clipperz.Crypto.SHA.safeAdd;
110 108
111 charBits = 8; 109 charBits = 8;
112 110
113 h0 = 0x6a09e667; 111 h0 = 0x6a09e667;
114 h1 = 0xbb67ae85; 112 h1 = 0xbb67ae85;
115 h2 = 0x3c6ef372; 113 h2 = 0x3c6ef372;
116 h3 = 0xa54ff53a; 114 h3 = 0xa54ff53a;
117 h4 = 0x510e527f; 115 h4 = 0x510e527f;
118 h5 = 0x9b05688c; 116 h5 = 0x9b05688c;
119 h6 = 0x1f83d9ab; 117 h6 = 0x1f83d9ab;
120 h7 = 0x5be0cd19; 118 h7 = 0x5be0cd19;
121 119
122 k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 120 k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
123 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 121 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
124 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 122 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
125 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 123 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
126 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 124 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
127 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 125 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
128 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 126 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
129 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; 127 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
130 128
131 message = aValue; 129 message = aValue;
132 messageLength = message.length; 130 messageLength = message.length;
133 131
134 //Pre-processing: 132 //Pre-processing:
135 message.push(0x80); //append a single "1" bit to message 133 message.push(0x80); //append a single "1" bit to message
136 134
137 _c = (512 - (((messageLength + 1) * charBits) % 512) - 64) / charBits; 135 _c = (512 - (((messageLength + 1) * charBits) % 512) - 64) / charBits;
138 for (_i=0; _i<_c; _i++) { 136 for (_i=0; _i<_c; _i++) {
139 message.push(0x00); //append "0" bits until message length ≡ 448 ≡ -64 (mod 512) 137 message.push(0x00); //append "0" bits until message length ≡ 448 ≡ -64 (mod 512)
140 } 138 }
141 messageLengthInBits = messageLength * charBits; 139 messageLengthInBits = messageLength * charBits;
142 message.push(0x00); //the 4 most high byte are alway 0 as message length is represented with a 32bit value; 140 message.push(0x00); //the 4 most high byte are alway 0 as message length is represented with a 32bit value;
143 message.push(0x00); 141 message.push(0x00);
144 message.push(0x00); 142 message.push(0x00);
145 message.push(0x00); 143 message.push(0x00);
146 message.push((messageLengthInBits >> 24)& 0xff); 144 message.push((messageLengthInBits >> 24)& 0xff);
147 message.push((messageLengthInBits >> 16)& 0xff); 145 message.push((messageLengthInBits >> 16)& 0xff);
148 message.push((messageLengthInBits >> 8) & 0xff); 146 message.push((messageLengthInBits >> 8) & 0xff);
149 message.push( messageLengthInBits & 0xff); 147 message.push( messageLengthInBits & 0xff);
150 148
diff --git a/frontend/beta/js/Clipperz/Crypto/SRP.js b/frontend/beta/js/Clipperz/Crypto/SRP.js
index 3b25275..8cc80ba 100644
--- a/frontend/beta/js/Clipperz/Crypto/SRP.js
+++ b/frontend/beta/js/Clipperz/Crypto/SRP.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) {
27 throw "Clipperz.Crypto.PRNG depends on Clipperz.ByteArray!"; 25 throw "Clipperz.Crypto.PRNG depends on Clipperz.ByteArray!";
28} 26}
29 27
30try { if (typeof(Clipperz.Crypto.BigInt) == 'undefined') { throw ""; }} catch (e) { 28try { if (typeof(Clipperz.Crypto.BigInt) == 'undefined') { throw ""; }} catch (e) {
31 throw "Clipperz.Crypto.SRP depends on Clipperz.Crypto.BigInt!"; 29 throw "Clipperz.Crypto.SRP depends on Clipperz.Crypto.BigInt!";
32} 30}
33 31
34try { if (typeof(Clipperz.Crypto.PRNG) == 'undefined') { throw ""; }} catch (e) { 32try { if (typeof(Clipperz.Crypto.PRNG) == 'undefined') { throw ""; }} catch (e) {
35 throw "Clipperz.Crypto.SRP depends on Clipperz.Crypto.PRNG!"; 33 throw "Clipperz.Crypto.SRP depends on Clipperz.Crypto.PRNG!";
36} 34}
37 35
38if (typeof(Clipperz.Crypto.SRP) == 'undefined') { Clipperz.Crypto.SRP = {}; } 36if (typeof(Clipperz.Crypto.SRP) == 'undefined') { Clipperz.Crypto.SRP = {}; }
39 37
40Clipperz.Crypto.SRP.VERSION = "0.1"; 38Clipperz.Crypto.SRP.VERSION = "0.1";
41Clipperz.Crypto.SRP.NAME = "Clipperz.Crypto.SRP"; 39Clipperz.Crypto.SRP.NAME = "Clipperz.Crypto.SRP";
42 40
43//############################################################################# 41//#############################################################################
44 42
45MochiKit.Base.update(Clipperz.Crypto.SRP, { 43MochiKit.Base.update(Clipperz.Crypto.SRP, {
46 44
47 '_n': null, 45 '_n': null,
48 '_g': null, 46 '_g': null,
49 //------------------------------------------------------------------------- 47 //-------------------------------------------------------------------------
50 48
51 'n': function() { 49 'n': function() {
52 if (Clipperz.Crypto.SRP._n == null) { 50 if (Clipperz.Crypto.SRP._n == null) {
53 Clipperz.Crypto.SRP._n = new Clipperz.Crypto.BigInt("115b8b692e0e045692cf280b436735c77a5a9e8a9e7ed56c965f87db5b2a2ece3", 16); 51 Clipperz.Crypto.SRP._n = new Clipperz.Crypto.BigInt("115b8b692e0e045692cf280b436735c77a5a9e8a9e7ed56c965f87db5b2a2ece3", 16);
54 } 52 }
55 53
56 return Clipperz.Crypto.SRP._n; 54 return Clipperz.Crypto.SRP._n;
57 }, 55 },
58 56
59 //------------------------------------------------------------------------- 57 //-------------------------------------------------------------------------
60 58
61 'g': function() { 59 'g': function() {
62 if (Clipperz.Crypto.SRP._g == null) { 60 if (Clipperz.Crypto.SRP._g == null) {
63 Clipperz.Crypto.SRP._g = new Clipperz.Crypto.BigInt(2); //eventually 5 (as suggested on the Diffi-Helmann documentation) 61 Clipperz.Crypto.SRP._g = new Clipperz.Crypto.BigInt(2); //eventually 5 (as suggested on the Diffi-Helmann documentation)
64 } 62 }
65 63
66 return Clipperz.Crypto.SRP._g; 64 return Clipperz.Crypto.SRP._g;
67 }, 65 },
68 66
69 //----------------------------------------------------------------------------- 67 //-----------------------------------------------------------------------------
70 68
71 'exception': { 69 'exception': {
72 'InvalidValue': new MochiKit.Base.NamedError("Clipperz.Crypto.SRP.exception.InvalidValue") 70 'InvalidValue': new MochiKit.Base.NamedError("Clipperz.Crypto.SRP.exception.InvalidValue")
73 }, 71 },
74 72
75 //------------------------------------------------------------------------- 73 //-------------------------------------------------------------------------
76 __syntaxFix__: "syntax fix" 74 __syntaxFix__: "syntax fix"
77 75
78}); 76});
79 77
80//############################################################################# 78//#############################################################################
81// 79//
82 // S R P C o n n e c t i o n version 1.0 80 // S R P C o n n e c t i o n version 1.0
83// 81//
84//============================================================================= 82//=============================================================================
85Clipperz.Crypto.SRP.Connection = function (args) { 83Clipperz.Crypto.SRP.Connection = function (args) {
86 args = args || {}; 84 args = args || {};
87 85
88 this._C = args.C; 86 this._C = args.C;
89 this._P = args.P; 87 this._P = args.P;
90 this.hash = args.hash; 88 this.hash = args.hash;
91 89
92 this._a = null; 90 this._a = null;
93 this._A = null; 91 this._A = null;
94 92
95 this._s = null; 93 this._s = null;
96 this._B = null; 94 this._B = null;
97 95
98 this._x = null; 96 this._x = null;
99 97
100 this._u = null; 98 this._u = null;
101 this._K = null; 99 this._K = null;
102 this._M1 = null; 100 this._M1 = null;
103 this._M2 = null; 101 this._M2 = null;
104 102
105 this._sessionKey = null; 103 this._sessionKey = null;
106 104
107 return this; 105 return this;
108} 106}
109 107
110Clipperz.Crypto.SRP.Connection.prototype = MochiKit.Base.update(null, { 108Clipperz.Crypto.SRP.Connection.prototype = MochiKit.Base.update(null, {
111 109
112 'toString': function () { 110 'toString': function () {
113 return "Clipperz.Crypto.SRP.Connection (username: " + this.username() + "). Status: " + this.statusDescription(); 111 return "Clipperz.Crypto.SRP.Connection (username: " + this.username() + "). Status: " + this.statusDescription();
114 }, 112 },
115 113
116 //------------------------------------------------------------------------- 114 //-------------------------------------------------------------------------
117 115
118 'C': function () { 116 'C': function () {
119 return this._C; 117 return this._C;
120 }, 118 },
121 119
122 //------------------------------------------------------------------------- 120 //-------------------------------------------------------------------------
123 121
124 'P': function () { 122 'P': function () {
125 return this._P; 123 return this._P;
126 }, 124 },
127 125
128 //------------------------------------------------------------------------- 126 //-------------------------------------------------------------------------
129 127
130 'a': function () { 128 'a': function () {
131 if (this._a == null) { 129 if (this._a == null) {
132 this._a = new Clipperz.Crypto.BigInt(Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32).toHexString().substring(2), 16); 130 this._a = new Clipperz.Crypto.BigInt(Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32).toHexString().substring(2), 16);
133 // this._a = new Clipperz.Crypto.BigInt("37532428169486597638072888476611365392249575518156687476805936694442691012367", 10); 131 // this._a = new Clipperz.Crypto.BigInt("37532428169486597638072888476611365392249575518156687476805936694442691012367", 10);
134//MochiKit.Logging.logDebug("SRP a: " + this._a); 132//MochiKit.Logging.logDebug("SRP a: " + this._a);
135 } 133 }
136 134
137 return this._a; 135 return this._a;
138 }, 136 },
139 137
140 //------------------------------------------------------------------------- 138 //-------------------------------------------------------------------------
141 139
142 'A': function () { 140 'A': function () {
143 if (this._A == null) { 141 if (this._A == null) {
144 //Warning: this value should be strictly greater than zero: how should we perform this check? 142 //Warning: this value should be strictly greater than zero: how should we perform this check?
145 this._A = Clipperz.Crypto.SRP.g().powerModule(this.a(), Clipperz.Crypto.SRP.n()); 143 this._A = Clipperz.Crypto.SRP.g().powerModule(this.a(), Clipperz.Crypto.SRP.n());
146 144
147 if (this._A.equals(0)) { 145 if (this._A.equals(0)) {
148MochiKit.Logging.logError("Clipperz.Crypto.SRP.Connection: trying to set 'A' to 0."); 146MochiKit.Logging.logError("Clipperz.Crypto.SRP.Connection: trying to set 'A' to 0.");
149 throw Clipperz.Crypto.SRP.exception.InvalidValue; 147 throw Clipperz.Crypto.SRP.exception.InvalidValue;
150 } 148 }
diff --git a/frontend/beta/js/Clipperz/DOM.js b/frontend/beta/js/Clipperz/DOM.js
index 7e230bc..10ed49b 100644
--- a/frontend/beta/js/Clipperz/DOM.js
+++ b/frontend/beta/js/Clipperz/DOM.js
@@ -1,128 +1,126 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.DOM) == 'undefined') { Clipperz.DOM = {}; } 25if (typeof(Clipperz.DOM) == 'undefined') { Clipperz.DOM = {}; }
28 26
29Clipperz.DOM.VERSION = "0.1"; 27Clipperz.DOM.VERSION = "0.1";
30Clipperz.DOM.NAME = "Clipperz.DOM"; 28Clipperz.DOM.NAME = "Clipperz.DOM";
31 29
32MochiKit.Base.update(Clipperz.DOM, { 30MochiKit.Base.update(Clipperz.DOM, {
33 31
34 //------------------------------------------------------------------------- 32 //-------------------------------------------------------------------------
35 33
36 '__repr__': function () { 34 '__repr__': function () {
37 return "[" + this.NAME + " " + this.VERSION + "]"; 35 return "[" + this.NAME + " " + this.VERSION + "]";
38 }, 36 },
39 37
40 //------------------------------------------------------------------------- 38 //-------------------------------------------------------------------------
41 39
42 'toString': function () { 40 'toString': function () {
43 return this.__repr__(); 41 return this.__repr__();
44 }, 42 },
45 43
46 //------------------------------------------------------------------------- 44 //-------------------------------------------------------------------------
47 45
48 'selectOptionMatchingValue': function (aSelectElement, aValue, shouldUseCaseInsensitiveTest) { 46 'selectOptionMatchingValue': function (aSelectElement, aValue, shouldUseCaseInsensitiveTest) {
49 var selectedOptionIndex; 47 var selectedOptionIndex;
50 var i, c; 48 var i, c;
51 49
52 selectedOptionIndex = -1; 50 selectedOptionIndex = -1;
53 51
54 c = aSelectElement.options.length; 52 c = aSelectElement.options.length;
55 for (i=0; (i<c) && (selectedOptionIndex == -1); i++) { 53 for (i=0; (i<c) && (selectedOptionIndex == -1); i++) {
56 if (shouldUseCaseInsensitiveTest == true) { 54 if (shouldUseCaseInsensitiveTest == true) {
57 if (aSelectElement.options[i].value.toLowerCase() == aValue.toLowerCase()) { 55 if (aSelectElement.options[i].value.toLowerCase() == aValue.toLowerCase()) {
58 selectedOptionIndex = i; 56 selectedOptionIndex = i;
59 } 57 }
60 } else { 58 } else {
61 if (aSelectElement.options[i].value == aValue) { 59 if (aSelectElement.options[i].value == aValue) {
62 selectedOptionIndex = i; 60 selectedOptionIndex = i;
63 } 61 }
64 } 62 }
65 } 63 }
66 64
67 if (selectedOptionIndex != -1) { 65 if (selectedOptionIndex != -1) {
68 aSelectElement.selectedIndex = selectedOptionIndex; 66 aSelectElement.selectedIndex = selectedOptionIndex;
69 } 67 }
70 }, 68 },
71 69
72 //------------------------------------------------------------------------- 70 //-------------------------------------------------------------------------
73 71
74 'setFormContents': function(aNode, someValues) { 72 'setFormContents': function(aNode, someValues) {
75 var node; 73 var node;
76 var values; 74 var values;
77 var i, c; 75 var i, c;
78 76
79 values = {}; 77 values = {};
80 c = someValues[0].length; 78 c = someValues[0].length;
81 for (i=0; i<c; i++) { 79 for (i=0; i<c; i++) {
82 values[someValues[0][i]] = someValues[1][i]; 80 values[someValues[0][i]] = someValues[1][i];
83 } 81 }
84 82
85 // var m = MochiKit.Base; 83 // var m = MochiKit.Base;
86 // var self = MochiKit.DOM; 84 // var self = MochiKit.DOM;
87 if (typeof(aNode) == "undefined" || aNode === null) { 85 if (typeof(aNode) == "undefined" || aNode === null) {
88 node = MochiKit.DOM._document.body; 86 node = MochiKit.DOM._document.body;
89 } else { 87 } else {
90 node = MochiKit.DOM.getElement(aNode); 88 node = MochiKit.DOM.getElement(aNode);
91 } 89 }
92 90
93 MochiKit.Base.nodeWalk(node, function(aNode) { 91 MochiKit.Base.nodeWalk(node, function(aNode) {
94 var result; 92 var result;
95 var name; 93 var name;
96 94
97 result = null; 95 result = null;
98 name = aNode.name; 96 name = aNode.name;
99 if (MochiKit.Base.isNotEmpty(name) && (typeof(values[name]) != 'undefined')) { 97 if (MochiKit.Base.isNotEmpty(name) && (typeof(values[name]) != 'undefined')) {
100 var tagName; 98 var tagName;
101 99
102 tagName = aNode.tagName.toUpperCase(); 100 tagName = aNode.tagName.toUpperCase();
103 if (tagName === "INPUT" && (aNode.type == "radio" || aNode.type == "checkbox")) { 101 if (tagName === "INPUT" && (aNode.type == "radio" || aNode.type == "checkbox")) {
104 aNode.checked = values[name]; 102 aNode.checked = values[name];
105 } else if (tagName === "SELECT") { 103 } else if (tagName === "SELECT") {
106 if (aNode.type == "select-one") { 104 if (aNode.type == "select-one") {
107 Clipperz.DOM.selectOptionMatchingValue(aNode, values[name]); 105 Clipperz.DOM.selectOptionMatchingValue(aNode, values[name]);
108 } else { //aNode.type == "select-multiple" 106 } else { //aNode.type == "select-multiple"
109MochiKit.Logging.logWarning("### unhandled Select.type = 'select-multiple' condition"); 107MochiKit.Logging.logWarning("### unhandled Select.type = 'select-multiple' condition");
110 } 108 }
111 } else if (tagName === "FORM" || tagName === "P" || tagName === "SPAN" || tagName === "DIV") { 109 } else if (tagName === "FORM" || tagName === "P" || tagName === "SPAN" || tagName === "DIV") {
112 result = aNode.childNodes; 110 result = aNode.childNodes;
113 } else { 111 } else {
114 aNode.value = values[name] 112 aNode.value = values[name]
115 } 113 }
116 } else { 114 } else {
117 result = aNode.childNodes; 115 result = aNode.childNodes;
118 } 116 }
119 117
120 return result; 118 return result;
121 }); 119 });
122 }, 120 },
123 121
124 //------------------------------------------------------------------------- 122 //-------------------------------------------------------------------------
125 __syntaxFix__: "syntax fix" 123 __syntaxFix__: "syntax fix"
126 124
127}); 125});
128 126
diff --git a/frontend/beta/js/Clipperz/Date.js b/frontend/beta/js/Clipperz/Date.js
index 020d77b..e8f7705 100644
--- a/frontend/beta/js/Clipperz/Date.js
+++ b/frontend/beta/js/Clipperz/Date.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.Date) == 'undefined') { Clipperz.Date = {}; } 25if (typeof(Clipperz.Date) == 'undefined') { Clipperz.Date = {}; }
28 26
29Clipperz.Date.VERSION = "0.1"; 27Clipperz.Date.VERSION = "0.1";
30Clipperz.Date.NAME = "Clipperz.Date"; 28Clipperz.Date.NAME = "Clipperz.Date";
31 29
32MochiKit.Base.update(Clipperz.Date, { 30MochiKit.Base.update(Clipperz.Date, {
33 31
34 //------------------------------------------------------------------------- 32 //-------------------------------------------------------------------------
35 33
36 '__repr__': function () { 34 '__repr__': function () {
37 return "[" + this.NAME + " " + this.VERSION + "]"; 35 return "[" + this.NAME + " " + this.VERSION + "]";
38 }, 36 },
39 37
40 //------------------------------------------------------------------------- 38 //-------------------------------------------------------------------------
41 39
42 'toString': function () { 40 'toString': function () {
43 return this.__repr__(); 41 return this.__repr__();
44 }, 42 },
45 43
46 //------------------------------------------------------------------------- 44 //-------------------------------------------------------------------------
47 45
48 'daysInMonth': [31,28,31,30,31,30,31,31,30,31,30,31], 46 'daysInMonth': [31,28,31,30,31,30,31,31,30,31,30,31],
49 47
50 //------------------------------------------------------------------------- 48 //-------------------------------------------------------------------------
51 49
52 'englishOrdinalDaySuffixForDate': function(aDate) { 50 'englishOrdinalDaySuffixForDate': function(aDate) {
53 var result; 51 var result;
54 52
55 switch (aDate.getDate()) { 53 switch (aDate.getDate()) {
56 case 1: 54 case 1:
57 case 21: 55 case 21:
58 case 31: 56 case 31:
59 result = "st"; 57 result = "st";
60 break; 58 break;
61 case 2: 59 case 2:
62 case 22: 60 case 22:
63 result = "nd"; 61 result = "nd";
64 break; 62 break;
65 case 3: 63 case 3:
66 case 23: 64 case 23:
67 result = "rd"; 65 result = "rd";
68 break; 66 break;
69 default: 67 default:
70 result = "th"; 68 result = "th";
71 break; 69 break;
72 } 70 }
73 71
74 return result; 72 return result;
75 }, 73 },
76 74
77 //------------------------------------------------------------------------- 75 //-------------------------------------------------------------------------
78 76
79 'isLeapYear': function(aDate) { 77 'isLeapYear': function(aDate) {
80 var year; 78 var year;
81 var result; 79 var result;
82 80
83 year = aDate.getFullYear(); 81 year = aDate.getFullYear();
84 result = ((year & 0x03) == 0 && (year % 100 || (year % 400 == 0 && year))); 82 result = ((year & 0x03) == 0 && (year % 100 || (year % 400 == 0 && year)));
85 83
86 return result; 84 return result;
87 }, 85 },
88 86
89 //------------------------------------------------------------------------- 87 //-------------------------------------------------------------------------
90 88
91 'getDaysInMonth': function(aDate) { 89 'getDaysInMonth': function(aDate) {
92 var result; 90 var result;
93 91
94 if (aDate.getMonth() == 1) { 92 if (aDate.getMonth() == 1) {
95 Clipperz.Date.isLeapYear(aDate) 93 Clipperz.Date.isLeapYear(aDate)
96 result += Clipperz.Date.isLeapYear(aDate) ? 29 : 28; 94 result += Clipperz.Date.isLeapYear(aDate) ? 29 : 28;
97 } else { 95 } else {
98 result = Clipperz.Date.daysInMonth[aDate.getMonth()]; 96 result = Clipperz.Date.daysInMonth[aDate.getMonth()];
99 } 97 }
100 98
101 return result; 99 return result;
102 }, 100 },
103 101
104 //------------------------------------------------------------------------- 102 //-------------------------------------------------------------------------
105 103
106 'getTimezone': function(aDate) { 104 'getTimezone': function(aDate) {
107 var result; 105 var result;
108 106
109 result = aDate.toString(); 107 result = aDate.toString();
110 result = result.replace(/([A-Z]{3}) [0-9]{4}/, '$1'); 108 result = result.replace(/([A-Z]{3}) [0-9]{4}/, '$1');
111 result = result.replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, "$1$2$3"); 109 result = result.replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, "$1$2$3");
112 110
113 return result; 111 return result;
114 }, 112 },
115 113
116 'getGMTOffset': function(aDate) { 114 'getGMTOffset': function(aDate) {
117 return (aDate.getTimezoneOffset() > 0 ? "-" : "+")+ MochiKit.Format.numberFormatter('00')(Math.floor(this.getTimezoneOffset() / 60)) 115 return (aDate.getTimezoneOffset() > 0 ? "-" : "+")+ MochiKit.Format.numberFormatter('00')(Math.floor(this.getTimezoneOffset() / 60))
118 + MochiKit.Format.numberFormatter('00')(this.getTimezoneOffset() % 60); 116 + MochiKit.Format.numberFormatter('00')(this.getTimezoneOffset() % 60);
119 }, 117 },
120 118
121 //------------------------------------------------------------------------- 119 //-------------------------------------------------------------------------
122 120
123 'dayOfYear': function(aDate) { 121 'dayOfYear': function(aDate) {
124 var result; 122 var result;
125 var i,c; 123 var i,c;
126 124
127 result = 0; 125 result = 0;
128 c = aDate.getMonth(); 126 c = aDate.getMonth();
129 for (i=0; i<c; i++) { 127 for (i=0; i<c; i++) {
130 if (i == 1) { 128 if (i == 1) {
131 result += Clipperz.Date.isLeapYear(aDate) ? 29 : 28; 129 result += Clipperz.Date.isLeapYear(aDate) ? 29 : 28;
132 } else { 130 } else {
133 result += Clipperz.Date.daysInMonth[i]; 131 result += Clipperz.Date.daysInMonth[i];
134 } 132 }
135 } 133 }
136 return num + this.getDate() - 1; 134 return num + this.getDate() - 1;
137 }, 135 },
138 136
139 //------------------------------------------------------------------------- 137 //-------------------------------------------------------------------------
140 138
141 'getPHPLikeFormatCode': function(aCharacter) { 139 'getPHPLikeFormatCode': function(aCharacter) {
142 var result; 140 var result;
143 141
144 switch (aCharacter) { 142 switch (aCharacter) {
145 case "d": 143 case "d":
146 result = " + MochiKit.Format.numberFormatter('00')(aDate.getDate())"; 144 result = " + MochiKit.Format.numberFormatter('00')(aDate.getDate())";
147 break; 145 break;
148 case "D": 146 case "D":
149 result = " + aLocale['shortDays'][aDate.getDay()]"; 147 result = " + aLocale['shortDays'][aDate.getDay()]";
150 break; 148 break;
diff --git a/frontend/beta/js/Clipperz/KeePassExportProcessor.js b/frontend/beta/js/Clipperz/KeePassExportProcessor.js
index 74d36ca..7a32f3f 100644
--- a/frontend/beta/js/Clipperz/KeePassExportProcessor.js
+++ b/frontend/beta/js/Clipperz/KeePassExportProcessor.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27 25
28 26
29Clipperz.KeePassExportProcessor = function(args) { 27Clipperz.KeePassExportProcessor = function(args) {
30 args = args || {}; 28 args = args || {};
31 29
32 return this; 30 return this;
33} 31}
34 32
35//============================================================================= 33//=============================================================================
36 34
37Clipperz.KeePassExportProcessor.prototype = MochiKit.Base.update(null, { 35Clipperz.KeePassExportProcessor.prototype = MochiKit.Base.update(null, {
38 36
39 //------------------------------------------------------------------------- 37 //-------------------------------------------------------------------------
40/* 38/*
41 'parse': function(aValue) { 39 'parse': function(aValue) {
42 var result; 40 var result;
43 41
44//MochiKit.Logging.logDebug(">>> KeePassExportProcessor.parse"); 42//MochiKit.Logging.logDebug(">>> KeePassExportProcessor.parse");
45 result = []; 43 result = [];
46//MochiKit.Logging.logDebug("--- KeePassExportProcessor.parse - result: " + Clipperz.Base.serializeJSON(result)); 44//MochiKit.Logging.logDebug("--- KeePassExportProcessor.parse - result: " + Clipperz.Base.serializeJSON(result));
47//MochiKit.Logging.logDebug("<<< KeePassExportProcessor.parse"); 45//MochiKit.Logging.logDebug("<<< KeePassExportProcessor.parse");
48 46
49 return result; 47 return result;
50 }, 48 },
51*/ 49*/
52 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
53 51
54 'deferredParse_core': function(aContext) { 52 'deferredParse_core': function(aContext) {
55 var deferredResult; 53 var deferredResult;
56 54
57 //MochiKit.Logging.logDebug(">>> KeePassExportProcessor.deferredParse_core"); 55 //MochiKit.Logging.logDebug(">>> KeePassExportProcessor.deferredParse_core");
58 //MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse_core - (1) aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50)); 56 //MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse_core - (1) aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50));
59 //MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse_core - aContext: " + Clipperz.Base.serializeJSON(aContext).substring(0,50)); 57 //MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse_core - aContext: " + Clipperz.Base.serializeJSON(aContext).substring(0,50));
60 //MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse_core - (2) aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50)); 58 //MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse_core - (2) aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50));
61//console.log("deferredParse_core - aContext", aContext); 59//console.log("deferredParse_core - aContext", aContext);
62 //MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse_core - (3) aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50)); 60 //MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse_core - (3) aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50));
63 if (aContext.line == "") { 61 if (aContext.line == "") {
64 deferredResult = MochiKit.Async.succeed(aContext.result); 62 deferredResult = MochiKit.Async.succeed(aContext.result);
65 } else { 63 } else {
66 var record; 64 var record;
67 65
68 record = this.parseRecord(aContext); 66 record = this.parseRecord(aContext);
69 if (record != null) { 67 if (record != null) {
70 aContext.result.push(record); 68 aContext.result.push(record);
71 } 69 }
72 70
73 //MochiKit.Logging.logDebug("--> KeePassExportProcessor.deferredParse_core - aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50)); 71 //MochiKit.Logging.logDebug("--> KeePassExportProcessor.deferredParse_core - aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50));
74 aContext.line = aContext.line.replace(/^\n*/g, "").replace(/\n$/g, ""); 72 aContext.line = aContext.line.replace(/^\n*/g, "").replace(/\n$/g, "");
75 //MochiKit.Logging.logDebug("<-- KeePassExportProcessor.deferredParse_core - aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50)); 73 //MochiKit.Logging.logDebug("<-- KeePassExportProcessor.deferredParse_core - aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50));
76 74
77 deferredResult = new MochiKit.Async.Deferred(); 75 deferredResult = new MochiKit.Async.Deferred();
78//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse_core - 1.1 " + res); return res;}); 76//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse_core - 1.1 " + res); return res;});
79 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'importProcessorProgressUpdate', {status:'processing', size:aContext.size, progress:(aContext.size - aContext.line.length)}); 77 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'importProcessorProgressUpdate', {status:'processing', size:aContext.size, progress:(aContext.size - aContext.line.length)});
80//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse_core - 1.2 " + res); return res;}); 78//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse_core - 1.2 " + res); return res;});
81 deferredResult.addCallback(MochiKit.Async.wait, 0.2); 79 deferredResult.addCallback(MochiKit.Async.wait, 0.2);
82//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse_core - 1.3 " + res); return res;}); 80//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse_core - 1.3 " + res); return res;});
83//deferredResult.addBoth(function(res) {console.log("KeePassExportProcessor.deferredParse_core - 1.3 ", res); return res;}); 81//deferredResult.addBoth(function(res) {console.log("KeePassExportProcessor.deferredParse_core - 1.3 ", res); return res;});
84 deferredResult.addCallback(MochiKit.Base.method(this, 'deferredParse_core')) 82 deferredResult.addCallback(MochiKit.Base.method(this, 'deferredParse_core'))
85//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse_core - 1.4 " + res); return res;}); 83//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse_core - 1.4 " + res); return res;});
86 deferredResult.callback(aContext); 84 deferredResult.callback(aContext);
87 } 85 }
88 //MochiKit.Logging.logDebug("<<< KeePassExportProcessor.deferredParse_core"); 86 //MochiKit.Logging.logDebug("<<< KeePassExportProcessor.deferredParse_core");
89 87
90 return deferredResult; 88 return deferredResult;
91 }, 89 },
92 90
93 //......................................................................... 91 //.........................................................................
94 92
95 'deferredParse': function(aValue) { 93 'deferredParse': function(aValue) {
96 var deferredResult; 94 var deferredResult;
97 var lines; 95 var lines;
98 var context; 96 var context;
99 97
100//MochiKit.Logging.logDebug(">>> KeePassExportProcessor.deferredParse"); 98//MochiKit.Logging.logDebug(">>> KeePassExportProcessor.deferredParse");
101//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse - aValue: " + aValue.length); 99//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse - aValue: " + aValue.length);
102 lines = aValue.replace(/\r?\n/g, "\n"); 100 lines = aValue.replace(/\r?\n/g, "\n");
103//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse - lines: " + lines.length); 101//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse - lines: " + lines.length);
104 context = { 102 context = {
105 line: lines, 103 line: lines,
106 size: lines.length, 104 size: lines.length,
107 result: [] 105 result: []
108 } 106 }
109//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse - context: " + Clipperz.Base.serializeJSON(context).substring(0,50)); 107//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse - context: " + Clipperz.Base.serializeJSON(context).substring(0,50));
110//console.log("--- KeePassExportProcessor.deferredParse - context: ", context); 108//console.log("--- KeePassExportProcessor.deferredParse - context: ", context);
111 109
112 deferredResult = new MochiKit.Async.Deferred(); 110 deferredResult = new MochiKit.Async.Deferred();
113//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse - 1 " + res); return res;}); 111//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse - 1 " + res); return res;});
114//deferredResult.addBoth(function(res) {console.log("KeePassExportProcessor.deferredParse - 1 ", res); return res;}); 112//deferredResult.addBoth(function(res) {console.log("KeePassExportProcessor.deferredParse - 1 ", res); return res;});
115 deferredResult.addCallback(MochiKit.Base.method(this, 'deferredParse_core')); 113 deferredResult.addCallback(MochiKit.Base.method(this, 'deferredParse_core'));
116//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse - 2 " + res); return res;}); 114//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse - 2 " + res); return res;});
117 deferredResult.callback(context); 115 deferredResult.callback(context);
118//MochiKit.Logging.logDebug("<<< KeePassExportProcessor.deferredParse"); 116//MochiKit.Logging.logDebug("<<< KeePassExportProcessor.deferredParse");
119 117
120 return deferredResult; 118 return deferredResult;
121 }, 119 },
122 120
123 //------------------------------------------------------------------------- 121 //-------------------------------------------------------------------------
124 122
125 'parseRecord': function(aContext) { 123 'parseRecord': function(aContext) {
126 var result; 124 var result;
127 var recordLabelRegexp; 125 var recordLabelRegexp;
128 varfieldLabelRegexp; 126 varfieldLabelRegexp;
129 var fieldValueRegexp; 127 var fieldValueRegexp;
130 var fullLineRegexp; 128 var fullLineRegexp;
131/* 129/*
132[Record name] 130[Record name]
133Group Tree: 131Group Tree:
134UserName: 132UserName:
135URL: 133URL:
136Password: 134Password:
137Notes: test 135Notes: test
138UUID: 525f62430079bae48b79ed2961924b05 136UUID: 525f62430079bae48b79ed2961924b05
139Icon: 0 137Icon: 0
140Creation Time: 2007-06-26 17:56:03 138Creation Time: 2007-06-26 17:56:03
141Last Access: 2007-10-25 16:23:51 139Last Access: 2007-10-25 16:23:51
142Last Modification: 2007-10-25 16:23:51 140Last Modification: 2007-10-25 16:23:51
143Expires: 2999-12-28 23:59:59 141Expires: 2999-12-28 23:59:59
144 142
145 [Record name] ==> Title 143 [Record name] ==> Title
146 Group: General ==> Group 144 Group: General ==> Group
147 Group Tree: ==> Group Tree 145 Group Tree: ==> Group Tree
148 UserName: ==> UserName 146 UserName: ==> UserName
149 URL: ==>URL 147 URL: ==>URL
150 Password: ==>Password 148 Password: ==>Password
diff --git a/frontend/beta/js/Clipperz/NotificationCenter.js b/frontend/beta/js/Clipperz/NotificationCenter.js
index e346b1c..a2e2fb6 100644
--- a/frontend/beta/js/Clipperz/NotificationCenter.js
+++ b/frontend/beta/js/Clipperz/NotificationCenter.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.NotificationCenter) == 'undefined') { Clipperz.NotificationCenter = {}; } 25if (typeof(Clipperz.NotificationCenter) == 'undefined') { Clipperz.NotificationCenter = {}; }
28 26
29 27
30//############################################################################# 28//#############################################################################
31 29
32Clipperz.NotificationCenterEvent = function(args) { 30Clipperz.NotificationCenterEvent = function(args) {
33 args = args || {}; 31 args = args || {};
34 //MochiKit.Base.bindMethods(this); 32 //MochiKit.Base.bindMethods(this);
35 33
36 this._source = args.source || null; 34 this._source = args.source || null;
37 this._event = args.event || null; 35 this._event = args.event || null;
38 this._parameters = args.parameters || null; 36 this._parameters = args.parameters || null;
39 this._isSynchronous = args.isSynchronous || false; 37 this._isSynchronous = args.isSynchronous || false;
40 38
41 return this; 39 return this;
42} 40}
43 41
44//============================================================================= 42//=============================================================================
45 43
46Clipperz.NotificationCenterEvent.prototype = MochiKit.Base.update(null, { 44Clipperz.NotificationCenterEvent.prototype = MochiKit.Base.update(null, {
47 45
48 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
49 47
50 'toString': function() { 48 'toString': function() {
51 return "Clipperz.NotificationCenterEvent"; 49 return "Clipperz.NotificationCenterEvent";
52 //return "Clipperz.NotificationCenterEvent {source: " + this.source() + ", event: " + this.event() + ", parameters: " + this.parameters() + "}"; 50 //return "Clipperz.NotificationCenterEvent {source: " + this.source() + ", event: " + this.event() + ", parameters: " + this.parameters() + "}";
53 }, 51 },
54 52
55 //------------------------------------------------------------------------- 53 //-------------------------------------------------------------------------
56 54
57 'source': function() { 55 'source': function() {
58 return this._source; 56 return this._source;
59 }, 57 },
60 58
61 'setSource': function(aValue) { 59 'setSource': function(aValue) {
62 this._source = aValue; 60 this._source = aValue;
63 }, 61 },
64 62
65 //------------------------------------------------------------------------- 63 //-------------------------------------------------------------------------
66 64
67 'event': function() { 65 'event': function() {
68 return this._event; 66 return this._event;
69 }, 67 },
70 68
71 'setEvent': function(aValue) { 69 'setEvent': function(aValue) {
72 this._event = aValue; 70 this._event = aValue;
73 }, 71 },
74 72
75 //------------------------------------------------------------------------- 73 //-------------------------------------------------------------------------
76 74
77 'parameters': function() { 75 'parameters': function() {
78 return this._parameters; 76 return this._parameters;
79 }, 77 },
80 78
81 'setParameters': function(aValue) { 79 'setParameters': function(aValue) {
82 this._parameters = aValue; 80 this._parameters = aValue;
83 }, 81 },
84 82
85 //------------------------------------------------------------------------- 83 //-------------------------------------------------------------------------
86 84
87 'isSynchronous': function() { 85 'isSynchronous': function() {
88 return this._isSynchronous; 86 return this._isSynchronous;
89 }, 87 },
90 88
91 //------------------------------------------------------------------------- 89 //-------------------------------------------------------------------------
92 __syntaxFix__: "syntax fix" 90 __syntaxFix__: "syntax fix"
93}); 91});
94 92
95 93
96//############################################################################# 94//#############################################################################
97//############################################################################# 95//#############################################################################
98 96
99Clipperz.NotificationCenter = function(args) { 97Clipperz.NotificationCenter = function(args) {
100 args = args || {}; 98 args = args || {};
101 //MochiKit.Base.bindMethods(this); 99 //MochiKit.Base.bindMethods(this);
102 100
103 this._listeners = {}; 101 this._listeners = {};
104 this._useSynchronousListenerInvocation = args.useSynchronousListenerInvocation || false; 102 this._useSynchronousListenerInvocation = args.useSynchronousListenerInvocation || false;
105 this._timeoutDelay = args.timeoutDelay || 0.1; 103 this._timeoutDelay = args.timeoutDelay || 0.1;
106 104
107 return this; 105 return this;
108} 106}
109 107
110//============================================================================= 108//=============================================================================
111 109
112Clipperz.NotificationCenter.prototype = MochiKit.Base.update(null, { 110Clipperz.NotificationCenter.prototype = MochiKit.Base.update(null, {
113 111
114 //------------------------------------------------------------------------- 112 //-------------------------------------------------------------------------
115 113
116 'toString': function() { 114 'toString': function() {
117 return "Clipperz.NotificationCenter"; 115 return "Clipperz.NotificationCenter";
118 }, 116 },
119 117
120 //------------------------------------------------------------------------- 118 //-------------------------------------------------------------------------
121 119
122 'useSynchronousListenerInvocation': function() { 120 'useSynchronousListenerInvocation': function() {
123 return this._useSynchronousListenerInvocation; 121 return this._useSynchronousListenerInvocation;
124 }, 122 },
125 123
126 'setUseSynchronousListenerInvocation': function(aValue) { 124 'setUseSynchronousListenerInvocation': function(aValue) {
127 this._useSynchronousListenerInvocation = aValue; 125 this._useSynchronousListenerInvocation = aValue;
128 }, 126 },
129 127
130 //------------------------------------------------------------------------- 128 //-------------------------------------------------------------------------
131 129
132 'timeoutDelay': function() { 130 'timeoutDelay': function() {
133 return this._timeoutDelay; 131 return this._timeoutDelay;
134 }, 132 },
135 133
136 'setTimeoutDelay': function(aValue) { 134 'setTimeoutDelay': function(aValue) {
137 this._timeoutDelay = aValue; 135 this._timeoutDelay = aValue;
138 }, 136 },
139 137
140 //------------------------------------------------------------------------- 138 //-------------------------------------------------------------------------
141 139
142 'listeners': function() { 140 'listeners': function() {
143 return this._listeners; 141 return this._listeners;
144 }, 142 },
145 143
146 //------------------------------------------------------------------------- 144 //-------------------------------------------------------------------------
147 145
148 'register': function(aSource, anEvent, aListener, aMethod) { 146 'register': function(aSource, anEvent, aListener, aMethod) {
149 vareventListeners; 147 vareventListeners;
150 varlistenerInfo; 148 varlistenerInfo;
diff --git a/frontend/beta/js/Clipperz/PM/BookmarkletProcessor.js b/frontend/beta/js/Clipperz/PM/BookmarkletProcessor.js
index 83cbfe2..2295d3f 100644
--- a/frontend/beta/js/Clipperz/PM/BookmarkletProcessor.js
+++ b/frontend/beta/js/Clipperz/PM/BookmarkletProcessor.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28//if (typeof(Clipperz.PM.BookmarkletProcessor) == 'undefined') { Clipperz.PM.BookmarkletProcessor = {}; } 26//if (typeof(Clipperz.PM.BookmarkletProcessor) == 'undefined') { Clipperz.PM.BookmarkletProcessor = {}; }
29//if (typeof(Clipperz.PM.BookmarkletProcessor.versions) == 'undefined') { Clipperz.PM.BookmarkletProcessor.versions = {}; } 27//if (typeof(Clipperz.PM.BookmarkletProcessor.versions) == 'undefined') { Clipperz.PM.BookmarkletProcessor.versions = {}; }
30 28
31/* 29/*
32Clipperz.PM.BookmarkletProcessor.versions['abstract'] = function(anUser, aConfiguration) { 30Clipperz.PM.BookmarkletProcessor.versions['abstract'] = function(anUser, aConfiguration) {
33 this._user = anUser; 31 this._user = anUser;
34 this._configuration = aConfiguration; 32 this._configuration = aConfiguration;
35 33
36 this._recordTitle = null; 34 this._recordTitle = null;
37 this._record = null; 35 this._record = null;
38 this._editableFields = null; 36 this._editableFields = null;
39 37
40 return this; 38 return this;
41} 39}
42 40
43 41
44Clipperz.PM.BookmarkletProcessor.versions['abstract'].prototype = MochiKit.Base.update(null, { 42Clipperz.PM.BookmarkletProcessor.versions['abstract'].prototype = MochiKit.Base.update(null, {
45 43
46 'toString': function() { 44 'toString': function() {
47 return "BookmarkletProcessor - " + this.user(); 45 return "BookmarkletProcessor - " + this.user();
48 }, 46 },
49 47
50 //------------------------------------------------------------------------- 48 //-------------------------------------------------------------------------
51 49
52 'user': function() { 50 'user': function() {
53 return this._user; 51 return this._user;
54 }, 52 },
55 53
56 //------------------------------------------------------------------------- 54 //-------------------------------------------------------------------------
57 55
58 'configuration': function() { 56 'configuration': function() {
59 return this._configuration; 57 return this._configuration;
60 }, 58 },
61 59
62 //------------------------------------------------------------------------- 60 //-------------------------------------------------------------------------
63 61
64 'record': function() { 62 'record': function() {
65 throw Clipperz.Base.exception.AbstractMethod; 63 throw Clipperz.Base.exception.AbstractMethod;
66 }, 64 },
67 65
68 //------------------------------------------------------------------------- 66 //-------------------------------------------------------------------------
69 __syntaxFix__: "syntax fix" 67 __syntaxFix__: "syntax fix"
70}); 68});
71*/ 69*/
72 70
73Clipperz.PM.BookmarkletProcessor = function(anUser, aConfiguration) { 71Clipperz.PM.BookmarkletProcessor = function(anUser, aConfiguration) {
74 this._user = anUser; 72 this._user = anUser;
75 this._configuration = aConfiguration; 73 this._configuration = aConfiguration;
76 74
77 this._recordTitle = null; 75 this._recordTitle = null;
78 this._record = null; 76 this._record = null;
79 this._editableFields = null; 77 this._editableFields = null;
80 this._favicon = null; 78 this._favicon = null;
81 79
82 return this; 80 return this;
83} 81}
84 82
85Clipperz.PM.BookmarkletProcessor.prototype = MochiKit.Base.update(null, { 83Clipperz.PM.BookmarkletProcessor.prototype = MochiKit.Base.update(null, {
86 84
87 'toString': function() { 85 'toString': function() {
88 return "BookmarkletProcessor - " + this.user(); 86 return "BookmarkletProcessor - " + this.user();
89 }, 87 },
90 88
91 //------------------------------------------------------------------------- 89 //-------------------------------------------------------------------------
92 90
93 'user': function() { 91 'user': function() {
94 return this._user; 92 return this._user;
95 }, 93 },
96 94
97 //------------------------------------------------------------------------- 95 //-------------------------------------------------------------------------
98 96
99 'configuration': function() { 97 'configuration': function() {
100 return this._configuration; 98 return this._configuration;
101 }, 99 },
102 100
103 //------------------------------------------------------------------------- 101 //-------------------------------------------------------------------------
104 102
105 'recordTitle': function() { 103 'recordTitle': function() {
106 if (this._recordTitle == null) { 104 if (this._recordTitle == null) {
107 this._recordTitle = this.configuration().page.title; 105 this._recordTitle = this.configuration().page.title;
108 } 106 }
109 107
110 return this._recordTitle; 108 return this._recordTitle;
111 }, 109 },
112 110
113 //------------------------------------------------------------------------- 111 //-------------------------------------------------------------------------
114 112
115 'fields': function() { 113 'fields': function() {
116 return this.configuration().form.inputs; 114 return this.configuration().form.inputs;
117 }, 115 },
118 116
119 //------------------------------------------------------------------------- 117 //-------------------------------------------------------------------------
120 118
121 'editableFields': function() { 119 'editableFields': function() {
122 if (this._editableFields == null) { 120 if (this._editableFields == null) {
123 this._editableFields = MochiKit.Base.filter(function(aField) { 121 this._editableFields = MochiKit.Base.filter(function(aField) {
124 var result; 122 var result;
125 var type; 123 var type;
126 124
127 type = aField['type'].toLowerCase(); 125 type = aField['type'].toLowerCase();
128 result = ((type != 'hidden') && (type != 'submit') && (type != 'checkbox') && (type != 'radio') && (type != 'select')); 126 result = ((type != 'hidden') && (type != 'submit') && (type != 'checkbox') && (type != 'radio') && (type != 'select'));
129 127
130 return result; 128 return result;
131 }, this.fields()) 129 }, this.fields())
132 } 130 }
133 131
134 return this._editableFields; 132 return this._editableFields;
135 }, 133 },
136 134
137 //------------------------------------------------------------------------- 135 //-------------------------------------------------------------------------
138 136
139 'hostname': function() { 137 'hostname': function() {
140 if (this._hostname == null) { 138 if (this._hostname == null) {
141 var actionUrl; 139 var actionUrl;
142 140
143 actionUrl = this.configuration()['form']['attributes']['action']; 141 actionUrl = this.configuration()['form']['attributes']['action'];
144//MochiKit.Logging.logDebug("+++ actionUrl: " + actionUrl); 142//MochiKit.Logging.logDebug("+++ actionUrl: " + actionUrl);
145 this._hostname = actionUrl.replace(/^https?:\/\/([^\/]*)\/.*/, '$1'); 143 this._hostname = actionUrl.replace(/^https?:\/\/([^\/]*)\/.*/, '$1');
146 } 144 }
147 145
148 return this._hostname; 146 return this._hostname;
149 }, 147 },
150 148
diff --git a/frontend/beta/js/Clipperz/PM/Components/BaseComponent.js b/frontend/beta/js/Clipperz/PM/Components/BaseComponent.js
index f3a3902..07c0b97 100644
--- a/frontend/beta/js/Clipperz/PM/Components/BaseComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/BaseComponent.js
@@ -1,121 +1,119 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29 27
30//############################################################################# 28//#############################################################################
31 29
32var _Clipperz_PM_Components_Panels_base_id_ = 0; 30var _Clipperz_PM_Components_Panels_base_id_ = 0;
33 31
34//############################################################################# 32//#############################################################################
35 33
36Clipperz.PM.Components.BaseComponent = function(anElement, args) { 34Clipperz.PM.Components.BaseComponent = function(anElement, args) {
37 args = args || {}; 35 args = args || {};
38 //MochiKit.Base.bindMethods(this); 36 //MochiKit.Base.bindMethods(this);
39 //Clipperz.PM.Components.BaseComponent.superclass.constructor.call(this, args); 37 //Clipperz.PM.Components.BaseComponent.superclass.constructor.call(this, args);
40 38
41 this._element = anElement; 39 this._element = anElement;
42 this._ids = {}; 40 this._ids = {};
43 41
44 return this; 42 return this;
45} 43}
46 44
47//============================================================================= 45//=============================================================================
48 46
49//MochiKit.Base.update(Clipperz.PM.Components.BaseComponent.prototype, { 47//MochiKit.Base.update(Clipperz.PM.Components.BaseComponent.prototype, {
50YAHOO.extendX(Clipperz.PM.Components.BaseComponent, YAHOO.ext.util.Observable, { 48YAHOO.extendX(Clipperz.PM.Components.BaseComponent, YAHOO.ext.util.Observable, {
51 49
52 'isClipperzPMComponent': true, 50 'isClipperzPMComponent': true,
53 51
54 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
55 53
56 'toString': function () { 54 'toString': function () {
57 return "Clipperz.PM.Components.BaseComponent component"; 55 return "Clipperz.PM.Components.BaseComponent component";
58 }, 56 },
59 57
60 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
61 59
62 'domHelper': function() { 60 'domHelper': function() {
63 return Clipperz.YUI.DomHelper; 61 return Clipperz.YUI.DomHelper;
64 }, 62 },
65 63
66 //------------------------------------------------------------------------- 64 //-------------------------------------------------------------------------
67 65
68 'element': function() { 66 'element': function() {
69//MochiKit.Logging.logDebug(">>> BaseComponent.element"); 67//MochiKit.Logging.logDebug(">>> BaseComponent.element");
70 return this._element; 68 return this._element;
71 }, 69 },
72 70
73 'setElement': function(aValue) { 71 'setElement': function(aValue) {
74 this._element = aValue; 72 this._element = aValue;
75 }, 73 },
76 74
77 //----------------------------------------------------- 75 //-----------------------------------------------------
78 76
79 'remove': function() { 77 'remove': function() {
80//MochiKit.Logging.logDebug(">>> BaseComponent.remove"); 78//MochiKit.Logging.logDebug(">>> BaseComponent.remove");
81 Clipperz.NotificationCenter.unregister(this); 79 Clipperz.NotificationCenter.unregister(this);
82 MochiKit.Signal.disconnectAllTo(this); 80 MochiKit.Signal.disconnectAllTo(this);
83//MochiKit.Logging.logDebug("<<< BaseComponent.remove"); 81//MochiKit.Logging.logDebug("<<< BaseComponent.remove");
84 }, 82 },
85 83
86 //------------------------------------------------------------------------- 84 //-------------------------------------------------------------------------
87 85
88 'getId': function(aValue) { 86 'getId': function(aValue) {
89 varresult; 87 varresult;
90 88
91 result = this._ids[aValue]; 89 result = this._ids[aValue];
92 90
93 if (typeof(result) == 'undefined') { 91 if (typeof(result) == 'undefined') {
94 _Clipperz_PM_Components_Panels_base_id_ ++; 92 _Clipperz_PM_Components_Panels_base_id_ ++;
95 93
96 result = "Clipperz_PM_Components_Panels_" + aValue + "_" + _Clipperz_PM_Components_Panels_base_id_; 94 result = "Clipperz_PM_Components_Panels_" + aValue + "_" + _Clipperz_PM_Components_Panels_base_id_;
97 this._ids[aValue] = result; 95 this._ids[aValue] = result;
98//MochiKit.Logging.logDebug(">>> getId(" + aValue + ") = " + result); 96//MochiKit.Logging.logDebug(">>> getId(" + aValue + ") = " + result);
99 } else { 97 } else {
100//MochiKit.Logging.logDebug("<<< getId(" + aValue + ") = " + result); 98//MochiKit.Logging.logDebug("<<< getId(" + aValue + ") = " + result);
101 } 99 }
102 100
103 return result; 101 return result;
104 }, 102 },
105 103
106 'getDom': function(aValue) { 104 'getDom': function(aValue) {
107 return YAHOO.util.Dom.get(this.getId(aValue)); 105 return YAHOO.util.Dom.get(this.getId(aValue));
108 }, 106 },
109 107
110 'getElement': function(aValue) { 108 'getElement': function(aValue) {
111 return YAHOO.ext.Element.get(this.getId(aValue)); 109 return YAHOO.ext.Element.get(this.getId(aValue));
112 }, 110 },
113 111
114 'getActor': function(aValue, anAnimator) { 112 'getActor': function(aValue, anAnimator) {
115 return new YAHOO.ext.Actor(this.getDom(aValue), anAnimator); 113 return new YAHOO.ext.Actor(this.getDom(aValue), anAnimator);
116 }, 114 },
117 115
118 //------------------------------------------------------------------------- 116 //-------------------------------------------------------------------------
119 __syntaxFix__: "syntax fix" 117 __syntaxFix__: "syntax fix"
120 118
121}); 119});
diff --git a/frontend/beta/js/Clipperz/PM/Components/Compact/CompactHeader.js b/frontend/beta/js/Clipperz/PM/Components/Compact/CompactHeader.js
index 7a3b3a3..14e42a5 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Compact/CompactHeader.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Compact/CompactHeader.js
@@ -1,83 +1,81 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Compact) == 'undefined') { Clipperz.PM.Components.Compact = {}; } 27if (typeof(Clipperz.PM.Components.Compact) == 'undefined') { Clipperz.PM.Components.Compact = {}; }
30 28
31Clipperz.PM.Components.Compact.CompactHeader = function(anElement, args) { 29Clipperz.PM.Components.Compact.CompactHeader = function(anElement, args) {
32 30
33 Clipperz.PM.Components.Compact.CompactHeader.superclass.constructor.call(this, anElement, args); 31 Clipperz.PM.Components.Compact.CompactHeader.superclass.constructor.call(this, anElement, args);
34 32
35 this.render(); 33 this.render();
36 34
37 return this; 35 return this;
38}; 36};
39 37
40YAHOO.extendX(Clipperz.PM.Components.Compact.CompactHeader, Clipperz.PM.Components.BaseComponent, { 38YAHOO.extendX(Clipperz.PM.Components.Compact.CompactHeader, Clipperz.PM.Components.BaseComponent, {
41 39
42 'toString': function() { 40 'toString': function() {
43 return "Clipperz.PM.Components.Compact.CompactHeader"; 41 return "Clipperz.PM.Components.Compact.CompactHeader";
44 }, 42 },
45 43
46 //----------------------------------------------------- 44 //-----------------------------------------------------
47 45
48 'render': function() { 46 'render': function() {
49 this.element().update(""); 47 this.element().update("");
50 48
51 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', children:[ 49 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', children:[
52 {tag:'img', src:'./images/logo.gif'}, 50 {tag:'img', src:'./images/logo.gif'},
53 {tag:'div', id:'lockBlock', children:[ 51 {tag:'div', id:'lockBlock', children:[
54 {tag:'input', type:'checkbox', id:'autolock'}, 52 {tag:'input', type:'checkbox', id:'autolock'},
55 {tag:'span', html:'auto'}, 53 {tag:'span', html:'auto'},
56 {tag:'a', href:'#', htmlString:Clipperz.PM.Strings['lockMenuLabel'], id:'lock'} 54 {tag:'a', href:'#', htmlString:Clipperz.PM.Strings['lockMenuLabel'], id:'lock'}
57 ]} 55 ]}
58 ]}); 56 ]});
59 57
60 Clipperz.YUI.DomHelper.append(this.element().dom, 58 Clipperz.YUI.DomHelper.append(this.element().dom,
61 {tag:'div', id:'compactMiscLinks', children:[ 59 {tag:'div', id:'compactMiscLinks', children:[
62 {tag:'a', id:'donateHeaderIconLink', target:'_blank', href:Clipperz.PM.Strings['donateHeaderLinkUrl'], children:[ 60 {tag:'a', id:'donateHeaderIconLink', target:'_blank', href:Clipperz.PM.Strings['donateHeaderLinkUrl'], children:[
63 {tag:'img', id:'donateHeaderLinkIcon', src:'./images/smiles_small.gif'} 61 {tag:'img', id:'donateHeaderLinkIcon', src:'./images/smiles_small.gif'}
64 ]}, 62 ]},
65 {tag:'ul', children:[ 63 {tag:'ul', children:[
66 {tag:'li', children:[{tag:'a', id:'donateHeaderLink', html:'donate', target:'_blank'}]}, 64 {tag:'li', children:[{tag:'a', id:'donateHeaderLink', html:'donate', target:'_blank'}]},
67 {tag:'li', children:[{tag:'a', id:'creditsHeaderLink', html:'credits', target:'_blank'}]}, 65 {tag:'li', children:[{tag:'a', id:'creditsHeaderLink', html:'credits', target:'_blank'}]},
68 {tag:'li', children:[{tag:'a', id:'feedbackHeaderLink', html:'feedback', target:'_blank'}]}, 66 {tag:'li', children:[{tag:'a', id:'feedbackHeaderLink', html:'feedback', target:'_blank'}]},
69 {tag:'li', children:[{tag:'a', id:'helpHeaderLink', html:'help', target:'_blank'}]}, 67 {tag:'li', children:[{tag:'a', id:'helpHeaderLink', html:'help', target:'_blank'}]},
70 {tag:'li', children:[{tag:'a', id:'forumHeaderLink', html:'forum', target:'_blank'}]} 68 {tag:'li', children:[{tag:'a', id:'forumHeaderLink', html:'forum', target:'_blank'}]}
71 ]} 69 ]}
72 ]} 70 ]}
73 ); 71 );
74 72
75 YAHOO.ext.Element.get('lockBlock').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 73 YAHOO.ext.Element.get('lockBlock').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
76 Clipperz.NotificationCenter.notify(this, 'switchLanguage'); 74 Clipperz.NotificationCenter.notify(this, 'switchLanguage');
77 }, 75 },
78 76
79 //----------------------------------------------------- 77 //-----------------------------------------------------
80 __syntaxFix__: '__syntaxFix__' 78 __syntaxFix__: '__syntaxFix__'
81}); 79});
82 80
83 81
diff --git a/frontend/beta/js/Clipperz/PM/Components/Compact/CompactInterface.js b/frontend/beta/js/Clipperz/PM/Components/Compact/CompactInterface.js
index 0f6858a..1312967 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Compact/CompactInterface.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Compact/CompactInterface.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Compact) == 'undefined') { Clipperz.PM.Components.Compact = {}; } 27if (typeof(Clipperz.PM.Components.Compact) == 'undefined') { Clipperz.PM.Components.Compact = {}; }
30 28
31Clipperz.PM.Components.Compact.CompactInterface = function(anElement, args) { 29Clipperz.PM.Components.Compact.CompactInterface = function(anElement, args) {
32 30
33 Clipperz.PM.Components.Compact.CompactInterface.superclass.constructor.call(this, anElement, args); 31 Clipperz.PM.Components.Compact.CompactInterface.superclass.constructor.call(this, anElement, args);
34 32
35 this._directLoginItemTemplate = null; 33 this._directLoginItemTemplate = null;
36 this._user = args.user; 34 this._user = args.user;
37 this._autoLockTimer = null; 35 this._autoLockTimer = null;
38 36
39 Clipperz.NotificationCenter.register(null, 'updatedProgressState', this, 'userNotificationHandler') 37 Clipperz.NotificationCenter.register(null, 'updatedProgressState', this, 'userNotificationHandler')
40 Clipperz.NotificationCenter.register(null, 'directLoginAdded', this, 'directLoginAddedHandler'); 38 Clipperz.NotificationCenter.register(null, 'directLoginAdded', this, 'directLoginAddedHandler');
41 39
42 this.render(); 40 this.render();
43 41
44 return this; 42 return this;
45}; 43};
46 44
47YAHOO.extendX(Clipperz.PM.Components.Compact.CompactInterface, Clipperz.PM.Components.BaseComponent, { 45YAHOO.extendX(Clipperz.PM.Components.Compact.CompactInterface, Clipperz.PM.Components.BaseComponent, {
48 46
49 'toString': function() { 47 'toString': function() {
50 return "Clipperz.PM.Components.Compact.CompactInterface"; 48 return "Clipperz.PM.Components.Compact.CompactInterface";
51 }, 49 },
52 50
53 //----------------------------------------------------- 51 //-----------------------------------------------------
54 52
55 'render': function() { 53 'render': function() {
56 var result; 54 var result;
57 varlayout; 55 varlayout;
58 var registerButton; 56 var registerButton;
59 57
60//MochiKit.Logging.logDebug(">>> CompactInterface.render"); 58//MochiKit.Logging.logDebug(">>> CompactInterface.render");
61 this.element().update(""); 59 this.element().update("");
62 60
63 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', children:[ 61 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', children:[
64 {tag:'div', id:this.getId('cantentPanel'), children:[ 62 {tag:'div', id:this.getId('cantentPanel'), children:[
65 {tag:'h4', id:this.getId('message')}, 63 {tag:'h4', id:this.getId('message')},
66 {tag:'ul', id:'directLogins', children:[]} 64 {tag:'ul', id:'directLogins', children:[]}
67 ]}, 65 ]},
68 {tag:'div', id:this.getId('lockPanel'), cls:'lockPanel', children:[ 66 {tag:'div', id:this.getId('lockPanel'), cls:'lockPanel', children:[
69 {tag:'div', htmlString:Clipperz.PM.Strings['lockDescription']}, 67 {tag:'div', htmlString:Clipperz.PM.Strings['lockDescription']},
70 {tag:'form', id:'lockDialogForm', children:[ 68 {tag:'form', id:'lockDialogForm', children:[
71 {tag:'input', type:'password', id:this.getId('lockPassphrase')} 69 {tag:'input', type:'password', id:this.getId('lockPassphrase')}
72 ]}, 70 ]},
73 {tag:'div', id:this.getId('unlock')} 71 {tag:'div', id:this.getId('unlock')}
74 ]} 72 ]}
75 ]}); 73 ]});
76 74
77 this.getElement('lockPanel').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 75 this.getElement('lockPanel').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
78 76
79 YAHOO.ext.Element.get('lockBlock').show(); 77 YAHOO.ext.Element.get('lockBlock').show();
80 MochiKit.Signal.connect(YAHOO.ext.Element.get('lock').dom, 'onclick', this, 'doLockEventHandler'); 78 MochiKit.Signal.connect(YAHOO.ext.Element.get('lock').dom, 'onclick', this, 'doLockEventHandler');
81 new YAHOO.ext.Button(this.getId('unlock'), {text:Clipperz.PM.Strings['unlockButtonLabel'], handler:this.doUnlockEventHandler, scope:this, minWidth:0}); 79 new YAHOO.ext.Button(this.getId('unlock'), {text:Clipperz.PM.Strings['unlockButtonLabel'], handler:this.doUnlockEventHandler, scope:this, minWidth:0});
82 this.getElement('unlock').swallowEvent('click', true); 80 this.getElement('unlock').swallowEvent('click', true);
83 new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('lockPassphrase')); 81 new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('lockPassphrase'));
84 MochiKit.Signal.connect('lockDialogForm', 'onsubmit', this, 'doUnlockEventHandler'); 82 MochiKit.Signal.connect('lockDialogForm', 'onsubmit', this, 'doUnlockEventHandler');
85 83
86 this.getElement('cantentPanel').setVisibilityMode(YAHOO.ext.Element.DISPLAY); 84 this.getElement('cantentPanel').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
87//MochiKit.Logging.logDebug("<<< CompactInterface.render"); 85//MochiKit.Logging.logDebug("<<< CompactInterface.render");
88 86
89 return result; 87 return result;
90 }, 88 },
91 89
92 //----------------------------------------------------- 90 //-----------------------------------------------------
93 91
94 'directLoginAddedHandler': function(anEvent) { 92 'directLoginAddedHandler': function(anEvent) {
95 this.redrawDirectLoginItems(); 93 this.redrawDirectLoginItems();
96 }, 94 },
97 95
98 //----------------------------------------------------- 96 //-----------------------------------------------------
99 97
100 'compareDirectLogins': function(a, b) { 98 'compareDirectLogins': function(a, b) {
101 return MochiKit.Base.compare(a.label().toLowerCase(), b.label().toLowerCase()); 99 return MochiKit.Base.compare(a.label().toLowerCase(), b.label().toLowerCase());
102 }, 100 },
103 101
104 //----------------------------------------------------- 102 //-----------------------------------------------------
105 103
106 'redrawDirectLoginItems': function() { 104 'redrawDirectLoginItems': function() {
107 var template; 105 var template;
108 var allDirectLogins; 106 var allDirectLogins;
109 107
110 this.getElement('message').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 108 this.getElement('message').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
111//MochiKit.Logging.logDebug(">>> CompactInterface.redrawDirectLoginItems"); 109//MochiKit.Logging.logDebug(">>> CompactInterface.redrawDirectLoginItems");
112//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 0"); 110//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 0");
113 MochiKit.Iter.forEach(YAHOO.ext.Element.get('directLogins').getChildrenByTagName('li'), function(aDirectLoginElement) { 111 MochiKit.Iter.forEach(YAHOO.ext.Element.get('directLogins').getChildrenByTagName('li'), function(aDirectLoginElement) {
114 MochiKit.Signal.disconnectAll(aDirectLoginElement.dom); 112 MochiKit.Signal.disconnectAll(aDirectLoginElement.dom);
115//MochiKit.Logging.logDebug("disconnecting IMG " + aDirectLoginElement.getChildrenByTagName('img')[0].dom.src); 113//MochiKit.Logging.logDebug("disconnecting IMG " + aDirectLoginElement.getChildrenByTagName('img')[0].dom.src);
116 MochiKit.Signal.disconnectAll(aDirectLoginElement.getChildrenByTagName('img')[0].dom); 114 MochiKit.Signal.disconnectAll(aDirectLoginElement.getChildrenByTagName('img')[0].dom);
117 }) 115 })
118//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 1"); 116//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 1");
119 YAHOO.ext.Element.get('directLogins').update(""); 117 YAHOO.ext.Element.get('directLogins').update("");
120//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 2"); 118//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 2");
121 allDirectLogins = MochiKit.Base.values(this.user().directLoginReferences()); 119 allDirectLogins = MochiKit.Base.values(this.user().directLoginReferences());
122//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 3"); 120//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 3");
123 allDirectLogins.sort(this.compareDirectLogins); 121 allDirectLogins.sort(this.compareDirectLogins);
124 122
125//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 4"); 123//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 4");
126 template = this.directLoginItemTemplate(); 124 template = this.directLoginItemTemplate();
127//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 5"); 125//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 5");
128 MochiKit.Iter.forEach(allDirectLogins, MochiKit.Base.bind(function(aDirectLogin) { 126 MochiKit.Iter.forEach(allDirectLogins, MochiKit.Base.bind(function(aDirectLogin) {
129 vardirectLoginElement; 127 vardirectLoginElement;
130 varfaviconImageElementID; 128 varfaviconImageElementID;
131 129
132 faviconImageElementID = aDirectLogin.reference() + "_faviconIMG"; 130 faviconImageElementID = aDirectLogin.reference() + "_faviconIMG";
133 directLoginElement = template.append('directLogins', { 131 directLoginElement = template.append('directLogins', {
134 elementID:faviconImageElementID, 132 elementID:faviconImageElementID,
135 faviconUrl:aDirectLogin.fixedFavicon(), 133 faviconUrl:aDirectLogin.fixedFavicon(),
136 directLoginTitle:aDirectLogin.label(), 134 directLoginTitle:aDirectLogin.label(),
137 directLoginReference:aDirectLogin.reference() 135 directLoginReference:aDirectLogin.reference()
138 }, true); 136 }, true);
139//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 6: " + recordElement.dom); 137//MochiKit.Logging.logDebug("--- CompactInterface.redrawDirectLoginItems - 6: " + recordElement.dom);
140 directLoginElement.addClassOnOver("hover"); 138 directLoginElement.addClassOnOver("hover");
141 MochiKit.Signal.connect(directLoginElement.dom, 'onclick', this, 'handleDirectLoginClick'); 139 MochiKit.Signal.connect(directLoginElement.dom, 'onclick', this, 'handleDirectLoginClick');
142 140
143 MochiKit.Signal.connect(faviconImageElementID, 'onload', this, 'handleLoadedFaviconImage'); 141 MochiKit.Signal.connect(faviconImageElementID, 'onload', this, 'handleLoadedFaviconImage');
144 MochiKit.Signal.connect(faviconImageElementID, 'onerror', aDirectLogin, 'handleMissingFaviconImage'); 142 MochiKit.Signal.connect(faviconImageElementID, 'onerror', aDirectLogin, 'handleMissingFaviconImage');
145 MochiKit.Signal.connect(faviconImageElementID, 'onabort', aDirectLogin, 'handleMissingFaviconImage'); 143 MochiKit.Signal.connect(faviconImageElementID, 'onabort', aDirectLogin, 'handleMissingFaviconImage');
146 144
147 // YAHOO.ext.Element.get(faviconImageElementID).dom.src = aDirectLogin.fixedFavicon(); 145 // YAHOO.ext.Element.get(faviconImageElementID).dom.src = aDirectLogin.fixedFavicon();
148 }, this)); 146 }, this));
149 147
150 this.resetAutoLockTimer(); 148 this.resetAutoLockTimer();
diff --git a/frontend/beta/js/Clipperz/PM/Components/Compact/LoginForm.js b/frontend/beta/js/Clipperz/PM/Components/Compact/LoginForm.js
index a1e60d8..013dd0d 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Compact/LoginForm.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Compact/LoginForm.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Compact) == 'undefined') { Clipperz.PM.Components.Compact = {}; } 27if (typeof(Clipperz.PM.Components.Compact) == 'undefined') { Clipperz.PM.Components.Compact = {}; }
30 28
31Clipperz.PM.Components.Compact.LoginForm = function(anElement, args) { 29Clipperz.PM.Components.Compact.LoginForm = function(anElement, args) {
32 30
33 Clipperz.PM.Components.Compact.LoginForm.superclass.constructor.call(this, anElement, args); 31 Clipperz.PM.Components.Compact.LoginForm.superclass.constructor.call(this, anElement, args);
34 32
35 this.render(); 33 this.render();
36 Clipperz.NotificationCenter.register(null, 'updatedProgressState', this, 'userNotificationHandler') 34 Clipperz.NotificationCenter.register(null, 'updatedProgressState', this, 'userNotificationHandler')
37 35
38 return this; 36 return this;
39}; 37};
40 38
41YAHOO.extendX(Clipperz.PM.Components.Compact.LoginForm, Clipperz.PM.Components.BaseComponent, { 39YAHOO.extendX(Clipperz.PM.Components.Compact.LoginForm, Clipperz.PM.Components.BaseComponent, {
42 40
43 'toString': function() { 41 'toString': function() {
44 return "Clipperz.PM.Components.Compact.LoginForm"; 42 return "Clipperz.PM.Components.Compact.LoginForm";
45 }, 43 },
46 44
47 //----------------------------------------------------- 45 //-----------------------------------------------------
48 46
49 'render': function() { 47 'render': function() {
50 var result; 48 var result;
51 varlayout; 49 varlayout;
52 50
53 MochiKit.Signal.disconnectAllTo(this); 51 MochiKit.Signal.disconnectAllTo(this);
54 this.element().update(""); 52 this.element().update("");
55 53
56 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', id:this.getId('baseDiv'), cls:'LoginPanel', children:[ 54 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', id:this.getId('baseDiv'), cls:'LoginPanel', children:[
57 {tag:'div', id:'compactHeader'}, 55 {tag:'div', id:'compactHeader'},
58 {tag:'div', id:'compactBody', children:[ 56 {tag:'div', id:'compactBody', children:[
59 {tag:'form', id:this.getId('loginForm_form'), children:[ 57 {tag:'form', id:this.getId('loginForm_form'), children:[
60 {tag:'dl', children:[ 58 {tag:'dl', children:[
61 {tag:'dt', htmlString:Clipperz.PM.Strings['loginFormUsernameLabel']}, 59 {tag:'dt', htmlString:Clipperz.PM.Strings['loginFormUsernameLabel']},
62 {tag:'dd', children:[ 60 {tag:'dd', children:[
63 {tag:'input', id:this.getId('login_username'), type:'text', size:'30', name:'username'} 61 {tag:'input', id:this.getId('login_username'), type:'text', size:'30', name:'username'}
64 ]}, 62 ]},
65 {tag:'dt', htmlString:Clipperz.PM.Strings['loginFormPassphraseLabel']}, 63 {tag:'dt', htmlString:Clipperz.PM.Strings['loginFormPassphraseLabel']},
66 {tag:'dd', children:[ 64 {tag:'dd', children:[
67 {tag:'input', id:this.getId('login_passphrase'), type:'password', size:'30', name:'passphrase'} 65 {tag:'input', id:this.getId('login_passphrase'), type:'password', size:'30', name:'passphrase'}
68 ]} 66 ]}
69 ]}, 67 ]},
70 {tag:'div', id:this.getId('login_submit')} 68 {tag:'div', id:this.getId('login_submit')}
71 ]}, 69 ]},
72 {tag:'h4', id:this.getId('message')} 70 {tag:'h4', id:this.getId('message')}
73 ]} 71 ]}
74 ]}); 72 ]});
75 73
76 new Clipperz.PM.Components.Compact.CompactHeader(YAHOO.ext.Element.get('compactHeader')); 74 new Clipperz.PM.Components.Compact.CompactHeader(YAHOO.ext.Element.get('compactHeader'));
77 75
78 MochiKit.Signal.connect(this.getId('loginForm_form'), 'onsubmit', this, 'stopFormSubmit'); 76 MochiKit.Signal.connect(this.getId('loginForm_form'), 'onsubmit', this, 'stopFormSubmit');
79 new YAHOO.ext.Button(this.getId('login_submit'), {text:Clipperz.PM.Strings['loginFormButtonLabel'], handler:this.doLogin, scope:this, minWidth:0}); 77 new YAHOO.ext.Button(this.getId('login_submit'), {text:Clipperz.PM.Strings['loginFormButtonLabel'], handler:this.doLogin, scope:this, minWidth:0});
80 this.getElement('login_submit').swallowEvent('click', true); 78 this.getElement('login_submit').swallowEvent('click', true);
81 79
82 MochiKit.Signal.connect(this.getId('loginForm_form'), 'onkeydown', this, 'onkeydown'); 80 MochiKit.Signal.connect(this.getId('loginForm_form'), 'onkeydown', this, 'onkeydown');
83 81
84 new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('login_passphrase')); 82 new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('login_passphrase'));
85 this.getElement('login_username').focus(); 83 this.getElement('login_username').focus();
86 84
87 return result; 85 return result;
88 }, 86 },
89 87
90 //----------------------------------------------------- 88 //-----------------------------------------------------
91 89
92 'doLogin': function(e) { 90 'doLogin': function(e) {
93//MochiKit.Logging.logDebug(">>> compact.LoginForm.doLogin"); 91//MochiKit.Logging.logDebug(">>> compact.LoginForm.doLogin");
94 if (this.checkLoginForm()) { 92 if (this.checkLoginForm()) {
95 this.doLoginWithUsernameAndPassphrase(this.getDom('login_username').value, this.getDom('login_passphrase').value); 93 this.doLoginWithUsernameAndPassphrase(this.getDom('login_username').value, this.getDom('login_passphrase').value);
96 } 94 }
97//MochiKit.Logging.logDebug("<<< compact.LoginForm.doLogin"); 95//MochiKit.Logging.logDebug("<<< compact.LoginForm.doLogin");
98 }, 96 },
99 97
100 //......................................................................... 98 //.........................................................................
101 99
102 'doLoginWithUsernameAndPassphrase': function(anUsername, aPassphrase) { 100 'doLoginWithUsernameAndPassphrase': function(anUsername, aPassphrase) {
103 var deferredResult; 101 var deferredResult;
104 var user; 102 var user;
105 103
106//MochiKit.Logging.logDebug(">>> compact.LoginForm.doLoginWithUsernameAndPassphrase"); 104//MochiKit.Logging.logDebug(">>> compact.LoginForm.doLoginWithUsernameAndPassphrase");
107 user = new Clipperz.PM.DataModel.User({username:anUsername, passphrase:aPassphrase}); 105 user = new Clipperz.PM.DataModel.User({username:anUsername, passphrase:aPassphrase});
108 106
109 deferredResult = new MochiKit.Async.Deferred(); 107 deferredResult = new MochiKit.Async.Deferred();
110 deferredResult.addCallback(MochiKit.Base.method(user, 'connect')); 108 deferredResult.addCallback(MochiKit.Base.method(user, 'connect'));
111 deferredResult.addCallback(MochiKit.Base.method(user, 'loadPreferences')); 109 deferredResult.addCallback(MochiKit.Base.method(user, 'loadPreferences'));
112 deferredResult.addCallback(MochiKit.Base.method(user, 'loadRecords')); 110 deferredResult.addCallback(MochiKit.Base.method(user, 'loadRecords'));
113 deferredResult.addCallback(MochiKit.Base.method(user, 'loadDirectLogins')); 111 deferredResult.addCallback(MochiKit.Base.method(user, 'loadDirectLogins'));
114 deferredResult.addErrback(MochiKit.Base.bind(function() { 112 deferredResult.addErrback(MochiKit.Base.bind(function() {
115 this.getElement('loginForm_form').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show(); 113 this.getElement('loginForm_form').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show();
116 this.getElement('message').update(Clipperz.PM.Strings['loginMessagePanelFailureText']); 114 this.getElement('message').update(Clipperz.PM.Strings['loginMessagePanelFailureText']);
117 this.getDom('login_passphrase').value = ""; 115 this.getDom('login_passphrase').value = "";
118 this.getElement('login_passphrase').focus(); 116 this.getElement('login_passphrase').focus();
119 }, this)) 117 }, this))
120//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("compact.LoginForm.doLogin - 6: " + res); return res;}); 118//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("compact.LoginForm.doLogin - 6: " + res); return res;});
121 deferredResult.callback("token"); 119 deferredResult.callback("token");
122//MochiKit.Logging.logDebug("<<< compact.LoginForm.doLoginWithUsernameAndPassphrase"); 120//MochiKit.Logging.logDebug("<<< compact.LoginForm.doLoginWithUsernameAndPassphrase");
123 121
124 return deferredResult; 122 return deferredResult;
125 }, 123 },
126 124
127 //......................................................................... 125 //.........................................................................
128 126
129 'checkLoginForm': function() { 127 'checkLoginForm': function() {
130 var result; 128 var result;
131 var username 129 var username
132 varpassphrase; 130 varpassphrase;
133 131
134//MochiKit.Logging.logDebug(">>> checkLoginForm"); 132//MochiKit.Logging.logDebug(">>> checkLoginForm");
135 username = this.getDom('login_username').value; 133 username = this.getDom('login_username').value;
136 passphrase = this.getDom('login_passphrase').value; 134 passphrase = this.getDom('login_passphrase').value;
137 135
138 if ((username != "") && (passphrase != "")) { 136 if ((username != "") && (passphrase != "")) {
139 result = true; 137 result = true;
140 } else { 138 } else {
141 if (username == "") { 139 if (username == "") {
142 this.getElement('login_username').focus(); 140 this.getElement('login_username').focus();
143 } else if (passphrase == "") { 141 } else if (passphrase == "") {
144 this.getElement('login_passphrase').focus(); 142 this.getElement('login_passphrase').focus();
145 } 143 }
146 144
147 result = false; 145 result = false;
148 } 146 }
149//MochiKit.Logging.logDebug("<<< checkLoginForm - " + result); 147//MochiKit.Logging.logDebug("<<< checkLoginForm - " + result);
150 148
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportColumns.js b/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportColumns.js
index 3f4952d..fef8e9e 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportColumns.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportColumns.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30if (typeof(Clipperz.PM.Components.Import.CSVImport) == 'undefined') { Clipperz.PM.Components.Import.CSVImport = {}; } 28if (typeof(Clipperz.PM.Components.Import.CSVImport) == 'undefined') { Clipperz.PM.Components.Import.CSVImport = {}; }
31 29
32//############################################################################# 30//#############################################################################
33 31
34Clipperz.PM.Components.Import.CSVImport.CSVImportColumns = function(anElement, args) { 32Clipperz.PM.Components.Import.CSVImport.CSVImportColumns = function(anElement, args) {
35 args = args || {}; 33 args = args || {};
36 34
37 Clipperz.PM.Components.Import.CSVImport.CSVImportColumns.superclass.constructor.call(this, anElement, args); 35 Clipperz.PM.Components.Import.CSVImport.CSVImportColumns.superclass.constructor.call(this, anElement, args);
38 this._mainComponent = args.mainComponent; 36 this._mainComponent = args.mainComponent;
39 37
40 return this; 38 return this;
41} 39}
42 40
43//============================================================================= 41//=============================================================================
44 42
45YAHOO.extendX(Clipperz.PM.Components.Import.CSVImport.CSVImportColumns, Clipperz.PM.Components.BaseComponent, { 43YAHOO.extendX(Clipperz.PM.Components.Import.CSVImport.CSVImportColumns, Clipperz.PM.Components.BaseComponent, {
46 44
47 'toString': function() { 45 'toString': function() {
48 return "Clipperz.PM.Components.Import.CSVImport.CSVImportColumns component"; 46 return "Clipperz.PM.Components.Import.CSVImport.CSVImportColumns component";
49 }, 47 },
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 50
53 'mainComponent': function() { 51 'mainComponent': function() {
54 return this._mainComponent; 52 return this._mainComponent;
55 }, 53 },
56 54
57 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
58 56
59 'render': function() { 57 'render': function() {
60 var i,c; 58 var i,c;
61 var columnSelectorCheckboxCells; 59 var columnSelectorCheckboxCells;
62 var checkboxes; 60 var checkboxes;
63 var data; 61 var data;
64 62
65//MochiKit.Logging.logDebug(">>> CSVImportColumns.render"); 63//MochiKit.Logging.logDebug(">>> CSVImportColumns.render");
66 Clipperz.NotificationCenter.unregister(this); 64 Clipperz.NotificationCenter.unregister(this);
67 MochiKit.Signal.disconnectAllTo(this); 65 MochiKit.Signal.disconnectAllTo(this);
68 66
69 this.element().update(""); 67 this.element().update("");
70 68
71 data = this.mainComponent().parsedValues(); 69 data = this.mainComponent().parsedValues();
72 columnSelectorCheckboxCells = []; 70 columnSelectorCheckboxCells = [];
73 71
74 c =data[0].length; 72 c =data[0].length;
75 for (i=0; i<c; i++) { 73 for (i=0; i<c; i++) {
76 columnSelectorCheckboxCells.push({tag:'th', valign:'top', cls:(this.mainComponent().isColumnSelected(i) ? 'selectedColumn': 'skippedColumn'), children:[ 74 columnSelectorCheckboxCells.push({tag:'th', valign:'top', cls:(this.mainComponent().isColumnSelected(i) ? 'selectedColumn': 'skippedColumn'), children:[
77 {tag:'input', type:'checkbox', id:this.getId('columnCheckbox_' + i), value:i} 75 {tag:'input', type:'checkbox', id:this.getId('columnCheckbox_' + i), value:i}
78 ]}) 76 ]})
79 } 77 }
80 78
81 this.domHelper().append(this.element(), {tag:'div', children:[ 79 this.domHelper().append(this.element(), {tag:'div', children:[
82 {tag:'div', cls:'importStepDescription', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Columns']}, 80 {tag:'div', cls:'importStepDescription', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Columns']},
83 {tag:'div', id:this.getId('dataDiv'), cls:'csvImportPreview', children:[ 81 {tag:'div', id:this.getId('dataDiv'), cls:'csvImportPreview', children:[
84 {tag:'table', id:this.getId('previewDada'), cls:'csvImportPreview columns', cellspacing:'0', children:[ 82 {tag:'table', id:this.getId('previewDada'), cls:'csvImportPreview columns', cellspacing:'0', children:[
85 {tag:'thead', id:this.getId('previewData_thead'), children:[ 83 {tag:'thead', id:this.getId('previewData_thead'), children:[
86 {tag:'tr', children:columnSelectorCheckboxCells} 84 {tag:'tr', children:columnSelectorCheckboxCells}
87 ]}, 85 ]},
88 {tag:'tbody', id:this.getId('previewData_tbody'), children:[]} 86 {tag:'tbody', id:this.getId('previewData_tbody'), children:[]}
89 ]} 87 ]}
90 ]} 88 ]}
91 ]}); 89 ]});
92 90
93 c =data[0].length; 91 c =data[0].length;
94 for (i=0; i<c; i++) { 92 for (i=0; i<c; i++) {
95 if (this.mainComponent().isColumnSelected(i)) { 93 if (this.mainComponent().isColumnSelected(i)) {
96 this.getDom('columnCheckbox_' + i).checked = true; 94 this.getDom('columnCheckbox_' + i).checked = true;
97 } 95 }
98 } 96 }
99 97
100 this.renderData(this.getElement('previewData_tbody'), data); 98 this.renderData(this.getElement('previewData_tbody'), data);
101 99
102 checkboxes = MochiKit.DOM.getElementsByTagAndClassName('input', null, this.getDom('previewData_thead')); 100 checkboxes = MochiKit.DOM.getElementsByTagAndClassName('input', null, this.getDom('previewData_thead'));
103 c = checkboxes.length; 101 c = checkboxes.length;
104 for (i=0; i<c; i++) { 102 for (i=0; i<c; i++) {
105 MochiKit.Signal.connect(checkboxes[i], 'onclick', this, 'renderDataHandler'); 103 MochiKit.Signal.connect(checkboxes[i], 'onclick', this, 'renderDataHandler');
106 } 104 }
107//MochiKit.Logging.logDebug("<<< CSVImportColumns.render"); 105//MochiKit.Logging.logDebug("<<< CSVImportColumns.render");
108 }, 106 },
109 107
110 //------------------------------------------------------------------------- 108 //-------------------------------------------------------------------------
111 109
112 'renderData': function(anElement, someData) { 110 'renderData': function(anElement, someData) {
113 var config; 111 var config;
114 var i,c; 112 var i,c;
115 113
116//MochiKit.Logging.logDebug(">>> CSVImportColumns.renderData"); 114//MochiKit.Logging.logDebug(">>> CSVImportColumns.renderData");
117 // anElement.update(""); 115 // anElement.update("");
118 MochiKit.DOM.replaceChildNodes(anElement.dom); 116 MochiKit.DOM.replaceChildNodes(anElement.dom);
119 117
120 config = MochiKit.Base.map(MochiKit.Base.bind(function(aRowData) { 118 config = MochiKit.Base.map(MochiKit.Base.bind(function(aRowData) {
121 var result; 119 var result;
122 var i,c; 120 var i,c;
123 121
124 result = {tag:'tr', children:[]}; 122 result = {tag:'tr', children:[]};
125 c = aRowData.length; 123 c = aRowData.length;
126 for (i=0; i<c; i++) { 124 for (i=0; i<c; i++) {
127 var field; 125 var field;
128 126
129 field = aRowData[i]; 127 field = aRowData[i];
130 result.children.push({tag:'td', valign:'top', cls:(this.mainComponent().isColumnSelected(i) ? 'selectedColumn': 'skippedColumn'), html:(MochiKit.Base.isNotEmpty(field) ? field.replace(/\n/g, '<br>') : '&nbsp;')}); 128 result.children.push({tag:'td', valign:'top', cls:(this.mainComponent().isColumnSelected(i) ? 'selectedColumn': 'skippedColumn'), html:(MochiKit.Base.isNotEmpty(field) ? field.replace(/\n/g, '<br>') : '&nbsp;')});
131 } 129 }
132 130
133 return result; 131 return result;
134 }, this), someData); 132 }, this), someData);
135 133
136 MochiKit.Base.map(function(aRowConfig) {Clipperz.YUI.DomHelper.append(anElement, aRowConfig);}, config); 134 MochiKit.Base.map(function(aRowConfig) {Clipperz.YUI.DomHelper.append(anElement, aRowConfig);}, config);
137 135
138 Clipperz.Style.applyZebraStylesToTable(this.getId('previewDada')); 136 Clipperz.Style.applyZebraStylesToTable(this.getId('previewDada'));
139//MochiKit.Logging.logDebug("<<< CSVImportColumns.renderData"); 137//MochiKit.Logging.logDebug("<<< CSVImportColumns.renderData");
140 }, 138 },
141 139
142 //------------------------------------------------------------------------- 140 //-------------------------------------------------------------------------
143 141
144 'renderDataHandler': function(anEvent) { 142 'renderDataHandler': function(anEvent) {
145 var thElement; 143 var thElement;
146 144
147 thElement = YAHOO.ext.Element.get(anEvent.src().parentNode); 145 thElement = YAHOO.ext.Element.get(anEvent.src().parentNode);
148 146
149 if (anEvent.src().checked == true) { 147 if (anEvent.src().checked == true) {
150 this.mainComponent().skippedColumns().remove(anEvent.src().value); 148 this.mainComponent().skippedColumns().remove(anEvent.src().value);
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportFields.js b/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportFields.js
index f7dbd5d..e816380 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportFields.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportFields.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30if (typeof(Clipperz.PM.Components.Import.CSVImport) == 'undefined') { Clipperz.PM.Components.Import.CSVImport = {}; } 28if (typeof(Clipperz.PM.Components.Import.CSVImport) == 'undefined') { Clipperz.PM.Components.Import.CSVImport = {}; }
31 29
32//############################################################################# 30//#############################################################################
33 31
34Clipperz.PM.Components.Import.CSVImport.CSVImportFields = function(anElement, args) { 32Clipperz.PM.Components.Import.CSVImport.CSVImportFields = function(anElement, args) {
35 args = args || {}; 33 args = args || {};
36 34
37 Clipperz.PM.Components.Import.CSVImport.CSVImportFields.superclass.constructor.call(this, anElement, args); 35 Clipperz.PM.Components.Import.CSVImport.CSVImportFields.superclass.constructor.call(this, anElement, args);
38 this._mainComponent = args.mainComponent; 36 this._mainComponent = args.mainComponent;
39 37
40 return this; 38 return this;
41} 39}
42 40
43//============================================================================= 41//=============================================================================
44 42
45YAHOO.extendX(Clipperz.PM.Components.Import.CSVImport.CSVImportFields, Clipperz.PM.Components.BaseComponent, { 43YAHOO.extendX(Clipperz.PM.Components.Import.CSVImport.CSVImportFields, Clipperz.PM.Components.BaseComponent, {
46 44
47 'toString': function() { 45 'toString': function() {
48 return "Clipperz.PM.Components.Import.CSVImport.CSVImportFields component"; 46 return "Clipperz.PM.Components.Import.CSVImport.CSVImportFields component";
49 }, 47 },
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 50
53 'mainComponent': function() { 51 'mainComponent': function() {
54 return this._mainComponent; 52 return this._mainComponent;
55 }, 53 },
56 54
57 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
58 56
59 'render': function() { 57 'render': function() {
60 varfieldsHeaderCells; 58 varfieldsHeaderCells;
61 var titleColumnIndex; 59 var titleColumnIndex;
62 var notesColumnIndex; 60 var notesColumnIndex;
63 var i,c; 61 var i,c;
64 62
65 Clipperz.NotificationCenter.unregister(this); 63 Clipperz.NotificationCenter.unregister(this);
66 MochiKit.Signal.disconnectAllTo(this); 64 MochiKit.Signal.disconnectAllTo(this);
67 65
68 this.element().update(""); 66 this.element().update("");
69 67
70 titleColumnIndex = this.mainComponent().titleColumnIndex() 68 titleColumnIndex = this.mainComponent().titleColumnIndex()
71 notesColumnIndex = this.mainComponent().notesColumnIndex() 69 notesColumnIndex = this.mainComponent().notesColumnIndex()
72 70
73 fieldsHeaderCells = []; 71 fieldsHeaderCells = [];
74 fieldsHeaderCells.push({tag:'td', valign:'top', cls:'title', html:this.mainComponent().labelForColumn(titleColumnIndex)}); 72 fieldsHeaderCells.push({tag:'td', valign:'top', cls:'title', html:this.mainComponent().labelForColumn(titleColumnIndex)});
75 73
76 c =this.mainComponent().parsedValues()[0].length; 74 c =this.mainComponent().parsedValues()[0].length;
77 for (i=0; i<c; i++) { 75 for (i=0; i<c; i++) {
78 if ((i != titleColumnIndex) && (i != notesColumnIndex) && (this.mainComponent().isColumnSelected(i))) { 76 if ((i != titleColumnIndex) && (i != notesColumnIndex) && (this.mainComponent().isColumnSelected(i))) {
79 var trimmedLabel; 77 var trimmedLabel;
80 78
81 trimmedLabel = Clipperz.Base.trim(this.mainComponent().labelForColumn(i)); 79 trimmedLabel = Clipperz.Base.trim(this.mainComponent().labelForColumn(i));
82 fieldsHeaderCells.push({tag:'td', valign:'top', id:this.getId('fieldHeaderTD_' + i), cls:((trimmedLabel == "") ? 'missingLabelWarning' : (this.isColumnSetup(i) ? 'configuredColumn': 'unconfiguredColumn')), children:[ 80 fieldsHeaderCells.push({tag:'td', valign:'top', id:this.getId('fieldHeaderTD_' + i), cls:((trimmedLabel == "") ? 'missingLabelWarning' : (this.isColumnSetup(i) ? 'configuredColumn': 'unconfiguredColumn')), children:[
83 {tag:'span', html:((trimmedLabel == "") ? Clipperz.PM.Strings['CSV_ImportWizard_Fields_MissingLabelWarning'] : trimmedLabel)/*, cls:((trimmedLabel == "") ? 'missingLabelWarning' : '')*/}, 81 {tag:'span', html:((trimmedLabel == "") ? Clipperz.PM.Strings['CSV_ImportWizard_Fields_MissingLabelWarning'] : trimmedLabel)/*, cls:((trimmedLabel == "") ? 'missingLabelWarning' : '')*/},
84 {tag:'select', id:this.getId('select_' + i), name:i, children:[ 82 {tag:'select', id:this.getId('select_' + i), name:i, children:[
85 {tag:'option', value:'UNDEFINED', html:"select data type", cls:'disabledOption'}, 83 {tag:'option', value:'UNDEFINED', html:"select data type", cls:'disabledOption'},
86 {tag:'option', value:'TXT', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['TXT']['shortDescription']}, 84 {tag:'option', value:'TXT', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['TXT']['shortDescription']},
87 {tag:'option', value:'PWD', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['PWD']['shortDescription']}, 85 {tag:'option', value:'PWD', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['PWD']['shortDescription']},
88 {tag:'option', value:'URL', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['URL']['shortDescription']}, 86 {tag:'option', value:'URL', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['URL']['shortDescription']},
89 {tag:'option', value:'DATE', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['DATE']['shortDescription']}, 87 {tag:'option', value:'DATE', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['DATE']['shortDescription']},
90 {tag:'option', value:'ADDR', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['ADDR']['shortDescription']} 88 {tag:'option', value:'ADDR', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['ADDR']['shortDescription']}
91 ]} 89 ]}
92 ]}) 90 ]})
93 } 91 }
94 } 92 }
95 93
96 if (notesColumnIndex != -1) { 94 if (notesColumnIndex != -1) {
97 fieldsHeaderCells.push({tag:'td', valign:'top', cls:'notes', html:this.mainComponent().labelForColumn(notesColumnIndex)}); 95 fieldsHeaderCells.push({tag:'td', valign:'top', cls:'notes', html:this.mainComponent().labelForColumn(notesColumnIndex)});
98 } 96 }
99 97
100 this.domHelper().append(this.element(), {tag:'div', children:[ 98 this.domHelper().append(this.element(), {tag:'div', children:[
101 {tag:'div', cls:'importStepDescription', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Fields']}, 99 {tag:'div', cls:'importStepDescription', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Fields']},
102 {tag:'div', id:this.getId('dataDiv'), children:[ 100 {tag:'div', id:this.getId('dataDiv'), children:[
103 {tag:'div', children:[ 101 {tag:'div', children:[
104 ]}, 102 ]},
105 {tag:'div', cls:'csvImportPreview', children:[ 103 {tag:'div', cls:'csvImportPreview', children:[
106 {tag:'table', id:this.getId('previewDada'), cls:'csvImportPreview', cellspacing:'0', children:[ 104 {tag:'table', id:this.getId('previewDada'), cls:'csvImportPreview', cellspacing:'0', children:[
107 {tag:'thead', id:this.getId('previewData_thead'), children:[ 105 {tag:'thead', id:this.getId('previewData_thead'), children:[
108 {tag:'tr', cls:'CSV_previewData_header', children:fieldsHeaderCells} 106 {tag:'tr', cls:'CSV_previewData_header', children:fieldsHeaderCells}
109 ]}, 107 ]},
110 {tag:'tbody', id:this.getId('previewData_tbody'), children:[]} 108 {tag:'tbody', id:this.getId('previewData_tbody'), children:[]}
111 ]} 109 ]}
112 ]} 110 ]}
113 ]} 111 ]}
114 ]}); 112 ]});
115 113
116 for (i=0; i<c; i++) { 114 for (i=0; i<c; i++) {
117 if ((i != titleColumnIndex) && (i != notesColumnIndex) && (this.mainComponent().isColumnSelected(i))) { 115 if ((i != titleColumnIndex) && (i != notesColumnIndex) && (this.mainComponent().isColumnSelected(i))) {
118 Clipperz.DOM.selectOptionMatchingValue(this.getDom('select_' + i), this.mainComponent().typeForColumn(i)); 116 Clipperz.DOM.selectOptionMatchingValue(this.getDom('select_' + i), this.mainComponent().typeForColumn(i));
119 MochiKit.Signal.connect(this.getDom('select_' + i), 'onchange', this, 'renderDataRowsHandler'); 117 MochiKit.Signal.connect(this.getDom('select_' + i), 'onchange', this, 'renderDataRowsHandler');
120 } 118 }
121 } 119 }
122 120
123 this.renderDataRows(this.getElement('previewData_tbody')); 121 this.renderDataRows(this.getElement('previewData_tbody'));
124 // Clipperz.NotificationCenter.register(null, 'updatedCSVImportColumnHeader', this, 'renderDataRowsHandler'); 122 // Clipperz.NotificationCenter.register(null, 'updatedCSVImportColumnHeader', this, 'renderDataRowsHandler');
125 }, 123 },
126 124
127 //------------------------------------------------------------------------- 125 //-------------------------------------------------------------------------
128 126
129 'isColumnSetup': function(aColumnIndex) { 127 'isColumnSetup': function(aColumnIndex) {
130 return ((Clipperz.Base.trim(this.mainComponent().labelForColumn(aColumnIndex)) != "") && (this.mainComponent().typeForColumn(aColumnIndex) != 'UNDEFINED')); 128 return ((Clipperz.Base.trim(this.mainComponent().labelForColumn(aColumnIndex)) != "") && (this.mainComponent().typeForColumn(aColumnIndex) != 'UNDEFINED'));
131 }, 129 },
132 130
133 //------------------------------------------------------------------------- 131 //-------------------------------------------------------------------------
134 132
135 'renderDataRowsHandler': function(anEvent) { 133 'renderDataRowsHandler': function(anEvent) {
136 var columnIndex; 134 var columnIndex;
137 var tdElement; 135 var tdElement;
138 136
139//MochiKit.Logging.logDebug(">>> renderDataRowsHandler") 137//MochiKit.Logging.logDebug(">>> renderDataRowsHandler")
140 columnIndex = anEvent.src().name; 138 columnIndex = anEvent.src().name;
141 this.mainComponent().setTypeForColumn(anEvent.src().value, columnIndex); 139 this.mainComponent().setTypeForColumn(anEvent.src().value, columnIndex);
142 140
143 tdElement = this.getElement('fieldHeaderTD_' + columnIndex); 141 tdElement = this.getElement('fieldHeaderTD_' + columnIndex);
144 142
145 if (this.isColumnSetup(columnIndex)) { 143 if (this.isColumnSetup(columnIndex)) {
146 tdElement.removeClass('unconfiguredColumn'); 144 tdElement.removeClass('unconfiguredColumn');
147 tdElement.addClass('configuredColumn'); 145 tdElement.addClass('configuredColumn');
148 } else { 146 } else {
149 tdElement.addClass('unconfiguredColumn'); 147 tdElement.addClass('unconfiguredColumn');
150 tdElement.removeClass('configuredColumn'); 148 tdElement.removeClass('configuredColumn');
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportHeader.js b/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportHeader.js
index 5cb8679..dbde138 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportHeader.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportHeader.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30if (typeof(Clipperz.PM.Components.Import.CSVImport) == 'undefined') { Clipperz.PM.Components.Import.CSVImport = {}; } 28if (typeof(Clipperz.PM.Components.Import.CSVImport) == 'undefined') { Clipperz.PM.Components.Import.CSVImport = {}; }
31 29
32//############################################################################# 30//#############################################################################
33 31
34Clipperz.PM.Components.Import.CSVImport.CSVImportHeader = function(anElement, args) { 32Clipperz.PM.Components.Import.CSVImport.CSVImportHeader = function(anElement, args) {
35 args = args || {}; 33 args = args || {};
36 34
37 Clipperz.PM.Components.Import.CSVImport.CSVImportHeader.superclass.constructor.call(this, anElement, args); 35 Clipperz.PM.Components.Import.CSVImport.CSVImportHeader.superclass.constructor.call(this, anElement, args);
38 this._mainComponent = args.mainComponent; 36 this._mainComponent = args.mainComponent;
39 37
40 this._pendingDeferredLabelFieldHandlerEvents = 0; 38 this._pendingDeferredLabelFieldHandlerEvents = 0;
41 39
42 return this; 40 return this;
43} 41}
44 42
45//============================================================================= 43//=============================================================================
46 44
47YAHOO.extendX(Clipperz.PM.Components.Import.CSVImport.CSVImportHeader, Clipperz.PM.Components.BaseComponent, { 45YAHOO.extendX(Clipperz.PM.Components.Import.CSVImport.CSVImportHeader, Clipperz.PM.Components.BaseComponent, {
48 46
49 'toString': function() { 47 'toString': function() {
50 return "Clipperz.PM.Components.Import.CSVImport.CSVImportHeader component"; 48 return "Clipperz.PM.Components.Import.CSVImport.CSVImportHeader component";
51 }, 49 },
52 50
53 //------------------------------------------------------------------------- 51 //-------------------------------------------------------------------------
54 52
55 'mainComponent': function() { 53 'mainComponent': function() {
56 return this._mainComponent; 54 return this._mainComponent;
57 }, 55 },
58 56
59 //------------------------------------------------------------------------- 57 //-------------------------------------------------------------------------
60 58
61 'render': function() { 59 'render': function() {
62 var thConfigs; 60 var thConfigs;
63 var i,c; 61 var i,c;
64 62
65//MochiKit.Logging.logDebug(">>> CSVImportHeader.render"); 63//MochiKit.Logging.logDebug(">>> CSVImportHeader.render");
66 Clipperz.NotificationCenter.unregister(this); 64 Clipperz.NotificationCenter.unregister(this);
67 MochiKit.Signal.disconnectAllTo(this); 65 MochiKit.Signal.disconnectAllTo(this);
68 66
69 thConfigs = []; 67 thConfigs = [];
70 c = this.mainComponent().parsedValues()[0].length; 68 c = this.mainComponent().parsedValues()[0].length;
71 for (i=0; i<c; i++) { 69 for (i=0; i<c; i++) {
72 if (this.mainComponent().isColumnSelected(i)) { 70 if (this.mainComponent().isColumnSelected(i)) {
73 // thConfigs.push({tag:'th', children:[{tag:'input', type:'text', id:this.getId('headerTextField_' + i), value:this.mainComponent().labelForColumn(i)}]}); 71 // thConfigs.push({tag:'th', children:[{tag:'input', type:'text', id:this.getId('headerTextField_' + i), value:this.mainComponent().labelForColumn(i)}]});
74 thConfigs.push({tag:'th', children:[{tag:'input', type:'text', id:this.getId('headerTextField_' + i), value:""}]}); 72 thConfigs.push({tag:'th', children:[{tag:'input', type:'text', id:this.getId('headerTextField_' + i), value:""}]});
75 } 73 }
76 } 74 }
77 75
78 this.element().update(""); 76 this.element().update("");
79 this.domHelper().append(this.element(), {tag:'div', children:[ 77 this.domHelper().append(this.element(), {tag:'div', children:[
80 {tag:'div', cls:'importStepDescription', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Header']}, 78 {tag:'div', cls:'importStepDescription', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Header']},
81 {tag:'div', cls:'importStepParameters', children:[ 79 {tag:'div', cls:'importStepParameters', children:[
82 {tag:'input', type:'checkbox', name:'isFistRowHeader', id:this.getId('isFirstRowHeader_checkbox')}, 80 {tag:'input', type:'checkbox', name:'isFistRowHeader', id:this.getId('isFirstRowHeader_checkbox')},
83 {tag:'span', id:this.getId('isFirstRowHeader_span'), cls:'clickableSpan', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Header_Settings_firstRowHeaderLabel']} 81 {tag:'span', id:this.getId('isFirstRowHeader_span'), cls:'clickableSpan', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Header_Settings_firstRowHeaderLabel']}
84 ]}, 82 ]},
85 {tag:'div', id:this.getId('dataDiv'), children:[ 83 {tag:'div', id:this.getId('dataDiv'), children:[
86 {tag:'div', cls:'csvImportPreview', children:[ 84 {tag:'div', cls:'csvImportPreview', children:[
87 {tag:'table', id:this.getId('previewDada'), cls:'csvImportPreview header', cellspacing:'0', children:[ 85 {tag:'table', id:this.getId('previewDada'), cls:'csvImportPreview header', cellspacing:'0', children:[
88 {tag:'thead', children:[{tag:'tr', children:thConfigs}]}, 86 {tag:'thead', children:[{tag:'tr', children:thConfigs}]},
89 {tag:'tbody', id:this.getId('previewData_tbody')} 87 {tag:'tbody', id:this.getId('previewData_tbody')}
90 ]} 88 ]}
91 ]} 89 ]}
92 ]} 90 ]}
93 ]}); 91 ]});
94 92
95 for (i=0; i<c; i++) { 93 for (i=0; i<c; i++) {
96 if (this.mainComponent().isColumnSelected(i)) { 94 if (this.mainComponent().isColumnSelected(i)) {
97 this.getElement('headerTextField_' + i).dom.value = this.mainComponent().labelForColumn(i); 95 this.getElement('headerTextField_' + i).dom.value = this.mainComponent().labelForColumn(i);
98 } 96 }
99 } 97 }
100 98
101 this.renderData(this.getElement('previewData_tbody'), this.mainComponent().parsedValues()); 99 this.renderData(this.getElement('previewData_tbody'), this.mainComponent().parsedValues());
102 100
103 if (this.mainComponent().isFirstRowHeader()) { 101 if (this.mainComponent().isFirstRowHeader()) {
104 this.getDom('isFirstRowHeader_checkbox').click(); 102 this.getDom('isFirstRowHeader_checkbox').click();
105 } 103 }
106 104
107 c = this.mainComponent().parsedValues()[0].length; 105 c = this.mainComponent().parsedValues()[0].length;
108 for (i=0; i<c; i++) { 106 for (i=0; i<c; i++) {
109 if (this.mainComponent().isColumnSelected(i)) { 107 if (this.mainComponent().isColumnSelected(i)) {
110 MochiKit.Signal.connect(this.getDom('headerTextField_' + i), 'onchange', MochiKit.Base.partial(MochiKit.Base.method(this, 'labelFieldHandler'), i)); 108 MochiKit.Signal.connect(this.getDom('headerTextField_' + i), 'onchange', MochiKit.Base.partial(MochiKit.Base.method(this, 'labelFieldHandler'), i));
111 MochiKit.Signal.connect(this.getDom('headerTextField_' + i), 'onkeypress', MochiKit.Base.partial(MochiKit.Base.method(this, 'deferredLabelFieldHandler'), i)); 109 MochiKit.Signal.connect(this.getDom('headerTextField_' + i), 'onkeypress', MochiKit.Base.partial(MochiKit.Base.method(this, 'deferredLabelFieldHandler'), i));
112 } 110 }
113 } 111 }
114 112
115 MochiKit.Signal.connect(this.getDom('isFirstRowHeader_checkbox'), 'onclick', this, 'toggleFirstRowHeaderCheckboxHandler'); 113 MochiKit.Signal.connect(this.getDom('isFirstRowHeader_checkbox'), 'onclick', this, 'toggleFirstRowHeaderCheckboxHandler');
116 if (Clipperz_IEisBroken != true) { 114 if (Clipperz_IEisBroken != true) {
117 MochiKit.Signal.connect(this.getDom('isFirstRowHeader_span'), 'onclick', this.getDom('isFirstRowHeader_checkbox'), 'click'); 115 MochiKit.Signal.connect(this.getDom('isFirstRowHeader_span'), 'onclick', this.getDom('isFirstRowHeader_checkbox'), 'click');
118 } 116 }
119//MochiKit.Logging.logDebug("<<< CSVImportHeader.render"); 117//MochiKit.Logging.logDebug("<<< CSVImportHeader.render");
120 }, 118 },
121 119
122 //------------------------------------------------------------------------- 120 //-------------------------------------------------------------------------
123 121
124 'renderData': function(anElement, someData) { 122 'renderData': function(anElement, someData) {
125 var trConfigs; 123 var trConfigs;
126 var data; 124 var data;
127 var i,c; 125 var i,c;
128 126
129 // anElement.update(""); 127 // anElement.update("");
130 MochiKit.DOM.replaceChildNodes(anElement.dom); 128 MochiKit.DOM.replaceChildNodes(anElement.dom);
131 129
132 if (this.mainComponent().isFirstRowHeader()) { 130 if (this.mainComponent().isFirstRowHeader()) {
133 data = someData.slice(1); 131 data = someData.slice(1);
134 } else { 132 } else {
135 data = someData; 133 data = someData;
136 } 134 }
137 135
138 trConfigs = MochiKit.Base.map(MochiKit.Base.bind(function(aRowData) { 136 trConfigs = MochiKit.Base.map(MochiKit.Base.bind(function(aRowData) {
139 var result; 137 var result;
140 var i,c; 138 var i,c;
141 139
142 result = {tag:'tr', children:[]}; 140 result = {tag:'tr', children:[]};
143 c = aRowData.length; 141 c = aRowData.length;
144 for (i=0; i<c; i++) { 142 for (i=0; i<c; i++) {
145 if (this.mainComponent().isColumnSelected(i)) { 143 if (this.mainComponent().isColumnSelected(i)) {
146 result.children.push({tag:'td', valign:'top', html:(MochiKit.Base.isNotEmpty(aRowData[i]) ? aRowData[i].replace(/\n/g, '<br>') : '&nbsp;')}); 144 result.children.push({tag:'td', valign:'top', html:(MochiKit.Base.isNotEmpty(aRowData[i]) ? aRowData[i].replace(/\n/g, '<br>') : '&nbsp;')});
147 } 145 }
148 } 146 }
149 147
150 return result; 148 return result;
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportNotes.js b/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportNotes.js
index 6344e06..ccfdeca 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportNotes.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportNotes.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30if (typeof(Clipperz.PM.Components.Import.CSVImport) == 'undefined') { Clipperz.PM.Components.Import.CSVImport = {}; } 28if (typeof(Clipperz.PM.Components.Import.CSVImport) == 'undefined') { Clipperz.PM.Components.Import.CSVImport = {}; }
31 29
32//############################################################################# 30//#############################################################################
33 31
34Clipperz.PM.Components.Import.CSVImport.CSVImportNotes = function(anElement, args) { 32Clipperz.PM.Components.Import.CSVImport.CSVImportNotes = function(anElement, args) {
35 args = args || {}; 33 args = args || {};
36 34
37 Clipperz.PM.Components.Import.CSVImport.CSVImportNotes.superclass.constructor.call(this, anElement, args); 35 Clipperz.PM.Components.Import.CSVImport.CSVImportNotes.superclass.constructor.call(this, anElement, args);
38 this._mainComponent = args.mainComponent; 36 this._mainComponent = args.mainComponent;
39 37
40 return this; 38 return this;
41} 39}
42 40
43//============================================================================= 41//=============================================================================
44 42
45YAHOO.extendX(Clipperz.PM.Components.Import.CSVImport.CSVImportNotes, Clipperz.PM.Components.BaseComponent, { 43YAHOO.extendX(Clipperz.PM.Components.Import.CSVImport.CSVImportNotes, Clipperz.PM.Components.BaseComponent, {
46 44
47 'toString': function() { 45 'toString': function() {
48 return "Clipperz.PM.Components.Import.CSVImport.CSVImportNotes component"; 46 return "Clipperz.PM.Components.Import.CSVImport.CSVImportNotes component";
49 }, 47 },
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 50
53 'mainComponent': function() { 51 'mainComponent': function() {
54 return this._mainComponent; 52 return this._mainComponent;
55 }, 53 },
56 54
57 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
58 56
59 'render': function() { 57 'render': function() {
60 varnotesSelectorCheckboxCells; 58 varnotesSelectorCheckboxCells;
61 var totalNumberOfColumns; 59 var totalNumberOfColumns;
62 var titleColumnIndex; 60 var titleColumnIndex;
63 var notesColumnIndex; 61 var notesColumnIndex;
64 var i,c; 62 var i,c;
65 63
66 Clipperz.NotificationCenter.unregister(this); 64 Clipperz.NotificationCenter.unregister(this);
67 MochiKit.Signal.disconnectAllTo(this); 65 MochiKit.Signal.disconnectAllTo(this);
68 66
69 this.element().update(""); 67 this.element().update("");
70 68
71 titleColumnIndex = this.mainComponent().titleColumnIndex() 69 titleColumnIndex = this.mainComponent().titleColumnIndex()
72 notesColumnIndex = this.mainComponent().notesColumnIndex() 70 notesColumnIndex = this.mainComponent().notesColumnIndex()
73 71
74 totalNumberOfColumns = this.mainComponent().parsedValues()[0].length; 72 totalNumberOfColumns = this.mainComponent().parsedValues()[0].length;
75 73
76 notesSelectorCheckboxCells = [{tag:'th', cls:'title', html:this.mainComponent().labelForColumn(titleColumnIndex)}]; 74 notesSelectorCheckboxCells = [{tag:'th', cls:'title', html:this.mainComponent().labelForColumn(titleColumnIndex)}];
77 c =totalNumberOfColumns; 75 c =totalNumberOfColumns;
78 for (i=0; i<c; i++) { 76 for (i=0; i<c; i++) {
79 if ((i != titleColumnIndex) && (this.mainComponent().isColumnSelected(i))) { 77 if ((i != titleColumnIndex) && (this.mainComponent().isColumnSelected(i))) {
80 notesSelectorCheckboxCells.push({tag:'th', id:this.getId('th_' + i), valign:'top', children:[ 78 notesSelectorCheckboxCells.push({tag:'th', id:this.getId('th_' + i), valign:'top', children:[
81 {tag:'input', type:'radio', id:this.getId('radio_' + i), name:'CSVImportNotesColumn', value:i}, 79 {tag:'input', type:'radio', id:this.getId('radio_' + i), name:'CSVImportNotesColumn', value:i},
82 {tag:'span', cls:'clickableSpan', id:this.getId('columnLabel_' + i), html:this.mainComponent().labelForColumn(i)} 80 {tag:'span', cls:'clickableSpan', id:this.getId('columnLabel_' + i), html:this.mainComponent().labelForColumn(i)}
83 ]}) 81 ]})
84 } 82 }
85 } 83 }
86 84
87 this.domHelper().append(this.element(), {tag:'div', children:[ 85 this.domHelper().append(this.element(), {tag:'div', children:[
88 {tag:'div', cls:'importStepDescription', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Notes']}, 86 {tag:'div', cls:'importStepDescription', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Notes']},
89 {tag:'div', id:this.getId('dataDiv'), children:[ 87 {tag:'div', id:this.getId('dataDiv'), children:[
90 {tag:'div', cls:'importStepParameters', children:[ 88 {tag:'div', cls:'importStepParameters', children:[
91 {tag:'input', id:this.getId('doNotSetNotes_radio'), type:'radio', name:'CSVImportNotesColumn', value:-1}, 89 {tag:'input', id:this.getId('doNotSetNotes_radio'), type:'radio', name:'CSVImportNotesColumn', value:-1},
92 {tag:'span', id:this.getId('doNotSetNotes_span'), cls:'clickableSpan', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Notes_Settings_noSelectionLabel']} 90 {tag:'span', id:this.getId('doNotSetNotes_span'), cls:'clickableSpan', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Notes_Settings_noSelectionLabel']}
93 ]}, 91 ]},
94 {tag:'div', cls:'csvImportPreview', children:[ 92 {tag:'div', cls:'csvImportPreview', children:[
95 {tag:'table', id:this.getId('previewDada'), cls:'csvImportPreview', cellspacing:'0', children:[ 93 {tag:'table', id:this.getId('previewDada'), cls:'csvImportPreview', cellspacing:'0', children:[
96 {tag:'thead', id:this.getId('previewData_thead'), children:[ 94 {tag:'thead', id:this.getId('previewData_thead'), children:[
97 {tag:'tr', children:notesSelectorCheckboxCells} 95 {tag:'tr', children:notesSelectorCheckboxCells}
98 ]}, 96 ]},
99 {tag:'tbody', id:this.getId('previewData_tbody'), children:[]} 97 {tag:'tbody', id:this.getId('previewData_tbody'), children:[]}
100 ]} 98 ]}
101 ]} 99 ]}
102 ]} 100 ]}
103 ]}); 101 ]});
104 102
105 this.renderData(this.getElement('previewData_tbody'), this.mainComponent().parsedValues()); 103 this.renderData(this.getElement('previewData_tbody'), this.mainComponent().parsedValues());
106 104
107 if ((notesColumnIndex >= totalNumberOfColumns) || (notesColumnIndex == titleColumnIndex) || !(this.mainComponent().isColumnSelected(notesColumnIndex))) { 105 if ((notesColumnIndex >= totalNumberOfColumns) || (notesColumnIndex == titleColumnIndex) || !(this.mainComponent().isColumnSelected(notesColumnIndex))) {
108 this.mainComponent().setNotesColumnIndex(-1); 106 this.mainComponent().setNotesColumnIndex(-1);
109 notesColumnIndex = -1; 107 notesColumnIndex = -1;
110 } 108 }
111 109
112 c =totalNumberOfColumns; 110 c =totalNumberOfColumns;
113 for (i=0; i<c; i++) { 111 for (i=0; i<c; i++) {
114 if ((i != titleColumnIndex) && (this.mainComponent().isColumnSelected(i))) { 112 if ((i != titleColumnIndex) && (this.mainComponent().isColumnSelected(i))) {
115 MochiKit.Signal.connect(this.getDom('radio_' + i), 'onclick', this, 'renderDataHandler'); 113 MochiKit.Signal.connect(this.getDom('radio_' + i), 'onclick', this, 'renderDataHandler');
116 if (Clipperz_IEisBroken != true) { 114 if (Clipperz_IEisBroken != true) {
117 MochiKit.Signal.connect(this.getDom('columnLabel_' + i), 'onclick', this.getDom('radio_' + i), 'click'); 115 MochiKit.Signal.connect(this.getDom('columnLabel_' + i), 'onclick', this.getDom('radio_' + i), 'click');
118 } 116 }
119 } 117 }
120 } 118 }
121 119
122 MochiKit.Signal.connect(this.getDom('doNotSetNotes_radio'), 'onclick', this, 'renderDataHandler'); 120 MochiKit.Signal.connect(this.getDom('doNotSetNotes_radio'), 'onclick', this, 'renderDataHandler');
123 if (Clipperz_IEisBroken != true) { 121 if (Clipperz_IEisBroken != true) {
124 MochiKit.Signal.connect(this.getDom('doNotSetNotes_span'), 'onclick', this.getDom('doNotSetNotes_radio'), 'click'); 122 MochiKit.Signal.connect(this.getDom('doNotSetNotes_span'), 'onclick', this.getDom('doNotSetNotes_radio'), 'click');
125 } 123 }
126 124
127 if (notesColumnIndex == -1) { 125 if (notesColumnIndex == -1) {
128 this.getDom('doNotSetNotes_radio').click(); 126 this.getDom('doNotSetNotes_radio').click();
129 } else { 127 } else {
130 this.getDom('radio_' + notesColumnIndex).click(); 128 this.getDom('radio_' + notesColumnIndex).click();
131 } 129 }
132 }, 130 },
133 131
134 //------------------------------------------------------------------------- 132 //-------------------------------------------------------------------------
135 133
136 'renderData': function(anElement, someData) { 134 'renderData': function(anElement, someData) {
137 var data; 135 var data;
138 var config; 136 var config;
139 var titleColumnIndex; 137 var titleColumnIndex;
140 var notesColumnIndex; 138 var notesColumnIndex;
141 var i,c; 139 var i,c;
142 140
143 // anElement.update(""); 141 // anElement.update("");
144 MochiKit.DOM.replaceChildNodes(anElement.dom); 142 MochiKit.DOM.replaceChildNodes(anElement.dom);
145 143
146 titleColumnIndex = this.mainComponent().titleColumnIndex(); 144 titleColumnIndex = this.mainComponent().titleColumnIndex();
147 notesColumnIndex = this.mainComponent().notesColumnIndex(); 145 notesColumnIndex = this.mainComponent().notesColumnIndex();
148 146
149 if (this.mainComponent().isFirstRowHeader()) { 147 if (this.mainComponent().isFirstRowHeader()) {
150 data = someData.slice(1); 148 data = someData.slice(1);
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportTitle.js b/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportTitle.js
index aa57580..4b2149a 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportTitle.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/CSVImport/CSVImportTitle.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30if (typeof(Clipperz.PM.Components.Import.CSVImport) == 'undefined') { Clipperz.PM.Components.Import.CSVImport = {}; } 28if (typeof(Clipperz.PM.Components.Import.CSVImport) == 'undefined') { Clipperz.PM.Components.Import.CSVImport = {}; }
31 29
32//############################################################################# 30//#############################################################################
33 31
34Clipperz.PM.Components.Import.CSVImport.CSVImportTitle = function(anElement, args) { 32Clipperz.PM.Components.Import.CSVImport.CSVImportTitle = function(anElement, args) {
35 args = args || {}; 33 args = args || {};
36 34
37 Clipperz.PM.Components.Import.CSVImport.CSVImportTitle.superclass.constructor.call(this, anElement, args); 35 Clipperz.PM.Components.Import.CSVImport.CSVImportTitle.superclass.constructor.call(this, anElement, args);
38 this._mainComponent = args.mainComponent; 36 this._mainComponent = args.mainComponent;
39 37
40 return this; 38 return this;
41} 39}
42 40
43//============================================================================= 41//=============================================================================
44 42
45YAHOO.extendX(Clipperz.PM.Components.Import.CSVImport.CSVImportTitle, Clipperz.PM.Components.BaseComponent, { 43YAHOO.extendX(Clipperz.PM.Components.Import.CSVImport.CSVImportTitle, Clipperz.PM.Components.BaseComponent, {
46 44
47 'toString': function() { 45 'toString': function() {
48 return "Clipperz.PM.Components.Import.CSVImport.CSVImportTitle component"; 46 return "Clipperz.PM.Components.Import.CSVImport.CSVImportTitle component";
49 }, 47 },
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 50
53 'mainComponent': function() { 51 'mainComponent': function() {
54 return this._mainComponent; 52 return this._mainComponent;
55 }, 53 },
56 54
57 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
58 56
59 'render': function() { 57 'render': function() {
60 vartitleSelectorCheckboxCells; 58 vartitleSelectorCheckboxCells;
61 var titleColumnIndex; 59 var titleColumnIndex;
62 var i,c; 60 var i,c;
63 61
64 Clipperz.NotificationCenter.unregister(this); 62 Clipperz.NotificationCenter.unregister(this);
65 MochiKit.Signal.disconnectAllTo(this); 63 MochiKit.Signal.disconnectAllTo(this);
66 64
67 this.element().update(""); 65 this.element().update("");
68 66
69 titleColumnIndex = this.mainComponent().titleColumnIndex() 67 titleColumnIndex = this.mainComponent().titleColumnIndex()
70 titleSelectorCheckboxCells = []; 68 titleSelectorCheckboxCells = [];
71 c =this.mainComponent().parsedValues()[0].length; 69 c =this.mainComponent().parsedValues()[0].length;
72 for (i=0; i<c; i++) { 70 for (i=0; i<c; i++) {
73 if (this.mainComponent().isColumnSelected(i)) { 71 if (this.mainComponent().isColumnSelected(i)) {
74 titleSelectorCheckboxCells.push({tag:'th', valign:'top', id:this.getId('th_' + i), children:[ 72 titleSelectorCheckboxCells.push({tag:'th', valign:'top', id:this.getId('th_' + i), children:[
75 {tag:'input', type:'radio', id:this.getId('radio_' + i), name:'CSVImportTitleColumn', value:i}, 73 {tag:'input', type:'radio', id:this.getId('radio_' + i), name:'CSVImportTitleColumn', value:i},
76 {tag:'span', cls:'clickableSpan', id:this.getId('columnLabel_' + i), html:this.mainComponent().labelForColumn(i)} 74 {tag:'span', cls:'clickableSpan', id:this.getId('columnLabel_' + i), html:this.mainComponent().labelForColumn(i)}
77 ]}) 75 ]})
78 } 76 }
79 } 77 }
80 78
81 if (titleColumnIndex >= titleSelectorCheckboxCells.length) { 79 if (titleColumnIndex >= titleSelectorCheckboxCells.length) {
82 this.mainComponent().setTitleColumnIndex(-1); 80 this.mainComponent().setTitleColumnIndex(-1);
83 } 81 }
84 82
85 this.domHelper().append(this.element(), {tag:'div', children:[ 83 this.domHelper().append(this.element(), {tag:'div', children:[
86 {tag:'div', cls:'importStepDescription', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Title']}, 84 {tag:'div', cls:'importStepDescription', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Title']},
87 {tag:'div', id:this.getId('dataDiv'), cls:'csvImportPreview', children:[ 85 {tag:'div', id:this.getId('dataDiv'), cls:'csvImportPreview', children:[
88 {tag:'table', id:this.getId('previewDada'), cls:'csvImportPreview', cellspacing:'0', children:[ 86 {tag:'table', id:this.getId('previewDada'), cls:'csvImportPreview', cellspacing:'0', children:[
89 {tag:'thead', id:this.getId('previewData_thead'), children:[ 87 {tag:'thead', id:this.getId('previewData_thead'), children:[
90 {tag:'tr', children:titleSelectorCheckboxCells} 88 {tag:'tr', children:titleSelectorCheckboxCells}
91 ]}, 89 ]},
92 {tag:'tbody', id:this.getId('previewData_tbody'), children:[]} 90 {tag:'tbody', id:this.getId('previewData_tbody'), children:[]}
93 ]} 91 ]}
94 ]} 92 ]}
95 ]}); 93 ]});
96 94
97 this.renderData(this.getElement('previewData_tbody'), this.mainComponent().parsedValues()); 95 this.renderData(this.getElement('previewData_tbody'), this.mainComponent().parsedValues());
98 96
99 c =this.mainComponent().parsedValues()[0].length; 97 c =this.mainComponent().parsedValues()[0].length;
100 for (i=0; i<c; i++) { 98 for (i=0; i<c; i++) {
101 if (this.mainComponent().isColumnSelected(i)) { 99 if (this.mainComponent().isColumnSelected(i)) {
102 MochiKit.Signal.connect(this.getDom('radio_' + i), 'onclick', this, 'renderDataHandler'); 100 MochiKit.Signal.connect(this.getDom('radio_' + i), 'onclick', this, 'renderDataHandler');
103 if (Clipperz_IEisBroken != true) { 101 if (Clipperz_IEisBroken != true) {
104 MochiKit.Signal.connect(this.getDom('columnLabel_' + i), 'onclick', this.getDom('radio_' + i), 'click'); 102 MochiKit.Signal.connect(this.getDom('columnLabel_' + i), 'onclick', this.getDom('radio_' + i), 'click');
105 } 103 }
106 } 104 }
107 } 105 }
108 106
109 if (titleColumnIndex != -1) { 107 if (titleColumnIndex != -1) {
110 this.getDom('radio_' + titleColumnIndex).click(); 108 this.getDom('radio_' + titleColumnIndex).click();
111 } else { 109 } else {
112 this.mainComponent().nextButton().disable(); 110 this.mainComponent().nextButton().disable();
113 } 111 }
114 112
115 }, 113 },
116 114
117 //------------------------------------------------------------------------- 115 //-------------------------------------------------------------------------
118 116
119 'renderData': function(anElement, someData) { 117 'renderData': function(anElement, someData) {
120 var data; 118 var data;
121 var config; 119 var config;
122 var titleColumnIndex; 120 var titleColumnIndex;
123 var i,c; 121 var i,c;
124 122
125 // anElement.update(""); 123 // anElement.update("");
126 MochiKit.DOM.replaceChildNodes(anElement.dom); 124 MochiKit.DOM.replaceChildNodes(anElement.dom);
127 125
128 titleColumnIndex = this.mainComponent().titleColumnIndex() 126 titleColumnIndex = this.mainComponent().titleColumnIndex()
129 127
130 if (this.mainComponent().isFirstRowHeader()) { 128 if (this.mainComponent().isFirstRowHeader()) {
131 data = someData.slice(1); 129 data = someData.slice(1);
132 } else { 130 } else {
133 data = someData; 131 data = someData;
134 } 132 }
135 133
136 config = MochiKit.Base.map(MochiKit.Base.bind(function(aRowData) { 134 config = MochiKit.Base.map(MochiKit.Base.bind(function(aRowData) {
137 var result; 135 var result;
138 var i,c; 136 var i,c;
139 137
140 result = {tag:'tr', children:[]}; 138 result = {tag:'tr', children:[]};
141 c = aRowData.length; 139 c = aRowData.length;
142 for (i=0; i<c; i++) { 140 for (i=0; i<c; i++) {
143 if (this.mainComponent().isColumnSelected(i)) { 141 if (this.mainComponent().isColumnSelected(i)) {
144 var field; 142 var field;
145 143
146 field = aRowData[i]; 144 field = aRowData[i];
147 result.children.push({tag:'td', valign:'top', cls:((titleColumnIndex == i) ? 'titleColumn': ''), html:(MochiKit.Base.isNotEmpty(field) ? field.replace(/\n/g, '<br>') : '&nbsp;')}); 145 result.children.push({tag:'td', valign:'top', cls:((titleColumnIndex == i) ? 'titleColumn': ''), html:(MochiKit.Base.isNotEmpty(field) ? field.replace(/\n/g, '<br>') : '&nbsp;')});
148 } 146 }
149 } 147 }
150 148
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/CSVImportComponent.js b/frontend/beta/js/Clipperz/PM/Components/Import/CSVImportComponent.js
index c1dd1a9..bd305c3 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/CSVImportComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/CSVImportComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Import.CSVImportComponent = function(anElement, args) { 31Clipperz.PM.Components.Import.CSVImportComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 this._steps = this._steps || ['CSV_EDIT', 'CSV_COLUMNS', 'CSV_HEADER', 'CSV_TITLE', 'CSV_NOTES', 'CSV_FIELDS', 'PREVIEW', 'IMPORT']; 34 this._steps = this._steps || ['CSV_EDIT', 'CSV_COLUMNS', 'CSV_HEADER', 'CSV_TITLE', 'CSV_NOTES', 'CSV_FIELDS', 'PREVIEW', 'IMPORT'];
37 35
38 Clipperz.PM.Components.Import.CSVImportComponent.superclass.constructor.call(this, anElement, args); 36 Clipperz.PM.Components.Import.CSVImportComponent.superclass.constructor.call(this, anElement, args);
39 37
40 this._step1Component = null; 38 this._step1Component = null;
41 this._step2Component = null; 39 this._step2Component = null;
42 this._step3Component = null; 40 this._step3Component = null;
43 this._step4Component = null; 41 this._step4Component = null;
44 this._step5Component = null; 42 this._step5Component = null;
45 43
46 this._isFirstRowHeader = false; 44 this._isFirstRowHeader = false;
47 this._titleColumnIndex = -1; 45 this._titleColumnIndex = -1;
48 this._notesColumnIndex = -1; 46 this._notesColumnIndex = -1;
49 this._fieldSettings = {}; 47 this._fieldSettings = {};
50 this._skippedColumns = new Clipperz.Set(); 48 this._skippedColumns = new Clipperz.Set();
51 49
52 this.render(); 50 this.render();
53 51
54 return this; 52 return this;
55} 53}
56 54
57//============================================================================= 55//=============================================================================
58 56
59YAHOO.extendX(Clipperz.PM.Components.Import.CSVImportComponent, Clipperz.PM.Components.Import.GenericImportComponent, { 57YAHOO.extendX(Clipperz.PM.Components.Import.CSVImportComponent, Clipperz.PM.Components.Import.GenericImportComponent, {
60 58
61 'toString': function() { 59 'toString': function() {
62 return "Clipperz.PM.Components.Import.CSVImportComponent component"; 60 return "Clipperz.PM.Components.Import.CSVImportComponent component";
63 }, 61 },
64 62
65 //------------------------------------------------------------------------- 63 //-------------------------------------------------------------------------
66 64
67 'render': function() { 65 'render': function() {
68 this.domHelper().append(this.element(), {tag:'div', cls:'csvImportWizard', children:[ 66 this.domHelper().append(this.element(), {tag:'div', cls:'csvImportWizard', children:[
69 {tag:'h3', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Title']}, 67 {tag:'h3', htmlString:Clipperz.PM.Strings['CSV_ImportWizard_Title']},
70 {tag:'div', cls:'importSteps', id:this.getId('importSteps')}, 68 {tag:'div', cls:'importSteps', id:this.getId('importSteps')},
71 {tag:'div', cls:'importStepBlocks', children:[ 69 {tag:'div', cls:'importStepBlocks', children:[
72 {tag:'div', cls:'step_0', id:this.getId('step_0'), children:[ 70 {tag:'div', cls:'step_0', id:this.getId('step_0'), children:[
73 {tag:'div', children:[ 71 {tag:'div', children:[
74 {tag:'div', cls:'importOptionsDescription', htmlString:Clipperz.PM.Strings['importOptions_csv_description']}, 72 {tag:'div', cls:'importOptionsDescription', htmlString:Clipperz.PM.Strings['importOptions_csv_description']},
75 {tag:'div', cls:'importOptionsParameters', children:[ 73 {tag:'div', cls:'importOptionsParameters', children:[
76 {tag:'div', cls:'CSVImportOptionsParameters', children:[ 74 {tag:'div', cls:'CSVImportOptionsParameters', children:[
77 {tag:'ul', children:[ 75 {tag:'ul', children:[
78 {tag:'li', children:[ 76 {tag:'li', children:[
79 {tag:'label', 'for':this.getId('CSV_inputOptions_separator'), html:"separator"}, 77 {tag:'label', 'for':this.getId('CSV_inputOptions_separator'), html:"separator"},
80 {tag:'select', name:this.getId('CSV_inputOptions_separator'), id:this.getId('CSV_inputOptions_separator'), children:[ 78 {tag:'select', name:this.getId('CSV_inputOptions_separator'), id:this.getId('CSV_inputOptions_separator'), children:[
81 {tag:'option', name:'comma', value:',', html:"comma (,)", selected:true}, 79 {tag:'option', name:'comma', value:',', html:"comma (,)", selected:true},
82 {tag:'option', name:'tab', value:'\t', html:"tab"} 80 {tag:'option', name:'tab', value:'\t', html:"tab"}
83 ]} 81 ]}
84 ]}, 82 ]},
85 83
86 {tag:'li', children:[ 84 {tag:'li', children:[
87 {tag:'label', 'for':this.getId('CSV_inputOptions_quote'), html:"quote"}, 85 {tag:'label', 'for':this.getId('CSV_inputOptions_quote'), html:"quote"},
88 {tag:'select', name:this.getId('CSV_inputOptions_quote'), id:this.getId('CSV_inputOptions_quote'), children:[ 86 {tag:'select', name:this.getId('CSV_inputOptions_quote'), id:this.getId('CSV_inputOptions_quote'), children:[
89 {tag:'option', name:'doubleQuote', value:'\"', html:"double quote (\")", selected:true}, 87 {tag:'option', name:'doubleQuote', value:'\"', html:"double quote (\")", selected:true},
90 {tag:'option', name:'singleQuote', value:'\'', html:"single quote (\')"} 88 {tag:'option', name:'singleQuote', value:'\'', html:"single quote (\')"}
91 ]} 89 ]}
92 ]}, 90 ]},
93 91
94 {tag:'li', children:[ 92 {tag:'li', children:[
95 {tag:'label', 'for':this.getId('CSV_inputOptions_escape'), html:"escape"}, 93 {tag:'label', 'for':this.getId('CSV_inputOptions_escape'), html:"escape"},
96 {tag:'select', name:this.getId('CSV_inputOptions_escape'), id:this.getId('CSV_inputOptions_escape'), children:[ 94 {tag:'select', name:this.getId('CSV_inputOptions_escape'), id:this.getId('CSV_inputOptions_escape'), children:[
97 {tag:'option', name:'doubleQuote', value:'\"', html:"double quote (\")", selected:true}, 95 {tag:'option', name:'doubleQuote', value:'\"', html:"double quote (\")", selected:true},
98 {tag:'option', name:'slash', value:'\/', html:"slash (\/)"}, 96 {tag:'option', name:'slash', value:'\/', html:"slash (\/)"},
99 {tag:'option', name:'backslash', value:'\\', html:"backslash (\\)"} 97 {tag:'option', name:'backslash', value:'\\', html:"backslash (\\)"}
100 ]} 98 ]}
101 ]} 99 ]}
102 ]} 100 ]}
103 ]} 101 ]}
104 ]}, 102 ]},
105 this.textAreaConfig() 103 this.textAreaConfig()
106 ]} 104 ]}
107 ]}, 105 ]},
108 {tag:'div', cls:'step_1', id:this.getId('step_1'), children:[]}, 106 {tag:'div', cls:'step_1', id:this.getId('step_1'), children:[]},
109 {tag:'div', cls:'step_2', id:this.getId('step_2'), children:[]}, 107 {tag:'div', cls:'step_2', id:this.getId('step_2'), children:[]},
110 {tag:'div', cls:'step_3', id:this.getId('step_3'), children:[]}, 108 {tag:'div', cls:'step_3', id:this.getId('step_3'), children:[]},
111 {tag:'div', cls:'step_4', id:this.getId('step_4'), children:[]}, 109 {tag:'div', cls:'step_4', id:this.getId('step_4'), children:[]},
112 {tag:'div', cls:'step_5', id:this.getId('step_5'), children:[]}, 110 {tag:'div', cls:'step_5', id:this.getId('step_5'), children:[]},
113 {tag:'div', cls:'step_6', id:this.getId('step_6'), children:[ 111 {tag:'div', cls:'step_6', id:this.getId('step_6'), children:[
114 {tag:'div', children:[ 112 {tag:'div', children:[
115 {tag:'div', id:this.getId('previewDiv'), html:"preview"} 113 {tag:'div', id:this.getId('previewDiv'), html:"preview"}
116 ]} 114 ]}
117 ]}, 115 ]},
118 {tag:'div', cls:'step_7', id:this.getId('step_7'), children:[ 116 {tag:'div', cls:'step_7', id:this.getId('step_7'), children:[
119 {tag:'div', children:[ 117 {tag:'div', children:[
120 {tag:'h4', html:"done"} 118 {tag:'h4', html:"done"}
121 ]} 119 ]}
122 ]} 120 ]}
123 ]}, 121 ]},
124 {tag:'div', cls:'importOptionsButtons', children:[ 122 {tag:'div', cls:'importOptionsButtons', children:[
125 {tag:'table', children:[ 123 {tag:'table', children:[
126 {tag:'tbody', children:[ 124 {tag:'tbody', children:[
127 {tag:'tr', children:[ 125 {tag:'tr', children:[
128 {tag:'td', html:'&nbsp;'}, 126 {tag:'td', html:'&nbsp;'},
129 {tag:'td', children:[ 127 {tag:'td', children:[
130 {tag:'div', id:this.getId('backActionButton')} 128 {tag:'div', id:this.getId('backActionButton')}
131 ]}, 129 ]},
132 {tag:'td', html:'&nbsp;'}, 130 {tag:'td', html:'&nbsp;'},
133 {tag:'td', children:[ 131 {tag:'td', children:[
134 {tag:'div', id:this.getId('nextActionButton')} 132 {tag:'div', id:this.getId('nextActionButton')}
135 ]}, 133 ]},
136 {tag:'td', html:'&nbsp;'} 134 {tag:'td', html:'&nbsp;'}
137 ]} 135 ]}
138 ]} 136 ]}
139 ]} 137 ]}
140 ]} 138 ]}
141 ]}); 139 ]});
142 140
143 this.setBackButton(new YAHOO.ext.Button(this.getDom('backActionButton'), {text:"back", handler:this.backAction, scope:this})); 141 this.setBackButton(new YAHOO.ext.Button(this.getDom('backActionButton'), {text:"back", handler:this.backAction, scope:this}));
144 this.setNextButton(new YAHOO.ext.Button(this.getDom('nextActionButton'), {text:"next", handler:this.nextAction, scope:this})); 142 this.setNextButton(new YAHOO.ext.Button(this.getDom('nextActionButton'), {text:"next", handler:this.nextAction, scope:this}));
145 143
146 this.updateSteps(); 144 this.updateSteps();
147 145
148 this.getElement('step_0').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show() 146 this.getElement('step_0').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show()
149 this.getElement('step_1').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 147 this.getElement('step_1').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
150 this.getElement('step_2').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 148 this.getElement('step_2').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/ClipperzImportComponent.js b/frontend/beta/js/Clipperz/PM/Components/Import/ClipperzImportComponent.js
index c3d2fac..d74961b 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/ClipperzImportComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/ClipperzImportComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Import.ClipperzImportComponent = function(anElement, args) { 31Clipperz.PM.Components.Import.ClipperzImportComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.Import.ClipperzImportComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.Import.ClipperzImportComponent.superclass.constructor.call(this, anElement, args);
37 35
38 this.render(); 36 this.render();
39 37
40 return this; 38 return this;
41} 39}
42 40
43//============================================================================= 41//=============================================================================
44 42
45YAHOO.extendX(Clipperz.PM.Components.Import.ClipperzImportComponent, Clipperz.PM.Components.Import.GenericImportComponent, { 43YAHOO.extendX(Clipperz.PM.Components.Import.ClipperzImportComponent, Clipperz.PM.Components.Import.GenericImportComponent, {
46 44
47 'toString': function() { 45 'toString': function() {
48 return "Clipperz.PM.Components.Import.ClipperzImportComponent component"; 46 return "Clipperz.PM.Components.Import.ClipperzImportComponent component";
49 }, 47 },
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 50
53 'render': function() { 51 'render': function() {
54//MochiKit.Logging.logDebug(">>> Import.ClipperzImportComponent.render"); 52//MochiKit.Logging.logDebug(">>> Import.ClipperzImportComponent.render");
55 this.domHelper().append(this.element(), {tag:'div', cls:'clipperzImportWizard', children:[ 53 this.domHelper().append(this.element(), {tag:'div', cls:'clipperzImportWizard', children:[
56 {tag:'h3', htmlString:Clipperz.PM.Strings['Clipperz_ImportWizard_Title']}, 54 {tag:'h3', htmlString:Clipperz.PM.Strings['Clipperz_ImportWizard_Title']},
57 {tag:'div', cls:'importSteps', id:this.getId('importSteps')}, 55 {tag:'div', cls:'importSteps', id:this.getId('importSteps')},
58 {tag:'div', cls:'importStepBlocks', children:[ 56 {tag:'div', cls:'importStepBlocks', children:[
59 {tag:'div', cls:'step_0', id:this.getId('step_0'), children:[ 57 {tag:'div', cls:'step_0', id:this.getId('step_0'), children:[
60 {tag:'div', children:[ 58 {tag:'div', children:[
61 {tag:'div', cls:'importOptionsDescription', htmlString:Clipperz.PM.Strings['importOptions_clipperz_description']}, 59 {tag:'div', cls:'importOptionsDescription', htmlString:Clipperz.PM.Strings['importOptions_clipperz_description']},
62 {tag:'div', cls:'importOptionsParameters', children:[]}, 60 {tag:'div', cls:'importOptionsParameters', children:[]},
63 this.textAreaConfig() 61 this.textAreaConfig()
64 ]} 62 ]}
65 ]}, 63 ]},
66 {tag:'div', cls:'step_1', id:this.getId('step_1'), children:[ 64 {tag:'div', cls:'step_1', id:this.getId('step_1'), children:[
67 {tag:'div', children:[ 65 {tag:'div', children:[
68 {tag:'div', id:this.getId('previewDiv'), html:"preview"} 66 {tag:'div', id:this.getId('previewDiv'), html:"preview"}
69 ]} 67 ]}
70 ]}, 68 ]},
71 {tag:'div', cls:'step_2', id:this.getId('step_2'), children:[ 69 {tag:'div', cls:'step_2', id:this.getId('step_2'), children:[
72 {tag:'div', children:[ 70 {tag:'div', children:[
73 {tag:'h4', html:"done"} 71 {tag:'h4', html:"done"}
74 ]} 72 ]}
75 ]} 73 ]}
76 ]}, 74 ]},
77 {tag:'div', cls:'importOptionsButtons', children:[ 75 {tag:'div', cls:'importOptionsButtons', children:[
78 {tag:'table', children:[ 76 {tag:'table', children:[
79 {tag:'tbody', children:[ 77 {tag:'tbody', children:[
80 {tag:'tr', children:[ 78 {tag:'tr', children:[
81 {tag:'td', html:'&nbsp;'}, 79 {tag:'td', html:'&nbsp;'},
82 {tag:'td', children:[ 80 {tag:'td', children:[
83 {tag:'div', id:this.getId('backActionButton')} 81 {tag:'div', id:this.getId('backActionButton')}
84 ]}, 82 ]},
85 {tag:'td', html:'&nbsp;'}, 83 {tag:'td', html:'&nbsp;'},
86 {tag:'td', children:[ 84 {tag:'td', children:[
87 {tag:'div', id:this.getId('nextActionButton')} 85 {tag:'div', id:this.getId('nextActionButton')}
88 ]}, 86 ]},
89 {tag:'td', html:'&nbsp;'} 87 {tag:'td', html:'&nbsp;'}
90 ]} 88 ]}
91 ]} 89 ]}
92 ]} 90 ]}
93 ]} 91 ]}
94 ]}); 92 ]});
95 93
96 this.updateSteps(); 94 this.updateSteps();
97 95
98 this.setBackButton(new YAHOO.ext.Button(this.getDom('backActionButton'), {text:"back", handler:this.backAction, scope:this})); 96 this.setBackButton(new YAHOO.ext.Button(this.getDom('backActionButton'), {text:"back", handler:this.backAction, scope:this}));
99 this.setNextButton(new YAHOO.ext.Button(this.getDom('nextActionButton'), {text:"next", handler:this.nextAction, scope:this})); 97 this.setNextButton(new YAHOO.ext.Button(this.getDom('nextActionButton'), {text:"next", handler:this.nextAction, scope:this}));
100 98
101 this.getElement('step_0').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show() 99 this.getElement('step_0').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show()
102 this.getElement('step_1').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 100 this.getElement('step_1').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
103 this.getElement('step_2').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 101 this.getElement('step_2').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
104//MochiKit.Logging.logDebug("<<< Import.ClipperzImportComponent.render"); 102//MochiKit.Logging.logDebug("<<< Import.ClipperzImportComponent.render");
105 }, 103 },
106 104
107 //------------------------------------------------------------------------- 105 //-------------------------------------------------------------------------
108 106
109 'nextAction': function() { 107 'nextAction': function() {
110 switch (this.currentStep()) { 108 switch (this.currentStep()) {
111 case 0: //-> 1 109 case 0: //-> 1
112 this.previewValues(); 110 this.previewValues();
113 break; 111 break;
114 case 1: //-> 2 112 case 1: //-> 2
115 this.importValues(); 113 this.importValues();
116 break; 114 break;
117 } 115 }
118 }, 116 },
119 117
120 //------------------------------------------------------------------------- 118 //-------------------------------------------------------------------------
121 119
122 'deferredPreviewValues': function() { 120 'deferredPreviewValues': function() {
123 var deferredResult; 121 var deferredResult;
124 122
125 deferredResult = new MochiKit.Async.Deferred(); 123 deferredResult = new MochiKit.Async.Deferred();
126 deferredResult.addCallback(MochiKit.Base.bind(function(res) { 124 deferredResult.addCallback(MochiKit.Base.bind(function(res) {
127 this.startProcessing(); 125 this.startProcessing();
128 126
129 return res; 127 return res;
130 }, this)); 128 }, this));
131 deferredResult.addCallback(MochiKit.Base.method(this, 'processClipperzValues')); 129 deferredResult.addCallback(MochiKit.Base.method(this, 'processClipperzValues'));
132 deferredResult.addCallback(MochiKit.Base.method(this, 'setProcessedValues')); 130 deferredResult.addCallback(MochiKit.Base.method(this, 'setProcessedValues'));
133 deferredResult.addCallback(MochiKit.Base.method(this, 'previewRecordValues')); 131 deferredResult.addCallback(MochiKit.Base.method(this, 'previewRecordValues'));
134 deferredResult.addCallback(MochiKit.Base.bind(function(res) { 132 deferredResult.addCallback(MochiKit.Base.bind(function(res) {
135 this.processingDone(); 133 this.processingDone();
136 this.getElement('step_0').hide(); 134 this.getElement('step_0').hide();
137 this.getElement('step_1').show(); 135 this.getElement('step_1').show();
138 this.backButton().enable(); 136 this.backButton().enable();
139 137
140 return res; 138 return res;
141 }, this)); 139 }, this));
142 // deferredResult.addErrback(MochiKit.Base.bind(function() { 140 // deferredResult.addErrback(MochiKit.Base.bind(function() {
143 // this.processingAborted(); 141 // this.processingAborted();
144 // }, this)) 142 // }, this))
145 deferredResult.callback(this.textAreaContent()); 143 deferredResult.callback(this.textAreaContent());
146 144
147 return deferredResult; 145 return deferredResult;
148 }, 146 },
149 147
150 //------------------------------------------------------------------------- 148 //-------------------------------------------------------------------------
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/ExcelImportComponent.js b/frontend/beta/js/Clipperz/PM/Components/Import/ExcelImportComponent.js
index ad0d985..859c190 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/ExcelImportComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/ExcelImportComponent.js
@@ -1,131 +1,129 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Import.ExcelImportComponent = function(anElement, args) { 31Clipperz.PM.Components.Import.ExcelImportComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 this._steps = ['EXCEL_EDIT', 'CSV_COLUMNS', 'CSV_HEADER', 'CSV_TITLE', 'CSV_NOTES', 'CSV_FIELDS', 'PREVIEW', 'IMPORT']; 34 this._steps = ['EXCEL_EDIT', 'CSV_COLUMNS', 'CSV_HEADER', 'CSV_TITLE', 'CSV_NOTES', 'CSV_FIELDS', 'PREVIEW', 'IMPORT'];
37 35
38 Clipperz.PM.Components.Import.ExcelImportComponent.superclass.constructor.call(this, anElement, args); 36 Clipperz.PM.Components.Import.ExcelImportComponent.superclass.constructor.call(this, anElement, args);
39 37
40 return this; 38 return this;
41} 39}
42 40
43//============================================================================= 41//=============================================================================
44 42
45YAHOO.extendX(Clipperz.PM.Components.Import.ExcelImportComponent, Clipperz.PM.Components.Import.CSVImportComponent, { 43YAHOO.extendX(Clipperz.PM.Components.Import.ExcelImportComponent, Clipperz.PM.Components.Import.CSVImportComponent, {
46 44
47 'toString': function() { 45 'toString': function() {
48 return "Clipperz.PM.Components.Import.ExcelImportComponent component"; 46 return "Clipperz.PM.Components.Import.ExcelImportComponent component";
49 }, 47 },
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 50
53 'render': function() { 51 'render': function() {
54//MochiKit.Logging.logDebug(">>> Import.ExcelImportComponent.render"); 52//MochiKit.Logging.logDebug(">>> Import.ExcelImportComponent.render");
55 this.domHelper().append(this.element(), {tag:'div', cls:'excelImportWizard', children:[ 53 this.domHelper().append(this.element(), {tag:'div', cls:'excelImportWizard', children:[
56 {tag:'h3', htmlString:Clipperz.PM.Strings['Excel_ImportWizard_Title']}, 54 {tag:'h3', htmlString:Clipperz.PM.Strings['Excel_ImportWizard_Title']},
57 {tag:'div', cls:'importSteps', id:this.getId('importSteps')}, 55 {tag:'div', cls:'importSteps', id:this.getId('importSteps')},
58 {tag:'div', cls:'importStepBlocks', children:[ 56 {tag:'div', cls:'importStepBlocks', children:[
59 {tag:'div', cls:'step_0', id:this.getId('step_0'), children:[ 57 {tag:'div', cls:'step_0', id:this.getId('step_0'), children:[
60 {tag:'div', children:[ 58 {tag:'div', children:[
61 {tag:'div', cls:'importOptionsDescription', htmlString:Clipperz.PM.Strings['importOptions_excel_description']}, 59 {tag:'div', cls:'importOptionsDescription', htmlString:Clipperz.PM.Strings['importOptions_excel_description']},
62 {tag:'div', cls:'importOptionsParameters', children:[]}, 60 {tag:'div', cls:'importOptionsParameters', children:[]},
63 this.textAreaConfig() 61 this.textAreaConfig()
64 ]} 62 ]}
65 ]}, 63 ]},
66 {tag:'div', cls:'step_1', id:this.getId('step_1'), children:[]}, 64 {tag:'div', cls:'step_1', id:this.getId('step_1'), children:[]},
67 {tag:'div', cls:'step_2', id:this.getId('step_2'), children:[]}, 65 {tag:'div', cls:'step_2', id:this.getId('step_2'), children:[]},
68 {tag:'div', cls:'step_3', id:this.getId('step_3'), children:[]}, 66 {tag:'div', cls:'step_3', id:this.getId('step_3'), children:[]},
69 {tag:'div', cls:'step_4', id:this.getId('step_4'), children:[]}, 67 {tag:'div', cls:'step_4', id:this.getId('step_4'), children:[]},
70 {tag:'div', cls:'step_5', id:this.getId('step_5'), children:[]}, 68 {tag:'div', cls:'step_5', id:this.getId('step_5'), children:[]},
71 {tag:'div', cls:'step_6', id:this.getId('step_6'), children:[ 69 {tag:'div', cls:'step_6', id:this.getId('step_6'), children:[
72 {tag:'div', children:[ 70 {tag:'div', children:[
73 {tag:'div', id:this.getId('previewDiv'), html:"preview"} 71 {tag:'div', id:this.getId('previewDiv'), html:"preview"}
74 ]} 72 ]}
75 ]}, 73 ]},
76 {tag:'div', cls:'step_7', id:this.getId('step_7'), children:[ 74 {tag:'div', cls:'step_7', id:this.getId('step_7'), children:[
77 {tag:'div', children:[ 75 {tag:'div', children:[
78 {tag:'h4', html:"done"} 76 {tag:'h4', html:"done"}
79 ]} 77 ]}
80 ]} 78 ]}
81 ]}, 79 ]},
82 {tag:'div', cls:'importOptionsButtons', children:[ 80 {tag:'div', cls:'importOptionsButtons', children:[
83 {tag:'table', children:[ 81 {tag:'table', children:[
84 {tag:'tbody', children:[ 82 {tag:'tbody', children:[
85 {tag:'tr', children:[ 83 {tag:'tr', children:[
86 {tag:'td', html:'&nbsp;'}, 84 {tag:'td', html:'&nbsp;'},
87 {tag:'td', children:[ 85 {tag:'td', children:[
88 {tag:'div', id:this.getId('backActionButton')} 86 {tag:'div', id:this.getId('backActionButton')}
89 ]}, 87 ]},
90 {tag:'td', html:'&nbsp;'}, 88 {tag:'td', html:'&nbsp;'},
91 {tag:'td', children:[ 89 {tag:'td', children:[
92 {tag:'div', id:this.getId('nextActionButton')} 90 {tag:'div', id:this.getId('nextActionButton')}
93 ]}, 91 ]},
94 {tag:'td', html:'&nbsp;'} 92 {tag:'td', html:'&nbsp;'}
95 ]} 93 ]}
96 ]} 94 ]}
97 ]} 95 ]}
98 ]} 96 ]}
99 ]}); 97 ]});
100 98
101 this.updateSteps(); 99 this.updateSteps();
102 100
103 this.setBackButton(new YAHOO.ext.Button(this.getDom('backActionButton'), {text:"back", handler:this.backAction, scope:this})); 101 this.setBackButton(new YAHOO.ext.Button(this.getDom('backActionButton'), {text:"back", handler:this.backAction, scope:this}));
104 this.setNextButton(new YAHOO.ext.Button(this.getDom('nextActionButton'), {text:"next", handler:this.nextAction, scope:this})); 102 this.setNextButton(new YAHOO.ext.Button(this.getDom('nextActionButton'), {text:"next", handler:this.nextAction, scope:this}));
105 103
106 this.getElement('step_0').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show() 104 this.getElement('step_0').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show()
107 this.getElement('step_1').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 105 this.getElement('step_1').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
108 this.getElement('step_2').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 106 this.getElement('step_2').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
109 this.getElement('step_3').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 107 this.getElement('step_3').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
110 this.getElement('step_4').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 108 this.getElement('step_4').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
111 this.getElement('step_5').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 109 this.getElement('step_5').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
112 this.getElement('step_6').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 110 this.getElement('step_6').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
113 this.getElement('step_7').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 111 this.getElement('step_7').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
114//MochiKit.Logging.logDebug("<<< Import.ExcelImportComponent.render"); 112//MochiKit.Logging.logDebug("<<< Import.ExcelImportComponent.render");
115 }, 113 },
116 114
117 //------------------------------------------------------------------------- 115 //-------------------------------------------------------------------------
118 116
119 'csvProcessor': function() { 117 'csvProcessor': function() {
120 return new Clipperz.CSVProcessor({ 118 return new Clipperz.CSVProcessor({
121 // quoteChar: this.getDom('CSV_inputOptions_quote').value, 119 // quoteChar: this.getDom('CSV_inputOptions_quote').value,
122 // escapeChar: this.getDom('CSV_inputOptions_escape').value, 120 // escapeChar: this.getDom('CSV_inputOptions_escape').value,
123 separatorChar:'\t', 121 separatorChar:'\t',
124 binary:true 122 binary:true
125 }); 123 });
126 }, 124 },
127 125
128 //------------------------------------------------------------------------- 126 //-------------------------------------------------------------------------
129 __syntaxFix__: "syntax fix" 127 __syntaxFix__: "syntax fix"
130}); 128});
131 129
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/GenericImportComponent.js b/frontend/beta/js/Clipperz/PM/Components/Import/GenericImportComponent.js
index a55455a..3c23b1c 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/GenericImportComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/GenericImportComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Import.GenericImportComponent = function(anElement, args) { 31Clipperz.PM.Components.Import.GenericImportComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 this._steps = this._steps || ['EDIT', 'PREVIEW', 'IMPORT']; 34 this._steps = this._steps || ['EDIT', 'PREVIEW', 'IMPORT'];
37 35
38 Clipperz.PM.Components.Import.GenericImportComponent.superclass.constructor.call(this, anElement, args); 36 Clipperz.PM.Components.Import.GenericImportComponent.superclass.constructor.call(this, anElement, args);
39 37
40 this._user = args['user']; 38 this._user = args['user'];
41 39
42 this._currentStep = 0; 40 this._currentStep = 0;
43 this._currentStatus = 'IDLE'; //'PROCESSING' 41 this._currentStatus = 'IDLE'; //'PROCESSING'
44 42
45 this._parsedValues = null; 43 this._parsedValues = null;
46 this._processedValues = null; 44 this._processedValues = null;
47 45
48 this._backButton = null; 46 this._backButton = null;
49 this._nextButton = null; 47 this._nextButton = null;
50 48
51 Clipperz.NotificationCenter.register(null, 'importProcessorProgressUpdate', this, 'updateProgressDialogStatus'); 49 Clipperz.NotificationCenter.register(null, 'importProcessorProgressUpdate', this, 'updateProgressDialogStatus');
52 50
53 return this; 51 return this;
54} 52}
55 53
56//============================================================================= 54//=============================================================================
57 55
58YAHOO.extendX(Clipperz.PM.Components.Import.GenericImportComponent, Clipperz.PM.Components.BaseComponent, { 56YAHOO.extendX(Clipperz.PM.Components.Import.GenericImportComponent, Clipperz.PM.Components.BaseComponent, {
59 57
60 'toString': function() { 58 'toString': function() {
61 return "Clipperz.PM.Components.Import.GenericImportComponent component"; 59 return "Clipperz.PM.Components.Import.GenericImportComponent component";
62 }, 60 },
63 61
64 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
65 63
66 'user': function() { 64 'user': function() {
67 return this._user; 65 return this._user;
68 }, 66 },
69 67
70 //------------------------------------------------------------------------- 68 //-------------------------------------------------------------------------
71 69
72 'textAreaConfig': function() { 70 'textAreaConfig': function() {
73 return {tag:'textarea', name:this.getId('importTextArea'), cls:'importTextArea', id:this.getId('importTextArea'), cols:60, rows:15, html:""}; 71 return {tag:'textarea', name:this.getId('importTextArea'), cls:'importTextArea', id:this.getId('importTextArea'), cols:60, rows:15, html:""};
74 }, 72 },
75 73
76 'textAreaContent': function() { 74 'textAreaContent': function() {
77 return this.getDom('importTextArea').value 75 return this.getDom('importTextArea').value
78 }, 76 },
79 77
80 //------------------------------------------------------------------------- 78 //-------------------------------------------------------------------------
81 79
82 'steps': function() { 80 'steps': function() {
83 return this._steps; 81 return this._steps;
84 }, 82 },
85 83
86 'currentStep': function() { 84 'currentStep': function() {
87 return this._currentStep; 85 return this._currentStep;
88 }, 86 },
89 87
90 'setCurrentStep': function(aValue) { 88 'setCurrentStep': function(aValue) {
91 this._currentStep = aValue; 89 this._currentStep = aValue;
92 this.updateSteps(); 90 this.updateSteps();
93 }, 91 },
94 92
95 //------------------------------------------------------------------------- 93 //-------------------------------------------------------------------------
96 94
97 'currentStatus': function() { 95 'currentStatus': function() {
98 return this._currentStatus; 96 return this._currentStatus;
99 }, 97 },
100 98
101 'startProcessing': function() { 99 'startProcessing': function() {
102 this._currentStatus = 'PROCESSING'; 100 this._currentStatus = 'PROCESSING';
103 this.updateSteps(); 101 this.updateSteps();
104 }, 102 },
105 103
106 'processingDone': function() { 104 'processingDone': function() {
107 this._currentStatus = 'IDLE'; 105 this._currentStatus = 'IDLE';
108 this.setCurrentStep(this.currentStep() + 1); 106 this.setCurrentStep(this.currentStep() + 1);
109 }, 107 },
110 108
111 'processingAborted': function() { 109 'processingAborted': function() {
112 this._currentStatus = 'IDLE'; 110 this._currentStatus = 'IDLE';
113 this.updateSteps(); 111 this.updateSteps();
114 }, 112 },
115 113
116 //------------------------------------------------------------------------- 114 //-------------------------------------------------------------------------
117 115
118 'stepsConfig': function() { 116 'stepsConfig': function() {
119 var result; 117 var result;
120 var i,c; 118 var i,c;
121 119
122 result = []; 120 result = [];
123 c = this.steps().length; 121 c = this.steps().length;
124 for (i=0; i<c; i++) { 122 for (i=0; i<c; i++) {
125 var cls; 123 var cls;
126 124
127 if (this.currentStep() == i) { 125 if (this.currentStep() == i) {
128 if (this.currentStatus() == 'IDLE') { 126 if (this.currentStatus() == 'IDLE') {
129 cls = 'current'; 127 cls = 'current';
130 } else { 128 } else {
131 cls = 'currentProcessing'; 129 cls = 'currentProcessing';
132 } 130 }
133 } else { 131 } else {
134 cls = ""; 132 cls = "";
135 } 133 }
136 134
137 result.push({tag:'td', cls:cls, children:[ 135 result.push({tag:'td', cls:cls, children:[
138 {tag:'div', children:[{tag:'span', htmlString:Clipperz.PM.Strings['ImportWizard'][this.steps()[i]]}]} 136 {tag:'div', children:[{tag:'span', htmlString:Clipperz.PM.Strings['ImportWizard'][this.steps()[i]]}]}
139 ]}) 137 ]})
140 if (i < (c-1)) { 138 if (i < (c-1)) {
141 if ((this.currentStep() == i) && (this.currentStatus() == 'PROCESSING')) { 139 if ((this.currentStep() == i) && (this.currentStatus() == 'PROCESSING')) {
142 cls = 'stepSeparatorProcessing'; 140 cls = 'stepSeparatorProcessing';
143 } else { 141 } else {
144 cls = 'stepSeparator'; 142 cls = 'stepSeparator';
145 } 143 }
146 144
147 result.push({tag:'td', cls:cls, children:[ 145 result.push({tag:'td', cls:cls, children:[
148 {tag:'div', children:[{tag:'span', html:">"}]} 146 {tag:'div', children:[{tag:'span', html:">"}]}
149 ]}); 147 ]});
150 } 148 }
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/KeePassImportComponent.js b/frontend/beta/js/Clipperz/PM/Components/Import/KeePassImportComponent.js
index 5f4fe33..0570704 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/KeePassImportComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/KeePassImportComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Import.KeePassImportComponent = function(anElement, args) { 31Clipperz.PM.Components.Import.KeePassImportComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.Import.KeePassImportComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.Import.KeePassImportComponent.superclass.constructor.call(this, anElement, args);
37 35
38 this._steps = ['EDIT', 'KEEPASS_SETTINGS', 'PREVIEW', 'IMPORT']; 36 this._steps = ['EDIT', 'KEEPASS_SETTINGS', 'PREVIEW', 'IMPORT'];
39 this._definedFields = ['Group', 'Group Tree', 'UserName', 'URL', 'Password', 'Notes', 'UUID', 'Icon', 'Creation Time', 'Last Access', 'Last Modification', 'Expires', 'Attachment Description', 'Attachment']; 37 this._definedFields = ['Group', 'Group Tree', 'UserName', 'URL', 'Password', 'Notes', 'UUID', 'Icon', 'Creation Time', 'Last Access', 'Last Modification', 'Expires', 'Attachment Description', 'Attachment'];
40 38
41 this.render(); 39 this.render();
42 40
43 return this; 41 return this;
44} 42}
45 43
46//============================================================================= 44//=============================================================================
47 45
48YAHOO.extendX(Clipperz.PM.Components.Import.KeePassImportComponent, Clipperz.PM.Components.Import.GenericImportComponent, { 46YAHOO.extendX(Clipperz.PM.Components.Import.KeePassImportComponent, Clipperz.PM.Components.Import.GenericImportComponent, {
49 47
50 'toString': function() { 48 'toString': function() {
51 return "Clipperz.PM.Components.Import.KeePassImportComponent component"; 49 return "Clipperz.PM.Components.Import.KeePassImportComponent component";
52 }, 50 },
53 51
54 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
55 53
56 'render': function() { 54 'render': function() {
57//MochiKit.Logging.logDebug(">>> Import.KeePassImportComponent.render"); 55//MochiKit.Logging.logDebug(">>> Import.KeePassImportComponent.render");
58 this.domHelper().append(this.element(), {tag:'div', cls:'keePassImportWizard', children:[ 56 this.domHelper().append(this.element(), {tag:'div', cls:'keePassImportWizard', children:[
59 {tag:'h3', htmlString:Clipperz.PM.Strings['KeePass_ImportWizard_Title']}, 57 {tag:'h3', htmlString:Clipperz.PM.Strings['KeePass_ImportWizard_Title']},
60 {tag:'div', cls:'importSteps', id:this.getId('importSteps')}, 58 {tag:'div', cls:'importSteps', id:this.getId('importSteps')},
61 {tag:'div', cls:'importStepBlocks', children:[ 59 {tag:'div', cls:'importStepBlocks', children:[
62 {tag:'div', cls:'step_0', id:this.getId('step_0'), children:[ 60 {tag:'div', cls:'step_0', id:this.getId('step_0'), children:[
63 {tag:'div', children:[ 61 {tag:'div', children:[
64 {tag:'div', cls:'importOptionsDescription', htmlString:Clipperz.PM.Strings['importOptions_keePass_description']}, 62 {tag:'div', cls:'importOptionsDescription', htmlString:Clipperz.PM.Strings['importOptions_keePass_description']},
65 {tag:'div', cls:'importOptionsParameters', children:[]}, 63 {tag:'div', cls:'importOptionsParameters', children:[]},
66 this.textAreaConfig() 64 this.textAreaConfig()
67 ]} 65 ]}
68 ]}, 66 ]},
69 {tag:'div', cls:'step_1', id:this.getId('step_1'), children:[ 67 {tag:'div', cls:'step_1', id:this.getId('step_1'), children:[
70 {tag:'div', children:[ 68 {tag:'div', children:[
71 {tag:'div', id:this.getId('settingsDiv'), children:[ 69 {tag:'div', id:this.getId('settingsDiv'), children:[
72 {tag:'table', id:'KeePassSettings', children:[ 70 {tag:'table', id:'KeePassSettings', children:[
73 {tag:'tbody', children:[ 71 {tag:'tbody', children:[
74 {tag:'tr', children:[ 72 {tag:'tr', children:[
75 {tag:'td', width:'50%', valign:'top', children:[ 73 {tag:'td', width:'50%', valign:'top', children:[
76 {tag:'table', children:[ 74 {tag:'table', children:[
77 {tag:'tbody', children:[ 75 {tag:'tbody', children:[
78 {tag:'tr', children:[ 76 {tag:'tr', children:[
79 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Group_checkbox'), name:'Group'/*, checked:true*/}]}, 77 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Group_checkbox'), name:'Group'/*, checked:true*/}]},
80 {tag:'td', width:'150', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Group_label'), html:"Group"}]} 78 {tag:'td', width:'150', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Group_label'), html:"Group"}]}
81 ]}, 79 ]},
82 {tag:'tr', children:[ 80 {tag:'tr', children:[
83 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Group Tree_checkbox'), name:'Group Tree'/*, checked:true*/}]}, 81 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Group Tree_checkbox'), name:'Group Tree'/*, checked:true*/}]},
84 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Group Tree_label'), html:"Group Tree"}]} 82 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Group Tree_label'), html:"Group Tree"}]}
85 ]}, 83 ]},
86 {tag:'tr', children:[ 84 {tag:'tr', children:[
87 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('UserName_checkbox'), name:'UserName', checked:true}]}, 85 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('UserName_checkbox'), name:'UserName', checked:true}]},
88 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('UserName_label'), html:"UserName"}]} 86 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('UserName_label'), html:"UserName"}]}
89 ]}, 87 ]},
90 {tag:'tr', children:[ 88 {tag:'tr', children:[
91 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('URL_checkbox'), name:'URL', checked:true}]}, 89 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('URL_checkbox'), name:'URL', checked:true}]},
92 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('URL_label'), html:"URL"}]} 90 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('URL_label'), html:"URL"}]}
93 ]}, 91 ]},
94 {tag:'tr', children:[ 92 {tag:'tr', children:[
95 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Password_checkbox'), name:'Password', checked:true}]}, 93 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Password_checkbox'), name:'Password', checked:true}]},
96 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Password_label'), html:"Password"}]} 94 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Password_label'), html:"Password"}]}
97 ]}, 95 ]},
98 {tag:'tr', children:[ 96 {tag:'tr', children:[
99 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Notes_checkbox'), name:'Notes', checked:true}]}, 97 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Notes_checkbox'), name:'Notes', checked:true}]},
100 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Notes_label'), html:"Notes"}]} 98 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Notes_label'), html:"Notes"}]}
101 ]}, 99 ]},
102 {tag:'tr', children:[ 100 {tag:'tr', children:[
103 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('UUID_checkbox'), name:'UUID'/*, checked:true*/}]}, 101 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('UUID_checkbox'), name:'UUID'/*, checked:true*/}]},
104 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('UUID_label'), html:"UUID"}]} 102 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('UUID_label'), html:"UUID"}]}
105 ]} 103 ]}
106 ]} 104 ]}
107 ]} 105 ]}
108 ]}, 106 ]},
109 {tag:'td', width:'50%', valign:'top', children:[ 107 {tag:'td', width:'50%', valign:'top', children:[
110 {tag:'table', children:[ 108 {tag:'table', children:[
111 {tag:'tbody', children:[ 109 {tag:'tbody', children:[
112 {tag:'tr', children:[ 110 {tag:'tr', children:[
113 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Icon_checkbox'), name:'Icon'/*, checked:true*/}]}, 111 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Icon_checkbox'), name:'Icon'/*, checked:true*/}]},
114 {tag:'td', width:'150', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Icon_label'), html:"Icon"}]} 112 {tag:'td', width:'150', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Icon_label'), html:"Icon"}]}
115 ]}, 113 ]},
116 {tag:'tr', children:[ 114 {tag:'tr', children:[
117 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Creation Time_checkbox'), name:'Creation Time'/*, checked:true*/}]}, 115 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Creation Time_checkbox'), name:'Creation Time'/*, checked:true*/}]},
118 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Creation Time_label'), html:"Creation Time"}]} 116 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Creation Time_label'), html:"Creation Time"}]}
119 ]}, 117 ]},
120 {tag:'tr', children:[ 118 {tag:'tr', children:[
121 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Last Access_checkbox'), name:'Last Access'/*, checked:true*/}]}, 119 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Last Access_checkbox'), name:'Last Access'/*, checked:true*/}]},
122 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Last Access_label'), html:"Last Access"}]} 120 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Last Access_label'), html:"Last Access"}]}
123 ]}, 121 ]},
124 {tag:'tr', children:[ 122 {tag:'tr', children:[
125 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Last Modification_checkbox'), name:'Last Modification'/*, checked:true*/}]}, 123 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Last Modification_checkbox'), name:'Last Modification'/*, checked:true*/}]},
126 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Last Modification_label'), html:"Last Modification"}]} 124 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Last Modification_label'), html:"Last Modification"}]}
127 ]}, 125 ]},
128 {tag:'tr', children:[ 126 {tag:'tr', children:[
129 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Expires_checkbox'), name:'Expires'/*, checked:true*/}]}, 127 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Expires_checkbox'), name:'Expires'/*, checked:true*/}]},
130 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Expires_label'), html:"Expires"}]} 128 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Expires_label'), html:"Expires"}]}
131 ]}, 129 ]},
132 {tag:'tr', children:[ 130 {tag:'tr', children:[
133 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Attachment Description_checkbox'), name:'Attachment Description', checked:true}]}, 131 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Attachment Description_checkbox'), name:'Attachment Description', checked:true}]},
134 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Attachment Description_label'), html:"Attachment Description"}]} 132 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Attachment Description_label'), html:"Attachment Description"}]}
135 ]}, 133 ]},
136 {tag:'tr', children:[ 134 {tag:'tr', children:[
137 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Attachment_checkbox'), name:'Attachment', checked:true}]}, 135 {tag:'td', valign:'top', children:[{tag:'input', type:'checkbox', id:this.getId('Attachment_checkbox'), name:'Attachment', checked:true}]},
138 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Attachment_label'), html:"Attachment"}]} 136 {tag:'td', valign:'top', children:[{tag:'span', cls:'keePassFieldLabel', id:this.getId('Attachment_label'), html:"Attachment"}]}
139 ]} 137 ]}
140 ]} 138 ]}
141 ]} 139 ]}
142 ]} 140 ]}
143 ]} 141 ]}
144 ]} 142 ]}
145 ]} 143 ]}
146 ]} 144 ]}
147 ]} 145 ]}
148 ]}, 146 ]},
149 {tag:'div', cls:'step_2', id:this.getId('step_2'), children:[ 147 {tag:'div', cls:'step_2', id:this.getId('step_2'), children:[
150 {tag:'div', children:[ 148 {tag:'div', children:[
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/MainComponent.js b/frontend/beta/js/Clipperz/PM/Components/Import/MainComponent.js
index 05baf46..f97ce78 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/MainComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/MainComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Import.MainComponent = function(anElement, args) { 31Clipperz.PM.Components.Import.MainComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.Import.MainComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.Import.MainComponent.superclass.constructor.call(this, anElement, args);
37 35
38 this._user = args.user; 36 this._user = args.user;
39 this._wizardComponent = null; 37 this._wizardComponent = null;
40 38
41 this._backButton = null; 39 this._backButton = null;
42 this._nextButton = null; 40 this._nextButton = null;
43 41
44 this._selectedComponent = null; 42 this._selectedComponent = null;
45 43
46 this.render(); 44 this.render();
47 45
48 return this; 46 return this;
49} 47}
50 48
51//============================================================================= 49//=============================================================================
52 50
53YAHOO.extendX(Clipperz.PM.Components.Import.MainComponent, Clipperz.PM.Components.BaseComponent, { 51YAHOO.extendX(Clipperz.PM.Components.Import.MainComponent, Clipperz.PM.Components.BaseComponent, {
54 52
55 'toString': function() { 53 'toString': function() {
56 return "Clipperz.PM.Components.Import.MainComponent component"; 54 return "Clipperz.PM.Components.Import.MainComponent component";
57 }, 55 },
58 56
59 //------------------------------------------------------------------------- 57 //-------------------------------------------------------------------------
60 58
61 'user': function() { 59 'user': function() {
62 return this._user; 60 return this._user;
63 }, 61 },
64 62
65 //------------------------------------------------------------------------- 63 //-------------------------------------------------------------------------
66 64
67 'wizardComponent': function() { 65 'wizardComponent': function() {
68 return this._wizardComponent; 66 return this._wizardComponent;
69 }, 67 },
70 68
71 'setWizardComponent': function(aValue) { 69 'setWizardComponent': function(aValue) {
72 if (this._wizardComponent != null) { 70 if (this._wizardComponent != null) {
73 this._wizardComponent.remove(); 71 this._wizardComponent.remove();
74 } 72 }
75 73
76 if (aValue != null) { 74 if (aValue != null) {
77 this.getElement('importCover').hide(); 75 this.getElement('importCover').hide();
78 this.getElement('importWizard').show(); 76 this.getElement('importWizard').show();
79 } 77 }
80 this._wizardComponent = aValue; 78 this._wizardComponent = aValue;
81 }, 79 },
82 80
83 'resetImportComponent': function() { 81 'resetImportComponent': function() {
84//MochiKit.Logging.logDebug(">>> resetImportComponent"); 82//MochiKit.Logging.logDebug(">>> resetImportComponent");
85 this.setWizardComponent(null); 83 this.setWizardComponent(null);
86 this.getElement('wizardComponent').update(""); 84 this.getElement('wizardComponent').update("");
87 85
88 this.getElement('importCover').show(); 86 this.getElement('importCover').show();
89 this.getElement('importWizard').hide(); 87 this.getElement('importWizard').hide();
90//MochiKit.Logging.logDebug("<<< resetImportComponent"); 88//MochiKit.Logging.logDebug("<<< resetImportComponent");
91 }, 89 },
92 90
93 //------------------------------------------------------------------------- 91 //-------------------------------------------------------------------------
94 92
95 'backButton': function() { 93 'backButton': function() {
96 return this._backButton; 94 return this._backButton;
97 }, 95 },
98 96
99 'setBackButton': function(aValue) { 97 'setBackButton': function(aValue) {
100 this._backButton = aValue; 98 this._backButton = aValue;
101 }, 99 },
102 100
103 'nextButton': function() { 101 'nextButton': function() {
104 return this._nextButton; 102 return this._nextButton;
105 }, 103 },
106 104
107 'setNextButton': function(aValue) { 105 'setNextButton': function(aValue) {
108 this._nextButton = aValue; 106 this._nextButton = aValue;
109 }, 107 },
110 108
111 //------------------------------------------------------------------------- 109 //-------------------------------------------------------------------------
112 110
113 'render': function() { 111 'render': function() {
114//MochiKit.Logging.logDebug(">>> Import.MainComponent.render"); 112//MochiKit.Logging.logDebug(">>> Import.MainComponent.render");
115 Clipperz.NotificationCenter.unregister(this); 113 Clipperz.NotificationCenter.unregister(this);
116 MochiKit.Signal.disconnectAllTo(this); 114 MochiKit.Signal.disconnectAllTo(this);
117 115
118 this.element().update(""); 116 this.element().update("");
119 this.domHelper().append(this.element(), {tag:'div', id:this.getId('mainDiv'), children:[ 117 this.domHelper().append(this.element(), {tag:'div', id:this.getId('mainDiv'), children:[
120 {tag:'div', id:this.getId('importCover'), children:[ 118 {tag:'div', id:this.getId('importCover'), children:[
121 {tag:'h5', htmlString:Clipperz.PM.Strings['importTabTitle']}, 119 {tag:'h5', htmlString:Clipperz.PM.Strings['importTabTitle']},
122 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['importTabDescription']}, 120 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['importTabDescription']},
123 {tag:'div', cls:'importFormats', children:[ 121 {tag:'div', cls:'importFormats', children:[
124 {tag:'ul', cls:'radioList', children:[ 122 {tag:'ul', cls:'radioList', children:[
125 {tag:'li', children:[ 123 {tag:'li', children:[
126 {tag:'table', children:[{tag:'tbody', children:[{tag:'tr', children:[ 124 {tag:'table', children:[{tag:'tbody', children:[{tag:'tr', children:[
127 {tag:'td', valign:'top', children:[ 125 {tag:'td', valign:'top', children:[
128 {tag:'input', id:this.getId('CSV_radio'), type:'radio', name:'importFormat', value:'CSV'} 126 {tag:'input', id:this.getId('CSV_radio'), type:'radio', name:'importFormat', value:'CSV'}
129 ]}, 127 ]},
130 {tag:'td', valign:'top', children:[ 128 {tag:'td', valign:'top', children:[
131 {tag:'h4', id:this.getId('CSV_title'), htmlString:Clipperz.PM.Strings['importFormats']['CSV']['label']}, 129 {tag:'h4', id:this.getId('CSV_title'), htmlString:Clipperz.PM.Strings['importFormats']['CSV']['label']},
132 {tag:'div', cls:'templateDescription', htmlString:Clipperz.PM.Strings['importFormats']['CSV']['description']} 130 {tag:'div', cls:'templateDescription', htmlString:Clipperz.PM.Strings['importFormats']['CSV']['description']}
133 ]} 131 ]}
134 ]}]}]} 132 ]}]}]}
135 ]}, 133 ]},
136 {tag:'li', children:[ 134 {tag:'li', children:[
137 {tag:'table', children:[{tag:'tbody', children:[{tag:'tr', children:[ 135 {tag:'table', children:[{tag:'tbody', children:[{tag:'tr', children:[
138 {tag:'td', valign:'top', children:[ 136 {tag:'td', valign:'top', children:[
139 {tag:'input', id:this.getId('Excel_radio'), type:'radio', name:'importFormat', value:'EXCEL'} 137 {tag:'input', id:this.getId('Excel_radio'), type:'radio', name:'importFormat', value:'EXCEL'}
140 ]}, 138 ]},
141 {tag:'td', valign:'top', children:[ 139 {tag:'td', valign:'top', children:[
142 {tag:'h4', id:this.getId('Excel_title'), htmlString:Clipperz.PM.Strings['importFormats']['Excel']['label']}, 140 {tag:'h4', id:this.getId('Excel_title'), htmlString:Clipperz.PM.Strings['importFormats']['Excel']['label']},
143 {tag:'div', cls:'templateDescription', htmlString:Clipperz.PM.Strings['importFormats']['Excel']['description']} 141 {tag:'div', cls:'templateDescription', htmlString:Clipperz.PM.Strings['importFormats']['Excel']['description']}
144 ]} 142 ]}
145 ]}]}]} 143 ]}]}]}
146 ]}, 144 ]},
147 {tag:'li', children:[ 145 {tag:'li', children:[
148 {tag:'table', children:[{tag:'tbody', children:[{tag:'tr', children:[ 146 {tag:'table', children:[{tag:'tbody', children:[{tag:'tr', children:[
149 {tag:'td', valign:'top', children:[ 147 {tag:'td', valign:'top', children:[
150 {tag:'input', id:this.getId('KeePass_radio'), type:'radio', name:'importFormat', value:'KEEPASS'} 148 {tag:'input', id:this.getId('KeePass_radio'), type:'radio', name:'importFormat', value:'KEEPASS'}
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/PasswordPlusImportComponent.js b/frontend/beta/js/Clipperz/PM/Components/Import/PasswordPlusImportComponent.js
index 24dc785..f58d913 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/PasswordPlusImportComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/PasswordPlusImportComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Import.PasswordPlusImportComponent = function(anElement, args) { 31Clipperz.PM.Components.Import.PasswordPlusImportComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.Import.PasswordPlusImportComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.Import.PasswordPlusImportComponent.superclass.constructor.call(this, anElement, args);
37 35
38 this.render(); 36 this.render();
39 37
40 return this; 38 return this;
41} 39}
42 40
43//============================================================================= 41//=============================================================================
44 42
45YAHOO.extendX(Clipperz.PM.Components.Import.PasswordPlusImportComponent, Clipperz.PM.Components.Import.GenericImportComponent, { 43YAHOO.extendX(Clipperz.PM.Components.Import.PasswordPlusImportComponent, Clipperz.PM.Components.Import.GenericImportComponent, {
46 44
47 'toString': function() { 45 'toString': function() {
48 return "Clipperz.PM.Components.Import.PasswordPlusImportComponent component"; 46 return "Clipperz.PM.Components.Import.PasswordPlusImportComponent component";
49 }, 47 },
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 50
53 'render': function() { 51 'render': function() {
54//MochiKit.Logging.logDebug(">>> Import.PasswordPlusImportComponent.render"); 52//MochiKit.Logging.logDebug(">>> Import.PasswordPlusImportComponent.render");
55 this.domHelper().append(this.element(), {tag:'div', cls:'passwordPlusImportWizard', children:[ 53 this.domHelper().append(this.element(), {tag:'div', cls:'passwordPlusImportWizard', children:[
56 {tag:'h3', htmlString:Clipperz.PM.Strings['PasswordPlus_ImportWizard_Title']}, 54 {tag:'h3', htmlString:Clipperz.PM.Strings['PasswordPlus_ImportWizard_Title']},
57 {tag:'div', cls:'importSteps', id:this.getId('importSteps')}, 55 {tag:'div', cls:'importSteps', id:this.getId('importSteps')},
58 {tag:'div', cls:'importStepBlocks', children:[ 56 {tag:'div', cls:'importStepBlocks', children:[
59 {tag:'div', cls:'step_0', id:this.getId('step_0'), children:[ 57 {tag:'div', cls:'step_0', id:this.getId('step_0'), children:[
60 {tag:'div', children:[ 58 {tag:'div', children:[
61 {tag:'div', cls:'importOptionsDescription', htmlString:Clipperz.PM.Strings['importOptions_passwordPlus_description']}, 59 {tag:'div', cls:'importOptionsDescription', htmlString:Clipperz.PM.Strings['importOptions_passwordPlus_description']},
62 {tag:'div', cls:'importOptionsParameters', children:[]}, 60 {tag:'div', cls:'importOptionsParameters', children:[]},
63 this.textAreaConfig() 61 this.textAreaConfig()
64 ]} 62 ]}
65 ]}, 63 ]},
66 {tag:'div', cls:'step_1', id:this.getId('step_1'), children:[ 64 {tag:'div', cls:'step_1', id:this.getId('step_1'), children:[
67 {tag:'div', children:[ 65 {tag:'div', children:[
68 {tag:'div', id:this.getId('previewDiv'), html:"preview"} 66 {tag:'div', id:this.getId('previewDiv'), html:"preview"}
69 ]} 67 ]}
70 ]}, 68 ]},
71 {tag:'div', cls:'step_2', id:this.getId('step_2'), children:[ 69 {tag:'div', cls:'step_2', id:this.getId('step_2'), children:[
72 {tag:'div', children:[ 70 {tag:'div', children:[
73 {tag:'h4', html:"done"} 71 {tag:'h4', html:"done"}
74 ]} 72 ]}
75 ]} 73 ]}
76 ]}, 74 ]},
77 {tag:'div', cls:'importOptionsButtons', children:[ 75 {tag:'div', cls:'importOptionsButtons', children:[
78 {tag:'table', children:[ 76 {tag:'table', children:[
79 {tag:'tbody', children:[ 77 {tag:'tbody', children:[
80 {tag:'tr', children:[ 78 {tag:'tr', children:[
81 {tag:'td', html:'&nbsp;'}, 79 {tag:'td', html:'&nbsp;'},
82 {tag:'td', children:[ 80 {tag:'td', children:[
83 {tag:'div', id:this.getId('backActionButton')} 81 {tag:'div', id:this.getId('backActionButton')}
84 ]}, 82 ]},
85 {tag:'td', html:'&nbsp;'}, 83 {tag:'td', html:'&nbsp;'},
86 {tag:'td', children:[ 84 {tag:'td', children:[
87 {tag:'div', id:this.getId('nextActionButton')} 85 {tag:'div', id:this.getId('nextActionButton')}
88 ]}, 86 ]},
89 {tag:'td', html:'&nbsp;'} 87 {tag:'td', html:'&nbsp;'}
90 ]} 88 ]}
91 ]} 89 ]}
92 ]} 90 ]}
93 ]} 91 ]}
94 ]}); 92 ]});
95 93
96 this.updateSteps(); 94 this.updateSteps();
97 95
98 this.setBackButton(new YAHOO.ext.Button(this.getDom('backActionButton'), {text:"back", handler:this.backAction, scope:this})); 96 this.setBackButton(new YAHOO.ext.Button(this.getDom('backActionButton'), {text:"back", handler:this.backAction, scope:this}));
99 this.setNextButton(new YAHOO.ext.Button(this.getDom('nextActionButton'), {text:"next", handler:this.nextAction, scope:this})); 97 this.setNextButton(new YAHOO.ext.Button(this.getDom('nextActionButton'), {text:"next", handler:this.nextAction, scope:this}));
100 98
101 this.getElement('step_0').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show() 99 this.getElement('step_0').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show()
102 this.getElement('step_1').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 100 this.getElement('step_1').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
103 this.getElement('step_2').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 101 this.getElement('step_2').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
104//MochiKit.Logging.logDebug("<<< Import.PasswordPlusImportComponent.render"); 102//MochiKit.Logging.logDebug("<<< Import.PasswordPlusImportComponent.render");
105 }, 103 },
106 104
107 //------------------------------------------------------------------------- 105 //-------------------------------------------------------------------------
108/* 106/*
109 'backAction': function() { 107 'backAction': function() {
110 switch (this.currentStep()) { 108 switch (this.currentStep()) {
111 case 1: //-> 0 109 case 1: //-> 0
112 this.backButton().disable(); 110 this.backButton().disable();
113 this.getElement('step_1').hide(); 111 this.getElement('step_1').hide();
114 this.setCurrentStep(0); 112 this.setCurrentStep(0);
115 this.getElement('step_0').show(); 113 this.getElement('step_0').show();
116 break; 114 break;
117 } 115 }
118 }, 116 },
119*/ 117*/
120 //------------------------------------------------------------------------- 118 //-------------------------------------------------------------------------
121 119
122 'nextAction': function() { 120 'nextAction': function() {
123 switch (this.currentStep()) { 121 switch (this.currentStep()) {
124 case 0: //-> 1 122 case 0: //-> 1
125 this.previewValues(); 123 this.previewValues();
126 break; 124 break;
127 case 1: //-> 2 125 case 1: //-> 2
128 this.importValues(); 126 this.importValues();
129 break; 127 break;
130 } 128 }
131 }, 129 },
132 130
133 //------------------------------------------------------------------------- 131 //-------------------------------------------------------------------------
134 132
135 'deferredPreviewValues': function() { 133 'deferredPreviewValues': function() {
136 var deferredResult; 134 var deferredResult;
137 135
138 // this.setFormValues(MochiKit.DOM.formContents(this.getDom('dataForm'))); 136 // this.setFormValues(MochiKit.DOM.formContents(this.getDom('dataForm')));
139 137
140 deferredResult = new MochiKit.Async.Deferred(); 138 deferredResult = new MochiKit.Async.Deferred();
141 deferredResult.addCallback(MochiKit.Base.bind(function(res) { 139 deferredResult.addCallback(MochiKit.Base.bind(function(res) {
142 this.startProcessing(); 140 this.startProcessing();
143 141
144 return res; 142 return res;
145 }, this)); 143 }, this));
146 deferredResult.addCallback(MochiKit.Base.method(this, 'processPasswordPlusValues')); 144 deferredResult.addCallback(MochiKit.Base.method(this, 'processPasswordPlusValues'));
147 deferredResult.addCallback(MochiKit.Base.method(this, 'setProcessedValues')); 145 deferredResult.addCallback(MochiKit.Base.method(this, 'setProcessedValues'));
148 deferredResult.addCallback(MochiKit.Base.method(this, 'previewRecordValues')); 146 deferredResult.addCallback(MochiKit.Base.method(this, 'previewRecordValues'));
149 deferredResult.addCallback(MochiKit.Base.bind(function(res) { 147 deferredResult.addCallback(MochiKit.Base.bind(function(res) {
150 this.processingDone(); 148 this.processingDone();
diff --git a/frontend/beta/js/Clipperz/PM/Components/Import/RoboFormImportComponent.js b/frontend/beta/js/Clipperz/PM/Components/Import/RoboFormImportComponent.js
index fe4d45c..443ee17 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Import/RoboFormImportComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Import/RoboFormImportComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; } 27if (typeof(Clipperz.PM.Components.Import) == 'undefined') { Clipperz.PM.Components.Import = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Import.RoboFormImportComponent = function(anElement, args) { 31Clipperz.PM.Components.Import.RoboFormImportComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.Import.RoboFormImportComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.Import.RoboFormImportComponent.superclass.constructor.call(this, anElement, args);
37 35
38 this.render(); 36 this.render();
39 37
40 return this; 38 return this;
41} 39}
42 40
43//============================================================================= 41//=============================================================================
44 42
45YAHOO.extendX(Clipperz.PM.Components.Import.RoboFormImportComponent, Clipperz.PM.Components.Import.GenericImportComponent, { 43YAHOO.extendX(Clipperz.PM.Components.Import.RoboFormImportComponent, Clipperz.PM.Components.Import.GenericImportComponent, {
46 44
47 'toString': function() { 45 'toString': function() {
48 return "Clipperz.PM.Components.Import.RoboFormImportComponent component"; 46 return "Clipperz.PM.Components.Import.RoboFormImportComponent component";
49 }, 47 },
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 50
53 'render': function() { 51 'render': function() {
54//MochiKit.Logging.logDebug(">>> Import.RoboFormImportComponent.render"); 52//MochiKit.Logging.logDebug(">>> Import.RoboFormImportComponent.render");
55 this.domHelper().append(this.element(), {tag:'div', cls:'roboFormImportWizard', children:[ 53 this.domHelper().append(this.element(), {tag:'div', cls:'roboFormImportWizard', children:[
56 {tag:'h3', htmlString:Clipperz.PM.Strings['RoboForm_ImportWizard_Title']}, 54 {tag:'h3', htmlString:Clipperz.PM.Strings['RoboForm_ImportWizard_Title']},
57 {tag:'div', cls:'importSteps', id:this.getId('importSteps')}, 55 {tag:'div', cls:'importSteps', id:this.getId('importSteps')},
58 {tag:'div', cls:'importStepBlocks', children:[ 56 {tag:'div', cls:'importStepBlocks', children:[
59 {tag:'div', cls:'step_0', id:this.getId('step_0'), children:[ 57 {tag:'div', cls:'step_0', id:this.getId('step_0'), children:[
60 {tag:'div', children:[ 58 {tag:'div', children:[
61 {tag:'div', cls:'importOptionsDescription', htmlString:Clipperz.PM.Strings['importOptions_roboForm_description']}, 59 {tag:'div', cls:'importOptionsDescription', htmlString:Clipperz.PM.Strings['importOptions_roboForm_description']},
62 {tag:'div', cls:'importOptionsParameters', children:[]}, 60 {tag:'div', cls:'importOptionsParameters', children:[]},
63 this.textAreaConfig() 61 this.textAreaConfig()
64 ]} 62 ]}
65 ]}, 63 ]},
66 {tag:'div', cls:'step_1', id:this.getId('step_1'), children:[ 64 {tag:'div', cls:'step_1', id:this.getId('step_1'), children:[
67 {tag:'div', children:[ 65 {tag:'div', children:[
68 {tag:'div', id:this.getId('previewDiv'), html:"preview"} 66 {tag:'div', id:this.getId('previewDiv'), html:"preview"}
69 ]} 67 ]}
70 ]}, 68 ]},
71 {tag:'div', cls:'step_2', id:this.getId('step_2'), children:[ 69 {tag:'div', cls:'step_2', id:this.getId('step_2'), children:[
72 {tag:'div', children:[ 70 {tag:'div', children:[
73 {tag:'h4', html:"done"} 71 {tag:'h4', html:"done"}
74 ]} 72 ]}
75 ]} 73 ]}
76 ]}, 74 ]},
77 {tag:'div', cls:'importOptionsButtons', children:[ 75 {tag:'div', cls:'importOptionsButtons', children:[
78 {tag:'table', children:[ 76 {tag:'table', children:[
79 {tag:'tbody', children:[ 77 {tag:'tbody', children:[
80 {tag:'tr', children:[ 78 {tag:'tr', children:[
81 {tag:'td', html:'&nbsp;'}, 79 {tag:'td', html:'&nbsp;'},
82 {tag:'td', children:[ 80 {tag:'td', children:[
83 {tag:'div', id:this.getId('backActionButton')} 81 {tag:'div', id:this.getId('backActionButton')}
84 ]}, 82 ]},
85 {tag:'td', html:'&nbsp;'}, 83 {tag:'td', html:'&nbsp;'},
86 {tag:'td', children:[ 84 {tag:'td', children:[
87 {tag:'div', id:this.getId('nextActionButton')} 85 {tag:'div', id:this.getId('nextActionButton')}
88 ]}, 86 ]},
89 {tag:'td', html:'&nbsp;'} 87 {tag:'td', html:'&nbsp;'}
90 ]} 88 ]}
91 ]} 89 ]}
92 ]} 90 ]}
93 ]} 91 ]}
94 ]}); 92 ]});
95 93
96 this.updateSteps(); 94 this.updateSteps();
97 95
98 this.setBackButton(new YAHOO.ext.Button(this.getDom('backActionButton'), {text:"back", handler:this.backAction, scope:this})); 96 this.setBackButton(new YAHOO.ext.Button(this.getDom('backActionButton'), {text:"back", handler:this.backAction, scope:this}));
99 this.setNextButton(new YAHOO.ext.Button(this.getDom('nextActionButton'), {text:"next", handler:this.nextAction, scope:this})); 97 this.setNextButton(new YAHOO.ext.Button(this.getDom('nextActionButton'), {text:"next", handler:this.nextAction, scope:this}));
100 98
101 this.getElement('step_0').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show() 99 this.getElement('step_0').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show()
102 this.getElement('step_1').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 100 this.getElement('step_1').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
103 this.getElement('step_2').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 101 this.getElement('step_2').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
104//MochiKit.Logging.logDebug("<<< Import.RoboFormImportComponent.render"); 102//MochiKit.Logging.logDebug("<<< Import.RoboFormImportComponent.render");
105 }, 103 },
106 104
107 //------------------------------------------------------------------------- 105 //-------------------------------------------------------------------------
108 106
109 'nextAction': function() { 107 'nextAction': function() {
110 switch (this.currentStep()) { 108 switch (this.currentStep()) {
111 case 0: //-> 1 109 case 0: //-> 1
112 this.previewValues(); 110 this.previewValues();
113 break; 111 break;
114 case 1: //-> 2 112 case 1: //-> 2
115 this.importValues(); 113 this.importValues();
116 break; 114 break;
117 } 115 }
118 }, 116 },
119 117
120 //------------------------------------------------------------------------- 118 //-------------------------------------------------------------------------
121 119
122 'deferredPreviewValues': function() { 120 'deferredPreviewValues': function() {
123 var deferredResult; 121 var deferredResult;
124 122
125 // this.setFormValues(MochiKit.DOM.formContents(this.getDom('dataForm'))); 123 // this.setFormValues(MochiKit.DOM.formContents(this.getDom('dataForm')));
126 124
127 deferredResult = new MochiKit.Async.Deferred(); 125 deferredResult = new MochiKit.Async.Deferred();
128 deferredResult.addCallback(MochiKit.Base.bind(function(res) { 126 deferredResult.addCallback(MochiKit.Base.bind(function(res) {
129 this.startProcessing(); 127 this.startProcessing();
130 128
131 return res; 129 return res;
132 }, this)); 130 }, this));
133 deferredResult.addCallback(MochiKit.Base.method(this, 'processRoboFormValues')); 131 deferredResult.addCallback(MochiKit.Base.method(this, 'processRoboFormValues'));
134 deferredResult.addCallback(MochiKit.Base.method(this, 'setProcessedValues')); 132 deferredResult.addCallback(MochiKit.Base.method(this, 'setProcessedValues'));
135 deferredResult.addCallback(MochiKit.Base.method(this, 'previewRecordValues')); 133 deferredResult.addCallback(MochiKit.Base.method(this, 'previewRecordValues'));
136 deferredResult.addCallback(MochiKit.Base.bind(function(res) { 134 deferredResult.addCallback(MochiKit.Base.bind(function(res) {
137 this.processingDone(); 135 this.processingDone();
138 this.getElement('step_0').hide(); 136 this.getElement('step_0').hide();
139 this.getElement('step_1').show(); 137 this.getElement('step_1').show();
140 this.backButton().enable(); 138 this.backButton().enable();
141 139
142 return res; 140 return res;
143 }, this)); 141 }, this));
144 // deferredResult.addErrback(MochiKit.Base.bind(function() { 142 // deferredResult.addErrback(MochiKit.Base.bind(function() {
145 // this.processingAborted(); 143 // this.processingAborted();
146 // }, this)) 144 // }, this))
147 deferredResult.callback(this.textAreaContent()); 145 deferredResult.callback(this.textAreaContent());
148 146
149 return deferredResult; 147 return deferredResult;
150 }, 148 },
diff --git a/frontend/beta/js/Clipperz/PM/Components/MessageBox.js b/frontend/beta/js/Clipperz/PM/Components/MessageBox.js
index cf9ec86..f9b845e 100644
--- a/frontend/beta/js/Clipperz/PM/Components/MessageBox.js
+++ b/frontend/beta/js/Clipperz/PM/Components/MessageBox.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29 27
30 28
31 29
32Clipperz.PM.Components.MessageBoxImplementation = function() { 30Clipperz.PM.Components.MessageBoxImplementation = function() {
33 this._step = 0; 31 this._step = 0;
34 this._steps = 0; 32 this._steps = 0;
35 33
36 return this; 34 return this;
37}; 35};
38 36
39//YAHOO.extendX(Clipperz.PM.Components.MessageBoxImplementation, Clipperz.PM.Components.BaseComponent, { 37//YAHOO.extendX(Clipperz.PM.Components.MessageBoxImplementation, Clipperz.PM.Components.BaseComponent, {
40Clipperz.PM.Components.MessageBoxImplementation.prototype = MochiKit.Base.update(null, { 38Clipperz.PM.Components.MessageBoxImplementation.prototype = MochiKit.Base.update(null, {
41 39
42 'toString': function() { 40 'toString': function() {
43 return "Clipperz.PM.Components.MessageBox"; 41 return "Clipperz.PM.Components.MessageBox";
44 }, 42 },
45 43
46 //----------------------------------------------------- 44 //-----------------------------------------------------
47 45
48 'step': function() { 46 'step': function() {
49 return this._step; 47 return this._step;
50 }, 48 },
51 49
52 'setStep': function(aValue) { 50 'setStep': function(aValue) {
53 if (aValue == 'next') { 51 if (aValue == 'next') {
54 this._step = this._step + 1; 52 this._step = this._step + 1;
55 } else { 53 } else {
56 this._step = aValue; 54 this._step = aValue;
57 } 55 }
58 56
59 if (this._step > this.steps()) { 57 if (this._step > this.steps()) {
60//MochiKit.Logging.logDebug("overstepping: " + this._step + " (" + this.steps() + ")"); 58//MochiKit.Logging.logDebug("overstepping: " + this._step + " (" + this.steps() + ")");
61 this._step = this.steps(); 59 this._step = this.steps();
62 } 60 }
63 }, 61 },
64 62
65 //----------------------------------------------------- 63 //-----------------------------------------------------
66 64
67 'steps': function() { 65 'steps': function() {
68 return this._steps; 66 return this._steps;
69 }, 67 },
70 68
71 'setSteps': function(aValue) { 69 'setSteps': function(aValue) {
72 if (aValue.constructor == String) { 70 if (aValue.constructor == String) {
73 if (aValue.charAt(0) == '+') { 71 if (aValue.charAt(0) == '+') {
74 this._steps += aValue.substring(1)*1; 72 this._steps += aValue.substring(1)*1;
75 } else if (aValue.charAt(0) == '-') { 73 } else if (aValue.charAt(0) == '-') {
76 this._steps -= aValue.substring(1)*1; 74 this._steps -= aValue.substring(1)*1;
77 } else { 75 } else {
78 this._steps = aValue.substring(1)*1; 76 this._steps = aValue.substring(1)*1;
79 } 77 }
80 } else { 78 } else {
81 this._steps = aValue; 79 this._steps = aValue;
82 } 80 }
83 }, 81 },
84 82
85 //----------------------------------------------------- 83 //-----------------------------------------------------
86 84
87 'deferredShow': function(aConfiguration, anAnimationTargetElement, aValue) { 85 'deferredShow': function(aConfiguration, anAnimationTargetElement, aValue) {
88 this.show(aConfiguration, anAnimationTargetElement); 86 this.show(aConfiguration, anAnimationTargetElement);
89 87
90 return aValue; 88 return aValue;
91 }, 89 },
92 90
93 'show': function(aConfiguration, anAnimationTargetElement) { 91 'show': function(aConfiguration, anAnimationTargetElement) {
94 varmessageBoxConfiguration; 92 varmessageBoxConfiguration;
95 93
96 messageBoxConfiguration = MochiKit.Base.clone(aConfiguration); 94 messageBoxConfiguration = MochiKit.Base.clone(aConfiguration);
97 messageBoxConfiguration.msg = messageBoxConfiguration.text; 95 messageBoxConfiguration.msg = messageBoxConfiguration.text;
98 messageBoxConfiguration.animEl = anAnimationTargetElement; 96 messageBoxConfiguration.animEl = anAnimationTargetElement;
99 messageBoxConfiguration.progress = messageBoxConfiguration.showProgressBar; 97 messageBoxConfiguration.progress = messageBoxConfiguration.showProgressBar;
100 messageBoxConfiguration.closable = messageBoxConfiguration.showCloseButton; 98 messageBoxConfiguration.closable = messageBoxConfiguration.showCloseButton;
101 this.setSteps(aConfiguration.steps || 0); 99 this.setSteps(aConfiguration.steps || 0);
102 this.setStep(aConfiguration.step || 0); 100 this.setStep(aConfiguration.step || 0);
103 delete messageBoxConfiguration.buttons; 101 delete messageBoxConfiguration.buttons;
104 102
105 Clipperz.YUI.MessageBox.show(messageBoxConfiguration); 103 Clipperz.YUI.MessageBox.show(messageBoxConfiguration);
106 }, 104 },
107 105
108 //----------------------------------------------------- 106 //-----------------------------------------------------
109 107
110 'update': function(someValues) { 108 'update': function(someValues) {
111//MochiKit.Logging.logDebug(">>> MessageBox.update"); 109//MochiKit.Logging.logDebug(">>> MessageBox.update");
112 if (someValues.title) { 110 if (someValues.title) {
113 Clipperz.YUI.MessageBox.getDialog().setTitle(someValues.title); 111 Clipperz.YUI.MessageBox.getDialog().setTitle(someValues.title);
114 }; 112 };
115 113
116 if (someValues.text) { 114 if (someValues.text) {
117 Clipperz.YUI.MessageBox.updateText(someValues.text); 115 Clipperz.YUI.MessageBox.updateText(someValues.text);
118 }; 116 };
119 117
120 if (typeof(someValues.showProgressBar) != 'undefined') { 118 if (typeof(someValues.showProgressBar) != 'undefined') {
121 Clipperz.YUI.MessageBox.progressElement().setDisplayed(someValues.showProgressBar); 119 Clipperz.YUI.MessageBox.progressElement().setDisplayed(someValues.showProgressBar);
122 Clipperz.YUI.MessageBox.updateProgress(0); 120 Clipperz.YUI.MessageBox.updateProgress(0);
123 }; 121 };
124 122
125 if (typeof(someValues.steps) != 'undefined') { 123 if (typeof(someValues.steps) != 'undefined') {
126 this.setSteps(someValues.steps); 124 this.setSteps(someValues.steps);
127 }; 125 };
128 126
129 if (typeof(someValues.step) != 'undefined') { 127 if (typeof(someValues.step) != 'undefined') {
130 this.setStep(someValues.step); 128 this.setStep(someValues.step);
131 } else { 129 } else {
132 this.setStep('next'); 130 this.setStep('next');
133 } 131 }
134 Clipperz.YUI.MessageBox.updateProgress(this.step() / this.steps()); 132 Clipperz.YUI.MessageBox.updateProgress(this.step() / this.steps());
135 133
136 134
137 if (typeof(someValues.fn) != 'undefined') { 135 if (typeof(someValues.fn) != 'undefined') {
138 Clipperz.YUI.MessageBox.opt().fn = someValues.fn; 136 Clipperz.YUI.MessageBox.opt().fn = someValues.fn;
139 }; 137 };
140 138
141 if (typeof(someValues.scope) != 'undefined') { 139 if (typeof(someValues.scope) != 'undefined') {
142 Clipperz.YUI.MessageBox.opt().scope = someValues.scope; 140 Clipperz.YUI.MessageBox.opt().scope = someValues.scope;
143 }; 141 };
144 142
145 if (someValues.buttons) { 143 if (someValues.buttons) {
146 Clipperz.YUI.MessageBox.updateButtons(someValues.buttons); 144 Clipperz.YUI.MessageBox.updateButtons(someValues.buttons);
147 }; 145 };
148 146
149 // if (someValues.title) { 147 // if (someValues.title) {
150 // Clipperz.YUI.MessageBox.getDialog().setTitle(someValues.title + " [" + this.step() + " / " + this.steps() + "]"); 148 // Clipperz.YUI.MessageBox.getDialog().setTitle(someValues.title + " [" + this.step() + " / " + this.steps() + "]");
diff --git a/frontend/beta/js/Clipperz/PM/Components/OTP/MainComponent.js b/frontend/beta/js/Clipperz/PM/Components/OTP/MainComponent.js
index 7b0b12b..1e94c4b 100644
--- a/frontend/beta/js/Clipperz/PM/Components/OTP/MainComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/OTP/MainComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.OTP) == 'undefined') { Clipperz.PM.Components.OTP = {}; } 27if (typeof(Clipperz.PM.Components.OTP) == 'undefined') { Clipperz.PM.Components.OTP = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.OTP.MainComponent = function(anElement, args) { 31Clipperz.PM.Components.OTP.MainComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36//MochiKit.Logging.logDebug("new OTP.MainComponent"); 34//MochiKit.Logging.logDebug("new OTP.MainComponent");
37 Clipperz.PM.Components.OTP.MainComponent.superclass.constructor.call(this, anElement, args); 35 Clipperz.PM.Components.OTP.MainComponent.superclass.constructor.call(this, anElement, args);
38 36
39 this._user = args.user; 37 this._user = args.user;
40 this._shouldRender = true; 38 this._shouldRender = true;
41 39
42 this._deleteButton = null; 40 this._deleteButton = null;
43 this._printButton = null; 41 this._printButton = null;
44 42
45 Clipperz.NotificationCenter.register(null, 'tabSelected', this, 'tabSelectedHandler'); 43 Clipperz.NotificationCenter.register(null, 'tabSelected', this, 'tabSelectedHandler');
46 //Clipperz.NotificationCenter.register(null, 'oneTimePasswordAdded', this, 'render'); 44 //Clipperz.NotificationCenter.register(null, 'oneTimePasswordAdded', this, 'render');
47 45
48 return this; 46 return this;
49} 47}
50 48
51//============================================================================= 49//=============================================================================
52 50
53YAHOO.extendX(Clipperz.PM.Components.OTP.MainComponent, Clipperz.PM.Components.BaseComponent, { 51YAHOO.extendX(Clipperz.PM.Components.OTP.MainComponent, Clipperz.PM.Components.BaseComponent, {
54 52
55 'toString': function() { 53 'toString': function() {
56 return "Clipperz.PM.Components.OTP.MainComponent component"; 54 return "Clipperz.PM.Components.OTP.MainComponent component";
57 }, 55 },
58 56
59 //------------------------------------------------------------------------- 57 //-------------------------------------------------------------------------
60 58
61 'render': function() { 59 'render': function() {
62//MochiKit.Logging.logDebug("### OTP.MainComponent.render"); 60//MochiKit.Logging.logDebug("### OTP.MainComponent.render");
63 Clipperz.NotificationCenter.unregister(this); 61 Clipperz.NotificationCenter.unregister(this);
64 MochiKit.Signal.disconnectAllTo(this); 62 MochiKit.Signal.disconnectAllTo(this);
65 63
66 if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) { 64 if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) {
67 this.element().update(""); 65 this.element().update("");
68 this.domHelper().append(this.element(), {tag:'div', cls:'oneTimePasswordReadOnlyMessage', htmlString:Clipperz.PM.Strings['oneTimePasswordReadOnlyMessage']}); 66 this.domHelper().append(this.element(), {tag:'div', cls:'oneTimePasswordReadOnlyMessage', htmlString:Clipperz.PM.Strings['oneTimePasswordReadOnlyMessage']});
69 } else { 67 } else {
70 var deferredResult; 68 var deferredResult;
71 69
72 deferredResult = new MochiKit.Async.Deferred(); 70 deferredResult = new MochiKit.Async.Deferred();
73 71
74//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("OTP.MainComponent.render - 1: " + res); return res;}); 72//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("OTP.MainComponent.render - 1: " + res); return res;});
75 deferredResult.addCallback(MochiKit.Base.bind(function() { 73 deferredResult.addCallback(MochiKit.Base.bind(function() {
76 this.element().update(""); 74 this.element().update("");
77 Clipperz.YUI.DomHelper.append(this.element(), {tag:'div', htmlString:Clipperz.PM.Strings['oneTimePasswordLoadingMessage']}); 75 Clipperz.YUI.DomHelper.append(this.element(), {tag:'div', htmlString:Clipperz.PM.Strings['oneTimePasswordLoadingMessage']});
78 }, this)); 76 }, this));
79//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("OTP.MainComponent.render - 2: " + res); return res;}); 77//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("OTP.MainComponent.render - 2: " + res); return res;});
80 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'loadOneTimePasswords')); 78 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'loadOneTimePasswords'));
81//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("OTP.MainComponent.render - 3: " + res); return res;}); 79//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("OTP.MainComponent.render - 3: " + res); return res;});
82//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("OTP.MainComponent.render - 3.1: " + Clipperz.Base.serializeJSON(res.serializedData())); return res;}); 80//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("OTP.MainComponent.render - 3.1: " + Clipperz.Base.serializeJSON(res.serializedData())); return res;});
83 deferredResult.addCallback(MochiKit.Base.bind(function(aResult) { 81 deferredResult.addCallback(MochiKit.Base.bind(function(aResult) {
84 vartbodyElement; 82 vartbodyElement;
85 varoneTimePasswordReferenceKeys; 83 varoneTimePasswordReferenceKeys;
86 var imageExtension; 84 var imageExtension;
87 var isThereAnyActiveOneTimePassword; 85 var isThereAnyActiveOneTimePassword;
88 86
89 isThereAnyActiveOneTimePassword = false; 87 isThereAnyActiveOneTimePassword = false;
90 88
91 this.element().update(""); 89 this.element().update("");
92 Clipperz.YUI.DomHelper.append(this.element(), {tag:'div', id:'oneTimePasswordList', children:[ 90 Clipperz.YUI.DomHelper.append(this.element(), {tag:'div', id:'oneTimePasswordList', children:[
93 {tag:'div', id:'oneTimePasswords_header', children:[ 91 {tag:'div', id:'oneTimePasswords_header', children:[
94 {tag:'table', width:'100%', children:[ 92 {tag:'table', width:'100%', children:[
95 {tag:'tbody', children:[ 93 {tag:'tbody', children:[
96 {tag:'tr', children:[ 94 {tag:'tr', children:[
97 {tag:'td', width:'10%', children:[ 95 {tag:'td', width:'10%', children:[
98 {tag:'div', id:this.getId('createNewOneTimePasswordButton')} 96 {tag:'div', id:this.getId('createNewOneTimePasswordButton')}
99 ]}, 97 ]},
100 {tag:'td', width:'40%', children:[ 98 {tag:'td', width:'40%', children:[
101 {tag:'div', id:this.getId('deleteSelectedOneTimePasswordButton')} 99 {tag:'div', id:this.getId('deleteSelectedOneTimePasswordButton')}
102 ]}, 100 ]},
103 {tag:'td', width:'50%', align:'right', children:[ 101 {tag:'td', width:'50%', align:'right', children:[
104 {tag:'div', id:this.getId('printOneTimePasswordButton')} 102 {tag:'div', id:this.getId('printOneTimePasswordButton')}
105 ]} 103 ]}
106 ]} 104 ]}
107 ]} 105 ]}
108 ]}, 106 ]},
109 {tag:'div', children:[ 107 {tag:'div', children:[
110 {tag:'ul', children:[ 108 {tag:'ul', children:[
111 {tag:'li', children:[ 109 {tag:'li', children:[
112 {tag:'span', htmlString:Clipperz.PM.Strings['oneTimePasswordSelectionLink_selectLabel']} 110 {tag:'span', htmlString:Clipperz.PM.Strings['oneTimePasswordSelectionLink_selectLabel']}
113 ]}, 111 ]},
114 {tag:'li', children:[ 112 {tag:'li', children:[
115 {tag:'a', href:'#', id:this.getId('selectAllOneTimePasswords_link'), htmlString:Clipperz.PM.Strings['oneTimePasswordSelectionLink_all']} 113 {tag:'a', href:'#', id:this.getId('selectAllOneTimePasswords_link'), htmlString:Clipperz.PM.Strings['oneTimePasswordSelectionLink_all']}
116 ]}, 114 ]},
117 {tag:'li', children:[ 115 {tag:'li', children:[
118 {tag:'a', href:'#', id:this.getId('selectNoneOneTimePasswords_link'), htmlString:Clipperz.PM.Strings['oneTimePasswordSelectionLink_none']} 116 {tag:'a', href:'#', id:this.getId('selectNoneOneTimePasswords_link'), htmlString:Clipperz.PM.Strings['oneTimePasswordSelectionLink_none']}
119 ]}, 117 ]},
120 {tag:'li', children:[ 118 {tag:'li', children:[
121 {tag:'a', href:'#', id:this.getId('selectUsedOneTimePasswords_link'), htmlString:Clipperz.PM.Strings['oneTimePasswordSelectionLink_used']} 119 {tag:'a', href:'#', id:this.getId('selectUsedOneTimePasswords_link'), htmlString:Clipperz.PM.Strings['oneTimePasswordSelectionLink_used']}
122 ]}, 120 ]},
123 {tag:'li', children:[ 121 {tag:'li', children:[
124 {tag:'a', href:'#', id:this.getId('selectUnusedOneTimePasswords_link'), htmlString:Clipperz.PM.Strings['oneTimePasswordSelectionLink_unused']} 122 {tag:'a', href:'#', id:this.getId('selectUnusedOneTimePasswords_link'), htmlString:Clipperz.PM.Strings['oneTimePasswordSelectionLink_unused']}
125 ]} 123 ]}
126 ]} 124 ]}
127 ]} 125 ]}
128 ]}, 126 ]},
129 {tag:'form', id:this.getId('oneTimePasswords_form'), children:[ 127 {tag:'form', id:this.getId('oneTimePasswords_form'), children:[
130 {tag:'table', cls:'oneTimePassword', cellspacing:'0', cellpadding:'2', children:[ 128 {tag:'table', cls:'oneTimePassword', cellspacing:'0', cellpadding:'2', children:[
131 {tag:'tbody', id:this.getId('oneTimePasswords_tbody'), children:[ 129 {tag:'tbody', id:this.getId('oneTimePasswords_tbody'), children:[
132 ]} 130 ]}
133 ]} 131 ]}
134 ]} 132 ]}
135 ]}); 133 ]});
136 134
137 imageExtension = (Clipperz_IEisBroken == true) ? 'gif': 'png'; 135 imageExtension = (Clipperz_IEisBroken == true) ? 'gif': 'png';
138 136
139 tbodyElement = this.getElement('oneTimePasswords_tbody'); 137 tbodyElement = this.getElement('oneTimePasswords_tbody');
140 oneTimePasswordReferenceKeys = MochiKit.Base.keys(this.user().oneTimePasswordManager().oneTimePasswords()).reverse(); 138 oneTimePasswordReferenceKeys = MochiKit.Base.keys(this.user().oneTimePasswordManager().oneTimePasswords()).reverse();
141 c = oneTimePasswordReferenceKeys.length; 139 c = oneTimePasswordReferenceKeys.length;
142 if (c>0) { 140 if (c>0) {
143 for (i=0; i<c; i++) { 141 for (i=0; i<c; i++) {
144 var otpReference; 142 var otpReference;
145 var currentOTP; 143 var currentOTP;
146 var loginSessionInfoConfig; 144 var loginSessionInfoConfig;
147 145
148 imageExtension = (Clipperz_IEisBroken == true) ? 'gif': 'png'; 146 imageExtension = (Clipperz_IEisBroken == true) ? 'gif': 'png';
149 147
150 otpReference = oneTimePasswordReferenceKeys[i]; 148 otpReference = oneTimePasswordReferenceKeys[i];
diff --git a/frontend/beta/js/Clipperz/PM/Components/Panels/AccountPanel.js b/frontend/beta/js/Clipperz/PM/Components/Panels/AccountPanel.js
index f7991f1..defce91 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Panels/AccountPanel.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Panels/AccountPanel.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; } 27if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Panels.AccountPanel = function(anElement, args) { 31Clipperz.PM.Components.Panels.AccountPanel = function(anElement, args) {
34//MochiKit.Logging.logDebug(">>> new AccountPanel"); 32//MochiKit.Logging.logDebug(">>> new AccountPanel");
35 args = args || {}; 33 args = args || {};
36 34
37 Clipperz.PM.Components.Panels.AccountPanel.superclass.constructor.call(this, anElement, args); 35 Clipperz.PM.Components.Panels.AccountPanel.superclass.constructor.call(this, anElement, args);
38 36
39 Clipperz.NotificationCenter.register(null, 'setupDone', this, 'render'); 37 Clipperz.NotificationCenter.register(null, 'setupDone', this, 'render');
40 38
41 this._shouldLoadLoginHistory = true; 39 this._shouldLoadLoginHistory = true;
42 40
43 //this.render(); 41 //this.render();
44//MochiKit.Logging.logDebug("<<< new AccountPanel"); 42//MochiKit.Logging.logDebug("<<< new AccountPanel");
45 43
46 return this; 44 return this;
47} 45}
48 46
49//============================================================================= 47//=============================================================================
50 48
51YAHOO.extendX(Clipperz.PM.Components.Panels.AccountPanel, Clipperz.PM.Components.Panels.BasePanel, { 49YAHOO.extendX(Clipperz.PM.Components.Panels.AccountPanel, Clipperz.PM.Components.Panels.BasePanel, {
52 50
53 'toString': function() { 51 'toString': function() {
54 return "Clipperz.PM.Components.AccountPanel component"; 52 return "Clipperz.PM.Components.AccountPanel component";
55 }, 53 },
56 54
57 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
58 56
59 'render': function() { 57 'render': function() {
60 var errorMessageActor; 58 var errorMessageActor;
61 varchangePasswordButton; 59 varchangePasswordButton;
62 var deleteAccountButton; 60 var deleteAccountButton;
63 61
64try { 62try {
65//MochiKit.Logging.logDebug(">>> AccountPanel.render"); 63//MochiKit.Logging.logDebug(">>> AccountPanel.render");
66 Clipperz.NotificationCenter.unregister(this); 64 Clipperz.NotificationCenter.unregister(this);
67 MochiKit.Signal.disconnectAllTo(this); 65 MochiKit.Signal.disconnectAllTo(this);
68 66
69 this.element().update(""); 67 this.element().update("");
70 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[ 68 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
71 {tag:'tbody', children:[ 69 {tag:'tbody', children:[
72 {tag:'tr', children:[ 70 {tag:'tr', children:[
73 {tag:'td', valign:'top', width:'200', children:[ 71 {tag:'td', valign:'top', width:'200', children:[
74 {tag:'ul', id:"accountSubMenu", cls:'subMenu', children:[ 72 {tag:'ul', id:"accountSubMenu", cls:'subMenu', children:[
75 {tag:'li', id:'changePassphraseTab', htmlString:Clipperz.PM.Strings['changePasswordTabLabel']}, 73 {tag:'li', id:'changePassphraseTab', htmlString:Clipperz.PM.Strings['changePasswordTabLabel']},
76 {tag:'li', id:'manageOTPTab', htmlString:Clipperz.PM.Strings['manageOTPTabLabel']}, 74 {tag:'li', id:'manageOTPTab', htmlString:Clipperz.PM.Strings['manageOTPTabLabel']},
77 {tag:'li', id:'accountPreferencesTab', htmlString:Clipperz.PM.Strings['accountPreferencesLabel']}, 75 {tag:'li', id:'accountPreferencesTab', htmlString:Clipperz.PM.Strings['accountPreferencesLabel']},
78 {tag:'li', id:'loginHistoryTab', htmlString:Clipperz.PM.Strings['accountLoginHistoryLabel']}, 76 {tag:'li', id:'loginHistoryTab', htmlString:Clipperz.PM.Strings['accountLoginHistoryLabel']},
79 {tag:'li', id:'deleteAccountTab', htmlString:Clipperz.PM.Strings['deleteAccountTabLabel']} 77 {tag:'li', id:'deleteAccountTab', htmlString:Clipperz.PM.Strings['deleteAccountTabLabel']}
80 // {tag:'li', id:'paidAccountTab'), htmlString:Clipperz.PM.Strings['paidAccountTabLabel']} 78 // {tag:'li', id:'paidAccountTab'), htmlString:Clipperz.PM.Strings['paidAccountTabLabel']}
81 ]} 79 ]}
82 ]}, 80 ]},
83 {tag:'td', valign:'top', children:[ 81 {tag:'td', valign:'top', children:[
84 {tag:'ul', cls:'clipperzTabPanels', children:[ 82 {tag:'ul', cls:'clipperzTabPanels', children:[
85 {tag:'li', id:this.getId('changePassphrasePanel'), children:[ 83 {tag:'li', id:this.getId('changePassphrasePanel'), children:[
86 {tag:'div', cls:'clipperzSubPanel', children:[ 84 {tag:'div', cls:'clipperzSubPanel', children:[
87 {tag:'h5', htmlString:Clipperz.PM.Strings['changePasswordTabTitle']}, 85 {tag:'h5', htmlString:Clipperz.PM.Strings['changePasswordTabTitle']},
88 {tag:'div', cls:'panelBody', id:'changePassphraseBlock', children:[ 86 {tag:'div', cls:'panelBody', id:'changePassphraseBlock', children:[
89 {tag:'form', id:this.getId('changePassphraseForm'), children:[ 87 {tag:'form', id:this.getId('changePassphraseForm'), children:[
90 {tag:'h5', cls:'errorMessage', id:this.getId('changePassphrase_errorMessage')}, 88 {tag:'h5', cls:'errorMessage', id:this.getId('changePassphrase_errorMessage')},
91 {tag:'table', cls:'panelBody', children:[ 89 {tag:'table', cls:'panelBody', children:[
92 {tag:'tr', children:[ 90 {tag:'tr', children:[
93 {tag:'td', children:[ 91 {tag:'td', children:[
94 {tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['changePasswordFormUsernameLabel']} 92 {tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['changePasswordFormUsernameLabel']}
95 ]}, 93 ]},
96 {tag:'td', children:[ 94 {tag:'td', children:[
97 {tag:'input', type:'text', name:'username', id:this.getId('changePassphrase_username')} 95 {tag:'input', type:'text', name:'username', id:this.getId('changePassphrase_username')}
98 ]} 96 ]}
99 ]}, 97 ]},
100 {tag:'tr', children:[ 98 {tag:'tr', children:[
101 {tag:'td', children:[ 99 {tag:'td', children:[
102 {tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['changePasswordFormOldPassphraseLabel']} 100 {tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['changePasswordFormOldPassphraseLabel']}
103 ]}, 101 ]},
104 {tag:'td', children:[ 102 {tag:'td', children:[
105 {tag:'input', type:'password', name:'oldPassphrase', id:this.getId('changePassphrase_oldPassphrase')} 103 {tag:'input', type:'password', name:'oldPassphrase', id:this.getId('changePassphrase_oldPassphrase')}
106 ]} 104 ]}
107 ]}, 105 ]},
108 {tag:'tr', children:[ 106 {tag:'tr', children:[
109 {tag:'td', children:[ 107 {tag:'td', children:[
110 {tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['changePasswordFormNewPassphraseLabel']} 108 {tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['changePasswordFormNewPassphraseLabel']}
111 ]}, 109 ]},
112 {tag:'td', children:[ 110 {tag:'td', children:[
113 {tag:'input', type:'password', name:'newPassphrase', id:this.getId('changePassphrase_newPassphrase')} 111 {tag:'input', type:'password', name:'newPassphrase', id:this.getId('changePassphrase_newPassphrase')}
114 ]} 112 ]}
115 ]}, 113 ]},
116 {tag:'tr', children:[ 114 {tag:'tr', children:[
117 {tag:'td', children:[ 115 {tag:'td', children:[
118 {tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['changePasswordFormRetypePassphraseLabel']} 116 {tag:'span', cls:'formLabel', htmlString:Clipperz.PM.Strings['changePasswordFormRetypePassphraseLabel']}
119 ]}, 117 ]},
120 {tag:'td', children:[ 118 {tag:'td', children:[
121 {tag:'input', type:'password', name:'renewPassphrase', id:this.getId('changePassphrase_renewPassphrase')} 119 {tag:'input', type:'password', name:'renewPassphrase', id:this.getId('changePassphrase_renewPassphrase')}
122 ]} 120 ]}
123 ]}, 121 ]},
124 {tag:'tr', children:[ 122 {tag:'tr', children:[
125 {tag:'td', align:'right', children:[ 123 {tag:'td', align:'right', children:[
126 {tag:'input', type:'checkbox', id:this.getId('changePassphrase_safetyCheck')} 124 {tag:'input', type:'checkbox', id:this.getId('changePassphrase_safetyCheck')}
127 ]}, 125 ]},
128 {tag:'td', children:[ 126 {tag:'td', children:[
129 {tag:'span', htmlString:Clipperz.PM.Strings['changePasswordFormSafetyCheckboxLabel']} 127 {tag:'span', htmlString:Clipperz.PM.Strings['changePasswordFormSafetyCheckboxLabel']}
130 ]} 128 ]}
131 ]} 129 ]}
132 ]}, 130 ]},
133 {tag:'div', cls:'clipperzSubPanelButtonBox', children:[ 131 {tag:'div', cls:'clipperzSubPanelButtonBox', children:[
134 {tag:'div', id:this.getId('changePassphraseButton')} 132 {tag:'div', id:this.getId('changePassphraseButton')}
135 ]} 133 ]}
136 ]} 134 ]}
137 ]} 135 ]}
138 ]} 136 ]}
139 ]}, 137 ]},
140 {tag:'li', id:this.getId('manageOTPPanel'), children:[ 138 {tag:'li', id:this.getId('manageOTPPanel'), children:[
141 {tag:'div', cls:'clipperzSubPanel', children:[ 139 {tag:'div', cls:'clipperzSubPanel', children:[
142 {tag:'h5', htmlString:Clipperz.PM.Strings['manageOTPTabTitle']}, 140 {tag:'h5', htmlString:Clipperz.PM.Strings['manageOTPTabTitle']},
143 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['manageOTPTabDescription']}, 141 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['manageOTPTabDescription']},
144 {tag:'div', id:'OTPComponent'} 142 {tag:'div', id:'OTPComponent'}
145 ]} 143 ]}
146 ]}, 144 ]},
147 {tag:'li', id:this.getId('accountPreferencesPanel'), children:[ 145 {tag:'li', id:this.getId('accountPreferencesPanel'), children:[
148 {tag:'div', cls:'clipperzSubPanel', children:[ 146 {tag:'div', cls:'clipperzSubPanel', children:[
149 {tag:'h5', htmlString:Clipperz.PM.Strings['accountPreferencesTabTitle']}, 147 {tag:'h5', htmlString:Clipperz.PM.Strings['accountPreferencesTabTitle']},
150 {tag:'div', cls:'panelBody', id:this.getId('preferencesPanelBody')} 148 {tag:'div', cls:'panelBody', id:this.getId('preferencesPanelBody')}
diff --git a/frontend/beta/js/Clipperz/PM/Components/Panels/BasePanel.js b/frontend/beta/js/Clipperz/PM/Components/Panels/BasePanel.js
index 15dd622..f36e8b0 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Panels/BasePanel.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Panels/BasePanel.js
@@ -1,93 +1,91 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; } 27if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
30 28
31//var _Clipperz_PM_Components_Panels_base_id_ = 0; 29//var _Clipperz_PM_Components_Panels_base_id_ = 0;
32 30
33//############################################################################# 31//#############################################################################
34 32
35Clipperz.PM.Components.Panels.BasePanel = function(anElement, args) { 33Clipperz.PM.Components.Panels.BasePanel = function(anElement, args) {
36 args = args || {}; 34 args = args || {};
37 35
38 Clipperz.PM.Components.Panels.BasePanel.superclass.constructor.call(this, anElement, args); 36 Clipperz.PM.Components.Panels.BasePanel.superclass.constructor.call(this, anElement, args);
39 37
40 this._user = args.user || null; 38 this._user = args.user || null;
41 this._delegate = args.delegate || null; 39 this._delegate = args.delegate || null;
42 this._tabPanelController = null; 40 this._tabPanelController = null;
43 //Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler'); 41 //Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler');
44 42
45 //this._ids = {}; 43 //this._ids = {};
46 44
47 return this; 45 return this;
48} 46}
49 47
50//============================================================================= 48//=============================================================================
51 49
52YAHOO.extendX(Clipperz.PM.Components.Panels.BasePanel, Clipperz.PM.Components.BaseComponent, { 50YAHOO.extendX(Clipperz.PM.Components.Panels.BasePanel, Clipperz.PM.Components.BaseComponent, {
53 51
54 'toString': function() { 52 'toString': function() {
55 return "Clipperz.PM.Components.Panels.BasePanel component"; 53 return "Clipperz.PM.Components.Panels.BasePanel component";
56 }, 54 },
57 55
58 //------------------------------------------------------------------------- 56 //-------------------------------------------------------------------------
59 57
60 'user': function() { 58 'user': function() {
61 return this._user; 59 return this._user;
62 }, 60 },
63 61
64 'setUser': function(aValue) { 62 'setUser': function(aValue) {
65 this._user = aValue; 63 this._user = aValue;
66 }, 64 },
67 65
68 //------------------------------------------------------------------------- 66 //-------------------------------------------------------------------------
69 67
70 'delegate': function() { 68 'delegate': function() {
71 return this._delegate; 69 return this._delegate;
72 }, 70 },
73 71
74 'setDelegate': function(aValue) { 72 'setDelegate': function(aValue) {
75 this._delegate = aValue; 73 this._delegate = aValue;
76 }, 74 },
77 75
78 //------------------------------------------------------------------------- 76 //-------------------------------------------------------------------------
79 77
80 'tabPanelController': function() { 78 'tabPanelController': function() {
81 return this._tabPanelController; 79 return this._tabPanelController;
82 }, 80 },
83 81
84 'switchLanguageHandler': function() { 82 'switchLanguageHandler': function() {
85//MochiKit.Logging.logDebug(">>> BasePanel.switchLanguageHandler [" + this.toString() + "]"); 83//MochiKit.Logging.logDebug(">>> BasePanel.switchLanguageHandler [" + this.toString() + "]");
86 this.render(); 84 this.render();
87//MochiKit.Logging.logDebug("<<< BasePanel.switchLanguageHandler [" + this.toString() + "]"); 85//MochiKit.Logging.logDebug("<<< BasePanel.switchLanguageHandler [" + this.toString() + "]");
88 }, 86 },
89 87
90 //------------------------------------------------------------------------- 88 //-------------------------------------------------------------------------
91 __syntaxFix__: "syntax fix" 89 __syntaxFix__: "syntax fix"
92 90
93}); 91});
diff --git a/frontend/beta/js/Clipperz/PM/Components/Panels/ContactsPanel.js b/frontend/beta/js/Clipperz/PM/Components/Panels/ContactsPanel.js
index 5a91d83..3feed3d 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Panels/ContactsPanel.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Panels/ContactsPanel.js
@@ -1,102 +1,100 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; } 27if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Panels.ContactsPanel = function(anElement, args) { 31Clipperz.PM.Components.Panels.ContactsPanel = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.Panels.ContactsPanel.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.Panels.ContactsPanel.superclass.constructor.call(this, anElement, args);
37 35
38 this.render(); 36 this.render();
39 37
40 return this; 38 return this;
41} 39}
42 40
43//============================================================================= 41//=============================================================================
44 42
45YAHOO.extendX(Clipperz.PM.Components.Panels.ContactsPanel, Clipperz.PM.Components.Panels.BasePanel, { 43YAHOO.extendX(Clipperz.PM.Components.Panels.ContactsPanel, Clipperz.PM.Components.Panels.BasePanel, {
46 44
47 'toString': function() { 45 'toString': function() {
48 return "Clipperz.PM.Components.ContactsPanel component"; 46 return "Clipperz.PM.Components.ContactsPanel component";
49 }, 47 },
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 50
53 'render': function() { 51 'render': function() {
54 // var tabPanelControllerConfig; 52 // var tabPanelControllerConfig;
55 53
56 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[ 54 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
57 {tag:'tbody', children:[ 55 {tag:'tbody', children:[
58 {tag:'tr', children:[ 56 {tag:'tr', children:[
59 {tag:'td', valign:'top', width:'200', children:[ 57 {tag:'td', valign:'top', width:'200', children:[
60 {tag:'ul', id:"dataSubMenu", cls:'subMenu', children:[ 58 {tag:'ul', id:"dataSubMenu", cls:'subMenu', children:[
61 {tag:'li', id:this.getId('contacts'), htmlString:Clipperz.PM.Strings['contactsTabLabel']}, 59 {tag:'li', id:this.getId('contacts'), htmlString:Clipperz.PM.Strings['contactsTabLabel']},
62 ]} 60 ]}
63 ]}, 61 ]},
64 {tag:'td', valign:'top', children:[ 62 {tag:'td', valign:'top', children:[
65 {tag:'ul', cls:'clipperzTabPanels', children:[ 63 {tag:'ul', cls:'clipperzTabPanels', children:[
66 {tag:'li', id:this.getId('contactsPanel'), children:[ 64 {tag:'li', id:this.getId('contactsPanel'), children:[
67 {tag:'div', cls:'clipperzSubPanel', children:[ 65 {tag:'div', cls:'clipperzSubPanel', children:[
68 {tag:'h5', htmlString:Clipperz.PM.Strings['contactsTabTitle']}, 66 {tag:'h5', htmlString:Clipperz.PM.Strings['contactsTabTitle']},
69 {tag:'div', htmlString:Clipperz.PM.Strings['comingSoon']} 67 {tag:'div', htmlString:Clipperz.PM.Strings['comingSoon']}
70 ]} 68 ]}
71 ]} 69 ]}
72 ]} 70 ]}
73 ]} 71 ]}
74 ]} 72 ]}
75 ]} 73 ]}
76 ]}); 74 ]});
77 75
78 // tabPanelControllerConfig = {} 76 // tabPanelControllerConfig = {}
79 // tabPanelControllerConfig[this.getId('contacts')] = this.getId('contactsPanel'); 77 // tabPanelControllerConfig[this.getId('contacts')] = this.getId('contactsPanel');
80 // new Clipperz.PM.Components.TabPanel.TabPanelController({ config:tabPanelControllerConfig, selectedTab:this.getId('contacts') }); 78 // new Clipperz.PM.Components.TabPanel.TabPanelController({ config:tabPanelControllerConfig, selectedTab:this.getId('contacts') });
81 this.tabPanelController().setUp(); 79 this.tabPanelController().setUp();
82 }, 80 },
83 81
84 //------------------------------------------------------------------------- 82 //-------------------------------------------------------------------------
85 83
86 'tabPanelController': function() { 84 'tabPanelController': function() {
87 if (this._tabPanelController == null) { 85 if (this._tabPanelController == null) {
88 var tabPanelControllerConfig; 86 var tabPanelControllerConfig;
89 87
90 tabPanelControllerConfig = {} 88 tabPanelControllerConfig = {}
91 tabPanelControllerConfig[this.getId('contacts')] = this.getId('contactsPanel'); 89 tabPanelControllerConfig[this.getId('contacts')] = this.getId('contactsPanel');
92 this._tabPanelController = new Clipperz.PM.Components.TabPanel.TabPanelController({ config:tabPanelControllerConfig, selectedTab:this.getId('contacts') }); 90 this._tabPanelController = new Clipperz.PM.Components.TabPanel.TabPanelController({ config:tabPanelControllerConfig, selectedTab:this.getId('contacts') });
93 } 91 }
94 92
95 return this._tabPanelController; 93 return this._tabPanelController;
96 }, 94 },
97 95
98 //------------------------------------------------------------------------- 96 //-------------------------------------------------------------------------
99 __syntaxFix__: "syntax fix" 97 __syntaxFix__: "syntax fix"
100 98
101}); 99});
102 100
diff --git a/frontend/beta/js/Clipperz/PM/Components/Panels/DataPanel.js b/frontend/beta/js/Clipperz/PM/Components/Panels/DataPanel.js
index 11d4bd7..520542c 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Panels/DataPanel.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Panels/DataPanel.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; } 27if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Panels.DataPanel = function(anElement, args) { 31Clipperz.PM.Components.Panels.DataPanel = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.Panels.DataPanel.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.Panels.DataPanel.superclass.constructor.call(this, anElement, args);
37 35
38 this._progressWidth = 400; 36 this._progressWidth = 400;
39 37
40 38
41 this.render(); 39 this.render();
42 40
43 return this; 41 return this;
44} 42}
45 43
46//============================================================================= 44//=============================================================================
47 45
48YAHOO.extendX(Clipperz.PM.Components.Panels.DataPanel, Clipperz.PM.Components.Panels.BasePanel, { 46YAHOO.extendX(Clipperz.PM.Components.Panels.DataPanel, Clipperz.PM.Components.Panels.BasePanel, {
49 47
50 'toString': function() { 48 'toString': function() {
51 return "Clipperz.PM.Components.DataPanel component"; 49 return "Clipperz.PM.Components.DataPanel component";
52 }, 50 },
53 51
54 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
55 53
56 'render': function() { 54 'render': function() {
57 MochiKit.Signal.disconnectAllTo(this); 55 MochiKit.Signal.disconnectAllTo(this);
58 Clipperz.NotificationCenter.unregister(this); 56 Clipperz.NotificationCenter.unregister(this);
59 this.element().update(""); 57 this.element().update("");
60 58
61 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[ 59 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
62 {tag:'tbody', children:[ 60 {tag:'tbody', children:[
63 {tag:'tr', children:[ 61 {tag:'tr', children:[
64 {tag:'td', valign:'top', width:'200', children:[ 62 {tag:'td', valign:'top', width:'200', children:[
65 {tag:'ul', id:"dataSubMenu", cls:'subMenu', children:[ 63 {tag:'ul', id:"dataSubMenu", cls:'subMenu', children:[
66 {tag:'li', id:'offlineCopyTab', htmlString:Clipperz.PM.Strings['offlineCopyTabLabel']}, 64 {tag:'li', id:'offlineCopyTab', htmlString:Clipperz.PM.Strings['offlineCopyTabLabel']},
67 {tag:'li', id:'sharingTab', htmlString:Clipperz.PM.Strings['sharingTabLabel']}, 65 {tag:'li', id:'sharingTab', htmlString:Clipperz.PM.Strings['sharingTabLabel']},
68 {tag:'li', id:'importTab', htmlString:Clipperz.PM.Strings['importTabLabel']}, 66 {tag:'li', id:'importTab', htmlString:Clipperz.PM.Strings['importTabLabel']},
69 {tag:'li', id:'printingTab', htmlString:Clipperz.PM.Strings['printingTabLabel']} 67 {tag:'li', id:'printingTab', htmlString:Clipperz.PM.Strings['printingTabLabel']}
70 ]} 68 ]}
71 ]}, 69 ]},
72 {tag:'td', valign:'top', children:[ 70 {tag:'td', valign:'top', children:[
73 {tag:'ul', cls:'clipperzTabPanels', children:[ 71 {tag:'ul', cls:'clipperzTabPanels', children:[
74 {tag:'li', id:this.getId('offlineCopyPanel'), children:[ 72 {tag:'li', id:this.getId('offlineCopyPanel'), children:[
75 {tag:'div', cls:'clipperzSubPanel', children:[ 73 {tag:'div', cls:'clipperzSubPanel', children:[
76 {tag:'h5', htmlString:Clipperz.PM.Strings['offlineCopyTabTitle']}, 74 {tag:'h5', htmlString:Clipperz.PM.Strings['offlineCopyTabTitle']},
77 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['offlineCopyTabDescription']}, 75 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['offlineCopyTabDescription']},
78 {tag:'div', id:this.getId('offlineCopyLinkBox'), children:[ 76 {tag:'div', id:this.getId('offlineCopyLinkBox'), children:[
79 {tag:'a', id:'offlineCopyLink', href:'#', htmlString:Clipperz.PM.Strings['offlineCopyDownloadLinkLabel']} 77 {tag:'a', id:'offlineCopyLink', href:'#', htmlString:Clipperz.PM.Strings['offlineCopyDownloadLinkLabel']}
80 ]}, 78 ]},
81 {tag:'div', id:this.getId('offlineCopyLinkBox_read-only'), children:[ 79 {tag:'div', id:this.getId('offlineCopyLinkBox_read-only'), children:[
82 {tag:'span', cls:'read-only', htmlString:Clipperz.PM.Strings['offlineCopyDownloadLinkLabel']} 80 {tag:'span', cls:'read-only', htmlString:Clipperz.PM.Strings['offlineCopyDownloadLinkLabel']}
83 ]} 81 ]}
84 ]} 82 ]}
85 ]}, 83 ]},
86 {tag:'li', id:this.getId('sharingPanel'), children:[ 84 {tag:'li', id:this.getId('sharingPanel'), children:[
87 {tag:'div', cls:'clipperzSubPanel', children:[ 85 {tag:'div', cls:'clipperzSubPanel', children:[
88 {tag:'h5', htmlString:Clipperz.PM.Strings['sharingTabTitle']}, 86 {tag:'h5', htmlString:Clipperz.PM.Strings['sharingTabTitle']},
89 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['sharingTabDescription']} 87 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['sharingTabDescription']}
90 ]} 88 ]}
91 ]}, 89 ]},
92 {tag:'li', id:this.getId('importPanel'), children:[ 90 {tag:'li', id:this.getId('importPanel'), children:[
93 {tag:'div', cls:'clipperzSubPanel', children:[ 91 {tag:'div', cls:'clipperzSubPanel', children:[
94 {tag:'div', id:this.getId('importPanelMainComponent')} 92 {tag:'div', id:this.getId('importPanelMainComponent')}
95 ]} 93 ]}
96 ]}, 94 ]},
97 {tag:'li', id:this.getId('printingPanel'), children:[ 95 {tag:'li', id:this.getId('printingPanel'), children:[
98 {tag:'div', cls:'clipperzSubPanel', children:[ 96 {tag:'div', cls:'clipperzSubPanel', children:[
99 {tag:'h5', htmlString:Clipperz.PM.Strings['printingTabTitle']}, 97 {tag:'h5', htmlString:Clipperz.PM.Strings['printingTabTitle']},
100 98
101 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['printingTabDescription']}, 99 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['printingTabDescription']},
102 {tag:'div', id:this.getId('printingLinkBox'), children:[ 100 {tag:'div', id:this.getId('printingLinkBox'), children:[
103 {tag:'a', id:'printingLink', href:'#', htmlString:Clipperz.PM.Strings['printingLinkLabel']} 101 {tag:'a', id:'printingLink', href:'#', htmlString:Clipperz.PM.Strings['printingLinkLabel']}
104 ]}, 102 ]},
105 103
106 {tag:'hr'}, 104 {tag:'hr'},
107 105
108 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['exportTabDescription']}, 106 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['exportTabDescription']},
109 {tag:'div', id:this.getId('exportLinkBox'), children:[ 107 {tag:'div', id:this.getId('exportLinkBox'), children:[
110 {tag:'a', id:'exportLink', href:'#', htmlString:Clipperz.PM.Strings['exportLinkLabel']} 108 {tag:'a', id:'exportLink', href:'#', htmlString:Clipperz.PM.Strings['exportLinkLabel']}
111 ]} 109 ]}
112 ]} 110 ]}
113 ]} 111 ]}
114 ]} 112 ]}
115 ]} 113 ]}
116 ]} 114 ]}
117 ]} 115 ]}
118 ]}); 116 ]});
119 117
120 this.tabPanelController().setUp(); 118 this.tabPanelController().setUp();
121 119
122 if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) { 120 if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) {
123 this.getElement('offlineCopyLinkBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 121 this.getElement('offlineCopyLinkBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
124 } else { 122 } else {
125 this.getElement('offlineCopyLinkBox_read-only').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 123 this.getElement('offlineCopyLinkBox_read-only').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
126 MochiKit.Signal.connect('offlineCopyLink', 'onclick', this, 'downloadOfflineCopy'); 124 MochiKit.Signal.connect('offlineCopyLink', 'onclick', this, 'downloadOfflineCopy');
127 } 125 }
128 126
129 new Clipperz.PM.Components.Import.MainComponent(this.getElement('importPanelMainComponent'), {user:this.user()}); 127 new Clipperz.PM.Components.Import.MainComponent(this.getElement('importPanelMainComponent'), {user:this.user()});
130 128
131 MochiKit.Signal.connect('printingLink', 'onclick', this, 'printAllData'); 129 MochiKit.Signal.connect('printingLink', 'onclick', this, 'printAllData');
132 MochiKit.Signal.connect('exportLink', 'onclick', this, 'exportAllData'); 130 MochiKit.Signal.connect('exportLink', 'onclick', this, 'exportAllData');
133 131
134 Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler'); 132 Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler');
135 }, 133 },
136 134
137 //------------------------------------------------------------------------- 135 //-------------------------------------------------------------------------
138 136
139 'tabPanelController': function() { 137 'tabPanelController': function() {
140 if (this._tabPanelController == null) { 138 if (this._tabPanelController == null) {
141 var tabPanelControllerConfig; 139 var tabPanelControllerConfig;
142 140
143 tabPanelControllerConfig = {} 141 tabPanelControllerConfig = {}
144 tabPanelControllerConfig['offlineCopyTab'] = this.getId('offlineCopyPanel'); 142 tabPanelControllerConfig['offlineCopyTab'] = this.getId('offlineCopyPanel');
145 tabPanelControllerConfig['sharingTab'] = this.getId('sharingPanel'); 143 tabPanelControllerConfig['sharingTab'] = this.getId('sharingPanel');
146 tabPanelControllerConfig['importTab'] = this.getId('importPanel'); 144 tabPanelControllerConfig['importTab'] = this.getId('importPanel');
147 tabPanelControllerConfig['printingTab'] = this.getId('printingPanel'); 145 tabPanelControllerConfig['printingTab'] = this.getId('printingPanel');
148 this._tabPanelController = new Clipperz.PM.Components.TabPanel.TabPanelController({ 146 this._tabPanelController = new Clipperz.PM.Components.TabPanel.TabPanelController({
149 name: 'dataTabPanel', 147 name: 'dataTabPanel',
150 config:tabPanelControllerConfig, 148 config:tabPanelControllerConfig,
diff --git a/frontend/beta/js/Clipperz/PM/Components/Panels/LoginPanel.js b/frontend/beta/js/Clipperz/PM/Components/Panels/LoginPanel.js
index ef2b91c..3081a9d 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Panels/LoginPanel.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Panels/LoginPanel.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; } 27if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
30 28
31 29
32Clipperz.PM.Components.Panels.LoginPanel = function(anElement, args) { 30Clipperz.PM.Components.Panels.LoginPanel = function(anElement, args) {
33 args = args || {}; 31 args = args || {};
34 32
35 Clipperz.PM.Components.Panels.LoginPanel.superclass.constructor.call(this, anElement, args); 33 Clipperz.PM.Components.Panels.LoginPanel.superclass.constructor.call(this, anElement, args);
36 34
37 this._showLoginFormAnimator = null; 35 this._showLoginFormAnimator = null;
38 this._showRegistrationFormAnimator = null; 36 this._showRegistrationFormAnimator = null;
39 this._shouldShowRegistrationAlert = true; 37 this._shouldShowRegistrationAlert = true;
40 38
41 this._visibleForm = null; 39 this._visibleForm = null;
42 //this._isPassphraseVisible = true; 40 //this._isPassphraseVisible = true;
43 41
44 Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler'); 42 Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler');
45 43
46 this.render(); 44 this.render();
47 45
48 return this; 46 return this;
49} 47}
50 48
51//============================================================================= 49//=============================================================================
52 50
53//MochiKit.Base.update(Clipperz.PM.Components.Panels.LoginPanel.prototype, { 51//MochiKit.Base.update(Clipperz.PM.Components.Panels.LoginPanel.prototype, {
54YAHOO.extendX(Clipperz.PM.Components.Panels.LoginPanel, Clipperz.PM.Components.Panels.BasePanel, { 52YAHOO.extendX(Clipperz.PM.Components.Panels.LoginPanel, Clipperz.PM.Components.Panels.BasePanel, {
55 53
56 'toString': function() { 54 'toString': function() {
57 return "Clipperz.PM.Components.LoginPanel component"; 55 return "Clipperz.PM.Components.LoginPanel component";
58 }, 56 },
59 57
60 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
61 59
62 'render': function() { 60 'render': function() {
63 var result; 61 var result;
64 varlayout; 62 varlayout;
65 var registerButton; 63 var registerButton;
66 64
67 MochiKit.Signal.disconnectAllTo(this); 65 MochiKit.Signal.disconnectAllTo(this);
68 this.element().update(""); 66 this.element().update("");
69 67
70//MochiKit.Logging.logDebug(">>> LoginPanel.initPanel"); 68//MochiKit.Logging.logDebug(">>> LoginPanel.initPanel");
71 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', id:this.getId('baseDiv'), cls:'LoginPanel', children:[ 69 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', id:this.getId('baseDiv'), cls:'LoginPanel', children:[
72 {tag:'table', children:[ 70 {tag:'table', children:[
73 {tag:'thead'}, 71 {tag:'thead'},
74 {tag:'tbody', children:[ 72 {tag:'tbody', children:[
75 {tag:'tr', children:[ 73 {tag:'tr', children:[
76 {tag:'td', valign:'top', children:[ 74 {tag:'td', valign:'top', children:[
77 {tag:'div', cls:'clipperzServiceDescription', htmlString:Clipperz.PM.Strings['clipperzServiceDescription']} 75 {tag:'div', cls:'clipperzServiceDescription', htmlString:Clipperz.PM.Strings['clipperzServiceDescription']}
78 ]}, 76 ]},
79 {tag:'td', valign:'top', align:'right', children:[ 77 {tag:'td', valign:'top', align:'right', children:[
80{tag:'div', id:this.getId('forms'), cls:'clipperzLoginForm', children:[ 78{tag:'div', id:this.getId('forms'), cls:'clipperzLoginForm', children:[
81 {tag:'div', id:this.getId('loginForm'), cls:'loginForm', children:[ 79 {tag:'div', id:this.getId('loginForm'), cls:'loginForm', children:[
82 {tag:'div', cls:'loginFormHeaderBox', children:[{tag:'h3', htmlString:Clipperz.PM.Strings['loginFormTitle']}]}, 80 {tag:'div', cls:'loginFormHeaderBox', children:[{tag:'h3', htmlString:Clipperz.PM.Strings['loginFormTitle']}]},
83 {tag:'form', id:this.getId('loginForm_form'), autocomplete:'off', children:[ 81 {tag:'form', id:this.getId('loginForm_form'), autocomplete:'off', children:[
84 82
85 {tag:'table', cls:'formLayout', children:[ 83 {tag:'table', cls:'formLayout', children:[
86 {tag:'thead'}, 84 {tag:'thead'},
87 {tag:'tbody', children:[ 85 {tag:'tbody', children:[
88 {tag:'tr', cls:'formFieldTR', children:[ 86 {tag:'tr', cls:'formFieldTR', children:[
89 {tag:'td', width:'90', htmlString:Clipperz.PM.Strings['loginFormUsernameLabel']}, 87 {tag:'td', width:'90', htmlString:Clipperz.PM.Strings['loginFormUsernameLabel']},
90 {tag:'td', children:[ 88 {tag:'td', children:[
91 {tag:'input', id:this.getId('login_username'), cls:'loginFormField', type:'text', name:'username'} 89 {tag:'input', id:this.getId('login_username'), cls:'loginFormField', type:'text', name:'username'}
92 ]} 90 ]}
93 ]}, 91 ]},
94 {tag:'tr', cls:'formFieldTR', children:[ 92 {tag:'tr', cls:'formFieldTR', children:[
95 {tag:'td', htmlString:Clipperz.PM.Strings['loginFormPassphraseLabel']}, 93 {tag:'td', htmlString:Clipperz.PM.Strings['loginFormPassphraseLabel']},
96 {tag:'td', children:[ 94 {tag:'td', children:[
97 {tag:'div', id:this.getId('passphraseDIV'), children:[ 95 {tag:'div', id:this.getId('passphraseDIV'), children:[
98 {tag:'input', id:this.getId('login_passphrase'), cls:'loginFormField', type:'password', name:'passphrase'} 96 {tag:'input', id:this.getId('login_passphrase'), cls:'loginFormField', type:'password', name:'passphrase'}
99 ]}, 97 ]},
100 {tag:'div', cls:'oneTimePassword', id:this.getId('oneTimePasswordDIV'), children:[ 98 {tag:'div', cls:'oneTimePassword', id:this.getId('oneTimePasswordDIV'), children:[
101 {tag:'input', type:'text', id:this.getId('oneTimePassword_1'), name:'passphrase'}, 99 {tag:'input', type:'text', id:this.getId('oneTimePassword_1'), name:'passphrase'},
102 {tag:'span', html:'-'}, 100 {tag:'span', html:'-'},
103 {tag:'input', type:'text', id:this.getId('oneTimePassword_2'), name:'passphrase'}, 101 {tag:'input', type:'text', id:this.getId('oneTimePassword_2'), name:'passphrase'},
104 {tag:'span', html:'-'}, 102 {tag:'span', html:'-'},
105 {tag:'input', type:'text', id:this.getId('oneTimePassword_3'), name:'passphrase'}, 103 {tag:'input', type:'text', id:this.getId('oneTimePassword_3'), name:'passphrase'},
106 {tag:'span', html:'-'}, 104 {tag:'span', html:'-'},
107 {tag:'input', type:'text', id:this.getId('oneTimePassword_4'), name:'passphrase'} 105 {tag:'input', type:'text', id:this.getId('oneTimePassword_4'), name:'passphrase'}
108 ]} 106 ]}
109 ]} 107 ]}
110 ]}, 108 ]},
111 {tag:'tr', cls:'formFieldTR', id:this.getId('passwordTypeChooserTR'), children:[ 109 {tag:'tr', cls:'formFieldTR', id:this.getId('passwordTypeChooserTR'), children:[
112 {tag:'td', valign:'top', align:'right', children:[ 110 {tag:'td', valign:'top', align:'right', children:[
113 {tag:'input', type:'checkbox', cls:'passwordTypeCheckbox', id:this.getId('useOneTimePasswordCheckbox')} 111 {tag:'input', type:'checkbox', cls:'passwordTypeCheckbox', id:this.getId('useOneTimePasswordCheckbox')}
114 ]}, 112 ]},
115 {tag:'td', children:[ 113 {tag:'td', children:[
116 {tag:'div', cls:'passwordTypeChooser', children:[ 114 {tag:'div', cls:'passwordTypeChooser', children:[
117 {tag:'h4', htmlString:Clipperz.PM.Strings['loginFormOneTimePasswordCheckboxLabel']}, 115 {tag:'h4', htmlString:Clipperz.PM.Strings['loginFormOneTimePasswordCheckboxLabel']},
118 {tag:'span', htmlString:Clipperz.PM.Strings['loginFormOneTimePasswordCheckboxDescription']} 116 {tag:'span', htmlString:Clipperz.PM.Strings['loginFormOneTimePasswordCheckboxDescription']}
119 ]} 117 ]}
120 ]} 118 ]}
121 ]}, 119 ]},
122 {tag:'tr', children:[ 120 {tag:'tr', children:[
123 {tag:'td'}, 121 {tag:'td'},
124 {tag:'td', children:[ 122 {tag:'td', children:[
125 {tag:'div', id:this.getId('login_submit')} 123 {tag:'div', id:this.getId('login_submit')}
126 ]} 124 ]}
127 ]} 125 ]}
128 ]}, 126 ]},
129 {tag:'tfoot'} 127 {tag:'tfoot'}
130 ]} 128 ]}
131 ]}, 129 ]},
132 130
133 {tag:'div', cls:'loginFormFooterBox', children:[ 131 {tag:'div', cls:'loginFormFooterBox', children:[
134 {tag:'ul', children:[ 132 {tag:'ul', children:[
135 {tag:'li', id:this.getId('showRegistrationLI'), children:[ 133 {tag:'li', id:this.getId('showRegistrationLI'), children:[
136 {tag:'span', htmlString:Clipperz.PM.Strings['loginFormDontHaveAnAccountLabel']}, 134 {tag:'span', htmlString:Clipperz.PM.Strings['loginFormDontHaveAnAccountLabel']},
137 {tag:'a', href:'.', id:this.getId('showRegistration'), cls:'clipperzActionLink', htmlString:Clipperz.PM.Strings['loginFormCreateOneLabel']} 135 {tag:'a', href:'.', id:this.getId('showRegistration'), cls:'clipperzActionLink', htmlString:Clipperz.PM.Strings['loginFormCreateOneLabel']}
138 ]}, 136 ]},
139 {tag:'li', children:[ 137 {tag:'li', children:[
140 {tag:'span', htmlString:Clipperz.PM.Strings['loginFormForgotYourCredentialsLabel']}, 138 {tag:'span', htmlString:Clipperz.PM.Strings['loginFormForgotYourCredentialsLabel']},
141 {tag:'a', href:Clipperz.PM.Strings['loginFormAarghThatsBadUrl'], target:'Clipperz_Help', htmlString:Clipperz.PM.Strings['loginFormAarghThatsBadLabel']} 139 {tag:'a', href:Clipperz.PM.Strings['loginFormAarghThatsBadUrl'], target:'Clipperz_Help', htmlString:Clipperz.PM.Strings['loginFormAarghThatsBadLabel']}
142 ]}, 140 ]},
143 {tag:'li', children:[ 141 {tag:'li', children:[
144 {tag:'span', htmlString:Clipperz.PM.Strings['loginFormAfraidOfMaliciousScriptsLabel']}, 142 {tag:'span', htmlString:Clipperz.PM.Strings['loginFormAfraidOfMaliciousScriptsLabel']},
145 {tag:'a', href:Clipperz.PM.Strings['loginFormVerifyTheCodeUrl'], target:'Clipperz_Help', htmlString:Clipperz.PM.Strings['loginFormVerifyTheCodeLabel']} 143 {tag:'a', href:Clipperz.PM.Strings['loginFormVerifyTheCodeUrl'], target:'Clipperz_Help', htmlString:Clipperz.PM.Strings['loginFormVerifyTheCodeLabel']}
146 ]} 144 ]}
147 ]} 145 ]}
148 ]} 146 ]}
149 ]}, 147 ]},
150 148
diff --git a/frontend/beta/js/Clipperz/PM/Components/Panels/LogoutPanel.js b/frontend/beta/js/Clipperz/PM/Components/Panels/LogoutPanel.js
index b8cc556..17ed8e4 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Panels/LogoutPanel.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Panels/LogoutPanel.js
@@ -1,70 +1,68 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; } 27if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Panels.LogoutPanel = function(args) { 31Clipperz.PM.Components.Panels.LogoutPanel = function(args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.Panels.LogoutPanel.superclass.constructor.call(this, args); 34 Clipperz.PM.Components.Panels.LogoutPanel.superclass.constructor.call(this, args);
37 35
38 return this; 36 return this;
39} 37}
40 38
41//============================================================================= 39//=============================================================================
42 40
43YAHOO.extendX(Clipperz.PM.Components.Panels.LogoutPanel, Clipperz.PM.Components.Panels.BasePanel, { 41YAHOO.extendX(Clipperz.PM.Components.Panels.LogoutPanel, Clipperz.PM.Components.Panels.BasePanel, {
44 42
45 'toString': function() { 43 'toString': function() {
46 return "Clipperz.PM.Components.LogoutPanel component"; 44 return "Clipperz.PM.Components.LogoutPanel component";
47 }, 45 },
48 46
49 //------------------------------------------------------------------------- 47 //-------------------------------------------------------------------------
50 48
51 'initPanel': function() { 49 'initPanel': function() {
52 var result; 50 var result;
53 varlayout; 51 varlayout;
54 52
55 result = new YAHOO.ext.ContentPanel(this.getId('panel'), {title:'logout', closable:false, autoCreate:true}); 53 result = new YAHOO.ext.ContentPanel(this.getId('panel'), {title:'logout', closable:false, autoCreate:true});
56 54
57 Clipperz.YUI.DomHelper.append(result.getEl().dom, 55 Clipperz.YUI.DomHelper.append(result.getEl().dom,
58 {tag:'div', children:[ 56 {tag:'div', children:[
59 {tag:'h2', html:'Logout panel'} 57 {tag:'h2', html:'Logout panel'}
60 ]} 58 ]}
61 ); 59 );
62 60
63 return result; 61 return result;
64 }, 62 },
65 63
66 //------------------------------------------------------------------------- 64 //-------------------------------------------------------------------------
67 __syntaxFix__: "syntax fix" 65 __syntaxFix__: "syntax fix"
68 66
69}); 67});
70 68
diff --git a/frontend/beta/js/Clipperz/PM/Components/Panels/MainPanel.js b/frontend/beta/js/Clipperz/PM/Components/Panels/MainPanel.js
index 29ef516..c19a8a3 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Panels/MainPanel.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Panels/MainPanel.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; } 27if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Panels.MainPanel = function(anElement, args) { 31Clipperz.PM.Components.Panels.MainPanel = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.Panels.MainPanel.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.Panels.MainPanel.superclass.constructor.call(this, anElement, args);
37 35
38 this._recordListDataModel = null; 36 this._recordListDataModel = null;
39 this._selectedRecord = null; 37 this._selectedRecord = null;
40 this._recordDetailComponent = null; 38 this._recordDetailComponent = null;
41 this._recordListGrid = null; 39 this._recordListGrid = null;
42 40
43 this._directLinkItemTemplate = null; 41 this._directLinkItemTemplate = null;
44 this._recordItemTemplate = null; 42 this._recordItemTemplate = null;
45 43
46 this._addNewRecordButton = null; 44 this._addNewRecordButton = null;
47 this._deleteRecordButton = null; 45 this._deleteRecordButton = null;
48 46
49 this._creationWizard = null; 47 this._creationWizard = null;
50 48
51 Clipperz.NotificationCenter.register(null, 'selectAndEnterEditMode', this, 'selectRecordAndEnterEditModeHandler'); 49 Clipperz.NotificationCenter.register(null, 'selectAndEnterEditMode', this, 'selectRecordAndEnterEditModeHandler');
52 50
53 Clipperz.NotificationCenter.register(null, 'recordAdded', this, 'recordAddedHandler'); 51 Clipperz.NotificationCenter.register(null, 'recordAdded', this, 'recordAddedHandler');
54 Clipperz.NotificationCenter.register(null, 'recordUpdated', this, 'recordUpdatedHandler'); 52 Clipperz.NotificationCenter.register(null, 'recordUpdated', this, 'recordUpdatedHandler');
55 Clipperz.NotificationCenter.register(null, 'recordRemoved', this, 'recordRemovedHandler'); 53 Clipperz.NotificationCenter.register(null, 'recordRemoved', this, 'recordRemovedHandler');
56 54
57 Clipperz.NotificationCenter.register(null, 'directLoginAdded', this, 'directLoginAddedHandler'); 55 Clipperz.NotificationCenter.register(null, 'directLoginAdded', this, 'directLoginAddedHandler');
58 Clipperz.NotificationCenter.register(null, 'directLoginUpdated', this, 'directLoginUpdatedHandler'); 56 Clipperz.NotificationCenter.register(null, 'directLoginUpdated', this, 'directLoginUpdatedHandler');
59 Clipperz.NotificationCenter.register(null, 'directLoginRemoved', this, 'directLoginRemovedHandler'); 57 Clipperz.NotificationCenter.register(null, 'directLoginRemoved', this, 'directLoginRemovedHandler');
60 58
61 Clipperz.NotificationCenter.register(null, 'accountLocked', this, 'accountLockedHandler'); 59 Clipperz.NotificationCenter.register(null, 'accountLocked', this, 'accountLockedHandler');
62 60
63 MochiKit.Signal.connect(MochiKit.DOM.currentWindow(), 'onresize', this, 'resizeModalMask'); 61 MochiKit.Signal.connect(MochiKit.DOM.currentWindow(), 'onresize', this, 'resizeModalMask');
64 this.render(); 62 this.render();
65 63
66 return this; 64 return this;
67} 65}
68 66
69//============================================================================= 67//=============================================================================
70 68
71YAHOO.extendX(Clipperz.PM.Components.Panels.MainPanel, Clipperz.PM.Components.Panels.BasePanel, { 69YAHOO.extendX(Clipperz.PM.Components.Panels.MainPanel, Clipperz.PM.Components.Panels.BasePanel, {
72 70
73 'toString': function() { 71 'toString': function() {
74 return "Clipperz.PM.Components.Panels.MainPanel component"; 72 return "Clipperz.PM.Components.Panels.MainPanel component";
75 }, 73 },
76 74
77 //------------------------------------------------------------------------- 75 //-------------------------------------------------------------------------
78 76
79 'render': function() { 77 'render': function() {
80 this.element().update(""); 78 this.element().update("");
81 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', id:'mainPanelTABLE', border:'0', cellspacing:'0', cellpadding:'0', children:[ 79 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', id:'mainPanelTABLE', border:'0', cellspacing:'0', cellpadding:'0', children:[
82 {tag:'tbody', children:[ 80 {tag:'tbody', children:[
83 {tag:'tr', children:[ 81 {tag:'tr', children:[
84 {tag:'td', width:'15', children:[ 82 {tag:'td', width:'15', children:[
85 {tag:'div', cls:'mainPanelMinHeightDiv'} 83 {tag:'div', cls:'mainPanelMinHeightDiv'}
86 ]}, 84 ]},
87 {tag:'td', valign:'top', id:'directLoginsTD', width:'200', children:[ 85 {tag:'td', valign:'top', id:'directLoginsTD', width:'200', children:[
88 {tag:'div', id:'directLoginsBlock', children:[ 86 {tag:'div', id:'directLoginsBlock', children:[
89 {tag:'div', cls:'directLoginsBlockHeaderBox', children:[{tag:'h3', id:'directLoginTitle', htmlString:Clipperz.PM.Strings['mainPanelDirectLoginBlockLabel']}]}, 87 {tag:'div', cls:'directLoginsBlockHeaderBox', children:[{tag:'h3', id:'directLoginTitle', htmlString:Clipperz.PM.Strings['mainPanelDirectLoginBlockLabel']}]},
90 {tag:'div', id:'directLoginsDescription', htmlString:Clipperz.PM.Strings['mainPanelDirectLoginBlockDescription']}, 88 {tag:'div', id:'directLoginsDescription', htmlString:Clipperz.PM.Strings['mainPanelDirectLoginBlockDescription']},
91 {tag:'ul', id:'directLogins'} 89 {tag:'ul', id:'directLogins'}
92 ]} 90 ]}
93 ]}, 91 ]},
94 {tag:'td', width:'15', children:[ 92 {tag:'td', width:'15', children:[
95 {tag:'div', cls:'mainPanelMinHeightDiv'} 93 {tag:'div', cls:'mainPanelMinHeightDiv'}
96 ]}, 94 ]},
97 {tag:'td', valign:'top', children:[ 95 {tag:'td', valign:'top', children:[
98 {tag:'div', id:'mainContent', children:[ 96 {tag:'div', id:'mainContent', children:[
99 {tag:'div', id:'recordListBlockHeader'}, 97 {tag:'div', id:'recordListBlockHeader'},
100 {tag:'div', id:'recordListAndDetailBlock', children:[ 98 {tag:'div', id:'recordListAndDetailBlock', children:[
101 {tag:'table', id:'recordListAndDetailBlockTABLE', border:'0', cellspacing:'0', cellpadding:'0', children:[ 99 {tag:'table', id:'recordListAndDetailBlockTABLE', border:'0', cellspacing:'0', cellpadding:'0', children:[
102 {tag:'tbody', children:[ 100 {tag:'tbody', children:[
103 {tag:'tr', children:[ 101 {tag:'tr', children:[
104 {tag:'td', valign:'top', width:'250', children:[ 102 {tag:'td', valign:'top', width:'250', children:[
105 {tag:'div', id:'recordListBlock', children:[ 103 {tag:'div', id:'recordListBlock', children:[
106 {tag:'div', id:'recordListFilterHeader'}, 104 {tag:'div', id:'recordListFilterHeader'},
107 {tag:'ul', id:'records'} 105 {tag:'ul', id:'records'}
108 ]} 106 ]}
109 ]}, 107 ]},
110 {tag:'td', id:'recordDetailSeparatorTD', rowspan:'2', valign:'top', bgcolor:'#ddddff', html:'&nbsp;'}, 108 {tag:'td', id:'recordDetailSeparatorTD', rowspan:'2', valign:'top', bgcolor:'#ddddff', html:'&nbsp;'},
111 {tag:'td', valign:'top', children:[ 109 {tag:'td', valign:'top', children:[
112 {tag:'div', id:'recordDetailMainBlock', children:[ 110 {tag:'div', id:'recordDetailMainBlock', children:[
113 {tag:'div', id:'recordTitleTopBlock'}, 111 {tag:'div', id:'recordTitleTopBlock'},
114 {tag:'div', id:'recordDetailBlock', children:[ 112 {tag:'div', id:'recordDetailBlock', children:[
115 {tag:'div', id:'recordDetail'} 113 {tag:'div', id:'recordDetail'}
116 ]} 114 ]}
117 ]}, 115 ]},
118 {tag:'div', id:'recordCreationWizardMainBlock', children:[ 116 {tag:'div', id:'recordCreationWizardMainBlock', children:[
119 {tag:'div', id:'recordCreationWizard', html:"WIZARD"} 117 {tag:'div', id:'recordCreationWizard', html:"WIZARD"}
120 ]} 118 ]}
121 ]} 119 ]}
122 ]}, 120 ]},
123 {tag:'tr', children:[ 121 {tag:'tr', children:[
124 {tag:'td', id:'cardBoxLowerLeftTD', html:'&nbsp;'}, 122 {tag:'td', id:'cardBoxLowerLeftTD', html:'&nbsp;'},
125 {tag:'td', id:'cardBoxLowerRightTD', html:'&nbsp;'} 123 {tag:'td', id:'cardBoxLowerRightTD', html:'&nbsp;'}
126 ]} 124 ]}
127 ]} 125 ]}
128 ]} 126 ]}
129 ]} 127 ]}
130 ]} 128 ]}
131 ]}, 129 ]},
132 {tag:'td', width:'15', html:"&nbsp;"} 130 {tag:'td', width:'15', html:"&nbsp;"}
133 ]} 131 ]}
134 ]} 132 ]}
135 ]}); 133 ]});
136 134
137 this.renderRecordListBlockHeader(); 135 this.renderRecordListBlockHeader();
138 // this.renderRecordListFilterHeader(); 136 // this.renderRecordListFilterHeader();
139 137
140 YAHOO.ext.Element.get('directLogins').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 138 YAHOO.ext.Element.get('directLogins').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
141 139
142 this.recordDetailComponent(); 140 this.recordDetailComponent();
143 141
144 YAHOO.ext.Element.get('recordDetailMainBlock').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show(); 142 YAHOO.ext.Element.get('recordDetailMainBlock').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show();
145 YAHOO.ext.Element.get('recordCreationWizardMainBlock').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(); 143 YAHOO.ext.Element.get('recordCreationWizardMainBlock').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
146 }, 144 },
147 145
148 //------------------------------------------------------------------------- 146 //-------------------------------------------------------------------------
149 147
150 'addNewRecordButton': function() { 148 'addNewRecordButton': function() {
diff --git a/frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js b/frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js
index 4f2a015..1c799d0 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; } 27if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.Panels.ToolsPanel = function(anElement, args) { 31Clipperz.PM.Components.Panels.ToolsPanel = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.Panels.ToolsPanel.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.Panels.ToolsPanel.superclass.constructor.call(this, anElement, args);
37 35
38 this._generateButtonElement = null; 36 this._generateButtonElement = null;
39 this._needsRenderingUponTabSwitch = false; 37 this._needsRenderingUponTabSwitch = false;
40 38
41 this.render(); 39 this.render();
42 40
43 return this; 41 return this;
44} 42}
45 43
46//============================================================================= 44//=============================================================================
47 45
48YAHOO.extendX(Clipperz.PM.Components.Panels.ToolsPanel, Clipperz.PM.Components.Panels.BasePanel, { 46YAHOO.extendX(Clipperz.PM.Components.Panels.ToolsPanel, Clipperz.PM.Components.Panels.BasePanel, {
49 47
50 'toString': function() { 48 'toString': function() {
51 return "Clipperz.PM.Components.Panels.ToolsPanel component"; 49 return "Clipperz.PM.Components.Panels.ToolsPanel component";
52 }, 50 },
53 51
54 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
55 53
56 'render': function() { 54 'render': function() {
57 var bookmarkletUrl; 55 var bookmarkletUrl;
58 56
59//MochiKit.Logging.logDebug(">>> ToolsPanel.render"); 57//MochiKit.Logging.logDebug(">>> ToolsPanel.render");
60 Clipperz.NotificationCenter.unregister(this); 58 Clipperz.NotificationCenter.unregister(this);
61 MochiKit.Signal.disconnectAllTo(this); 59 MochiKit.Signal.disconnectAllTo(this);
62 60
63 if (Clipperz_IEisBroken == true) { 61 if (Clipperz_IEisBroken == true) {
64 bookmarkletUrl = bookmarklet_ie; 62 bookmarkletUrl = bookmarklet_ie;
65 } else { 63 } else {
66 bookmarkletUrl = bookmarklet; 64 bookmarkletUrl = bookmarklet;
67 } 65 }
68 66
69 this.element().update(""); 67 this.element().update("");
70 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[ 68 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
71 {tag:'tbody', children:[ 69 {tag:'tbody', children:[
72 {tag:'tr', children:[ 70 {tag:'tr', children:[
73 {tag:'td', valign:'top', width:'200', children:[ 71 {tag:'td', valign:'top', width:'200', children:[
74 {tag:'ul', id:"dataSubMenu", cls:'subMenu', children:[ 72 {tag:'ul', id:"dataSubMenu", cls:'subMenu', children:[
75 {tag:'li', id:this.getId('passwordGenerator'), htmlString:Clipperz.PM.Strings['passwordGeneratorTabLabel']}, 73 {tag:'li', id:this.getId('passwordGenerator'), htmlString:Clipperz.PM.Strings['passwordGeneratorTabLabel']},
76 {tag:'li', id:this.getId('bookmarklet'), htmlString:Clipperz.PM.Strings['bookmarkletTabLabel']}, 74 {tag:'li', id:this.getId('bookmarklet'), htmlString:Clipperz.PM.Strings['bookmarkletTabLabel']},
77 {tag:'li', id:this.getId('compact'), htmlString:Clipperz.PM.Strings['compactTabLabel']}, 75 {tag:'li', id:this.getId('compact'), htmlString:Clipperz.PM.Strings['compactTabLabel']},
78 {tag:'li', id:this.getId('httpAuth'), htmlString:Clipperz.PM.Strings['httpAuthTabLabel']} 76 {tag:'li', id:this.getId('httpAuth'), htmlString:Clipperz.PM.Strings['httpAuthTabLabel']}
79 ]} 77 ]}
80 ]}, 78 ]},
81 {tag:'td', valign:'top', children:[ 79 {tag:'td', valign:'top', children:[
82 {tag:'ul', cls:'clipperzTabPanels', children:[ 80 {tag:'ul', cls:'clipperzTabPanels', children:[
83 {tag:'li', id:this.getId('passwordGeneratorPanel'), children:[ 81 {tag:'li', id:this.getId('passwordGeneratorPanel'), children:[
84 {tag:'div', cls:'clipperzSubPanel', children:[ 82 {tag:'div', cls:'clipperzSubPanel', children:[
85 {tag:'h5', htmlString:Clipperz.PM.Strings['passwordGeneratorTabTitle']}, 83 {tag:'h5', htmlString:Clipperz.PM.Strings['passwordGeneratorTabTitle']},
86 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['paswordGeneratorTabDescription']}, 84 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['paswordGeneratorTabDescription']},
87 85
88 //--------------------------------------------------- 86 //---------------------------------------------------
89 {tag:'div', children:[ 87 {tag:'div', children:[
90 {tag:'form', id:this.getId('passwordGeneratorForm'), cls:'passwordGenerator', children:[ 88 {tag:'form', id:this.getId('passwordGeneratorForm'), cls:'passwordGenerator', children:[
91 {tag:'input', type:'text', cls:'clipperz_passwordGenerator_password', id:this.getId('passwordField')}, 89 {tag:'input', type:'text', cls:'clipperz_passwordGenerator_password', id:this.getId('passwordField')},
92 {tag:'table', children:[ 90 {tag:'table', children:[
93 {tag:'tbody', children:[ 91 {tag:'tbody', children:[
94 {tag:'tr', children:[ 92 {tag:'tr', children:[
95 {tag:'td', width:'20%', children:[ 93 {tag:'td', width:'20%', children:[
96 {tag:'input', type:'checkbox', name:'lowercase', id:this.getId('lowercase'), checked:true}, 94 {tag:'input', type:'checkbox', name:'lowercase', id:this.getId('lowercase'), checked:true},
97 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorLowercaseLabel']} 95 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorLowercaseLabel']}
98 ]}, 96 ]},
99 {tag:'td', width:'20%', children:[ 97 {tag:'td', width:'20%', children:[
100 {tag:'input', type:'checkbox', name:'uppercase', id:this.getId('uppercase'), checked:true}, 98 {tag:'input', type:'checkbox', name:'uppercase', id:this.getId('uppercase'), checked:true},
101 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorUppercaseLabel']} 99 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorUppercaseLabel']}
102 ]}, 100 ]},
103 {tag:'td', width:'20%', children:[ 101 {tag:'td', width:'20%', children:[
104 {tag:'input', type:'checkbox', name:'numbers', id:this.getId('numbers'), checked:true}, 102 {tag:'input', type:'checkbox', name:'numbers', id:this.getId('numbers'), checked:true},
105 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorNumberLabel']} 103 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorNumberLabel']}
106 ]}, 104 ]},
107 {tag:'td', width:'20%', children:[ 105 {tag:'td', width:'20%', children:[
108 {tag:'input', type:'checkbox', name:'symbols', id:this.getId('symbols'), checked:true}, 106 {tag:'input', type:'checkbox', name:'symbols', id:this.getId('symbols'), checked:true},
109 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorSymbolLabel']} 107 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorSymbolLabel']}
110 ]}, 108 ]},
111 {tag:'td', width:'20%', children:[ 109 {tag:'td', width:'20%', children:[
112 {tag:'span', cls:'passwordGeneratorLength', children:[ 110 {tag:'span', cls:'passwordGeneratorLength', children:[
113 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorLengthLabel']}, 111 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorLengthLabel']},
114 {tag:'span', id:this.getId('passwordLength'), cls:'passwordGeneratorLengthValue', html:'0'} 112 {tag:'span', id:this.getId('passwordLength'), cls:'passwordGeneratorLengthValue', html:'0'}
115 ]} 113 ]}
116 ]} 114 ]}
117 ]} 115 ]}
118 ]} 116 ]}
119 ]} 117 ]}
120 ]}, 118 ]},
121 {tag:'div', id:this.getId('generateRandomPassword')} 119 {tag:'div', id:this.getId('generateRandomPassword')}
122 ]} 120 ]}
123 //--------------------------------------------------- 121 //---------------------------------------------------
124 122
125 ]} 123 ]}
126 ]}, 124 ]},
127 {tag:'li', id:this.getId('bookmarkletPanel'), children:[ 125 {tag:'li', id:this.getId('bookmarkletPanel'), children:[
128 {tag:'div', cls:'clipperzSubPanel', children:[ 126 {tag:'div', cls:'clipperzSubPanel', children:[
129 {tag:'h5', htmlString:Clipperz.PM.Strings['bookmarkletTabTitle']}, 127 {tag:'h5', htmlString:Clipperz.PM.Strings['bookmarkletTabTitle']},
130 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['bookmarkletTabDescription']}, 128 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['bookmarkletTabDescription']},
131 {tag:'a', href:bookmarkletUrl, cls:'bookmarkletLink', htmlString:Clipperz.PM.Strings['bookmarkletTabBookmarkletTitle']}, 129 {tag:'a', href:bookmarkletUrl, cls:'bookmarkletLink', htmlString:Clipperz.PM.Strings['bookmarkletTabBookmarkletTitle']},
132 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['bookmarkletTabInstructions']} 130 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['bookmarkletTabInstructions']}
133 ]} 131 ]}
134 ]}, 132 ]},
135 {tag:'li', id:this.getId('compactPanel'), children:[ 133 {tag:'li', id:this.getId('compactPanel'), children:[
136 {tag:'div', cls:'clipperzSubPanel', children:[ 134 {tag:'div', cls:'clipperzSubPanel', children:[
137 {tag:'h5', htmlString:Clipperz.PM.Strings['compactTabTitle']}, 135 {tag:'h5', htmlString:Clipperz.PM.Strings['compactTabTitle']},
138 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['compactTabDescription']} 136 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['compactTabDescription']}
139 ]} 137 ]}
140 ]}, 138 ]},
141 {tag:'li', id:this.getId('httpAuthPanel'), children:[ 139 {tag:'li', id:this.getId('httpAuthPanel'), children:[
142 {tag:'div', cls:'clipperzSubPanel', children:[ 140 {tag:'div', cls:'clipperzSubPanel', children:[
143 {tag:'h5', htmlString:Clipperz.PM.Strings['httpAuthTabTitle']}, 141 {tag:'h5', htmlString:Clipperz.PM.Strings['httpAuthTabTitle']},
144 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['httpAuthTabDescription']}, 142 {tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['httpAuthTabDescription']},
145 {tag:'div', cls:'bookmarkletConfiguration', children:[Clipperz.PM.Strings['httpAuthBookmarkletConfiguration']]} 143 {tag:'div', cls:'bookmarkletConfiguration', children:[Clipperz.PM.Strings['httpAuthBookmarkletConfiguration']]}
146 ]} 144 ]}
147 ]} 145 ]}
148 ]} 146 ]}
149 ]} 147 ]}
150 ]} 148 ]}
diff --git a/frontend/beta/js/Clipperz/PM/Components/PasswordEntropyDisplay.js b/frontend/beta/js/Clipperz/PM/Components/PasswordEntropyDisplay.js
index 784dce9..b64e0f7 100644
--- a/frontend/beta/js/Clipperz/PM/Components/PasswordEntropyDisplay.js
+++ b/frontend/beta/js/Clipperz/PM/Components/PasswordEntropyDisplay.js
@@ -1,115 +1,113 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29 27
30Clipperz.PM.Components.PasswordEntropyDisplay = function(anElement, args) { 28Clipperz.PM.Components.PasswordEntropyDisplay = function(anElement, args) {
31 args = args || {}; 29 args = args || {};
32 30
33//MochiKit.Logging.logDebug(">>> new TextFormField"); 31//MochiKit.Logging.logDebug(">>> new TextFormField");
34 Clipperz.PM.Components.PasswordEntropyDisplay.superclass.constructor.call(this, anElement, args); 32 Clipperz.PM.Components.PasswordEntropyDisplay.superclass.constructor.call(this, anElement, args);
35 33
36 this._wrapperElement = null; 34 this._wrapperElement = null;
37 this._entropyElement = null; 35 this._entropyElement = null;
38 36
39 this.render(); 37 this.render();
40//MochiKit.Logging.logDebug("<<< new TextFormField"); 38//MochiKit.Logging.logDebug("<<< new TextFormField");
41 39
42 return this; 40 return this;
43}; 41};
44 42
45YAHOO.extendX(Clipperz.PM.Components.PasswordEntropyDisplay, Clipperz.PM.Components.BaseComponent, { 43YAHOO.extendX(Clipperz.PM.Components.PasswordEntropyDisplay, Clipperz.PM.Components.BaseComponent, {
46 44
47 'toString': function() { 45 'toString': function() {
48 return "Clipperz.PM.Components.PasswordEntropyDisplay"; 46 return "Clipperz.PM.Components.PasswordEntropyDisplay";
49 }, 47 },
50 48
51 //----------------------------------------------------- 49 //-----------------------------------------------------
52 50
53 'wrapperElement': function() { 51 'wrapperElement': function() {
54 return this._wrapperElement; 52 return this._wrapperElement;
55 }, 53 },
56 54
57 'setWrapperElement': function(aValue) { 55 'setWrapperElement': function(aValue) {
58 this._wrapperElement = aValue; 56 this._wrapperElement = aValue;
59 }, 57 },
60 58
61 //----------------------------------------------------- 59 //-----------------------------------------------------
62 60
63 'passwordElement': function() { 61 'passwordElement': function() {
64 return this.element(); 62 return this.element();
65 }, 63 },
66 64
67 //----------------------------------------------------- 65 //-----------------------------------------------------
68 66
69 'entropyElement': function() { 67 'entropyElement': function() {
70 return this._entropyElement; 68 return this._entropyElement;
71 }, 69 },
72 70
73 'setEntropyElement': function(aValue) { 71 'setEntropyElement': function(aValue) {
74 this._entropyElement = aValue; 72 this._entropyElement = aValue;
75 }, 73 },
76 74
77 //----------------------------------------------------- 75 //-----------------------------------------------------
78 76
79 'render': function() { 77 'render': function() {
80 MochiKit.Signal.disconnectAllTo(this); 78 MochiKit.Signal.disconnectAllTo(this);
81 79
82 this.setWrapperElement(this.element().wrap({tag:'div'})); 80 this.setWrapperElement(this.element().wrap({tag:'div'}));
83 this.setEntropyElement(Clipperz.YUI.DomHelper.append(this.wrapperElement().dom, {tag:'div', cls:'passwordEntropy', html:"&nbsp;"}, true)); 81 this.setEntropyElement(Clipperz.YUI.DomHelper.append(this.wrapperElement().dom, {tag:'div', cls:'passwordEntropy', html:"&nbsp;"}, true));
84 82
85 // this.entropyElement().setWidth(this.passwordElement().getWidth()); 83 // this.entropyElement().setWidth(this.passwordElement().getWidth());
86 this.updateEntropyElement(); 84 this.updateEntropyElement();
87 85
88 MochiKit.Signal.connect(this.element().dom, 'onkeyup', this, 'updateEntropyElement'); 86 MochiKit.Signal.connect(this.element().dom, 'onkeyup', this, 'updateEntropyElement');
89 MochiKit.Signal.connect(this.element().dom, 'onchange', this, 'updateEntropyElement'); 87 MochiKit.Signal.connect(this.element().dom, 'onchange', this, 'updateEntropyElement');
90 MochiKit.Signal.connect(this.element().dom, 'onblur', this, 'updateEntropyElement'); 88 MochiKit.Signal.connect(this.element().dom, 'onblur', this, 'updateEntropyElement');
91 }, 89 },
92 90
93 //----------------------------------------------------- 91 //-----------------------------------------------------
94 92
95 'computeEntropyForString': function(aValue) { 93 'computeEntropyForString': function(aValue) {
96 return Clipperz.PM.Crypto.passwordEntropy(aValue); 94 return Clipperz.PM.Crypto.passwordEntropy(aValue);
97 }, 95 },
98 96
99 //----------------------------------------------------- 97 //-----------------------------------------------------
100 98
101 'updateEntropyElement': function(anEvent) { 99 'updateEntropyElement': function(anEvent) {
102//MochiKit.Logging.logDebug(">>> PasswordEntropyDisplay.updateEntropyElement"); 100//MochiKit.Logging.logDebug(">>> PasswordEntropyDisplay.updateEntropyElement");
103 varmaxExtent; 101 varmaxExtent;
104 varentropy; 102 varentropy;
105 103
106 entropy = Math.min(128, this.computeEntropyForString(this.passwordElement().dom.value)); 104 entropy = Math.min(128, this.computeEntropyForString(this.passwordElement().dom.value));
107//MochiKit.Logging.logDebug("--- PasswordEntropyDisplay.updateEntropyElement - entropy: " + entropy); 105//MochiKit.Logging.logDebug("--- PasswordEntropyDisplay.updateEntropyElement - entropy: " + entropy);
108 this.entropyElement().setStyle('background-position', "0px " + -entropy + "px"); 106 this.entropyElement().setStyle('background-position', "0px " + -entropy + "px");
109 this.entropyElement().setWidth(this.passwordElement().getWidth() * (entropy/128)); 107 this.entropyElement().setWidth(this.passwordElement().getWidth() * (entropy/128));
110//MochiKit.Logging.logDebug("<<< PasswordEntropyDisplay.updateEntropyElement"); 108//MochiKit.Logging.logDebug("<<< PasswordEntropyDisplay.updateEntropyElement");
111 }, 109 },
112 110
113 //----------------------------------------------------- 111 //-----------------------------------------------------
114 __syntaxFix__: '__syntaxFix__' 112 __syntaxFix__: '__syntaxFix__'
115}); 113});
diff --git a/frontend/beta/js/Clipperz/PM/Components/PasswordGenerator.js b/frontend/beta/js/Clipperz/PM/Components/PasswordGenerator.js
index 87c52b2..67db50a 100644
--- a/frontend/beta/js/Clipperz/PM/Components/PasswordGenerator.js
+++ b/frontend/beta/js/Clipperz/PM/Components/PasswordGenerator.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29 27
30Clipperz.PM.Components.PasswordGenerator = function(anElement, aFieldValueComponent, args) { 28Clipperz.PM.Components.PasswordGenerator = function(anElement, aFieldValueComponent, args) {
31 args = args || {}; 29 args = args || {};
32 30
33//MochiKit.Logging.logDebug(">>> new TextFormField"); 31//MochiKit.Logging.logDebug(">>> new TextFormField");
34 Clipperz.PM.Components.PasswordGenerator.superclass.constructor.call(this, anElement, args); 32 Clipperz.PM.Components.PasswordGenerator.superclass.constructor.call(this, anElement, args);
35 33
36 this._fieldValueComponent = aFieldValueComponent; 34 this._fieldValueComponent = aFieldValueComponent;
37 this._panelButton = null; 35 this._panelButton = null;
38 this.render(); 36 this.render();
39//MochiKit.Logging.logDebug("<<< new TextFormField"); 37//MochiKit.Logging.logDebug("<<< new TextFormField");
40 38
41 return this; 39 return this;
42}; 40};
43 41
44YAHOO.extendX(Clipperz.PM.Components.PasswordGenerator, Clipperz.PM.Components.BaseComponent, { 42YAHOO.extendX(Clipperz.PM.Components.PasswordGenerator, Clipperz.PM.Components.BaseComponent, {
45 43
46 'toString': function() { 44 'toString': function() {
47 return "Clipperz.PM.Components.PasswordGenerator"; 45 return "Clipperz.PM.Components.PasswordGenerator";
48 }, 46 },
49 47
50 //----------------------------------------------------- 48 //-----------------------------------------------------
51 49
52 'fieldValueComponent': function() { 50 'fieldValueComponent': function() {
53 return this._fieldValueComponent; 51 return this._fieldValueComponent;
54 }, 52 },
55 53
56 //----------------------------------------------------- 54 //-----------------------------------------------------
57 55
58 'render': function() { 56 'render': function() {
59 MochiKit.Signal.disconnectAllTo(this); 57 MochiKit.Signal.disconnectAllTo(this);
60 58
61 // this._panelButton = new YAHOO.ext.Button(this.element().dom, {text:Clipperz.PM.Strings['passwordGeneratorButtonLabel'], handler:this.openPasswordPanel, scope:this}); 59 // this._panelButton = new YAHOO.ext.Button(this.element().dom, {text:Clipperz.PM.Strings['passwordGeneratorButtonLabel'], handler:this.openPasswordPanel, scope:this});
62 MochiKit.Signal.connect(this.element().dom, 'onmouseenter', this, 'onMouseEnter'); 60 MochiKit.Signal.connect(this.element().dom, 'onmouseenter', this, 'onMouseEnter');
63 MochiKit.Signal.connect(this.element().dom, 'onmouseleave', this, 'onMouseLeave'); 61 MochiKit.Signal.connect(this.element().dom, 'onmouseleave', this, 'onMouseLeave');
64 MochiKit.Signal.connect(this.element().dom, 'onclick', this, 'openPasswordPanel'); 62 MochiKit.Signal.connect(this.element().dom, 'onclick', this, 'openPasswordPanel');
65 }, 63 },
66 64
67 //----------------------------------------------------- 65 //-----------------------------------------------------
68 66
69 'onMouseEnter': function() { 67 'onMouseEnter': function() {
70 this.element().addClass('hover'); 68 this.element().addClass('hover');
71 }, 69 },
72 70
73 'onMouseLeave': function() { 71 'onMouseLeave': function() {
74 this.element().removeClass('hover'); 72 this.element().removeClass('hover');
75 }, 73 },
76 74
77 //----------------------------------------------------- 75 //-----------------------------------------------------
78 76
79 'panelButton': function() { 77 'panelButton': function() {
80 return this._panelButton; 78 return this._panelButton;
81 }, 79 },
82 80
83 //----------------------------------------------------- 81 //-----------------------------------------------------
84 82
85 'openPasswordPanel': function() { 83 'openPasswordPanel': function() {
86 var passwordGeneratorElement; 84 var passwordGeneratorElement;
87 var passwordGeneratorDialog; 85 var passwordGeneratorDialog;
88 var cancelButton; 86 var cancelButton;
89 var okButton; 87 var okButton;
90 var cancelFunction; 88 var cancelFunction;
91 var okFunction; 89 var okFunction;
92 90
93//MochiKit.Logging.logDebug(">>> PasswordGenerator.openPasswordPanel"); 91//MochiKit.Logging.logDebug(">>> PasswordGenerator.openPasswordPanel");
94 passwordGeneratorElement = Clipperz.YUI.DomHelper.append(document.body, {tag:'div', id:'passwordGenerator', children:[ 92 passwordGeneratorElement = Clipperz.YUI.DomHelper.append(document.body, {tag:'div', id:'passwordGenerator', children:[
95 {tag:'div', cls:'ydlg-hd', htmlString:Clipperz.PM.Strings['passwordGeneratorPanelTitle']}, 93 {tag:'div', cls:'ydlg-hd', htmlString:Clipperz.PM.Strings['passwordGeneratorPanelTitle']},
96 {tag:'div', cls:'ydlg-bd', children:[ 94 {tag:'div', cls:'ydlg-bd', children:[
97 {tag:'form', id:this.getId('passwordGeneratorForm'), cls:'passwordGenerator', children:[ 95 {tag:'form', id:this.getId('passwordGeneratorForm'), cls:'passwordGenerator', children:[
98 {tag:'input', type:'text', cls:'clipperz_passwordGenerator_password', id:this.getId('passwordField')}, 96 {tag:'input', type:'text', cls:'clipperz_passwordGenerator_password', id:this.getId('passwordField')},
99 {tag:'table', children:[ 97 {tag:'table', children:[
100 {tag:'tbody', children:[ 98 {tag:'tbody', children:[
101 {tag:'tr', children:[ 99 {tag:'tr', children:[
102 {tag:'td', width:'20%', children:[ 100 {tag:'td', width:'20%', children:[
103 {tag:'input', type:'checkbox', name:'lowercase', id:this.getId('lowercase'), checked:true}, 101 {tag:'input', type:'checkbox', name:'lowercase', id:this.getId('lowercase'), checked:true},
104 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorLowercaseLabel']} 102 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorLowercaseLabel']}
105 ]}, 103 ]},
106 {tag:'td', width:'20%', children:[ 104 {tag:'td', width:'20%', children:[
107 {tag:'input', type:'checkbox', name:'uppercase', id:this.getId('uppercase'), checked:true}, 105 {tag:'input', type:'checkbox', name:'uppercase', id:this.getId('uppercase'), checked:true},
108 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorUppercaseLabel']} 106 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorUppercaseLabel']}
109 ]}, 107 ]},
110 {tag:'td', width:'20%', children:[ 108 {tag:'td', width:'20%', children:[
111 {tag:'input', type:'checkbox', name:'numbers', id:this.getId('numbers'), checked:true}, 109 {tag:'input', type:'checkbox', name:'numbers', id:this.getId('numbers'), checked:true},
112 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorNumberLabel']} 110 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorNumberLabel']}
113 ]}, 111 ]},
114 {tag:'td', width:'20%', children:[ 112 {tag:'td', width:'20%', children:[
115 {tag:'input', type:'checkbox', name:'symbols', id:this.getId('symbols'), checked:true}, 113 {tag:'input', type:'checkbox', name:'symbols', id:this.getId('symbols'), checked:true},
116 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorSymbolLabel']} 114 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorSymbolLabel']}
117 ]}, 115 ]},
118 {tag:'td', width:'20%', children:[ 116 {tag:'td', width:'20%', children:[
119 {tag:'span', cls:'passwordGeneratorLength', children:[ 117 {tag:'span', cls:'passwordGeneratorLength', children:[
120 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorLengthLabel']}, 118 {tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorLengthLabel']},
121 {tag:'span', id:this.getId('passwordLength'), cls:'passwordGeneratorLengthValue', html:'0'} 119 {tag:'span', id:this.getId('passwordLength'), cls:'passwordGeneratorLengthValue', html:'0'}
122 ]} 120 ]}
123 ]} 121 ]}
124 ]} 122 ]}
125 ]} 123 ]}
126 ]} 124 ]}
127 ]} 125 ]}
128 ]}, 126 ]},
129 {tag:'div', cls:'ydlg-ft'} 127 {tag:'div', cls:'ydlg-ft'}
130 ]}, true); 128 ]}, true);
131 129
132 new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('passwordField')); 130 new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('passwordField'));
133 131
134 MochiKit.Signal.connect(this.getId('lowercase'), 'onclick', this, 'updatePasswordValue'); 132 MochiKit.Signal.connect(this.getId('lowercase'), 'onclick', this, 'updatePasswordValue');
135 MochiKit.Signal.connect(this.getId('uppercase'), 'onclick', this, 'updatePasswordValue'); 133 MochiKit.Signal.connect(this.getId('uppercase'), 'onclick', this, 'updatePasswordValue');
136 MochiKit.Signal.connect(this.getId('numbers'), 'onclick', this, 'updatePasswordValue'); 134 MochiKit.Signal.connect(this.getId('numbers'), 'onclick', this, 'updatePasswordValue');
137 MochiKit.Signal.connect(this.getId('symbols'), 'onclick', this, 'updatePasswordValue'); 135 MochiKit.Signal.connect(this.getId('symbols'), 'onclick', this, 'updatePasswordValue');
138 136
139 MochiKit.Signal.connect(this.getDom('passwordField'), 'onkeyup', this, 'updatePasswordLengthLabel'); 137 MochiKit.Signal.connect(this.getDom('passwordField'), 'onkeyup', this, 'updatePasswordLengthLabel');
140 MochiKit.Signal.connect(this.getDom('passwordField'), 'onchange', this, 'updatePasswordLengthLabel'); 138 MochiKit.Signal.connect(this.getDom('passwordField'), 'onchange', this, 'updatePasswordLengthLabel');
141 MochiKit.Signal.connect(this.getDom('passwordField'), 'onblur', this, 'updatePasswordLengthLabel'); 139 MochiKit.Signal.connect(this.getDom('passwordField'), 'onblur', this, 'updatePasswordLengthLabel');
142 140
143 this.updatePasswordValue(); 141 this.updatePasswordValue();
144 142
145 passwordGeneratorDialog = new YAHOO.ext.BasicDialog( 143 passwordGeneratorDialog = new YAHOO.ext.BasicDialog(
146 passwordGeneratorElement, { 144 passwordGeneratorElement, {
147 autoCreate:false, 145 autoCreate:false,
148 closable:false, 146 closable:false,
149 modal:true, 147 modal:true,
150 autoTabs:false, 148 autoTabs:false,
diff --git a/frontend/beta/js/Clipperz/PM/Components/Printing/Footer.js b/frontend/beta/js/Clipperz/PM/Components/Printing/Footer.js
index b3debad..821dc94 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Printing/Footer.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Printing/Footer.js
@@ -1,25 +1,23 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
diff --git a/frontend/beta/js/Clipperz/PM/Components/Printing/Header.js b/frontend/beta/js/Clipperz/PM/Components/Printing/Header.js
index b3debad..821dc94 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Printing/Header.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Printing/Header.js
@@ -1,25 +1,23 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
diff --git a/frontend/beta/js/Clipperz/PM/Components/Printing/Record.js b/frontend/beta/js/Clipperz/PM/Components/Printing/Record.js
index 5f5c29f..170bd09 100644
--- a/frontend/beta/js/Clipperz/PM/Components/Printing/Record.js
+++ b/frontend/beta/js/Clipperz/PM/Components/Printing/Record.js
@@ -1,92 +1,90 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.Printing) == 'undefined') { Clipperz.PM.Components.Printing = {}; } 27if (typeof(Clipperz.PM.Components.Printing) == 'undefined') { Clipperz.PM.Components.Printing = {}; }
30 28
31Clipperz.PM.Components.Printing.Record = function(args) { 29Clipperz.PM.Components.Printing.Record = function(args) {
32 args = args || {}; 30 args = args || {};
33 31
34 this._record = args['record']; 32 this._record = args['record'];
35 33
36 return this; 34 return this;
37} 35}
38 36
39MochiKit.Base.update(Clipperz.PM.Components.Printing.Record.prototype, { 37MochiKit.Base.update(Clipperz.PM.Components.Printing.Record.prototype, {
40 38
41 'record': function() { 39 'record': function() {
42 return this._record; 40 return this._record;
43 }, 41 },
44 42
45 //------------------------------------------------------------------------- 43 //-------------------------------------------------------------------------
46 44
47 'deferredDrawToWindow': function(aWindow) { 45 'deferredDrawToWindow': function(aWindow) {
48 vardeferredResult; 46 vardeferredResult;
49 47
50 deferredResult = new MochiKit.Async.Deferred(); 48 deferredResult = new MochiKit.Async.Deferred();
51 deferredResult.addCallback(MochiKit.Base.method(this.record(), 'deferredData')); 49 deferredResult.addCallback(MochiKit.Base.method(this.record(), 'deferredData'));
52 deferredResult.addCallback(MochiKit.Base.method(this, 'appendToWindow', aWindow)); 50 deferredResult.addCallback(MochiKit.Base.method(this, 'appendToWindow', aWindow));
53 deferredResult.callback(); 51 deferredResult.callback();
54 return deferredResult; 52 return deferredResult;
55 }, 53 },
56 54
57 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
58 56
59 'appendToWindow': function(aWindow) { 57 'appendToWindow': function(aWindow) {
60 MochiKit.DOM.withWindow(aWindow, MochiKit.Base.bind(function() { 58 MochiKit.DOM.withWindow(aWindow, MochiKit.Base.bind(function() {
61 var newBlock; 59 var newBlock;
62 var fields; 60 var fields;
63 61
64 fields = MochiKit.Base.concat( 62 fields = MochiKit.Base.concat(
65 MochiKit.Base.map(MochiKit.Base.bind(function(aField) { 63 MochiKit.Base.map(MochiKit.Base.bind(function(aField) {
66 var result; 64 var result;
67 var dt, dd; 65 var dt, dd;
68 var label, value; 66 var label, value;
69 67
70 label = aField.label(); 68 label = aField.label();
71 value = aField.value(); 69 value = aField.value();
72 dt = MochiKit.DOM.createDOM('DT', null, label); 70 dt = MochiKit.DOM.createDOM('DT', null, label);
73 dd = MochiKit.DOM.createDOM('DD', null, value) 71 dd = MochiKit.DOM.createDOM('DD', null, value)
74 result = [dt, dd]; 72 result = [dt, dd];
75 73
76 return result 74 return result
77 }, this), MochiKit.Base.values(this.record().currentVersion().fields())) 75 }, this), MochiKit.Base.values(this.record().currentVersion().fields()))
78 ); 76 );
79 77
80 newBlock = MochiKit.DOM.DIV({'class': 'recordBlock'}, 78 newBlock = MochiKit.DOM.DIV({'class': 'recordBlock'},
81 MochiKit.DOM.H2(null, this.record().label()), 79 MochiKit.DOM.H2(null, this.record().label()),
82 MochiKit.DOM.DIV({'class': 'recordNotes'}, MochiKit.Base.map(MochiKit.Base.partial(MochiKit.DOM.P, null), this.record().notes().split("\n"))), 80 MochiKit.DOM.DIV({'class': 'recordNotes'}, MochiKit.Base.map(MochiKit.Base.partial(MochiKit.DOM.P, null), this.record().notes().split("\n"))),
83 MochiKit.DOM.createDOM('DL', null, fields) 81 MochiKit.DOM.createDOM('DL', null, fields)
84 ); 82 );
85 MochiKit.DOM.appendChildNodes(MochiKit.DOM.currentDocument().body, newBlock); 83 MochiKit.DOM.appendChildNodes(MochiKit.DOM.currentDocument().body, newBlock);
86 84
87 }, this)); 85 }, this));
88 }, 86 },
89 87
90 //------------------------------------------------------------------------- 88 //-------------------------------------------------------------------------
91 __syntaxFix__: "syntax fix" 89 __syntaxFix__: "syntax fix"
92}); 90});
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/AbstractComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/AbstractComponent.js
index 5b50284..d6fde5c 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/AbstractComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/AbstractComponent.js
@@ -1,102 +1,100 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.AbstractComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.AbstractComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.RecordDetail.AbstractComponent.superclass.constructor.call(this, args); 34 Clipperz.PM.Components.RecordDetail.AbstractComponent.superclass.constructor.call(this, args);
37 35
38 this._element = anElement; 36 this._element = anElement;
39 this._mainComponent = args.mainComponent; 37 this._mainComponent = args.mainComponent;
40 38
41 return this; 39 return this;
42} 40}
43 41
44//============================================================================= 42//=============================================================================
45 43
46YAHOO.extendX(Clipperz.PM.Components.RecordDetail.AbstractComponent, Clipperz.PM.Components.BaseComponent, { 44YAHOO.extendX(Clipperz.PM.Components.RecordDetail.AbstractComponent, Clipperz.PM.Components.BaseComponent, {
47 45
48 'toString': function() { 46 'toString': function() {
49 return "Clipperz.PM.Components.RecordDetail.AbstractComponent"; 47 return "Clipperz.PM.Components.RecordDetail.AbstractComponent";
50 }, 48 },
51 49
52 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
53 51
54 'mainComponent': function() { 52 'mainComponent': function() {
55 return this._mainComponent; 53 return this._mainComponent;
56 }, 54 },
57 55
58 //------------------------------------------------------------------------- 56 //-------------------------------------------------------------------------
59 57
60 'record': function() { 58 'record': function() {
61 return this.mainComponent().record(); 59 return this.mainComponent().record();
62 }, 60 },
63 61
64 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
65 63
66 'editMode': function() { 64 'editMode': function() {
67 return this.mainComponent().editMode(); 65 return this.mainComponent().editMode();
68 }, 66 },
69 67
70 //------------------------------------------------------------------------- 68 //-------------------------------------------------------------------------
71 69
72 'render': function() { 70 'render': function() {
73 this.element().update(""); 71 this.element().update("");
74 this.update(); 72 this.update();
75 }, 73 },
76 74
77 //------------------------------------------------------------------------- 75 //-------------------------------------------------------------------------
78 76
79 'update': function(anEvent) { 77 'update': function(anEvent) {
80 if (this.editMode() == 'EDIT') { 78 if (this.editMode() == 'EDIT') {
81 this.updateEditMode(); 79 this.updateEditMode();
82 } else if (this.editMode() == 'VIEW') { 80 } else if (this.editMode() == 'VIEW') {
83 this.updateViewMode(); 81 this.updateViewMode();
84 } 82 }
85 }, 83 },
86 84
87 //------------------------------------------------------------------------- 85 //-------------------------------------------------------------------------
88 86
89 'updateViewMode': function() {}, 87 'updateViewMode': function() {},
90 'updateEditMode': function() {}, 88 'updateEditMode': function() {},
91 'synchronizeComponentValues': function() {}, 89 'synchronizeComponentValues': function() {},
92 90
93 //------------------------------------------------------------------------- 91 //-------------------------------------------------------------------------
94 92
95 'destroy': function() { 93 'destroy': function() {
96 this.element().remove(); 94 this.element().remove();
97 }, 95 },
98 96
99 //------------------------------------------------------------------------- 97 //-------------------------------------------------------------------------
100 __syntaxFix__: "syntax fix" 98 __syntaxFix__: "syntax fix"
101}); 99});
102 100
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/AbstractFieldSubComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/AbstractFieldSubComponent.js
index ad733aa..ede42c2 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/AbstractFieldSubComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/AbstractFieldSubComponent.js
@@ -1,74 +1,72 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent.superclass.constructor.call(this, anElement, args);
37 35
38 this._fieldComponent = args.fieldComponent || null; 36 this._fieldComponent = args.fieldComponent || null;
39 37
40 this.render(); 38 this.render();
41 39
42 return this; 40 return this;
43} 41}
44 42
45//============================================================================= 43//=============================================================================
46 44
47YAHOO.extendX(Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, { 45YAHOO.extendX(Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, {
48 46
49 'toString': function() { 47 'toString': function() {
50 return "Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent"; 48 return "Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent";
51 }, 49 },
52 50
53 //------------------------------------------------------------------------- 51 //-------------------------------------------------------------------------
54 52
55 'fieldComponent': function() { 53 'fieldComponent': function() {
56 return this._fieldComponent; 54 return this._fieldComponent;
57 }, 55 },
58 56
59 //------------------------------------------------------------------------- 57 //-------------------------------------------------------------------------
60 58
61 'mainComponent': function() { 59 'mainComponent': function() {
62 return this.fieldComponent().mainComponent(); 60 return this.fieldComponent().mainComponent();
63 }, 61 },
64 62
65 //------------------------------------------------------------------------- 63 //-------------------------------------------------------------------------
66 64
67 'recordField': function() { 65 'recordField': function() {
68 return this.fieldComponent().recordField(); 66 return this.fieldComponent().recordField();
69 }, 67 },
70 68
71 //------------------------------------------------------------------------- 69 //-------------------------------------------------------------------------
72 __syntaxFix__: "syntax fix" 70 __syntaxFix__: "syntax fix"
73}); 71});
74 72
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/CreationWizard.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/CreationWizard.js
index d4c7837..c703db4 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/CreationWizard.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/CreationWizard.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.CreationWizard = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.CreationWizard = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.RecordDetail.CreationWizard.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.RecordDetail.CreationWizard.superclass.constructor.call(this, anElement, args);
37 35
38 this._mainComponent = args.mainComponent; 36 this._mainComponent = args.mainComponent;
39 this._previouslySelectedRecord = args.previouslySelectedRecord; 37 this._previouslySelectedRecord = args.previouslySelectedRecord;
40//MochiKit.Logging.logDebug("--- new CreationWizard - previouslySelectedRecord: " + args.previouslySelectedRecord); 38//MochiKit.Logging.logDebug("--- new CreationWizard - previouslySelectedRecord: " + args.previouslySelectedRecord);
41 this._createButton_header = null; 39 this._createButton_header = null;
42 this._createButton_footer = null; 40 this._createButton_footer = null;
43 41
44 this._cancelButton_header = null; 42 this._cancelButton_header = null;
45 this._cancelButton_footer = null; 43 this._cancelButton_footer = null;
46 44
47 this.render(); 45 this.render();
48 46
49 return this; 47 return this;
50} 48}
51 49
52//============================================================================= 50//=============================================================================
53 51
54YAHOO.extendX(Clipperz.PM.Components.RecordDetail.CreationWizard, Clipperz.PM.Components.BaseComponent, { 52YAHOO.extendX(Clipperz.PM.Components.RecordDetail.CreationWizard, Clipperz.PM.Components.BaseComponent, {
55 53
56 'toString': function() { 54 'toString': function() {
57 return "Clipperz.PM.Components.RecordDetail.CreationWizard component"; 55 return "Clipperz.PM.Components.RecordDetail.CreationWizard component";
58 }, 56 },
59 57
60 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
61 59
62 'previouslySelectedRecord': function() { 60 'previouslySelectedRecord': function() {
63 return this._previouslySelectedRecord; 61 return this._previouslySelectedRecord;
64 }, 62 },
65 63
66 //------------------------------------------------------------------------- 64 //-------------------------------------------------------------------------
67 65
68 'render': function() { 66 'render': function() {
69 vartemplateListElement; 67 vartemplateListElement;
70 vartemplates; 68 vartemplates;
71 69
72 this.element().update(""); 70 this.element().update("");
73 71
74 Clipperz.YUI.DomHelper.append(this.element().dom, 72 Clipperz.YUI.DomHelper.append(this.element().dom,
75 {tag:'form', cls:'recordDataFORM', id:this.getId('form'), children:[ 73 {tag:'form', cls:'recordDataFORM', id:this.getId('form'), children:[
76 {tag:'div', id:'recordDetailDataBox', cls:'recordDetailDataBox', children:[ 74 {tag:'div', id:'recordDetailDataBox', cls:'recordDetailDataBox', children:[
77 {tag:'div', id:this.getId('wizardBox'), cls:'recordCreationWizard', children:[ 75 {tag:'div', id:this.getId('wizardBox'), cls:'recordCreationWizard', children:[
78 {tag:'div', id:this.getId('recordCreationWizardTitleBox'), cls:'recordCreationWizardTitleBox', htmlString:Clipperz.PM.Strings['newRecordWizardTitleBox']}, 76 {tag:'div', id:this.getId('recordCreationWizardTitleBox'), cls:'recordCreationWizardTitleBox', htmlString:Clipperz.PM.Strings['newRecordWizardTitleBox']},
79 {tag:'ul', id:this.getId('templateList'), cls:'radioList'} 77 {tag:'ul', id:this.getId('templateList'), cls:'radioList'}
80 ]} 78 ]}
81 ]} 79 ]}
82 ]} 80 ]}
83 ); 81 );
84 82
85 Clipperz.YUI.DomHelper.append(this.getDom('recordCreationWizardTitleBox'), {tag:'div', cls:'newRecordWizardHeader', children:[ 83 Clipperz.YUI.DomHelper.append(this.getDom('recordCreationWizardTitleBox'), {tag:'div', cls:'newRecordWizardHeader', children:[
86 {tag:'table', width:'100%', cellpadding:'5', children:[ 84 {tag:'table', width:'100%', cellpadding:'5', children:[
87 {tag:'tbody', children:[ 85 {tag:'tbody', children:[
88 {tag:'tr', children:[ 86 {tag:'tr', children:[
89 {tag:'td', width:'49%', align:'right', children:[ 87 {tag:'td', width:'49%', align:'right', children:[
90 {tag:'div', id:this.getId('cancelButton_header')} 88 {tag:'div', id:this.getId('cancelButton_header')}
91 ]}, 89 ]},
92 {tag:'td', width:'10', html:'&nbsp;'}, 90 {tag:'td', width:'10', html:'&nbsp;'},
93 {tag:'td', width:'49%', align:'left', children:[ 91 {tag:'td', width:'49%', align:'left', children:[
94 {tag:'div', id:this.getId('createButton_header')} 92 {tag:'div', id:this.getId('createButton_header')}
95 ]} 93 ]}
96 ]} 94 ]}
97 ]} 95 ]}
98 ]} 96 ]}
99 ]}); 97 ]});
100 98
101 templateListElement = this.getElement('templateList'); 99 templateListElement = this.getElement('templateList');
102 templates = Clipperz.PM.Strings['recordTemplates']; 100 templates = Clipperz.PM.Strings['recordTemplates'];
103 MochiKit.Iter.forEach(MochiKit.Base.keys(templates), MochiKit.Base.bind(function(aTemplateKey) { 101 MochiKit.Iter.forEach(MochiKit.Base.keys(templates), MochiKit.Base.bind(function(aTemplateKey) {
104 Clipperz.YUI.DomHelper.append(templateListElement.dom, {tag:'li', children:[ 102 Clipperz.YUI.DomHelper.append(templateListElement.dom, {tag:'li', children:[
105 {tag:'table', children:[ 103 {tag:'table', children:[
106 {tag:'tbody', children:[ 104 {tag:'tbody', children:[
107 {tag:'tr', children:[ 105 {tag:'tr', children:[
108 {tag:'td', valign:'top', children:[ 106 {tag:'td', valign:'top', children:[
109 {tag:'input', id:this.getId(aTemplateKey+"_radio"), type:'radio', name:'recordTemplate', value:"aTemplateKey"} 107 {tag:'input', id:this.getId(aTemplateKey+"_radio"), type:'radio', name:'recordTemplate', value:"aTemplateKey"}
110 ]}, 108 ]},
111 {tag:'td', valign:'top', children:[ 109 {tag:'td', valign:'top', children:[
112 {tag:'h4', id:this.getId(aTemplateKey+"_title"), html:templates[aTemplateKey]['title']}, 110 {tag:'h4', id:this.getId(aTemplateKey+"_title"), html:templates[aTemplateKey]['title']},
113 {tag:'div', cls:'templateDescription', htmlString:templates[aTemplateKey]['description']} 111 {tag:'div', cls:'templateDescription', htmlString:templates[aTemplateKey]['description']}
114 ]} 112 ]}
115 ]} 113 ]}
116 ]} 114 ]}
117 ]} 115 ]}
118 ]}); 116 ]});
119 this.getElement(aTemplateKey+"_radio").dom.value = aTemplateKey; 117 this.getElement(aTemplateKey+"_radio").dom.value = aTemplateKey;
120 MochiKit.Signal.connect(this.getDom(aTemplateKey+"_title"), 'onclick', MochiKit.Base.partial(function(aRadioButton) {aRadioButton.click();}, this.getDom(aTemplateKey+"_radio"))); 118 MochiKit.Signal.connect(this.getDom(aTemplateKey+"_title"), 'onclick', MochiKit.Base.partial(function(aRadioButton) {aRadioButton.click();}, this.getDom(aTemplateKey+"_radio")));
121 }, this)); 119 }, this));
122 120
123 Clipperz.YUI.DomHelper.append(templateListElement.dom, {tag:'li', children:[ 121 Clipperz.YUI.DomHelper.append(templateListElement.dom, {tag:'li', children:[
124 {tag:'table', children:[ 122 {tag:'table', children:[
125 {tag:'tbody', children:[ 123 {tag:'tbody', children:[
126 {tag:'tr', children:[ 124 {tag:'tr', children:[
127 {tag:'td', valign:'top', children:[ 125 {tag:'td', valign:'top', children:[
128 {tag:'input', type:'radio', name:'recordTemplate', id:this.getId('bookmarkletRadioButton'), value:'BookmarkletConfigurationTemplate'} 126 {tag:'input', type:'radio', name:'recordTemplate', id:this.getId('bookmarkletRadioButton'), value:'BookmarkletConfigurationTemplate'}
129 ]}, 127 ]},
130 {tag:'td', valign:'top', children:[ 128 {tag:'td', valign:'top', children:[
131 {tag:'h4', htmlString:Clipperz.PM.Strings['newRecordWizardBookmarkletConfigurationTitle']}, 129 {tag:'h4', htmlString:Clipperz.PM.Strings['newRecordWizardBookmarkletConfigurationTitle']},
132 {tag:'div', cls:'templateDescription', htmlString:Clipperz.PM.Strings['newRecordWizardBookmarkletConfigurationDescription']}, 130 {tag:'div', cls:'templateDescription', htmlString:Clipperz.PM.Strings['newRecordWizardBookmarkletConfigurationDescription']},
133 {tag:'div', cls:'bookmarkletConfiguration', children:[ 131 {tag:'div', cls:'bookmarkletConfiguration', children:[
134 // {tag:'span', htmlString:Clipperz.PM.Strings['newRecordWizardBookmarkletConfigurationLabel']}, 132 // {tag:'span', htmlString:Clipperz.PM.Strings['newRecordWizardBookmarkletConfigurationLabel']},
135 {tag:'div', htmlString:Clipperz.PM.Strings['recordDetailNewDirectLoginDescription']}, 133 {tag:'div', htmlString:Clipperz.PM.Strings['recordDetailNewDirectLoginDescription']},
136 {tag:'textarea', id:this.getId('bookmarkletConfiguration')} 134 {tag:'textarea', id:this.getId('bookmarkletConfiguration')}
137 ]} 135 ]}
138 ]} 136 ]}
139 ]} 137 ]}
140 ]} 138 ]}
141 ]} 139 ]}
142 ]}); 140 ]});
143 141
144 Clipperz.YUI.DomHelper.append(this.getDom('wizardBox'), {tag:'div', cls:'newRecordWizardFooter', children:[ 142 Clipperz.YUI.DomHelper.append(this.getDom('wizardBox'), {tag:'div', cls:'newRecordWizardFooter', children:[
145 {tag:'table', width:'100%', cellpadding:'5', children:[ 143 {tag:'table', width:'100%', cellpadding:'5', children:[
146 {tag:'tbody', children:[ 144 {tag:'tbody', children:[
147 {tag:'tr', children:[ 145 {tag:'tr', children:[
148 {tag:'td', width:'49%', align:'right', children:[ 146 {tag:'td', width:'49%', align:'right', children:[
149 {tag:'div', id:this.getId('cancelButton_footer')} 147 {tag:'div', id:this.getId('cancelButton_footer')}
150 ]}, 148 ]},
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginBindingComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginBindingComponent.js
index 36dd9a8..0e4640e 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginBindingComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginBindingComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.DirectLoginBindingComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.DirectLoginBindingComponent = function(anElement, args) {
34//MochiKit.Logging.logDebug(">>> new DirectLoginBindingComponent"); 32//MochiKit.Logging.logDebug(">>> new DirectLoginBindingComponent");
35 args = args || {}; 33 args = args || {};
36 34
37 Clipperz.PM.Components.RecordDetail.DirectLoginBindingComponent.superclass.constructor.call(this, anElement, args); 35 Clipperz.PM.Components.RecordDetail.DirectLoginBindingComponent.superclass.constructor.call(this, anElement, args);
38 36
39 this._directLoginBinding = args.directLoginBinding || null; 37 this._directLoginBinding = args.directLoginBinding || null;
40 this.render(); 38 this.render();
41 39
42 Clipperz.NotificationCenter.register(this.record(), 'addNewRecordField',this, 'syncAndUpdateEditMode'); 40 Clipperz.NotificationCenter.register(this.record(), 'addNewRecordField',this, 'syncAndUpdateEditMode');
43 Clipperz.NotificationCenter.register(this.record(), 'removedField', this, 'syncAndUpdateEditMode'); 41 Clipperz.NotificationCenter.register(this.record(), 'removedField', this, 'syncAndUpdateEditMode');
44 Clipperz.NotificationCenter.register(this.record(), 'updatedFieldLabel',this, 'syncAndUpdateEditMode'); 42 Clipperz.NotificationCenter.register(this.record(), 'updatedFieldLabel',this, 'syncAndUpdateEditMode');
45//MochiKit.Logging.logDebug("<<< new DirectLoginBindingComponent"); 43//MochiKit.Logging.logDebug("<<< new DirectLoginBindingComponent");
46 44
47 return this; 45 return this;
48} 46}
49 47
50//============================================================================= 48//=============================================================================
51 49
52YAHOO.extendX(Clipperz.PM.Components.RecordDetail.DirectLoginBindingComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, { 50YAHOO.extendX(Clipperz.PM.Components.RecordDetail.DirectLoginBindingComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, {
53 51
54 'toString': function() { 52 'toString': function() {
55 return "Clipperz.PM.Components.RecordDetail.DirectLoginBindingComponent component"; 53 return "Clipperz.PM.Components.RecordDetail.DirectLoginBindingComponent component";
56 }, 54 },
57 55
58 //------------------------------------------------------------------------- 56 //-------------------------------------------------------------------------
59 57
60 'directLoginBinding': function() { 58 'directLoginBinding': function() {
61 return this._directLoginBinding; 59 return this._directLoginBinding;
62 }, 60 },
63 61
64 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
65 63
66 'render': function() { 64 'render': function() {
67 // Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', style:'font-weight:bold;', html:this.directLoginBinding().key()}) 65 // Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', style:'font-weight:bold;', html:this.directLoginBinding().key()})
68 // Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', html:this.directLoginBinding().value()}) 66 // Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', html:this.directLoginBinding().value()})
69//MochiKit.Logging.logDebug(">>> DirectLoginBindingComponent.render"); 67//MochiKit.Logging.logDebug(">>> DirectLoginBindingComponent.render");
70 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', cls:'directLoginBindingLabelTD', children:[ 68 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', cls:'directLoginBindingLabelTD', children:[
71 {tag:'span', html:this.directLoginBinding().key()} 69 {tag:'span', html:this.directLoginBinding().key()}
72 ]}); 70 ]});
73//MochiKit.Logging.logDebug("--- DirectLoginBindingComponent.render - 1"); 71//MochiKit.Logging.logDebug("--- DirectLoginBindingComponent.render - 1");
74 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', cls:'directLoginBindingValueTD', children:[ 72 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', cls:'directLoginBindingValueTD', children:[
75 {tag:'div', id:this.getId('editModeBox'), children:[ 73 {tag:'div', id:this.getId('editModeBox'), children:[
76 {tag:'select', id:this.getId('select'), children:this.recordFieldOptions()} 74 {tag:'select', id:this.getId('select'), children:this.recordFieldOptions()}
77 ]}, 75 ]},
78 {tag:'div', id:this.getId('viewModeBox'), children:[ 76 {tag:'div', id:this.getId('viewModeBox'), children:[
79 {tag:'span', id:this.getId('viewValue'), html:""} 77 {tag:'span', id:this.getId('viewValue'), html:""}
80 ]} 78 ]}
81 ]}); 79 ]});
82//MochiKit.Logging.logDebug("--- DirectLoginBindingComponent.render - 2"); 80//MochiKit.Logging.logDebug("--- DirectLoginBindingComponent.render - 2");
83 this.getElement('editModeBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY); 81 this.getElement('editModeBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
84 this.getElement('viewModeBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY); 82 this.getElement('viewModeBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
85 83
86 this.update(); 84 this.update();
87//MochiKit.Logging.logDebug("<<< DirectLoginBindingComponent.render"); 85//MochiKit.Logging.logDebug("<<< DirectLoginBindingComponent.render");
88 }, 86 },
89 87
90 //------------------------------------------------------------------------- 88 //-------------------------------------------------------------------------
91 89
92 'recordFieldOptions': function() { 90 'recordFieldOptions': function() {
93 varresult; 91 varresult;
94 var option; 92 var option;
95 varrecordFieldKey; 93 varrecordFieldKey;
96 varrecordFields; 94 varrecordFields;
97 95
98//MochiKit.Logging.logDebug(">>> DirectLoginBindingComponent.recordFieldOptions"); 96//MochiKit.Logging.logDebug(">>> DirectLoginBindingComponent.recordFieldOptions");
99 recordFields = this.directLoginBinding().directLogin().record().currentVersion().fields(); 97 recordFields = this.directLoginBinding().directLogin().record().currentVersion().fields();
100 result = []; 98 result = [];
101 option = {tag:'option', value:null, html:'---'}; 99 option = {tag:'option', value:null, html:'---'};
102 result.push(option); 100 result.push(option);
103 for (recordFieldKey in recordFields) { 101 for (recordFieldKey in recordFields) {
104 //TODO: remove the value: field and replace it with element.dom.value = <some value> 102 //TODO: remove the value: field and replace it with element.dom.value = <some value>
105 option = {tag:'option', value:recordFieldKey, html:recordFields[recordFieldKey].label()} 103 option = {tag:'option', value:recordFieldKey, html:recordFields[recordFieldKey].label()}
106 if (recordFieldKey == this.directLoginBinding().fieldKey()) { 104 if (recordFieldKey == this.directLoginBinding().fieldKey()) {
107 option['selected'] = true; 105 option['selected'] = true;
108 } 106 }
109 result.push(option); 107 result.push(option);
110 } 108 }
111//MochiKit.Logging.logDebug("<<< DirectLoginBindingComponent.recordFieldOptions"); 109//MochiKit.Logging.logDebug("<<< DirectLoginBindingComponent.recordFieldOptions");
112 110
113 return result; 111 return result;
114 }, 112 },
115 113
116 //------------------------------------------------------------------------- 114 //-------------------------------------------------------------------------
117 115
118 'syncAndUpdateEditMode': function() { 116 'syncAndUpdateEditMode': function() {
119 this.synchronizeComponentValues(); 117 this.synchronizeComponentValues();
120 this.updateEditMode(); 118 this.updateEditMode();
121 }, 119 },
122 120
123 'updateEditMode': function() { 121 'updateEditMode': function() {
124 varselectElementBox; 122 varselectElementBox;
125 123
126//MochiKit.Logging.logDebug(">>> DirectLoginBindingComponent.updateEditMode"); 124//MochiKit.Logging.logDebug(">>> DirectLoginBindingComponent.updateEditMode");
127 this.getElement('viewModeBox').hide(); 125 this.getElement('viewModeBox').hide();
128 126
129 selectElementBox = this.getElement('editModeBox'); 127 selectElementBox = this.getElement('editModeBox');
130 selectElementBox.update(""); 128 selectElementBox.update("");
131 129
132 Clipperz.YUI.DomHelper.append(selectElementBox.dom, {tag:'select', id:this.getId('select'), children:this.recordFieldOptions()}); 130 Clipperz.YUI.DomHelper.append(selectElementBox.dom, {tag:'select', id:this.getId('select'), children:this.recordFieldOptions()});
133 131
134/* 132/*
135 selectElement = this.getElement('select'); 133 selectElement = this.getElement('select');
136 134
137 selectElement.update(""); 135 selectElement.update("");
138 MochiKit.Iter.forEach(this.recordFieldOptions(), function(anOption) { 136 MochiKit.Iter.forEach(this.recordFieldOptions(), function(anOption) {
139 Clipperz.YUI.DomHelper.append(selectElement.dom, anOption); 137 Clipperz.YUI.DomHelper.append(selectElement.dom, anOption);
140 }); 138 });
141*/ 139*/
142 140
143 141
144 this.getElement('editModeBox').show(); 142 this.getElement('editModeBox').show();
145//MochiKit.Logging.logDebug("<<< DirectLoginBindingComponent.updateEditMode"); 143//MochiKit.Logging.logDebug("<<< DirectLoginBindingComponent.updateEditMode");
146 }, 144 },
147 145
148 //------------------------------------------------------------------------- 146 //-------------------------------------------------------------------------
149 147
150 'updateViewMode': function() { 148 'updateViewMode': function() {
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginComponent.js
index 69cad79..883c45c 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.DirectLoginComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.DirectLoginComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.RecordDetail.DirectLoginComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.RecordDetail.DirectLoginComponent.superclass.constructor.call(this, anElement, args);
37 35
38 this._directLogin = args.directLogin || null; 36 this._directLogin = args.directLogin || null;
39 //this._titleElement = null; 37 //this._titleElement = null;
40 this._structureElement = null; 38 this._structureElement = null;
41 this._removeButton = null; 39 this._removeButton = null;
42 this._directLoginBindingComponents = null; 40 this._directLoginBindingComponents = null;
43 this._collapser = null; 41 this._collapser = null;
44 42
45 this.mainComponent().addEditComponent(this); 43 this.mainComponent().addEditComponent(this);
46 this.render(); 44 this.render();
47 45
48 return this; 46 return this;
49} 47}
50 48
51//============================================================================= 49//=============================================================================
52 50
53YAHOO.extendX(Clipperz.PM.Components.RecordDetail.DirectLoginComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, { 51YAHOO.extendX(Clipperz.PM.Components.RecordDetail.DirectLoginComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, {
54 52
55 'toString': function() { 53 'toString': function() {
56 return "Clipperz.PM.Components.RecordDetail.DirectLoginComponent component"; 54 return "Clipperz.PM.Components.RecordDetail.DirectLoginComponent component";
57 }, 55 },
58 56
59 //------------------------------------------------------------------------- 57 //-------------------------------------------------------------------------
60 58
61 'directLogin': function() { 59 'directLogin': function() {
62 return this._directLogin; 60 return this._directLogin;
63 }, 61 },
64 62
65 'directLoginBindingComponents': function() { 63 'directLoginBindingComponents': function() {
66 return this._directLoginBindingComponents; 64 return this._directLoginBindingComponents;
67 }, 65 },
68 66
69 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
70 68
71 'removeDirectLogin': function() { 69 'removeDirectLogin': function() {
72//MochiKit.Logging.logDebug(">>> DirectLoginComponent.removeDirectLogin"); 70//MochiKit.Logging.logDebug(">>> DirectLoginComponent.removeDirectLogin");
73 this.mainComponent().synchronizeComponentValues(); 71 this.mainComponent().synchronizeComponentValues();
74 this.directLogin().remove(); 72 this.directLogin().remove();
75 this.mainComponent().removeEditComponent(this); 73 this.mainComponent().removeEditComponent(this);
76 this.mainComponent().render(); 74 this.mainComponent().render();
77//MochiKit.Logging.logDebug("<<< DirectLoginComponent.removeDirectLogin"); 75//MochiKit.Logging.logDebug("<<< DirectLoginComponent.removeDirectLogin");
78 }, 76 },
79 77
80 //------------------------------------------------------------------------- 78 //-------------------------------------------------------------------------
81/* 79/*
82 'formDataValue': function() { 80 'formDataValue': function() {
83 return Clipperz.Base.serializeJSON(this.directLogin().formData()); 81 return Clipperz.Base.serializeJSON(this.directLogin().formData());
84 }, 82 },
85 83
86 'setFormDataValue': function(aValue) { 84 'setFormDataValue': function(aValue) {
87 85
88 }, 86 },
89 */ 87 */
90 //------------------------------------------------------------------------- 88 //-------------------------------------------------------------------------
91 89
92 'removeButton': function() { 90 'removeButton': function() {
93 return this._removeButton; 91 return this._removeButton;
94 }, 92 },
95 93
96 'setRemoveButton': function(aValue) { 94 'setRemoveButton': function(aValue) {
97 this._removeButton = aValue; 95 this._removeButton = aValue;
98 }, 96 },
99 97
100 //------------------------------------------------------------------------- 98 //-------------------------------------------------------------------------
101/* 99/*
102 'titleElement': function() { 100 'titleElement': function() {
103 return this._titleElement; 101 return this._titleElement;
104 }, 102 },
105 103
106 'setTitleElement': function(aValue) { 104 'setTitleElement': function(aValue) {
107 this._titleElement = aValue; 105 this._titleElement = aValue;
108 }, 106 },
109 */ 107 */
110 //------------------------------------------------------------------------- 108 //-------------------------------------------------------------------------
111 109
112 'structureElement': function() { 110 'structureElement': function() {
113 return this._structureElement; 111 return this._structureElement;
114 }, 112 },
115 113
116 'setStructureElement': function(aValue) { 114 'setStructureElement': function(aValue) {
117 this._structureElement = aValue; 115 this._structureElement = aValue;
118 }, 116 },
119 117
120 //------------------------------------------------------------------------- 118 //-------------------------------------------------------------------------
121 119
122 'render': function() { 120 'render': function() {
123//MochiKit.Logging.logDebug(">>> DirectLoginComponent.render"); 121//MochiKit.Logging.logDebug(">>> DirectLoginComponent.render");
124 try { 122 try {
125 this.element().update(""); 123 this.element().update("");
126 Clipperz.YUI.DomHelper.append(this.element().dom, 124 Clipperz.YUI.DomHelper.append(this.element().dom,
127 {tag:'li', children:[ 125 {tag:'li', children:[
128 {tag:'table', width:'100%', border:'0', cellpadding:'0', cellspacing:'0', children:[ 126 {tag:'table', width:'100%', border:'0', cellpadding:'0', cellspacing:'0', children:[
129 {tag:'tbody', children:[ 127 {tag:'tbody', children:[
130 {tag:'tr', children:[ 128 {tag:'tr', children:[
131 {tag:'td', rowspan:'2', width:'30', valign:'top', html:'&#160', children:[ 129 {tag:'td', rowspan:'2', width:'30', valign:'top', html:'&#160', children:[
132 {tag:'div', id:this.getId('removeDirectLogin'), children:[ 130 {tag:'div', id:this.getId('removeDirectLogin'), children:[
133 {tag:'div', id:this.getId('removeDirectLoginButton')} 131 {tag:'div', id:this.getId('removeDirectLoginButton')}
134 ]}, 132 ]},
135 {tag:'div', id:this.getId('collapseLink'), cls:'directLoginCollapseLink'} 133 {tag:'div', id:this.getId('collapseLink'), cls:'directLoginCollapseLink'}
136 ]}, 134 ]},
137 {tag:'td', valign:'top', children:[ 135 {tag:'td', valign:'top', children:[
138 {tag:'table', width:'100%', border:'0', cellpadding:'0', cellspacing:'0', children:[ 136 {tag:'table', width:'100%', border:'0', cellpadding:'0', cellspacing:'0', children:[
139 {tag:'tbody', children:[ 137 {tag:'tbody', children:[
140 {tag:'tr', children:[ 138 {tag:'tr', children:[
141 {tag:'td', width:'20', valign:'top', children:[ 139 {tag:'td', width:'20', valign:'top', children:[
142 {tag:'a', href:'#', id:this.getId('directLogin'), children:[ 140 {tag:'a', href:'#', id:this.getId('directLogin'), children:[
143 {tag:'img', id:this.getId('faviconImage'), width:'16', height:'16', src:this.directLogin().fixedFavicon()} 141 {tag:'img', id:this.getId('faviconImage'), width:'16', height:'16', src:this.directLogin().fixedFavicon()}
144 ]} 142 ]}
145 ]}, 143 ]},
146 {tag:'td', valign:'top', children:[ 144 {tag:'td', valign:'top', children:[
147 {tag:'div', cls:'directLoginDetailTitle', children:[ 145 {tag:'div', cls:'directLoginDetailTitle', children:[
148 {tag:'div', id:this.getId('titleViewBox'), children:[ 146 {tag:'div', id:this.getId('titleViewBox'), children:[
149 {tag:'a', href:'#', id:this.getId('titleLink')} 147 {tag:'a', href:'#', id:this.getId('titleLink')}
150 ]}, 148 ]},
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginValueComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginValueComponent.js
index d210100..b478d94 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginValueComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginValueComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.DirectLoginValueComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.DirectLoginValueComponent = function(anElement, args) {
34//MochiKit.Logging.logDebug(">>> new DirectLoginValueComponent"); 32//MochiKit.Logging.logDebug(">>> new DirectLoginValueComponent");
35 args = args || {}; 33 args = args || {};
36 34
37 Clipperz.PM.Components.RecordDetail.DirectLoginValueComponent.superclass.constructor.call(this, anElement, args); 35 Clipperz.PM.Components.RecordDetail.DirectLoginValueComponent.superclass.constructor.call(this, anElement, args);
38 36
39 this._directLoginInputValue = args.directLoginInputValue || null; 37 this._directLoginInputValue = args.directLoginInputValue || null;
40 this._value = this.directLoginInputValue().directLogin().formValues()[this.directLoginInputValue().name()]; 38 this._value = this.directLoginInputValue().directLogin().formValues()[this.directLoginInputValue().name()];
41 39
42 this.render(); 40 this.render();
43//MochiKit.Logging.logDebug("<<< new DirectLoginValueComponent - record: " + this.record()); 41//MochiKit.Logging.logDebug("<<< new DirectLoginValueComponent - record: " + this.record());
44 42
45 return this; 43 return this;
46} 44}
47 45
48//============================================================================= 46//=============================================================================
49 47
50YAHOO.extendX(Clipperz.PM.Components.RecordDetail.DirectLoginValueComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, { 48YAHOO.extendX(Clipperz.PM.Components.RecordDetail.DirectLoginValueComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, {
51 49
52 'toString': function() { 50 'toString': function() {
53 return "Clipperz.PM.Components.RecordDetail.DirectLoginValueComponent component - " + this.directLoginInputValue().name(); 51 return "Clipperz.PM.Components.RecordDetail.DirectLoginValueComponent component - " + this.directLoginInputValue().name();
54 }, 52 },
55 53
56 //------------------------------------------------------------------------- 54 //-------------------------------------------------------------------------
57 55
58 'directLoginInputValue': function() { 56 'directLoginInputValue': function() {
59 return this._directLoginInputValue; 57 return this._directLoginInputValue;
60 }, 58 },
61 59
62 //------------------------------------------------------------------------- 60 //-------------------------------------------------------------------------
63 61
64 'render': function() { 62 'render': function() {
65//MochiKit.Logging.logDebug(">>> DirectLoginValueComponent.render"); 63//MochiKit.Logging.logDebug(">>> DirectLoginValueComponent.render");
66 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', cls:'directLoginDataLabelTD', children:[ 64 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', cls:'directLoginDataLabelTD', children:[
67 {tag:'span', html:this.directLoginInputValue().name()} 65 {tag:'span', html:this.directLoginInputValue().name()}
68 ]}); 66 ]});
69//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.render - 1"); 67//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.render - 1");
70 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', cls:'directLoginDataValueTD', children:[ 68 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', cls:'directLoginDataValueTD', children:[
71 {tag:'span', id:this.getId('inputElement')} 69 {tag:'span', id:this.getId('inputElement')}
72 ]}); 70 ]});
73//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.render - 2"); 71//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.render - 2");
74 this.update(); 72 this.update();
75//MochiKit.Logging.logDebug("<<< DirectLoginValueComponent.render"); 73//MochiKit.Logging.logDebug("<<< DirectLoginValueComponent.render");
76 }, 74 },
77 75
78 //------------------------------------------------------------------------- 76 //-------------------------------------------------------------------------
79 77
80 'inputElementConfiguration': function() { 78 'inputElementConfiguration': function() {
81 var result; 79 var result;
82 var currentValue; 80 var currentValue;
83 81
84//MochiKit.Logging.logDebug(">>> DirectLoginValueComponent.inputElementConfiguration - " + this.directLoginInputValue().name()); 82//MochiKit.Logging.logDebug(">>> DirectLoginValueComponent.inputElementConfiguration - " + this.directLoginInputValue().name());
85 result = []; 83 result = [];
86 currentValue = this.value(); 84 currentValue = this.value();
87 85
88 switch (this.directLoginInputValue().type()) { 86 switch (this.directLoginInputValue().type()) {
89 case 'checkbox': 87 case 'checkbox':
90 var checkbox; 88 var checkbox;
91//{"type":"checkbox", "name":"rememberUsernameChk", "value":"checkbox"} 89//{"type":"checkbox", "name":"rememberUsernameChk", "value":"checkbox"}
92 checkbox = {tag:'input', id:this.getId('checkbox'), type:'checkbox'} 90 checkbox = {tag:'input', id:this.getId('checkbox'), type:'checkbox'}
93 if (currentValue == true) { 91 if (currentValue == true) {
94 checkbox.checked = true; 92 checkbox.checked = true;
95 } 93 }
96 result.push(checkbox); 94 result.push(checkbox);
97 break; 95 break;
98 96
99 case 'select': 97 case 'select':
100 var input; 98 var input;
101//{"type":"select", "name":"DOMAIN", "options":[{"selected":true, "label":"@tin.it", "value":"tin.it"}, {"selected":false, "label":"@virgilio.it", "value":"virgilio.it"}]} 99//{"type":"select", "name":"DOMAIN", "options":[{"selected":true, "label":"@tin.it", "value":"tin.it"}, {"selected":false, "label":"@virgilio.it", "value":"virgilio.it"}]}
102 input = {tag:'select', id:this.getId('select'), name:this.directLoginInputValue().name(), children:[]}; 100 input = {tag:'select', id:this.getId('select'), name:this.directLoginInputValue().name(), children:[]};
103 input.children.push({tag:'option', value:null, html:"---"}); 101 input.children.push({tag:'option', value:null, html:"---"});
104 MochiKit.Iter.forEach(this.directLoginInputValue().args()['options'], function(anOption) { 102 MochiKit.Iter.forEach(this.directLoginInputValue().args()['options'], function(anOption) {
105 var option; 103 var option;
106 104
107 //TODO: remove the value: field and replace it with element.dom.value = <some value> 105 //TODO: remove the value: field and replace it with element.dom.value = <some value>
108 option = {tag:'option', value:anOption['value'], html:anOption['label']} 106 option = {tag:'option', value:anOption['value'], html:anOption['label']}
109 if (currentValue == anOption['value']) { 107 if (currentValue == anOption['value']) {
110 option.selected = true; 108 option.selected = true;
111 } 109 }
112 input.children.push(option); 110 input.children.push(option);
113 }) 111 })
114 result.push(input); 112 result.push(input);
115 break; 113 break;
116 114
117 case 'radio': 115 case 'radio':
118 var name; 116 var name;
119 var radioBox; 117 var radioBox;
120 118
121//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3"); 119//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3");
122 name = this.getId(this.directLoginInputValue().name()); 120 name = this.getId(this.directLoginInputValue().name());
123 radioBox = {tag:'div', id:this.getId('radioBox'), children:[]}; 121 radioBox = {tag:'div', id:this.getId('radioBox'), children:[]};
124 result.push(radioBox); 122 result.push(radioBox);
125//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1 - options.length: " + this.directLoginInputValue().args()['options'].length); 123//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1 - options.length: " + this.directLoginInputValue().args()['options'].length);
126//{"name":"dominio", "type":"radio", "options":[{"value":"@alice.it", "checked":true}, {"value":"@tin.it", "checked":false}, {"value":"@virgilio.it", "checked":false}, {"value":"@tim.it", "checked":false}]} 124//{"name":"dominio", "type":"radio", "options":[{"value":"@alice.it", "checked":true}, {"value":"@tin.it", "checked":false}, {"value":"@virgilio.it", "checked":false}, {"value":"@tim.it", "checked":false}]}
127 125
128 MochiKit.Iter.forEach(this.directLoginInputValue().args()['options'], function(anOption) { 126 MochiKit.Iter.forEach(this.directLoginInputValue().args()['options'], function(anOption) {
129 varradio; 127 varradio;
130 128
131//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1.1"); 129//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1.1");
132 //TODO: remove the value: field and replace it with element.dom.value = <some value> 130 //TODO: remove the value: field and replace it with element.dom.value = <some value>
133 radio = {tag:'input', type:'radio', name:name, value:anOption['value']}; 131 radio = {tag:'input', type:'radio', name:name, value:anOption['value']};
134//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1.2"); 132//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1.2");
135 if (currentValue == anOption['value']) { 133 if (currentValue == anOption['value']) {
136//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1.3"); 134//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1.3");
137 radio.checked = true; 135 radio.checked = true;
138//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1.4"); 136//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1.4");
139 } 137 }
140//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1.5"); 138//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1.5");
141 radioBox.children.push({tag:'div', children:[ radio, {tag:'span', html:anOption['value']} ]}) 139 radioBox.children.push({tag:'div', children:[ radio, {tag:'span', html:anOption['value']} ]})
142//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1.6"); 140//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.1.6");
143 }) 141 })
144//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.2"); 142//MochiKit.Logging.logDebug("--- DirectLoginValueComponent.inputElementConfiguration - 3.2");
145 break; 143 break;
146 } 144 }
147//MochiKit.Logging.logDebug("<<< DirectLoginValueComponent.inputElementConfiguration"); 145//MochiKit.Logging.logDebug("<<< DirectLoginValueComponent.inputElementConfiguration");
148 146
149 return result; 147 return result;
150 }, 148 },
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginsComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginsComponent.js
index 1396bd8..878adce 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginsComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/DirectLoginsComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.DirectLoginsComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.DirectLoginsComponent = function(anElement, args) {
34//MochiKit.Logging.logDebug(">>> new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent"); 32//MochiKit.Logging.logDebug(">>> new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent");
35 args = args || {}; 33 args = args || {};
36 34
37//MochiKit.Logging.logDebug("--- new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent - 0"); 35//MochiKit.Logging.logDebug("--- new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent - 0");
38 Clipperz.PM.Components.RecordDetail.DirectLoginsComponent.superclass.constructor.call(this, anElement, args); 36 Clipperz.PM.Components.RecordDetail.DirectLoginsComponent.superclass.constructor.call(this, anElement, args);
39//MochiKit.Logging.logDebug("--- new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent - 1"); 37//MochiKit.Logging.logDebug("--- new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent - 1");
40 38
41 this._addDirectLoginButton = null; 39 this._addDirectLoginButton = null;
42 40
43//MochiKit.Logging.logDebug("--- new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent - 2"); 41//MochiKit.Logging.logDebug("--- new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent - 2");
44 this.mainComponent().addEditComponent(this); 42 this.mainComponent().addEditComponent(this);
45//MochiKit.Logging.logDebug("--- new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent - 3"); 43//MochiKit.Logging.logDebug("--- new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent - 3");
46 this.render(); 44 this.render();
47//MochiKit.Logging.logDebug("<<< new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent"); 45//MochiKit.Logging.logDebug("<<< new Clipperz.PM.Components.RecordDetail.DirectLoginsComponent");
48 46
49 return this; 47 return this;
50} 48}
51 49
52//============================================================================= 50//=============================================================================
53 51
54YAHOO.extendX(Clipperz.PM.Components.RecordDetail.DirectLoginsComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, { 52YAHOO.extendX(Clipperz.PM.Components.RecordDetail.DirectLoginsComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, {
55 53
56 'toString': function() { 54 'toString': function() {
57 return "Clipperz.PM.Components.RecordDetail.DirectLoginsComponent component"; 55 return "Clipperz.PM.Components.RecordDetail.DirectLoginsComponent component";
58 }, 56 },
59 57
60 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
61 59
62 'addDirectLoginButton': function() { 60 'addDirectLoginButton': function() {
63 return this._addDirectLoginButton; 61 return this._addDirectLoginButton;
64 }, 62 },
65 63
66 'setAddDirectLoginButton': function(aValue) { 64 'setAddDirectLoginButton': function(aValue) {
67 this._addDirectLoginButton = aValue; 65 this._addDirectLoginButton = aValue;
68 }, 66 },
69 67
70 //------------------------------------------------------------------------- 68 //-------------------------------------------------------------------------
71 69
72 'render': function() { 70 'render': function() {
73 this.element().update(""); 71 this.element().update("");
74 72
75 Clipperz.YUI.DomHelper.append(this.element().dom, 73 Clipperz.YUI.DomHelper.append(this.element().dom,
76 {tag:'div', cls:'directLoginsRecordBox', children:[ 74 {tag:'div', cls:'directLoginsRecordBox', children:[
77 {tag:'h3', htmlString:Clipperz.PM.Strings['recordDetailDirectLoginBlockTitle']}, 75 {tag:'h3', htmlString:Clipperz.PM.Strings['recordDetailDirectLoginBlockTitle']},
78 {tag:'ul', id:this.getId('directLogins')}, 76 {tag:'ul', id:this.getId('directLogins')},
79 77
80 {tag:'div', cls:'addDirectLoginBox', id:this.getId('addDirectLogin'), children:[ 78 {tag:'div', cls:'addDirectLoginBox', id:this.getId('addDirectLogin'), children:[
81 {tag:'div', cls:'addDirectLoginBoxContent', children:[ 79 {tag:'div', cls:'addDirectLoginBoxContent', children:[
82 {tag:'div', cls:'bookmarkletConfiguration', children:[ 80 {tag:'div', cls:'bookmarkletConfiguration', children:[
83 // {tag:'span', htmlString:Clipperz.PM.Strings['newRecordWizardBookmarkletConfigurationLabel']}, 81 // {tag:'span', htmlString:Clipperz.PM.Strings['newRecordWizardBookmarkletConfigurationLabel']},
84 {tag:'div', htmlString:Clipperz.PM.Strings['recordDetailNewDirectLoginDescription']}, 82 {tag:'div', htmlString:Clipperz.PM.Strings['recordDetailNewDirectLoginDescription']},
85 {tag:'textarea', id:this.getId('addDirectLoginTextarea')} 83 {tag:'textarea', id:this.getId('addDirectLoginTextarea')}
86 ]}, 84 ]},
87 {tag:'div', id:this.getId('addDirectLoginButton')} 85 {tag:'div', id:this.getId('addDirectLoginButton')}
88 ]} 86 ]}
89 ]} 87 ]}
90 ]} 88 ]}
91 ); 89 );
92 90
93 if (MochiKit.Base.keys(this.record().directLogins()).length == 0) { 91 if (MochiKit.Base.keys(this.record().directLogins()).length == 0) {
94//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 3"); 92//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 3");
95 Clipperz.YUI.DomHelper.append(this.getElement('directLogins'), 93 Clipperz.YUI.DomHelper.append(this.getElement('directLogins'),
96 {tag:'li', children:[ 94 {tag:'li', children:[
97 // {tag:'span', htmlString:Clipperz.PM.Strings['recordDetailDirectLoginBlockNoDirectLoginConfiguredLabel']} 95 // {tag:'span', htmlString:Clipperz.PM.Strings['recordDetailDirectLoginBlockNoDirectLoginConfiguredLabel']}
98 {tag:'div', cls:'recordDetailNoDirectLoginDescriptionBox', htmlString:Clipperz.PM.Strings['recordDetailDirectLoginBlockNoDirectLoginConfiguredDescription']} 96 {tag:'div', cls:'recordDetailNoDirectLoginDescriptionBox', htmlString:Clipperz.PM.Strings['recordDetailDirectLoginBlockNoDirectLoginConfiguredDescription']}
99 ]} 97 ]}
100 ); 98 );
101//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 4"); 99//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 4");
102 } else { 100 } else {
103//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 5"); 101//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 5");
104 for (directLoginReference in this.record().directLogins()) { 102 for (directLoginReference in this.record().directLogins()) {
105//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 6"); 103//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 6");
106 this.addDirectLogin(this.record().directLogins()[directLoginReference]); 104 this.addDirectLogin(this.record().directLogins()[directLoginReference]);
107//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 7"); 105//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 7");
108 } 106 }
109//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 8"); 107//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 8");
110 } 108 }
111//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 9"); 109//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 9");
112 110
113 this.setAddDirectLoginButton(new YAHOO.ext.Button(this.getDom('addDirectLoginButton'), { 111 this.setAddDirectLoginButton(new YAHOO.ext.Button(this.getDom('addDirectLoginButton'), {
114 text:Clipperz.PM.Strings['recordDetailAddNewDirectLoginButtonLabel'], 112 text:Clipperz.PM.Strings['recordDetailAddNewDirectLoginButtonLabel'],
115 handler:this.addNewDirectLogin, 113 handler:this.addNewDirectLogin,
116 scope:this 114 scope:this
117 })); 115 }));
118 MochiKit.Signal.connect(this.getId('addDirectLoginTextarea'), 'onkeydown', this, 'onkeydown'); 116 MochiKit.Signal.connect(this.getId('addDirectLoginTextarea'), 'onkeydown', this, 'onkeydown');
119//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 11"); 117//MochiKit.Logging.logDebug("--- DirectLoginsComponent.render - 11");
120 118
121 this.update(); 119 this.update();
122//MochiKit.Logging.logDebug("<<< DirectLoginsComponent.render"); 120//MochiKit.Logging.logDebug("<<< DirectLoginsComponent.render");
123 }, 121 },
124 122
125 //------------------------------------------------------------------------- 123 //-------------------------------------------------------------------------
126 124
127 'addDirectLogin': function(aDirectLogin) { 125 'addDirectLogin': function(aDirectLogin) {
128//MochiKit.Logging.logDebug(">>> DirectLoginsComponent.addDirectLogin"); 126//MochiKit.Logging.logDebug(">>> DirectLoginsComponent.addDirectLogin");
129 new Clipperz.PM.Components.RecordDetail.DirectLoginComponent( 127 new Clipperz.PM.Components.RecordDetail.DirectLoginComponent(
130 Clipperz.YUI.DomHelper.append(this.getDom('directLogins'), {tag:'div'}, true), 128 Clipperz.YUI.DomHelper.append(this.getDom('directLogins'), {tag:'div'}, true),
131 { 129 {
132 mainComponent:this.mainComponent(), 130 mainComponent:this.mainComponent(),
133 directLogin:aDirectLogin 131 directLogin:aDirectLogin
134 } 132 }
135 ); 133 );
136//MochiKit.Logging.logDebug("<<< DirectLoginsComponent.addDirectLogin"); 134//MochiKit.Logging.logDebug("<<< DirectLoginsComponent.addDirectLogin");
137 }, 135 },
138 136
139 //------------------------------------------------------------------------- 137 //-------------------------------------------------------------------------
140 138
141 'addNewDirectLogin': function() { 139 'addNewDirectLogin': function() {
142 varnewDirectLogin; 140 varnewDirectLogin;
143 varconfiguration; 141 varconfiguration;
144 142
145//MochiKit.Logging.logDebug(">>> DirectLoginsComponent.addNewDirectLogin"); 143//MochiKit.Logging.logDebug(">>> DirectLoginsComponent.addNewDirectLogin");
146 if (MochiKit.Base.keys(this.record().directLogins()).length == 0) { 144 if (MochiKit.Base.keys(this.record().directLogins()).length == 0) {
147 this.getElement('directLogins').update(""); 145 this.getElement('directLogins').update("");
148 } 146 }
149 147
150 this.mainComponent().synchronizeComponentValues(); 148 this.mainComponent().synchronizeComponentValues();
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldButtonComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldButtonComponent.js
index b79c365..661f94d 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldButtonComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldButtonComponent.js
@@ -1,114 +1,112 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.FieldButtonComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.FieldButtonComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.RecordDetail.FieldButtonComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.RecordDetail.FieldButtonComponent.superclass.constructor.call(this, anElement, args);
37 35
38 this._button = null; 36 this._button = null;
39 37
40 this.render(); 38 this.render();
41 39
42 return this; 40 return this;
43} 41}
44 42
45//============================================================================= 43//=============================================================================
46 44
47YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldButtonComponent, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, { 45YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldButtonComponent, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, {
48 46
49 'toString': function() { 47 'toString': function() {
50 return "Clipperz.PM.Components.RecordDetail.FieldButtonComponent"; 48 return "Clipperz.PM.Components.RecordDetail.FieldButtonComponent";
51 }, 49 },
52 50
53 //------------------------------------------------------------------------- 51 //-------------------------------------------------------------------------
54 52
55 'buttonText': function() { 53 'buttonText': function() {
56 varresult; 54 varresult;
57 55
58 if (this.recordField() == null) { 56 if (this.recordField() == null) {
59 //TODO: this is never used. It is just an obsolete legacy chunk of code 57 //TODO: this is never used. It is just an obsolete legacy chunk of code
60 result = Clipperz.PM.Strings['recordDetailAddFieldButtonLabel']; 58 result = Clipperz.PM.Strings['recordDetailAddFieldButtonLabel'];
61 } else { 59 } else {
62 result = Clipperz.PM.Strings['recordDetailRemoveFieldButtonLabel']; 60 result = Clipperz.PM.Strings['recordDetailRemoveFieldButtonLabel'];
63 } 61 }
64 62
65 return result; 63 return result;
66 }, 64 },
67 65
68 //------------------------------------------------------------------------- 66 //-------------------------------------------------------------------------
69 67
70 'button': function() { 68 'button': function() {
71 return this._button; 69 return this._button;
72 }, 70 },
73 71
74 'setButton': function(aValue) { 72 'setButton': function(aValue) {
75 this._button = aValue; 73 this._button = aValue;
76 }, 74 },
77 75
78 //------------------------------------------------------------------------- 76 //-------------------------------------------------------------------------
79 77
80 'render': function() { 78 'render': function() {
81 this.element().update(""); 79 this.element().update("");
82 80
83 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', id:this.getId('button')}) 81 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', id:this.getId('button')})
84 this.setButton(new YAHOO.ext.Button(this.getDom('button'), {text:this.buttonText(), handler:this.handleButtonClick, scope:this})); 82 this.setButton(new YAHOO.ext.Button(this.getDom('button'), {text:this.buttonText(), handler:this.handleButtonClick, scope:this}));
85 83
86 this.update(); 84 this.update();
87 }, 85 },
88 86
89 //------------------------------------------------------------------------- 87 //-------------------------------------------------------------------------
90 88
91 'handleButtonClick': function() { 89 'handleButtonClick': function() {
92 if (this.recordField() == null) { 90 if (this.recordField() == null) {
93 this.mainComponent().addNewField(); 91 this.mainComponent().addNewField();
94 } else { 92 } else {
95 this.mainComponent().removeField(this.fieldComponent()); 93 this.mainComponent().removeField(this.fieldComponent());
96 } 94 }
97 }, 95 },
98 96
99 //------------------------------------------------------------------------- 97 //-------------------------------------------------------------------------
100 98
101 'updateEditMode': function() { 99 'updateEditMode': function() {
102 this.button().show(); 100 this.button().show();
103 }, 101 },
104 102
105 //------------------------------------------------------------------------- 103 //-------------------------------------------------------------------------
106 104
107 'updateViewMode': function() { 105 'updateViewMode': function() {
108 this.button().hide(); 106 this.button().hide();
109 }, 107 },
110 108
111 //------------------------------------------------------------------------- 109 //-------------------------------------------------------------------------
112 __syntaxFix__: "syntax fix" 110 __syntaxFix__: "syntax fix"
113}); 111});
114 112
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldComponent.js
index 978a54e..bfa4658 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.FieldComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.FieldComponent = function(anElement, args) {
34//MochiKit.Logging.logDebug(">>> new FieldComponent"); 32//MochiKit.Logging.logDebug(">>> new FieldComponent");
35 args = args || {}; 33 args = args || {};
36 34
37 Clipperz.PM.Components.RecordDetail.FieldComponent.superclass.constructor.call(this, anElement, args); 35 Clipperz.PM.Components.RecordDetail.FieldComponent.superclass.constructor.call(this, anElement, args);
38 36
39 this._element = anElement; 37 this._element = anElement;
40 this._recordField = args.recordField || null; 38 this._recordField = args.recordField || null;
41 39
42 this._buttonComponent = null; 40 this._buttonComponent = null;
43 this._labelComponent = null; 41 this._labelComponent = null;
44 this._dragHandler = null; 42 this._dragHandler = null;
45 this._valueComponent = null; 43 this._valueComponent = null;
46 this._typeComponent = null; 44 this._typeComponent = null;
47 45
48 this.mainComponent().addEditComponent(this); 46 this.mainComponent().addEditComponent(this);
49 47
50 this.render(); 48 this.render();
51 49
52 return this; 50 return this;
53} 51}
54 52
55//============================================================================= 53//=============================================================================
56 54
57YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, { 55YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, {
58 56
59 'toString': function() { 57 'toString': function() {
60 return "Clipperz.PM.Components.RecordDetail.FieldComponent component"; 58 return "Clipperz.PM.Components.RecordDetail.FieldComponent component";
61 }, 59 },
62 60
63 //------------------------------------------------------------------------- 61 //-------------------------------------------------------------------------
64 62
65 'recordField': function() { 63 'recordField': function() {
66 return this._recordField; 64 return this._recordField;
67 }, 65 },
68 66
69 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
70 68
71 'buttonComponent': function() { 69 'buttonComponent': function() {
72 return this._buttonComponent; 70 return this._buttonComponent;
73 }, 71 },
74 72
75 'setButtonComponent': function(aValue) { 73 'setButtonComponent': function(aValue) {
76 this._buttonComponent = aValue; 74 this._buttonComponent = aValue;
77 }, 75 },
78 76
79 //------------------------------------------------------------------------- 77 //-------------------------------------------------------------------------
80 78
81 'labelComponent': function() { 79 'labelComponent': function() {
82 return this._labelComponent; 80 return this._labelComponent;
83 }, 81 },
84 82
85 'setLabelComponent': function(aValue) { 83 'setLabelComponent': function(aValue) {
86 this._labelComponent = aValue; 84 this._labelComponent = aValue;
87 }, 85 },
88 86
89 //------------------------------------------------------------------------- 87 //-------------------------------------------------------------------------
90 88
91 'dragHandler': function() { 89 'dragHandler': function() {
92 return this._dragHandler; 90 return this._dragHandler;
93 }, 91 },
94 92
95 'setDragHandler': function(aValue) { 93 'setDragHandler': function(aValue) {
96 this._dragHandler = aValue; 94 this._dragHandler = aValue;
97 }, 95 },
98 96
99 //------------------------------------------------------------------------- 97 //-------------------------------------------------------------------------
100 98
101 'valueComponent': function() { 99 'valueComponent': function() {
102 return this._valueComponent; 100 return this._valueComponent;
103 }, 101 },
104 102
105 'setValueComponent': function(aValue) { 103 'setValueComponent': function(aValue) {
106 this._valueComponent = aValue; 104 this._valueComponent = aValue;
107 }, 105 },
108 106
109 //------------------------------------------------------------------------- 107 //-------------------------------------------------------------------------
110 108
111 'typeComponent': function() { 109 'typeComponent': function() {
112 return this._typeComponent; 110 return this._typeComponent;
113 }, 111 },
114 112
115 'setTypeComponent': function(aValue) { 113 'setTypeComponent': function(aValue) {
116 this._typeComponent = aValue; 114 this._typeComponent = aValue;
117 }, 115 },
118 116
119 //------------------------------------------------------------------------- 117 //-------------------------------------------------------------------------
120 118
121 'render': function() { 119 'render': function() {
122//MochiKit.Logging.logDebug(">>> RecordDetail.FieldComponent.render"); 120//MochiKit.Logging.logDebug(">>> RecordDetail.FieldComponent.render");
123 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td',/* width:'32',*/ height:'24', cls:'removeFieldButton', align:'left', valign:'top', id:this.getId('button')}); 121 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td',/* width:'32',*/ height:'24', cls:'removeFieldButton', align:'left', valign:'top', id:this.getId('button')});
124 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td',/* width:'25%',*/ valign:'top', id:this.getId('label')}); 122 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td',/* width:'25%',*/ valign:'top', id:this.getId('label')});
125 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td',/* width:'3',*/ valign:'top', id:this.getId('dragHandler')}); 123 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td',/* width:'3',*/ valign:'top', id:this.getId('dragHandler')});
126 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td',/* width:'50%',*/ valign:'top', children:[ 124 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td',/* width:'50%',*/ valign:'top', children:[
127 {tag:'div', cls:'Clipperz_recordFieldData', id:this.getId('value')} 125 {tag:'div', cls:'Clipperz_recordFieldData', id:this.getId('value')}
128 ]}); 126 ]});
129 127
130 128
131 this.setButtonComponent(new Clipperz.PM.Components.RecordDetail.FieldButtonComponent(this.getElement('button'), {fieldComponent:this})); 129 this.setButtonComponent(new Clipperz.PM.Components.RecordDetail.FieldButtonComponent(this.getElement('button'), {fieldComponent:this}));
132 this.setLabelComponent(new Clipperz.PM.Components.RecordDetail.FieldLabelComponent(this.getElement('label'), {fieldComponent:this})); 130 this.setLabelComponent(new Clipperz.PM.Components.RecordDetail.FieldLabelComponent(this.getElement('label'), {fieldComponent:this}));
133 this.setDragHandler(new Clipperz.PM.Components.RecordDetail.FieldDragHandler(this.getElement('dragHandler'), {fieldComponent:this})); 131 this.setDragHandler(new Clipperz.PM.Components.RecordDetail.FieldDragHandler(this.getElement('dragHandler'), {fieldComponent:this}));
134 this.setValueComponent(new Clipperz.PM.Components.RecordDetail.FieldValueComponent(this.getElement('value'), {fieldComponent:this})); 132 this.setValueComponent(new Clipperz.PM.Components.RecordDetail.FieldValueComponent(this.getElement('value'), {fieldComponent:this}));
135 133
136 if (this.editMode() == 'EDIT') { 134 if (this.editMode() == 'EDIT') {
137 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td',/* width:'60',*/ align:'left', cls:'fieldTypeTD', valign:'top', id:this.getId('type')}); 135 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td',/* width:'60',*/ align:'left', cls:'fieldTypeTD', valign:'top', id:this.getId('type')});
138 this.setTypeComponent(new Clipperz.PM.Components.RecordDetail.FieldTypeComponent(this.getElement('type'), {fieldComponent:this})); 136 this.setTypeComponent(new Clipperz.PM.Components.RecordDetail.FieldTypeComponent(this.getElement('type'), {fieldComponent:this}));
139 } 137 }
140 138
141 this.update(); 139 this.update();
142//MochiKit.Logging.logDebug("<<< RecordDetail.FieldComponent.render"); 140//MochiKit.Logging.logDebug("<<< RecordDetail.FieldComponent.render");
143 }, 141 },
144 142
145 //------------------------------------------------------------------------- 143 //-------------------------------------------------------------------------
146 144
147 'handleButtonClick': function() { 145 'handleButtonClick': function() {
148 this.mainComponent().record().removeField(this.recordField()); 146 this.mainComponent().record().removeField(this.recordField());
149 147
150 // if (this.recordField() == null) { 148 // if (this.recordField() == null) {
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldDragHandler.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldDragHandler.js
index f7c5e21..7fea132 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldDragHandler.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldDragHandler.js
@@ -1,56 +1,54 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.FieldDragHandler = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.FieldDragHandler = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.RecordDetail.FieldDragHandler.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.RecordDetail.FieldDragHandler.superclass.constructor.call(this, anElement, args);
37 35
38 this._element = anElement; 36 this._element = anElement;
39 37
40 this.render(); 38 this.render();
41 39
42 return this; 40 return this;
43} 41}
44 42
45//============================================================================= 43//=============================================================================
46 44
47YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldDragHandler, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, { 45YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldDragHandler, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, {
48 46
49 'toString': function() { 47 'toString': function() {
50 return "Clipperz.PM.Components.RecordDetail.FieldDragHandler component"; 48 return "Clipperz.PM.Components.RecordDetail.FieldDragHandler component";
51 }, 49 },
52 50
53 //------------------------------------------------------------------------- 51 //-------------------------------------------------------------------------
54 __syntaxFix__: "syntax fix" 52 __syntaxFix__: "syntax fix"
55}); 53});
56 54
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldLabelComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldLabelComponent.js
index c58a7e2..c6f8cbf 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldLabelComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldLabelComponent.js
@@ -1,138 +1,136 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.FieldLabelComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.FieldLabelComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.RecordDetail.FieldLabelComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.RecordDetail.FieldLabelComponent.superclass.constructor.call(this, anElement, args);
37 35
38 this._inputElement = null; 36 this._inputElement = null;
39 37
40 this.render(); 38 this.render();
41 39
42 return this; 40 return this;
43} 41}
44 42
45//============================================================================= 43//=============================================================================
46 44
47YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldLabelComponent, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, { 45YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldLabelComponent, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, {
48 46
49 'toString': function() { 47 'toString': function() {
50 return "Clipperz.PM.Components.RecordDetail.FieldLabelComponent component"; 48 return "Clipperz.PM.Components.RecordDetail.FieldLabelComponent component";
51 }, 49 },
52 50
53 //------------------------------------------------------------------------- 51 //-------------------------------------------------------------------------
54 52
55 'value': function() { 53 'value': function() {
56 return this.recordField().label(); 54 return this.recordField().label();
57 }, 55 },
58 56
59 //------------------------------------------------------------------------- 57 //-------------------------------------------------------------------------
60 58
61 'inputElement': function() { 59 'inputElement': function() {
62 return this._inputElement; 60 return this._inputElement;
63 }, 61 },
64 62
65 'setInputElement': function(aValue) { 63 'setInputElement': function(aValue) {
66 this._inputElement = aValue; 64 this._inputElement = aValue;
67 }, 65 },
68 66
69 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
70 68
71 'render': function() { 69 'render': function() {
72 varnewTextFormField; 70 varnewTextFormField;
73 this.element().update(""); 71 this.element().update("");
74 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', cls:'Clipperz_recordFieldLabel', id:this.getId('label')}); 72 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', cls:'Clipperz_recordFieldLabel', id:this.getId('label')});
75 // Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', style:'font-size:8pt;', html:this.recordField().key()}); 73 // Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', style:'font-size:8pt;', html:this.recordField().key()});
76 74
77 // this.setInputElement(new Clipperz.PM.Components.TextFormField(this.getElement('label'), {editMode:this.editMode(), value:this.value()})); 75 // this.setInputElement(new Clipperz.PM.Components.TextFormField(this.getElement('label'), {editMode:this.editMode(), value:this.value()}));
78 newTextFormField = new Clipperz.PM.Components.TextFormField(this.getElement('label'), {editMode:this.editMode(), value:this.value()}); 76 newTextFormField = new Clipperz.PM.Components.TextFormField(this.getElement('label'), {editMode:this.editMode(), value:this.value()});
79 // newTextFormField.inputElement().setStyle({border:'3px solid cyan;'}); 77 // newTextFormField.inputElement().setStyle({border:'3px solid cyan;'});
80 newTextFormField.on('change', this.notifyChanges, this, true) 78 newTextFormField.on('change', this.notifyChanges, this, true)
81 // this.inputElement().on('change', function() {alert("CHANGE");}); 79 // this.inputElement().on('change', function() {alert("CHANGE");});
82 // this.inputElement().getElement('editComponent_input').on('change', function() {alert("CHANGE");}) 80 // this.inputElement().getElement('editComponent_input').on('change', function() {alert("CHANGE");})
83 // this.inputElement().on('blur', this.notifyChanges, this, true); 81 // this.inputElement().on('blur', this.notifyChanges, this, true);
84 82
85 this.setInputElement(newTextFormField); 83 this.setInputElement(newTextFormField);
86 this.update(); 84 this.update();
87 }, 85 },
88 86
89 'notifyChanges': function() { 87 'notifyChanges': function() {
90//MochiKit.Logging.logDebug(">>> FieldLabelComponent.notifyChanges - " + this); 88//MochiKit.Logging.logDebug(">>> FieldLabelComponent.notifyChanges - " + this);
91 this.synchronizeComponentValues(); 89 this.synchronizeComponentValues();
92 Clipperz.NotificationCenter.notify(this.recordField().recordVersion().record(), 'updatedFieldLabel'); 90 Clipperz.NotificationCenter.notify(this.recordField().recordVersion().record(), 'updatedFieldLabel');
93//MochiKit.Logging.logDebug("<<< FieldLabelComponent.notifyChanges"); 91//MochiKit.Logging.logDebug("<<< FieldLabelComponent.notifyChanges");
94 }, 92 },
95 93
96 //------------------------------------------------------------------------- 94 //-------------------------------------------------------------------------
97 95
98 'update': function() { 96 'update': function() {
99//MochiKit.Logging.logDebug(">>> FieldLabelComponent.update"); 97//MochiKit.Logging.logDebug(">>> FieldLabelComponent.update");
100 this.inputElement().update({editMode:this.editMode(), value:this.value()}); 98 this.inputElement().update({editMode:this.editMode(), value:this.value()});
101//MochiKit.Logging.logDebug("<<< FieldLabelComponent.update"); 99//MochiKit.Logging.logDebug("<<< FieldLabelComponent.update");
102 }, 100 },
103 101
104 //------------------------------------------------------------------------- 102 //-------------------------------------------------------------------------
105/* 103/*
106 'updateViewMode': function() { 104 'updateViewMode': function() {
107 varwidth; 105 varwidth;
108 varelement; 106 varelement;
109 107
110 this.element().update(""); 108 this.element().update("");
111 width = this.element().getWidth(); 109 width = this.element().getWidth();
112 element = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', html:this.value()}, true); 110 element = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', html:this.value()}, true);
113 element.setWidth(width-1); 111 element.setWidth(width-1);
114 }, 112 },
115 113
116 //------------------------------------------------------------------------- 114 //-------------------------------------------------------------------------
117 115
118 'updateEditMode': function() { 116 'updateEditMode': function() {
119 varwidth; 117 varwidth;
120 118
121 this.element().update(""); 119 this.element().update("");
122 width = this.element().getWidth(true); 120 width = this.element().getWidth(true);
123 this.setInputElement(Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'input', type:'text', value:this.value()}, true)); 121 this.setInputElement(Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'input', type:'text', value:this.value()}, true));
124 this.inputElement().setWidth(width-1); 122 this.inputElement().setWidth(width-1);
125 }, 123 },
126*/ 124*/
127 //------------------------------------------------------------------------- 125 //-------------------------------------------------------------------------
128 126
129 'synchronizeComponentValues': function() { 127 'synchronizeComponentValues': function() {
130 if (this.inputElement() != null) { 128 if (this.inputElement() != null) {
131 this.recordField().setLabel(this.inputElement().value()); 129 this.recordField().setLabel(this.inputElement().value());
132 } 130 }
133 }, 131 },
134 132
135 //------------------------------------------------------------------------- 133 //-------------------------------------------------------------------------
136 __syntaxFix__: "syntax fix" 134 __syntaxFix__: "syntax fix"
137}); 135});
138 136
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldTypeComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldTypeComponent.js
index 489258a..3108885 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldTypeComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldTypeComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.FieldTypeComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.FieldTypeComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.RecordDetail.FieldTypeComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.RecordDetail.FieldTypeComponent.superclass.constructor.call(this, anElement, args);
37 35
38 this._inputElement = null; 36 this._inputElement = null;
39 37
40 this.render(); 38 this.render();
41 39
42 return this; 40 return this;
43} 41}
44 42
45//============================================================================= 43//=============================================================================
46 44
47YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldTypeComponent, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, { 45YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldTypeComponent, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, {
48 46
49 'toString': function() { 47 'toString': function() {
50 return "Clipperz.PM.Components.RecordDetail.FieldTypeComponent component"; 48 return "Clipperz.PM.Components.RecordDetail.FieldTypeComponent component";
51 }, 49 },
52 50
53 //------------------------------------------------------------------------- 51 //-------------------------------------------------------------------------
54 52
55 'inputElement': function() { 53 'inputElement': function() {
56 return this._inputElement; 54 return this._inputElement;
57 }, 55 },
58 56
59 'setInputElement': function(aValue) { 57 'setInputElement': function(aValue) {
60 this._inputElement = aValue; 58 this._inputElement = aValue;
61 }, 59 },
62 60
63 //------------------------------------------------------------------------- 61 //-------------------------------------------------------------------------
64 62
65 'value': function() { 63 'value': function() {
66 return this.recordField().type(); 64 return this.recordField().type();
67 }, 65 },
68 66
69 'canChangeType': function() { 67 'canChangeType': function() {
70 var value; 68 var value;
71 var result; 69 var result;
72 70
73 value = this.value(); 71 value = this.value();
74 result = ((value == 'TXT') || (value == 'PWD') || (value == 'URL') || (value == 'DATE') || (value == 'ADDR')); 72 result = ((value == 'TXT') || (value == 'PWD') || (value == 'URL') || (value == 'DATE') || (value == 'ADDR'));
75 73
76 return result 74 return result
77 }, 75 },
78 76
79 //------------------------------------------------------------------------- 77 //-------------------------------------------------------------------------
80 78
81 'updateViewMode': function() { 79 'updateViewMode': function() {
82 this.element().update(""); 80 this.element().update("");
83 if (this.canChangeType()) { 81 if (this.canChangeType()) {
84 varwidth; 82 varwidth;
85 var element; 83 var element;
86 84
87 width = this.element().getWidth(true); 85 width = this.element().getWidth(true);
88 element = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', html:this.recordField().typeShortDescription()}, true); 86 element = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', html:this.recordField().typeShortDescription()}, true);
89 element.setWidth(width-1); 87 element.setWidth(width-1);
90 } 88 }
91 }, 89 },
92 90
93 //------------------------------------------------------------------------- 91 //-------------------------------------------------------------------------
94 92
95 'updateEditMode': function() { 93 'updateEditMode': function() {
96 this.element().update(""); 94 this.element().update("");
97 95
98 if (this.canChangeType()) { 96 if (this.canChangeType()) {
99 varwidth; 97 varwidth;
100 98
101 width = this.element().getWidth(true); 99 width = this.element().getWidth(true);
102 this.setInputElement(Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'select', children:[ 100 this.setInputElement(Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'select', children:[
103 {tag:'option', value:'TXT', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['TXT']['shortDescription']}, 101 {tag:'option', value:'TXT', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['TXT']['shortDescription']},
104 {tag:'option', value:'PWD', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['PWD']['shortDescription']}, 102 {tag:'option', value:'PWD', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['PWD']['shortDescription']},
105 {tag:'option', value:'URL', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['URL']['shortDescription']}, 103 {tag:'option', value:'URL', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['URL']['shortDescription']},
106 {tag:'option', value:'DATE', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['DATE']['shortDescription']}, 104 {tag:'option', value:'DATE', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['DATE']['shortDescription']},
107 {tag:'option', value:'ADDR', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['ADDR']['shortDescription']} 105 {tag:'option', value:'ADDR', htmlString:Clipperz.PM.Strings['recordFieldTypologies']['ADDR']['shortDescription']}
108 106
109 // {tag:'option', value:'CHECK', html:Clipperz.PM.DataModel.RecordField.TypeDescriptions['CHECK']['shortDescription']}, 107 // {tag:'option', value:'CHECK', html:Clipperz.PM.DataModel.RecordField.TypeDescriptions['CHECK']['shortDescription']},
110 // {tag:'option', value:'RADIO', html:Clipperz.PM.DataModel.RecordField.TypeDescriptions['RADIO']['shortDescription']}, 108 // {tag:'option', value:'RADIO', html:Clipperz.PM.DataModel.RecordField.TypeDescriptions['RADIO']['shortDescription']},
111 // {tag:'option', value:'CHECK', html:Clipperz.PM.DataModel.RecordField.TypeDescriptions['SELECT']['shortDescription']} 109 // {tag:'option', value:'CHECK', html:Clipperz.PM.DataModel.RecordField.TypeDescriptions['SELECT']['shortDescription']}
112 // {tag:'option', value:'NOTE', html:Clipperz.PM.DataModel.RecordField.TypeDescriptions['NOTE']['shortDescription']} 110 // {tag:'option', value:'NOTE', html:Clipperz.PM.DataModel.RecordField.TypeDescriptions['NOTE']['shortDescription']}
113 ]}, true)); 111 ]}, true));
114 this.inputElement().setWidth(width-1); 112 this.inputElement().setWidth(width-1);
115 this.inputElement().addHandler('change', true, this.onChange, this, true); 113 this.inputElement().addHandler('change', true, this.onChange, this, true);
116 // this.selectCorrectOption(); 114 // this.selectCorrectOption();
117 Clipperz.DOM.selectOptionMatchingValue(this.inputElement().dom, this.value()); 115 Clipperz.DOM.selectOptionMatchingValue(this.inputElement().dom, this.value());
118 } 116 }
119 }, 117 },
120 118
121 //------------------------------------------------------------------------- 119 //-------------------------------------------------------------------------
122 120
123 'onChange': function() { 121 'onChange': function() {
124 this.synchronizeComponentValues(); 122 this.synchronizeComponentValues();
125 this.fieldComponent().valueComponent().handleTypeChange(); 123 this.fieldComponent().valueComponent().handleTypeChange();
126 }, 124 },
127 125
128 //------------------------------------------------------------------------- 126 //-------------------------------------------------------------------------
129/* 127/*
130 'selectCorrectOption': function() { 128 'selectCorrectOption': function() {
131 varoptions; 129 varoptions;
132 var i,c; 130 var i,c;
133 131
134 options = this.inputElement().getChildrenByTagName('option'); 132 options = this.inputElement().getChildrenByTagName('option');
135 c = options.length; 133 c = options.length;
136 for (i=0; i<c; i++) { 134 for (i=0; i<c; i++) {
137 if (options[i].dom.value == this.value()) { 135 if (options[i].dom.value == this.value()) {
138 options[i].dom.selected = true; 136 options[i].dom.selected = true;
139 } 137 }
140 } 138 }
141 }, 139 },
142 */ 140 */
143 //------------------------------------------------------------------------- 141 //-------------------------------------------------------------------------
144 142
145 'synchronizeComponentValues': function() { 143 'synchronizeComponentValues': function() {
146 if (this.inputElement() != null) { 144 if (this.inputElement() != null) {
147 this.recordField().setType(this.inputElement().dom.value); 145 this.recordField().setType(this.inputElement().dom.value);
148 } 146 }
149 }, 147 },
150 148
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js
index 8621397..f2c70aa 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.FieldValueComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.FieldValueComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.RecordDetail.FieldValueComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.RecordDetail.FieldValueComponent.superclass.constructor.call(this, anElement, args);
37 35
38 this._inputElement = null; 36 this._inputElement = null;
39 this._scrambledStatus = 'SCRAMBLED'; //'UNSCRAMBLED' 37 this._scrambledStatus = 'SCRAMBLED'; //'UNSCRAMBLED'
40 38
41 this.render(); 39 this.render();
42 40
43 return this; 41 return this;
44} 42}
45 43
46//============================================================================= 44//=============================================================================
47 45
48YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldValueComponent, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, { 46YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldValueComponent, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, {
49 47
50 'toString': function() { 48 'toString': function() {
51 return "Clipperz.PM.Components.RecordDetail.FieldValueComponent component"; 49 return "Clipperz.PM.Components.RecordDetail.FieldValueComponent component";
52 }, 50 },
53 51
54 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
55 53
56 'value': function() { 54 'value': function() {
57 return this.recordField().value(); 55 return this.recordField().value();
58 }, 56 },
59 57
60 'setValue': function(aValue) { 58 'setValue': function(aValue) {
61 this.recordField().setValue(aValue); 59 this.recordField().setValue(aValue);
62 }, 60 },
63 61
64 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
65 63
66 'inputElement': function() { 64 'inputElement': function() {
67 return this._inputElement; 65 return this._inputElement;
68 }, 66 },
69 67
70 'setInputElement': function(aValue) { 68 'setInputElement': function(aValue) {
71 this._inputElement = aValue; 69 this._inputElement = aValue;
72 }, 70 },
73 71
74 //------------------------------------------------------------------------- 72 //-------------------------------------------------------------------------
75 73
76 'scrambledStatus': function() { 74 'scrambledStatus': function() {
77 return this._scrambledStatus; 75 return this._scrambledStatus;
78 }, 76 },
79 77
80 'setScrambledStatus': function(aValue) { 78 'setScrambledStatus': function(aValue) {
81 this._scrambledStatus = aValue; 79 this._scrambledStatus = aValue;
82 }, 80 },
83 81
84 //------------------------------------------------------------------------- 82 //-------------------------------------------------------------------------
85 83
86 'handleTypeChange': function() { 84 'handleTypeChange': function() {
87//MochiKit.Logging.logDebug(">>> handling type change - " + this.recordField().type()); 85//MochiKit.Logging.logDebug(">>> handling type change - " + this.recordField().type());
88 this.synchronizeComponentValues(); 86 this.synchronizeComponentValues();
89 this.update(); 87 this.update();
90 }, 88 },
91 89
92 //------------------------------------------------------------------------- 90 //-------------------------------------------------------------------------
93 91
94 'addrUrl': function() { 92 'addrUrl': function() {
95 var result; 93 var result;
96 94
97 result = "http://maps.google.com/maps?q=" + this.value().split(' ').join('+'); 95 result = "http://maps.google.com/maps?q=" + this.value().split(' ').join('+');
98 96
99 return result; 97 return result;
100 }, 98 },
101 99
102 //------------------------------------------------------------------------- 100 //-------------------------------------------------------------------------
103 101
104 'updateViewMode': function() { 102 'updateViewMode': function() {
105 var scarmbledStatus; 103 var scarmbledStatus;
106 104
107 scrambledStatus = this.scrambledStatus() || 'SCRAMBLED'; 105 scrambledStatus = this.scrambledStatus() || 'SCRAMBLED';
108 106
109 this.element().update(""); 107 this.element().update("");
110 if (this.recordField().hidden() == false) { 108 if (this.recordField().hidden() == false) {
111 switch(this.recordField().type()) { 109 switch(this.recordField().type()) {
112 case 'TXT': 110 case 'TXT':
113 case 'PWD': 111 case 'PWD':
114 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', html:this.value()}); 112 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', html:this.value()});
115 break; 113 break;
116 case 'URL': 114 case 'URL':
117 varurlLocation; 115 varurlLocation;
118 116
119 urlLocation = Clipperz.Base.sanitizeString(this.value()); 117 urlLocation = Clipperz.Base.sanitizeString(this.value());
120 if (! (/^(https?|ftp|svn):\/\//.test(urlLocation))) { 118 if (! (/^(https?|ftp|svn):\/\//.test(urlLocation))) {
121 urlLocation = 'http://' + urlLocation; 119 urlLocation = 'http://' + urlLocation;
122 } 120 }
123 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'a', href:urlLocation, html:this.value(), target:'_blank'}); 121 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'a', href:urlLocation, html:this.value(), target:'_blank'});
124 break; 122 break;
125 case 'DATE': 123 case 'DATE':
126 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', html:this.value()}); 124 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', html:this.value()});
127 break; 125 break;
128 case 'ADDR': 126 case 'ADDR':
129 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'a', href:this.addrUrl(), html:this.value(), target:'_blank'}); 127 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'a', href:this.addrUrl(), html:this.value(), target:'_blank'});
130 break; 128 break;
131 } 129 }
132 } else { 130 } else {
133 var tableElement; 131 var tableElement;
134 var tdElement; 132 var tdElement;
135 var inputElement; 133 var inputElement;
136 var passwordElementConfiguration; 134 var passwordElementConfiguration;
137 135
138 if (scrambledStatus == 'SCRAMBLED') { 136 if (scrambledStatus == 'SCRAMBLED') {
139 varscrambledInputElement; 137 varscrambledInputElement;
140 138
141 if ((Clipperz_IEisBroken === true) && (Clipperz.PM.Proxy.defaultProxy.isReadOnly())) { 139 if ((Clipperz_IEisBroken === true) && (Clipperz.PM.Proxy.defaultProxy.isReadOnly())) {
142 scrambledInputElement = {tag:'input', type:'password', value:"this.value()"}; 140 scrambledInputElement = {tag:'input', type:'password', value:"this.value()"};
143 } else { 141 } else {
144 scrambledInputElement = {tag:'input', type:'text', cls:'scrambledField', title:Clipperz.PM.Strings['recordDetailPasswordFieldTooltipLabel'], value:"this.value()"}; 142 scrambledInputElement = {tag:'input', type:'text', cls:'scrambledField', title:Clipperz.PM.Strings['recordDetailPasswordFieldTooltipLabel'], value:"this.value()"};
145 } 143 }
146 144
147 passwordElementConfiguration = 145 passwordElementConfiguration =
148 {tag:'table', border:'0', cellspacing:'2', cellpadding:'0', children:[ 146 {tag:'table', border:'0', cellspacing:'2', cellpadding:'0', children:[
149 {tag:'tbody', children:[ 147 {tag:'tbody', children:[
150 {tag:'tr', children:[ 148 {tag:'tr', children:[
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/HeaderComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/HeaderComponent.js
index 46f456b..4f12c88 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/HeaderComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/HeaderComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.HeaderComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.HeaderComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.RecordDetail.HeaderComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.RecordDetail.HeaderComponent.superclass.constructor.call(this, anElement, args);
37 this.mainComponent().addEditComponent(this); 35 this.mainComponent().addEditComponent(this);
38 36
39 this._saveButton = null; 37 this._saveButton = null;
40 38
41 this.render(); 39 this.render();
42 40
43 return this; 41 return this;
44} 42}
45 43
46//============================================================================= 44//=============================================================================
47 45
48YAHOO.extendX(Clipperz.PM.Components.RecordDetail.HeaderComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, { 46YAHOO.extendX(Clipperz.PM.Components.RecordDetail.HeaderComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, {
49 47
50 'toString': function() { 48 'toString': function() {
51 return "Clipperz.PM.Components.RecordDetail.HeaderComponent component"; 49 return "Clipperz.PM.Components.RecordDetail.HeaderComponent component";
52 }, 50 },
53 51
54 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
55 53
56 'render': function() { 54 'render': function() {
57 var editButton; 55 var editButton;
58 56
59//MochiKit.Logging.logDebug(">>> RecordDetail.HeaderComponent.appendTo"); 57//MochiKit.Logging.logDebug(">>> RecordDetail.HeaderComponent.appendTo");
60 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', cls:'recordDetailButtonsBox', children:[ 58 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', cls:'recordDetailButtonsBox', children:[
61 {tag:'div', id:this.getId('editButtonBox'), children:[ 59 {tag:'div', id:this.getId('editButtonBox'), children:[
62 {tag:'table', cls:'recordDetailButtonsTABLE', border:'0', cellpadding:'0', cellspacing:'0', children:[ 60 {tag:'table', cls:'recordDetailButtonsTABLE', border:'0', cellpadding:'0', cellspacing:'0', children:[
63 {tag:'tbody', children:[ 61 {tag:'tbody', children:[
64 {tag:'tr', children:[ 62 {tag:'tr', children:[
65 {tag:'td', align:'center', children:[ 63 {tag:'td', align:'center', children:[
66 {tag:'div', id:this.getId('editButton')} 64 {tag:'div', id:this.getId('editButton')}
67 ]} 65 ]}
68 ]} 66 ]}
69 ]} 67 ]}
70 ]} 68 ]}
71 ]}, 69 ]},
72 {tag:'div', id:this.getId('saveCancelButtonBox'), children:[ 70 {tag:'div', id:this.getId('saveCancelButtonBox'), children:[
73 {tag:'table', cls:'recordDetailButtonsTABLE', border:'0', cellpadding:'0', cellspacing:'0', children:[ 71 {tag:'table', cls:'recordDetailButtonsTABLE', border:'0', cellpadding:'0', cellspacing:'0', children:[
74 {tag:'tbody', children:[ 72 {tag:'tbody', children:[
75 {tag:'tr', children:[ 73 {tag:'tr', children:[
76 {tag:'td', width:'49%', align:'right', children:[ 74 {tag:'td', width:'49%', align:'right', children:[
77 {tag:'div', id:this.getId('saveButton')} 75 {tag:'div', id:this.getId('saveButton')}
78 ]}, 76 ]},
79 {tag:'td', html:'&nbsp'}, 77 {tag:'td', html:'&nbsp'},
80 {tag:'td', width:'49%', align:'left', children:[ 78 {tag:'td', width:'49%', align:'left', children:[
81 {tag:'div', id:this.getId('cancelButton')} 79 {tag:'div', id:this.getId('cancelButton')}
82 ]} 80 ]}
83 ]} 81 ]}
84 ]} 82 ]}
85 ]} 83 ]}
86 ]} 84 ]}
87 ]}); 85 ]});
88 86
89 this.getElement('editButtonBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY); 87 this.getElement('editButtonBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
90 this.getElement('saveCancelButtonBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY); 88 this.getElement('saveCancelButtonBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
91 89
92 editButton = new YAHOO.ext.Button(this.getDom('editButton'), {text:Clipperz.PM.Strings['recordDetailEditButtonLabel'], handler:this.editButtonHandler, scope:this}); 90 editButton = new YAHOO.ext.Button(this.getDom('editButton'), {text:Clipperz.PM.Strings['recordDetailEditButtonLabel'], handler:this.editButtonHandler, scope:this});
93 this.setSaveButton(new YAHOO.ext.Button(this.getDom('saveButton'), {text:Clipperz.PM.Strings['recordDetailSaveButtonLabel'], handler:this.saveButtonHandler, scope:this})); 91 this.setSaveButton(new YAHOO.ext.Button(this.getDom('saveButton'), {text:Clipperz.PM.Strings['recordDetailSaveButtonLabel'], handler:this.saveButtonHandler, scope:this}));
94 new YAHOO.ext.Button(this.getDom('cancelButton'), {text:Clipperz.PM.Strings['recordDetailCancelButtonLabel'], handler:this.cancelButtonHandler, scope:this}); 92 new YAHOO.ext.Button(this.getDom('cancelButton'), {text:Clipperz.PM.Strings['recordDetailCancelButtonLabel'], handler:this.cancelButtonHandler, scope:this});
95 93
96 if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) { 94 if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) {
97 editButton.disable(); 95 editButton.disable();
98 } 96 }
99 97
100 this.update(); 98 this.update();
101//MochiKit.Logging.logDebug("<<< RecordDetail.HeaderComponent.appendTo"); 99//MochiKit.Logging.logDebug("<<< RecordDetail.HeaderComponent.appendTo");
102 }, 100 },
103 101
104 //------------------------------------------------------------------------- 102 //-------------------------------------------------------------------------
105 103
106 'updateViewMode': function() { 104 'updateViewMode': function() {
107//MochiKit.Logging.logDebug(">>> HeaderComponent.updateViewMode"); 105//MochiKit.Logging.logDebug(">>> HeaderComponent.updateViewMode");
108 this.getElement('editButtonBox').show(); 106 this.getElement('editButtonBox').show();
109 this.getElement('saveCancelButtonBox').hide(); 107 this.getElement('saveCancelButtonBox').hide();
110//MochiKit.Logging.logDebug("<<< HeaderComponent.updateViewMode"); 108//MochiKit.Logging.logDebug("<<< HeaderComponent.updateViewMode");
111 }, 109 },
112 110
113 //------------------------------------------------------------------------- 111 //-------------------------------------------------------------------------
114 112
115 'updateEditMode': function() { 113 'updateEditMode': function() {
116 this.getElement('editButtonBox').hide(); 114 this.getElement('editButtonBox').hide();
117 this.getElement('saveCancelButtonBox').show(); 115 this.getElement('saveCancelButtonBox').show();
118 if (this.mainComponent().enableSaveButton() == true) { 116 if (this.mainComponent().enableSaveButton() == true) {
119//MochiKit.Logging.logDebug("--- HeaderComponent.updateViewMode - ENABLE"); 117//MochiKit.Logging.logDebug("--- HeaderComponent.updateViewMode - ENABLE");
120 this.saveButton().enable(); 118 this.saveButton().enable();
121 } else { 119 } else {
122 this.saveButton().disable(); 120 this.saveButton().disable();
123 } 121 }
124 }, 122 },
125 123
126 //------------------------------------------------------------------------- 124 //-------------------------------------------------------------------------
127 125
128 'saveButton': function() { 126 'saveButton': function() {
129 return this._saveButton; 127 return this._saveButton;
130 }, 128 },
131 129
132 'setSaveButton': function(aValue) { 130 'setSaveButton': function(aValue) {
133 this._saveButton = aValue; 131 this._saveButton = aValue;
134 }, 132 },
135 133
136 //------------------------------------------------------------------------- 134 //-------------------------------------------------------------------------
137 135
138 'editButtonHandler': function(anEvent) { 136 'editButtonHandler': function(anEvent) {
139 this.mainComponent().setEditMode('EDIT'); 137 this.mainComponent().setEditMode('EDIT');
140 }, 138 },
141 139
142 //------------------------------------------------------------------------- 140 //-------------------------------------------------------------------------
143 141
144 'saveButtonHandler': function(anEvent) { 142 'saveButtonHandler': function(anEvent) {
145//MochiKit.Logging.logDebug(">>> RecordDetail.HeaderComponent.saveButtonHandler"); 143//MochiKit.Logging.logDebug(">>> RecordDetail.HeaderComponent.saveButtonHandler");
146 this.mainComponent().setEditMode('VIEW', this.getElement('saveButton')); 144 this.mainComponent().setEditMode('VIEW', this.getElement('saveButton'));
147//MochiKit.Logging.logDebug("<<< RecordDetail.HeaderComponent.saveButtonHandler"); 145//MochiKit.Logging.logDebug("<<< RecordDetail.HeaderComponent.saveButtonHandler");
148 }, 146 },
149 147
150 //------------------------------------------------------------------------- 148 //-------------------------------------------------------------------------
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/MainComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/MainComponent.js
index d6a03d7..47ed3e6 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/MainComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/MainComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.MainComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.MainComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.RecordDetail.MainComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.RecordDetail.MainComponent.superclass.constructor.call(this, anElement, args);
37 35
38 //this._element = args.element; 36 //this._element = args.element;
39 this._user = args.user; 37 this._user = args.user;
40 this._editMode = args.editMode || 'VIEW'; //[ 'VIEW' | 'EDIT' ] 38 this._editMode = args.editMode || 'VIEW'; //[ 'VIEW' | 'EDIT' ]
41 this._mainPanel = args.mainPanel; 39 this._mainPanel = args.mainPanel;
42 40
43 this._record = null; 41 this._record = null;
44 this._editComponents = []; 42 this._editComponents = [];
45 this._addFieldButton = null; 43 this._addFieldButton = null;
46 44
47 this._enableSaveButton = true; 45 this._enableSaveButton = true;
48 this._shouldShowLoginInfo = (Clipperz.PM.Proxy.defaultProxy.isReadOnly() ? false : true); 46 this._shouldShowLoginInfo = (Clipperz.PM.Proxy.defaultProxy.isReadOnly() ? false : true);
49 47
50 //this._mainLayoutManager = null; 48 //this._mainLayoutManager = null;
51 //this._layoutRegion = null; 49 //this._layoutRegion = null;
52 50
53 Clipperz.NotificationCenter.register(null, 'loadingRecordData', this, 'render'); 51 Clipperz.NotificationCenter.register(null, 'loadingRecordData', this, 'render');
54 Clipperz.NotificationCenter.register(null, 'decryptingRecordData', this, 'render'); 52 Clipperz.NotificationCenter.register(null, 'decryptingRecordData', this, 'render');
55 Clipperz.NotificationCenter.register(null, 'loadingRecordVersionData', this, 'render'); 53 Clipperz.NotificationCenter.register(null, 'loadingRecordVersionData', this, 'render');
56 Clipperz.NotificationCenter.register(null, 'decryptingRecordVersionData', this, 'render'); 54 Clipperz.NotificationCenter.register(null, 'decryptingRecordVersionData', this, 'render');
57 Clipperz.NotificationCenter.register(null, 'setupDone', this, 'render'); 55 Clipperz.NotificationCenter.register(null, 'setupDone', this, 'render');
58 Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'render'); 56 Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'render');
59 57
60 this.render(); 58 this.render();
61 59
62 return this; 60 return this;
63} 61}
64 62
65//============================================================================= 63//=============================================================================
66 64
67YAHOO.extendX(Clipperz.PM.Components.RecordDetail.MainComponent, Clipperz.PM.Components.BaseComponent, { 65YAHOO.extendX(Clipperz.PM.Components.RecordDetail.MainComponent, Clipperz.PM.Components.BaseComponent, {
68 66
69 'toString': function() { 67 'toString': function() {
70 return "Clipperz.PM.Components.RecordDetail.MainComponent component"; 68 return "Clipperz.PM.Components.RecordDetail.MainComponent component";
71 }, 69 },
72 70
73 //------------------------------------------------------------------------- 71 //-------------------------------------------------------------------------
74 72
75 'editMode': function() { 73 'editMode': function() {
76 return this._editMode; 74 return this._editMode;
77 }, 75 },
78 76
79 'setEditMode': function(aValue, aButtonElement, shouldSkipComponentSynchronization) { 77 'setEditMode': function(aValue, aButtonElement, shouldSkipComponentSynchronization) {
80//MochiKit.Logging.logDebug(">>> MainComponent.setEditingMode"); 78//MochiKit.Logging.logDebug(">>> MainComponent.setEditingMode");
81 this.scrollToTop(); 79 this.scrollToTop();
82 80
83 if (aValue == 'VIEW') { 81 if (aValue == 'VIEW') {
84 if (shouldSkipComponentSynchronization == true) { 82 if (shouldSkipComponentSynchronization == true) {
85 this.exitModalView(); 83 this.exitModalView();
86 } else { 84 } else {
87 this.synchronizeComponentValues(); 85 this.synchronizeComponentValues();
88 if (this.record().hasPendingChanges()) { 86 if (this.record().hasPendingChanges()) {
89 if (this.record().isBrandNew()) { 87 if (this.record().isBrandNew()) {
90 this.record().removeEmptyFields(); 88 this.record().removeEmptyFields();
91 } 89 }
92 this.saveCurrentRecordChanges(aButtonElement); 90 this.saveCurrentRecordChanges(aButtonElement);
93 } else { 91 } else {
94 if (this.record().isBrandNew()) { 92 if (this.record().isBrandNew()) {
95 this.record().user().removeRecord(this.record()); 93 this.record().user().removeRecord(this.record());
96 } 94 }
97 this.exitModalView(); 95 this.exitModalView();
98 } 96 }
99 } 97 }
100 } else if (aValue == 'EDIT') { 98 } else if (aValue == 'EDIT') {
101 this.enterModalView(); 99 this.enterModalView();
102 } else { 100 } else {
103 //???? 101 //????
104 } 102 }
105 103
106 this._editMode = aValue; 104 this._editMode = aValue;
107 this.render(); 105 this.render();
108 }, 106 },
109 107
110 //------------------------------------------------------------------------- 108 //-------------------------------------------------------------------------
111 109
112 'user': function() { 110 'user': function() {
113 return this._user; 111 return this._user;
114 }, 112 },
115 113
116 //------------------------------------------------------------------------- 114 //-------------------------------------------------------------------------
117 115
118 'mainPanel': function() { 116 'mainPanel': function() {
119 return this._mainPanel; 117 return this._mainPanel;
120 }, 118 },
121 119
122 //------------------------------------------------------------------------- 120 //-------------------------------------------------------------------------
123 121
124 'render': function() { 122 'render': function() {
125//MochiKit.Logging.logDebug(">>> RecordDetail.MainComponent.render"); 123//MochiKit.Logging.logDebug(">>> RecordDetail.MainComponent.render");
126 this.setEnableSaveButton(true); 124 this.setEnableSaveButton(true);
127 this.element().update(""); 125 this.element().update("");
128 126
129 if (this.record() == null) { 127 if (this.record() == null) {
130 if (MochiKit.Base.keys(this.user().records()).length == 0) { 128 if (MochiKit.Base.keys(this.user().records()).length == 0) {
131 this.renderWithNoRecordAtAll(); 129 this.renderWithNoRecordAtAll();
132 } else { 130 } else {
133 this.renderWithNoSelectedRecord(); 131 this.renderWithNoSelectedRecord();
134 } 132 }
135 } else { 133 } else {
136 this.renderWithSelectedRecord(); 134 this.renderWithSelectedRecord();
137 } 135 }
138//MochiKit.Logging.logDebug("<<< RecordDetail.MainComponent.render"); 136//MochiKit.Logging.logDebug("<<< RecordDetail.MainComponent.render");
139 }, 137 },
140 138
141 //------------------------------------------------------------------------- 139 //-------------------------------------------------------------------------
142 140
143 'renderWithNoRecordAtAll': function() { 141 'renderWithNoRecordAtAll': function() {
144//MochiKit.Logging.logDebug(">>> RecordDetail.MainComponent.renderWithNoRecordAtAll"); 142//MochiKit.Logging.logDebug(">>> RecordDetail.MainComponent.renderWithNoRecordAtAll");
145 Clipperz.YUI.DomHelper.append(this.element().dom, 143 Clipperz.YUI.DomHelper.append(this.element().dom,
146 {tag:'form', cls:'noRecordAtAllFORM', children:[ 144 {tag:'form', cls:'noRecordAtAllFORM', children:[
147 {tag:'div', cls:'recordTitleBlock', children:[ 145 {tag:'div', cls:'recordTitleBlock', children:[
148 {tag:'h2', id:'recordTitle', htmlString:Clipperz.PM.Strings['recordDetailNoRecordAtAllTitle']} 146 {tag:'h2', id:'recordTitle', htmlString:Clipperz.PM.Strings['recordDetailNoRecordAtAllTitle']}
149 ]}, 147 ]},
150 {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[ 148 {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/NotesComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/NotesComponent.js
index 2066543..bb23e8d 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/NotesComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/NotesComponent.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33 31
34 32
35Clipperz.PM.Components.RecordDetail.NotesComponent = function(anElement, args) { 33Clipperz.PM.Components.RecordDetail.NotesComponent = function(anElement, args) {
36//MochiKit.Logging.logDebug(">>> new NotesComponent"); 34//MochiKit.Logging.logDebug(">>> new NotesComponent");
37 args = args || {}; 35 args = args || {};
38 36
39 Clipperz.PM.Components.RecordDetail.NotesComponent.superclass.constructor.call(this, anElement, args); 37 Clipperz.PM.Components.RecordDetail.NotesComponent.superclass.constructor.call(this, anElement, args);
40 38
41 this.mainComponent().addEditComponent(this); 39 this.mainComponent().addEditComponent(this);
42 40
43 this._staticOffset = null; 41 this._staticOffset = null;
44 this._componentHeight = 50; 42 this._componentHeight = 50;
45 this._mouseMoveIdentifier = null; 43 this._mouseMoveIdentifier = null;
46 this._mouseUpIdentifier = null; 44 this._mouseUpIdentifier = null;
47 45
48 this.element().setVisibilityMode(YAHOO.ext.Element.DISPLAY); 46 this.element().setVisibilityMode(YAHOO.ext.Element.DISPLAY);
49 47
50 this.render(); 48 this.render();
51//MochiKit.Logging.logDebug("<<< new NotesComponent"); 49//MochiKit.Logging.logDebug("<<< new NotesComponent");
52 50
53 return this; 51 return this;
54} 52}
55 53
56//============================================================================= 54//=============================================================================
57 55
58YAHOO.extendX(Clipperz.PM.Components.RecordDetail.NotesComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, { 56YAHOO.extendX(Clipperz.PM.Components.RecordDetail.NotesComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, {
59 57
60 'toString': function() { 58 'toString': function() {
61 return "Clipperz.PM.Components.RecordDetail.NotesComponent component"; 59 return "Clipperz.PM.Components.RecordDetail.NotesComponent component";
62 }, 60 },
63 61
64 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
65 63
66 'value': function() { 64 'value': function() {
67 return this.record().notes(); 65 return this.record().notes();
68 }, 66 },
69 67
70 'setValue': function(aValue) { 68 'setValue': function(aValue) {
71 this.record().setNotes(aValue); 69 this.record().setNotes(aValue);
72 }, 70 },
73 71
74 //------------------------------------------------------------------------- 72 //-------------------------------------------------------------------------
75 73
76 'render': function() { 74 'render': function() {
77//MochiKit.Logging.logDebug(">>> NotesComponent.render"); 75//MochiKit.Logging.logDebug(">>> NotesComponent.render");
78/* 76/*
79 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', colspan:'5', children:[ 77 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', colspan:'5', children:[
80 {tag:'span', cls:'noteFieldLabel', htmlString:Clipperz.PM.Strings['recordDetailNotesLabel']}, 78 {tag:'span', cls:'noteFieldLabel', htmlString:Clipperz.PM.Strings['recordDetailNotesLabel']},
81 {tag:'div', cls:'noteFieldContent', id:this.getId('notes')} 79 {tag:'div', cls:'noteFieldContent', id:this.getId('notes')}
82 ]}); 80 ]});
83 */ 81 */
84 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', cls:'noteFieldLabel', htmlString:Clipperz.PM.Strings['recordDetailNotesLabel']}); 82 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', cls:'noteFieldLabel', htmlString:Clipperz.PM.Strings['recordDetailNotesLabel']});
85 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', cls:'noteFieldContent', id:this.getId('notes'), children:[ 83 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', cls:'noteFieldContent', id:this.getId('notes'), children:[
86 {tag:'div', id:this.getId('resizableDiv'), cls:'resizable-textarea', children:[ 84 {tag:'div', id:this.getId('resizableDiv'), cls:'resizable-textarea', children:[
87 {tag:'div', id:this.getId('contentView'), cls:'viewMode', html:""}, 85 {tag:'div', id:this.getId('contentView'), cls:'viewMode', html:""},
88 {tag:'div', id:this.getId('contentEdit'), children:[ 86 {tag:'div', id:this.getId('contentEdit'), children:[
89 {tag:'span', children:[ 87 {tag:'span', children:[
90 {tag:'textarea', id:this.getId('textarea'), html:""} 88 {tag:'textarea', id:this.getId('textarea'), html:""}
91 ]} 89 ]}
92 ]}, 90 ]},
93 {tag:'div', id:this.getId('grippie'), cls:'grippie'} 91 {tag:'div', id:this.getId('grippie'), cls:'grippie'}
94 ]} 92 ]}
95 ]}); 93 ]});
96 94
97 this.getElement('contentView').setVisibilityMode(YAHOO.ext.Element.DISPLAY); 95 this.getElement('contentView').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
98 this.getElement('contentEdit').setVisibilityMode(YAHOO.ext.Element.DISPLAY); 96 this.getElement('contentEdit').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
99 97
100 MochiKit.Signal.connect(this.getId('grippie'), 'onmousedown', this, 'startResize'); 98 MochiKit.Signal.connect(this.getId('grippie'), 'onmousedown', this, 'startResize');
101 99
102 this.update(); 100 this.update();
103//MochiKit.Logging.logDebug("<<< NotesComponent.render"); 101//MochiKit.Logging.logDebug("<<< NotesComponent.render");
104 }, 102 },
105 103
106 //------------------------------------------------------------------------- 104 //-------------------------------------------------------------------------
107 105
108 'updateViewMode': function() { 106 'updateViewMode': function() {
109//MochiKit.Logging.logDebug(">>> NotesComponent.updateViewMode"); 107//MochiKit.Logging.logDebug(">>> NotesComponent.updateViewMode");
110 // this.getElement('notes').update(this.value().replace(/\n/g, '<br>')); 108 // this.getElement('notes').update(this.value().replace(/\n/g, '<br>'));
111 109
112 this.getElement('contentView').update(Clipperz.Base.sanitizeString(this.value()).replace(/\n/g, '<br>')); 110 this.getElement('contentView').update(Clipperz.Base.sanitizeString(this.value()).replace(/\n/g, '<br>'));
113 111
114 if (this.isNoteEmpty()) { 112 if (this.isNoteEmpty()) {
115 this.element().hide(); 113 this.element().hide();
116 } else { 114 } else {
117 this.getElement('contentView').show(); 115 this.getElement('contentView').show();
118 this.getElement('contentView').setHeight(this.componentHeight()); 116 this.getElement('contentView').setHeight(this.componentHeight());
119 } 117 }
120 this.getElement('contentEdit').hide(); 118 this.getElement('contentEdit').hide();
121 119
122//MochiKit.Logging.logDebug("<<< NotesComponent.updateViewMode"); 120//MochiKit.Logging.logDebug("<<< NotesComponent.updateViewMode");
123 }, 121 },
124 122
125 //------------------------------------------------------------------------- 123 //-------------------------------------------------------------------------
126 124
127 'updateEditMode': function() { 125 'updateEditMode': function() {
128//MochiKit.Logging.logDebug(">>> NotesComponent.updateEditMode"); 126//MochiKit.Logging.logDebug(">>> NotesComponent.updateEditMode");
129 this.getDom('textarea').value = this.value().replace(/\n/g, Clipperz_normalizedNewLine); 127 this.getDom('textarea').value = this.value().replace(/\n/g, Clipperz_normalizedNewLine);
130 128
131 this.getElement('contentView').hide(); 129 this.getElement('contentView').hide();
132 this.getElement('contentEdit').show(); 130 this.getElement('contentEdit').show();
133 131
134 this.getElement('textarea').setHeight(this.componentHeight()); 132 this.getElement('textarea').setHeight(this.componentHeight());
135//MochiKit.Logging.logDebug("<<< NotesComponent.updateEditMode"); 133//MochiKit.Logging.logDebug("<<< NotesComponent.updateEditMode");
136 }, 134 },
137 135
138 //------------------------------------------------------------------------- 136 //-------------------------------------------------------------------------
139 137
140 'synchronizeComponentValues': function() { 138 'synchronizeComponentValues': function() {
141//MochiKit.Logging.logDebug(">>> NotesComponent.synchronizeComponentValues"); 139//MochiKit.Logging.logDebug(">>> NotesComponent.synchronizeComponentValues");
142 if (this.getElement('textarea') != null) { 140 if (this.getElement('textarea') != null) {
143 this.setValue(this.getDom('textarea').value.replace(/(\x0a\x0d|\x0d\x0a)/g,'\n')); 141 this.setValue(this.getDom('textarea').value.replace(/(\x0a\x0d|\x0d\x0a)/g,'\n'));
144 } 142 }
145//MochiKit.Logging.logDebug("<<< NotesComponent.synchronizeComponentValues"); 143//MochiKit.Logging.logDebug("<<< NotesComponent.synchronizeComponentValues");
146 }, 144 },
147 145
148 //------------------------------------------------------------------------- 146 //-------------------------------------------------------------------------
149 147
150 'componentHeight': function() { 148 'componentHeight': function() {
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/TitleComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/TitleComponent.js
index 29fe972..d114eaa 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/TitleComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/TitleComponent.js
@@ -1,134 +1,132 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Components.RecordDetail.TitleComponent = function(anElement, args) { 31Clipperz.PM.Components.RecordDetail.TitleComponent = function(anElement, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 Clipperz.PM.Components.RecordDetail.TitleComponent.superclass.constructor.call(this, anElement, args); 34 Clipperz.PM.Components.RecordDetail.TitleComponent.superclass.constructor.call(this, anElement, args);
37 35
38 //this._inputElement = null; 36 //this._inputElement = null;
39 37
40 this.mainComponent().addEditComponent(this); 38 this.mainComponent().addEditComponent(this);
41 39
42 this.render(); 40 this.render();
43 41
44 return this; 42 return this;
45} 43}
46 44
47//============================================================================= 45//=============================================================================
48 46
49YAHOO.extendX(Clipperz.PM.Components.RecordDetail.TitleComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, { 47YAHOO.extendX(Clipperz.PM.Components.RecordDetail.TitleComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, {
50 48
51 'toString': function() { 49 'toString': function() {
52 return "Clipperz.PM.Components.RecordDetail.TitleComponent component"; 50 return "Clipperz.PM.Components.RecordDetail.TitleComponent component";
53 }, 51 },
54 52
55 //------------------------------------------------------------------------- 53 //-------------------------------------------------------------------------
56 54
57 'value': function() { 55 'value': function() {
58 return this.record().label(); 56 return this.record().label();
59 }, 57 },
60 58
61 'setValue': function(aValue) { 59 'setValue': function(aValue) {
62 this.record().setLabel(aValue); 60 this.record().setLabel(aValue);
63 }, 61 },
64 62
65 //------------------------------------------------------------------------- 63 //-------------------------------------------------------------------------
66/* 64/*
67 'inputElement': function() { 65 'inputElement': function() {
68 return this._inputElement; 66 return this._inputElement;
69 }, 67 },
70 68
71 'setInputElement': function(aValue) { 69 'setInputElement': function(aValue) {
72 this._inputElement = aValue; 70 this._inputElement = aValue;
73 }, 71 },
74*/ 72*/
75 //------------------------------------------------------------------------- 73 //-------------------------------------------------------------------------
76 74
77 'render': function() { 75 'render': function() {
78 // Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', html:'&#160'}); 76 // Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', html:'&#160'});
79 // Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', colspan:"3", html:'&#160', children:[ 77 // Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', colspan:"3", html:'&#160', children:[
80 // {tag:'div', /*style:'border: 1px solid green;',*/ id:this.getId('title')} 78 // {tag:'div', /*style:'border: 1px solid green;',*/ id:this.getId('title')}
81 // ]}); 79 // ]});
82 // Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', html:'&#160'}); 80 // Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', html:'&#160'});
83 // 81 //
84 // this.setInputElement(new Clipperz.PM.Components.TextFormField(this.getElement('title'), {editMode:this.editMode(), value:this.value()})); 82 // this.setInputElement(new Clipperz.PM.Components.TextFormField(this.getElement('title'), {editMode:this.editMode(), value:this.value()}));
85 83
86 this.update(); 84 this.update();
87 }, 85 },
88 86
89 //------------------------------------------------------------------------- 87 //-------------------------------------------------------------------------
90/* 88/*
91 'update': function() { 89 'update': function() {
92 this.inputElement().update({value:this.value(), editMode:this.editMode()}); 90 this.inputElement().update({value:this.value(), editMode:this.editMode()});
93 }, 91 },
94 */ 92 */
95 //------------------------------------------------------------------------- 93 //-------------------------------------------------------------------------
96 94
97 'updateViewMode': function() { 95 'updateViewMode': function() {
98 this.element().update(""); 96 this.element().update("");
99 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'h2', html:this.value()}); 97 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'h2', html:this.value()});
100 }, 98 },
101 99
102 //------------------------------------------------------------------------- 100 //-------------------------------------------------------------------------
103 101
104 'updateEditMode': function() { 102 'updateEditMode': function() {
105//MochiKit.Logging.logDebug(">>> TitleComponent.updateEditMode"); 103//MochiKit.Logging.logDebug(">>> TitleComponent.updateEditMode");
106 // this.getElement('title').update(""); 104 // this.getElement('title').update("");
107 // Clipperz.YUI.DomHelper.append(this.getDom('title'), {tag:'div', id:this.getId('title_input')}); 105 // Clipperz.YUI.DomHelper.append(this.getDom('title'), {tag:'div', id:this.getId('title_input')});
108 // this.setInputElement(Clipperz.YUI.DomHelper.append(this.getDom('title_input'), {tag:'input', type:'text', value:this.value()}, true)); 106 // this.setInputElement(Clipperz.YUI.DomHelper.append(this.getDom('title_input'), {tag:'input', type:'text', value:this.value()}, true));
109 107
110 this.element().update(""); 108 this.element().update("");
111 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'input', id:this.getId('titleField'), type:'text', value:"this.value()"}); 109 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'input', id:this.getId('titleField'), type:'text', value:"this.value()"});
112 this.getElement('titleField').dom.value = this.value(); 110 this.getElement('titleField').dom.value = this.value();
113 111
114//MochiKit.Logging.logDebug("<<< TitleComponent.updateEditMode"); 112//MochiKit.Logging.logDebug("<<< TitleComponent.updateEditMode");
115 }, 113 },
116 114
117 //------------------------------------------------------------------------- 115 //-------------------------------------------------------------------------
118 116
119 'synchronizeComponentValues': function() { 117 'synchronizeComponentValues': function() {
120 var inputElement; 118 var inputElement;
121 119
122//MochiKit.Logging.logDebug(">>> TitleComponent.synchronizeComponentValues"); 120//MochiKit.Logging.logDebug(">>> TitleComponent.synchronizeComponentValues");
123 inputElement = this.element().getChildrenByTagName('input')[0]; 121 inputElement = this.element().getChildrenByTagName('input')[0];
124 122
125 if (inputElement != null) { 123 if (inputElement != null) {
126 this.setValue(inputElement.dom.value); 124 this.setValue(inputElement.dom.value);
127 } 125 }
128//MochiKit.Logging.logDebug("<<< TitleComponent.synchronizeComponentValues"); 126//MochiKit.Logging.logDebug("<<< TitleComponent.synchronizeComponentValues");
129 }, 127 },
130 128
131 //------------------------------------------------------------------------- 129 //-------------------------------------------------------------------------
132 __syntaxFix__: "syntax fix" 130 __syntaxFix__: "syntax fix"
133}); 131});
134 132
diff --git a/frontend/beta/js/Clipperz/PM/Components/TabPanel/TabPanelController.js b/frontend/beta/js/Clipperz/PM/Components/TabPanel/TabPanelController.js
index b300ba6..d30f514 100644
--- a/frontend/beta/js/Clipperz/PM/Components/TabPanel/TabPanelController.js
+++ b/frontend/beta/js/Clipperz/PM/Components/TabPanel/TabPanelController.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.TabPanel) == 'undefined') { Clipperz.PM.Components.TabPanel = {}; } 27if (typeof(Clipperz.PM.Components.TabPanel) == 'undefined') { Clipperz.PM.Components.TabPanel = {}; }
30 28
31Clipperz.PM.Components.TabPanel.TabPanelController = function(args) { 29Clipperz.PM.Components.TabPanel.TabPanelController = function(args) {
32 args = args || {}; 30 args = args || {};
33 31
34 Clipperz.PM.Components.TabPanel.TabPanelController.superclass.constructor.call(this); 32 Clipperz.PM.Components.TabPanel.TabPanelController.superclass.constructor.call(this);
35 33
36 this._name = args.name || 'undefined'; 34 this._name = args.name || 'undefined';
37 this._config = args.config; 35 this._config = args.config;
38 this._selectedTab = args.selectedTab || ((MochiKit.Base.keys(args.config).length > 0) ? MochiKit.Base.keys(args.config)[0] : null); 36 this._selectedTab = args.selectedTab || ((MochiKit.Base.keys(args.config).length > 0) ? MochiKit.Base.keys(args.config)[0] : null);
39 37
40 this._tabs = {}; 38 this._tabs = {};
41 this._panels = {}; 39 this._panels = {};
42 40
43 Clipperz.NotificationCenter.register(null, 'selectTab', this, 'handleSelectTabNotification'); 41 Clipperz.NotificationCenter.register(null, 'selectTab', this, 'handleSelectTabNotification');
44 return this; 42 return this;
45} 43}
46 44
47//============================================================================= 45//=============================================================================
48 46
49YAHOO.extendX(Clipperz.PM.Components.TabPanel.TabPanelController, YAHOO.ext.util.Observable, { 47YAHOO.extendX(Clipperz.PM.Components.TabPanel.TabPanelController, YAHOO.ext.util.Observable, {
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 50
53 'name': function() { 51 'name': function() {
54 return this._name; 52 return this._name;
55 }, 53 },
56 54
57 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
58 56
59 'tabs': function() { 57 'tabs': function() {
60 return this._tabs; 58 return this._tabs;
61 }, 59 },
62 60
63 //------------------------------------------------------------------------- 61 //-------------------------------------------------------------------------
64 62
65 'panels': function() { 63 'panels': function() {
66 return this._panels; 64 return this._panels;
67 }, 65 },
68 66
69 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
70 68
71 'config': function() { 69 'config': function() {
72 return this._config; 70 return this._config;
73 }, 71 },
74 72
75 //------------------------------------------------------------------------- 73 //-------------------------------------------------------------------------
76 74
77 'selectedTab': function() { 75 'selectedTab': function() {
78 return this._selectedTab; 76 return this._selectedTab;
79 }, 77 },
80 78
81 'setSelectedTab': function(aValue) { 79 'setSelectedTab': function(aValue) {
82 this._selectedTab = aValue; 80 this._selectedTab = aValue;
83 }, 81 },
84 82
85 //------------------------------------------------------------------------- 83 //-------------------------------------------------------------------------
86 84
87 'setUp': function() { 85 'setUp': function() {
88 vartabId; 86 vartabId;
89 87
90//MochiKit.Logging.logDebug(">>> TabPanelController.setUp - config: " + Clipperz.Base.serializeJSON(this.config())); 88//MochiKit.Logging.logDebug(">>> TabPanelController.setUp - config: " + Clipperz.Base.serializeJSON(this.config()));
91 for (tabId in this.config()) { 89 for (tabId in this.config()) {
92 vartabElement; 90 vartabElement;
93 varpanelElement; 91 varpanelElement;
94 92
95//MochiKit.Logging.logDebug("--- TabPanelController.setUp - tabId: " + tabId); 93//MochiKit.Logging.logDebug("--- TabPanelController.setUp - tabId: " + tabId);
96//MochiKit.Logging.logDebug("--- TabPanelController.setUp - panelId: " + this.config()[tabId]); 94//MochiKit.Logging.logDebug("--- TabPanelController.setUp - panelId: " + this.config()[tabId]);
97 tabElement = YAHOO.ext.Element.get(tabId); 95 tabElement = YAHOO.ext.Element.get(tabId);
98 tabElement.addClassOnOver("hover"); 96 tabElement.addClassOnOver("hover");
99 MochiKit.Signal.connect(tabId, 'onclick', this, 'selectTabHandler'); 97 MochiKit.Signal.connect(tabId, 'onclick', this, 'selectTabHandler');
100 98
101 panelElement = YAHOO.ext.Element.get(this.config()[tabId]); 99 panelElement = YAHOO.ext.Element.get(this.config()[tabId]);
102 100
103 this._tabs[tabId] = tabElement; 101 this._tabs[tabId] = tabElement;
104 this._panels[tabId] = panelElement; 102 this._panels[tabId] = panelElement;
105 103
106 if (tabId == this.selectedTab()) { 104 if (tabId == this.selectedTab()) {
107 tabElement.addClass('selectedTab'); 105 tabElement.addClass('selectedTab');
108 panelElement.addClass('selectedPanel'); 106 panelElement.addClass('selectedPanel');
109 } else { 107 } else {
110 panelElement.addClass('hiddenPanel'); 108 panelElement.addClass('hiddenPanel');
111 } 109 }
112 } 110 }
113//MochiKit.Logging.logDebug("<<< TabPanelController.setUp"); 111//MochiKit.Logging.logDebug("<<< TabPanelController.setUp");
114 }, 112 },
115 113
116 //------------------------------------------------------------------------- 114 //-------------------------------------------------------------------------
117 115
118 'selectTab': function(aTab) { 116 'selectTab': function(aTab) {
119 if (aTab != this.selectedTab()) { 117 if (aTab != this.selectedTab()) {
120 this.tabs()[this.selectedTab()].removeClass('selectedTab'); 118 this.tabs()[this.selectedTab()].removeClass('selectedTab');
121 this.panels()[this.selectedTab()].removeClass('selectedPanel').addClass('hiddenPanel'); 119 this.panels()[this.selectedTab()].removeClass('selectedPanel').addClass('hiddenPanel');
122 120
123 this.tabs()[aTab].addClass('selectedTab'); 121 this.tabs()[aTab].addClass('selectedTab');
124 this.panels()[aTab].addClass('selectedPanel').removeClass('hiddenPanel'); 122 this.panels()[aTab].addClass('selectedPanel').removeClass('hiddenPanel');
125 123
126 this.setSelectedTab(aTab); 124 this.setSelectedTab(aTab);
127 125
128 Clipperz.NotificationCenter.notify(this, 'tabSelected', aTab); 126 Clipperz.NotificationCenter.notify(this, 'tabSelected', aTab);
129 } 127 }
130 }, 128 },
131 129
132 //------------------------------------------------------------------------- 130 //-------------------------------------------------------------------------
133 131
134 'selectTabHandler': function(anEvent) { 132 'selectTabHandler': function(anEvent) {
135 this.selectTab(anEvent.src().id); 133 this.selectTab(anEvent.src().id);
136 }, 134 },
137 135
138 //------------------------------------------------------------------------- 136 //-------------------------------------------------------------------------
139 137
140 'handleSelectTabNotification': function(aNotificationEvent) { 138 'handleSelectTabNotification': function(aNotificationEvent) {
141 var parameters; 139 var parameters;
142 var splittedParamters; 140 var splittedParamters;
143 vartargetTabPanel; 141 vartargetTabPanel;
144 142
145 parameters = aNotificationEvent.parameters(); 143 parameters = aNotificationEvent.parameters();
146 splittedParamters = parameters.split('.'); 144 splittedParamters = parameters.split('.');
147 targetTabPanel = splittedParamters[0]; 145 targetTabPanel = splittedParamters[0];
148 if (targetTabPanel == this.name()) { 146 if (targetTabPanel == this.name()) {
149 this.selectTab(splittedParamters[1]) 147 this.selectTab(splittedParamters[1])
150 } 148 }
diff --git a/frontend/beta/js/Clipperz/PM/Components/TextFormField.js b/frontend/beta/js/Clipperz/PM/Components/TextFormField.js
index c6f0349..2b383ce 100644
--- a/frontend/beta/js/Clipperz/PM/Components/TextFormField.js
+++ b/frontend/beta/js/Clipperz/PM/Components/TextFormField.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29 27
30Clipperz.PM.Components.TextFormField = function(anElement, args) { 28Clipperz.PM.Components.TextFormField = function(anElement, args) {
31 args = args || {}; 29 args = args || {};
32 30
33//MochiKit.Logging.logDebug(">>> new TextFormField"); 31//MochiKit.Logging.logDebug(">>> new TextFormField");
34 Clipperz.PM.Components.TextFormField.superclass.constructor.call(this, args); 32 Clipperz.PM.Components.TextFormField.superclass.constructor.call(this, args);
35 33
36 this._element = anElement; 34 this._element = anElement;
37 this._editMode = args.editMode || 'VIEW'; 35 this._editMode = args.editMode || 'VIEW';
38 this._value = args.value || ""; 36 this._value = args.value || "";
39 this._inputElement = null; 37 this._inputElement = null;
40 this._wrapper = null; 38 this._wrapper = null;
41 this._multiline = args.multiline || false; 39 this._multiline = args.multiline || false;
42 40
43 //this.multiline = args.multiline || true; 41 //this.multiline = args.multiline || true;
44 //this.editing = true; 42 //this.editing = true;
45 //this.completeOnBlur = true; 43 //this.completeOnBlur = true;
46 //this.autoSizeTask = new YAHOO.ext.util.DelayedTask(this.autoSize, this); 44 //this.autoSizeTask = new YAHOO.ext.util.DelayedTask(this.autoSize, this);
47 //this.textSizeEl = Clipperz.YUI.DomHelper.append(document.body, { 45 //this.textSizeEl = Clipperz.YUI.DomHelper.append(document.body, {
48 // tag: 'div', 46 // tag: 'div',
49 // cls: 'yinline-editor-sizer ' + (this.cls || '') 47 // cls: 'yinline-editor-sizer ' + (this.cls || '')
50 //}); 48 //});
51 49
52 this.render(); 50 this.render();
53//MochiKit.Logging.logDebug("<<< new TextFormField"); 51//MochiKit.Logging.logDebug("<<< new TextFormField");
54 52
55 return this; 53 return this;
56}; 54};
57 55
58YAHOO.extendX(Clipperz.PM.Components.TextFormField, Clipperz.PM.Components.BaseComponent, { 56YAHOO.extendX(Clipperz.PM.Components.TextFormField, Clipperz.PM.Components.BaseComponent, {
59 57
60 'toString': function() { 58 'toString': function() {
61 return "Clipperz.PM.Components.TextFormField"; 59 return "Clipperz.PM.Components.TextFormField";
62 }, 60 },
63 61
64 //----------------------------------------------------- 62 //-----------------------------------------------------
65 63
66 'value': function() { 64 'value': function() {
67 if (this.inputElement() != null) { 65 if (this.inputElement() != null) {
68 this._value = this.inputElement().dom.value; 66 this._value = this.inputElement().dom.value;
69 } 67 }
70 68
71 return this._value; 69 return this._value;
72 // return this.inlineEditor().getValue(); 70 // return this.inlineEditor().getValue();
73 }, 71 },
74 72
75 'setValue': function(aValue) { 73 'setValue': function(aValue) {
76 this._value = aValue; 74 this._value = aValue;
77 // this.getElement('viewComponent_Content').update(aValue); 75 // this.getElement('viewComponent_Content').update(aValue);
78 // this.inlineEditor().setValue(aValue); 76 // this.inlineEditor().setValue(aValue);
79 }, 77 },
80 78
81 //----------------------------------------------------- 79 //-----------------------------------------------------
82 80
83 'multiline': function() { 81 'multiline': function() {
84 return this._multiline; 82 return this._multiline;
85 }, 83 },
86 84
87 //----------------------------------------------------- 85 //-----------------------------------------------------
88 86
89 'editMode': function() { 87 'editMode': function() {
90 return this._editMode; 88 return this._editMode;
91 }, 89 },
92 90
93 'setEditMode': function(aValue) { 91 'setEditMode': function(aValue) {
94 this._editMode = aValue; 92 this._editMode = aValue;
95 }, 93 },
96 94
97 //----------------------------------------------------- 95 //-----------------------------------------------------
98 96
99 'inputElement': function() { 97 'inputElement': function() {
100 return this._inputElement; 98 return this._inputElement;
101 }, 99 },
102 100
103 'setInputElement': function(aValue) { 101 'setInputElement': function(aValue) {
104 this._inputElement = aValue; 102 this._inputElement = aValue;
105 }, 103 },
106 104
107 //----------------------------------------------------- 105 //-----------------------------------------------------
108 106
109 'on': function(anEventName, anHandler, aScope, shouldOverride) { 107 'on': function(anEventName, anHandler, aScope, shouldOverride) {
110//MochiKit.Logging.logDebug(">>> TextFormField.on - inputElement: " + this.inputElement()); 108//MochiKit.Logging.logDebug(">>> TextFormField.on - inputElement: " + this.inputElement());
111 return this.inputElement().on(anEventName, anHandler, aScope, shouldOverride); 109 return this.inputElement().on(anEventName, anHandler, aScope, shouldOverride);
112//MochiKit.Logging.logDebug("<<< TextFormField.on - inputElement: " + this.inputElement()); 110//MochiKit.Logging.logDebug("<<< TextFormField.on - inputElement: " + this.inputElement());
113 }, 111 },
114 112
115 //----------------------------------------------------- 113 //-----------------------------------------------------
116 114
117 'wrapper': function() { 115 'wrapper': function() {
118 return this._wrapper; 116 return this._wrapper;
119 }, 117 },
120 118
121 //----------------------------------------------------- 119 //-----------------------------------------------------
122 120
123 'render': function() { 121 'render': function() {
124 var editModeConfiguration; 122 var editModeConfiguration;
125 var viewModeConfiguration; 123 var viewModeConfiguration;
126 124
127 editModeConfiguration = {tag:'div', id:this.getId('editComponent'), children:[]}; 125 editModeConfiguration = {tag:'div', id:this.getId('editComponent'), children:[]};
128 if (this.multiline() == false) { 126 if (this.multiline() == false) {
129 editModeConfiguration.children.push({tag:'input', type:'text', id:this.getId('editComponent_input'), value:"this.value(1)"}); 127 editModeConfiguration.children.push({tag:'input', type:'text', id:this.getId('editComponent_input'), value:"this.value(1)"});
130 } else { 128 } else {
131 editModeConfiguration.children.push({tag:'textarea', id:this.getId('editComponent_input'), html:"this.value(2)"}); 129 editModeConfiguration.children.push({tag:'textarea', id:this.getId('editComponent_input'), html:"this.value(2)"});
132 } 130 }
133 131
134 viewModeConfiguration = {tag:'div', id:this.getId('viewComponent'), /*style:'border: 1px solid blue;',*/ children:[ 132 viewModeConfiguration = {tag:'div', id:this.getId('viewComponent'), /*style:'border: 1px solid blue;',*/ children:[
135 {tag:'span', id:this.getId('viewComponent_Content'), html:this.value()} 133 {tag:'span', id:this.getId('viewComponent_Content'), html:this.value()}
136 ]} 134 ]}
137 135
138//MochiKit.Logging.logDebug(">>> TextFormField.render"); 136//MochiKit.Logging.logDebug(">>> TextFormField.render");
139 this._wrapper = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', id:this.getId('wrapper'), children:[ 137 this._wrapper = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', id:this.getId('wrapper'), children:[
140 {tag:'div', id:this.getId('editModeBox'), children:[editModeConfiguration]}, 138 {tag:'div', id:this.getId('editModeBox'), children:[editModeConfiguration]},
141 {tag:'div', id:this.getId('viewModeBox'), children:[viewModeConfiguration]} 139 {tag:'div', id:this.getId('viewModeBox'), children:[viewModeConfiguration]}
142 ]}, true); 140 ]}, true);
143 141
144 this.getElement('editModeBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY); 142 this.getElement('editModeBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
145 this.getElement('viewModeBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY); 143 this.getElement('viewModeBox').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
146 144
147 this.getElement('editComponent_input').dom.value = this.value(); 145 this.getElement('editComponent_input').dom.value = this.value();
148 this.setInputElement(this.getElement('editComponent_input')); 146 this.setInputElement(this.getElement('editComponent_input'));
149 147
150 this.update(); 148 this.update();
diff --git a/frontend/beta/js/Clipperz/PM/Connection.js b/frontend/beta/js/Clipperz/PM/Connection.js
index e81c7a6..613e7d6 100644
--- a/frontend/beta/js/Clipperz/PM/Connection.js
+++ b/frontend/beta/js/Clipperz/PM/Connection.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28 26
29//----------------------------------------------------------------------------- 27//-----------------------------------------------------------------------------
30// 28//
31 // Abstract C O N N E C T I O N class 29 // Abstract C O N N E C T I O N class
32// 30//
33//----------------------------------------------------------------------------- 31//-----------------------------------------------------------------------------
34 32
35Clipperz.PM.Connection = function (args) { 33Clipperz.PM.Connection = function (args) {
36 args = args || {}; 34 args = args || {};
37 35
38 this._user = args.user; 36 this._user = args.user;
39 this._clipperz_pm_crypto_version = null; 37 this._clipperz_pm_crypto_version = null;
40 this._connectionId = null; 38 this._connectionId = null;
41 this._oneTimePassword = null; 39 this._oneTimePassword = null;
42 40
43 return this; 41 return this;
44} 42}
45 43
46Clipperz.PM.Connection.prototype = MochiKit.Base.update(null, { 44Clipperz.PM.Connection.prototype = MochiKit.Base.update(null, {
47 45
48 'user': function() { 46 'user': function() {
49 return this._user; 47 return this._user;
50 }, 48 },
51 49
52 'toString': function() { 50 'toString': function() {
53 return "Connection [" + this.version() + "] - user: " + this.user(); 51 return "Connection [" + this.version() + "] - user: " + this.user();
54 }, 52 },
55 53
56 //========================================================================= 54 //=========================================================================
57 55
58 'version': function() { 56 'version': function() {
59 throw Clipperz.Base.exception.AbstractMethod; 57 throw Clipperz.Base.exception.AbstractMethod;
60 }, 58 },
61 59
62 'clipperz_pm_crypto_version': function() { 60 'clipperz_pm_crypto_version': function() {
63 if (this._clipperz_pm_crypto_version == null) { 61 if (this._clipperz_pm_crypto_version == null) {
64 var connectionVersions; 62 var connectionVersions;
65 varversions; 63 varversions;
66 varversion; 64 varversion;
67 var i, c; 65 var i, c;
68 66
69 version = null; 67 version = null;
70 connectionVersions = Clipperz.PM.Crypto.communicationProtocol.versions; 68 connectionVersions = Clipperz.PM.Crypto.communicationProtocol.versions;
71 versions = MochiKit.Base.keys(connectionVersions); 69 versions = MochiKit.Base.keys(connectionVersions);
72 c = versions.length; 70 c = versions.length;
73 for (i=0; i<c; i++) { 71 for (i=0; i<c; i++) {
74 if (! (versions[i] == 'current')) { 72 if (! (versions[i] == 'current')) {
75 if (this instanceof connectionVersions[versions[i]]) { 73 if (this instanceof connectionVersions[versions[i]]) {
76 version = versions[i]; 74 version = versions[i];
77 }; 75 };
78 } 76 }
79 } 77 }
80 78
81 this._clipperz_pm_crypto_version = version; 79 this._clipperz_pm_crypto_version = version;
82 } 80 }
83 81
84 return this._clipperz_pm_crypto_version; 82 return this._clipperz_pm_crypto_version;
85 }, 83 },
86 84
87 //------------------------------------------------------------------------- 85 //-------------------------------------------------------------------------
88 86
89 'defaultErrorHandler': function(anErrorString, anException) { 87 'defaultErrorHandler': function(anErrorString, anException) {
90MochiKit.Logging.logError("### Connection.defaultErrorHandler: " + anErrorString + " (" + anException + ")"); 88MochiKit.Logging.logError("### Connection.defaultErrorHandler: " + anErrorString + " (" + anException + ")");
91 }, 89 },
92 90
93 //------------------------------------------------------------------------- 91 //-------------------------------------------------------------------------
94 92
95 'login': function(someArguments, aCallback) { 93 'login': function(someArguments, aCallback) {
96 throw Clipperz.Base.exception.AbstractMethod; 94 throw Clipperz.Base.exception.AbstractMethod;
97 }, 95 },
98 96
99 //------------------------------------------------------------------------- 97 //-------------------------------------------------------------------------
100 98
101 'message': function(someArguments, aCallback) { 99 'message': function(someArguments, aCallback) {
102 throw Clipperz.Base.exception.AbstractMethod; 100 throw Clipperz.Base.exception.AbstractMethod;
103 }, 101 },
104 102
105 //------------------------------------------------------------------------- 103 //-------------------------------------------------------------------------
106 104
107 'sharedSecret': function() { 105 'sharedSecret': function() {
108 throw Clipperz.Base.exception.AbstractMethod; 106 throw Clipperz.Base.exception.AbstractMethod;
109 }, 107 },
110 108
111 'serverSideUserCredentials': function() { 109 'serverSideUserCredentials': function() {
112 throw Clipperz.Base.exception.AbstractMethod; 110 throw Clipperz.Base.exception.AbstractMethod;
113 }, 111 },
114 112
115 //========================================================================= 113 //=========================================================================
116 114
117 'connectionId': function() { 115 'connectionId': function() {
118 return this._connectionId; 116 return this._connectionId;
119 }, 117 },
120 118
121 'setConnectionId': function(aValue) { 119 'setConnectionId': function(aValue) {
122 this._connectionId = aValue; 120 this._connectionId = aValue;
123 }, 121 },
124 122
125 //========================================================================= 123 //=========================================================================
126 124
127 'oneTimePassword': function() { 125 'oneTimePassword': function() {
128 return this._oneTimePassword; 126 return this._oneTimePassword;
129 }, 127 },
130 128
131 'setOneTimePassword': function(aValue) { 129 'setOneTimePassword': function(aValue) {
132 this._oneTimePassword = aValue; 130 this._oneTimePassword = aValue;
133 }, 131 },
134 132
135 //========================================================================= 133 //=========================================================================
136 __syntaxFix__: "syntax fix" 134 __syntaxFix__: "syntax fix"
137 135
138} 136}
139); 137);
140 138
141 139
142if (typeof(Clipperz.PM.Connection.SRP) == 'undefined') { Clipperz.PM.Connection.SRP = {}; } 140if (typeof(Clipperz.PM.Connection.SRP) == 'undefined') { Clipperz.PM.Connection.SRP = {}; }
143//----------------------------------------------------------------------------- 141//-----------------------------------------------------------------------------
144// 142//
145 // S R P [ 1 . 0 ] C O N N E C T I O N class 143 // S R P [ 1 . 0 ] C O N N E C T I O N class
146// 144//
147//----------------------------------------------------------------------------- 145//-----------------------------------------------------------------------------
148 146
149Clipperz.PM.Connection.SRP['1.0'] = function (args) { 147Clipperz.PM.Connection.SRP['1.0'] = function (args) {
150 args = args || {}; 148 args = args || {};
diff --git a/frontend/beta/js/Clipperz/PM/Crypto.js b/frontend/beta/js/Clipperz/PM/Crypto.js
index 6e9608c..ad16ff0 100644
--- a/frontend/beta/js/Clipperz/PM/Crypto.js
+++ b/frontend/beta/js/Clipperz/PM/Crypto.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Crypto) == 'undefined') { Clipperz.PM.Crypto = {}; } 26if (typeof(Clipperz.PM.Crypto) == 'undefined') { Clipperz.PM.Crypto = {}; }
29 27
30Clipperz.PM.Crypto.VERSION = "0.2"; 28Clipperz.PM.Crypto.VERSION = "0.2";
31Clipperz.PM.Crypto.NAME = "Clipperz.PM.Crypto"; 29Clipperz.PM.Crypto.NAME = "Clipperz.PM.Crypto";
32 30
33MochiKit.Base.update(Clipperz.PM.Crypto, { 31MochiKit.Base.update(Clipperz.PM.Crypto, {
34 32
35 '__repr__': function () { 33 '__repr__': function () {
36 return "[" + this.NAME + " " + this.VERSION + "]"; 34 return "[" + this.NAME + " " + this.VERSION + "]";
37 }, 35 },
38 36
39 //------------------------------------------------------------------------- 37 //-------------------------------------------------------------------------
40 38
41 'toString': function () { 39 'toString': function () {
42 return this.__repr__(); 40 return this.__repr__();
43 }, 41 },
44 42
45 //------------------------------------------------------------------------- 43 //-------------------------------------------------------------------------
46 44
47 'communicationProtocol': { 45 'communicationProtocol': {
48 'currentVersion': '0.2', 46 'currentVersion': '0.2',
49 'versions': { 47 'versions': {
50 '0.1': Clipperz.PM.Connection.SRP['1.0'],//Clipperz.Crypto.SRP.versions['1.0'].Connection, 48 '0.1': Clipperz.PM.Connection.SRP['1.0'],//Clipperz.Crypto.SRP.versions['1.0'].Connection,
51 '0.2': Clipperz.PM.Connection.SRP['1.1']//Clipperz.Crypto.SRP.versions['1.1'].Connection, 49 '0.2': Clipperz.PM.Connection.SRP['1.1']//Clipperz.Crypto.SRP.versions['1.1'].Connection,
52 }, 50 },
53 'fallbackVersions': { 51 'fallbackVersions': {
54 'current':'0.1', 52 'current':'0.1',
55 '0.2': '0.1', 53 '0.2': '0.1',
56 '0.1': null 54 '0.1': null
57 } 55 }
58 }, 56 },
59 57
60 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
61 59
62 'encryptingFunctions': { 60 'encryptingFunctions': {
63 'currentVersion': '0.3', 61 'currentVersion': '0.3',
64 'versions': { 62 'versions': {
65 63
66 //##################################################################### 64 //#####################################################################
67 65
68 '0.1': { 66 '0.1': {
69 'encrypt': function(aKey, aValue) { 67 'encrypt': function(aKey, aValue) {
70 return Clipperz.Crypto.Base.encryptUsingSecretKey(aKey, Clipperz.Base.serializeJSON(aValue)); 68 return Clipperz.Crypto.Base.encryptUsingSecretKey(aKey, Clipperz.Base.serializeJSON(aValue));
71 }, 69 },
72 70
73 'deferredEncrypt': function(aKey, aValue) { 71 'deferredEncrypt': function(aKey, aValue) {
74 var deferredResult; 72 var deferredResult;
75 73
76 deferredResult = new MochiKit.Async.Deferred(); 74 deferredResult = new MochiKit.Async.Deferred();
77 deferredResult.addCallback(Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].encrypt, aKey, aValue); 75 deferredResult.addCallback(Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].encrypt, aKey, aValue);
78 deferredResult.callback(); 76 deferredResult.callback();
79 77
80 return deferredResult; 78 return deferredResult;
81 }, 79 },
82 80
83 'decrypt': function(aKey, aValue) { 81 'decrypt': function(aKey, aValue) {
84 var result; 82 var result;
85 83
86 if (aValue != null) { 84 if (aValue != null) {
87 result = Clipperz.Base.evalJSON(Clipperz.Crypto.Base.decryptUsingSecretKey(aKey, aValue)); 85 result = Clipperz.Base.evalJSON(Clipperz.Crypto.Base.decryptUsingSecretKey(aKey, aValue));
88 } else { 86 } else {
89 result = null; 87 result = null;
90 } 88 }
91 89
92 return result; 90 return result;
93 }, 91 },
94 92
95 'deferredDecrypt': function(aKey, aValue) { 93 'deferredDecrypt': function(aKey, aValue) {
96 var deferredResult; 94 var deferredResult;
97 95
98 deferredResult = new MochiKit.Async.Deferred(); 96 deferredResult = new MochiKit.Async.Deferred();
99 deferredResult.addCallback(Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].decrypt, aKey, aValue); 97 deferredResult.addCallback(Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].decrypt, aKey, aValue);
100 deferredResult.callback(); 98 deferredResult.callback();
101 99
102 return deferredResult; 100 return deferredResult;
103 }, 101 },
104 102
105 'hash': function(aValue) { 103 'hash': function(aValue) {
106 var result; 104 var result;
107 var strngResult; 105 var strngResult;
108 106
109 stringResult = Clipperz.Crypto.Base.computeHashValue(aValue.asString()); //!!!!!!! 107 stringResult = Clipperz.Crypto.Base.computeHashValue(aValue.asString()); //!!!!!!!
110 result = new Clipperz.ByteArray("0x" + stringResult); 108 result = new Clipperz.ByteArray("0x" + stringResult);
111 109
112 return result; 110 return result;
113 } 111 }
114 }, 112 },
115 113
116 //##################################################################### 114 //#####################################################################
117 115
118 '0.2': { 116 '0.2': {
119 'encrypt': function(aKey, aValue, aNonce) { 117 'encrypt': function(aKey, aValue, aNonce) {
120 var result; 118 var result;
121 varkey, value; 119 varkey, value;
122 var dataToEncrypt; 120 var dataToEncrypt;
123 var encryptedData; 121 var encryptedData;
124 122
125 key = Clipperz.Crypto.SHA.sha_d256(new Clipperz.ByteArray(aKey)); 123 key = Clipperz.Crypto.SHA.sha_d256(new Clipperz.ByteArray(aKey));
126 value = new Clipperz.ByteArray(Clipperz.Base.serializeJSON(aValue)); 124 value = new Clipperz.ByteArray(Clipperz.Base.serializeJSON(aValue));
127 dataToEncrypt = Clipperz.Crypto.SHA.sha_d256(value).appendBlock(value); 125 dataToEncrypt = Clipperz.Crypto.SHA.sha_d256(value).appendBlock(value);
128 encryptedData = Clipperz.Crypto.AES.encrypt(key, dataToEncrypt, aNonce); 126 encryptedData = Clipperz.Crypto.AES.encrypt(key, dataToEncrypt, aNonce);
129 result = encryptedData.toBase64String(); 127 result = encryptedData.toBase64String();
130 128
131 return result; 129 return result;
132 }, 130 },
133 131
134 'deferredEncrypt': function(aKey, aValue, aNonce) { 132 'deferredEncrypt': function(aKey, aValue, aNonce) {
135 var deferredResult; 133 var deferredResult;
136 varkey, value; 134 varkey, value;
137 var dataToEncrypt; 135 var dataToEncrypt;
138 var encryptedData; 136 var encryptedData;
139 137
140 key = Clipperz.Crypto.SHA.sha_d256(new Clipperz.ByteArray(aKey)); 138 key = Clipperz.Crypto.SHA.sha_d256(new Clipperz.ByteArray(aKey));
141 value = new Clipperz.ByteArray(Clipperz.Base.serializeJSON(aValue)); 139 value = new Clipperz.ByteArray(Clipperz.Base.serializeJSON(aValue));
142 dataToEncrypt = Clipperz.Crypto.SHA.sha_d256(value).appendBlock(value); 140 dataToEncrypt = Clipperz.Crypto.SHA.sha_d256(value).appendBlock(value);
143 141
144 deferredResult = new MochiKit.Async.Deferred() 142 deferredResult = new MochiKit.Async.Deferred()
145 deferredResult.addCallback(Clipperz.Crypto.AES.deferredEncrypt, key, dataToEncrypt, aNonce); 143 deferredResult.addCallback(Clipperz.Crypto.AES.deferredEncrypt, key, dataToEncrypt, aNonce);
146 deferredResult.addCallback(function(aResult) { 144 deferredResult.addCallback(function(aResult) {
147 return aResult.toBase64String(); 145 return aResult.toBase64String();
148 }) 146 })
149 deferredResult.callback(); 147 deferredResult.callback();
150 148
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/DirectLogin.js b/frontend/beta/js/Clipperz/PM/DataModel/DirectLogin.js
index aee5703..c0cfa3c 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/DirectLogin.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/DirectLogin.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.DataModel.DirectLogin = function(args) { 31Clipperz.PM.DataModel.DirectLogin = function(args) {
34//MochiKit.Logging.logDebug(">>> new Clipperz.PM.DataModel.DirectLogin"); 32//MochiKit.Logging.logDebug(">>> new Clipperz.PM.DataModel.DirectLogin");
35//console.log(">>> new Clipperz.PM.DataModel.DirectLogin - args: %o", args); 33//console.log(">>> new Clipperz.PM.DataModel.DirectLogin - args: %o", args);
36//console.log("--- formData: %s", Clipperz.Base.serializeJSON(args.formData)); 34//console.log("--- formData: %s", Clipperz.Base.serializeJSON(args.formData));
37 args = args || {}; 35 args = args || {};
38 36
39//MochiKit.Logging.logDebug("--- new Clipperz.PM.DataModel.DirectLogin - args: " + Clipperz.Base.serializeJSON(MochiKit.Base.keys(args))); 37//MochiKit.Logging.logDebug("--- new Clipperz.PM.DataModel.DirectLogin - args: " + Clipperz.Base.serializeJSON(MochiKit.Base.keys(args)));
40 this._record = args.record || null; 38 this._record = args.record || null;
41 this._label = args.label || "unnamed record" 39 this._label = args.label || "unnamed record"
42 this._reference = args.reference || Clipperz.PM.Crypto.randomKey(); 40 this._reference = args.reference || Clipperz.PM.Crypto.randomKey();
43 this._favicon = args.favicon || null; 41 this._favicon = args.favicon || null;
44 this._bookmarkletVersion = args.bookmarkletVersion || "0.1"; 42 this._bookmarkletVersion = args.bookmarkletVersion || "0.1";
45 43
46 this._directLoginInputs = null; 44 this._directLoginInputs = null;
47 45
48 this._formValues = args.formValues || {}; 46 this._formValues = args.formValues || {};
49 this.setFormData(args.formData || null); 47 this.setFormData(args.formData || null);
50//console.log("=== formData: %o", this.formData()); 48//console.log("=== formData: %o", this.formData());
51 49
52 if (args.legacyBindingData == null) { 50 if (args.legacyBindingData == null) {
53 this.setBindingData(args.bindingData || null); 51 this.setBindingData(args.bindingData || null);
54 } else { 52 } else {
55 this.setLegacyBindingData(args.legacyBindingData); 53 this.setLegacyBindingData(args.legacyBindingData);
56 } 54 }
57 55
58 this._fixedFavicon = null; 56 this._fixedFavicon = null;
59 57
60 //this._formValues = args.formValues || (this.hasValuesToSet() ? {} : null); 58 //this._formValues = args.formValues || (this.hasValuesToSet() ? {} : null);
61//MochiKit.Logging.logDebug("<<< new Clipperz.PM.DataModel.DirectLogin"); 59//MochiKit.Logging.logDebug("<<< new Clipperz.PM.DataModel.DirectLogin");
62 60
63 return this; 61 return this;
64} 62}
65 63
66Clipperz.PM.DataModel.DirectLogin.prototype = MochiKit.Base.update(null, { 64Clipperz.PM.DataModel.DirectLogin.prototype = MochiKit.Base.update(null, {
67 65
68 'remove': function() { 66 'remove': function() {
69 this.record().removeDirectLogin(this); 67 this.record().removeDirectLogin(this);
70 }, 68 },
71 69
72 //------------------------------------------------------------------------- 70 //-------------------------------------------------------------------------
73 71
74 'record': function() { 72 'record': function() {
75 return this._record; 73 return this._record;
76 }, 74 },
77 75
78 //------------------------------------------------------------------------- 76 //-------------------------------------------------------------------------
79 77
80 'user': function() { 78 'user': function() {
81 return this.record().user(); 79 return this.record().user();
82 }, 80 },
83 81
84 //------------------------------------------------------------------------- 82 //-------------------------------------------------------------------------
85 83
86 'reference': function() { 84 'reference': function() {
87 return this._reference; 85 return this._reference;
88 }, 86 },
89 87
90 //------------------------------------------------------------------------- 88 //-------------------------------------------------------------------------
91 89
92 'label': function() { 90 'label': function() {
93 return this._label; 91 return this._label;
94 }, 92 },
95 93
96 'setLabel': function(aValue) { 94 'setLabel': function(aValue) {
97 this._label = aValue; 95 this._label = aValue;
98 }, 96 },
99 97
100 //------------------------------------------------------------------------- 98 //-------------------------------------------------------------------------
101 99
102 'favicon': function() { 100 'favicon': function() {
103 if (this._favicon == null) { 101 if (this._favicon == null) {
104 varactionUrl; 102 varactionUrl;
105 var hostname; 103 var hostname;
106 104
107 actionUrl = this.formData()['attributes']['action']; 105 actionUrl = this.formData()['attributes']['action'];
108 hostname = actionUrl.replace(/^https?:\/\/([^\/]*)\/.*/, '$1'); 106 hostname = actionUrl.replace(/^https?:\/\/([^\/]*)\/.*/, '$1');
109 this._favicon = "http://" + hostname + "/favicon.ico"; 107 this._favicon = "http://" + hostname + "/favicon.ico";
110 } 108 }
111 109
112 return this._favicon; 110 return this._favicon;
113 }, 111 },
114 112
115 //------------------------------------------------------------------------- 113 //-------------------------------------------------------------------------
116 114
117 'fixedFavicon': function() { 115 'fixedFavicon': function() {
118 var result; 116 var result;
119 117
120 if (this._fixedFavicon == null) { 118 if (this._fixedFavicon == null) {
121 result = this.favicon(); 119 result = this.favicon();
122 120
123 if (Clipperz_IEisBroken) { 121 if (Clipperz_IEisBroken) {
124 if (this.user().preferences().disableUnsecureFaviconLoadingForIE()) { 122 if (this.user().preferences().disableUnsecureFaviconLoadingForIE()) {
125 if (result.indexOf('https://') != 0) { 123 if (result.indexOf('https://') != 0) {
126 result = Clipperz.PM.Strings['defaultFaviconUrl_IE']; 124 result = Clipperz.PM.Strings['defaultFaviconUrl_IE'];
127 this.setFixedFavicon(result); 125 this.setFixedFavicon(result);
128 } 126 }
129 } 127 }
130 } 128 }
131 } else { 129 } else {
132 result = this._fixedFavicon; 130 result = this._fixedFavicon;
133 } 131 }
134 132
135 return result; 133 return result;
136 }, 134 },
137 135
138 'setFixedFavicon': function(aValue) { 136 'setFixedFavicon': function(aValue) {
139 this._fixedFavicon = aValue; 137 this._fixedFavicon = aValue;
140 }, 138 },
141 139
142 //------------------------------------------------------------------------- 140 //-------------------------------------------------------------------------
143 141
144 'bookmarkletVersion': function() { 142 'bookmarkletVersion': function() {
145 return this._bookmarkletVersion; 143 return this._bookmarkletVersion;
146 }, 144 },
147 145
148 'setBookmarkletVersion': function(aValue) { 146 'setBookmarkletVersion': function(aValue) {
149 this._bookmarkletVersion = aValue; 147 this._bookmarkletVersion = aValue;
150 }, 148 },
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/DirectLoginBinding.js b/frontend/beta/js/Clipperz/PM/DataModel/DirectLoginBinding.js
index 7f09bff..cef41af 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/DirectLoginBinding.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/DirectLoginBinding.js
@@ -1,110 +1,108 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.DataModel.DirectLoginBinding = function(aDirectLogin, aKey, args) { 31Clipperz.PM.DataModel.DirectLoginBinding = function(aDirectLogin, aKey, args) {
34//MochiKit.Logging.logDebug(">>> new DirectLoginBinding") 32//MochiKit.Logging.logDebug(">>> new DirectLoginBinding")
35 args = args || {}; 33 args = args || {};
36//MochiKit.Logging.logDebug("--- new DirectLoginBinding - args: " + Clipperz.Base.serializeJSON(args)); 34//MochiKit.Logging.logDebug("--- new DirectLoginBinding - args: " + Clipperz.Base.serializeJSON(args));
37 35
38 this._directLogin = aDirectLogin || args.directLogin || null; 36 this._directLogin = aDirectLogin || args.directLogin || null;
39 this._key = aKey; 37 this._key = aKey;
40 38
41 this._fieldKey = args.fieldKey || null; 39 this._fieldKey = args.fieldKey || null;
42 this._fieldName = args.fieldName || null; 40 this._fieldName = args.fieldName || null;
43//MochiKit.Logging.logDebug("<<< new DirectLoginBinding") 41//MochiKit.Logging.logDebug("<<< new DirectLoginBinding")
44 42
45 return this; 43 return this;
46} 44}
47 45
48Clipperz.PM.DataModel.DirectLoginBinding.prototype = MochiKit.Base.update(null, { 46Clipperz.PM.DataModel.DirectLoginBinding.prototype = MochiKit.Base.update(null, {
49 47
50 'directLogin': function() { 48 'directLogin': function() {
51 return this._directLogin; 49 return this._directLogin;
52 }, 50 },
53 51
54 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
55 53
56 'key': function() { 54 'key': function() {
57 return this._key; 55 return this._key;
58 }, 56 },
59 57
60 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
61 59
62 'fieldKey': function() { 60 'fieldKey': function() {
63//MochiKit.Logging.logDebug("=== Clipperz.PM.DataModel.DirectLoginBinding.fieldKey"); 61//MochiKit.Logging.logDebug("=== Clipperz.PM.DataModel.DirectLoginBinding.fieldKey");
64//MochiKit.Logging.logDebug("=== Clipperz.PM.DataModel.DirectLoginBinding.fieldKey - " + this._fieldKey); 62//MochiKit.Logging.logDebug("=== Clipperz.PM.DataModel.DirectLoginBinding.fieldKey - " + this._fieldKey);
65 return this._fieldKey; 63 return this._fieldKey;
66 }, 64 },
67 65
68 'setFieldKey': function(aValue) { 66 'setFieldKey': function(aValue) {
69 this._fieldKey = aValue; 67 this._fieldKey = aValue;
70 }, 68 },
71 69
72 'fieldName': function() { 70 'fieldName': function() {
73 return this._fieldName; 71 return this._fieldName;
74 }, 72 },
75 73
76 //------------------------------------------------------------------------- 74 //-------------------------------------------------------------------------
77 75
78 'field': function() { 76 'field': function() {
79 var result; 77 var result;
80 78
81 //MochiKit.Logging.logDebug(">>> Clipperz.PM.DataModel.DirectLoginBinding.field") 79 //MochiKit.Logging.logDebug(">>> Clipperz.PM.DataModel.DirectLoginBinding.field")
82//MochiKit.Logging.logDebug("--- Clipperz.PM.DataModel.DirectLoginBinding.field - 1 - this.fieldKey(): " + this.fieldKey()); 80//MochiKit.Logging.logDebug("--- Clipperz.PM.DataModel.DirectLoginBinding.field - 1 - this.fieldKey(): " + this.fieldKey());
83//MochiKit.Logging.logDebug("--- Clipperz.PM.DataModel.DirectLoginBinding.field - 2 - this.fieldName(): " + this.fieldName()); 81//MochiKit.Logging.logDebug("--- Clipperz.PM.DataModel.DirectLoginBinding.field - 2 - this.fieldName(): " + this.fieldName());
84 if (this.fieldKey() != null) { 82 if (this.fieldKey() != null) {
85 result = this.directLogin().record().currentVersion().fields()[this.fieldKey()]; 83 result = this.directLogin().record().currentVersion().fields()[this.fieldKey()];
86//MochiKit.Logging.logDebug("--- Clipperz.PM.DataModel.DirectLoginBinding.field - 3 - result: " + result); 84//MochiKit.Logging.logDebug("--- Clipperz.PM.DataModel.DirectLoginBinding.field - 3 - result: " + result);
87 } else if (this.fieldName() != null) { 85 } else if (this.fieldName() != null) {
88 result = this.directLogin().record().currentVersion().fieldWithName(this.fieldName()); 86 result = this.directLogin().record().currentVersion().fieldWithName(this.fieldName());
89//MochiKit.Logging.logDebug("--- Clipperz.PM.DataModel.DirectLoginBinding.field - 4 - result: " + result); 87//MochiKit.Logging.logDebug("--- Clipperz.PM.DataModel.DirectLoginBinding.field - 4 - result: " + result);
90 88
91 this.setFieldKey(result.key()); 89 this.setFieldKey(result.key());
92 } else { 90 } else {
93 result = null; 91 result = null;
94 } 92 }
95 //MochiKit.Logging.logDebug("<<< Clipperz.PM.DataModel.DirectLoginBinding.field") 93 //MochiKit.Logging.logDebug("<<< Clipperz.PM.DataModel.DirectLoginBinding.field")
96 94
97 return result; 95 return result;
98 }, 96 },
99 97
100 //------------------------------------------------------------------------- 98 //-------------------------------------------------------------------------
101 99
102 'serializedData': function() { 100 'serializedData': function() {
103 return this.fieldKey(); 101 return this.fieldKey();
104 }, 102 },
105 103
106 //------------------------------------------------------------------------- 104 //-------------------------------------------------------------------------
107 __syntaxFix__: "syntax fix" 105 __syntaxFix__: "syntax fix"
108 106
109}); 107});
110 108
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/DirectLoginInput.js b/frontend/beta/js/Clipperz/PM/DataModel/DirectLoginInput.js
index 0e2b7ad..e5e9ad5 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/DirectLoginInput.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/DirectLoginInput.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30//############################################################################# 28//#############################################################################
31 29
32Clipperz.PM.DataModel.DirectLoginInput = function(aDirectLogin, args) { 30Clipperz.PM.DataModel.DirectLoginInput = function(aDirectLogin, args) {
33 args = args || {}; 31 args = args || {};
34 32
35//console.log(">>> new DirectLoginInput - args: %o" + args); 33//console.log(">>> new DirectLoginInput - args: %o" + args);
36 this._directLogin = aDirectLogin; 34 this._directLogin = aDirectLogin;
37 this._args = args; 35 this._args = args;
38 36
39 return this; 37 return this;
40} 38}
41 39
42Clipperz.PM.DataModel.DirectLoginInput.prototype = MochiKit.Base.update(null, { 40Clipperz.PM.DataModel.DirectLoginInput.prototype = MochiKit.Base.update(null, {
43 41
44 'directLogin': function() { 42 'directLogin': function() {
45 return this._directLogin; 43 return this._directLogin;
46 }, 44 },
47 45
48 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
49 47
50 'args': function() { 48 'args': function() {
51 return this._args; 49 return this._args;
52 }, 50 },
53 51
54 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
55 53
56 'name': function() { 54 'name': function() {
57 return this.args()['name']; 55 return this.args()['name'];
58 }, 56 },
59 57
60 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
61 59
62 'type': function() { 60 'type': function() {
63 var result; 61 var result;
64 62
65 result = this.args()['type']; 63 result = this.args()['type'];
66 64
67 if (result != null) { 65 if (result != null) {
68 result = result.toLowerCase(); 66 result = result.toLowerCase();
69 } 67 }
70 return result; 68 return result;
71 }, 69 },
72 70
73 //------------------------------------------------------------------------- 71 //-------------------------------------------------------------------------
74 72
75 'value': function() { 73 'value': function() {
76 return this.args()['value']; 74 return this.args()['value'];
77 }, 75 },
78 76
79 //------------------------------------------------------------------------- 77 //-------------------------------------------------------------------------
80 78
81 'formConfiguration': function() { 79 'formConfiguration': function() {
82 var result; 80 var result;
83 81
84//MochiKit.Logging.logDebug(">>> DirectLoginInput.formConfiguration - " + this.name()); 82//MochiKit.Logging.logDebug(">>> DirectLoginInput.formConfiguration - " + this.name());
85 if (this.shouldSetValue()) { 83 if (this.shouldSetValue()) {
86//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 1"); 84//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 1");
87 switch (this.type()) { 85 switch (this.type()) {
88 case 'select': 86 case 'select':
89 var currentValue; 87 var currentValue;
90 var options; 88 var options;
91 89
92//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2"); 90//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2");
93 currentValue = this.directLogin().formValues()[this.name()]; 91 currentValue = this.directLogin().formValues()[this.name()];
94//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.1"); 92//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.1");
95 options = this.args()['options']; 93 options = this.args()['options'];
96//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.2"); 94//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.2");
97 95
98 result = MochiKit.DOM.SELECT({name:this.name()}, 96 result = MochiKit.DOM.SELECT({name:this.name()},
99 MochiKit.Base.map(function(anOption) { 97 MochiKit.Base.map(function(anOption) {
100 var options; 98 var options;
101 99
102//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.3"); 100//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.3");
103 //TODO: remove the value: field and replace it with element.dom.value = <some value> 101 //TODO: remove the value: field and replace it with element.dom.value = <some value>
104 options = {value:anOption['value']}; 102 options = {value:anOption['value']};
105//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.4"); 103//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.4");
106 if (currentValue == anOption['value']) { 104 if (currentValue == anOption['value']) {
107//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.5"); 105//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.5");
108 options.selected = true; 106 options.selected = true;
109//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.6"); 107//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.6");
110 } 108 }
111//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.7"); 109//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.7");
112 110
113 return MochiKit.DOM.OPTION(options, anOption['label']) 111 return MochiKit.DOM.OPTION(options, anOption['label'])
114 }, options) 112 }, options)
115 ) 113 )
116//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.8"); 114//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 2.8");
117 break; 115 break;
118 case 'checkbox': 116 case 'checkbox':
119 var options; 117 var options;
120 118
121//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 3"); 119//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 3");
122 options = {type:'checkbox', name: this.name()}; 120 options = {type:'checkbox', name: this.name()};
123 if (this.directLogin().formValues()[this.name()] == true) { 121 if (this.directLogin().formValues()[this.name()] == true) {
124 options['checked'] = true; 122 options['checked'] = true;
125 }; 123 };
126 124
127 result = MochiKit.DOM.INPUT(options, null); 125 result = MochiKit.DOM.INPUT(options, null);
128 break; 126 break;
129 case 'radio': 127 case 'radio':
130 var currentName; 128 var currentName;
131 var currentValue; 129 var currentValue;
132 var options; 130 var options;
133 131
134//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 4"); 132//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 4");
135 currentName = this.name(); 133 currentName = this.name();
136//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 4.1"); 134//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 4.1");
137 currentValue = this.directLogin().formValues()[this.name()]; 135 currentValue = this.directLogin().formValues()[this.name()];
138//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 4.2"); 136//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 4.2");
139 options = this.args()['options']; 137 options = this.args()['options'];
140//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 4.3"); 138//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 4.3");
141 139
142 result = MochiKit.DOM.DIV(null, 140 result = MochiKit.DOM.DIV(null,
143 MochiKit.Base.map(function(anOption) { 141 MochiKit.Base.map(function(anOption) {
144 var options; 142 var options;
145 var isChecked; 143 var isChecked;
146 var inputNode; 144 var inputNode;
147 var divNode; 145 var divNode;
148 146
149//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 4.4"); 147//MochiKit.Logging.logDebug("--- DirectLoginInput.formConfiguration - 4.4");
150 //TODO: remove the value: field and replace it with element.dom.value = <some value> 148 //TODO: remove the value: field and replace it with element.dom.value = <some value>
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/DirectLoginReference.js b/frontend/beta/js/Clipperz/PM/DataModel/DirectLoginReference.js
index 2be7d58..236d7c9 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/DirectLoginReference.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/DirectLoginReference.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.DataModel.DirectLoginReference = function(args) { 31Clipperz.PM.DataModel.DirectLoginReference = function(args) {
34 args = args || {}; 32 args = args || {};
35 33
36//MochiKit.Logging.logDebug(">>> new DirectLoginReference: " + Clipperz.Base.serializeJSON(MochiKit.Base.keys(args))); 34//MochiKit.Logging.logDebug(">>> new DirectLoginReference: " + Clipperz.Base.serializeJSON(MochiKit.Base.keys(args)));
37//MochiKit.Logging.logDebug(">>> new DirectLoginReference - record: " + args.record); 35//MochiKit.Logging.logDebug(">>> new DirectLoginReference - record: " + args.record);
38 this._user = args.user; 36 this._user = args.user;
39 37
40 if (args.directLogin != null) { 38 if (args.directLogin != null) {
41 this._reference = args.directLogin.reference(); 39 this._reference = args.directLogin.reference();
42 this._recordReference = args.directLogin.record().reference(); 40 this._recordReference = args.directLogin.record().reference();
43 this._label = args.directLogin.label(); 41 this._label = args.directLogin.label();
44 this._favicon = args.directLogin.favicon() || null; 42 this._favicon = args.directLogin.favicon() || null;
45 43
46 this._directLogin = args.directLogin; 44 this._directLogin = args.directLogin;
47 this._record = args.directLogin.record(); 45 this._record = args.directLogin.record();
48 } else { 46 } else {
49 this._reference = args.reference; 47 this._reference = args.reference;
50 this._recordReference = args.record; 48 this._recordReference = args.record;
51 this._label = args.label; 49 this._label = args.label;
52 this._favicon = args.favicon || null; 50 this._favicon = args.favicon || null;
53 51
54 this._directLogin = null; 52 this._directLogin = null;
55 this._record = null; 53 this._record = null;
56 } 54 }
57 55
58 this._fixedFavicon = null; 56 this._fixedFavicon = null;
59 57
60 return this; 58 return this;
61} 59}
62 60
63Clipperz.PM.DataModel.DirectLoginReference.prototype = MochiKit.Base.update(null, { 61Clipperz.PM.DataModel.DirectLoginReference.prototype = MochiKit.Base.update(null, {
64 62
65 'user': function() { 63 'user': function() {
66 return this._user; 64 return this._user;
67 }, 65 },
68 66
69 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
70 68
71 'reference': function() { 69 'reference': function() {
72 return this._reference; 70 return this._reference;
73 }, 71 },
74 72
75 //------------------------------------------------------------------------- 73 //-------------------------------------------------------------------------
76 74
77 'synchronizeValues': function(aDirectLogin) { 75 'synchronizeValues': function(aDirectLogin) {
78 this._label = aDirectLogin.label(); 76 this._label = aDirectLogin.label();
79 this._favicon = aDirectLogin.favicon(); 77 this._favicon = aDirectLogin.favicon();
80 }, 78 },
81 79
82 //------------------------------------------------------------------------- 80 //-------------------------------------------------------------------------
83 81
84 'label': function() { 82 'label': function() {
85 return this._label; 83 return this._label;
86 }, 84 },
87 85
88 //------------------------------------------------------------------------- 86 //-------------------------------------------------------------------------
89 87
90 'recordReference': function() { 88 'recordReference': function() {
91 return this._recordReference; 89 return this._recordReference;
92 }, 90 },
93 91
94 //------------------------------------------------------------------------- 92 //-------------------------------------------------------------------------
95 93
96 'record': function() { 94 'record': function() {
97//MochiKit.Logging.logDebug(">>> DirectLoginReference.record"); 95//MochiKit.Logging.logDebug(">>> DirectLoginReference.record");
98 if (this._record == null) { 96 if (this._record == null) {
99 this._record = this.user().records()[this.recordReference()]; 97 this._record = this.user().records()[this.recordReference()];
100 } 98 }
101 99
102//MochiKit.Logging.logDebug("<<< DirectLoginReference.record"); 100//MochiKit.Logging.logDebug("<<< DirectLoginReference.record");
103 return this._record; 101 return this._record;
104 }, 102 },
105 103
106 //------------------------------------------------------------------------- 104 //-------------------------------------------------------------------------
107 105
108 'favicon': function() { 106 'favicon': function() {
109 return this._favicon; 107 return this._favicon;
110 }, 108 },
111 109
112 //------------------------------------------------------------------------- 110 //-------------------------------------------------------------------------
113 111
114 'fixedFavicon': function() { 112 'fixedFavicon': function() {
115 var result; 113 var result;
116 114
117 if (this._fixedFavicon == null) { 115 if (this._fixedFavicon == null) {
118 result = this.favicon(); 116 result = this.favicon();
119 117
120 if (Clipperz_IEisBroken && (this.user().preferences().disableUnsecureFaviconLoadingForIE()) && (result.indexOf('https://') != 0)) { 118 if (Clipperz_IEisBroken && (this.user().preferences().disableUnsecureFaviconLoadingForIE()) && (result.indexOf('https://') != 0)) {
121 result = Clipperz.PM.Strings['defaultFaviconUrl_IE']; 119 result = Clipperz.PM.Strings['defaultFaviconUrl_IE'];
122 this.setFixedFavicon(result); 120 this.setFixedFavicon(result);
123 } 121 }
124 } else { 122 } else {
125 result = this._fixedFavicon; 123 result = this._fixedFavicon;
126 } 124 }
127 125
128 return result; 126 return result;
129 }, 127 },
130 128
131 'setFixedFavicon': function(aValue) { 129 'setFixedFavicon': function(aValue) {
132 this._fixedFavicon = aValue; 130 this._fixedFavicon = aValue;
133 }, 131 },
134 132
135 //------------------------------------------------------------------------- 133 //-------------------------------------------------------------------------
136 134
137 'setupJumpPageWindow': function(aWindow) { 135 'setupJumpPageWindow': function(aWindow) {
138//MochiKit.Logging.logDebug(">>> DirectLoginReference.setupJumpPageWindow - " + aWindow); 136//MochiKit.Logging.logDebug(">>> DirectLoginReference.setupJumpPageWindow - " + aWindow);
139 try { 137 try {
140 MochiKit.DOM.withWindow(aWindow, MochiKit.Base.bind(function() { 138 MochiKit.DOM.withWindow(aWindow, MochiKit.Base.bind(function() {
141 MochiKit.DOM.appendChildNodes(MochiKit.DOM.currentDocument().body, 139 MochiKit.DOM.appendChildNodes(MochiKit.DOM.currentDocument().body,
142 MochiKit.DOM.H1(null, "Loading " + this.label()) 140 MochiKit.DOM.H1(null, "Loading " + this.label())
143 ); 141 );
144 }, this)); 142 }, this));
145 } catch(e) { 143 } catch(e) {
146 MochiKit.Logging.logDebug("EXCEPTION: " + e); 144 MochiKit.Logging.logDebug("EXCEPTION: " + e);
147 } 145 }
148//MochiKit.Logging.logDebug("<<< DirectLoginReference.setupJumpPageWindow"); 146//MochiKit.Logging.logDebug("<<< DirectLoginReference.setupJumpPageWindow");
149 }, 147 },
150 148
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/Header.js b/frontend/beta/js/Clipperz/PM/DataModel/Header.js
index c780855..908d9f4 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/Header.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/Header.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.DataModel.Header = function(args) { 31Clipperz.PM.DataModel.Header = function(args) {
34 args = args || {}; 32 args = args || {};
35 33
36 this._user = args.user; 34 this._user = args.user;
37 35
38 this._serverData = null; 36 this._serverData = null;
39 this._serverDataVersion = null; 37 this._serverDataVersion = null;
40 this._jsonEvaledServerData = null; 38 this._jsonEvaledServerData = null;
41 39
42 this._decryptedLegacyServerData = null; 40 this._decryptedLegacyServerData = null;
43 this._isDecryptingLegacyServerData = false; 41 this._isDecryptingLegacyServerData = false;
44 this._decryptingLegacyServerDataPendingQueue = []; 42 this._decryptingLegacyServerDataPendingQueue = [];
45 43
46 this.resetUpdatedSections(); 44 this.resetUpdatedSections();
47 45
48 this._shouldLoadSections = {}; 46 this._shouldLoadSections = {};
49 47
50 Clipperz.NotificationCenter.register(this.user(), 'updatedSection', this, 'updatedSectionHandler'); 48 Clipperz.NotificationCenter.register(this.user(), 'updatedSection', this, 'updatedSectionHandler');
51 49
52 return this; 50 return this;
53} 51}
54 52
55Clipperz.PM.DataModel.Header.prototype = MochiKit.Base.update(null, { 53Clipperz.PM.DataModel.Header.prototype = MochiKit.Base.update(null, {
56 54
57 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
58 56
59 'user': function() { 57 'user': function() {
60 return this._user; 58 return this._user;
61 }, 59 },
62 60
63 //------------------------------------------------------------------------- 61 //-------------------------------------------------------------------------
64 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
65 //------------------------------------------------------------------------- 63 //-------------------------------------------------------------------------
66 //------------------------------------------------------------------------- 64 //-------------------------------------------------------------------------
67 //------------------------------------------------------------------------- 65 //-------------------------------------------------------------------------
68 //------------------------------------------------------------------------- 66 //-------------------------------------------------------------------------
69 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
70 //------------------------------------------------------------------------- 68 //-------------------------------------------------------------------------
71 //------------------------------------------------------------------------- 69 //-------------------------------------------------------------------------
72 70
73 'updatedSections': function() { 71 'updatedSections': function() {
74 return this._updatedSections; 72 return this._updatedSections;
75 }, 73 },
76 74
77 'markSectionAsUpdated': function(aSectionName) { 75 'markSectionAsUpdated': function(aSectionName) {
78 this.updatedSections().push(aSectionName); 76 this.updatedSections().push(aSectionName);
79 }, 77 },
80 78
81 'resetUpdatedSections': function() { 79 'resetUpdatedSections': function() {
82 this._updatedSections = [] 80 this._updatedSections = []
83 }, 81 },
84 82
85 'hasSectionBeenUpdated': function(aSectionName) { 83 'hasSectionBeenUpdated': function(aSectionName) {
86 return (this.updatedSections().join().indexOf(aSectionName) != -1); 84 return (this.updatedSections().join().indexOf(aSectionName) != -1);
87 }, 85 },
88 86
89 'cachedServerDataSection': function(aSectionName) { 87 'cachedServerDataSection': function(aSectionName) {
90 return (this.hasSectionBeenUpdated(aSectionName)) ? {} : this.jsonEvaledServerData()[aSectionName]; 88 return (this.hasSectionBeenUpdated(aSectionName)) ? {} : this.jsonEvaledServerData()[aSectionName];
91 }, 89 },
92 90
93 'updateAllSections': function() { 91 'updateAllSections': function() {
94 this.resetUpdatedSections(); 92 this.resetUpdatedSections();
95 this.markSectionAsUpdated('records'); 93 this.markSectionAsUpdated('records');
96 this.markSectionAsUpdated('directLogins'); 94 this.markSectionAsUpdated('directLogins');
97 this.markSectionAsUpdated('preferences'); 95 this.markSectionAsUpdated('preferences');
98 this.markSectionAsUpdated('oneTimePasswords'); 96 this.markSectionAsUpdated('oneTimePasswords');
99 97
100 return MochiKit.Async.succeed(this); 98 return MochiKit.Async.succeed(this);
101 }, 99 },
102 100
103 'updatedSectionHandler': function(anEvent) { 101 'updatedSectionHandler': function(anEvent) {
104 this.markSectionAsUpdated(anEvent.parameters()); 102 this.markSectionAsUpdated(anEvent.parameters());
105 }, 103 },
106 104
107 //------------------------------------------------------------------------- 105 //-------------------------------------------------------------------------
108 106
109 'getObjectKeyIndex': function(anObject) { 107 'getObjectKeyIndex': function(anObject) {
110 var result; 108 var result;
111 varitemReference; 109 varitemReference;
112 var index; 110 var index;
113 111
114 result = {}; 112 result = {};
115 index = 0; 113 index = 0;
116 114
117 for (itemReference in anObject) { 115 for (itemReference in anObject) {
118 result[itemReference] = index.toString(); 116 result[itemReference] = index.toString();
119 index ++; 117 index ++;
120 } 118 }
121 119
122 return result; 120 return result;
123 }, 121 },
124 122
125 //------------------------------------------------------------------------- 123 //-------------------------------------------------------------------------
126 124
127 'serializedDataWithRecordAndDirectLoginIndexes': function(aRecordIndexes, aDirectLoginIndexs) { 125 'serializedDataWithRecordAndDirectLoginIndexes': function(aRecordIndexes, aDirectLoginIndexs) {
128 var result; 126 var result;
129 var records; 127 var records;
130 var recordReference; 128 var recordReference;
131 129
132//MochiKit.Logging.logDebug(">>> Header.serializedData"); 130//MochiKit.Logging.logDebug(">>> Header.serializedData");
133 result = { 131 result = {
134 'records': {}, 132 'records': {},
135 'directLogins': {} 133 'directLogins': {}
136 }; 134 };
137 135
138 records = this.user().records(); 136 records = this.user().records();
139 for (recordReference in records) { 137 for (recordReference in records) {
140 result['records'][aRecordIndexes[recordReference]] = this.user().records()[recordReference].headerData(); 138 result['records'][aRecordIndexes[recordReference]] = this.user().records()[recordReference].headerData();
141 } 139 }
142 140
143 for (directLoginReference in this.user().directLoginReferences()) { 141 for (directLoginReference in this.user().directLoginReferences()) {
144 var currentDirectLogin; 142 var currentDirectLogin;
145 vardirectLoginData; 143 vardirectLoginData;
146 144
147 currentDirectLogin = this.user().directLoginReferences()[directLoginReference]; 145 currentDirectLogin = this.user().directLoginReferences()[directLoginReference];
148 if (aRecordIndexes[currentDirectLogin.recordReference()] != null) { 146 if (aRecordIndexes[currentDirectLogin.recordReference()] != null) {
149 directLoginData = { 147 directLoginData = {
150 // reference: currentDirectLogin.reference(), 148 // reference: currentDirectLogin.reference(),
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/OneTimePassword.js b/frontend/beta/js/Clipperz/PM/DataModel/OneTimePassword.js
index 88f383a..3f611b4 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/OneTimePassword.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/OneTimePassword.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.DataModel.OneTimePassword = function(args) { 31Clipperz.PM.DataModel.OneTimePassword = function(args) {
34 args = args || {}; 32 args = args || {};
35 33
36//console.log("new OneTimePassword", args); 34//console.log("new OneTimePassword", args);
37//MochiKit.Logging.logDebug("---"); 35//MochiKit.Logging.logDebug("---");
38 this._user = args['user']; 36 this._user = args['user'];
39 this._password = args['password']; 37 this._password = args['password'];
40 this._passwordValue = Clipperz.PM.DataModel.OneTimePassword.normalizedOneTimePassword(args['password']); 38 this._passwordValue = Clipperz.PM.DataModel.OneTimePassword.normalizedOneTimePassword(args['password']);
41 this._reference = args['reference'] || Clipperz.PM.Crypto.randomKey(); 39 this._reference = args['reference'] || Clipperz.PM.Crypto.randomKey();
42 this._creationDate = args['created'] ? Clipperz.PM.Date.parseDateWithUTCFormat(args['created']) : new Date(); 40 this._creationDate = args['created'] ? Clipperz.PM.Date.parseDateWithUTCFormat(args['created']) : new Date();
43 this._usageDate = args['used'] ? Clipperz.PM.Date.parseDateWithUTCFormat(args['used']) : null; 41 this._usageDate = args['used'] ? Clipperz.PM.Date.parseDateWithUTCFormat(args['used']) : null;
44 42
45 this._status = args['status'] || 'ACTIVE'; 43 this._status = args['status'] || 'ACTIVE';
46 this._connectionInfo = null; 44 this._connectionInfo = null;
47 45
48 this._key = null; 46 this._key = null;
49 this._keyChecksum = null; 47 this._keyChecksum = null;
50 48
51 return this; 49 return this;
52} 50}
53 51
54Clipperz.PM.DataModel.OneTimePassword.prototype = MochiKit.Base.update(null, { 52Clipperz.PM.DataModel.OneTimePassword.prototype = MochiKit.Base.update(null, {
55 53
56 'toString': function() { 54 'toString': function() {
57 return "Clipperz.PM.DataModel.OneTimePassword"; 55 return "Clipperz.PM.DataModel.OneTimePassword";
58 }, 56 },
59 57
60 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
61 59
62 'user': function() { 60 'user': function() {
63 return this._user; 61 return this._user;
64 }, 62 },
65 63
66 //------------------------------------------------------------------------- 64 //-------------------------------------------------------------------------
67 65
68 'password': function() { 66 'password': function() {
69 return this._password; 67 return this._password;
70 }, 68 },
71 69
72 //------------------------------------------------------------------------- 70 //-------------------------------------------------------------------------
73 71
74 'passwordValue': function() { 72 'passwordValue': function() {
75 return this._passwordValue; 73 return this._passwordValue;
76 }, 74 },
77 75
78 //------------------------------------------------------------------------- 76 //-------------------------------------------------------------------------
79 77
80 'creationDate': function() { 78 'creationDate': function() {
81 return this._creationDate; 79 return this._creationDate;
82 }, 80 },
83 81
84 //------------------------------------------------------------------------- 82 //-------------------------------------------------------------------------
85 83
86 'reference': function() { 84 'reference': function() {
87 return this._reference; 85 return this._reference;
88 }, 86 },
89 87
90 //------------------------------------------------------------------------- 88 //-------------------------------------------------------------------------
91 89
92 'key': function() { 90 'key': function() {
93 if (this._key == null) { 91 if (this._key == null) {
94 this._key = Clipperz.PM.DataModel.OneTimePassword.computeKeyWithUsernameAndPassword(this.user().username(), this.passwordValue()); 92 this._key = Clipperz.PM.DataModel.OneTimePassword.computeKeyWithUsernameAndPassword(this.user().username(), this.passwordValue());
95 } 93 }
96 94
97 return this._key; 95 return this._key;
98 }, 96 },
99 97
100 //------------------------------------------------------------------------- 98 //-------------------------------------------------------------------------
101 99
102 'keyChecksum': function() { 100 'keyChecksum': function() {
103 if (this._keyChecksum == null) { 101 if (this._keyChecksum == null) {
104 this._keyChecksum = Clipperz.PM.DataModel.OneTimePassword.computeKeyChecksumWithUsernameAndPassword(this.user().username(), this.passwordValue()); 102 this._keyChecksum = Clipperz.PM.DataModel.OneTimePassword.computeKeyChecksumWithUsernameAndPassword(this.user().username(), this.passwordValue());
105 } 103 }
106 104
107 return this._keyChecksum; 105 return this._keyChecksum;
108 }, 106 },
109 107
110 //------------------------------------------------------------------------- 108 //-------------------------------------------------------------------------
111 109
112 'status': function() { 110 'status': function() {
113 return this._status; 111 return this._status;
114 }, 112 },
115 113
116 'setStatus': function(aValue) { 114 'setStatus': function(aValue) {
117 this._status = aValue; 115 this._status = aValue;
118 }, 116 },
119 117
120 //------------------------------------------------------------------------- 118 //-------------------------------------------------------------------------
121 119
122 'serializedData': function() { 120 'serializedData': function() {
123 var result; 121 var result;
124 122
125 result = { 123 result = {
126 'password': this.password(), 124 'password': this.password(),
127 'created': this.creationDate() ? Clipperz.PM.Date.formatDateWithUTCFormat(this.creationDate()) : null, 125 'created': this.creationDate() ? Clipperz.PM.Date.formatDateWithUTCFormat(this.creationDate()) : null,
128 'used': this.usageDate() ? Clipperz.PM.Date.formatDateWithUTCFormat(this.usageDate()) : null, 126 'used': this.usageDate() ? Clipperz.PM.Date.formatDateWithUTCFormat(this.usageDate()) : null,
129 'status': this.status() 127 'status': this.status()
130 }; 128 };
131 129
132 return result; 130 return result;
133 }, 131 },
134 132
135 //------------------------------------------------------------------------- 133 //-------------------------------------------------------------------------
136 134
137 'packedPassphrase': function() { 135 'packedPassphrase': function() {
138 var result; 136 var result;
139 var packedPassphrase; 137 var packedPassphrase;
140 var encodedPassphrase; 138 var encodedPassphrase;
141 varprefixPadding; 139 varprefixPadding;
142 var suffixPadding; 140 var suffixPadding;
143 var getRandomBytes; 141 var getRandomBytes;
144 142
145 getRandomBytes = MochiKit.Base.method(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'getRandomBytes'); 143 getRandomBytes = MochiKit.Base.method(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'getRandomBytes');
146 144
147 encodedPassphrase = new Clipperz.ByteArray(this.user().passphrase()).toBase64String(); 145 encodedPassphrase = new Clipperz.ByteArray(this.user().passphrase()).toBase64String();
148//MochiKit.Logging.logDebug("--- encodedPassphrase.length: " + encodedPassphrase.length); 146//MochiKit.Logging.logDebug("--- encodedPassphrase.length: " + encodedPassphrase.length);
149 prefixPadding = getRandomBytes(getRandomBytes(1).byteAtIndex(0)).toBase64String(); 147 prefixPadding = getRandomBytes(getRandomBytes(1).byteAtIndex(0)).toBase64String();
150//MochiKit.Logging.logDebug("--- prefixPadding.length: " + prefixPadding.length); 148//MochiKit.Logging.logDebug("--- prefixPadding.length: " + prefixPadding.length);
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/OneTimePasswordManager.js b/frontend/beta/js/Clipperz/PM/DataModel/OneTimePasswordManager.js
index aa40aba..1ebb615 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/OneTimePasswordManager.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/OneTimePasswordManager.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.DataModel.OneTimePasswordManager = function(anUser, args) { 31Clipperz.PM.DataModel.OneTimePasswordManager = function(anUser, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 this._user = anUser; 34 this._user = anUser;
37 this._oneTimePasswords = {}; 35 this._oneTimePasswords = {};
38 36
39 this.updateWithData(args); 37 this.updateWithData(args);
40 38
41 Clipperz.NotificationCenter.notify(null, 'oneTimePasswordAdded', null, true); 39 Clipperz.NotificationCenter.notify(null, 'oneTimePasswordAdded', null, true);
42 40
43 return this; 41 return this;
44} 42}
45 43
46Clipperz.PM.DataModel.OneTimePasswordManager.prototype = MochiKit.Base.update(null, { 44Clipperz.PM.DataModel.OneTimePasswordManager.prototype = MochiKit.Base.update(null, {
47 45
48 'toString': function() { 46 'toString': function() {
49 return "Clipperz.PM.DataModel.OneTimePasswordManager"; 47 return "Clipperz.PM.DataModel.OneTimePasswordManager";
50 }, 48 },
51 49
52 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
53 51
54 'updateWithData': function(someValues) { 52 'updateWithData': function(someValues) {
55 varotpReference; 53 varotpReference;
56 54
57//console.log("OneTimePasswordManager.updateWithData", someValues); 55//console.log("OneTimePasswordManager.updateWithData", someValues);
58//MochiKit.Logging.logDebug("OneTimePasswordManager.updateWithData: " + Clipperz.Base.serializeJSON(someValues)); 56//MochiKit.Logging.logDebug("OneTimePasswordManager.updateWithData: " + Clipperz.Base.serializeJSON(someValues));
59 for (otpReference in someValues) { 57 for (otpReference in someValues) {
60 var otp; 58 var otp;
61 var otpConfiguration; 59 var otpConfiguration;
62 60
63 otpConfiguration = someValues[otpReference]; 61 otpConfiguration = someValues[otpReference];
64 otpConfiguration['user'] = this.user(); 62 otpConfiguration['user'] = this.user();
65 otpConfiguration['reference'] = otpReference; 63 otpConfiguration['reference'] = otpReference;
66 otp = new Clipperz.PM.DataModel.OneTimePassword(otpConfiguration); 64 otp = new Clipperz.PM.DataModel.OneTimePassword(otpConfiguration);
67 this._oneTimePasswords[otpReference] = otp; 65 this._oneTimePasswords[otpReference] = otp;
68 } 66 }
69 67
70 return this; 68 return this;
71 }, 69 },
72 70
73 //------------------------------------------------------------------------- 71 //-------------------------------------------------------------------------
74 72
75 'updateWithServerData': function(someValues) { 73 'updateWithServerData': function(someValues) {
76 var deferredResult; 74 var deferredResult;
77 varoneTimePasswordReference; 75 varoneTimePasswordReference;
78 var wereChangesApplied; 76 var wereChangesApplied;
79 77
80//MochiKit.Logging.logDebug(">>> OneTimePasswordManager.updateWithServerData"); 78//MochiKit.Logging.logDebug(">>> OneTimePasswordManager.updateWithServerData");
81 deferredResult = new MochiKit.Async.Deferred(); 79 deferredResult = new MochiKit.Async.Deferred();
82 wereChangesApplied = false; 80 wereChangesApplied = false;
83 81
84 for (oneTimePasswordReference in someValues) { 82 for (oneTimePasswordReference in someValues) {
85 var oneTimePassword; 83 var oneTimePassword;
86 84
87 oneTimePassword = this.oneTimePasswordWithReference(oneTimePasswordReference); 85 oneTimePassword = this.oneTimePasswordWithReference(oneTimePasswordReference);
88 if (oneTimePassword != null) { 86 if (oneTimePassword != null) {
89 var oneTimePasswordHasBeenUpdated; 87 var oneTimePasswordHasBeenUpdated;
90 88
91 oneTimePasswordHasBeenUpdated = oneTimePassword.updateStatusWithValues(someValues[oneTimePasswordReference]); 89 oneTimePasswordHasBeenUpdated = oneTimePassword.updateStatusWithValues(someValues[oneTimePasswordReference]);
92 wereChangesApplied = oneTimePasswordHasBeenUpdated || wereChangesApplied; 90 wereChangesApplied = oneTimePasswordHasBeenUpdated || wereChangesApplied;
93 } else { 91 } else {
94 92
95 } 93 }
96 } 94 }
97 95
98 if (wereChangesApplied == true) { 96 if (wereChangesApplied == true) {
99 this.user().header().markSectionAsUpdated('oneTimePasswords'); 97 this.user().header().markSectionAsUpdated('oneTimePasswords');
100 } 98 }
101 99
102 for (oneTimePasswordReference in this.oneTimePasswords()) { 100 for (oneTimePasswordReference in this.oneTimePasswords()) {
103 if (typeof(someValues[oneTimePasswordReference]) == 'undefind') { 101 if (typeof(someValues[oneTimePasswordReference]) == 'undefind') {
104 deferredResult.addCallback(MochiKit.Base.method(this.oneTimePasswordWithReference(oneTimePasswordReference), 'saveChanges')); 102 deferredResult.addCallback(MochiKit.Base.method(this.oneTimePasswordWithReference(oneTimePasswordReference), 'saveChanges'));
105 } 103 }
106 } 104 }
107 105
108 deferredResult.addCallback(MochiKit.Async.succeed, this); 106 deferredResult.addCallback(MochiKit.Async.succeed, this);
109 107
110 deferredResult.callback(); 108 deferredResult.callback();
111//MochiKit.Logging.logDebug("<<< OneTimePasswordManager.updateWithServerData"); 109//MochiKit.Logging.logDebug("<<< OneTimePasswordManager.updateWithServerData");
112 110
113 return deferredResult; 111 return deferredResult;
114 }, 112 },
115 113
116 //------------------------------------------------------------------------- 114 //-------------------------------------------------------------------------
117 115
118 'user': function() { 116 'user': function() {
119 return this._user; 117 return this._user;
120 }, 118 },
121 119
122 //------------------------------------------------------------------------- 120 //-------------------------------------------------------------------------
123 121
124 'addOneTimePassword': function(aOneTimePassword, isBatchUpdate) { 122 'addOneTimePassword': function(aOneTimePassword, isBatchUpdate) {
125 this.oneTimePasswords()[aOneTimePassword.reference()] = aOneTimePassword; 123 this.oneTimePasswords()[aOneTimePassword.reference()] = aOneTimePassword;
126 124
127 if (isBatchUpdate != true) { 125 if (isBatchUpdate != true) {
128 Clipperz.NotificationCenter.notify(aOneTimePassword, 'oneTimePasswordAdded'); 126 Clipperz.NotificationCenter.notify(aOneTimePassword, 'oneTimePasswordAdded');
129 Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'oneTimePasswords', true); 127 Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'oneTimePasswords', true);
130 } 128 }
131 }, 129 },
132 130
133 //------------------------------------------------------------------------- 131 //-------------------------------------------------------------------------
134 132
135 'archiveOneTimePassword': function(aOneTimePasswordReference) { 133 'archiveOneTimePassword': function(aOneTimePasswordReference) {
136 var deferredResult; 134 var deferredResult;
137 135
138//MochiKit.Logging.logDebug(">>> OneTimePasswordManager.archiveOneTimePassword"); 136//MochiKit.Logging.logDebug(">>> OneTimePasswordManager.archiveOneTimePassword");
139//MochiKit.Logging.logDebug("--- OneTimePasswordManager.archiveOneTimePassword - 0 otp.reference: " + aOneTimePasswordReference); 137//MochiKit.Logging.logDebug("--- OneTimePasswordManager.archiveOneTimePassword - 0 otp.reference: " + aOneTimePasswordReference);
140 deferredResult = new MochiKit.Async.Deferred(); 138 deferredResult = new MochiKit.Async.Deferred();
141 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'loadOneTimePasswords')); 139 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'loadOneTimePasswords'));
142 deferredResult.addCallback(MochiKit.Base.bind(function(aOneTimePasswordReference) { 140 deferredResult.addCallback(MochiKit.Base.bind(function(aOneTimePasswordReference) {
143 var oneTimePassword; 141 var oneTimePassword;
144 142
145//MochiKit.Logging.logDebug("--- OneTimePasswordManager.archiveOneTimePassword - 1 serializedData: " + Clipperz.Base.serializeJSON(this.serializedData())); 143//MochiKit.Logging.logDebug("--- OneTimePasswordManager.archiveOneTimePassword - 1 serializedData: " + Clipperz.Base.serializeJSON(this.serializedData()));
146 oneTimePassword = this.oneTimePasswords()[aOneTimePasswordReference]; 144 oneTimePassword = this.oneTimePasswords()[aOneTimePasswordReference];
147 145
148 if (oneTimePassword != null) { 146 if (oneTimePassword != null) {
149 oneTimePassword.setUsageDate(new Date()); 147 oneTimePassword.setUsageDate(new Date());
150 148
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/Record.js b/frontend/beta/js/Clipperz/PM/DataModel/Record.js
index f89f79c..7b06f29 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/Record.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/Record.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.DataModel.Record = function(args) { 31Clipperz.PM.DataModel.Record = function(args) {
34 args = args || {}; 32 args = args || {};
35 33
36 this._user = args['user'] || null; 34 this._user = args['user'] || null;
37 this._reference = args['reference'] || Clipperz.PM.Crypto.randomKey(); 35 this._reference = args['reference'] || Clipperz.PM.Crypto.randomKey();
38 this._version = args['version'] || Clipperz.PM.Crypto.encryptingFunctions.currentVersion; 36 this._version = args['version'] || Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
39 this._key = args['key'] || Clipperz.PM.Crypto.randomKey(); 37 this._key = args['key'] || Clipperz.PM.Crypto.randomKey();
40 38
41 this.setLabel(args['label'] || Clipperz.PM.Strings['newRecordTitleLabel']); 39 this.setLabel(args['label'] || Clipperz.PM.Strings['newRecordTitleLabel']);
42 40
43 this.setHeaderNotes(args['headerNotes'] || null); 41 this.setHeaderNotes(args['headerNotes'] || null);
44 this.setNotes(args['notes'] || args['headerNotes'] || ""); 42 this.setNotes(args['notes'] || args['headerNotes'] || "");
45//MochiKit.Logging.logDebug("--- new Record ('" + this._label + "')- _headerNotes: '" + this._headerNotes + "'"); 43//MochiKit.Logging.logDebug("--- new Record ('" + this._label + "')- _headerNotes: '" + this._headerNotes + "'");
46//MochiKit.Logging.logDebug("--- new Record ('" + this._label + "')- _notes: '" + this._notes + "'"); 44//MochiKit.Logging.logDebug("--- new Record ('" + this._label + "')- _notes: '" + this._notes + "'");
47 //this._notes = args.notes || ""; 45 //this._notes = args.notes || "";
48 46
49 this._versions = {}; 47 this._versions = {};
50 this._directLogins = {}; 48 this._directLogins = {};
51 this._removedDirectLogins = []; 49 this._removedDirectLogins = [];
52 50
53 this.setIsBrandNew(args['reference'] == null); 51 this.setIsBrandNew(args['reference'] == null);
54 52
55 this.setShouldLoadData(this.isBrandNew() ? false: true); 53 this.setShouldLoadData(this.isBrandNew() ? false: true);
56 this.setShouldDecryptData(this.isBrandNew() ? false: true); 54 this.setShouldDecryptData(this.isBrandNew() ? false: true);
57 this.setShouldProcessData(this.isBrandNew() ? false: true); 55 this.setShouldProcessData(this.isBrandNew() ? false: true);
58 56
59 this.setCurrentVersion(this.isBrandNew() ? new Clipperz.PM.DataModel.RecordVersion(this, null): null); 57 this.setCurrentVersion(this.isBrandNew() ? new Clipperz.PM.DataModel.RecordVersion(this, null): null);
60 this.setCurrentVersionKey(null); 58 this.setCurrentVersionKey(null);
61 59
62 this._serverData = null; 60 this._serverData = null;
63 this._decryptedData = null; 61 this._decryptedData = null;
64 this._cachedData = null; 62 this._cachedData = null;
65 63
66 return this; 64 return this;
67} 65}
68 66
69Clipperz.PM.DataModel.Record.prototype = MochiKit.Base.update(null, { 67Clipperz.PM.DataModel.Record.prototype = MochiKit.Base.update(null, {
70 68
71 'toString': function() { 69 'toString': function() {
72 return "Record (" + this.label() + ")"; 70 return "Record (" + this.label() + ")";
73 }, 71 },
74 72
75 //------------------------------------------------------------------------- 73 //-------------------------------------------------------------------------
76 74
77 'isBrandNew': function() { 75 'isBrandNew': function() {
78 return this._isBrandNew; 76 return this._isBrandNew;
79 }, 77 },
80 78
81 'setIsBrandNew': function(aValue) { 79 'setIsBrandNew': function(aValue) {
82 this._isBrandNew = aValue; 80 this._isBrandNew = aValue;
83 }, 81 },
84 82
85 //------------------------------------------------------------------------- 83 //-------------------------------------------------------------------------
86/* 84/*
87 'shouldRunTheRecordCreationWizard': function() { 85 'shouldRunTheRecordCreationWizard': function() {
88 return (this.isBrandNew() && (MochiKit.Base.keys(this.currentVersion().fields()).length == 0)); 86 return (this.isBrandNew() && (MochiKit.Base.keys(this.currentVersion().fields()).length == 0));
89 }, 87 },
90 */ 88 */
91 //------------------------------------------------------------------------- 89 //-------------------------------------------------------------------------
92 90
93 'user': function() { 91 'user': function() {
94 return this._user; 92 return this._user;
95 }, 93 },
96 94
97 //------------------------------------------------------------------------- 95 //-------------------------------------------------------------------------
98 96
99 'reference': function() { 97 'reference': function() {
100 return this._reference; 98 return this._reference;
101 }, 99 },
102 100
103 //------------------------------------------------------------------------- 101 //-------------------------------------------------------------------------
104 102
105 'key': function() { 103 'key': function() {
106 return this._key; 104 return this._key;
107 }, 105 },
108 106
109 'updateKey': function() { 107 'updateKey': function() {
110 this._key = Clipperz.PM.Crypto.randomKey(); 108 this._key = Clipperz.PM.Crypto.randomKey();
111 }, 109 },
112 110
113 //------------------------------------------------------------------------- 111 //-------------------------------------------------------------------------
114 112
115 'label': function() { 113 'label': function() {
116 return this._label; 114 return this._label;
117 }, 115 },
118 116
119 'setLabel': function(aValue) { 117 'setLabel': function(aValue) {
120 this._label = aValue; 118 this._label = aValue;
121 }, 119 },
122 120
123 'lowerCaseLabel': function() { 121 'lowerCaseLabel': function() {
124 return this.label().toLowerCase(); 122 return this.label().toLowerCase();
125 }, 123 },
126 124
127 //------------------------------------------------------------------------- 125 //-------------------------------------------------------------------------
128 126
129 'versions': function() { 127 'versions': function() {
130 return this._versions; 128 return this._versions;
131 }, 129 },
132 130
133 //------------------------------------------------------------------------- 131 //-------------------------------------------------------------------------
134 132
135 'currentVersion': function() { 133 'currentVersion': function() {
136 return this._currentVersion; 134 return this._currentVersion;
137 }, 135 },
138 136
139 'setCurrentVersion': function(aValue) { 137 'setCurrentVersion': function(aValue) {
140 this._currentVersion = aValue; 138 this._currentVersion = aValue;
141 }, 139 },
142 140
143 //------------------------------------------------------------------------- 141 //-------------------------------------------------------------------------
144 142
145 'currentVersionKey': function() { 143 'currentVersionKey': function() {
146 return this._currentVersionKey; 144 return this._currentVersionKey;
147 }, 145 },
148 146
149 'setCurrentVersionKey': function(aValue) { 147 'setCurrentVersionKey': function(aValue) {
150 this._currentVersionKey = aValue; 148 this._currentVersionKey = aValue;
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/RecordField.js b/frontend/beta/js/Clipperz/PM/DataModel/RecordField.js
index bca664d..a5d7980 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/RecordField.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/RecordField.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30//############################################################################# 28//#############################################################################
31 29
32Clipperz.PM.DataModel.RecordField = function(args) { 30Clipperz.PM.DataModel.RecordField = function(args) {
33 args = args || {}; 31 args = args || {};
34 32
35 this._recordVersion = args.recordVersion || null; 33 this._recordVersion = args.recordVersion || null;
36 this._key = args.key || Clipperz.PM.Crypto.randomKey(); 34 this._key = args.key || Clipperz.PM.Crypto.randomKey();
37 this.setLabel(args.label || ''); 35 this.setLabel(args.label || '');
38 this.setValue(args.value || ''); 36 this.setValue(args.value || '');
39 this.setType(args.type || 'TXT'); //valid types: 'TXT', 'PWD', 'URL', 'DATE', 'ADDR', 'CHECK', 'RADIO', ('NOTE' probably not), ... 37 this.setType(args.type || 'TXT'); //valid types: 'TXT', 'PWD', 'URL', 'DATE', 'ADDR', 'CHECK', 'RADIO', ('NOTE' probably not), ...
40 this._hidden = args.hidden || (args.type == 'PWD') || false; 38 this._hidden = args.hidden || (args.type == 'PWD') || false;
41 39
42 return this; 40 return this;
43} 41}
44 42
45Clipperz.PM.DataModel.RecordField.prototype = MochiKit.Base.update(null, { 43Clipperz.PM.DataModel.RecordField.prototype = MochiKit.Base.update(null, {
46 44
47 'toString': function() { 45 'toString': function() {
48 return "Clipperz.PM.DataModel.RecordField - " + this.label() + " (" + this.key() + ")"; 46 return "Clipperz.PM.DataModel.RecordField - " + this.label() + " (" + this.key() + ")";
49 }, 47 },
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 50
53 'recordVersion': function() { 51 'recordVersion': function() {
54 return this._recordVersion; 52 return this._recordVersion;
55 }, 53 },
56 54
57 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
58 56
59 'key': function() { 57 'key': function() {
60 return this._key; 58 return this._key;
61 }, 59 },
62 60
63 //------------------------------------------------------------------------- 61 //-------------------------------------------------------------------------
64 62
65 'label': function() { 63 'label': function() {
66 return this._label; 64 return this._label;
67 }, 65 },
68 66
69 'setLabel': function(aValue) { 67 'setLabel': function(aValue) {
70 this._label = aValue; 68 this._label = aValue;
71 }, 69 },
72 70
73 //------------------------------------------------------------------------- 71 //-------------------------------------------------------------------------
74 72
75 'value': function() { 73 'value': function() {
76 return this._value; 74 return this._value;
77 }, 75 },
78 76
79 'setValue': function(aValue) { 77 'setValue': function(aValue) {
80 this._value = aValue; 78 this._value = aValue;
81 }, 79 },
82 80
83 //------------------------------------------------------------------------- 81 //-------------------------------------------------------------------------
84 82
85 'type': function() { 83 'type': function() {
86 return this._type; 84 return this._type;
87 }, 85 },
88 86
89 'setType': function(aValue) { 87 'setType': function(aValue) {
90 this._type = aValue; 88 this._type = aValue;
91 89
92 if (aValue == 'PWD') { 90 if (aValue == 'PWD') {
93 this.setHidden(true); 91 this.setHidden(true);
94 } else { 92 } else {
95 this.setHidden(false); 93 this.setHidden(false);
96 } 94 }
97 }, 95 },
98 96
99 //------------------------------------------------------------------------- 97 //-------------------------------------------------------------------------
100 98
101 'serializeData': function() { 99 'serializeData': function() {
102 var result; 100 var result;
103 101
104//MochiKit.Logging.logDebug(">>> RecordField.serializeData - " + this); 102//MochiKit.Logging.logDebug(">>> RecordField.serializeData - " + this);
105 result = { 103 result = {
106 label: this.label(), 104 label: this.label(),
107 value:this.value(), 105 value:this.value(),
108 type: this.type(), 106 type: this.type(),
109 hidden: this.hidden() 107 hidden: this.hidden()
110 }; 108 };
111//MochiKit.Logging.logDebug("<<< RecordField.serializeData"); 109//MochiKit.Logging.logDebug("<<< RecordField.serializeData");
112 110
113 return result; 111 return result;
114 }, 112 },
115 113
116 //------------------------------------------------------------------------- 114 //-------------------------------------------------------------------------
117 115
118 'typeShortDescription': function() { 116 'typeShortDescription': function() {
119 // return Clipperz.PM.DataModel.RecordField.TypeDescriptions[this.type()]['shortDescription']; 117 // return Clipperz.PM.DataModel.RecordField.TypeDescriptions[this.type()]['shortDescription'];
120 return Clipperz.PM.Strings['recordFieldTypologies'][this.type()]['shortDescription']; 118 return Clipperz.PM.Strings['recordFieldTypologies'][this.type()]['shortDescription'];
121 }, 119 },
122 120
123 //------------------------------------------------------------------------- 121 //-------------------------------------------------------------------------
124 122
125 'hidden': function() { 123 'hidden': function() {
126 return this._hidden; 124 return this._hidden;
127 }, 125 },
128 126
129 'setHidden': function(aValue) { 127 'setHidden': function(aValue) {
130 this._hidden = aValue; 128 this._hidden = aValue;
131 }, 129 },
132 130
133 //------------------------------------------------------------------------- 131 //-------------------------------------------------------------------------
134 132
135 'clone': function(aRecordVersion) { 133 'clone': function(aRecordVersion) {
136 var result; 134 var result;
137 135
138 result = new Clipperz.PM.DataModel.RecordField({ 136 result = new Clipperz.PM.DataModel.RecordField({
139 recordVersion:aRecordVersion, 137 recordVersion:aRecordVersion,
140 label:this.label(), 138 label:this.label(),
141 value:this.value(), 139 value:this.value(),
142 type:this.type(), 140 type:this.type(),
143 hidden:this.hidden() 141 hidden:this.hidden()
144 }); 142 });
145 143
146 return result; 144 return result;
147 }, 145 },
148 146
149 //------------------------------------------------------------------------- 147 //-------------------------------------------------------------------------
150 148
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/RecordVersion.js b/frontend/beta/js/Clipperz/PM/DataModel/RecordVersion.js
index fc4a45c..69a7d91 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/RecordVersion.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/RecordVersion.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.DataModel.RecordVersion = function(aRecord, args) { 31Clipperz.PM.DataModel.RecordVersion = function(aRecord, args) {
34 args = args || {}; 32 args = args || {};
35 33
36 this._record = aRecord; 34 this._record = aRecord;
37 35
38 this._reference = args.reference || Clipperz.PM.Crypto.randomKey(); 36 this._reference = args.reference || Clipperz.PM.Crypto.randomKey();
39 this._version = args.version || Clipperz.PM.Crypto.encryptingFunctions.currentVersion; 37 this._version = args.version || Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
40 this._key = args.key || Clipperz.PM.Crypto.randomKey();; 38 this._key = args.key || Clipperz.PM.Crypto.randomKey();;
41 39
42 this._previousVersion = args.previousVersion || null; 40 this._previousVersion = args.previousVersion || null;
43 this._previousVersionKey = args.previousVersionKey || null; 41 this._previousVersionKey = args.previousVersionKey || null;
44 42
45 this.setIsBrandNew(args.reference == null); 43 this.setIsBrandNew(args.reference == null);
46 44
47 if (this.isBrandNew()) { 45 if (this.isBrandNew()) {
48 this._fields = {}; 46 this._fields = {};
49 47
50 this.setShouldLoadData(false); 48 this.setShouldLoadData(false);
51 this.setShouldDecryptData(false); 49 this.setShouldDecryptData(false);
52 this.setShouldProcessData(false); 50 this.setShouldProcessData(false);
53 } else { 51 } else {
54 if (typeof(args.fields) != 'undefined') { 52 if (typeof(args.fields) != 'undefined') {
55 this.processFieldData(args.fields); 53 this.processFieldData(args.fields);
56 54
57 this.setShouldLoadData(false); 55 this.setShouldLoadData(false);
58 this.setShouldDecryptData(false); 56 this.setShouldDecryptData(false);
59 this.setShouldProcessData(false); 57 this.setShouldProcessData(false);
60 } else { 58 } else {
61 if (typeof(args.data) != 'undefined') { 59 if (typeof(args.data) != 'undefined') {
62 this.setShouldLoadData(false); 60 this.setShouldLoadData(false);
63 } else { 61 } else {
64 this.setShouldLoadData(true); 62 this.setShouldLoadData(true);
65 } 63 }
66 this.setShouldDecryptData(true); 64 this.setShouldDecryptData(true);
67 this.setShouldProcessData(true); 65 this.setShouldProcessData(true);
68 } 66 }
69 } 67 }
70 68
71 this._serverData = args.data; 69 this._serverData = args.data;
72 this._decryptedData = null; 70 this._decryptedData = null;
73 71
74 return this; 72 return this;
75} 73}
76 74
77Clipperz.PM.DataModel.RecordVersion.prototype = MochiKit.Base.update(null, { 75Clipperz.PM.DataModel.RecordVersion.prototype = MochiKit.Base.update(null, {
78 76
79 'toString': function() { 77 'toString': function() {
80 return "RecordVersion"; 78 return "RecordVersion";
81 }, 79 },
82 80
83 //------------------------------------------------------------------------- 81 //-------------------------------------------------------------------------
84 82
85 'record': function() { 83 'record': function() {
86 return this._record; 84 return this._record;
87 }, 85 },
88 86
89 //------------------------------------------------------------------------- 87 //-------------------------------------------------------------------------
90 88
91 'reference': function() { 89 'reference': function() {
92 return this._reference; 90 return this._reference;
93 }, 91 },
94 92
95 'setReference': function(aValue) { 93 'setReference': function(aValue) {
96 this._reference = aValue; 94 this._reference = aValue;
97 }, 95 },
98 96
99 //------------------------------------------------------------------------- 97 //-------------------------------------------------------------------------
100 98
101 'key': function() { 99 'key': function() {
102//MochiKit.Logging.logDebug(">>> RecordVersion.key"); 100//MochiKit.Logging.logDebug(">>> RecordVersion.key");
103//MochiKit.Logging.logDebug("--- RecordVersion.key - " + this._key); 101//MochiKit.Logging.logDebug("--- RecordVersion.key - " + this._key);
104 return this._key; 102 return this._key;
105 }, 103 },
106 104
107 'setKey': function(aValue) { 105 'setKey': function(aValue) {
108 this._key = aValue; 106 this._key = aValue;
109 }, 107 },
110 108
111 //------------------------------------------------------------------------- 109 //-------------------------------------------------------------------------
112 110
113 'serverData': function() { 111 'serverData': function() {
114 return this._serverData; 112 return this._serverData;
115 }, 113 },
116 114
117 'setServerData': function(aValue) { 115 'setServerData': function(aValue) {
118 this._serverData = aValue; 116 this._serverData = aValue;
119 this.setShouldLoadData(false); 117 this.setShouldLoadData(false);
120 return aValue; 118 return aValue;
121 }, 119 },
122 120
123 //------------------------------------------------------------------------- 121 //-------------------------------------------------------------------------
124 122
125 'decryptedData': function() { 123 'decryptedData': function() {
126//MochiKit.Logging.logDebug(">>> RecordVersion.decryptedData: " + (this._decryptedData ? Clipperz.Base.serializeJSON(aValue) : "null")); 124//MochiKit.Logging.logDebug(">>> RecordVersion.decryptedData: " + (this._decryptedData ? Clipperz.Base.serializeJSON(aValue) : "null"));
127 return this._decryptedData; 125 return this._decryptedData;
128 }, 126 },
129 127
130 'setDecryptedData': function(aValue) { 128 'setDecryptedData': function(aValue) {
131//MochiKit.Logging.logDebug(">>> RecordVersion.setDecryptedData: " + Clipperz.Base.serializeJSON(aValue)); 129//MochiKit.Logging.logDebug(">>> RecordVersion.setDecryptedData: " + Clipperz.Base.serializeJSON(aValue));
132 this._decryptedData = aValue; 130 this._decryptedData = aValue;
133 this.setShouldDecryptData(false); 131 this.setShouldDecryptData(false);
134 return aValue; 132 return aValue;
135 }, 133 },
136 134
137 //------------------------------------------------------------------------- 135 //-------------------------------------------------------------------------
138 136
139 'version': function() { 137 'version': function() {
140 return this._version; 138 return this._version;
141 }, 139 },
142 140
143 //------------------------------------------------------------------------- 141 //-------------------------------------------------------------------------
144 142
145 'isBrandNew': function() { 143 'isBrandNew': function() {
146 return this._isBrandNew; 144 return this._isBrandNew;
147 }, 145 },
148 146
149 'setIsBrandNew': function(aValue) { 147 'setIsBrandNew': function(aValue) {
150 this._isBrandNew = aValue; 148 this._isBrandNew = aValue;
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/Statistics.js b/frontend/beta/js/Clipperz/PM/DataModel/Statistics.js
index 3d53adf..f0c229e 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/Statistics.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/Statistics.js
@@ -1,130 +1,128 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.DataModel.Statistics = function(args) { 31Clipperz.PM.DataModel.Statistics = function(args) {
34 args = args || {}; 32 args = args || {};
35 33
36 this._user = args.user; 34 this._user = args.user;
37 this._data = args.data || null; 35 this._data = args.data || null;
38 36
39 return this; 37 return this;
40} 38}
41 39
42Clipperz.PM.DataModel.Statistics.prototype = MochiKit.Base.update(null, { 40Clipperz.PM.DataModel.Statistics.prototype = MochiKit.Base.update(null, {
43 41
44 //------------------------------------------------------------------------- 42 //-------------------------------------------------------------------------
45 43
46 'decrypt': function(aVersion, someEncryptedData) { 44 'decrypt': function(aVersion, someEncryptedData) {
47 var deferredResult; 45 var deferredResult;
48 46
49//MochiKit.Logging.logDebug(">>> Statistics.decrypt"); 47//MochiKit.Logging.logDebug(">>> Statistics.decrypt");
50 if (someEncryptedData == Clipperz.PM.Crypto.nullValue) { 48 if (someEncryptedData == Clipperz.PM.Crypto.nullValue) {
51 this.setData({}); 49 this.setData({});
52 deferredResult = MochiKit.Async.succeed(this.data()); 50 deferredResult = MochiKit.Async.succeed(this.data());
53 } else { 51 } else {
54 varstatistic; 52 varstatistic;
55 var user; 53 var user;
56 54
57 statistic = this; 55 statistic = this;
58 user = this.user(); 56 user = this.user();
59 deferredResult = new MochiKit.Async.Deferred(); 57 deferredResult = new MochiKit.Async.Deferred();
60//deferredResult.addCallback(function() { console.time("Statistics.decrypt.deferredDecrypt")}); 58//deferredResult.addCallback(function() { console.time("Statistics.decrypt.deferredDecrypt")});
61 deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt, user.passphrase(), someEncryptedData, aVersion); 59 deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt, user.passphrase(), someEncryptedData, aVersion);
62//deferredResult.addCallback(function() { console.timeEnd("Statistics.decrypt.deferredDecrypt")}); 60//deferredResult.addCallback(function() { console.timeEnd("Statistics.decrypt.deferredDecrypt")});
63//deferredResult.addCallback(function() { console.time("Statistics.decrypt.setup")}); 61//deferredResult.addCallback(function() { console.time("Statistics.decrypt.setup")});
64 deferredResult.addCallbacks( 62 deferredResult.addCallbacks(
65 MochiKit.Base.partial(function (aStatistic, someData) { 63 MochiKit.Base.partial(function (aStatistic, someData) {
66 aStatistic.setData(someData); 64 aStatistic.setData(someData);
67 return aStatistic.data(); 65 return aStatistic.data();
68 }, statistic), 66 }, statistic),
69 MochiKit.Base.partial(function (aStatistic) { 67 MochiKit.Base.partial(function (aStatistic) {
70 MochiKit.Logging.logWarning("resetting user statistics due to an error while decrypting stored data"); 68 MochiKit.Logging.logWarning("resetting user statistics due to an error while decrypting stored data");
71 aStatistic.setData({}); 69 aStatistic.setData({});
72 return aStatistic.data(); 70 return aStatistic.data();
73 }, statistic) 71 }, statistic)
74 ); 72 );
75//deferredResult.addCallback(function() { console.timeEnd("Statistics.decrypt.setup")}); 73//deferredResult.addCallback(function() { console.timeEnd("Statistics.decrypt.setup")});
76 74
77 deferredResult.callback(); 75 deferredResult.callback();
78 } 76 }
79//MochiKit.Logging.logDebug("<<< Statistics.decrypt"); 77//MochiKit.Logging.logDebug("<<< Statistics.decrypt");
80 78
81 return deferredResult; 79 return deferredResult;
82 }, 80 },
83 81
84 //------------------------------------------------------------------------- 82 //-------------------------------------------------------------------------
85 83
86 'user': function() { 84 'user': function() {
87 return this._user; 85 return this._user;
88 }, 86 },
89 87
90 //------------------------------------------------------------------------- 88 //-------------------------------------------------------------------------
91 89
92 'data': function() { 90 'data': function() {
93 return this._data; 91 return this._data;
94 }, 92 },
95 93
96 'setData': function(aValue) { 94 'setData': function(aValue) {
97 this._data = aValue; 95 this._data = aValue;
98 96
99 this.extractInfoFromData(aValue); 97 this.extractInfoFromData(aValue);
100 }, 98 },
101 99
102 //------------------------------------------------------------------------- 100 //-------------------------------------------------------------------------
103 101
104 'extractInfoFromData': function(someValues) { 102 'extractInfoFromData': function(someValues) {
105 103
106 }, 104 },
107 105
108 //------------------------------------------------------------------------- 106 //-------------------------------------------------------------------------
109 107
110 'encryptedData': function() { 108 'encryptedData': function() {
111 return Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion(this.user().passphrase(), this.serializedData()); 109 return Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion(this.user().passphrase(), this.serializedData());
112 }, 110 },
113 111
114 //------------------------------------------------------------------------- 112 //-------------------------------------------------------------------------
115 113
116 'serializedData': function() { 114 'serializedData': function() {
117 var result; 115 var result;
118 116
119//MochiKit.Logging.logDebug(">>> Statistics.serializedData"); 117//MochiKit.Logging.logDebug(">>> Statistics.serializedData");
120 result = {}; 118 result = {};
121//MochiKit.Logging.logDebug("<<< Statistics.serializedData"); 119//MochiKit.Logging.logDebug("<<< Statistics.serializedData");
122 120
123 return result; 121 return result;
124 }, 122 },
125 123
126 //------------------------------------------------------------------------- 124 //-------------------------------------------------------------------------
127 __syntaxFix__: "syntax fix" 125 __syntaxFix__: "syntax fix"
128 126
129}); 127});
130 128
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/User.js b/frontend/beta/js/Clipperz/PM/DataModel/User.js
index b29d224..3067742 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/User.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/User.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.DataModel.User = function(args) { 31Clipperz.PM.DataModel.User = function(args) {
34//MochiKit.Logging.logDebug(">>> new User"); 32//MochiKit.Logging.logDebug(">>> new User");
35 args = args || {}; 33 args = args || {};
36 34
37 this._username = args.username || null; 35 this._username = args.username || null;
38 this._passphrase = args.passphrase || null; 36 this._passphrase = args.passphrase || null;
39 37
40 this._connection = null; 38 this._connection = null;
41 this._connectionVersion = 'current'; 39 this._connectionVersion = 'current';
42 40
43 this._header = null; 41 this._header = null;
44 this._statistics = null; 42 this._statistics = null;
45 this._lock = 'new lock'; 43 this._lock = 'new lock';
46 44
47 this._preferences = null; 45 this._preferences = null;
48 this._records = {}; 46 this._records = {};
49 this._directLoginReferences = {}; 47 this._directLoginReferences = {};
50 this._oneTimePasswordManager = null; 48 this._oneTimePasswordManager = null;
51 49
52 this._isLoadingUserDetails = false; 50 this._isLoadingUserDetails = false;
53 this._loadingUserDetailsPendingQueue = []; 51 this._loadingUserDetailsPendingQueue = [];
54 52
55 this._maxNumberOfRecords = Number.MAX_VALUE; 53 this._maxNumberOfRecords = Number.MAX_VALUE;
56 54
57 this._shouldDownloadOfflineCopy = false; 55 this._shouldDownloadOfflineCopy = false;
58 56
59 this._loginInfo = null; 57 this._loginInfo = null;
60 this._loginHistory = null; 58 this._loginHistory = null;
61 59
62 this._serverData = null; 60 this._serverData = null;
63//MochiKit.Logging.logDebug("<<< new User"); 61//MochiKit.Logging.logDebug("<<< new User");
64 62
65 return this; 63 return this;
66} 64}
67 65
68Clipperz.PM.DataModel.User.prototype = MochiKit.Base.update(null, { 66Clipperz.PM.DataModel.User.prototype = MochiKit.Base.update(null, {
69 67
70 'toString': function() { 68 'toString': function() {
71 return "Clipperz.PM.DataModel.User - " + this.username(); 69 return "Clipperz.PM.DataModel.User - " + this.username();
72 }, 70 },
73 71
74 //------------------------------------------------------------------------- 72 //-------------------------------------------------------------------------
75 73
76 'username': function() { 74 'username': function() {
77 return this._username; 75 return this._username;
78 }, 76 },
79 77
80 'setUsername': function(aValue) { 78 'setUsername': function(aValue) {
81 this._username = aValue; 79 this._username = aValue;
82 }, 80 },
83 81
84 //------------------------------------------------------------------------- 82 //-------------------------------------------------------------------------
85 83
86 'passphrase': function() { 84 'passphrase': function() {
87 return this._passphrase; 85 return this._passphrase;
88 }, 86 },
89 87
90 'setPassphrase': function(aValue) { 88 'setPassphrase': function(aValue) {
91 this._passphrase = aValue; 89 this._passphrase = aValue;
92 }, 90 },
93 91
94 //------------------------------------------------------------------------- 92 //-------------------------------------------------------------------------
95 93
96 'maxNumberOfRecords': function() { 94 'maxNumberOfRecords': function() {
97 return this._maxNumberOfRecords; 95 return this._maxNumberOfRecords;
98 }, 96 },
99 97
100 'setMaxNumberOfRecords': function(aValue) { 98 'setMaxNumberOfRecords': function(aValue) {
101 this._maxNumberOfRecords = aValue; 99 this._maxNumberOfRecords = aValue;
102 }, 100 },
103 101
104 //------------------------------------------------------------------------- 102 //-------------------------------------------------------------------------
105 103
106 'errorHandler': function(anErrorString, anException) { 104 'errorHandler': function(anErrorString, anException) {
107MochiKit.Logging.logError("- User.errorHandler: " + anErrorString + " (" + anException + ")"); 105MochiKit.Logging.logError("- User.errorHandler: " + anErrorString + " (" + anException + ")");
108 }, 106 },
109 107
110 //------------------------------------------------------------------------- 108 //-------------------------------------------------------------------------
111 109
112 'connectionVersion': function() { 110 'connectionVersion': function() {
113 return this._connectionVersion; 111 return this._connectionVersion;
114 }, 112 },
115 113
116 'setConnectionVersion': function(aValue) { 114 'setConnectionVersion': function(aValue) {
117 this._connectionVersion = aValue; 115 this._connectionVersion = aValue;
118 }, 116 },
119 117
120 //------------------------------------------------------------------------- 118 //-------------------------------------------------------------------------
121 119
122 'connection': function() { 120 'connection': function() {
123 if ((this._connection == null) && (this.connectionVersion() != null) ){ 121 if ((this._connection == null) && (this.connectionVersion() != null) ){
124 this._connection = new Clipperz.PM.Crypto.communicationProtocol.versions[this.connectionVersion()]({user:this}); 122 this._connection = new Clipperz.PM.Crypto.communicationProtocol.versions[this.connectionVersion()]({user:this});
125 } 123 }
126 124
127 return this._connection; 125 return this._connection;
128 }, 126 },
129 127
130 'resetConnection': function(aValue) { 128 'resetConnection': function(aValue) {
131 this._connection = null; 129 this._connection = null;
132 }, 130 },
133 131
134 //========================================================================= 132 //=========================================================================
135 133
136 'register': function(anInvitationCode) { 134 'register': function(anInvitationCode) {
137 vardeferredResult; 135 vardeferredResult;
138 var prng; 136 var prng;
139 137
140//MochiKit.Logging.logError(">>> User.register: " + this); 138//MochiKit.Logging.logError(">>> User.register: " + this);
141 prng = Clipperz.Crypto.PRNG.defaultRandomGenerator(); 139 prng = Clipperz.Crypto.PRNG.defaultRandomGenerator();
142 140
143 deferredResult = new MochiKit.Async.Deferred() 141 deferredResult = new MochiKit.Async.Deferred()
144//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 1: " + res); return res;}); 142//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 1: " + res); return res;});
145 deferredResult.addCallback(MochiKit.Base.method(prng, 'deferredEntropyCollection')); 143 deferredResult.addCallback(MochiKit.Base.method(prng, 'deferredEntropyCollection'));
146//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 2: " + res); return res;}); 144//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 2: " + res); return res;});
147 deferredResult.addCallback(MochiKit.Base.method(this.header(), 'updateAllSections'), anInvitationCode); 145 deferredResult.addCallback(MochiKit.Base.method(this.header(), 'updateAllSections'), anInvitationCode);
148//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 2.1: " + res); return res;}); 146//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 2.1: " + res); return res;});
149 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'register'), anInvitationCode); 147 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'register'), anInvitationCode);
150//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 3: " + res); return res;}); 148//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 3: " + res); return res;});
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/UserPreferences.js b/frontend/beta/js/Clipperz/PM/DataModel/UserPreferences.js
index 919289d..d44ad89 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/UserPreferences.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/UserPreferences.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 26if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 27
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.DataModel.UserPreferences = function(args) { 31Clipperz.PM.DataModel.UserPreferences = function(args) {
34 args = args || {}; 32 args = args || {};
35 33
36 this._user = args['user']; delete args['user']; 34 this._user = args['user']; delete args['user'];
37 this._config = args; 35 this._config = args;
38 36
39 return this; 37 return this;
40} 38}
41 39
42Clipperz.PM.DataModel.UserPreferences.prototype = MochiKit.Base.update(null, { 40Clipperz.PM.DataModel.UserPreferences.prototype = MochiKit.Base.update(null, {
43 41
44 //------------------------------------------------------------------------- 42 //-------------------------------------------------------------------------
45 43
46 'config': function() { 44 'config': function() {
47 return this._config; 45 return this._config;
48 }, 46 },
49 47
50 //------------------------------------------------------------------------- 48 //-------------------------------------------------------------------------
51 49
52 'user': function() { 50 'user': function() {
53 return this._user; 51 return this._user;
54 }, 52 },
55 53
56 //------------------------------------------------------------------------- 54 //-------------------------------------------------------------------------
57 55
58 'updateWithData': function(someValues) { 56 'updateWithData': function(someValues) {
59 var currentLanguage; 57 var currentLanguage;
60 58
61//MochiKit.Logging.logDebug(">>> Clipperz.PM.DataModel.UserPreferences.updateWithData: " + Clipperz.Base.serializeJSON(someValues)); 59//MochiKit.Logging.logDebug(">>> Clipperz.PM.DataModel.UserPreferences.updateWithData: " + Clipperz.Base.serializeJSON(someValues));
62 currentLanguage = this.preferredLanguage(); 60 currentLanguage = this.preferredLanguage();
63 61
64 MochiKit.Base.update(this._config, someValues); 62 MochiKit.Base.update(this._config, someValues);
65 63
66 if (this.preferredLanguage() != currentLanguage) { 64 if (this.preferredLanguage() != currentLanguage) {
67 Clipperz.PM.Strings.Languages.setSelectedLanguage(this.preferredLanguage()); 65 Clipperz.PM.Strings.Languages.setSelectedLanguage(this.preferredLanguage());
68 } else { 66 } else {
69//MochiKit.Logging.logDebug("### keepping the browser selected language: " + Clipperz.PM.Strings.selectedLanguage); 67//MochiKit.Logging.logDebug("### keepping the browser selected language: " + Clipperz.PM.Strings.selectedLanguage);
70 } 68 }
71 69
72 return this; 70 return this;
73 }, 71 },
74 72
75 //------------------------------------------------------------------------- 73 //-------------------------------------------------------------------------
76 74
77 'configValue': function(aConfigName, aDefaultValue) { 75 'configValue': function(aConfigName, aDefaultValue) {
78 var result; 76 var result;
79 77
80//MochiKit.Logging.logDebug(">>> UserPreferences.configValue - config: " + Clipperz.Base.serializeJSON(this.config())); 78//MochiKit.Logging.logDebug(">>> UserPreferences.configValue - config: " + Clipperz.Base.serializeJSON(this.config()));
81 if (typeof(this.config()[aConfigName]) == 'undefined') { 79 if (typeof(this.config()[aConfigName]) == 'undefined') {
82 result = aDefaultValue; 80 result = aDefaultValue;
83 } else { 81 } else {
84 result = this.config()[aConfigName]; 82 result = this.config()[aConfigName];
85 } 83 }
86//MochiKit.Logging.logDebug("<<< UserPreferences.configValue"); 84//MochiKit.Logging.logDebug("<<< UserPreferences.configValue");
87 85
88 return result; 86 return result;
89 }, 87 },
90 88
91 'setConfigValue': function(aConfigName, aValue) { 89 'setConfigValue': function(aConfigName, aValue) {
92 var result; 90 var result;
93 91
94 if (aValue != this.configValue(aConfigName)) { 92 if (aValue != this.configValue(aConfigName)) {
95 if (aValue == null) { 93 if (aValue == null) {
96 delete this.config()[aConfigName] 94 delete this.config()[aConfigName]
97 } else { 95 } else {
98 this.config()[aConfigName] = aValue; 96 this.config()[aConfigName] = aValue;
99 } 97 }
100 98
101 Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'preferences', true); 99 Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'preferences', true);
102 100
103 result = true; 101 result = true;
104 } else { 102 } else {
105 result = false; 103 result = false;
106 } 104 }
107 105
108 return result; 106 return result;
109 }, 107 },
110 108
111 //------------------------------------------------------------------------- 109 //-------------------------------------------------------------------------
112 110
113 'useSafeEditMode': function() { 111 'useSafeEditMode': function() {
114 return this.configValue('useSafeEditMode', true); 112 return this.configValue('useSafeEditMode', true);
115 }, 113 },
116 114
117 'setUseSafeEditMode': function(aValue) { 115 'setUseSafeEditMode': function(aValue) {
118 this.setConfigValue('useSafeEditMode', aValue); 116 this.setConfigValue('useSafeEditMode', aValue);
119 }, 117 },
120 118
121 //------------------------------------------------------------------------- 119 //-------------------------------------------------------------------------
122 120
123 'preferredLanguage': function() { 121 'preferredLanguage': function() {
124 return this.configValue('preferredLanguage', null); 122 return this.configValue('preferredLanguage', null);
125 }, 123 },
126 124
127 'setPreferredLanguage': function(aValue) { 125 'setPreferredLanguage': function(aValue) {
128 if (this.setConfigValue('preferredLanguage', aValue)) { 126 if (this.setConfigValue('preferredLanguage', aValue)) {
129 Clipperz.PM.Strings.Languages.setSelectedLanguage(this.preferredLanguage()); 127 Clipperz.PM.Strings.Languages.setSelectedLanguage(this.preferredLanguage());
130 } 128 }
131 }, 129 },
132 130
133 //------------------------------------------------------------------------- 131 //-------------------------------------------------------------------------
134 132
135 'shouldShowDonationPanel': function() { 133 'shouldShowDonationPanel': function() {
136 return this.configValue('shouldShowDonationPanel', true); 134 return this.configValue('shouldShowDonationPanel', true);
137 }, 135 },
138 136
139 'setShouldShowDonationPanel': function(aValue) { 137 'setShouldShowDonationPanel': function(aValue) {
140 this.setConfigValue('shouldShowDonationPanel', aValue); 138 this.setConfigValue('shouldShowDonationPanel', aValue);
141 }, 139 },
142 140
143 //------------------------------------------------------------------------- 141 //-------------------------------------------------------------------------
144 142
145 'disableUnsecureFaviconLoadingForIE': function() { 143 'disableUnsecureFaviconLoadingForIE': function() {
146 return this.configValue('disableUnsecureFaviconLoadingForIE', false); 144 return this.configValue('disableUnsecureFaviconLoadingForIE', false);
147 }, 145 },
148 146
149 'setDisableUnsecureFaviconLoadingForIE': function(aValue) { 147 'setDisableUnsecureFaviconLoadingForIE': function(aValue) {
150 this.setConfigValue('disableUnsecureFaviconLoadingForIE', aValue); 148 this.setConfigValue('disableUnsecureFaviconLoadingForIE', aValue);
diff --git a/frontend/beta/js/Clipperz/PM/Date.js b/frontend/beta/js/Clipperz/PM/Date.js
index 13116e9..36c10c8 100644
--- a/frontend/beta/js/Clipperz/PM/Date.js
+++ b/frontend/beta/js/Clipperz/PM/Date.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Date) == 'undefined') { Clipperz.PM.Date = {}; } 26if (typeof(Clipperz.PM.Date) == 'undefined') { Clipperz.PM.Date = {}; }
29 27
30Clipperz.PM.Date.VERSION = "0.1"; 28Clipperz.PM.Date.VERSION = "0.1";
31Clipperz.PM.Date.NAME = "Clipperz.PM.Date"; 29Clipperz.PM.Date.NAME = "Clipperz.PM.Date";
32 30
33MochiKit.Base.update(Clipperz.PM.Date, { 31MochiKit.Base.update(Clipperz.PM.Date, {
34 32
35 '__repr__': function () { 33 '__repr__': function () {
36 return "[" + this.NAME + " " + this.VERSION + "]"; 34 return "[" + this.NAME + " " + this.VERSION + "]";
37 }, 35 },
38 36
39 //------------------------------------------------------------------------- 37 //-------------------------------------------------------------------------
40 38
41 'toString': function () { 39 'toString': function () {
42 return this.__repr__(); 40 return this.__repr__();
43 }, 41 },
44 42
45 //------------------------------------------------------------------------- 43 //-------------------------------------------------------------------------
46 44
47 'locale': function() { 45 'locale': function() {
48 return { 46 return {
49 'amDesignation':Clipperz.PM.Strings['calendarStrings']['amDesignation'], 47 'amDesignation':Clipperz.PM.Strings['calendarStrings']['amDesignation'],
50 'pmDesignation':Clipperz.PM.Strings['calendarStrings']['pmDesignation'], 48 'pmDesignation':Clipperz.PM.Strings['calendarStrings']['pmDesignation'],
51 'days': Clipperz.PM.Strings['calendarStrings']['days'], 49 'days': Clipperz.PM.Strings['calendarStrings']['days'],
52 'shortDays': Clipperz.PM.Strings['calendarStrings']['shortDays'], 50 'shortDays': Clipperz.PM.Strings['calendarStrings']['shortDays'],
53 'shortMonths': Clipperz.PM.Strings['calendarStrings']['shortMonths'], 51 'shortMonths': Clipperz.PM.Strings['calendarStrings']['shortMonths'],
54 'months': Clipperz.PM.Strings['calendarStrings']['months'] 52 'months': Clipperz.PM.Strings['calendarStrings']['months']
55 } 53 }
56 }, 54 },
57 55
58 //========================================================================= 56 //=========================================================================
59/* 57/*
60 'formatDateWithPHPLikeTemplate': function(aDate, aTemplate) { 58 'formatDateWithPHPLikeTemplate': function(aDate, aTemplate) {
61 return Clipperz.Date.formatDateWithPHPLikeTemplateAndLocale(aDate, aTemplate, Clipperz.PM.Date.locale()); 59 return Clipperz.Date.formatDateWithPHPLikeTemplateAndLocale(aDate, aTemplate, Clipperz.PM.Date.locale());
62 }, 60 },
63 61
64 'parseDateWithPHPLikeTemplate': function(aDate, aTemplate) { 62 'parseDateWithPHPLikeTemplate': function(aDate, aTemplate) {
65 return Clipperz.Date.parseDateWithPHPTemplateAndLocale(aDate, aTemplate, Clipperz.PM.Date.locale()); 63 return Clipperz.Date.parseDateWithPHPTemplateAndLocale(aDate, aTemplate, Clipperz.PM.Date.locale());
66 }, 64 },
67 65
68 //========================================================================= 66 //=========================================================================
69 67
70 'formatDateWithJavaLikeTemplate': function(aDate, aTemplate) { 68 'formatDateWithJavaLikeTemplate': function(aDate, aTemplate) {
71 return Clipperz.Date.formatDateWithJavaLikeTemplateAndLocale(aDate, aTemplate, Clipperz.PM.Date.locale()); 69 return Clipperz.Date.formatDateWithJavaLikeTemplateAndLocale(aDate, aTemplate, Clipperz.PM.Date.locale());
72 }, 70 },
73 71
74 'parseDateWithJavaLikeTemplate': function(aDate, aTemplate) { 72 'parseDateWithJavaLikeTemplate': function(aDate, aTemplate) {
75 return Clipperz.Date.parseDateWithJavaLikeTemplateAndLocale(aDate, aTemplate, Clipperz.PM.Date.locale()); 73 return Clipperz.Date.parseDateWithJavaLikeTemplateAndLocale(aDate, aTemplate, Clipperz.PM.Date.locale());
76 }, 74 },
77*/ 75*/
78 //========================================================================= 76 //=========================================================================
79 77
80 'formatDateWithTemplate': function(aDate, aTemplate) { 78 'formatDateWithTemplate': function(aDate, aTemplate) {
81 var result; 79 var result;
82 80
83 if (aDate == null) { 81 if (aDate == null) {
84 result = "" 82 result = ""
85 } else { 83 } else {
86 result = Clipperz.Date.formatDateWithPHPLikeTemplateAndLocale(aDate, aTemplate, Clipperz.PM.Date.locale()); 84 result = Clipperz.Date.formatDateWithPHPLikeTemplateAndLocale(aDate, aTemplate, Clipperz.PM.Date.locale());
87 }; 85 };
88 86
89 return result; 87 return result;
90 }, 88 },
91 89
92 'parseDateWithTemplate': function(aValue, aTemplate) { 90 'parseDateWithTemplate': function(aValue, aTemplate) {
93 return Clipperz.Date.parseDateWithPHPTemplateAndLocale(aValue, aTemplate, Clipperz.PM.Date.locale()); 91 return Clipperz.Date.parseDateWithPHPTemplateAndLocale(aValue, aTemplate, Clipperz.PM.Date.locale());
94 }, 92 },
95 93
96 //========================================================================= 94 //=========================================================================
97 95
98 'formatDateWithUTCFormat': function(aDate) { 96 'formatDateWithUTCFormat': function(aDate) {
99 return Clipperz.Date.formatDateWithUTCFormatAndLocale(aDate, Clipperz.PM.Date.locale()); 97 return Clipperz.Date.formatDateWithUTCFormatAndLocale(aDate, Clipperz.PM.Date.locale());
100 }, 98 },
101 99
102 'parseDateWithUTCFormat': function(aValue) { 100 'parseDateWithUTCFormat': function(aValue) {
103 var result; 101 var result;
104 102
105 if (aValue == null) { 103 if (aValue == null) {
106 result = null; 104 result = null;
107 } else { 105 } else {
108 result = Clipperz.Date.parseDateWithUTCFormatAndLocale(aValue, Clipperz.PM.Date.locale()); 106 result = Clipperz.Date.parseDateWithUTCFormatAndLocale(aValue, Clipperz.PM.Date.locale());
109 } 107 }
110 108
111 return result; 109 return result;
112 }, 110 },
113 111
114 //========================================================================= 112 //=========================================================================
115 113
116 'getElapsedTimeDescription': function(aDate) { 114 'getElapsedTimeDescription': function(aDate) {
117 var result; 115 var result;
118 116
119 result = "" 117 result = ""
120 118
121 if (aDate != null) { 119 if (aDate != null) {
122 var now; 120 var now;
123 var elapsedTime; 121 var elapsedTime;
124 122
125 var millisencondsInAMinute; 123 var millisencondsInAMinute;
126 var millisencondsInAnHour; 124 var millisencondsInAnHour;
127 var millisencondsInADay; 125 var millisencondsInADay;
128 var millisencondsInAWeek; 126 var millisencondsInAWeek;
129 var millisencondsInAMonth; 127 var millisencondsInAMonth;
130 128
131 now = new Date(); 129 now = new Date();
132 elapsedTime = now.getTime() - aDate.getTime(); 130 elapsedTime = now.getTime() - aDate.getTime();
133 131
134 millisencondsInAMinute = 60 * 1000; 132 millisencondsInAMinute = 60 * 1000;
135 millisencondsInAnHour = millisencondsInAMinute * 60; 133 millisencondsInAnHour = millisencondsInAMinute * 60;
136 millisencondsInADay = millisencondsInAnHour * 24; 134 millisencondsInADay = millisencondsInAnHour * 24;
137 millisencondsInAWeek = millisencondsInADay * 7; 135 millisencondsInAWeek = millisencondsInADay * 7;
138 millisencondsInAMonth = millisencondsInAWeek * 5; 136 millisencondsInAMonth = millisencondsInAWeek * 5;
139 137
140 if ((elapsedTime / millisencondsInAMonth) > 1) { 138 if ((elapsedTime / millisencondsInAMonth) > 1) {
141 result = Clipperz.PM.Strings['elapsedTimeDescriptions']['MORE_THAN_A_MONTH_AGO']; 139 result = Clipperz.PM.Strings['elapsedTimeDescriptions']['MORE_THAN_A_MONTH_AGO'];
142 } else if ((elapsedTime / millisencondsInAWeek) > 1) { 140 } else if ((elapsedTime / millisencondsInAWeek) > 1) {
143 var elapsedWeeks; 141 var elapsedWeeks;
144 142
145 elapsedWeeks = Math.floor((elapsedTime / millisencondsInAWeek)); 143 elapsedWeeks = Math.floor((elapsedTime / millisencondsInAWeek));
146 if (elapsedWeeks == 1) { 144 if (elapsedWeeks == 1) {
147 result = Clipperz.PM.Strings['elapsedTimeDescriptions']['MORE_THAN_A_WEEK_AGO']; 145 result = Clipperz.PM.Strings['elapsedTimeDescriptions']['MORE_THAN_A_WEEK_AGO'];
148 } else { 146 } else {
149 result = Clipprez.PM.Strings['elapsedTimeDescriptions']['MORE_THAN_*_WEEKS_AGO'].replace(/__elapsed__/, elapsedWeeks); 147 result = Clipprez.PM.Strings['elapsedTimeDescriptions']['MORE_THAN_*_WEEKS_AGO'].replace(/__elapsed__/, elapsedWeeks);
150 } 148 }
diff --git a/frontend/beta/js/Clipperz/PM/Main.js b/frontend/beta/js/Clipperz/PM/Main.js
index 989e0a4..3dded31 100644
--- a/frontend/beta/js/Clipperz/PM/Main.js
+++ b/frontend/beta/js/Clipperz/PM/Main.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 24if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
27 25
28Clipperz.PM.VERSION = "0.1"; 26Clipperz.PM.VERSION = "0.1";
29Clipperz.PM.NAME = "Clipperz.PM"; 27Clipperz.PM.NAME = "Clipperz.PM";
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.PM.Main = function() { 31Clipperz.PM.Main = function() {
34 this._loginPanel = null; 32 this._loginPanel = null;
35 this._user = null; 33 this._user = null;
36 34
37 this._isRunningCompact = false; 35 this._isRunningCompact = false;
38 36
39 Clipperz.NotificationCenter.register(null, 'userConnected', this, 'userConnectedCallback'); 37 Clipperz.NotificationCenter.register(null, 'userConnected', this, 'userConnectedCallback');
40 Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler'); 38 Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler');
41 39
42 Clipperz.NotificationCenter.register(null, 'EXCEPTION', this, 'reportException'); 40 Clipperz.NotificationCenter.register(null, 'EXCEPTION', this, 'reportException');
43 41
44 return this; 42 return this;
45} 43}
46 44
47//============================================================================= 45//=============================================================================
48 46
49MochiKit.Base.update(Clipperz.PM.Main.prototype, { 47MochiKit.Base.update(Clipperz.PM.Main.prototype, {
50 'toString': function() { 48 'toString': function() {
51 return "Clipperz.PM.Main"; 49 return "Clipperz.PM.Main";
52 }, 50 },
53 51
54 'switchLanguageHandler': function() { 52 'switchLanguageHandler': function() {
55//MochiKit.Logging.logDebug(">>> main.switchLanguageHandler"); 53//MochiKit.Logging.logDebug(">>> main.switchLanguageHandler");
56 YAHOO.ext.Element.get('donateHeaderIconLink').dom.href = Clipperz.PM.Strings['donateHeaderLinkUrl']; 54 YAHOO.ext.Element.get('donateHeaderIconLink').dom.href = Clipperz.PM.Strings['donateHeaderLinkUrl'];
57 YAHOO.ext.Element.get('donateHeaderLink').update(Clipperz.PM.Strings['donateHeaderLinkLabel']).dom.href = Clipperz.PM.Strings['donateHeaderLinkUrl']; 55 YAHOO.ext.Element.get('donateHeaderLink').update(Clipperz.PM.Strings['donateHeaderLinkLabel']).dom.href = Clipperz.PM.Strings['donateHeaderLinkUrl'];
58 YAHOO.ext.Element.get('creditsHeaderLink').update(Clipperz.PM.Strings['creditsHeaderLinkLabel']).dom.href = Clipperz.PM.Strings['creditsHeaderLinkUrl']; 56 YAHOO.ext.Element.get('creditsHeaderLink').update(Clipperz.PM.Strings['creditsHeaderLinkLabel']).dom.href = Clipperz.PM.Strings['creditsHeaderLinkUrl'];
59 YAHOO.ext.Element.get('feedbackHeaderLink').update(Clipperz.PM.Strings['feedbackHeaderLinkLabel']).dom.href = Clipperz.PM.Strings['feedbackHeaderLinkUrl']; 57 YAHOO.ext.Element.get('feedbackHeaderLink').update(Clipperz.PM.Strings['feedbackHeaderLinkLabel']).dom.href = Clipperz.PM.Strings['feedbackHeaderLinkUrl'];
60 YAHOO.ext.Element.get('helpHeaderLink').update(Clipperz.PM.Strings['helpHeaderLinkLabel']).dom.href = Clipperz.PM.Strings['helpHeaderLinkUrl']; 58 YAHOO.ext.Element.get('helpHeaderLink').update(Clipperz.PM.Strings['helpHeaderLinkLabel']).dom.href = Clipperz.PM.Strings['helpHeaderLinkUrl'];
61 YAHOO.ext.Element.get('forumHeaderLink').update(Clipperz.PM.Strings['forumHeaderLinkLabel']).dom.href = Clipperz.PM.Strings['forumHeaderLinkUrl']; 59 YAHOO.ext.Element.get('forumHeaderLink').update(Clipperz.PM.Strings['forumHeaderLinkLabel']).dom.href = Clipperz.PM.Strings['forumHeaderLinkUrl'];
62 60
63 if (YAHOO.ext.Element.get('logout') != null) { 61 if (YAHOO.ext.Element.get('logout') != null) {
64 YAHOO.ext.Element.get('logout').update(Clipperz.PM.Strings['logoutMenuLabel']); 62 YAHOO.ext.Element.get('logout').update(Clipperz.PM.Strings['logoutMenuLabel']);
65 YAHOO.ext.Element.get('lock').update(Clipperz.PM.Strings['lockMenuLabel']); 63 YAHOO.ext.Element.get('lock').update(Clipperz.PM.Strings['lockMenuLabel']);
66 64
67 YAHOO.ext.Element.get('recordsTabAnchor').update(Clipperz.PM.Strings['recordMenuLabel']); 65 YAHOO.ext.Element.get('recordsTabAnchor').update(Clipperz.PM.Strings['recordMenuLabel']);
68 YAHOO.ext.Element.get('accountTabAnchor').update(Clipperz.PM.Strings['accountMenuLabel']); 66 YAHOO.ext.Element.get('accountTabAnchor').update(Clipperz.PM.Strings['accountMenuLabel']);
69 YAHOO.ext.Element.get('dataTabAnchor').update(Clipperz.PM.Strings['dataMenuLabel']); 67 YAHOO.ext.Element.get('dataTabAnchor').update(Clipperz.PM.Strings['dataMenuLabel']);
70 // YAHOO.ext.Element.get('contactsTabAnchor').update(Clipperz.PM.Strings['contactsMenuLabel']); 68 // YAHOO.ext.Element.get('contactsTabAnchor').update(Clipperz.PM.Strings['contactsMenuLabel']);
71 YAHOO.ext.Element.get('toolsTabAnchor').update(Clipperz.PM.Strings['toolsMenuLabel']); 69 YAHOO.ext.Element.get('toolsTabAnchor').update(Clipperz.PM.Strings['toolsMenuLabel']);
72 } 70 }
73//MochiKit.Logging.logDebug("<<< main.switchLanguageHandler"); 71//MochiKit.Logging.logDebug("<<< main.switchLanguageHandler");
74 }, 72 },
75 73
76 //------------------------------------------------------------------------- 74 //-------------------------------------------------------------------------
77 75
78 'fixToDrawTheMainTabsCorrectlyOnSafari': function() { 76 'fixToDrawTheMainTabsCorrectlyOnSafari': function() {
79 this.switchLanguageHandler(); 77 this.switchLanguageHandler();
80 }, 78 },
81 79
82 //------------------------------------------------------------------------- 80 //-------------------------------------------------------------------------
83 81
84 'run': function(shouldShowRegistrationForm) { 82 'run': function(shouldShowRegistrationForm) {
85 varmainElement; 83 varmainElement;
86 84
87 Clipperz.NotificationCenter.register(null, 'updatedProgressState', this, 'updateProgressDialogStatus'); 85 Clipperz.NotificationCenter.register(null, 'updatedProgressState', this, 'updateProgressDialogStatus');
88 86
89 YAHOO.ext.Element.get('recordDetailEditModeHeaderMask').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide().unmask(); 87 YAHOO.ext.Element.get('recordDetailEditModeHeaderMask').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide().unmask();
90 YAHOO.ext.Element.get('recordDetailEditModeVerticalMask').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide().unmask(); 88 YAHOO.ext.Element.get('recordDetailEditModeVerticalMask').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide().unmask();
91 89
92//MochiKit.Logging.logDebug(">>> Main.run"); 90//MochiKit.Logging.logDebug(">>> Main.run");
93 mainElement = YAHOO.ext.Element.get('main'); 91 mainElement = YAHOO.ext.Element.get('main');
94 if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) { 92 if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) {
95 YAHOO.ext.Element.get('applicationVersionType').dom.className = "readOnly"; 93 YAHOO.ext.Element.get('applicationVersionType').dom.className = "readOnly";
96 } 94 }
97 mainElement.update(""); 95 mainElement.update("");
98 96
99 Clipperz.YUI.DomHelper.append(mainElement.dom, {tag:'ul', cls:'clipperzTabPanels', children:[ 97 Clipperz.YUI.DomHelper.append(mainElement.dom, {tag:'ul', cls:'clipperzTabPanels', children:[
100 {tag:'li', id:'loginPanel'} 98 {tag:'li', id:'loginPanel'}
101 ]}) 99 ]})
102 100
103 this.setLoginPanel(new Clipperz.PM.Components.Panels.LoginPanel(YAHOO.ext.Element.get('loginPanel'))); 101 this.setLoginPanel(new Clipperz.PM.Components.Panels.LoginPanel(YAHOO.ext.Element.get('loginPanel')));
104 102
105//MochiKit.Logging.logDebug("--- Main.run - selecting active form to show ..."); 103//MochiKit.Logging.logDebug("--- Main.run - selecting active form to show ...");
106 if (shouldShowRegistrationForm == true) { 104 if (shouldShowRegistrationForm == true) {
107 this.loginPanel().showRegistrationForm(false); 105 this.loginPanel().showRegistrationForm(false);
108 } else { 106 } else {
109 this.loginPanel().showLoginForm(false); 107 this.loginPanel().showLoginForm(false);
110 } 108 }
111 109
112 this.switchLanguageHandler(); 110 this.switchLanguageHandler();
113//MochiKit.Logging.logDebug("--- Main.run - selecting active form to show. done."); 111//MochiKit.Logging.logDebug("--- Main.run - selecting active form to show. done.");
114//MochiKit.Logging.logDebug("<<< Main.run"); 112//MochiKit.Logging.logDebug("<<< Main.run");
115 }, 113 },
116 114
117 //------------------------------------------------------------------------- 115 //-------------------------------------------------------------------------
118 116
119 'runCompact': function() { 117 'runCompact': function() {
120 this.setIsRunningCompact(true); 118 this.setIsRunningCompact(true);
121 YAHOO.ext.Element.get(document.body).addClass("compact"); 119 YAHOO.ext.Element.get(document.body).addClass("compact");
122 new Clipperz.PM.Components.Compact.LoginForm(YAHOO.ext.Element.get('mainDiv')); 120 new Clipperz.PM.Components.Compact.LoginForm(YAHOO.ext.Element.get('mainDiv'));
123 }, 121 },
124 122
125 'showCompactInterface': function() { 123 'showCompactInterface': function() {
126//MochiKit.Logging.logDebug(">>> main.showCompactInterface"); 124//MochiKit.Logging.logDebug(">>> main.showCompactInterface");
127 new Clipperz.PM.Components.Compact.CompactInterface(YAHOO.ext.Element.get('compactBody'), {user:this.user()}); 125 new Clipperz.PM.Components.Compact.CompactInterface(YAHOO.ext.Element.get('compactBody'), {user:this.user()});
128//MochiKit.Logging.logDebug("<<< main.showCompactInterface"); 126//MochiKit.Logging.logDebug("<<< main.showCompactInterface");
129 }, 127 },
130 128
131 //------------------------------------------------------------------------- 129 //-------------------------------------------------------------------------
132 130
133 'mainPage': function() { 131 'mainPage': function() {
134 if (this._mainPage == null) { 132 if (this._mainPage == null) {
135 this._mainPage = new Clipperz.PM.Components.MainPage(); 133 this._mainPage = new Clipperz.PM.Components.MainPage();
136 } 134 }
137 135
138 return this._mainPage; 136 return this._mainPage;
139 }, 137 },
140 138
141 //------------------------------------------------------------------------- 139 //-------------------------------------------------------------------------
142 140
143 'loginPanel': function() { 141 'loginPanel': function() {
144 return this._loginPanel; 142 return this._loginPanel;
145 }, 143 },
146 144
147 'setLoginPanel': function(aValue) { 145 'setLoginPanel': function(aValue) {
148 this._loginPanel = aValue; 146 this._loginPanel = aValue;
149 }, 147 },
150 148
diff --git a/frontend/beta/js/Clipperz/PM/Proxy.js b/frontend/beta/js/Clipperz/PM/Proxy.js
index bec9195..cf5a237 100644
--- a/frontend/beta/js/Clipperz/PM/Proxy.js
+++ b/frontend/beta/js/Clipperz/PM/Proxy.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28 26
29//============================================================================= 27//=============================================================================
30 28
31Clipperz.PM.Proxy = function(args) { 29Clipperz.PM.Proxy = function(args) {
32 args = args || {}; 30 args = args || {};
33 31
34 this._shouldPayTolls = args.shouldPayTolls || false; 32 this._shouldPayTolls = args.shouldPayTolls || false;
35 33
36 this._tolls = { 34 this._tolls = {
37 'CONNECT':[], 35 'CONNECT':[],
38 'REGISTER':[], 36 'REGISTER':[],
39 'MESSAGE':[] 37 'MESSAGE':[]
40 }; 38 };
41 39
42 if (args.isDefault === true) { 40 if (args.isDefault === true) {
43 Clipperz.PM.Proxy.defaultProxy = this; 41 Clipperz.PM.Proxy.defaultProxy = this;
44 } 42 }
45 43
46 return this; 44 return this;
47} 45}
48 46
49Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, { 47Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, {
50 48
51 'toString': function() { 49 'toString': function() {
52 return "Clipperz.PM.Proxy"; 50 return "Clipperz.PM.Proxy";
53 }, 51 },
54 52
55 //========================================================================= 53 //=========================================================================
56 54
57 'shouldPayTolls': function() { 55 'shouldPayTolls': function() {
58 return this._shouldPayTolls; 56 return this._shouldPayTolls;
59 }, 57 },
60 58
61 //------------------------------------------------------------------------- 59 //-------------------------------------------------------------------------
62 60
63 'tolls': function() { 61 'tolls': function() {
64 return this._tolls; 62 return this._tolls;
65 }, 63 },
66 64
67 //------------------------------------------------------------------------- 65 //-------------------------------------------------------------------------
68 66
69 'payToll': function(aRequestType, someParameters) { 67 'payToll': function(aRequestType, someParameters) {
70 vardeferredResult; 68 vardeferredResult;
71 69
72//console.log(">>> Proxy.payToll", aRequestType, someParameters); 70//console.log(">>> Proxy.payToll", aRequestType, someParameters);
73 if (this.shouldPayTolls()) { 71 if (this.shouldPayTolls()) {
74 deferredResult = new MochiKit.Async.Deferred(); 72 deferredResult = new MochiKit.Async.Deferred();
75 73
76 if (this.tolls()[aRequestType].length == 0) { 74 if (this.tolls()[aRequestType].length == 0) {
77 deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage', 'knock', {requestType:aRequestType})); 75 deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage', 'knock', {requestType:aRequestType}));
78 deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback')); 76 deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback'));
79 } 77 }
80 deferredResult.addCallback(MochiKit.Base.method(this.tolls()[aRequestType], 'pop')); 78 deferredResult.addCallback(MochiKit.Base.method(this.tolls()[aRequestType], 'pop'));
81 deferredResult.addCallback(MochiKit.Base.methodcaller('deferredPay')); 79 deferredResult.addCallback(MochiKit.Base.methodcaller('deferredPay'));
82 deferredResult.addCallback(function(aToll) { 80 deferredResult.addCallback(function(aToll) {
83 var result; 81 var result;
84 82
85 result = { 83 result = {
86 parameters: someParameters, 84 parameters: someParameters,
87 toll: aToll 85 toll: aToll
88 } 86 }
89 87
90 return result; 88 return result;
91 }); 89 });
92 90
93 deferredResult.callback(); 91 deferredResult.callback();
94 } else { 92 } else {
95 deferredResult = MochiKit.Async.succeed({parameters:someParameters}); 93 deferredResult = MochiKit.Async.succeed({parameters:someParameters});
96 } 94 }
97//console.log("<<< Proxy.payToll"); 95//console.log("<<< Proxy.payToll");
98 96
99 return deferredResult; 97 return deferredResult;
100 }, 98 },
101 99
102 //------------------------------------------------------------------------- 100 //-------------------------------------------------------------------------
103 101
104 'addToll': function(aToll) { 102 'addToll': function(aToll) {
105//console.log(">>> Proxy.addToll", aToll); 103//console.log(">>> Proxy.addToll", aToll);
106 this.tolls()[aToll.requestType()].push(aToll); 104 this.tolls()[aToll.requestType()].push(aToll);
107//console.log("<<< Proxy.addToll"); 105//console.log("<<< Proxy.addToll");
108 }, 106 },
109 107
110 //========================================================================= 108 //=========================================================================
111 109
112 'setTollCallback': function(someParameters) { 110 'setTollCallback': function(someParameters) {
113//console.log(">>> Proxy.setTollCallback", someParameters); 111//console.log(">>> Proxy.setTollCallback", someParameters);
114 if (typeof(someParameters['toll']) != 'undefined') { 112 if (typeof(someParameters['toll']) != 'undefined') {
115//console.log("added a new toll", someParameters['toll']); 113//console.log("added a new toll", someParameters['toll']);
116 this.addToll(new Clipperz.PM.Toll(someParameters['toll'])); 114 this.addToll(new Clipperz.PM.Toll(someParameters['toll']));
117 } 115 }
118//console.log("<<< Proxy.setTallCallback", someParameters['result']); 116//console.log("<<< Proxy.setTallCallback", someParameters['result']);
119 return someParameters['result']; 117 return someParameters['result'];
120 }, 118 },
121 119
122 //========================================================================= 120 //=========================================================================
123 121
124 'registration': function (someParameters) { 122 'registration': function (someParameters) {
125 return this.processMessage('registration', someParameters, 'REGISTER'); 123 return this.processMessage('registration', someParameters, 'REGISTER');
126 }, 124 },
127 125
128 'handshake': function (someParameters) { 126 'handshake': function (someParameters) {
129 return this.processMessage('handshake', someParameters, 'CONNECT'); 127 return this.processMessage('handshake', someParameters, 'CONNECT');
130 }, 128 },
131 129
132 'message': function (someParameters) { 130 'message': function (someParameters) {
133 return this.processMessage('message', someParameters, 'MESSAGE'); 131 return this.processMessage('message', someParameters, 'MESSAGE');
134 }, 132 },
135 133
136 'logout': function (someParameters) { 134 'logout': function (someParameters) {
137 return this.processMessage('logout', someParameters, 'MESSAGE'); 135 return this.processMessage('logout', someParameters, 'MESSAGE');
138 }, 136 },
139 137
140 //========================================================================= 138 //=========================================================================
141 139
142 'processMessage': function (aFunctionName, someParameters, aRequestType) { 140 'processMessage': function (aFunctionName, someParameters, aRequestType) {
143 vardeferredResult; 141 vardeferredResult;
144 142
145 deferredResult = new MochiKit.Async.Deferred(); 143 deferredResult = new MochiKit.Async.Deferred();
146 deferredResult.addCallback(MochiKit.Base.method(this, 'payToll', aRequestType)); 144 deferredResult.addCallback(MochiKit.Base.method(this, 'payToll', aRequestType));
147 deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage', aFunctionName)); 145 deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage', aFunctionName));
148 deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback')); 146 deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback'));
149 deferredResult.callback(someParameters); 147 deferredResult.callback(someParameters);
150 148
diff --git a/frontend/beta/js/Clipperz/PM/Proxy/Proxy.JSON.js b/frontend/beta/js/Clipperz/PM/Proxy/Proxy.JSON.js
index 4f3b4b2..dac966d 100755
--- a/frontend/beta/js/Clipperz/PM/Proxy/Proxy.JSON.js
+++ b/frontend/beta/js/Clipperz/PM/Proxy/Proxy.JSON.js
@@ -1,97 +1,95 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28 26
29//============================================================================= 27//=============================================================================
30 28
31Clipperz.PM.Proxy.JSON = function(args) { 29Clipperz.PM.Proxy.JSON = function(args) {
32 Clipperz.PM.Proxy.JSON.superclass.constructor.call(this, args); 30 Clipperz.PM.Proxy.JSON.superclass.constructor.call(this, args);
33 31
34 this._url = args.url || Clipperz.Base.exception.raise('MandatoryParameter'); 32 this._url = args.url || Clipperz.Base.exception.raise('MandatoryParameter');
35 33
36 return this; 34 return this;
37} 35}
38 36
39YAHOO.extendX(Clipperz.PM.Proxy.JSON, Clipperz.PM.Proxy, { 37YAHOO.extendX(Clipperz.PM.Proxy.JSON, Clipperz.PM.Proxy, {
40 38
41 'toString': function() { 39 'toString': function() {
42 return "Clipperz.PM.Proxy.JSON"; 40 return "Clipperz.PM.Proxy.JSON";
43 }, 41 },
44 42
45 //========================================================================= 43 //=========================================================================
46 44
47 'url': function () { 45 'url': function () {
48 return this._url; 46 return this._url;
49 }, 47 },
50 48
51 //========================================================================= 49 //=========================================================================
52 50
53 'sendMessage': function(aFunctionName, someParameters) { 51 'sendMessage': function(aFunctionName, someParameters) {
54 vardeferredResult; 52 vardeferredResult;
55 var parameters; 53 var parameters;
56 54
57 parameters = { 55 parameters = {
58 method: aFunctionName, 56 method: aFunctionName,
59 // version: someParameters['version'], 57 // version: someParameters['version'],
60 // message: someParameters['message'], 58 // message: someParameters['message'],
61 parameters: Clipperz.Base.serializeJSON(someParameters) 59 parameters: Clipperz.Base.serializeJSON(someParameters)
62 }; 60 };
63 61
64 deferredResult = new MochiKit.Async.Deferred(); 62 deferredResult = new MochiKit.Async.Deferred();
65 deferredResult.addCallback(function (aValue) { 63 deferredResult.addCallback(function (aValue) {
66 MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'remoteRequestSent'); 64 MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'remoteRequestSent');
67 return aValue; 65 return aValue;
68 }); 66 });
69 deferredResult.addCallback(MochiKit.Async.doXHR, this.url(), { 67 deferredResult.addCallback(MochiKit.Async.doXHR, this.url(), {
70 method:'POST', 68 method:'POST',
71 sendContent:MochiKit.Base.queryString(parameters), 69 sendContent:MochiKit.Base.queryString(parameters),
72 headers:{"Content-Type":"application/x-www-form-urlencoded"} 70 headers:{"Content-Type":"application/x-www-form-urlencoded"}
73 }); 71 });
74 deferredResult.addCallback(function (aValue) { 72 deferredResult.addCallback(function (aValue) {
75 MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'remoteRequestReceived'); 73 MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'remoteRequestReceived');
76 return aValue; 74 return aValue;
77 }); 75 });
78 // deferredResult.addCallback(MochiKit.Async.evalJSONRequest); 76 // deferredResult.addCallback(MochiKit.Async.evalJSONRequest);
79 deferredResult.addCallback(MochiKit.Base.itemgetter('responseText')); 77 deferredResult.addCallback(MochiKit.Base.itemgetter('responseText'));
80 deferredResult.addCallback(Clipperz.Base.evalJSON); 78 deferredResult.addCallback(Clipperz.Base.evalJSON);
81 deferredResult.addCallback(function (someValues) { 79 deferredResult.addCallback(function (someValues) {
82 if (someValues['result'] == 'EXCEPTION') { 80 if (someValues['result'] == 'EXCEPTION') {
83 throw someValues['message']; 81 throw someValues['message'];
84 } 82 }
85 83
86 return someValues; 84 return someValues;
87 }) 85 })
88 // return MochiKit.Base.evalJSON(req.responseText); 86 // return MochiKit.Base.evalJSON(req.responseText);
89 deferredResult.callback(); 87 deferredResult.callback();
90 88
91 return deferredResult; 89 return deferredResult;
92 }, 90 },
93 91
94 //========================================================================= 92 //=========================================================================
95 __syntaxFix__: "syntax fix" 93 __syntaxFix__: "syntax fix"
96 94
97}); 95});
diff --git a/frontend/beta/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js b/frontend/beta/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js
index d5336be..1a5caff 100644
--- a/frontend/beta/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js
+++ b/frontend/beta/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26try { if (typeof(Clipperz.PM.Proxy.Offline) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.PM.Proxy.Offline) == 'undefined') { throw ""; }} catch (e) {
27 throw "Clipperz.PM.Proxy.Offline.DataStore depends on Clipperz.PM.Proxy.Offline!"; 25 throw "Clipperz.PM.Proxy.Offline.DataStore depends on Clipperz.PM.Proxy.Offline!";
28} 26}
29 27
30//============================================================================= 28//=============================================================================
31 29
32Clipperz.PM.Proxy.Offline.DataStore = function(args) { 30Clipperz.PM.Proxy.Offline.DataStore = function(args) {
33 args = args || {}; 31 args = args || {};
34 32
35 this._data = args.data || (typeof(_clipperz_dump_data_) != 'undefined' ? _clipperz_dump_data_ : null); 33 this._data = args.data || (typeof(_clipperz_dump_data_) != 'undefined' ? _clipperz_dump_data_ : null);
36 this._isReadOnly = (typeof(args.readOnly) == 'undefined' ? true : args.readOnly); 34 this._isReadOnly = (typeof(args.readOnly) == 'undefined' ? true : args.readOnly);
37 this._shouldPayTolls = args.shouldPayTolls || false; 35 this._shouldPayTolls = args.shouldPayTolls || false;
38 36
39 this._tolls = {}; 37 this._tolls = {};
40 this._connections = {}; 38 this._connections = {};
41 39
42 this._b = null; 40 this._b = null;
43 this._B = null; 41 this._B = null;
44 this._A = null; 42 this._A = null;
45 this._userData = null; 43 this._userData = null;
46 44
47 return this; 45 return this;
48} 46}
49 47
50//Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, { 48//Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
51Clipperz.PM.Proxy.Offline.DataStore.prototype = MochiKit.Base.update(null, { 49Clipperz.PM.Proxy.Offline.DataStore.prototype = MochiKit.Base.update(null, {
52 50
53 //------------------------------------------------------------------------- 51 //-------------------------------------------------------------------------
54 52
55 'isReadOnly': function () { 53 'isReadOnly': function () {
56 return this._isReadOnly; 54 return this._isReadOnly;
57 }, 55 },
58 56
59 //------------------------------------------------------------------------- 57 //-------------------------------------------------------------------------
60 58
61 'shouldPayTolls': function() { 59 'shouldPayTolls': function() {
62 return this._shouldPayTolls; 60 return this._shouldPayTolls;
63 }, 61 },
64 62
65 //------------------------------------------------------------------------- 63 //-------------------------------------------------------------------------
66 64
67 'data': function () { 65 'data': function () {
68 return this._data; 66 return this._data;
69 }, 67 },
70 68
71 //------------------------------------------------------------------------- 69 //-------------------------------------------------------------------------
72 70
73 'tolls': function () { 71 'tolls': function () {
74 return this._tolls; 72 return this._tolls;
75 }, 73 },
76 74
77 //------------------------------------------------------------------------- 75 //-------------------------------------------------------------------------
78 76
79 'connections': function () { 77 'connections': function () {
80 return this._connections; 78 return this._connections;
81 }, 79 },
82 80
83 //========================================================================= 81 //=========================================================================
84 82
85 'resetData': function() { 83 'resetData': function() {
86 this._data = { 84 this._data = {
87 'users': { 85 'users': {
88 'catchAllUser': { 86 'catchAllUser': {
89 __masterkey_test_value__: 'masterkey', 87 __masterkey_test_value__: 'masterkey',
90 s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00', 88 s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00',
91 v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00' 89 v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00'
92 } 90 }
93 } 91 }
94 }; 92 };
95 }, 93 },
96 94
97 //------------------------------------------------------------------------- 95 //-------------------------------------------------------------------------
98 96
99 'setupWithEncryptedData': function(someData) { 97 'setupWithEncryptedData': function(someData) {
100 this._data = Clipperz.Base.deepClone(someData); 98 this._data = Clipperz.Base.deepClone(someData);
101 }, 99 },
102 100
103 //------------------------------------------------------------------------- 101 //-------------------------------------------------------------------------
104 102
105 'setupWithData': function(someData) { 103 'setupWithData': function(someData) {
106 var deferredResult; 104 var deferredResult;
107 var resultData; 105 var resultData;
108 var i, c; 106 var i, c;
109 107
110//Clipperz.log(">>> Proxy.Test.setupWithData"); 108//Clipperz.log(">>> Proxy.Test.setupWithData");
111 resultData = this._data; 109 resultData = this._data;
112 110
113 deferredResult = new MochiKit.Async.Deferred(); 111 deferredResult = new MochiKit.Async.Deferred();
114 c = someData['users'].length; 112 c = someData['users'].length;
115 113
116 for (i=0; i<c; i++) { 114 for (i=0; i<c; i++) {
117 varnewConnection; 115 varnewConnection;
118 varrecordConfiguration; 116 varrecordConfiguration;
119 117
120 deferredResult.addCallback(MochiKit.Base.method(this, 'userSerializedEncryptedData', someData['users'][i])); 118 deferredResult.addCallback(MochiKit.Base.method(this, 'userSerializedEncryptedData', someData['users'][i]));
121 deferredResult.addCallback(MochiKit.Base.bind(function(aUserSerializationContext) { 119 deferredResult.addCallback(MochiKit.Base.bind(function(aUserSerializationContext) {
122//console.log("SERIALIZED USER", aUserSerializationContext); 120//console.log("SERIALIZED USER", aUserSerializationContext);
123 resultData['users'][aUserSerializationContext['credentials']['C']] = { 121 resultData['users'][aUserSerializationContext['credentials']['C']] = {
124 's': aUserSerializationContext['credentials']['s'], 122 's': aUserSerializationContext['credentials']['s'],
125 'v': aUserSerializationContext['credentials']['v'], 123 'v': aUserSerializationContext['credentials']['v'],
126 'version': aUserSerializationContext['data']['connectionVersion'], 124 'version': aUserSerializationContext['data']['connectionVersion'],
127 'userDetails': aUserSerializationContext['encryptedData']['user']['header'], 125 'userDetails': aUserSerializationContext['encryptedData']['user']['header'],
128 'userDetailsVersion':aUserSerializationContext['encryptedData']['user']['version'], 126 'userDetailsVersion':aUserSerializationContext['encryptedData']['user']['version'],
129 'statistics': aUserSerializationContext['encryptedData']['user']['statistics'], 127 'statistics': aUserSerializationContext['encryptedData']['user']['statistics'],
130 'lock': aUserSerializationContext['encryptedData']['user']['lock'], 128 'lock': aUserSerializationContext['encryptedData']['user']['lock'],
131 'records': this.rearrangeRecordsData(aUserSerializationContext['encryptedData']['records']) 129 'records': this.rearrangeRecordsData(aUserSerializationContext['encryptedData']['records'])
132 } 130 }
133 }, this)); 131 }, this));
134 } 132 }
135 133
136 deferredResult.addCallback(MochiKit.Base.bind(function() { 134 deferredResult.addCallback(MochiKit.Base.bind(function() {
137//console.log("this._data", resultData); 135//console.log("this._data", resultData);
138 this._data = resultData; 136 this._data = resultData;
139 }, this)); 137 }, this));
140 138
141 deferredResult.callback(); 139 deferredResult.callback();
142//Clipperz.log("<<< Proxy.Test.setupWithData"); 140//Clipperz.log("<<< Proxy.Test.setupWithData");
143 141
144 return deferredResult; 142 return deferredResult;
145 }, 143 },
146 144
147 //========================================================================= 145 //=========================================================================
148 146
149 'b': function() { 147 'b': function() {
150 return this._b; 148 return this._b;
diff --git a/frontend/beta/js/Clipperz/PM/Proxy/Proxy.Offline.js b/frontend/beta/js/Clipperz/PM/Proxy/Proxy.Offline.js
index 3cf499e..91a7b48 100644
--- a/frontend/beta/js/Clipperz/PM/Proxy/Proxy.Offline.js
+++ b/frontend/beta/js/Clipperz/PM/Proxy/Proxy.Offline.js
@@ -1,70 +1,68 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28 26
29//============================================================================= 27//=============================================================================
30 28
31Clipperz.PM.Proxy.Offline = function(args) { 29Clipperz.PM.Proxy.Offline = function(args) {
32 args = args || {}; 30 args = args || {};
33 31
34 Clipperz.PM.Proxy.Offline.superclass.constructor.call(this, args); 32 Clipperz.PM.Proxy.Offline.superclass.constructor.call(this, args);
35 33
36 this._dataStore = args.dataStore || new Clipperz.PM.Proxy.Offline.DataStore(args); 34 this._dataStore = args.dataStore || new Clipperz.PM.Proxy.Offline.DataStore(args);
37 35
38 return this; 36 return this;
39} 37}
40 38
41YAHOO.extendX(Clipperz.PM.Proxy.Offline, Clipperz.PM.Proxy, { 39YAHOO.extendX(Clipperz.PM.Proxy.Offline, Clipperz.PM.Proxy, {
42 40
43 'toString': function () { 41 'toString': function () {
44 return "Clipperz.PM.Proxy.Offline"; 42 return "Clipperz.PM.Proxy.Offline";
45 }, 43 },
46 44
47 //------------------------------------------------------------------------- 45 //-------------------------------------------------------------------------
48 46
49 'dataStore': function () { 47 'dataStore': function () {
50 return this._dataStore; 48 return this._dataStore;
51 }, 49 },
52 50
53 //------------------------------------------------------------------------- 51 //-------------------------------------------------------------------------
54 52
55 'sendMessage': function(aFunctionName, someParameters) { 53 'sendMessage': function(aFunctionName, someParameters) {
56 return this.dataStore().processMessage(aFunctionName, someParameters); 54 return this.dataStore().processMessage(aFunctionName, someParameters);
57 }, 55 },
58 56
59 //------------------------------------------------------------------------- 57 //-------------------------------------------------------------------------
60 58
61 'isReadOnly': function () { 59 'isReadOnly': function () {
62 return true; 60 return true;
63 }, 61 },
64 62
65 //------------------------------------------------------------------------- 63 //-------------------------------------------------------------------------
66 64
67 __syntaxFix__: "syntax fix" 65 __syntaxFix__: "syntax fix"
68 66
69}); 67});
70 68
diff --git a/frontend/beta/js/Clipperz/PM/Proxy/Proxy.Test.js b/frontend/beta/js/Clipperz/PM/Proxy/Proxy.Test.js
index ce6e6d8..18014f4 100644
--- a/frontend/beta/js/Clipperz/PM/Proxy/Proxy.Test.js
+++ b/frontend/beta/js/Clipperz/PM/Proxy/Proxy.Test.js
@@ -1,91 +1,89 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Proxy) == 'undefined') { Clipperz.PM.Proxy = {}; } 26if (typeof(Clipperz.PM.Proxy) == 'undefined') { Clipperz.PM.Proxy = {}; }
29 27
30//============================================================================= 28//=============================================================================
31 29
32Clipperz.PM.Proxy.Test = function(args) { 30Clipperz.PM.Proxy.Test = function(args) {
33 args = args || {}; 31 args = args || {};
34 32
35 Clipperz.PM.Proxy.Offline.call(this, args); 33 Clipperz.PM.Proxy.Offline.call(this, args);
36 34
37 35
38 36
39 return this; 37 return this;
40} 38}
41 39
42Clipperz.PM.Proxy.Test.prototype = MochiKit.Base.update(new Clipperz.PM.Proxy.Offline(), { 40Clipperz.PM.Proxy.Test.prototype = MochiKit.Base.update(new Clipperz.PM.Proxy.Offline(), {
43 41
44 'toString': function() { 42 'toString': function() {
45 return "Clipperz.PM.Proxy.Test"; 43 return "Clipperz.PM.Proxy.Test";
46 }, 44 },
47 45
48 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
49 47
50 'isTestData': function() { 48 'isTestData': function() {
51 return typeof(this.userData()['__masterkey_test_value__'] != 'undefined'); 49 return typeof(this.userData()['__masterkey_test_value__'] != 'undefined');
52 }, 50 },
53 51
54 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
55 53
56 'userDetails': function() { 54 'userDetails': function() {
57 var result; 55 var result;
58 56
59 if (this.isTestData()) { 57 if (this.isTestData()) {
60 var serializedHeader; 58 var serializedHeader;
61 var version; 59 var version;
62 60
63 version = this.userData()['version']; 61 version = this.userData()['version'];
64 serializedHeader = Clipperz.Base.serializeJSON(this.userData()['userDetails']); 62 serializedHeader = Clipperz.Base.serializeJSON(this.userData()['userDetails']);
65 result = Clipperz.PM.Crypto.encryptingFunctions.versions[version].encrypt(this.userData()['__masterkey_test_value__'], serializedHeader); 63 result = Clipperz.PM.Crypto.encryptingFunctions.versions[version].encrypt(this.userData()['__masterkey_test_value__'], serializedHeader);
66 } else { 64 } else {
67 result = Clipperz.PM.Proxy.Offline.prototype.userDetails.call(this); 65 result = Clipperz.PM.Proxy.Offline.prototype.userDetails.call(this);
68 } 66 }
69 67
70 return result; 68 return result;
71 }, 69 },
72 70
73 //------------------------------------------------------------------------- 71 //-------------------------------------------------------------------------
74 72
75 'statistics': function() { 73 'statistics': function() {
76 var result; 74 var result;
77 var serializedStatistics; 75 var serializedStatistics;
78 var version; 76 var version;
79 77
80 version = this.userData()['version']; 78 version = this.userData()['version'];
81 serializedStatistics = Clipperz.Base.serializeJSON(this.userData()['statistics']); 79 serializedStatistics = Clipperz.Base.serializeJSON(this.userData()['statistics']);
82 result = Clipperz.PM.Crypto.encryptingFunctions.versions[version].encrypt(this.userData()['__masterkey_test_value__'], serializedStatistics); 80 result = Clipperz.PM.Crypto.encryptingFunctions.versions[version].encrypt(this.userData()['__masterkey_test_value__'], serializedStatistics);
83 81
84 return result; 82 return result;
85 }, 83 },
86 84
87 //------------------------------------------------------------------------- 85 //-------------------------------------------------------------------------
88 __syntaxFix__: "syntax fix" 86 __syntaxFix__: "syntax fix"
89 87
90}); 88});
91 89
diff --git a/frontend/beta/js/Clipperz/PM/Strings.js b/frontend/beta/js/Clipperz/PM/Strings.js
index 24ef0ce..204159f 100644
--- a/frontend/beta/js/Clipperz/PM/Strings.js
+++ b/frontend/beta/js/Clipperz/PM/Strings.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Strings) == 'undefined') { Clipperz.PM.Strings = {}; } 26if (typeof(Clipperz.PM.Strings) == 'undefined') { Clipperz.PM.Strings = {}; }
29if (typeof(Clipperz.PM.Strings.Languages) == 'undefined') { Clipperz.PM.Strings.Languages = {}; } 27if (typeof(Clipperz.PM.Strings.Languages) == 'undefined') { Clipperz.PM.Strings.Languages = {}; }
30 28
31Clipperz.PM.Strings.standardStrings = { 29Clipperz.PM.Strings.standardStrings = {
32 30
33 'loginPanelSwitchLanguageSelectOptions':[ 31 'loginPanelSwitchLanguageSelectOptions':[
34/* 32/*
35 {tag:'option', html:"Arabic (Oman) (العربية)", value:'ar-OM', disabled:true}, 33 {tag:'option', html:"Arabic (Oman) (العربية)", value:'ar-OM', disabled:true},
36 {tag:'option', html:"Arabic (Syria) (العربية)", value:'ar-SY', disabled:true}, 34 {tag:'option', html:"Arabic (Syria) (العربية)", value:'ar-SY', disabled:true},
37 {tag:'option', html:"Bahasa Indonesia", value:'id-ID', disabled:true}, 35 {tag:'option', html:"Bahasa Indonesia", value:'id-ID', disabled:true},
38 {tag:'option', html:"Bulgarian (Български)", value:'bg-BG', disabled:true}, 36 {tag:'option', html:"Bulgarian (Български)", value:'bg-BG', disabled:true},
39 {tag:'option', html:"Català", value:'ca-ES', disabled:true}, 37 {tag:'option', html:"Català", value:'ca-ES', disabled:true},
40 {tag:'option', html:"Chinese (Simplified) (简体中文)", value:'zh-CN', disabled:true}, 38 {tag:'option', html:"Chinese (Simplified) (简体中文)", value:'zh-CN', disabled:true},
41 {tag:'option', html:"Chinese (Traditional) (正體中文)", value:'zh-TW', disabled:true}, 39 {tag:'option', html:"Chinese (Traditional) (正體中文)", value:'zh-TW', disabled:true},
42 {tag:'option', html:"Czech (Česky)", value:'cs-CZ', disabled:true}, 40 {tag:'option', html:"Czech (Česky)", value:'cs-CZ', disabled:true},
43 {tag:'option', html:"Dansk", value:'da-DK', disabled:true}, 41 {tag:'option', html:"Dansk", value:'da-DK', disabled:true},
44 {tag:'option', html:"Deutsch", value:'de-DE'/ *, disabled:true* /}, 42 {tag:'option', html:"Deutsch", value:'de-DE'/ *, disabled:true* /},
45 {tag:'option', html:"English (American)", value:'en-US'/ *, disabled:true* /}, 43 {tag:'option', html:"English (American)", value:'en-US'/ *, disabled:true* /},
46 {tag:'option', html:"English (British)", value:'en-GB'/ *, disabled:true* /}, 44 {tag:'option', html:"English (British)", value:'en-GB'/ *, disabled:true* /},
47 {tag:'option', html:"English (Canadian)", value:'en-CA'/ *, disabled:true* /}, 45 {tag:'option', html:"English (Canadian)", value:'en-CA'/ *, disabled:true* /},
48 {tag:'option', html:"Español", value:'es-ES', disabled:true}, 46 {tag:'option', html:"Español", value:'es-ES', disabled:true},
49 {tag:'option', html:"Eesti", value:'et-EE', disabled:true}, 47 {tag:'option', html:"Eesti", value:'et-EE', disabled:true},
50 {tag:'option', html:"Français", value:'fr-FR', disabled:true}, 48 {tag:'option', html:"Français", value:'fr-FR', disabled:true},
51 {tag:'option', html:"Galego", value:'gl-ES', disabled:true}, 49 {tag:'option', html:"Galego", value:'gl-ES', disabled:true},
52 {tag:'option', html:"Greek (Ελληνικά)", value:'el-GR', disabled:true}, 50 {tag:'option', html:"Greek (Ελληνικά)", value:'el-GR', disabled:true},
53 {tag:'option', html:"Íslenska", value:'is-IS', disabled:true}, 51 {tag:'option', html:"Íslenska", value:'is-IS', disabled:true},
54 {tag:'option', html:"Italiano", value:'it-IT'/ *, disabled:true* /}, 52 {tag:'option', html:"Italiano", value:'it-IT'/ *, disabled:true* /},
55 {tag:'option', html:"Japanese (日本語)", value:'ja-JP', disabled:true}, 53 {tag:'option', html:"Japanese (日本語)", value:'ja-JP', disabled:true},
56 {tag:'option', html:"Korean (한국어)", value:'ko-KR', disabled:true}, 54 {tag:'option', html:"Korean (한국어)", value:'ko-KR', disabled:true},
57 {tag:'option', html:"Latviešu", value:'lv-LV', disabled:true}, 55 {tag:'option', html:"Latviešu", value:'lv-LV', disabled:true},
58 {tag:'option', html:"Lietuvių", value:'lt-LT', disabled:true}, 56 {tag:'option', html:"Lietuvių", value:'lt-LT', disabled:true},
59 {tag:'option', html:"Macedonian (Македонски)", value:'mk-MK', disabled:true}, 57 {tag:'option', html:"Macedonian (Македонски)", value:'mk-MK', disabled:true},
60 {tag:'option', html:"Magyar", value:'hu-HU', disabled:true}, 58 {tag:'option', html:"Magyar", value:'hu-HU', disabled:true},
61 {tag:'option', html:"Nederlands", value:'nl-NL', disabled:true}, 59 {tag:'option', html:"Nederlands", value:'nl-NL', disabled:true},
62 {tag:'option', html:"Norsk bokmål", value:'nb-NO', disabled:true}, 60 {tag:'option', html:"Norsk bokmål", value:'nb-NO', disabled:true},
63 {tag:'option', html:"Norsk nynorsk", value:'nn-NO', disabled:true}, 61 {tag:'option', html:"Norsk nynorsk", value:'nn-NO', disabled:true},
64 {tag:'option', html:"Persian (Western) (فارسى)", value:'fa-IR', disabled:true}, 62 {tag:'option', html:"Persian (Western) (فارسى)", value:'fa-IR', disabled:true},
65 {tag:'option', html:"Polski", value:'pl-PL', disabled:true}, 63 {tag:'option', html:"Polski", value:'pl-PL', disabled:true},
66 {tag:'option', html:"Português", value:'pt-PT'/ *, disabled:true* /}, 64 {tag:'option', html:"Português", value:'pt-PT'/ *, disabled:true* /},
67 {tag:'option', html:"Português Brasileiro", value:'pt-BR'/ *, disabled:true* /}, 65 {tag:'option', html:"Português Brasileiro", value:'pt-BR'/ *, disabled:true* /},
68 {tag:'option', html:"Românä", value:'ro-RO', disabled:true}, 66 {tag:'option', html:"Românä", value:'ro-RO', disabled:true},
69 {tag:'option', html:"Russian (Русский)", value:'ru-RU', disabled:true}, 67 {tag:'option', html:"Russian (Русский)", value:'ru-RU', disabled:true},
70 {tag:'option', html:"Slovak (Slovenčina)", value:'sk-SK', disabled:true}, 68 {tag:'option', html:"Slovak (Slovenčina)", value:'sk-SK', disabled:true},
71 {tag:'option', html:"Slovenian (Slovenščina)", value:'sl-SI', disabled:true}, 69 {tag:'option', html:"Slovenian (Slovenščina)", value:'sl-SI', disabled:true},
72 {tag:'option', html:"Suomi", value:'fi-FI', disabled:true}, 70 {tag:'option', html:"Suomi", value:'fi-FI', disabled:true},
73 {tag:'option', html:"Svenska", value:'sv-SE', disabled:true}, 71 {tag:'option', html:"Svenska", value:'sv-SE', disabled:true},
74 {tag:'option', html:"Thai (ไทย)", value:'th-TH', disabled:true}, 72 {tag:'option', html:"Thai (ไทย)", value:'th-TH', disabled:true},
75 {tag:'option', html:"Türkçe", value:'tr-TR', disabled:true}, 73 {tag:'option', html:"Türkçe", value:'tr-TR', disabled:true},
76 {tag:'option', html:"Ukrainian (Українська)", value:'uk-UA', disabled:true} 74 {tag:'option', html:"Ukrainian (Українська)", value:'uk-UA', disabled:true}
77*/ 75*/
78 {tag:'option', html:"Arabic (العربية)", value:"ar", disabled:true, cls:'disabledOption'}, 76 {tag:'option', html:"Arabic (العربية)", value:"ar", disabled:true, cls:'disabledOption'},
79 // {tag:'option', html:"Chinese (中文)", value:"zh", disabled:true}, 77 // {tag:'option', html:"Chinese (中文)", value:"zh", disabled:true},
80 {tag:'option', html:"Chinese (Simplified) (简体中文)", value:'zh-CN'}, 78 {tag:'option', html:"Chinese (Simplified) (简体中文)", value:'zh-CN'},
81 {tag:'option', html:"Dutch (Nederlands)", value:"nl-NL", disabled:true, cls:'disabledOption'}, 79 {tag:'option', html:"Dutch (Nederlands)", value:"nl-NL", disabled:true, cls:'disabledOption'},
82 {tag:'option', html:"English", value:"en-US"}, 80 {tag:'option', html:"English", value:"en-US"},
83 {tag:'option', html:"French (Français)", value:"fr-FR"}, 81 {tag:'option', html:"French (Français)", value:"fr-FR"},
84 {tag:'option', html:"German (Deutsch)", value:"de-DE"/* -- */, disabled:true, cls:'disabledOption' /* */}, 82 {tag:'option', html:"German (Deutsch)", value:"de-DE"/* -- */, disabled:true, cls:'disabledOption' /* */},
85 {tag:'option', html:"Greek (Ελληνικά)", value:"el-GR"/* -- */, disabled:true, cls:'disabledOption' /* */}, 83 {tag:'option', html:"Greek (Ελληνικά)", value:"el-GR"/* -- */, disabled:true, cls:'disabledOption' /* */},
86 {tag:'option', html:"Hebrew (עברית)", value:"he-IL"/* -- */, disabled:true, cls:'disabledOption' /* */}, 84 {tag:'option', html:"Hebrew (עברית)", value:"he-IL"/* -- */, disabled:true, cls:'disabledOption' /* */},
87 {tag:'option', html:"Italian (Italiano)", value:"it-IT"}, 85 {tag:'option', html:"Italian (Italiano)", value:"it-IT"},
88 {tag:'option', html:"Japanese (日本語)", value:"ja-JP"}, 86 {tag:'option', html:"Japanese (日本語)", value:"ja-JP"},
89 {tag:'option', html:"Korean (한국어)", value:"ko-KR", disabled:true, cls:'disabledOption'}, 87 {tag:'option', html:"Korean (한국어)", value:"ko-KR", disabled:true, cls:'disabledOption'},
90 {tag:'option', html:"Norwegian (Norsk)", value:"no", disabled:true, cls:'disabledOption'}, 88 {tag:'option', html:"Norwegian (Norsk)", value:"no", disabled:true, cls:'disabledOption'},
91 {tag:'option', html:"Persian (فارسی)", value:"fa-IR", disabled:true, cls:'disabledOption'}, 89 {tag:'option', html:"Persian (فارسی)", value:"fa-IR", disabled:true, cls:'disabledOption'},
92 {tag:'option', html:"Polish (Polski)", value:"pl-PL", disabled:true, cls:'disabledOption'}, 90 {tag:'option', html:"Polish (Polski)", value:"pl-PL", disabled:true, cls:'disabledOption'},
93 {tag:'option', html:"Portuguese (Português)", value:"pt-BR"}, 91 {tag:'option', html:"Portuguese (Português)", value:"pt-BR"},
94 {tag:'option', html:"Russian (Русский)", value:"ru-RU"}, 92 {tag:'option', html:"Russian (Русский)", value:"ru-RU"},
95 {tag:'option', html:"Spanish (Español)", value:"es-ES"}, 93 {tag:'option', html:"Spanish (Español)", value:"es-ES"},
96 {tag:'option', html:"Swedish (Svenska)", value:"sv-SE", disabled:true, cls:'disabledOption'}, 94 {tag:'option', html:"Swedish (Svenska)", value:"sv-SE", disabled:true, cls:'disabledOption'},
97 {tag:'option', html:"Turkish (Türkçe)", value:"tr-TR", disabled:true, cls:'disabledOption'}, 95 {tag:'option', html:"Turkish (Türkçe)", value:"tr-TR", disabled:true, cls:'disabledOption'},
98 {tag:'option', html:"Vietnamese (Tiếng Việt)", value:"vi-VN", disabled:true, cls:'disabledOption'} 96 {tag:'option', html:"Vietnamese (Tiếng Việt)", value:"vi-VN", disabled:true, cls:'disabledOption'}
99 ] 97 ]
100} 98}
101 99
102Clipperz.PM.Strings.GeneralSettings = { 100Clipperz.PM.Strings.GeneralSettings = {
103 'en-us': { 101 'en-us': {
104 'loginFormAarghThatsBadUrl':"http://www.clipperz.com/support/faq/account_faq", 102 'loginFormAarghThatsBadUrl':"http://www.clipperz.com/support/faq/account_faq",
105 'loginFormVerifyTheCodeUrl':"http://www.clipperz.com/learn_more/reviewing_the_code", 103 'loginFormVerifyTheCodeUrl':"http://www.clipperz.com/learn_more/reviewing_the_code",
106 104
107 'donateHeaderLinkUrl': "http://www.clipperz.com/donations", 105 'donateHeaderLinkUrl': "http://www.clipperz.com/donations",
108 'creditsHeaderLinkUrl': "http://www.clipperz.com/credits", 106 'creditsHeaderLinkUrl': "http://www.clipperz.com/credits",
109 'feedbackHeaderLinkUrl': "http://www.clipperz.com/contact", 107 'feedbackHeaderLinkUrl': "http://www.clipperz.com/contact",
110 'helpHeaderLinkUrl': "http://www.clipperz.com/support/user_guide", 108 'helpHeaderLinkUrl': "http://www.clipperz.com/support/user_guide",
111 'forumHeaderLinkUrl': "http://www.clipperz.com/forum", 109 'forumHeaderLinkUrl': "http://www.clipperz.com/forum",
112 110
113 'httpAuthBookmarkletConfiguration':{tag:'textarea', id:'httpAuthDefaultConfiguration', html:"" + 111 'httpAuthBookmarkletConfiguration':{tag:'textarea', id:'httpAuthDefaultConfiguration', html:"" +
114 "{ \"page\":{\"title\":\"HTTP authentication\"}," + "\n" + 112 "{ \"page\":{\"title\":\"HTTP authentication\"}," + "\n" +
115 " \"form\":{\"attributes\": {" + "\n" + 113 " \"form\":{\"attributes\": {" + "\n" +
116 " \"action\":\"\"," + "\n" + 114 " \"action\":\"\"," + "\n" +
117 " \"type\":\"http_auth\"" + "\n" + 115 " \"type\":\"http_auth\"" + "\n" +
118 " }, \"inputs\": [" + "\n" + 116 " }, \"inputs\": [" + "\n" +
119 " {\"type\":\"text\",\"name\":\"url\",\"value\":\"\"}," + "\n" + 117 " {\"type\":\"text\",\"name\":\"url\",\"value\":\"\"}," + "\n" +
120 " {\"type\":\"text\",\"name\":\"username\",\"value\":\"\"}," + "\n" + 118 " {\"type\":\"text\",\"name\":\"username\",\"value\":\"\"}," + "\n" +
121 " {\"type\":\"password\",\"name\":\"password\",\"value\":\"\"}" + "\n" + 119 " {\"type\":\"password\",\"name\":\"password\",\"value\":\"\"}" + "\n" +
122 " ]}, \"version\":\"0.2.3\"}" 120 " ]}, \"version\":\"0.2.3\"}"
123 }, 121 },
124 122
125 'directLoginJumpPageUrl':"", 123 'directLoginJumpPageUrl':"",
126 'defaultFaviconUrl': "data:application/octet-stream;charset=utf-8;base64,AAABAAEAFxcAAAEAGAD8BgAAFgAAACgAAAAXAAAALgAAAAEAGAAAAAAAAAAAABIXAAASFwAAAAAAAAAAAAD///////////////////////////////////////////////////////////////////////////////////////////9zAC////////////////////////////////////////////////////////////////////////////////////////////9pAG////////////////////////////////////////////////////////////////////////////////////////////9rAC////////////////////////////////////////////////////////////////////////////////////////////9yAHP////////////////////////IyMizs7O6urrq6ur////////////Ozs6zs7Ozs7Pq6ur///////////////////////8AAAD////////////////////V1dWXl5eXl5eXl5elpaX4+Pj////Ozs6Xl5eXl5eXl5eenp7///////////////////////8AAAD////////////////////Ozs6Xl5eXl5eXl5eXl5fBwcHq6uqenp6Xl5eXl5eXl5eXl5f///////////////////////8AAAD////////////////////j4+OXl5eXl5eXl5eXl5eXl5elpaWXl5eXl5eXl5eXl5ezs7P///////////////////////8AAAD////////////////////////IyMiXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eenp7x8fH////////////////////////////////////////////////////4+PilpaWXl5eXl5eXl5eXl5eXl5eXl5eXl5fOzs7////////////////////////////////////////////////////////q6uq6urqXl5eXl5eXl5eXl5eXl5eXl5eenp7V1dX4+Pj///////////////////////8AAAD////////////4+PjOzs6lpaWXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e6urrj4+P///////////////8AAAD////////////BwcGXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fx8fH///////////8AAAD///////////+zs7OXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fj4+P///////////8AAAD////////////IyMiXl5eXl5eXl5eXl5e6urqXl5eXl5eXl5eXl5esrKylpaWXl5eXl5eXl5eenp7x8fH///////////8AAAD////////////////Ozs7Ozs7V1dX4+Pj///+Xl5eXl5eXl5eXl5fOzs7////q6urOzs7Ozs7q6ur///////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD////////////////////////////////////IyMiXl5eXl5eenp7x8fH///////////////////////////////////8AAAD////////////////////////////////////////j4+Pj4+Px8fH///////////////////////////////////////8AAAD///////////////////////////////////////////////////////////////////////////////////////////8AAAD///////////////////////////////////////////////////////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo=", 124 'defaultFaviconUrl': "data:application/octet-stream;charset=utf-8;base64,AAABAAEAFxcAAAEAGAD8BgAAFgAAACgAAAAXAAAALgAAAAEAGAAAAAAAAAAAABIXAAASFwAAAAAAAAAAAAD///////////////////////////////////////////////////////////////////////////////////////////9zAC////////////////////////////////////////////////////////////////////////////////////////////9pAG////////////////////////////////////////////////////////////////////////////////////////////9rAC////////////////////////////////////////////////////////////////////////////////////////////9yAHP////////////////////////IyMizs7O6urrq6ur////////////Ozs6zs7Ozs7Pq6ur///////////////////////8AAAD////////////////////V1dWXl5eXl5eXl5elpaX4+Pj////Ozs6Xl5eXl5eXl5eenp7///////////////////////8AAAD////////////////////Ozs6Xl5eXl5eXl5eXl5fBwcHq6uqenp6Xl5eXl5eXl5eXl5f///////////////////////8AAAD////////////////////j4+OXl5eXl5eXl5eXl5eXl5elpaWXl5eXl5eXl5eXl5ezs7P///////////////////////8AAAD////////////////////////IyMiXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eenp7x8fH////////////////////////////////////////////////////4+PilpaWXl5eXl5eXl5eXl5eXl5eXl5eXl5fOzs7////////////////////////////////////////////////////////q6uq6urqXl5eXl5eXl5eXl5eXl5eXl5eenp7V1dX4+Pj///////////////////////8AAAD////////////4+PjOzs6lpaWXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e6urrj4+P///////////////8AAAD////////////BwcGXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fx8fH///////////8AAAD///////////+zs7OXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fj4+P///////////8AAAD////////////IyMiXl5eXl5eXl5eXl5e6urqXl5eXl5eXl5eXl5esrKylpaWXl5eXl5eXl5eenp7x8fH///////////8AAAD////////////////Ozs7Ozs7V1dX4+Pj///+Xl5eXl5eXl5eXl5fOzs7////q6urOzs7Ozs7q6ur///////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD////////////////////////////////////IyMiXl5eXl5eenp7x8fH///////////////////////////////////8AAAD////////////////////////////////////////j4+Pj4+Px8fH///////////////////////////////////////8AAAD///////////////////////////////////////////////////////////////////////////////////////////8AAAD///////////////////////////////////////////////////////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo=",
127 'defaultFaviconUrl_IE': "https://www.clipperz.com/images/icons/misc/favicon.ico", 125 'defaultFaviconUrl_IE': "https://www.clipperz.com/images/icons/misc/favicon.ico",
128 126
129 'donateSplashPanelIconUrl':"./images/smiles_big.gif", 127 'donateSplashPanelIconUrl':"./images/smiles_big.gif",
130 128
131 'icons_baseUrl':"https://www.clipperz.com/images/icons", 129 'icons_baseUrl':"https://www.clipperz.com/images/icons",
132 130
133 'passwordGeneratorLowercaseCharset':"abcdefghijklmnopqrstuvwxyz", 131 'passwordGeneratorLowercaseCharset':"abcdefghijklmnopqrstuvwxyz",
134 'passwordGeneratorUppercaseCharset':"ABCDEFGHIJKLMNOPQRSTUVWXYZ", 132 'passwordGeneratorUppercaseCharset':"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
135 'passwordGeneratorNumberCharset': "0123456789", 133 'passwordGeneratorNumberCharset': "0123456789",
136 'passwordGeneratorSymbolCharset': "!@#$%^&*+?[]{}/|\\<>,.;:~=-_", 134 'passwordGeneratorSymbolCharset': "!@#$%^&*+?[]{}/|\\<>,.;:~=-_",
137 135
138 '_': "" 136 '_': ""
139 } 137 }
140} 138}
141 139
142Clipperz.PM.Strings.defaultLanguages = { 140Clipperz.PM.Strings.defaultLanguages = {
143 'default':"en-us", 141 'default':"en-us",
144 142
145 // 'de':"de-de", 143 // 'de':"de-de",
146 // 'el':"el-gr", 144 // 'el':"el-gr",
147 // 'he':"he-il", 145 // 'he':"he-il",
148 // 'ru':"ru-ru", 146 // 'ru':"ru-ru",
149 147
150 148
diff --git a/frontend/beta/js/Clipperz/PM/Strings/MessagePanelConfigurations.js b/frontend/beta/js/Clipperz/PM/Strings/MessagePanelConfigurations.js
index 7f6c52f..7565d2d 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/MessagePanelConfigurations.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/MessagePanelConfigurations.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Strings) == 'undefined') { Clipperz.PM.Strings = {}; } 26if (typeof(Clipperz.PM.Strings) == 'undefined') { Clipperz.PM.Strings = {}; }
29 27
30Clipperz.PM.Strings.messagePanelConfigurations = { 28Clipperz.PM.Strings.messagePanelConfigurations = {
31 29
32 30
33 //------------------------------------------------------------------------- 31 //-------------------------------------------------------------------------
34 // 32 //
35 // Registration - connection 33 // Registration - connection
36 // 34 //
37 'registration_verify': function() { 35 'registration_verify': function() {
38 return { 36 return {
39 'title': null, 37 'title': null,
40 'text': Clipperz.PM.Strings['connectionRegistrationSendingRequestMessageText'] 38 'text': Clipperz.PM.Strings['connectionRegistrationSendingRequestMessageText']
41 } 39 }
42 }, 40 },
43 41
44 'registration_sendingCredentials': function() { 42 'registration_sendingCredentials': function() {
45 return { 43 return {
46 'title': null, 44 'title': null,
47 'text': Clipperz.PM.Strings['connectionRegistrationSendingCredentialsMessageText'] 45 'text': Clipperz.PM.Strings['connectionRegistrationSendingCredentialsMessageText']
48 } 46 }
49 }, 47 },
50 48
51 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
52 // 50 //
53 // One Time Password login message panel 51 // One Time Password login message panel
54 // 52 //
55 53
56 'OTP_login_start': function() { 54 'OTP_login_start': function() {
57 return { 55 return {
58 'title': Clipperz.PM.Strings['OTPloginMessagePanelInitialTitle'], 56 'title': Clipperz.PM.Strings['OTPloginMessagePanelInitialTitle'],
59 'text': Clipperz.PM.Strings['OTPloginMessagePanelInitialText'], 57 'text': Clipperz.PM.Strings['OTPloginMessagePanelInitialText'],
60 'steps': '+3', 58 'steps': '+3',
61 'buttons': {} 59 'buttons': {}
62 } 60 }
63 }, 61 },
64 62
65 'OTP_login_loadingOTP': function() { 63 'OTP_login_loadingOTP': function() {
66 return { 64 return {
67 'title': Clipperz.PM.Strings['OTPloginMessagePanelLoadingTitle'], 65 'title': Clipperz.PM.Strings['OTPloginMessagePanelLoadingTitle'],
68 'text': Clipperz.PM.Strings['OTPloginMessagePanelLoadingText'] 66 'text': Clipperz.PM.Strings['OTPloginMessagePanelLoadingText']
69 } 67 }
70 }, 68 },
71 69
72 'OTP_login_extractingPassphrase': function() { 70 'OTP_login_extractingPassphrase': function() {
73 return { 71 return {
74 'title': Clipperz.PM.Strings['OTPloginMessagePanelProcessingTitle'], 72 'title': Clipperz.PM.Strings['OTPloginMessagePanelProcessingTitle'],
75 'text': Clipperz.PM.Strings['OTPloginMessagePanelProcessingText'] 73 'text': Clipperz.PM.Strings['OTPloginMessagePanelProcessingText']
76 } 74 }
77 }, 75 },
78 76
79 77
80 //------------------------------------------------------------------------- 78 //-------------------------------------------------------------------------
81 // 79 //
82 // Login message panel 80 // Login message panel
83 // 81 //
84 'login_start': function() { 82 'login_start': function() {
85 return { 83 return {
86 'title': Clipperz.PM.Strings['loginMessagePanelInitialTitle'], 84 'title': Clipperz.PM.Strings['loginMessagePanelInitialTitle'],
87 'text': Clipperz.PM.Strings['loginMessagePanelInitialText'], 85 'text': Clipperz.PM.Strings['loginMessagePanelInitialText'],
88 'steps': '+7', 86 'steps': '+7',
89 'buttons': { 87 'buttons': {
90 'ok': Clipperz.PM.Strings['loginMessagePanelInitialButtonLabel'] 88 'ok': Clipperz.PM.Strings['loginMessagePanelInitialButtonLabel']
91 } 89 }
92 } 90 }
93 }, 91 },
94 92
95 'login_connected': function() { 93 'login_connected': function() {
96 return { 94 return {
97 'title': Clipperz.PM.Strings['loginMessagePanelConnectedTitle'], 95 'title': Clipperz.PM.Strings['loginMessagePanelConnectedTitle'],
98 'text': Clipperz.PM.Strings['loginMessagePanelConnectedText'], 96 'text': Clipperz.PM.Strings['loginMessagePanelConnectedText'],
99 'buttons': {} 97 'buttons': {}
100 } 98 }
101 }, 99 },
102 100
103 'login_failed':function() { 101 'login_failed':function() {
104 return { 102 return {
105 'title': Clipperz.PM.Strings['loginMessagePanelFailureTitle'], 103 'title': Clipperz.PM.Strings['loginMessagePanelFailureTitle'],
106 'text': Clipperz.PM.Strings['loginMessagePanelFailureText'], 104 'text': Clipperz.PM.Strings['loginMessagePanelFailureText'],
107 'button': Clipperz.PM.Strings['loginMessagePanelFailureButtonLabel'] 105 'button': Clipperz.PM.Strings['loginMessagePanelFailureButtonLabel']
108 } 106 }
109 }, 107 },
110 108
111 //------------------------------------------------------------------------- 109 //-------------------------------------------------------------------------
112 // 110 //
113 // Login message panel - connection 111 // Login message panel - connection
114 // 112 //
115 'connection_sendingCredentials': function() { 113 'connection_sendingCredentials': function() {
116 return { 114 return {
117 'title': Clipperz.PM.Strings['connectionLoginSendingCredentialsMessageTitle'], 115 'title': Clipperz.PM.Strings['connectionLoginSendingCredentialsMessageTitle'],
118 'text': Clipperz.PM.Strings['connectionLoginSendingCredentialsMessageText'] 116 'text': Clipperz.PM.Strings['connectionLoginSendingCredentialsMessageText']
119 } 117 }
120 }, 118 },
121 119
122 'connection_credentialVerification': function() { 120 'connection_credentialVerification': function() {
123 return { 121 return {
124 'title': Clipperz.PM.Strings['connectionLoginCredentialsVerificationMessageTitle'], 122 'title': Clipperz.PM.Strings['connectionLoginCredentialsVerificationMessageTitle'],
125 'text': Clipperz.PM.Strings['connectionLoginCredentialsVerificationMessageText'] 123 'text': Clipperz.PM.Strings['connectionLoginCredentialsVerificationMessageText']
126 } 124 }
127 }, 125 },
128 126
129 'connection_loggedIn': function() { 127 'connection_loggedIn': function() {
130 return { 128 return {
131 'title': Clipperz.PM.Strings['connectionLoginDoneMessageTitle'], 129 'title': Clipperz.PM.Strings['connectionLoginDoneMessageTitle'],
132 'text': Clipperz.PM.Strings['connectionLoginDoneMessageText'] 130 'text': Clipperz.PM.Strings['connectionLoginDoneMessageText']
133 } 131 }
134 }, 132 },
135 133
136 //------------------------------------------------------------------------- 134 //-------------------------------------------------------------------------
137 // 135 //
138 //Login message panel - user 136 //Login message panel - user
139 // 137 //
140 'connection_upgrading': function() { 138 'connection_upgrading': function() {
141 return { 139 return {
142 'title': Clipperz.PM.Strings['userLoginPanelUpgradingUserCredentialsMessageTitle'], 140 'title': Clipperz.PM.Strings['userLoginPanelUpgradingUserCredentialsMessageTitle'],
143 'text': Clipperz.PM.Strings['userLoginPanelUpgradingUserCredentialsMessageText'], 141 'text': Clipperz.PM.Strings['userLoginPanelUpgradingUserCredentialsMessageText'],
144 'steps': '+1' 142 'steps': '+1'
145 } 143 }
146 }, 144 },
147 145
148 'connection_done': function() { 146 'connection_done': function() {
149 return { 147 return {
150 'title': Clipperz.PM.Strings['userLoginPanelConnectedMessageTitle'], 148 'title': Clipperz.PM.Strings['userLoginPanelConnectedMessageTitle'],
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_de-DE.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_de-DE.js
index 6ccffa8..0ca4b51 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_de-DE.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_de-DE.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26Clipperz.PM.Strings.Languages['de-DE'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], { 24Clipperz.PM.Strings.Languages['de-DE'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
27 'clipperzServiceDescription':"<h2>Privatsphäre für Deine Daten</h2> <ul> <li> <h3>Clipperz heißt:</h3> <ul> <li> <p>sichere und einfache zu bedienene Passwortverwaltung</p> </li> <li> <p>eine effektive Lösung des einmaligen Anmeldens</p> </li> <li> <p>eine digitale Brieftasche für Deine vertraulichen Daten</p> </li> </ul> </li> <li> <h3>Clipperz bietet Dir:</h3> <ul> <li> <p>einfaches Speichern und Verwalten von Passwörtern und Webzugangsdaten</p> </li> <li> <p>schnelles unkompliziertes einloggen, ohne Eingabe des Benutzernamen und Passworts, bei Webdiensten</p> </li> <li> <p>Schutz aller Deiner persönlichen Daten: Zutrittscodes, PINs, Benutzernamen, Passwörter, Kreditkartennummern, &hellip;</p> </li> <li> <p>Deine Geheimnisse mit Familienmitgliedern und Freunden zu teilen (mehr dazu in Kürze)</p> </li> </ul> </li> <li> <h3>Clipperz ist:</h3> <ul> <li> <p>kostenlos und absolut anonym</p> </li> <li> <p>unkomplizierter Zugriff zu jeder Zeit von jedem Rechner</p> </li> <li> <p>ohne Download und Installation verwendbar</p> </li> <li> <p>ein Schutz gegen das Speichern von Passwörtern auf Deinem PC oder das Notieren auf Papier</p> </li> </ul> </li> <li> <h3>Clipperz Sicherheit:</h3> <ul> <li> <p>Deine sensiblen persönlichen Informationen werden lokal durch Deinen Browser verschlüsselt, bevor sie an Clipperz über das Internet gesendet werden</p> </li> <li> <p>Der Schlüssel für diese Daten ist der Sicherheitssatz, den nur Du kennst</p> </li> <li> <p>Clipperz speichert Deine sensiblen Daten nur in verschlüsselter Form und kann zu keinem Zeitpunkt diese entschlüssel und in ihrer ursprünglichen Klartextform zugänglich machen</p> </li> <li> <p>Clipperz basiert auf standart Verschlüsselungsverfahren. Nichts ausergewöhnliches – oder hand gestricktes</p> </li> <li> <p>Du kannst den Quellcode zu jeder Zeit anschauen, aber Du brauchst nichts von Kryptographie zu verstehen um ein glücklicher Anwender zu sein!</p> </li> </ul> </li> <li> <a href=\"http://www.clipperz.com\" target=\"_blank\">Weitere Informationen</a> </li> </ul> ", 25 'clipperzServiceDescription':"<h2>Privatsphäre für Deine Daten</h2> <ul> <li> <h3>Clipperz heißt:</h3> <ul> <li> <p>sichere und einfache zu bedienene Passwortverwaltung</p> </li> <li> <p>eine effektive Lösung des einmaligen Anmeldens</p> </li> <li> <p>eine digitale Brieftasche für Deine vertraulichen Daten</p> </li> </ul> </li> <li> <h3>Clipperz bietet Dir:</h3> <ul> <li> <p>einfaches Speichern und Verwalten von Passwörtern und Webzugangsdaten</p> </li> <li> <p>schnelles unkompliziertes einloggen, ohne Eingabe des Benutzernamen und Passworts, bei Webdiensten</p> </li> <li> <p>Schutz aller Deiner persönlichen Daten: Zutrittscodes, PINs, Benutzernamen, Passwörter, Kreditkartennummern, &hellip;</p> </li> <li> <p>Deine Geheimnisse mit Familienmitgliedern und Freunden zu teilen (mehr dazu in Kürze)</p> </li> </ul> </li> <li> <h3>Clipperz ist:</h3> <ul> <li> <p>kostenlos und absolut anonym</p> </li> <li> <p>unkomplizierter Zugriff zu jeder Zeit von jedem Rechner</p> </li> <li> <p>ohne Download und Installation verwendbar</p> </li> <li> <p>ein Schutz gegen das Speichern von Passwörtern auf Deinem PC oder das Notieren auf Papier</p> </li> </ul> </li> <li> <h3>Clipperz Sicherheit:</h3> <ul> <li> <p>Deine sensiblen persönlichen Informationen werden lokal durch Deinen Browser verschlüsselt, bevor sie an Clipperz über das Internet gesendet werden</p> </li> <li> <p>Der Schlüssel für diese Daten ist der Sicherheitssatz, den nur Du kennst</p> </li> <li> <p>Clipperz speichert Deine sensiblen Daten nur in verschlüsselter Form und kann zu keinem Zeitpunkt diese entschlüssel und in ihrer ursprünglichen Klartextform zugänglich machen</p> </li> <li> <p>Clipperz basiert auf standart Verschlüsselungsverfahren. Nichts ausergewöhnliches – oder hand gestricktes</p> </li> <li> <p>Du kannst den Quellcode zu jeder Zeit anschauen, aber Du brauchst nichts von Kryptographie zu verstehen um ein glücklicher Anwender zu sein!</p> </li> </ul> </li> <li> <a href=\"http://www.clipperz.com\" target=\"_blank\">Weitere Informationen</a> </li> </ul> ",
28 'loginFormTitle':"Login zu Deinem Clipperz Konto", 26 'loginFormTitle':"Login zu Deinem Clipperz Konto",
29 'loginFormUsernameLabel':"Benutzernamen", 27 'loginFormUsernameLabel':"Benutzernamen",
30 'loginFormPassphraseLabel':"Sicherheitssatz", 28 'loginFormPassphraseLabel':"Sicherheitssatz",
31 'loginFormDontHaveAnAccountLabel':"Du hast noch kein Clipperz Konto?", 29 'loginFormDontHaveAnAccountLabel':"Du hast noch kein Clipperz Konto?",
32 'loginFormCreateOneLabel':"Konto erstellen", 30 'loginFormCreateOneLabel':"Konto erstellen",
33 'loginFormForgotYourCredentialsLabel':"Zugangsdaten vergessen?", 31 'loginFormForgotYourCredentialsLabel':"Zugangsdaten vergessen?",
34 'loginFormAarghThatsBadLabel':"Misst! Dass ist schlecht!", 32 'loginFormAarghThatsBadLabel':"Misst! Dass ist schlecht!",
35 'loginFormAfraidOfMaliciousScriptsLabel':"verängstigt von bösartigen Scripts?", 33 'loginFormAfraidOfMaliciousScriptsLabel':"verängstigt von bösartigen Scripts?",
36 'loginFormVerifyTheCodeLabel':"begutachte den Quellcode", 34 'loginFormVerifyTheCodeLabel':"begutachte den Quellcode",
37 'loginFormButtonLabel':"Einloggen", 35 'loginFormButtonLabel':"Einloggen",
38 'loginPanelSwithLanguageDescription':"<h5>Wechsel zu Deiner vervorzugten Sprache</h5> ", 36 'loginPanelSwithLanguageDescription':"<h5>Wechsel zu Deiner vervorzugten Sprache</h5> ",
39 'browserCompatibilityDescription':"<p>Bessere und sicherere Clipperz-Erfahrung mit Firefox. Clipperz funktioniert auch mit Safari, Opera und MS Internet Explorer!</p> ", 37 'browserCompatibilityDescription':"<p>Bessere und sicherere Clipperz-Erfahrung mit Firefox. Clipperz funktioniert auch mit Safari, Opera und MS Internet Explorer!</p> ",
40 'loginMessagePanelInitialTitle':"Du wirst eingeloggt…", 38 'loginMessagePanelInitialTitle':"Du wirst eingeloggt…",
41 'loginMessagePanelInitialButtonLabel':"Abbruch", 39 'loginMessagePanelInitialButtonLabel':"Abbruch",
42 'loginMessagePanelConnectedTitle':"Verbunden", 40 'loginMessagePanelConnectedTitle':"Verbunden",
43 'loginMessagePanelConnectedText':"Fertig", 41 'loginMessagePanelConnectedText':"Fertig",
44 'loginMessagePanelFailureTitle':"Fehler", 42 'loginMessagePanelFailureTitle':"Fehler",
45 'loginMessagePanelFailureText':"Login fehlgeschlagen", 43 'loginMessagePanelFailureText':"Login fehlgeschlagen",
46 'loginMessagePanelFailureButtonLabel':"Schließen", 44 'loginMessagePanelFailureButtonLabel':"Schließen",
47 'connectionLoginSendingCredentialsMessageTitle':"Prüfe Zugangsdaten", 45 'connectionLoginSendingCredentialsMessageTitle':"Prüfe Zugangsdaten",
48 'connectionLoginSendingCredentialsMessageText':"Sende Zugangsdaten", 46 'connectionLoginSendingCredentialsMessageText':"Sende Zugangsdaten",
49 'connectionLoginCredentialsVerificationMessageTitle':"Prüfe Zugangsdaten", 47 'connectionLoginCredentialsVerificationMessageTitle':"Prüfe Zugangsdaten",
50 'connectionLoginCredentialsVerificationMessageText':"Führe SRP Authentifizierung durch", 48 'connectionLoginCredentialsVerificationMessageText':"Führe SRP Authentifizierung durch",
51 'connectionLoginDoneMessageTitle':"Prüfe Zugangsdaten", 49 'connectionLoginDoneMessageTitle':"Prüfe Zugangsdaten",
52 'connectionLoginDoneMessageText':"Verbunden", 50 'connectionLoginDoneMessageText':"Verbunden",
53 'userLoginPanelUpgradingUserCredentialsMessageTitle':"Prüfe Zugangsdaten", 51 'userLoginPanelUpgradingUserCredentialsMessageTitle':"Prüfe Zugangsdaten",
54 'userLoginPanelUpgradingUserCredentialsMessageText':"Aktualisierung Deiner Zugangsdaten auf ein neues Authentifizierungsschema", 52 'userLoginPanelUpgradingUserCredentialsMessageText':"Aktualisierung Deiner Zugangsdaten auf ein neues Authentifizierungsschema",
55 'userLoginPanelConnectedMessageTitle':"Benutzer authentifiziert", 53 'userLoginPanelConnectedMessageTitle':"Benutzer authentifiziert",
56 'userLoginPanelConnectedMessageText':"Login erfolgreich", 54 'userLoginPanelConnectedMessageText':"Login erfolgreich",
57 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"Prüfe Zugangsdaten", 55 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"Prüfe Zugangsdaten",
58 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"Probiere älteres Authentifizierungsschema", 56 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"Probiere älteres Authentifizierungsschema",
59 'userLoginPanelLoadingUserDataMessageTitle':"Benutzer authentifiziert", 57 'userLoginPanelLoadingUserDataMessageTitle':"Benutzer authentifiziert",
60 'userLoginPanelLoadingUserDataMessageText':"Lade verschlüsselte Kartendaten von Clipperz", 58 'userLoginPanelLoadingUserDataMessageText':"Lade verschlüsselte Kartendaten von Clipperz",
61 'userLoginPanelDecryptingUserDataMessageTitle':"Benutzer authentifiziert", 59 'userLoginPanelDecryptingUserDataMessageTitle':"Benutzer authentifiziert",
62 'userLoginPanelDecryptingUserDataMessageText':"Lokale Entschlüsselung der Kartendaten", 60 'userLoginPanelDecryptingUserDataMessageText':"Lokale Entschlüsselung der Kartendaten",
63 'userLoginPanelDecryptingUserStatisticsMessageTitle':"Benutzer authentifiziert", 61 'userLoginPanelDecryptingUserStatisticsMessageTitle':"Benutzer authentifiziert",
64 'userLoginPanelDecryptingUserStatisticsMessageText':"Lokale Entschlüsselung der Benutzerstatisik", 62 'userLoginPanelDecryptingUserStatisticsMessageText':"Lokale Entschlüsselung der Benutzerstatisik",
65 'splashAlertTitle':"Willkommen bei Clipperz!", 63 'splashAlertTitle':"Willkommen bei Clipperz!",
66 'splashAlertText':"<p>Sicherheitshinweis</p> <ul> <li> <p>Die Speicherung von Informationen bei Clipperz ist so sicher, wie der Sicherheitssatz den Du zum Schutz gewählt hast. Ist der Sicherheitssatz nicht bekannt, können keine Informationen abgefragt werden.</p> </li> <li> <p>Solltest Du Clipperz nutzen, um sensible und kritische persönliche Daten abzuspeichern, so empfehlen wir in jedem Fall die Nutzung eines langen Sicherheitssatzes als Passwort und die Nutzung von Sonderzeichen, Zahlen, Groß- und Kleinbuchstaben.</p> </li> <li> <p>Clipperz kann einen verlorenen Sicherheitssatz nicht wiederherstellen!</p> </li> </ul> <p>Weitere Informationen findest Du bei <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a>.</p> ", 64 'splashAlertText':"<p>Sicherheitshinweis</p> <ul> <li> <p>Die Speicherung von Informationen bei Clipperz ist so sicher, wie der Sicherheitssatz den Du zum Schutz gewählt hast. Ist der Sicherheitssatz nicht bekannt, können keine Informationen abgefragt werden.</p> </li> <li> <p>Solltest Du Clipperz nutzen, um sensible und kritische persönliche Daten abzuspeichern, so empfehlen wir in jedem Fall die Nutzung eines langen Sicherheitssatzes als Passwort und die Nutzung von Sonderzeichen, Zahlen, Groß- und Kleinbuchstaben.</p> </li> <li> <p>Clipperz kann einen verlorenen Sicherheitssatz nicht wiederherstellen!</p> </li> </ul> <p>Weitere Informationen findest Du bei <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a>.</p> ",
67 'splashAlertCloseButtonLabel':"Ok", 65 'splashAlertCloseButtonLabel':"Ok",
68 'registrationFormTitle':"Erstelle Dein Konto", 66 'registrationFormTitle':"Erstelle Dein Konto",
69 'registrationFormUsernameLabel':"Benutzernamen", 67 'registrationFormUsernameLabel':"Benutzernamen",
70 'registrationFormPassphraseLabel':"Sicherheitssatz", 68 'registrationFormPassphraseLabel':"Sicherheitssatz",
71 'registrationFormRetypePassphraseLabel':"Wiederhole Sicherheitssatz", 69 'registrationFormRetypePassphraseLabel':"Wiederhole Sicherheitssatz",
72 'registrationFormSafetyCheckLabel':"Ich akzeptiere dass es Clipperz nicht möglich ist, einen verlorenen Sicherheitssatz wiederherzustellen.", 70 'registrationFormSafetyCheckLabel':"Ich akzeptiere dass es Clipperz nicht möglich ist, einen verlorenen Sicherheitssatz wiederherzustellen.",
73 'registrationFormTermsOfServiceCheckLabel':"Ich habe die <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Nutzungsbedingungen</a> gelesen, verstanden und akzeptiere diese.", 71 'registrationFormTermsOfServiceCheckLabel':"Ich habe die <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Nutzungsbedingungen</a> gelesen, verstanden und akzeptiere diese.",
74 'registrationFormDoYouAlreadyHaveAnAccountLabel':"Hast Du bereits einen Zugang?", 72 'registrationFormDoYouAlreadyHaveAnAccountLabel':"Hast Du bereits einen Zugang?",
75 'registrationFormSimplyLoginLabel':"Einloggen", 73 'registrationFormSimplyLoginLabel':"Einloggen",
76 'registrationFormButtonLabel':"Anmelden", 74 'registrationFormButtonLabel':"Anmelden",
77 'registrationFormWarningMessageNotMatchingPassphrases':"Deine Sicherheitssätze stimmen nicht überein. Bitte erneut eingeben.", 75 'registrationFormWarningMessageNotMatchingPassphrases':"Deine Sicherheitssätze stimmen nicht überein. Bitte erneut eingeben.",
78 'registrationFormWarningMessageSafetyCheckNotSelected':"Bitte lese die Bedingungen und akzeptiere die Auswahlboxen weiter unten.", 76 'registrationFormWarningMessageSafetyCheckNotSelected':"Bitte lese die Bedingungen und akzeptiere die Auswahlboxen weiter unten.",
79 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"Du musst die Nutzungsbedingungen akzeptieren.", 77 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"Du musst die Nutzungsbedingungen akzeptieren.",
80 'registrationMessagePanelInitialTitle':"Benutzer wird angelegt…", 78 'registrationMessagePanelInitialTitle':"Benutzer wird angelegt…",
81 'registrationMessagePanelInitialButtonLabel':"Abbruch", 79 'registrationMessagePanelInitialButtonLabel':"Abbruch",
82 'registrationMessagePanelRegistrationDoneTitle':"Anmeldung", 80 'registrationMessagePanelRegistrationDoneTitle':"Anmeldung",
83 'registrationMessagePanelRegistrationDoneText':"Fertig", 81 'registrationMessagePanelRegistrationDoneText':"Fertig",
84 'registrationMessagePanelFailureTitle':"Anmerldung fehlgeschlagen", 82 'registrationMessagePanelFailureTitle':"Anmerldung fehlgeschlagen",
85 'registrationMessagePanelFailureButtonLabel':"Schließen", 83 'registrationMessagePanelFailureButtonLabel':"Schließen",
86 'connectionRegistrationSendingRequestMessageText':"Zugangsdaten werden geprüft", 84 'connectionRegistrationSendingRequestMessageText':"Zugangsdaten werden geprüft",
87 'connectionRegistrationSendingCredentialsMessageText':"Sende Zugangsdaten", 85 'connectionRegistrationSendingCredentialsMessageText':"Sende Zugangsdaten",
88 'registrationSplashPanelTitle':"Sicherheitshinweis", 86 'registrationSplashPanelTitle':"Sicherheitshinweis",
89 'registrationSplashPanelDescription':"<p>Dies sind Deine Clipperz Zugangsdaten, pass sehr gut auf sie auf. Clipperz wird diese kein zweites und weiteres mal anzeigen!</p> ", 87 'registrationSplashPanelDescription':"<p>Dies sind Deine Clipperz Zugangsdaten, pass sehr gut auf sie auf. Clipperz wird diese kein zweites und weiteres mal anzeigen!</p> ",
90 'registrationSplashPanelUsernameLabel':"Benutzernamen", 88 'registrationSplashPanelUsernameLabel':"Benutzernamen",
91 'registrationSplashPanelPassphraseLabel':"Schlüsselsatz", 89 'registrationSplashPanelPassphraseLabel':"Schlüsselsatz",
92 'donateHeaderLinkLabel':"spende", 90 'donateHeaderLinkLabel':"spende",
93 'creditsHeaderLinkLabel':"credits", 91 'creditsHeaderLinkLabel':"credits",
94 'feedbackHeaderLinkLabel':"feedback", 92 'feedbackHeaderLinkLabel':"feedback",
95 'helpHeaderLinkLabel':"hilfe", 93 'helpHeaderLinkLabel':"hilfe",
96 'forumHeaderLinkLabel':"forum", 94 'forumHeaderLinkLabel':"forum",
97 'recordMenuLabel':"Karten", 95 'recordMenuLabel':"Karten",
98 'accountMenuLabel':"Benutzer", 96 'accountMenuLabel':"Benutzer",
99 'dataMenuLabel':"Daten", 97 'dataMenuLabel':"Daten",
100 'contactsMenuLabel':"Kontakt", 98 'contactsMenuLabel':"Kontakt",
101 'bookmarkletMenuLabel':"Bookmarklet", 99 'bookmarkletMenuLabel':"Bookmarklet",
102 'logoutMenuLabel':"Ausloggen", 100 'logoutMenuLabel':"Ausloggen",
103 'lockMenuLabel':"Sperren", 101 'lockMenuLabel':"Sperren",
104 'lockTitle':"Dieses Konto ist gesperrt", 102 'lockTitle':"Dieses Konto ist gesperrt",
105 'lockDescription':"<p>Bitte gebe Deinen Sicherheitssatz ein, um das Clipperz-Konto zu entsperren.</p> ", 103 'lockDescription':"<p>Bitte gebe Deinen Sicherheitssatz ein, um das Clipperz-Konto zu entsperren.</p> ",
106 'unlockButtonLabel':"Entsperren", 104 'unlockButtonLabel':"Entsperren",
107 'changePasswordTabLabel':"Sicherheitssatz ändern", 105 'changePasswordTabLabel':"Sicherheitssatz ändern",
108 'changePasswordTabTitle':"Sicherheitssatz ändern", 106 'changePasswordTabTitle':"Sicherheitssatz ändern",
109 'changePasswordFormUsernameLabel':"Benutzername", 107 'changePasswordFormUsernameLabel':"Benutzername",
110 'changePasswordFormOldPassphraseLabel':"Alter Sicherheitssatz", 108 'changePasswordFormOldPassphraseLabel':"Alter Sicherheitssatz",
111 'changePasswordFormNewPassphraseLabel':"Neuer Sicherheitssatz", 109 'changePasswordFormNewPassphraseLabel':"Neuer Sicherheitssatz",
112 'changePasswordFormRetypePassphraseLabel':"Wiederholdung neuen Sicherheitssatz", 110 'changePasswordFormRetypePassphraseLabel':"Wiederholdung neuen Sicherheitssatz",
113 'changePasswordFormSafetyCheckboxLabel':"Ich akzeptiere dass es Clipperz nicht möglich ist, einen verlorenen Sicherheitssatz wiederherzustellen.", 111 'changePasswordFormSafetyCheckboxLabel':"Ich akzeptiere dass es Clipperz nicht möglich ist, einen verlorenen Sicherheitssatz wiederherzustellen.",
114 'changePasswordFormSubmitLabel':"Sicherheitssatz ändern", 112 'changePasswordFormSubmitLabel':"Sicherheitssatz ändern",
115 'changePasswordFormWrongUsernameWarning':"Falscher Benutzername", 113 'changePasswordFormWrongUsernameWarning':"Falscher Benutzername",
116 'changePasswordFormWrongPassphraseWarning':"Falscher Sicherheitssatz", 114 'changePasswordFormWrongPassphraseWarning':"Falscher Sicherheitssatz",
117 'changePasswordFormWrongRetypePassphraseWarning':"Deine Sicherheitssätze stimmen nicht überein. Bitte erneut eingeben.", 115 'changePasswordFormWrongRetypePassphraseWarning':"Deine Sicherheitssätze stimmen nicht überein. Bitte erneut eingeben.",
118 'changePasswordFormSafetyCheckWarning':"Bitte ließ die folgenden Hinweise und akzeptiere diese.", 116 'changePasswordFormSafetyCheckWarning':"Bitte ließ die folgenden Hinweise und akzeptiere diese.",
119 'changePasswordFormProgressDialogTitle':"Ändere Zugangsdaten", 117 'changePasswordFormProgressDialogTitle':"Ändere Zugangsdaten",
120 'changePasswordFormProgressDialogConnectedMessageTitle':"Verbunden", 118 'changePasswordFormProgressDialogConnectedMessageTitle':"Verbunden",
121 'changePasswordFormProgressDialogConnectedMessageText':"Fertig", 119 'changePasswordFormProgressDialogConnectedMessageText':"Fertig",
122 'changePasswordFormProgressDialogErrorMessageTitle':"Fehler", 120 'changePasswordFormProgressDialogErrorMessageTitle':"Fehler",
123 'changePasswordFormProgressDialogErrorMessageText':"Ändern der Zugangsdaten fehlgeschlagen!", 121 'changePasswordFormProgressDialogErrorMessageText':"Ändern der Zugangsdaten fehlgeschlagen!",
124 'changeCredentialsPanelEncryptingDataMessageTitle':"Ändere Sicherheitssatz", 122 'changeCredentialsPanelEncryptingDataMessageTitle':"Ändere Sicherheitssatz",
125 'changeCredentialsPanelEncryptingDataMessageText':"Lokale Verschlüsselung der Kartendaten", 123 'changeCredentialsPanelEncryptingDataMessageText':"Lokale Verschlüsselung der Kartendaten",
126 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"Ändere Sicherheitssatz", 124 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"Ändere Sicherheitssatz",
127 'changeCredentialsPanelCreatingNewCredentialsMessageText':"Aktualisiere Zugangsdaten", 125 'changeCredentialsPanelCreatingNewCredentialsMessageText':"Aktualisiere Zugangsdaten",
128 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Ändere Sicherheitssatz", 126 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Ändere Sicherheitssatz",
129 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Sende verschlüsselte Zugangsdaten zu Clipperz", 127 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Sende verschlüsselte Zugangsdaten zu Clipperz",
130 'changeCredentialsPanelDoneMessageTitle':"Ändere Sicherheitssatz", 128 'changeCredentialsPanelDoneMessageTitle':"Ändere Sicherheitssatz",
131 'changeCredentialsPanelDoneMessageText':"Fertig", 129 'changeCredentialsPanelDoneMessageText':"Fertig",
132 'manageOTPTabLabel':"Verwaltung des Sicheitssatzes für einmaliges Anmelden", 130 'manageOTPTabLabel':"Verwaltung des Sicheitssatzes für einmaliges Anmelden",
133 'manageOTPTabTitle':"Verwaltung des Sicheitssatzes für einmaliges Anmelden", 131 'manageOTPTabTitle':"Verwaltung des Sicheitssatzes für einmaliges Anmelden",
134 'manageOTPTabDescription':"<p>Der Sicherheitssatz für einmaliges Anmelden funktoniert wie Dein regulärer Sicherheitssatz, nur dass er nur einmal verwendet werden kann.</p> <p>Sollte der gleiche Sicherheitssatz zu einem späteren Zeitpunkt nocheinmal genutzt werden, wird dieser automatisch zurückgewießen und der Einlogvorgang scheitert.</p> <p>Sofort nach einem erfolgreichen Login wird der Sicherheitssatz für einmaliges Anmelden gelöscht und somit verhindert dass er ungewollt verwendet wird.</p> <p>Die Nutzung von Sicherheitssätzen für einmaliges Anmelden sind eine ideale Möglichkeit wenn Du verunsichert bist ob Trojaner, Spyware oder ähnliches auf Deinem Rechner vorhanden ist.</p> <p> <b>Es wird empfohlen Sicherheitssätze für einmaliges Anmelden beim Zugiff auf Clipperz zu verwenden, wenn man sich an öffentlichen Rechnern befindet, wie in Internet Cafes oder Bücherreien.</b> </p> <p> </p> <p> <b>Mehr dazu in Kürze ...</b> </p> ", 132 'manageOTPTabDescription':"<p>Der Sicherheitssatz für einmaliges Anmelden funktoniert wie Dein regulärer Sicherheitssatz, nur dass er nur einmal verwendet werden kann.</p> <p>Sollte der gleiche Sicherheitssatz zu einem späteren Zeitpunkt nocheinmal genutzt werden, wird dieser automatisch zurückgewießen und der Einlogvorgang scheitert.</p> <p>Sofort nach einem erfolgreichen Login wird der Sicherheitssatz für einmaliges Anmelden gelöscht und somit verhindert dass er ungewollt verwendet wird.</p> <p>Die Nutzung von Sicherheitssätzen für einmaliges Anmelden sind eine ideale Möglichkeit wenn Du verunsichert bist ob Trojaner, Spyware oder ähnliches auf Deinem Rechner vorhanden ist.</p> <p> <b>Es wird empfohlen Sicherheitssätze für einmaliges Anmelden beim Zugiff auf Clipperz zu verwenden, wenn man sich an öffentlichen Rechnern befindet, wie in Internet Cafes oder Bücherreien.</b> </p> <p> </p> <p> <b>Mehr dazu in Kürze ...</b> </p> ",
135 'accountPreferencesLabel':"Einstellungen", 133 'accountPreferencesLabel':"Einstellungen",
136 'accountPreferencesTabTitle':"Einstellungen", 134 'accountPreferencesTabTitle':"Einstellungen",
137 'accountPreferencesLanguageTitle':"Sprachenauswahl", 135 'accountPreferencesLanguageTitle':"Sprachenauswahl",
138 'accountPreferencesLanguageDescription':"<p>Wähle Deine bevorzugte Sprache, aus der unten stehenden Liste.</p> ", 136 'accountPreferencesLanguageDescription':"<p>Wähle Deine bevorzugte Sprache, aus der unten stehenden Liste.</p> ",
139 'accountPreferencesInterfaceTitle':"Personalisiere Dein persönliches Clipperz-Erscheinungsbild", 137 'accountPreferencesInterfaceTitle':"Personalisiere Dein persönliches Clipperz-Erscheinungsbild",
140 'accountPreferencesInterfaceDescription':"<p>Passe dass Clipperz-Erscheinungsbild an Deine Wünsche an.</p> ", 138 'accountPreferencesInterfaceDescription':"<p>Passe dass Clipperz-Erscheinungsbild an Deine Wünsche an.</p> ",
141 'saveUserPreferencesFormSubmitLabel':"Speichern", 139 'saveUserPreferencesFormSubmitLabel':"Speichern",
142 'cancelUserPreferencesFormSubmitLabel':"Abbruch", 140 'cancelUserPreferencesFormSubmitLabel':"Abbruch",
143 'accountPreferencesSavingPanelTitle_Step1':"Speichere Einstellungen", 141 'accountPreferencesSavingPanelTitle_Step1':"Speichere Einstellungen",
144 'accountPreferencesSavingPanelText_Step1':"Lokale Verschlüsselung der Einstellungen", 142 'accountPreferencesSavingPanelText_Step1':"Lokale Verschlüsselung der Einstellungen",
145 'accountPreferencesSavingPanelTitle_Step2':"Speichere Einstellungen", 143 'accountPreferencesSavingPanelTitle_Step2':"Speichere Einstellungen",
146 'accountPreferencesSavingPanelText_Step2':"Sende verschlüsselte Einstellungen", 144 'accountPreferencesSavingPanelText_Step2':"Sende verschlüsselte Einstellungen",
147 'deleteAccountTabLabel':"Konto löschen", 145 'deleteAccountTabLabel':"Konto löschen",
148 'deleteAccountTabTitle':"Konto löschen", 146 'deleteAccountTabTitle':"Konto löschen",
149 'deleteAccountFormUsernameLabel':"Benutzername", 147 'deleteAccountFormUsernameLabel':"Benutzername",
150 'deleteAccountFormPassphraseLabel':"Sicherheitssatz", 148 'deleteAccountFormPassphraseLabel':"Sicherheitssatz",
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_el-GR.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_el-GR.js
index fc610d6..f7a7583 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_el-GR.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_el-GR.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26//============================================================================= 24//=============================================================================
27// 25//
28 // G R E E K (el_GR) 26 // G R E E K (el_GR)
29// 27//
30//============================================================================= 28//=============================================================================
31 29
32Clipperz.PM.Strings.Languages['el-gr'] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], { 30Clipperz.PM.Strings.Languages['el-gr'] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
33 31
34//----------------------------------------------------- 32//-----------------------------------------------------
35 //Login page - description 33 //Login page - description
36 'clipperzServiceDescriptionConfig': [ 34 'clipperzServiceDescriptionConfig': [
37 {tag:'h2', html:'Κρατήστε το για τον Εαυτό Σας'}, 35 {tag:'h2', html:'Κρατήστε το για τον Εαυτό Σας'},
38 {tag:'ul', children:[ 36 {tag:'ul', children:[
39 {tag:'li', children:[ 37 {tag:'li', children:[
40 {tag:'h3', html:'Το Clipperz είναι:'}, 38 {tag:'h3', html:'Το Clipperz είναι:'},
41 {tag:'ul', children:[ 39 {tag:'ul', children:[
42 {tag:'li', children:[{tag:'span', html:'Ένας ασφαλής και απλός τρόπος διαχείρησης όλων των κωδικών πρόσβασης σας'}]}, 40 {tag:'li', children:[{tag:'span', html:'Ένας ασφαλής και απλός τρόπος διαχείρησης όλων των κωδικών πρόσβασης σας'}]},
43 {tag:'li', children:[{tag:'span', html:'Μια αποτελεσματική λύση πρόσβασης σε δεδομένα/εφαρμογές με μοναδικό κωδικό'}]}, 41 {tag:'li', children:[{tag:'span', html:'Μια αποτελεσματική λύση πρόσβασης σε δεδομένα/εφαρμογές με μοναδικό κωδικό'}]},
44 {tag:'li', children:[{tag:'span', html:'Μια ψηφιακή θυρίδα για τα απόρρητα δεδομένα σας'}]} 42 {tag:'li', children:[{tag:'span', html:'Μια ψηφιακή θυρίδα για τα απόρρητα δεδομένα σας'}]}
45 ]} 43 ]}
46 ]}, 44 ]},
47 {tag:'li', children:[ 45 {tag:'li', children:[
48 {tag:'h3', html:'Με το Clipperz μπορείτε:'}, 46 {tag:'h3', html:'Με το Clipperz μπορείτε:'},
49 {tag:'ul', children:[ 47 {tag:'ul', children:[
50 {tag:'li', children:[{tag:'span', html:'Να αποθηκεύσετε και να διαχειριστείτε όλους τους κωδικούς πρόσβασης και τα online πιστοποιητικά/διαπιστευτήρια σας'}]}, 48 {tag:'li', children:[{tag:'span', html:'Να αποθηκεύσετε και να διαχειριστείτε όλους τους κωδικούς πρόσβασης και τα online πιστοποιητικά/διαπιστευτήρια σας'}]},
51 {tag:'li', children:[{tag:'span', html:'Να έχετε πρόσβαση (login) στις υπηρεσίες διαδικτύου χωρίς την εισαγωγή oνομάτων λογαρισμών χρήστη (username),ή, κωδικών πρόσβασης (passwords)'}]}, 49 {tag:'li', children:[{tag:'span', html:'Να έχετε πρόσβαση (login) στις υπηρεσίες διαδικτύου χωρίς την εισαγωγή oνομάτων λογαρισμών χρήστη (username),ή, κωδικών πρόσβασης (passwords)'}]},
52 {tag:'li', children:[{tag:'span', html:'Να προστατεύσετε όλα τα προσωπικά δεδομένα σας: κωδικούς συναγερμών, PINs, αριθμούς πιστωτικών καρτών, ...'}]}, 50 {tag:'li', children:[{tag:'span', html:'Να προστατεύσετε όλα τα προσωπικά δεδομένα σας: κωδικούς συναγερμών, PINs, αριθμούς πιστωτικών καρτών, ...'}]},
53 {tag:'li', children:[{tag:'span', html:'Να μοιραστείτε δεδομένα με μέλη της οικογένεια σας και τους συνεργάτες σας (σύντομα στην διάθεση σας)'}]} 51 {tag:'li', children:[{tag:'span', html:'Να μοιραστείτε δεδομένα με μέλη της οικογένεια σας και τους συνεργάτες σας (σύντομα στην διάθεση σας)'}]}
54 ]} 52 ]}
55 ]}, 53 ]},
56 {tag:'li', children:[ 54 {tag:'li', children:[
57 {tag:'h3', html:'Τα πλεονεκτήματα του Clipperz είναι:'}, 55 {tag:'h3', html:'Τα πλεονεκτήματα του Clipperz είναι:'},
58 {tag:'ul', children:[ 56 {tag:'ul', children:[
59 {tag:'li', children:[{tag:'span', html:'Είναι δωρεάν και προσφέρει πρόσβαση ανώνυμα'}]}, 57 {tag:'li', children:[{tag:'span', html:'Είναι δωρεάν και προσφέρει πρόσβαση ανώνυμα'}]},
60 {tag:'li', children:[{tag:'span', html:'Μπορεί να χρησιμοποιηθεί οποαδήποτε ώρα και από οποιοδήποτε τερματικό'}]}, 58 {tag:'li', children:[{tag:'span', html:'Μπορεί να χρησιμοποιηθεί οποαδήποτε ώρα και από οποιοδήποτε τερματικό'}]},
61 {tag:'li', children:[{tag:'span', html:'Δεν απαιτεί την φόρτωση και εγκατάσταση οποιουδήποτε λογισμικού'}]}, 59 {tag:'li', children:[{tag:'span', html:'Δεν απαιτεί την φόρτωση και εγκατάσταση οποιουδήποτε λογισμικού'}]},
62 {tag:'li', children:[{tag:'span', html:'Αποφεύγετε την διατήριση απορρήτων στον υπολογιστή σας ή σε έντυπη μορφή'}]} 60 {tag:'li', children:[{tag:'span', html:'Αποφεύγετε την διατήριση απορρήτων στον υπολογιστή σας ή σε έντυπη μορφή'}]}
63 ]} 61 ]}
64 ]}, 62 ]},
65 {tag:'li', children:[ 63 {tag:'li', children:[
66 {tag:'h3', html:'Η ασφάλεια που παρέχει το Clipperz:'}, 64 {tag:'h3', html:'Η ασφάλεια που παρέχει το Clipperz:'},
67 {tag:'ul', children:[ 65 {tag:'ul', children:[
68 {tag:'li', children:[{tag:'span', html:'Τα απόρρητα δεδομένα σας κωδικοποιούνται τοπικά από τον διακομιστή σας (browser) πρίν να φορτωθούν στο Clipperz'}]}, 66 {tag:'li', children:[{tag:'span', html:'Τα απόρρητα δεδομένα σας κωδικοποιούνται τοπικά από τον διακομιστή σας (browser) πρίν να φορτωθούν στο Clipperz'}]},
69 {tag:'li', children:[{tag:'span', html:'Το κλειδί της κωδικοποίησης είναι μία φράση-κωδικός γνωστή μόνο σε εσάς'}]}, 67 {tag:'li', children:[{tag:'span', html:'Το κλειδί της κωδικοποίησης είναι μία φράση-κωδικός γνωστή μόνο σε εσάς'}]},
70 {tag:'li', children:[{tag:'span', html:'Το Clipperz φυλάσσει τα προσωπικά σας δεδομένα σε κωδικοποιημένη μορφή, και δεν μπορεί να έχει πρόσβαση σε αυτά στην αρχική τους μορφή'}]}, 68 {tag:'li', children:[{tag:'span', html:'Το Clipperz φυλάσσει τα προσωπικά σας δεδομένα σε κωδικοποιημένη μορφή, και δεν μπορεί να έχει πρόσβαση σε αυτά στην αρχική τους μορφή'}]},
71 {tag:'li', children:[{tag:'span', html:'Το Clipperz χρησιμοποιεί επίσημες /πρότυπες μεθόδους κωδικοποίησης, και όχι αόριστα και εφάνταστα μοντέλα'}]}, 69 {tag:'li', children:[{tag:'span', html:'Το Clipperz χρησιμοποιεί επίσημες /πρότυπες μεθόδους κωδικοποίησης, και όχι αόριστα και εφάνταστα μοντέλα'}]},
72 {tag:'li', children:[{tag:'span', html:'Έχετε πρόσβαση στον πηγαίο κώδικα οποτεδήποτε το θελήσετε, και δεν χρειάζετε να γνωρίζετε τίποτα από κρυπτογράφηση για να είστε ένας ευχαριστημένος χρήστης!'}]} 70 {tag:'li', children:[{tag:'span', html:'Έχετε πρόσβαση στον πηγαίο κώδικα οποτεδήποτε το θελήσετε, και δεν χρειάζετε να γνωρίζετε τίποτα από κρυπτογράφηση για να είστε ένας ευχαριστημένος χρήστης!'}]}
73 ]} 71 ]}
74 ]}, 72 ]},
75 {tag:'li', children:[ 73 {tag:'li', children:[
76 {tag:'a', href:"http://www.clipperz.com", target:'_blank', html:'Μάθετε περισσότερα'} 74 {tag:'a', href:"http://www.clipperz.com", target:'_blank', html:'Μάθετε περισσότερα'}
77 ]} 75 ]}
78 ]} 76 ]}
79 ], 77 ],
80 78
81 // Login page - form 79 // Login page - form
82 'loginFormTitle': "Συνδεθείτε με τον Clipperz λογαριασμό σας", 80 'loginFormTitle': "Συνδεθείτε με τον Clipperz λογαριασμό σας",
83 'loginFormUsernameLabel': "Όνομα χρήστη", 81 'loginFormUsernameLabel': "Όνομα χρήστη",
84 'loginFormPassphraseLabel': "Κωδική φράση", 82 'loginFormPassphraseLabel': "Κωδική φράση",
85 'loginFormDontHaveAnAccountLabel': "Δεν έχετε δημιουργήσει λογαριασμό?", 83 'loginFormDontHaveAnAccountLabel': "Δεν έχετε δημιουργήσει λογαριασμό?",
86 'loginFormCreateOneLabel': "Δημιουργήστε έναν", 84 'loginFormCreateOneLabel': "Δημιουργήστε έναν",
87 'loginFormForgotYourCredentialsLabel': "Ξεχάσατε τα διαπιστευτήριά σας?", 85 'loginFormForgotYourCredentialsLabel': "Ξεχάσατε τα διαπιστευτήριά σας?",
88 'loginFormAarghThatsBadLabel': "Ααααργκ! Αυτό είναι κακό!", 86 'loginFormAarghThatsBadLabel': "Ααααργκ! Αυτό είναι κακό!",
89 'loginFormAfraidOfMaliciousScriptsLabel':"φοβάστε κακόβουλα προγράμματα (scripts)?", 87 'loginFormAfraidOfMaliciousScriptsLabel':"φοβάστε κακόβουλα προγράμματα (scripts)?",
90 'loginFormVerifyTheCodeLabel': "Επαληθεύστε τον κωδικό", 88 'loginFormVerifyTheCodeLabel': "Επαληθεύστε τον κωδικό",
91 'loginFormButtonLabel': "Σύνδεση", 89 'loginFormButtonLabel': "Σύνδεση",
92 90
93// Login page - language selection 91// Login page - language selection
94 'loginPanelSwithLanguageDescriptionConfig':[ 92 'loginPanelSwithLanguageDescriptionConfig':[
95 {tag:'h5', html:"Αλλάξτε στην γλώσσα προτήμησης σας"} 93 {tag:'h5', html:"Αλλάξτε στην γλώσσα προτήμησης σας"}
96 ], 94 ],
97 95
98// Login page - browser compatibility 96// Login page - browser compatibility
99 'browserCompatibilityDescriptionConfig':[ 97 'browserCompatibilityDescriptionConfig':[
100 {tag:'p', html:"Έχετε μία καλύτερη και πιό ασφαλή Clipperz εμπειρία χρησιμοποιόντας τον Firefox. Ωστόσο το Clipperz συνεργάζετε άψογα με Opera και MS Internet Explorer!"} 98 {tag:'p', html:"Έχετε μία καλύτερη και πιό ασφαλή Clipperz εμπειρία χρησιμοποιόντας τον Firefox. Ωστόσο το Clipperz συνεργάζετε άψογα με Opera και MS Internet Explorer!"}
101 ], 99 ],
102 100
103// Login message panel 101// Login message panel
104 'loginMessagePanelInitialTitle': "Γίνεται σύνδεση ...", 102 'loginMessagePanelInitialTitle': "Γίνεται σύνδεση ...",
105 'loginMessagePanelInitialButtonLabel': "Ακύρωση", 103 'loginMessagePanelInitialButtonLabel': "Ακύρωση",
106 'loginMessagePanelConnectedTitle': "Συνδεθήκατε", 104 'loginMessagePanelConnectedTitle': "Συνδεθήκατε",
107 'loginMessagePanelConnectedText': "Ολοκληρώθηκε", 105 'loginMessagePanelConnectedText': "Ολοκληρώθηκε",
108 'loginMessagePanelFailureTitle': "Λάθος", 106 'loginMessagePanelFailureTitle': "Λάθος",
109 'loginMessagePanelFailureText': "Η σύνδεση χρήστη απέτυχε", 107 'loginMessagePanelFailureText': "Η σύνδεση χρήστη απέτυχε",
110 'loginMessagePanelFailureButtonLabel': "Κλείσιμο", 108 'loginMessagePanelFailureButtonLabel': "Κλείσιμο",
111 109
112// Login message panel - connection 110// Login message panel - connection
113 'connectionLoginSendingCredentialsMessageTitle': "Γίνεται επαλήθευση διαπιστευτηρίων", 111 'connectionLoginSendingCredentialsMessageTitle': "Γίνεται επαλήθευση διαπιστευτηρίων",
114 'connectionLoginSendingCredentialsMessageText': "Αποστέλλονται διαπιστευτήρια", 112 'connectionLoginSendingCredentialsMessageText': "Αποστέλλονται διαπιστευτήρια",
115 'connectionLoginCredentialsVerificationMessageTitle':"Γίνεται επαλήθευση διαπιστευτηρίων", 113 'connectionLoginCredentialsVerificationMessageTitle':"Γίνεται επαλήθευση διαπιστευτηρίων",
116 'connectionLoginCredentialsVerificationMessageText':"Εκτέλεση πιστοποίησης SRP ", 114 'connectionLoginCredentialsVerificationMessageText':"Εκτέλεση πιστοποίησης SRP ",
117 'connectionLoginDoneMessageTitle': "Γίνεται επαλήθευση διαπιστευτηρίων", 115 'connectionLoginDoneMessageTitle': "Γίνεται επαλήθευση διαπιστευτηρίων",
118 'connectionLoginDoneMessageText': "Συνδεδεμένος", 116 'connectionLoginDoneMessageText': "Συνδεδεμένος",
119 117
120 //Login message panel - user 118 //Login message panel - user
121 'userLoginPanelUpgradingUserCredentialsMessageTitle': "Γίνεται επαλήθευση διαπιστευτηρίων", 119 'userLoginPanelUpgradingUserCredentialsMessageTitle': "Γίνεται επαλήθευση διαπιστευτηρίων",
122 'userLoginPanelUpgradingUserCredentialsMessageText': "Αναβάθμηση των διαπιστευτηρίων σας σε ένα νέο σζήμα πιστοποίησης", 120 'userLoginPanelUpgradingUserCredentialsMessageText': "Αναβάθμηση των διαπιστευτηρίων σας σε ένα νέο σζήμα πιστοποίησης",
123 'userLoginPanelConnectedMessageTitle': "Χρήστης πιστοποιήθηκε ", 121 'userLoginPanelConnectedMessageTitle': "Χρήστης πιστοποιήθηκε ",
124 'userLoginPanelConnectedMessageText': "Συνδεθήκατε με επιτυχία", 122 'userLoginPanelConnectedMessageText': "Συνδεθήκατε με επιτυχία",
125 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle': "Γίνεται επαλήθευση διαπιστευτηρίων", 123 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle': "Γίνεται επαλήθευση διαπιστευτηρίων",
126 'userLoginPanelTryingAnOlderConnectionSchemaMessageText': "Trying an older authentication schema", 124 'userLoginPanelTryingAnOlderConnectionSchemaMessageText': "Trying an older authentication schema",
127 'userLoginPanelLoadingUserDataMessageTitle': "Χρήστης πιστοποιήθηκε ", 125 'userLoginPanelLoadingUserDataMessageTitle': "Χρήστης πιστοποιήθηκε ",
128 'userLoginPanelLoadingUserDataMessageText': "Downloading encrypted card headers from Clipperz", 126 'userLoginPanelLoadingUserDataMessageText': "Downloading encrypted card headers from Clipperz",
129 'userLoginPanelDecryptingUserDataMessageTitle': "Χρήστης πιστοποιήθηκε ", 127 'userLoginPanelDecryptingUserDataMessageTitle': "Χρήστης πιστοποιήθηκε ",
130 'userLoginPanelDecryptingUserDataMessageText': "Local decryption of card headers", 128 'userLoginPanelDecryptingUserDataMessageText': "Local decryption of card headers",
131 'userLoginPanelDecryptingUserStatisticsMessageTitle': "Χρήστης πιστοποιήθηκε ", 129 'userLoginPanelDecryptingUserStatisticsMessageTitle': "Χρήστης πιστοποιήθηκε ",
132 'userLoginPanelDecryptingUserStatisticsMessageText': "Local decryption of usage statistics", 130 'userLoginPanelDecryptingUserStatisticsMessageText': "Local decryption of usage statistics",
133 131
134 //----------------------------------------------------- 132 //-----------------------------------------------------
135 //Registration page - splash alert 133 //Registration page - splash alert
136 'splashAlertTitle':"Καλώς ήλθατε στο Clipperz!", 134 'splashAlertTitle':"Καλώς ήλθατε στο Clipperz!",
137 'splashAlertTextConfig': [ 135 'splashAlertTextConfig': [
138 {tag:'p', html:'Μερικές συμβουλές ασφαλείας'}, 136 {tag:'p', html:'Μερικές συμβουλές ασφαλείας'},
139 {tag:'ul', children:[ 137 {tag:'ul', children:[
140 {tag:'li', children:[{tag:'span', html:'Η αποθήκευση των δεδομένων σας στο Clipperz είναι τόσο ασφαλής, όσο η κωδική φράση που επιλέγετε για να τα προστατεύσετε. Κανένας δεν θα έχει πρόσβαση σε αυτά, εκτός αν γνωρίζει την κωδική φράση σας.'}]}, 138 {tag:'li', children:[{tag:'span', html:'Η αποθήκευση των δεδομένων σας στο Clipperz είναι τόσο ασφαλής, όσο η κωδική φράση που επιλέγετε για να τα προστατεύσετε. Κανένας δεν θα έχει πρόσβαση σε αυτά, εκτός αν γνωρίζει την κωδική φράση σας.'}]},
141 {tag:'li', children:[{tag:'span', html:'Αν πρόκειται να χρησιμοποιήσετε το Clipperz για ασφαλή προστασία ευαίσθητων ή σημαντικών πληροφοριών, βεβαιωθείτε ότι θα χρησιμοποιήσετε μία “γερή” κωδική φράση. Όσο μεγαλύτερη, τόσο καλύτερη!'}]}, 139 {tag:'li', children:[{tag:'span', html:'Αν πρόκειται να χρησιμοποιήσετε το Clipperz για ασφαλή προστασία ευαίσθητων ή σημαντικών πληροφοριών, βεβαιωθείτε ότι θα χρησιμοποιήσετε μία “γερή” κωδική φράση. Όσο μεγαλύτερη, τόσο καλύτερη!'}]},
142 {tag:'li', children:[{tag:'span', html:'Το Clipperz δεν θα έχει τη δυνατότητα να ανακτήσει μία χαμένη κωδική φράση!'}]} 140 {tag:'li', children:[{tag:'span', html:'Το Clipperz δεν θα έχει τη δυνατότητα να ανακτήσει μία χαμένη κωδική φράση!'}]}
143 ]}, 141 ]},
144 {tag:'p', html:'Για περισσότερες πληροφορίες, παρακαλώ ανατρέξτε στο <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a>.'} 142 {tag:'p', html:'Για περισσότερες πληροφορίες, παρακαλώ ανατρέξτε στο <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a>.'}
145 ], 143 ],
146 'splashAlertCloseButtonLabel':"Εντάξει", 144 'splashAlertCloseButtonLabel':"Εντάξει",
147 145
148 // Registration page - form 146 // Registration page - form
149 'registrationFormTitle': "Δημιουργήστε λογαριασμό", 147 'registrationFormTitle': "Δημιουργήστε λογαριασμό",
150 'registrationFormUsernameLabel': "Όνομα χρήστη", 148 'registrationFormUsernameLabel': "Όνομα χρήστη",
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_en-CA.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_en-CA.js
index 6879c60..4ecd533 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_en-CA.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_en-CA.js
@@ -1,40 +1,38 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26//============================================================================= 24//=============================================================================
27// 25//
28 // E N G L I S H C A N A D I A N ( en_CA ) 26 // E N G L I S H C A N A D I A N ( en_CA )
29// 27//
30//============================================================================= 28//=============================================================================
31 29
32Clipperz.PM.Strings.Languages['en-ca'] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], { 30Clipperz.PM.Strings.Languages['en-ca'] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
33 31
34 // 'forumHeaderLinkLabel': "forum-CA", 32 // 'forumHeaderLinkLabel': "forum-CA",
35 33
36 // 'recordMenuLabel': "cards-CA", 34 // 'recordMenuLabel': "cards-CA",
37 35
38 //------------------------------------------------------------------------- 36 //-------------------------------------------------------------------------
39 __syntaxFix__: "syntax fix" 37 __syntaxFix__: "syntax fix"
40}); \ No newline at end of file 38}); \ No newline at end of file
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_en-GB.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_en-GB.js
index f734c8e..af7b6a2 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_en-GB.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_en-GB.js
@@ -1,40 +1,38 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26//============================================================================= 24//=============================================================================
27// 25//
28 // E N G L I S H B R I T I S H ( en_GB ) 26 // E N G L I S H B R I T I S H ( en_GB )
29// 27//
30//============================================================================= 28//=============================================================================
31 29
32Clipperz.PM.Strings.Languages['en-gb'] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], { 30Clipperz.PM.Strings.Languages['en-gb'] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
33 31
34 // 'forumHeaderLinkLabel': "forum-GB", 32 // 'forumHeaderLinkLabel': "forum-GB",
35 33
36 // 'recordMenuLabel': "cards-GB", 34 // 'recordMenuLabel': "cards-GB",
37 35
38 //------------------------------------------------------------------------- 36 //-------------------------------------------------------------------------
39 __syntaxFix__: "syntax fix" 37 __syntaxFix__: "syntax fix"
40}); \ No newline at end of file 38}); \ No newline at end of file
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_en-US.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_en-US.js
index ab1bb0f..97543a4 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_en-US.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_en-US.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Strings) == 'undefined') { Clipperz.PM.Strings = {}; } 26if (typeof(Clipperz.PM.Strings) == 'undefined') { Clipperz.PM.Strings = {}; }
29if (typeof(Clipperz.PM.Strings.Languages) == 'undefined') { Clipperz.PM.Strings.Languages = {}; } 27if (typeof(Clipperz.PM.Strings.Languages) == 'undefined') { Clipperz.PM.Strings.Languages = {}; }
30 28
31//============================================================================= 29//=============================================================================
32// 30//
33 // E N G L I S H A M E R I C A N ( en_US ) 31 // E N G L I S H A M E R I C A N ( en_US )
34// 32//
35//============================================================================= 33//=============================================================================
36 34
37Clipperz.PM.Strings.Languages['en-us'] = { 35Clipperz.PM.Strings.Languages['en-us'] = {
38 36
39 //Login page - description 37 //Login page - description
40'clipperzServiceDescription': "\ 38'clipperzServiceDescription': "\
41 <!-- FIX CSS DONE -->\ 39 <!-- FIX CSS DONE -->\
42 <h2>Keep it to yourself!</h2>\ 40 <h2>Keep it to yourself!</h2>\
43 <ul>\ 41 <ul>\
44 <li>\ 42 <li>\
45 <h3>Clipperz is:</h3>\ 43 <h3>Clipperz is:</h3>\
46 <ul>\ 44 <ul>\
47 <li><p>a secure and simple password manager</p></li>\ 45 <li><p>a secure and simple password manager</p></li>\
48 <li><p>an effective single sign-on solution</p></li>\ 46 <li><p>an effective single sign-on solution</p></li>\
49 <li><p>a digital vault for your personal data</p></li>\ 47 <li><p>a digital vault for your personal data</p></li>\
50 </ul>\ 48 </ul>\
51 </li>\ 49 </li>\
52 <li>\ 50 <li>\
53 <h3>With Clipperz you can:</h3>\ 51 <h3>With Clipperz you can:</h3>\
54 <ul>\ 52 <ul>\
55 <li><p>store and manage your passwords and online credentials</p></li>\ 53 <li><p>store and manage your passwords and online credentials</p></li>\
56 <li><p>login to your web services without entering any username or password</p></li>\ 54 <li><p>login to your web services without entering any username or password</p></li>\
57 <li><p>protect all your sensitive data: codes for burglar alarms, PINs, credit card numbers, …</p></li>\ 55 <li><p>protect all your sensitive data: codes for burglar alarms, PINs, credit card numbers, …</p></li>\
58 <li><p>share secrets with family members and associates (coming soon)</p></li>\ 56 <li><p>share secrets with family members and associates (coming soon)</p></li>\
59 </ul>\ 57 </ul>\
60 </li>\ 58 </li>\
61 <li>\ 59 <li>\
62 <h3>Clipperz benefits:</h3>\ 60 <h3>Clipperz benefits:</h3>\
63 <ul>\ 61 <ul>\
64 <li><p>free and completely anonymous</p></li>\ 62 <li><p>free and completely anonymous</p></li>\
65 <li><p>access it any time from any computer</p></li>\ 63 <li><p>access it any time from any computer</p></li>\
66 <li><p>no software to download and nothing to install</p></li>\ 64 <li><p>no software to download and nothing to install</p></li>\
67 <li><p>avoid keeping secrets on your PC or on paper</p></li>\ 65 <li><p>avoid keeping secrets on your PC or on paper</p></li>\
68 </ul>\ 66 </ul>\
69 </li>\ 67 </li>\
70 <li>\ 68 <li>\
71 <h3>Clipperz security:</h3>\ 69 <h3>Clipperz security:</h3>\
72 <ul>\ 70 <ul>\
73 <li><p>your secrets are locally encrypted by your browser before being uploaded to Clipperz</p></li>\ 71 <li><p>your secrets are locally encrypted by your browser before being uploaded to Clipperz</p></li>\
74 <li><p>the encryption key is a passphrase known only to you</p></li>\ 72 <li><p>the encryption key is a passphrase known only to you</p></li>\
75 <li><p>Clipperz hosts your sensitive data in encrypted form and could never actually access the data in its plain form</p></li>\ 73 <li><p>Clipperz hosts your sensitive data in encrypted form and could never actually access the data in its plain form</p></li>\
76 <li><p>Clipperz is built upon standard encryption schemes, nothing fancies or homemade</p></li>\ 74 <li><p>Clipperz is built upon standard encryption schemes, nothing fancies or homemade</p></li>\
77 <li><p>you can review the source code anytime you like, but you need to know nothing about cryptography to be an happy user!</p></li>\ 75 <li><p>you can review the source code anytime you like, but you need to know nothing about cryptography to be an happy user!</p></li>\
78 </ul>\ 76 </ul>\
79 </li>\ 77 </li>\
80 <li>\ 78 <li>\
81 <a href=\"http://www.clipperz.com\" target=\"_blank\">Learn more</a>\ 79 <a href=\"http://www.clipperz.com\" target=\"_blank\">Learn more</a>\
82 </li>\ 80 </li>\
83 </ul>", 81 </ul>",
84 82
85 83
86 'loginFormTitle': "login with your Clipperz account", 84 'loginFormTitle': "login with your Clipperz account",
87 'loginFormUsernameLabel': "username", 85 'loginFormUsernameLabel': "username",
88 'loginFormPassphraseLabel': "passphrase", 86 'loginFormPassphraseLabel': "passphrase",
89 'loginFormDontHaveAnAccountLabel': "don\'t have an account?", 87 'loginFormDontHaveAnAccountLabel': "don\'t have an account?",
90 'loginFormCreateOneLabel': "create one", 88 'loginFormCreateOneLabel': "create one",
91 'loginFormForgotYourCredentialsLabel': "forgot your credentials?", 89 'loginFormForgotYourCredentialsLabel': "forgot your credentials?",
92 'loginFormAarghThatsBadLabel': "aargh! that\'s bad!", 90 'loginFormAarghThatsBadLabel': "aargh! that\'s bad!",
93 'loginFormAfraidOfMaliciousScriptsLabel': "afraid of malicious scripts?", 91 'loginFormAfraidOfMaliciousScriptsLabel': "afraid of malicious scripts?",
94 'loginFormVerifyTheCodeLabel': "verify the code", 92 'loginFormVerifyTheCodeLabel': "verify the code",
95 'loginFormButtonLabel': "Login", 93 'loginFormButtonLabel': "Login",
96 'loginFormOneTimePasswordCheckboxLabel': "use a one-time passphrase", 94 'loginFormOneTimePasswordCheckboxLabel': "use a one-time passphrase",
97'loginFormOneTimePasswordCheckboxDescription': "", 95'loginFormOneTimePasswordCheckboxDescription': "",
98 96
99// Login page - language selection 97// Login page - language selection
100 'loginPanelSwithLanguageDescription': "<h5>Switch to your preferred language</h5>", 98 'loginPanelSwithLanguageDescription': "<h5>Switch to your preferred language</h5>",
101 99
102// Login page - browser compatibility 100// Login page - browser compatibility
103 'browserCompatibilityDescription': "<p>Have a better and safer Clipperz experience with Firefox. However Clipperz works just fine also with Opera, Safari and MS Internet Explorer!</p>", 101 'browserCompatibilityDescription': "<p>Have a better and safer Clipperz experience with Firefox. However Clipperz works just fine also with Opera, Safari and MS Internet Explorer!</p>",
104 102
105// Login with OTP - message panel 103// Login with OTP - message panel
106 'OTPloginMessagePanelInitialTitle': "Logging in using a one-time passphrase", 104 'OTPloginMessagePanelInitialTitle': "Logging in using a one-time passphrase",
107 'OTPloginMessagePanelInitialText': "Sending OTP credentials …", 105 'OTPloginMessagePanelInitialText': "Sending OTP credentials …",
108 'OTPloginMessagePanelLoadingTitle': "Logging in using a one-time passphrase", 106 'OTPloginMessagePanelLoadingTitle': "Logging in using a one-time passphrase",
109 'OTPloginMessagePanelLoadingText': "Fetching encrypted authentication data from the server …", 107 'OTPloginMessagePanelLoadingText': "Fetching encrypted authentication data from the server …",
110 'OTPloginMessagePanelProcessingTitle': "Logging in using a one-time passphrase", 108 'OTPloginMessagePanelProcessingTitle': "Logging in using a one-time passphrase",
111 'OTPloginMessagePanelProcessingText': "Local decryption of authentication data", 109 'OTPloginMessagePanelProcessingText': "Local decryption of authentication data",
112 110
113// Regular login - message panel 111// Regular login - message panel
114 'loginMessagePanelInitialTitle': "Logging in …", 112 'loginMessagePanelInitialTitle': "Logging in …",
115 'loginMessagePanelInitialText': "---", 113 'loginMessagePanelInitialText': "---",
116 'loginMessagePanelInitialButtonLabel': "Cancel", 114 'loginMessagePanelInitialButtonLabel': "Cancel",
117 'loginMessagePanelConnectedTitle': "Connected", 115 'loginMessagePanelConnectedTitle': "Connected",
118 'loginMessagePanelConnectedText': "Done", 116 'loginMessagePanelConnectedText': "Done",
119 'loginMessagePanelFailureTitle': "Error", 117 'loginMessagePanelFailureTitle': "Error",
120 'loginMessagePanelFailureText': "Login failed", 118 'loginMessagePanelFailureText': "Login failed",
121 'loginMessagePanelFailureButtonLabel': "Close", 119 'loginMessagePanelFailureButtonLabel': "Close",
122 120
123// Regular login - message panel - connection 121// Regular login - message panel - connection
124 'connectionLoginSendingCredentialsMessageTitle': "Verifying credentials", 122 'connectionLoginSendingCredentialsMessageTitle': "Verifying credentials",
125 'connectionLoginSendingCredentialsMessageText': "Sending credentials", 123 'connectionLoginSendingCredentialsMessageText': "Sending credentials",
126 'connectionLoginCredentialsVerificationMessageTitle':"Verifying credentials", 124 'connectionLoginCredentialsVerificationMessageTitle':"Verifying credentials",
127 'connectionLoginCredentialsVerificationMessageText':"Performing SRP authentication", 125 'connectionLoginCredentialsVerificationMessageText':"Performing SRP authentication",
128 'connectionLoginDoneMessageTitle': "Verifying credentials", 126 'connectionLoginDoneMessageTitle': "Verifying credentials",
129 'connectionLoginDoneMessageText': "Connected", 127 'connectionLoginDoneMessageText': "Connected",
130 128
131 //Regular login - message panel - user 129 //Regular login - message panel - user
132 'userLoginPanelUpgradingUserCredentialsMessageTitle': "Verifying credentials", 130 'userLoginPanelUpgradingUserCredentialsMessageTitle': "Verifying credentials",
133 'userLoginPanelUpgradingUserCredentialsMessageText': "Upgrading your credentials to a new authentication schema", 131 'userLoginPanelUpgradingUserCredentialsMessageText': "Upgrading your credentials to a new authentication schema",
134 'userLoginPanelConnectedMessageTitle': "User authenticated", 132 'userLoginPanelConnectedMessageTitle': "User authenticated",
135 'userLoginPanelConnectedMessageText': "Successfully logged in", 133 'userLoginPanelConnectedMessageText': "Successfully logged in",
136 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle': "Verifying credentials", 134 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle': "Verifying credentials",
137 'userLoginPanelTryingAnOlderConnectionSchemaMessageText': "Trying an older authentication schema", 135 'userLoginPanelTryingAnOlderConnectionSchemaMessageText': "Trying an older authentication schema",
138 'userLoginPanelLoadingUserDataMessageTitle': "User authenticated", 136 'userLoginPanelLoadingUserDataMessageTitle': "User authenticated",
139 'userLoginPanelLoadingUserDataMessageText': "Downloading encrypted card headers from Clipperz", 137 'userLoginPanelLoadingUserDataMessageText': "Downloading encrypted card headers from Clipperz",
140 'userLoginPanelDecryptingUserDataMessageTitle': "User authenticated", 138 'userLoginPanelDecryptingUserDataMessageTitle': "User authenticated",
141 'userLoginPanelDecryptingUserDataMessageText': "Local decryption of card headers", 139 'userLoginPanelDecryptingUserDataMessageText': "Local decryption of card headers",
142 'userLoginPanelDecryptingUserStatisticsMessageTitle': "User authenticated", 140 'userLoginPanelDecryptingUserStatisticsMessageTitle': "User authenticated",
143 'userLoginPanelDecryptingUserStatisticsMessageText': "Local decryption of usage statistics", 141 'userLoginPanelDecryptingUserStatisticsMessageText': "Local decryption of usage statistics",
144 142
145 //Registration page - splash alert 143 //Registration page - splash alert
146 'splashAlertTitle':"Welcome to Clipperz!", 144 'splashAlertTitle':"Welcome to Clipperz!",
147'splashAlertText': "\ 145'splashAlertText': "\
148 <!-- FIX CSS DONE! -->\ 146 <!-- FIX CSS DONE! -->\
149 <p>Some security advice</p>\ 147 <p>Some security advice</p>\
150 <ul>\ 148 <ul>\
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_es-ES.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_es-ES.js
index 57286fe..2090913 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_es-ES.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_es-ES.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26Clipperz.PM.Strings.Languages['es-ES'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], { 24Clipperz.PM.Strings.Languages['es-ES'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
27 'clipperzServiceDescription':"<h2>Guárdelo usted mismo!</h2> <ul> <li> <h3>Clipperz es:</h3> <ul> <li> <p>un simple y seguro administrador de contraseñas</p> </li> <li> <p>una efectiva y simple solución de logueo</p> </li> <li> <p>un maletín digital para sus datos confidenciales</p> </li> </ul> </li> <li> <h3>Con Clipperz usted puede:</h3> <ul> <li> <p>administrar y almacenar en línea sus contraseñas y credenciales digitales</p> </li> <li> <p>ingresar en sus servicios web sin ningún nombre de usuario o contraseña</p> </li> <li> <p>protejer todos sus datos sensibles: códigos de alarmas, PINs y números de tarjetas de crédito, &hellip;</p> </li> <li> <p>compartir secretos con sus familiares y socios</p> </li> </ul> </li> <li> <h3>Beneficios de Clipperz:</h3> <ul> <li> <p>es gratis y completamente anónimo</p> </li> <li> <p>con acceso en cualquier momento y desde cualquier ordenador</p> </li> <li> <p>no necesita instalar o descargar ningún programa</p> </li> <li> <p>no necesita guardar secretos en papel o en el ordenador</p> </li> </ul> </li> <li> <h3>Seguridad de Clipperz:</h3> <ul> <li> <p>sus secretos son localmente encriptados por su navegador antes de ser almacenados en Clipperz</p> </li> <li> <p>la llave de encriptación es una frase clave conocida solo por usted</p> </li> <li> <p>Clipperz almacena sus datos de manera encriptada y nunca accede a ellos en forma de texto plano</p> </li> <li> <p>Clipperz esta basado en esquemas estándares de encriptación, no hemos inventado nada</p> </li> <li> <p>usted puede revisar el código todas las veces que lo desee, ¡ pero no necesita conocer algo de encriptación para ser un usuario feliz!</p> </li> </ul> </li> <li> <a href=\"http://www.clipperz.com\" target=\"_blank\">Aprender más</a> </li> </ul> ", 25 'clipperzServiceDescription':"<h2>Guárdelo usted mismo!</h2> <ul> <li> <h3>Clipperz es:</h3> <ul> <li> <p>un simple y seguro administrador de contraseñas</p> </li> <li> <p>una efectiva y simple solución de logueo</p> </li> <li> <p>un maletín digital para sus datos confidenciales</p> </li> </ul> </li> <li> <h3>Con Clipperz usted puede:</h3> <ul> <li> <p>administrar y almacenar en línea sus contraseñas y credenciales digitales</p> </li> <li> <p>ingresar en sus servicios web sin ningún nombre de usuario o contraseña</p> </li> <li> <p>protejer todos sus datos sensibles: códigos de alarmas, PINs y números de tarjetas de crédito, &hellip;</p> </li> <li> <p>compartir secretos con sus familiares y socios</p> </li> </ul> </li> <li> <h3>Beneficios de Clipperz:</h3> <ul> <li> <p>es gratis y completamente anónimo</p> </li> <li> <p>con acceso en cualquier momento y desde cualquier ordenador</p> </li> <li> <p>no necesita instalar o descargar ningún programa</p> </li> <li> <p>no necesita guardar secretos en papel o en el ordenador</p> </li> </ul> </li> <li> <h3>Seguridad de Clipperz:</h3> <ul> <li> <p>sus secretos son localmente encriptados por su navegador antes de ser almacenados en Clipperz</p> </li> <li> <p>la llave de encriptación es una frase clave conocida solo por usted</p> </li> <li> <p>Clipperz almacena sus datos de manera encriptada y nunca accede a ellos en forma de texto plano</p> </li> <li> <p>Clipperz esta basado en esquemas estándares de encriptación, no hemos inventado nada</p> </li> <li> <p>usted puede revisar el código todas las veces que lo desee, ¡ pero no necesita conocer algo de encriptación para ser un usuario feliz!</p> </li> </ul> </li> <li> <a href=\"http://www.clipperz.com\" target=\"_blank\">Aprender más</a> </li> </ul> ",
28 'loginFormTitle':"ingrese con su usuario Clipperz", 26 'loginFormTitle':"ingrese con su usuario Clipperz",
29 'loginFormUsernameLabel':"usuario", 27 'loginFormUsernameLabel':"usuario",
30 'loginFormPassphraseLabel':"frase clave", 28 'loginFormPassphraseLabel':"frase clave",
31 'loginFormDontHaveAnAccountLabel':"¿no tiene una cuenta?", 29 'loginFormDontHaveAnAccountLabel':"¿no tiene una cuenta?",
32 'loginFormCreateOneLabel':"crear una", 30 'loginFormCreateOneLabel':"crear una",
33 'loginFormForgotYourCredentialsLabel':"¿perdió sus credenciales?", 31 'loginFormForgotYourCredentialsLabel':"¿perdió sus credenciales?",
34 'loginFormAarghThatsBadLabel':"¡Ahhh! ¡eso es malo!", 32 'loginFormAarghThatsBadLabel':"¡Ahhh! ¡eso es malo!",
35 'loginFormAfraidOfMaliciousScriptsLabel':"¿evitar scripts maliciosos?", 33 'loginFormAfraidOfMaliciousScriptsLabel':"¿evitar scripts maliciosos?",
36 'loginFormVerifyTheCodeLabel':"verificar el código", 34 'loginFormVerifyTheCodeLabel':"verificar el código",
37 'loginFormButtonLabel':"Ingresar", 35 'loginFormButtonLabel':"Ingresar",
38 'loginFormOneTimePasswordCheckboxLabel':"usar una frase clave desechable", 36 'loginFormOneTimePasswordCheckboxLabel':"usar una frase clave desechable",
39 'loginPanelSwithLanguageDescription':"<h5>Cambiar a su lenguaje preferido</h5> ", 37 'loginPanelSwithLanguageDescription':"<h5>Cambiar a su lenguaje preferido</h5> ",
40 'browserCompatibilityDescription':"<p>Obtenga una mejor y más segura experiencia con Firefox. De todas maneras Clipperz funciona también con Opera y MS Explorer!</p> ", 38 'browserCompatibilityDescription':"<p>Obtenga una mejor y más segura experiencia con Firefox. De todas maneras Clipperz funciona también con Opera y MS Explorer!</p> ",
41 'OTPloginMessagePanelInitialTitle':"Ingresar usando una frase clave desechable", 39 'OTPloginMessagePanelInitialTitle':"Ingresar usando una frase clave desechable",
42 'OTPloginMessagePanelInitialText':"Enviando credenciales OTP ...", 40 'OTPloginMessagePanelInitialText':"Enviando credenciales OTP ...",
43 'OTPloginMessagePanelLoadingTitle':"Ingresar usando una frase clave desechable", 41 'OTPloginMessagePanelLoadingTitle':"Ingresar usando una frase clave desechable",
44 'OTPloginMessagePanelLoadingText':"Descargando datos de autenticación encriptados desde el servidor ...", 42 'OTPloginMessagePanelLoadingText':"Descargando datos de autenticación encriptados desde el servidor ...",
45 'OTPloginMessagePanelProcessingTitle':"Ingresar usando una frase clave desechable", 43 'OTPloginMessagePanelProcessingTitle':"Ingresar usando una frase clave desechable",
46 'OTPloginMessagePanelProcessingText':"Desencriptación local de datos de autenticación ...", 44 'OTPloginMessagePanelProcessingText':"Desencriptación local de datos de autenticación ...",
47 'loginMessagePanelInitialTitle':"Ingresando ...", 45 'loginMessagePanelInitialTitle':"Ingresando ...",
48 'loginMessagePanelInitialButtonLabel':"Cancelar", 46 'loginMessagePanelInitialButtonLabel':"Cancelar",
49 'loginMessagePanelConnectedTitle':"Conectado", 47 'loginMessagePanelConnectedTitle':"Conectado",
50 'loginMessagePanelConnectedText':"Hecho", 48 'loginMessagePanelConnectedText':"Hecho",
51 'loginMessagePanelFailureTitle':"Error", 49 'loginMessagePanelFailureTitle':"Error",
52 'loginMessagePanelFailureText':"Ingreso fallido", 50 'loginMessagePanelFailureText':"Ingreso fallido",
53 'loginMessagePanelFailureButtonLabel':"Cerrar", 51 'loginMessagePanelFailureButtonLabel':"Cerrar",
54 'connectionLoginSendingCredentialsMessageTitle':"Verificando credenciales", 52 'connectionLoginSendingCredentialsMessageTitle':"Verificando credenciales",
55 'connectionLoginSendingCredentialsMessageText':"Enviando credenciales", 53 'connectionLoginSendingCredentialsMessageText':"Enviando credenciales",
56 'connectionLoginCredentialsVerificationMessageTitle':"Verificando credenciales", 54 'connectionLoginCredentialsVerificationMessageTitle':"Verificando credenciales",
57 'connectionLoginCredentialsVerificationMessageText':"Realizando una autenticación SRP", 55 'connectionLoginCredentialsVerificationMessageText':"Realizando una autenticación SRP",
58 'connectionLoginDoneMessageTitle':"Verificando credenciales", 56 'connectionLoginDoneMessageTitle':"Verificando credenciales",
59 'connectionLoginDoneMessageText':"Conectado", 57 'connectionLoginDoneMessageText':"Conectado",
60 'userLoginPanelUpgradingUserCredentialsMessageTitle':"Verificando credenciales", 58 'userLoginPanelUpgradingUserCredentialsMessageTitle':"Verificando credenciales",
61 'userLoginPanelUpgradingUserCredentialsMessageText':"Actualizando sus credenciales al nuevo esquema de autenticación", 59 'userLoginPanelUpgradingUserCredentialsMessageText':"Actualizando sus credenciales al nuevo esquema de autenticación",
62 'userLoginPanelConnectedMessageTitle':"Usuario autenticado", 60 'userLoginPanelConnectedMessageTitle':"Usuario autenticado",
63 'userLoginPanelConnectedMessageText':"Exitosamente logueado", 61 'userLoginPanelConnectedMessageText':"Exitosamente logueado",
64 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"Verifying credentials", 62 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"Verifying credentials",
65 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"Probando un esquema de autenticación antiguo", 63 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"Probando un esquema de autenticación antiguo",
66 'userLoginPanelLoadingUserDataMessageTitle':"Usuario autenticado", 64 'userLoginPanelLoadingUserDataMessageTitle':"Usuario autenticado",
67 'userLoginPanelLoadingUserDataMessageText':"Descargando encabezamientos encriptados desde Clipperz", 65 'userLoginPanelLoadingUserDataMessageText':"Descargando encabezamientos encriptados desde Clipperz",
68 'userLoginPanelDecryptingUserDataMessageTitle':"Usuario autenticado", 66 'userLoginPanelDecryptingUserDataMessageTitle':"Usuario autenticado",
69 'userLoginPanelDecryptingUserDataMessageText':"Desencriptación local de datos", 67 'userLoginPanelDecryptingUserDataMessageText':"Desencriptación local de datos",
70 'userLoginPanelDecryptingUserStatisticsMessageTitle':"Usuario autenticado", 68 'userLoginPanelDecryptingUserStatisticsMessageTitle':"Usuario autenticado",
71 'userLoginPanelDecryptingUserStatisticsMessageText':"Desencriptación local de estadísticas de uso", 69 'userLoginPanelDecryptingUserStatisticsMessageText':"Desencriptación local de estadísticas de uso",
72 'splashAlertTitle':"¡Bienvenido a Clipperz!", 70 'splashAlertTitle':"¡Bienvenido a Clipperz!",
73 'splashAlertText':"<p>Algunas advertencias sobre seguridad</p> <ul> <li> <p>Almacenar sus datos en Clipperz es tan seguro como la frase clave que usted elija para protegerlos. Nadie puede acceder a ellos a no ser que conozca la frase clave.</p> </li> <li> <p>Si usted va a usar Clipperz para guardar información sensible y crítica, esté seguro de elegir una frase clave fuerte. ¡Cuanto más larga mejor!</p> </li> <li> <p>Clipperz no le permitirá recuperar una frase clave perdida.</p> </li> </ul> <p>Si necesita más información, por favor visite el sitio de <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a>.</p> ", 71 'splashAlertText':"<p>Algunas advertencias sobre seguridad</p> <ul> <li> <p>Almacenar sus datos en Clipperz es tan seguro como la frase clave que usted elija para protegerlos. Nadie puede acceder a ellos a no ser que conozca la frase clave.</p> </li> <li> <p>Si usted va a usar Clipperz para guardar información sensible y crítica, esté seguro de elegir una frase clave fuerte. ¡Cuanto más larga mejor!</p> </li> <li> <p>Clipperz no le permitirá recuperar una frase clave perdida.</p> </li> </ul> <p>Si necesita más información, por favor visite el sitio de <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a>.</p> ",
74 'splashAlertCloseButtonLabel':"Aceptar", 72 'splashAlertCloseButtonLabel':"Aceptar",
75 'registrationFormTitle':"Abrir su cuenta", 73 'registrationFormTitle':"Abrir su cuenta",
76 'registrationFormUsernameLabel':"usuario", 74 'registrationFormUsernameLabel':"usuario",
77 'registrationFormPassphraseLabel':"frase clave", 75 'registrationFormPassphraseLabel':"frase clave",
78 'registrationFormRetypePassphraseLabel':"reingrese la frase clave", 76 'registrationFormRetypePassphraseLabel':"reingrese la frase clave",
79 'registrationFormSafetyCheckLabel':"Yo entiendo que Clipperz no me permite recuperar frases clave perdidas", 77 'registrationFormSafetyCheckLabel':"Yo entiendo que Clipperz no me permite recuperar frases clave perdidas",
80 'registrationFormTermsOfServiceCheckLabel':"He leído y estoy de acuerdo con los <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Términos de Servicio</a>.", 78 'registrationFormTermsOfServiceCheckLabel':"He leído y estoy de acuerdo con los <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Términos de Servicio</a>.",
81 'registrationFormDoYouAlreadyHaveAnAccountLabel':"¿usted ya tiene una cuenta?", 79 'registrationFormDoYouAlreadyHaveAnAccountLabel':"¿usted ya tiene una cuenta?",
82 'registrationFormSimplyLoginLabel':"ingreso simple", 80 'registrationFormSimplyLoginLabel':"ingreso simple",
83 'registrationFormButtonLabel':"Registrarse", 81 'registrationFormButtonLabel':"Registrarse",
84 'registrationFormWarningMessageNotMatchingPassphrases':"Su frase clave no coincide, por favor reescríbala.", 82 'registrationFormWarningMessageNotMatchingPassphrases':"Su frase clave no coincide, por favor reescríbala.",
85 'registrationFormWarningMessageSafetyCheckNotSelected':"Por favor, lea y chequee todas las casillas debajo.", 83 'registrationFormWarningMessageSafetyCheckNotSelected':"Por favor, lea y chequee todas las casillas debajo.",
86 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"Usted necesita estar de acuerdo con los Términos de Servicio.", 84 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"Usted necesita estar de acuerdo con los Términos de Servicio.",
87 'registrationMessagePanelInitialTitle':"Creando cuenta ...", 85 'registrationMessagePanelInitialTitle':"Creando cuenta ...",
88 'registrationMessagePanelInitialButtonLabel':"Cancelar", 86 'registrationMessagePanelInitialButtonLabel':"Cancelar",
89 'registrationMessagePanelRegistrationDoneTitle':"Registración", 87 'registrationMessagePanelRegistrationDoneTitle':"Registración",
90 'registrationMessagePanelRegistrationDoneText':"Hecho", 88 'registrationMessagePanelRegistrationDoneText':"Hecho",
91 'registrationMessagePanelFailureTitle':"Registración fallada", 89 'registrationMessagePanelFailureTitle':"Registración fallada",
92 'registrationMessagePanelFailureButtonLabel':"Cerrar", 90 'registrationMessagePanelFailureButtonLabel':"Cerrar",
93 'connectionRegistrationSendingRequestMessageText':"Verificando credenciales", 91 'connectionRegistrationSendingRequestMessageText':"Verificando credenciales",
94 'connectionRegistrationSendingCredentialsMessageText':"Enviando credenciales", 92 'connectionRegistrationSendingCredentialsMessageText':"Enviando credenciales",
95 'registrationSplashPanelTitle':"Aviso de seguridad", 93 'registrationSplashPanelTitle':"Aviso de seguridad",
96 'registrationSplashPanelDescriptionConfig':"<p>Estas son sus credenciales de Clipperz, cuídelas. ¡Clipperz nunca más le mostrará su cuenta y frase clave por segunda vez!</p> ", 94 'registrationSplashPanelDescriptionConfig':"<p>Estas son sus credenciales de Clipperz, cuídelas. ¡Clipperz nunca más le mostrará su cuenta y frase clave por segunda vez!</p> ",
97 'registrationSplashPanelUsernameLabel':"usuario", 95 'registrationSplashPanelUsernameLabel':"usuario",
98 'registrationSplashPanelPassphraseLabel':"frase clave", 96 'registrationSplashPanelPassphraseLabel':"frase clave",
99 'registrationSplashPanelShowPassphraseButtonLabel':" mostrar frase clave", 97 'registrationSplashPanelShowPassphraseButtonLabel':" mostrar frase clave",
100 'donateHeaderLinkLabel':"donaciones", 98 'donateHeaderLinkLabel':"donaciones",
101 'creditsHeaderLinkLabel':"créditos", 99 'creditsHeaderLinkLabel':"créditos",
102 'feedbackHeaderLinkLabel':"contacto", 100 'feedbackHeaderLinkLabel':"contacto",
103 'helpHeaderLinkLabel':"ayuda", 101 'helpHeaderLinkLabel':"ayuda",
104 'forumHeaderLinkLabel':"foro", 102 'forumHeaderLinkLabel':"foro",
105 'recordMenuLabel':"tarjetas", 103 'recordMenuLabel':"tarjetas",
106 'accountMenuLabel':"cuenta", 104 'accountMenuLabel':"cuenta",
107 'dataMenuLabel':"datos", 105 'dataMenuLabel':"datos",
108 'contactsMenuLabel':"contactos", 106 'contactsMenuLabel':"contactos",
109 'toolsMenuLabel':"herramientas", 107 'toolsMenuLabel':"herramientas",
110 'logoutMenuLabel':"salir", 108 'logoutMenuLabel':"salir",
111 'lockMenuLabel':"bloquear", 109 'lockMenuLabel':"bloquear",
112 'lockTitle':"La cuenta está bloqueada", 110 'lockTitle':"La cuenta está bloqueada",
113 'lockDescriptionConfig':"<p>Para desbloquear su cuenta, por favor ingrese su frase clave</p> ", 111 'lockDescriptionConfig':"<p>Para desbloquear su cuenta, por favor ingrese su frase clave</p> ",
114 'unlockButtonLabel':"desbloquear", 112 'unlockButtonLabel':"desbloquear",
115 'changePasswordTabLabel':"Cambiar su frase clave", 113 'changePasswordTabLabel':"Cambiar su frase clave",
116 'changePasswordTabTitle':"Cambiar su frase clave", 114 'changePasswordTabTitle':"Cambiar su frase clave",
117 'changePasswordFormUsernameLabel':"usuario", 115 'changePasswordFormUsernameLabel':"usuario",
118 'changePasswordFormOldPassphraseLabel':"frase clave anterior", 116 'changePasswordFormOldPassphraseLabel':"frase clave anterior",
119 'changePasswordFormNewPassphraseLabel':"nueva frase clave", 117 'changePasswordFormNewPassphraseLabel':"nueva frase clave",
120 'changePasswordFormRetypePassphraseLabel':"reingrese su nueva frase clave", 118 'changePasswordFormRetypePassphraseLabel':"reingrese su nueva frase clave",
121 'changePasswordFormSafetyCheckboxLabel':"Yo entiendo que Clipperz no me permite recuperar una frase clave perdida.", 119 'changePasswordFormSafetyCheckboxLabel':"Yo entiendo que Clipperz no me permite recuperar una frase clave perdida.",
122 'changePasswordFormSubmitLabel':"Cambiar", 120 'changePasswordFormSubmitLabel':"Cambiar",
123 'changePasswordFormWrongUsernameWarning':"Usuario incorrecto", 121 'changePasswordFormWrongUsernameWarning':"Usuario incorrecto",
124 'changePasswordFormWrongPassphraseWarning':"Frase clave incorrecta", 122 'changePasswordFormWrongPassphraseWarning':"Frase clave incorrecta",
125 'changePasswordFormWrongRetypePassphraseWarning':"Sus frases claves no coinciden, por favor reescríbalas.", 123 'changePasswordFormWrongRetypePassphraseWarning':"Sus frases claves no coinciden, por favor reescríbalas.",
126 'changePasswordFormSafetyCheckWarning':"Por favor lea y seleccione la casilla de abajo.", 124 'changePasswordFormSafetyCheckWarning':"Por favor lea y seleccione la casilla de abajo.",
127 'changePasswordFormProgressDialogTitle':"Cambiando credenciales de usuario", 125 'changePasswordFormProgressDialogTitle':"Cambiando credenciales de usuario",
128 'changePasswordFormProgressDialogConnectedMessageTitle':"Conectado", 126 'changePasswordFormProgressDialogConnectedMessageTitle':"Conectado",
129 'changePasswordFormProgressDialogConnectedMessageText':"Hecho", 127 'changePasswordFormProgressDialogConnectedMessageText':"Hecho",
130 'changePasswordFormProgressDialogErrorMessageTitle':"Error", 128 'changePasswordFormProgressDialogErrorMessageTitle':"Error",
131 'changePasswordFormProgressDialogErrorMessageText':"¡Cambio de credenciales fallado!", 129 'changePasswordFormProgressDialogErrorMessageText':"¡Cambio de credenciales fallado!",
132 'changeCredentialsPanelEncryptingDataMessageTitle':"Cambiando su frase clave", 130 'changeCredentialsPanelEncryptingDataMessageTitle':"Cambiando su frase clave",
133 'changeCredentialsPanelEncryptingDataMessageText':"Encriptación local de encabezados de tarjetas", 131 'changeCredentialsPanelEncryptingDataMessageText':"Encriptación local de encabezados de tarjetas",
134 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"Cambiando su frase clave", 132 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"Cambiando su frase clave",
135 'changeCredentialsPanelCreatingNewCredentialsMessageText':"Actualizando su credenciales", 133 'changeCredentialsPanelCreatingNewCredentialsMessageText':"Actualizando su credenciales",
136 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Cambiando su frase clave", 134 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Cambiando su frase clave",
137 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Subiendo sus credenciales encriptadas a Clipperz", 135 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Subiendo sus credenciales encriptadas a Clipperz",
138 'changeCredentialsPanelDoneMessageTitle':"Cambiando su frase clave", 136 'changeCredentialsPanelDoneMessageTitle':"Cambiando su frase clave",
139 'changeCredentialsPanelDoneMessageText':"Hecho", 137 'changeCredentialsPanelDoneMessageText':"Hecho",
140 'manageOTPTabLabel':"Administrar su frases clave desechables", 138 'manageOTPTabLabel':"Administrar su frases clave desechables",
141 'manageOTPTabTitle':"Administrar su frases clave desechables", 139 'manageOTPTabTitle':"Administrar su frases clave desechables",
142 'manageOTPTabDescription':"<p>Una frase clave desechable uso funciona como una frase clave regular, pero puede ser usada solo una vez.</p> <p>Si las misma frase clave es usada nuevamente en un segundo intento de acceso, esta será rechazada y el proceso de acceso fallará.</p> <p>Inmediatamente después de un acceso exitoso, su on-time frase clave será borrada previniendo accesos fraudulentos.</p> <p>Frases claves desechables son una excelente elección para protegerse de keyloggers y spywares, que pueden recolectar datos desde máquinas comprometidas.</p> <p> <b>Le recomendamos muy fuertemente que use frases claves desechables uso cuando acceda a Clipperz desde terminales públicas, como Internet Cafés, Cybercafés y bibliotecas.</b> </p> ", 140 'manageOTPTabDescription':"<p>Una frase clave desechable uso funciona como una frase clave regular, pero puede ser usada solo una vez.</p> <p>Si las misma frase clave es usada nuevamente en un segundo intento de acceso, esta será rechazada y el proceso de acceso fallará.</p> <p>Inmediatamente después de un acceso exitoso, su on-time frase clave será borrada previniendo accesos fraudulentos.</p> <p>Frases claves desechables son una excelente elección para protegerse de keyloggers y spywares, que pueden recolectar datos desde máquinas comprometidas.</p> <p> <b>Le recomendamos muy fuertemente que use frases claves desechables uso cuando acceda a Clipperz desde terminales públicas, como Internet Cafés, Cybercafés y bibliotecas.</b> </p> ",
143 'oneTimePasswordReadOnlyMessage':"<h6>¡Disculpe!</h6> <p>Usted no puede usar su frases clave desechables mientras usa la versión fuera de línea de Clipperz.</p> ", 141 'oneTimePasswordReadOnlyMessage':"<h6>¡Disculpe!</h6> <p>Usted no puede usar su frases clave desechables mientras usa la versión fuera de línea de Clipperz.</p> ",
144 'oneTimePasswordLoadingMessage':"<h6>Cargando datos</h6> <p>Por favor espere ...</p> ", 142 'oneTimePasswordLoadingMessage':"<h6>Cargando datos</h6> <p>Por favor espere ...</p> ",
145 'oneTimePasswordNoPasswordAvailable':"<h6>No hay frase clave desechables disponible</h6> <p>Haga click en el botón “Nueva” para agregar una frase clave desechables a su cuenta.</p> ", 143 'oneTimePasswordNoPasswordAvailable':"<h6>No hay frase clave desechables disponible</h6> <p>Haga click en el botón “Nueva” para agregar una frase clave desechables a su cuenta.</p> ",
146 'createNewOTPButtonLabel':"Nueva", 144 'createNewOTPButtonLabel':"Nueva",
147 'deleteOTPButtonLabel':"Borrar", 145 'deleteOTPButtonLabel':"Borrar",
148 'printOTPButtonLabel':"Imprimir", 146 'printOTPButtonLabel':"Imprimir",
149 'disabledOneTimePassword_warning':"desabilitado", 147 'disabledOneTimePassword_warning':"desabilitado",
150 'oneTimePasswordSelectionLink_selectLabel':"Seleccionar:", 148 'oneTimePasswordSelectionLink_selectLabel':"Seleccionar:",
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_fr-FR.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_fr-FR.js
index 34467e9..08f0c21 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_fr-FR.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_fr-FR.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26Clipperz.PM.Strings.Languages['fr-FR'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], { 24Clipperz.PM.Strings.Languages['fr-FR'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
27 'clipperzServiceDescription':"<h2>Gardez le pour vous!</h2> <ul> <li> <h3>Clipperz est:</h3> <ul> <li> <p>un gestionnaire de mots de passe sécurisé</p> </li> <li> <p>une solution fiable d’authentification unique</p> </li> <li> <p>une chambre forte numérique pour vos données confidentielles</p> </li> </ul> </li> <li> <h3>Avec Clipperz vous pouvez:</h3> <ul> <li> <p>enregistrer et gérer vos mots de passe et autres informations d'identification en ligne</p> </li> <li> <p>vous identifier sur vos sites web sans avoir besoin de saisir votre nom d’utilisateur ou votre mot de passe</p> </li> <li> <p>protéger toutes vos données sensibles: codes d’alarmes, PINs (téléphone portable), carte de crédits, &hellip;</p> </li> <li> <p>partager certaines données confidentielles avec vos proches et vos associés (bientôt disponible!)</p> </li> </ul> </li> <li> <h3>Les avantages de Clipperz:</h3> <ul> <li> <p>c'est gratuit et totalement anonyme</p> </li> <li> <p>accéder à vos données depuis n’importe quel ordinateur</p> </li> <li> <p>vous n'avez besoin d'aucun logiciel et rien n'est à installer sur votre poste</p> </li> <li> <p>cela vous évite de garder des mots de passe sur votre PC ou sur des bouts de papier</p> </li> </ul> </li> <li> <h3>La sécurité de Clipperz:</h3> <ul> <li> <p>vos mots de passe sont localement chiffrés par votre navigateur avant d’être téléchargé à Clipperz</p> </li> <li> <p>la clé de cryptage est une phrase secrète détenue uniquement par vous même</p> </li> <li> <p>héberge vos données sensibles dans des formulaires cryptés et ne peuvent être consultées directement en clair</p> </li> <li> <p>est développé sur des standard de cryptage réputé sans aucune fantaisie ni de bricolage fait maison</p> </li> <li> <p>vous pouvez consulter le code source autant que vous le souhaitez</p> </li> </ul> </li> <li> <a href=\"http://www.clipperz.com\" target=\"_blank\">Plus d’informations</a> </li> </ul> ", 25 'clipperzServiceDescription':"<h2>Gardez le pour vous!</h2> <ul> <li> <h3>Clipperz est:</h3> <ul> <li> <p>un gestionnaire de mots de passe sécurisé</p> </li> <li> <p>une solution fiable d’authentification unique</p> </li> <li> <p>une chambre forte numérique pour vos données confidentielles</p> </li> </ul> </li> <li> <h3>Avec Clipperz vous pouvez:</h3> <ul> <li> <p>enregistrer et gérer vos mots de passe et autres informations d'identification en ligne</p> </li> <li> <p>vous identifier sur vos sites web sans avoir besoin de saisir votre nom d’utilisateur ou votre mot de passe</p> </li> <li> <p>protéger toutes vos données sensibles: codes d’alarmes, PINs (téléphone portable), carte de crédits, &hellip;</p> </li> <li> <p>partager certaines données confidentielles avec vos proches et vos associés (bientôt disponible!)</p> </li> </ul> </li> <li> <h3>Les avantages de Clipperz:</h3> <ul> <li> <p>c'est gratuit et totalement anonyme</p> </li> <li> <p>accéder à vos données depuis n’importe quel ordinateur</p> </li> <li> <p>vous n'avez besoin d'aucun logiciel et rien n'est à installer sur votre poste</p> </li> <li> <p>cela vous évite de garder des mots de passe sur votre PC ou sur des bouts de papier</p> </li> </ul> </li> <li> <h3>La sécurité de Clipperz:</h3> <ul> <li> <p>vos mots de passe sont localement chiffrés par votre navigateur avant d’être téléchargé à Clipperz</p> </li> <li> <p>la clé de cryptage est une phrase secrète détenue uniquement par vous même</p> </li> <li> <p>héberge vos données sensibles dans des formulaires cryptés et ne peuvent être consultées directement en clair</p> </li> <li> <p>est développé sur des standard de cryptage réputé sans aucune fantaisie ni de bricolage fait maison</p> </li> <li> <p>vous pouvez consulter le code source autant que vous le souhaitez</p> </li> </ul> </li> <li> <a href=\"http://www.clipperz.com\" target=\"_blank\">Plus d’informations</a> </li> </ul> ",
28 'loginFormTitle':"identifiez-vous avec votre compte Clipperz", 26 'loginFormTitle':"identifiez-vous avec votre compte Clipperz",
29 'loginFormUsernameLabel':"nom d’utilisateur", 27 'loginFormUsernameLabel':"nom d’utilisateur",
30 'loginFormPassphraseLabel':"phrase secrète", 28 'loginFormPassphraseLabel':"phrase secrète",
31 'loginFormDontHaveAnAccountLabel':"vous n’avez pas de compte?", 29 'loginFormDontHaveAnAccountLabel':"vous n’avez pas de compte?",
32 'loginFormCreateOneLabel':"créez votre compte", 30 'loginFormCreateOneLabel':"créez votre compte",
33 'loginFormForgotYourCredentialsLabel':"vous avez oublié votre certificat?", 31 'loginFormForgotYourCredentialsLabel':"vous avez oublié votre certificat?",
34 'loginFormAarghThatsBadLabel':"c’est fort dommage pour vous!", 32 'loginFormAarghThatsBadLabel':"c’est fort dommage pour vous!",
35 'loginFormAfraidOfMaliciousScriptsLabel':"vous avez peur des script malicieux?", 33 'loginFormAfraidOfMaliciousScriptsLabel':"vous avez peur des script malicieux?",
36 'loginFormVerifyTheCodeLabel':"vérifiez le code", 34 'loginFormVerifyTheCodeLabel':"vérifiez le code",
37 'loginFormButtonLabel':"S’identifer", 35 'loginFormButtonLabel':"S’identifer",
38 'loginPanelSwithLanguageDescription':"<p>Sélectionnez votre langue préféré</p> ", 36 'loginPanelSwithLanguageDescription':"<p>Sélectionnez votre langue préféré</p> ",
39 'browserCompatibilityDescription':"<p>Have a better and safer Clipperz experience with Firefox. However Clipperz works just fine also with Opera and MS Internet Explorer!</p> ", 37 'browserCompatibilityDescription':"<p>Have a better and safer Clipperz experience with Firefox. However Clipperz works just fine also with Opera and MS Internet Explorer!</p> ",
40 'loginMessagePanelInitialTitle':"En cours d’identification ...", 38 'loginMessagePanelInitialTitle':"En cours d’identification ...",
41 'loginMessagePanelInitialButtonLabel':"Annuler", 39 'loginMessagePanelInitialButtonLabel':"Annuler",
42 'loginMessagePanelConnectedTitle':"Connecté", 40 'loginMessagePanelConnectedTitle':"Connecté",
43 'loginMessagePanelConnectedText':"Terminé", 41 'loginMessagePanelConnectedText':"Terminé",
44 'loginMessagePanelFailureTitle':"Erreur", 42 'loginMessagePanelFailureTitle':"Erreur",
45 'loginMessagePanelFailureText':"Identification échoué", 43 'loginMessagePanelFailureText':"Identification échoué",
46 'loginMessagePanelFailureButtonLabel':"Fermer", 44 'loginMessagePanelFailureButtonLabel':"Fermer",
47 'connectionLoginSendingCredentialsMessageTitle':"Vérification des identifiants", 45 'connectionLoginSendingCredentialsMessageTitle':"Vérification des identifiants",
48 'connectionLoginSendingCredentialsMessageText':"Envoi des identifiants", 46 'connectionLoginSendingCredentialsMessageText':"Envoi des identifiants",
49 'connectionLoginCredentialsVerificationMessageTitle':"Vérification des identifiants", 47 'connectionLoginCredentialsVerificationMessageTitle':"Vérification des identifiants",
50 'connectionLoginCredentialsVerificationMessageText':"Authentification SRP en cours", 48 'connectionLoginCredentialsVerificationMessageText':"Authentification SRP en cours",
51 'connectionLoginDoneMessageTitle':"Vérification des identifiants", 49 'connectionLoginDoneMessageTitle':"Vérification des identifiants",
52 'connectionLoginDoneMessageText':"Connecté", 50 'connectionLoginDoneMessageText':"Connecté",
53 'userLoginPanelUpgradingUserCredentialsMessageTitle':"Vérification des identifiants", 51 'userLoginPanelUpgradingUserCredentialsMessageTitle':"Vérification des identifiants",
54 'userLoginPanelUpgradingUserCredentialsMessageText':"Mise à jour de vos identifiants à un nouveau schéma d’authentification", 52 'userLoginPanelUpgradingUserCredentialsMessageText':"Mise à jour de vos identifiants à un nouveau schéma d’authentification",
55 'userLoginPanelConnectedMessageTitle':"Utilisateur identifié", 53 'userLoginPanelConnectedMessageTitle':"Utilisateur identifié",
56 'userLoginPanelConnectedMessageText':"Vous vous êtes identifié avec succès", 54 'userLoginPanelConnectedMessageText':"Vous vous êtes identifié avec succès",
57 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"Vérification des identifiants", 55 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"Vérification des identifiants",
58 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"Nous essayons un ancien schéma d’authentification", 56 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"Nous essayons un ancien schéma d’authentification",
59 'userLoginPanelLoadingUserDataMessageTitle':"Utilisateur identifié", 57 'userLoginPanelLoadingUserDataMessageTitle':"Utilisateur identifié",
60 'userLoginPanelLoadingUserDataMessageText':"Téléchargement des cartes d’en-têtes chiffrés depuis Clipperz", 58 'userLoginPanelLoadingUserDataMessageText':"Téléchargement des cartes d’en-têtes chiffrés depuis Clipperz",
61 'userLoginPanelDecryptingUserDataMessageTitle':"Utilisateur identifié", 59 'userLoginPanelDecryptingUserDataMessageTitle':"Utilisateur identifié",
62 'userLoginPanelDecryptingUserDataMessageText':"Décryptage local des en-têtes chiffrés", 60 'userLoginPanelDecryptingUserDataMessageText':"Décryptage local des en-têtes chiffrés",
63 'userLoginPanelDecryptingUserStatisticsMessageTitle':"Utilisateur identifié", 61 'userLoginPanelDecryptingUserStatisticsMessageTitle':"Utilisateur identifié",
64 'userLoginPanelDecryptingUserStatisticsMessageText':"Décryptage local des statistiques", 62 'userLoginPanelDecryptingUserStatisticsMessageText':"Décryptage local des statistiques",
65 'splashAlertTitle':"Bienvenue sur Clipperz!", 63 'splashAlertTitle':"Bienvenue sur Clipperz!",
66 'splashAlertText':"<p>Conseils de sécurité</p> <ul> <li> <p>Le stockage de vos mots de passe sur Clipperz est aussi sécurisé que la phrase que vous avez sélectionnée pour les protéger. Personne ne peux y accéder tant que personne ne connait votre phrase secrète.</p> </li> <li> <p>Si vous allez utiliser Clipperz pour sauvegarder des informations sensibles et critiques assurez-vous d’utiliser une phrase secrète compliquée. Plus elle sera longue mieux ce sera!</p> </li> <li> <p>Clipperz ne sera pas capable de récupérer votre phrase secrète!</p> </li> </ul> <p>Pour toute autre information, veuillez vous référer au site <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a>.</p> ", 64 'splashAlertText':"<p>Conseils de sécurité</p> <ul> <li> <p>Le stockage de vos mots de passe sur Clipperz est aussi sécurisé que la phrase que vous avez sélectionnée pour les protéger. Personne ne peux y accéder tant que personne ne connait votre phrase secrète.</p> </li> <li> <p>Si vous allez utiliser Clipperz pour sauvegarder des informations sensibles et critiques assurez-vous d’utiliser une phrase secrète compliquée. Plus elle sera longue mieux ce sera!</p> </li> <li> <p>Clipperz ne sera pas capable de récupérer votre phrase secrète!</p> </li> </ul> <p>Pour toute autre information, veuillez vous référer au site <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a>.</p> ",
67 'splashAlertCloseButtonLabel':"Ok", 65 'splashAlertCloseButtonLabel':"Ok",
68 'registrationFormTitle':"créer votre compte", 66 'registrationFormTitle':"créer votre compte",
69 'registrationFormUsernameLabel':"nom d’utilisateur", 67 'registrationFormUsernameLabel':"nom d’utilisateur",
70 'registrationFormPassphraseLabel':"phrase secrète", 68 'registrationFormPassphraseLabel':"phrase secrète",
71 'registrationFormRetypePassphraseLabel':"re-saisissez votre phrase secrète", 69 'registrationFormRetypePassphraseLabel':"re-saisissez votre phrase secrète",
72 'registrationFormSafetyCheckLabel':"J’accepte que Clipperz ne pourra pas récupérer ma phrase secrète.", 70 'registrationFormSafetyCheckLabel':"J’accepte que Clipperz ne pourra pas récupérer ma phrase secrète.",
73 'registrationFormTermsOfServiceCheckLabel':"J’ai lu et j’accepte les <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Conditions d’Utilisation du Service</a>.", 71 'registrationFormTermsOfServiceCheckLabel':"J’ai lu et j’accepte les <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Conditions d’Utilisation du Service</a>.",
74 'registrationFormDoYouAlreadyHaveAnAccountLabel':"avez-vous déjà un compte?", 72 'registrationFormDoYouAlreadyHaveAnAccountLabel':"avez-vous déjà un compte?",
75 'registrationFormSimplyLoginLabel':"identifiez-vous", 73 'registrationFormSimplyLoginLabel':"identifiez-vous",
76 'registrationFormButtonLabel':"S’inscrire", 74 'registrationFormButtonLabel':"S’inscrire",
77 'registrationFormWarningMessageNotMatchingPassphrases':"Vos phrases secrètes ne correspondent pas, veuillez les saisir à nouveau.", 75 'registrationFormWarningMessageNotMatchingPassphrases':"Vos phrases secrètes ne correspondent pas, veuillez les saisir à nouveau.",
78 'registrationFormWarningMessageSafetyCheckNotSelected':"Veuillez lire et cocher les cases-à-cocher ci-dessous.", 76 'registrationFormWarningMessageSafetyCheckNotSelected':"Veuillez lire et cocher les cases-à-cocher ci-dessous.",
79 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"Vous devez accepter les “Conditions d’Utilisation du Service”.", 77 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"Vous devez accepter les “Conditions d’Utilisation du Service”.",
80 'registrationMessagePanelInitialTitle':"Création du compte en cours ...", 78 'registrationMessagePanelInitialTitle':"Création du compte en cours ...",
81 'registrationMessagePanelInitialButtonLabel':"Annuler", 79 'registrationMessagePanelInitialButtonLabel':"Annuler",
82 'registrationMessagePanelRegistrationDoneTitle':"Enregistrement", 80 'registrationMessagePanelRegistrationDoneTitle':"Enregistrement",
83 'registrationMessagePanelRegistrationDoneText':"Terminé", 81 'registrationMessagePanelRegistrationDoneText':"Terminé",
84 'registrationMessagePanelFailureTitle':"Enregistrement échoué", 82 'registrationMessagePanelFailureTitle':"Enregistrement échoué",
85 'registrationMessagePanelFailureButtonLabel':"Fermer", 83 'registrationMessagePanelFailureButtonLabel':"Fermer",
86 'connectionRegistrationSendingRequestMessageText':"Vérification en cours des identifiants", 84 'connectionRegistrationSendingRequestMessageText':"Vérification en cours des identifiants",
87 'connectionRegistrationSendingCredentialsMessageText':"Envoi des identifiants", 85 'connectionRegistrationSendingCredentialsMessageText':"Envoi des identifiants",
88 'registrationSplashPanelTitle':"Conseils de sécurité", 86 'registrationSplashPanelTitle':"Conseils de sécurité",
89 'registrationSplashPanelDescription':"<p>Ce sont vos identifiants Clipperz, gardez les biens. Clipperz ne va plus jamais vous montrer votre nom d’utilisateur et votre phrase secrète!</p> ", 87 'registrationSplashPanelDescription':"<p>Ce sont vos identifiants Clipperz, gardez les biens. Clipperz ne va plus jamais vous montrer votre nom d’utilisateur et votre phrase secrète!</p> ",
90 'registrationSplashPanelUsernameLabel':"nom d’utilisateur", 88 'registrationSplashPanelUsernameLabel':"nom d’utilisateur",
91 'registrationSplashPanelPassphraseLabel':"phrase secrète", 89 'registrationSplashPanelPassphraseLabel':"phrase secrète",
92 'registrationSplashPanelShowPassphraseButtonLabel':"afficher la phrase secrète", 90 'registrationSplashPanelShowPassphraseButtonLabel':"afficher la phrase secrète",
93 'donateHeaderLinkLabel':"faites un don", 91 'donateHeaderLinkLabel':"faites un don",
94 'creditsHeaderLinkLabel':"crédits", 92 'creditsHeaderLinkLabel':"crédits",
95 'feedbackHeaderLinkLabel':"votre avis", 93 'feedbackHeaderLinkLabel':"votre avis",
96 'helpHeaderLinkLabel':"aide", 94 'helpHeaderLinkLabel':"aide",
97 'forumHeaderLinkLabel':"forum", 95 'forumHeaderLinkLabel':"forum",
98 'recordMenuLabel':"cartes", 96 'recordMenuLabel':"cartes",
99 'accountMenuLabel':"compte", 97 'accountMenuLabel':"compte",
100 'dataMenuLabel':"données", 98 'dataMenuLabel':"données",
101 'contactsMenuLabel':"contacts", 99 'contactsMenuLabel':"contacts",
102 'toolsMenuLabel':"outils", 100 'toolsMenuLabel':"outils",
103 'logoutMenuLabel':"déconnexion", 101 'logoutMenuLabel':"déconnexion",
104 'lockMenuLabel':"verrouiller", 102 'lockMenuLabel':"verrouiller",
105 'lockTitle':"Le compte est verrouillé", 103 'lockTitle':"Le compte est verrouillé",
106 'lockDescription':"<p>Pour déverrouiller votre compte, veuillez saisir votre phrase secrète</p> ", 104 'lockDescription':"<p>Pour déverrouiller votre compte, veuillez saisir votre phrase secrète</p> ",
107 'unlockButtonLabel':"Déverrouiller", 105 'unlockButtonLabel':"Déverrouiller",
108 'changePasswordTabLabel':"Changer votre phrase secrète", 106 'changePasswordTabLabel':"Changer votre phrase secrète",
109 'changePasswordTabTitle':"Changer votre phrase secrète", 107 'changePasswordTabTitle':"Changer votre phrase secrète",
110 'changePasswordFormUsernameLabel':"nom d’utilisateur", 108 'changePasswordFormUsernameLabel':"nom d’utilisateur",
111 'changePasswordFormOldPassphraseLabel':"ancienne phrase secrète", 109 'changePasswordFormOldPassphraseLabel':"ancienne phrase secrète",
112 'changePasswordFormNewPassphraseLabel':"nouvelle phrase secrète", 110 'changePasswordFormNewPassphraseLabel':"nouvelle phrase secrète",
113 'changePasswordFormRetypePassphraseLabel':"re-saisissez phrase secrète", 111 'changePasswordFormRetypePassphraseLabel':"re-saisissez phrase secrète",
114 'changePasswordFormSafetyCheckboxLabel':"Je sais que Clipperz ne pourra pas récupérer ma phrase secrète.", 112 'changePasswordFormSafetyCheckboxLabel':"Je sais que Clipperz ne pourra pas récupérer ma phrase secrète.",
115 'changePasswordFormSubmitLabel':"Changer ma phrase secrète", 113 'changePasswordFormSubmitLabel':"Changer ma phrase secrète",
116 'changePasswordFormWrongUsernameWarning':"Nom d’utilisateur incorrect", 114 'changePasswordFormWrongUsernameWarning':"Nom d’utilisateur incorrect",
117 'changePasswordFormWrongPassphraseWarning':"Phrase secrète incorrect", 115 'changePasswordFormWrongPassphraseWarning':"Phrase secrète incorrect",
118 'changePasswordFormWrongRetypePassphraseWarning':"Votre phrase secrète ne correspond pas, veuillez la saisir à nouveau", 116 'changePasswordFormWrongRetypePassphraseWarning':"Votre phrase secrète ne correspond pas, veuillez la saisir à nouveau",
119 'changePasswordFormSafetyCheckWarning':"Veuillez lire et cocher la case-à-cocher ci-dessous", 117 'changePasswordFormSafetyCheckWarning':"Veuillez lire et cocher la case-à-cocher ci-dessous",
120 'changePasswordFormProgressDialogTitle':"Changement des identifiants utilisateurs", 118 'changePasswordFormProgressDialogTitle':"Changement des identifiants utilisateurs",
121 'changePasswordFormProgressDialogConnectedMessageTitle':"Connecté", 119 'changePasswordFormProgressDialogConnectedMessageTitle':"Connecté",
122 'changePasswordFormProgressDialogConnectedMessageText':"Terminé", 120 'changePasswordFormProgressDialogConnectedMessageText':"Terminé",
123 'changePasswordFormProgressDialogErrorMessageTitle':"Erreur", 121 'changePasswordFormProgressDialogErrorMessageTitle':"Erreur",
124 'changePasswordFormProgressDialogErrorMessageText':"Changement de identifiants échoué!", 122 'changePasswordFormProgressDialogErrorMessageText':"Changement de identifiants échoué!",
125 'changeCredentialsPanelEncryptingDataMessageTitle':"Changement de votre phrase secrète", 123 'changeCredentialsPanelEncryptingDataMessageTitle':"Changement de votre phrase secrète",
126 'changeCredentialsPanelEncryptingDataMessageText':"Cryptage local des identifiants", 124 'changeCredentialsPanelEncryptingDataMessageText':"Cryptage local des identifiants",
127 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"Modifier votre phrase secrète", 125 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"Modifier votre phrase secrète",
128 'changeCredentialsPanelCreatingNewCredentialsMessageText':"Mettre à jour vos identifiants", 126 'changeCredentialsPanelCreatingNewCredentialsMessageText':"Mettre à jour vos identifiants",
129 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Modifier votre phrase secrète", 127 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Modifier votre phrase secrète",
130 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Téléchargement de vos identifiants sur Clipperz.com", 128 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Téléchargement de vos identifiants sur Clipperz.com",
131 'changeCredentialsPanelDoneMessageTitle':"Modifier votre phrase secrète", 129 'changeCredentialsPanelDoneMessageTitle':"Modifier votre phrase secrète",
132 'changeCredentialsPanelDoneMessageText':"Terminé", 130 'changeCredentialsPanelDoneMessageText':"Terminé",
133 'manageOTPTabLabel':"Mettre à jour votre phrase secrète à usage unique", 131 'manageOTPTabLabel':"Mettre à jour votre phrase secrète à usage unique",
134 'manageOTPTabTitle':"Mettre à jour votre phrase secrète à usage unique", 132 'manageOTPTabTitle':"Mettre à jour votre phrase secrète à usage unique",
135 'manageOTPTabDescription':"<p>Une phrase secrète à usage unique fonctionne comme votre phrase secrète habituelle, mais elle ne peut être utilisé qu'une seule fois.</p> <p>Si la phrase secrète est utilisé de nouveau et que vous tenté de vous identifier à nouveau, vous serez rejeté et le processus d'identification échouera.</p> <p>Juste après une identification correcte, votre phrase secrète à usage unique sera effacée pour interdire tout accès frauduleux.</p> <p>Les phrases secrètes à usage unique sont un excellent choix si vous craignez qu'un logiciel espion ne vole vos données après avoir infecté votre machine.</p> <p> <b>Il est fortement recommandé d'utiliser des phrases secrètes à usage unique lorsque vous accédez à Clipperz depuis un terminal public, comme un cybercafé ou une borne Internet.</b> </p> ", 133 'manageOTPTabDescription':"<p>Une phrase secrète à usage unique fonctionne comme votre phrase secrète habituelle, mais elle ne peut être utilisé qu'une seule fois.</p> <p>Si la phrase secrète est utilisé de nouveau et que vous tenté de vous identifier à nouveau, vous serez rejeté et le processus d'identification échouera.</p> <p>Juste après une identification correcte, votre phrase secrète à usage unique sera effacée pour interdire tout accès frauduleux.</p> <p>Les phrases secrètes à usage unique sont un excellent choix si vous craignez qu'un logiciel espion ne vole vos données après avoir infecté votre machine.</p> <p> <b>Il est fortement recommandé d'utiliser des phrases secrètes à usage unique lorsque vous accédez à Clipperz depuis un terminal public, comme un cybercafé ou une borne Internet.</b> </p> ",
136 'accountPreferencesLabel':"Préférences", 134 'accountPreferencesLabel':"Préférences",
137 'accountPreferencesTabTitle':"Préférences", 135 'accountPreferencesTabTitle':"Préférences",
138 'accountPreferencesLanguageTitle':"Choix de la langue", 136 'accountPreferencesLanguageTitle':"Choix de la langue",
139 'accountPreferencesLanguageDescription':"<p>Choisissez la langue d'affichage de Clipperz dans la liste suivante.</p> ", 137 'accountPreferencesLanguageDescription':"<p>Choisissez la langue d'affichage de Clipperz dans la liste suivante.</p> ",
140 'accountPreferencesInterfaceTitle':"Personnalisation de l'interface", 138 'accountPreferencesInterfaceTitle':"Personnalisation de l'interface",
141 'accountPreferencesInterfaceDescription':"<p>Ajustez l'interface de Clipperz à vos besoins.</p> ", 139 'accountPreferencesInterfaceDescription':"<p>Ajustez l'interface de Clipperz à vos besoins.</p> ",
142 'saveUserPreferencesFormSubmitLabel':"Enregistrer", 140 'saveUserPreferencesFormSubmitLabel':"Enregistrer",
143 'cancelUserPreferencesFormSubmitLabel':"Annuler", 141 'cancelUserPreferencesFormSubmitLabel':"Annuler",
144 'accountPreferencesSavingPanelTitle_Step1':"Enregistrement des préférences", 142 'accountPreferencesSavingPanelTitle_Step1':"Enregistrement des préférences",
145 'accountPreferencesSavingPanelText_Step1':"Chiffrement local de vos préférences", 143 'accountPreferencesSavingPanelText_Step1':"Chiffrement local de vos préférences",
146 'accountPreferencesSavingPanelTitle_Step2':"Enregistrement des préférences", 144 'accountPreferencesSavingPanelTitle_Step2':"Enregistrement des préférences",
147 'accountPreferencesSavingPanelText_Step2':"Transmission des préférences chiffrées au serveur", 145 'accountPreferencesSavingPanelText_Step2':"Transmission des préférences chiffrées au serveur",
148 'deleteAccountTabLabel':"Supprimer votre compte", 146 'deleteAccountTabLabel':"Supprimer votre compte",
149 'deleteAccountTabTitle':"Supprimer votre compte", 147 'deleteAccountTabTitle':"Supprimer votre compte",
150 'deleteAccountFormUsernameLabel':"nom d’utilisateur", 148 'deleteAccountFormUsernameLabel':"nom d’utilisateur",
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_he-IL.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_he-IL.js
index 70a59c8..fa94311 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_he-IL.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_he-IL.js
@@ -1,37 +1,35 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26//============================================================================= 24//=============================================================================
27// 25//
28 // H E B R E W (he_IL) 26 // H E B R E W (he_IL)
29// 27//
30//============================================================================= 28//=============================================================================
31 29
32Clipperz.PM.Strings.Languages['he-il'] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], { 30Clipperz.PM.Strings.Languages['he-il'] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
33 31
34 //------------------------------------------------------------------------- 32 //-------------------------------------------------------------------------
35 __syntaxFix__: "syntax fix" 33 __syntaxFix__: "syntax fix"
36}); 34});
37 35
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_it-IT.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_it-IT.js
index acf6acd..0499376 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_it-IT.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_it-IT.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26Clipperz.PM.Strings.Languages['it-IT'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], { 24Clipperz.PM.Strings.Languages['it-IT'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
27 'clipperzServiceDescription':"<h2>Tienilo per te!</h2> <ul> <li> <h3>Clipperz è:</h3> <ul> <li> <p>un archivio semplice e sicuro per le tue password</p> </li> <li> <p>un canale di accesso unificato a tutti i tuoi servizi online</p> </li> <li> <p>una cassaforte digitale per tutti i tuoi dati riservati</p> </li> </ul> </li> <li> <h3>Con Clipperz puoi:</h3> <ul> <li> <p>memorizzare e gestire le password e le credenziali di accesso dei tuoi servizi online</p> </li> <li> <p>accedere ai tuoi servizi online con un solo click senza bisogno di inserire username o password</p> </li> <li> <p>proteggere tutte le tue informazioni confidenziali: codice dell&#x27;allarme di casa, dati delle carte di credito, …</p> </li> <li> <p>condividere dati riservati con i tuoi familiari o colleghi (disponibile a breve)</p> </li> </ul> </li> <li> <h3>I vantaggi di Clipperz:</h3> <ul> <li> <p>gratuito e completamente anonimo</p> </li> <li> <p>accessibile da qualsiasi computer</p> </li> <li> <p>nessun software da scaricare e niente da installare</p> </li> <li> <p>mai più informazioni riservate sul tuo PC o sulla carta!</p> </li> </ul> </li> <li> <h3>La sicurezza di Clipperz:</h3> <ul> <li> <p>i dati sono criptati dal tuo browser prima di essere inviati a Clipperz</p> </li> <li> <p>la chiave per decriptare i dati è conosciuta soltanto da te</p> </li> <li> <p>Clipperz riceve e memorizza solo i tuoi dati criptati e non ha nessuna possibilità di accedere alla versione in chiaro</p> </li> <li> <p>Clipperz utilizza solo sistemi crittografici standard, senza nessuna velleità di inventare e proporre nuovi algoritmi non validati dalla comunità scientifica</p> </li> <li> <p>tutto il codice di Clipperz è disponibile e può essere analizzato in qualsiasi momento, ma non serve essere un esperto di crittografia per apprezzare la sicurezza e la comodità di Clipperz!</p> </li> </ul> </li> <li><a href=\"http://www.clipperz.com\" target=\"_blank\">Maggiori informazioni su Clipperz (in inglese)</a> </li> </ul> ", 25 'clipperzServiceDescription':"<h2>Tienilo per te!</h2> <ul> <li> <h3>Clipperz è:</h3> <ul> <li> <p>un archivio semplice e sicuro per le tue password</p> </li> <li> <p>un canale di accesso unificato a tutti i tuoi servizi online</p> </li> <li> <p>una cassaforte digitale per tutti i tuoi dati riservati</p> </li> </ul> </li> <li> <h3>Con Clipperz puoi:</h3> <ul> <li> <p>memorizzare e gestire le password e le credenziali di accesso dei tuoi servizi online</p> </li> <li> <p>accedere ai tuoi servizi online con un solo click senza bisogno di inserire username o password</p> </li> <li> <p>proteggere tutte le tue informazioni confidenziali: codice dell&#x27;allarme di casa, dati delle carte di credito, …</p> </li> <li> <p>condividere dati riservati con i tuoi familiari o colleghi (disponibile a breve)</p> </li> </ul> </li> <li> <h3>I vantaggi di Clipperz:</h3> <ul> <li> <p>gratuito e completamente anonimo</p> </li> <li> <p>accessibile da qualsiasi computer</p> </li> <li> <p>nessun software da scaricare e niente da installare</p> </li> <li> <p>mai più informazioni riservate sul tuo PC o sulla carta!</p> </li> </ul> </li> <li> <h3>La sicurezza di Clipperz:</h3> <ul> <li> <p>i dati sono criptati dal tuo browser prima di essere inviati a Clipperz</p> </li> <li> <p>la chiave per decriptare i dati è conosciuta soltanto da te</p> </li> <li> <p>Clipperz riceve e memorizza solo i tuoi dati criptati e non ha nessuna possibilità di accedere alla versione in chiaro</p> </li> <li> <p>Clipperz utilizza solo sistemi crittografici standard, senza nessuna velleità di inventare e proporre nuovi algoritmi non validati dalla comunità scientifica</p> </li> <li> <p>tutto il codice di Clipperz è disponibile e può essere analizzato in qualsiasi momento, ma non serve essere un esperto di crittografia per apprezzare la sicurezza e la comodità di Clipperz!</p> </li> </ul> </li> <li><a href=\"http://www.clipperz.com\" target=\"_blank\">Maggiori informazioni su Clipperz (in inglese)</a> </li> </ul> ",
28 'loginFormTitle':"accedi a Clipperz", 26 'loginFormTitle':"accedi a Clipperz",
29 'loginFormUsernameLabel':"Utente", 27 'loginFormUsernameLabel':"Utente",
30 'loginFormPassphraseLabel':"frase segreta", 28 'loginFormPassphraseLabel':"frase segreta",
31 'loginFormDontHaveAnAccountLabel':"non ti sei ancora registrato?", 29 'loginFormDontHaveAnAccountLabel':"non ti sei ancora registrato?",
32 'loginFormCreateOneLabel':"registrati adesso", 30 'loginFormCreateOneLabel':"registrati adesso",
33 'loginFormForgotYourCredentialsLabel':"hai perso i dati di accesso?", 31 'loginFormForgotYourCredentialsLabel':"hai perso i dati di accesso?",
34 'loginFormAarghThatsBadLabel':"aargh! questo non è bello!", 32 'loginFormAarghThatsBadLabel':"aargh! questo non è bello!",
35 'loginFormAfraidOfMaliciousScriptsLabel':"non ti fidi?", 33 'loginFormAfraidOfMaliciousScriptsLabel':"non ti fidi?",
36 'loginFormVerifyTheCodeLabel':"controlla il codice", 34 'loginFormVerifyTheCodeLabel':"controlla il codice",
37 'loginFormButtonLabel':"Accedi", 35 'loginFormButtonLabel':"Accedi",
38 'loginFormOneTimePasswordCheckboxLabel':"usa un codice “usa e getta”", 36 'loginFormOneTimePasswordCheckboxLabel':"usa un codice “usa e getta”",
39 'loginFormOneTimePasswordCheckboxDescription':"", 37 'loginFormOneTimePasswordCheckboxDescription':"",
40 'loginPanelSwithLanguageDescription':"<h5>Seleziona la tua lingua preferita</h5> ", 38 'loginPanelSwithLanguageDescription':"<h5>Seleziona la tua lingua preferita</h5> ",
41 'browserCompatibilityDescription':"<p>Clipperz consiglia Firefox per una maggiore sicurezza. Clipperz supporta anche Opera ed Internet Explorer.</p> ", 39 'browserCompatibilityDescription':"<p>Clipperz consiglia Firefox per una maggiore sicurezza. Clipperz supporta anche Opera ed Internet Explorer.</p> ",
42 'OTPloginMessagePanelInitialTitle':"Accesso con codice “usa e getta”", 40 'OTPloginMessagePanelInitialTitle':"Accesso con codice “usa e getta”",
43 'OTPloginMessagePanelInitialText':"Invio delle credenziali OTP ...", 41 'OTPloginMessagePanelInitialText':"Invio delle credenziali OTP ...",
44 'OTPloginMessagePanelLoadingTitle':"Accesso con codice “usa e getta”", 42 'OTPloginMessagePanelLoadingTitle':"Accesso con codice “usa e getta”",
45 'OTPloginMessagePanelLoadingText':"Caricamento dei dati di autenticazione criptati ...", 43 'OTPloginMessagePanelLoadingText':"Caricamento dei dati di autenticazione criptati ...",
46 'OTPloginMessagePanelProcessingTitle':"Accesso con codice “usa e getta”", 44 'OTPloginMessagePanelProcessingTitle':"Accesso con codice “usa e getta”",
47 'OTPloginMessagePanelProcessingText':"Decodifica locale dei dati di autenticazione ...", 45 'OTPloginMessagePanelProcessingText':"Decodifica locale dei dati di autenticazione ...",
48 'loginMessagePanelInitialTitle':"Connessione in corso ...", 46 'loginMessagePanelInitialTitle':"Connessione in corso ...",
49 'loginMessagePanelInitialText':"---", 47 'loginMessagePanelInitialText':"---",
50 'loginMessagePanelInitialButtonLabel':"Annulla", 48 'loginMessagePanelInitialButtonLabel':"Annulla",
51 'loginMessagePanelConnectedTitle':"Connesso", 49 'loginMessagePanelConnectedTitle':"Connesso",
52 'loginMessagePanelConnectedText':"Fatto", 50 'loginMessagePanelConnectedText':"Fatto",
53 'loginMessagePanelFailureTitle':"Errore", 51 'loginMessagePanelFailureTitle':"Errore",
54 'loginMessagePanelFailureText':"Connessione fallita", 52 'loginMessagePanelFailureText':"Connessione fallita",
55 'loginMessagePanelFailureButtonLabel':"Chiudi", 53 'loginMessagePanelFailureButtonLabel':"Chiudi",
56 'connectionLoginSendingCredentialsMessageTitle':"Verifica delle credenziali", 54 'connectionLoginSendingCredentialsMessageTitle':"Verifica delle credenziali",
57 'connectionLoginSendingCredentialsMessageText':"Invio delle credenziali", 55 'connectionLoginSendingCredentialsMessageText':"Invio delle credenziali",
58 'connectionLoginCredentialsVerificationMessageTitle':"Verifica delle credenziali", 56 'connectionLoginCredentialsVerificationMessageTitle':"Verifica delle credenziali",
59 'connectionLoginCredentialsVerificationMessageText':"Esecuzione dell&#x27;autenticazione SRP ...", 57 'connectionLoginCredentialsVerificationMessageText':"Esecuzione dell&#x27;autenticazione SRP ...",
60 'connectionLoginDoneMessageTitle':"Verifica delle credenziali", 58 'connectionLoginDoneMessageTitle':"Verifica delle credenziali",
61 'connectionLoginDoneMessageText':"Connesso", 59 'connectionLoginDoneMessageText':"Connesso",
62 'userLoginPanelUpgradingUserCredentialsMessageTitle':"Verifica delle credenziali", 60 'userLoginPanelUpgradingUserCredentialsMessageTitle':"Verifica delle credenziali",
63 'userLoginPanelUpgradingUserCredentialsMessageText':"Aggiornamento delle credenziali ad un nuovo schema di autenticazione", 61 'userLoginPanelUpgradingUserCredentialsMessageText':"Aggiornamento delle credenziali ad un nuovo schema di autenticazione",
64 'userLoginPanelConnectedMessageTitle':"Utente autenticato", 62 'userLoginPanelConnectedMessageTitle':"Utente autenticato",
65 'userLoginPanelConnectedMessageText':"Autenticazione eseguita con successo", 63 'userLoginPanelConnectedMessageText':"Autenticazione eseguita con successo",
66 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"Verifica delle credenziali", 64 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"Verifica delle credenziali",
67 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"Tentativo con vecchio schema di autenticazione", 65 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"Tentativo con vecchio schema di autenticazione",
68 'userLoginPanelLoadingUserDataMessageTitle':"Utente autenticato", 66 'userLoginPanelLoadingUserDataMessageTitle':"Utente autenticato",
69 'userLoginPanelLoadingUserDataMessageText':"Scarica le intestazioni criptate delle schede da Clipperz", 67 'userLoginPanelLoadingUserDataMessageText':"Scarica le intestazioni criptate delle schede da Clipperz",
70 'userLoginPanelDecryptingUserDataMessageTitle':"Utente autenticato", 68 'userLoginPanelDecryptingUserDataMessageTitle':"Utente autenticato",
71 'userLoginPanelDecryptingUserDataMessageText':"Decodifica locale dell&#x27;intestazione delle schede", 69 'userLoginPanelDecryptingUserDataMessageText':"Decodifica locale dell&#x27;intestazione delle schede",
72 'userLoginPanelDecryptingUserStatisticsMessageTitle':"Utente autenticato", 70 'userLoginPanelDecryptingUserStatisticsMessageTitle':"Utente autenticato",
73 'userLoginPanelDecryptingUserStatisticsMessageText':"Decodifica locale delle statistiche d&#x27;uso", 71 'userLoginPanelDecryptingUserStatisticsMessageText':"Decodifica locale delle statistiche d&#x27;uso",
74 'splashAlertTitle':"Benvenuto a Clipperz!", 72 'splashAlertTitle':"Benvenuto a Clipperz!",
75 'splashAlertText':"<p>Alcuni consigli per la sicurezza</p> <ul> <li> <p>La sicurezza dei tuoi dati dipende da quanto è sicura la frase segreta che usi per proteggerli. Nessuno può accedervi a meno che non conosca la frase segreta.</p> </li> <li> <p>Se hai intenzione di usare Clipperz per conservare informazioni sensibili e riservate, scegli attentamente una frase segreta complessa. Più è lunga, maggiore è la sicurezza!</p> </li> <li> <p>E non dimenticare che Clipperz non è in grado di recuperare la tua frase segreta in caso di smarrimento!</p> </li> </ul> <p>Per maggiori informazioni sulla sicurezza, consulta il sito <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a> (in lingua inglese).</p> ", 73 'splashAlertText':"<p>Alcuni consigli per la sicurezza</p> <ul> <li> <p>La sicurezza dei tuoi dati dipende da quanto è sicura la frase segreta che usi per proteggerli. Nessuno può accedervi a meno che non conosca la frase segreta.</p> </li> <li> <p>Se hai intenzione di usare Clipperz per conservare informazioni sensibili e riservate, scegli attentamente una frase segreta complessa. Più è lunga, maggiore è la sicurezza!</p> </li> <li> <p>E non dimenticare che Clipperz non è in grado di recuperare la tua frase segreta in caso di smarrimento!</p> </li> </ul> <p>Per maggiori informazioni sulla sicurezza, consulta il sito <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a> (in lingua inglese).</p> ",
76 'splashAlertCloseButtonLabel':"Ok", 74 'splashAlertCloseButtonLabel':"Ok",
77 'registrationFormTitle':"crea il tuo utente", 75 'registrationFormTitle':"crea il tuo utente",
78 'registrationFormUsernameLabel':"Utente", 76 'registrationFormUsernameLabel':"Utente",
79 'registrationFormPassphraseLabel':"frase segreta", 77 'registrationFormPassphraseLabel':"frase segreta",
80 'registrationFormRetypePassphraseLabel':"ripeti frase segreta", 78 'registrationFormRetypePassphraseLabel':"ripeti frase segreta",
81 'registrationFormSafetyCheckLabel':"Sono consapevole che Clipperz non è in grado di recuperare una frase segreta dimenticata.", 79 'registrationFormSafetyCheckLabel':"Sono consapevole che Clipperz non è in grado di recuperare una frase segreta dimenticata.",
82 'registrationFormTermsOfServiceCheckLabel':"Dichiaro di aver letto e di accettare i <a href=\"http://www.clipperz.com/terms_of_service\" target=\"_blank\">Termini del Servizio</a> .", 80 'registrationFormTermsOfServiceCheckLabel':"Dichiaro di aver letto e di accettare i <a href=\"http://www.clipperz.com/terms_of_service\" target=\"_blank\">Termini del Servizio</a> .",
83 'registrationFormDoYouAlreadyHaveAnAccountLabel':"sei già un utente registrato?", 81 'registrationFormDoYouAlreadyHaveAnAccountLabel':"sei già un utente registrato?",
84 'registrationFormSimplyLoginLabel':"accedi subito", 82 'registrationFormSimplyLoginLabel':"accedi subito",
85 'registrationFormButtonLabel':"Registrati", 83 'registrationFormButtonLabel':"Registrati",
86 'registrationFormWarningMessageNotMatchingPassphrases':"Le frasi segrete non corrispondono, ripeti l&#x27;inserimento.", 84 'registrationFormWarningMessageNotMatchingPassphrases':"Le frasi segrete non corrispondono, ripeti l&#x27;inserimento.",
87 'registrationFormWarningMessageSafetyCheckNotSelected':"Leggi e spunta le condizioni sotto riportate.", 85 'registrationFormWarningMessageSafetyCheckNotSelected':"Leggi e spunta le condizioni sotto riportate.",
88 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"Per procedere devi accettare i Termini del Servizio.", 86 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"Per procedere devi accettare i Termini del Servizio.",
89 'registrationMessagePanelInitialTitle':"Registrazione in corso ...", 87 'registrationMessagePanelInitialTitle':"Registrazione in corso ...",
90 'registrationMessagePanelInitialText':"---", 88 'registrationMessagePanelInitialText':"---",
91 'registrationMessagePanelInitialButtonLabel':"Annulla", 89 'registrationMessagePanelInitialButtonLabel':"Annulla",
92 'registrationMessagePanelRegistrationDoneTitle':"Registrazione", 90 'registrationMessagePanelRegistrationDoneTitle':"Registrazione",
93 'registrationMessagePanelRegistrationDoneText':"Fatto", 91 'registrationMessagePanelRegistrationDoneText':"Fatto",
94 'registrationMessagePanelFailureTitle':"Registrazione fallita", 92 'registrationMessagePanelFailureTitle':"Registrazione fallita",
95 'registrationMessagePanelFailureButtonLabel':"Chiudi", 93 'registrationMessagePanelFailureButtonLabel':"Chiudi",
96 'connectionRegistrationSendingRequestMessageText':"Verifica delle credenziali", 94 'connectionRegistrationSendingRequestMessageText':"Verifica delle credenziali",
97 'connectionRegistrationSendingCredentialsMessageText':"Invio delle credenziali", 95 'connectionRegistrationSendingCredentialsMessageText':"Invio delle credenziali",
98 'registrationSplashPanelTitle':"Avviso di sicurezza", 96 'registrationSplashPanelTitle':"Avviso di sicurezza",
99 'registrationSplashPanelDescription':"<p>Queste sono le tue credenziali di accesso a Clipperz, conservale con cura. Il tuo utente ed la tua frase segreta non ti verranno mostrati una seconda volta!</p> ", 97 'registrationSplashPanelDescription':"<p>Queste sono le tue credenziali di accesso a Clipperz, conservale con cura. Il tuo utente ed la tua frase segreta non ti verranno mostrati una seconda volta!</p> ",
100 'registrationSplashPanelUsernameLabel':"Utente", 98 'registrationSplashPanelUsernameLabel':"Utente",
101 'registrationSplashPanelPassphraseLabel':"frase segreta", 99 'registrationSplashPanelPassphraseLabel':"frase segreta",
102 'registrationSplashPanelShowPassphraseButtonLabel':"mostra la frase segreta", 100 'registrationSplashPanelShowPassphraseButtonLabel':"mostra la frase segreta",
103 'donateHeaderLinkLabel':"donazioni", 101 'donateHeaderLinkLabel':"donazioni",
104 'creditsHeaderLinkLabel':"credits", 102 'creditsHeaderLinkLabel':"credits",
105 'feedbackHeaderLinkLabel':"scrivici", 103 'feedbackHeaderLinkLabel':"scrivici",
106 'helpHeaderLinkLabel':"aiuto", 104 'helpHeaderLinkLabel':"aiuto",
107 'forumHeaderLinkLabel':"forum", 105 'forumHeaderLinkLabel':"forum",
108 'recordMenuLabel':"Schede", 106 'recordMenuLabel':"Schede",
109 'accountMenuLabel':"profilo", 107 'accountMenuLabel':"profilo",
110 'dataMenuLabel':"dati", 108 'dataMenuLabel':"dati",
111 'contactsMenuLabel':"Contatti", 109 'contactsMenuLabel':"Contatti",
112 'toolsMenuLabel':"strumenti", 110 'toolsMenuLabel':"strumenti",
113 'logoutMenuLabel':"esci", 111 'logoutMenuLabel':"esci",
114 'lockMenuLabel':"blocca", 112 'lockMenuLabel':"blocca",
115 'lockTitle':"Utente bloccato", 113 'lockTitle':"Utente bloccato",
116 'lockDescription':"<p>Per sbloccare il tuo utente inserisci la frase segreta</p> ", 114 'lockDescription':"<p>Per sbloccare il tuo utente inserisci la frase segreta</p> ",
117 'unlockButtonLabel':"Sblocca", 115 'unlockButtonLabel':"Sblocca",
118 'changePasswordTabLabel':"Cambia la tua frase segreta", 116 'changePasswordTabLabel':"Cambia la tua frase segreta",
119 'changePasswordTabTitle':"Cambia la tua frase segreta", 117 'changePasswordTabTitle':"Cambia la tua frase segreta",
120 'changePasswordFormUsernameLabel':"Utente", 118 'changePasswordFormUsernameLabel':"Utente",
121 'changePasswordFormOldPassphraseLabel':"attuale frase segreta", 119 'changePasswordFormOldPassphraseLabel':"attuale frase segreta",
122 'changePasswordFormNewPassphraseLabel':"nuova frase segreta", 120 'changePasswordFormNewPassphraseLabel':"nuova frase segreta",
123 'changePasswordFormRetypePassphraseLabel':"ripeti nuova frase segreta", 121 'changePasswordFormRetypePassphraseLabel':"ripeti nuova frase segreta",
124 'changePasswordFormSafetyCheckboxLabel':"Sono consapevole che Clipperz non è in grado di recuperare una frase segreta dimenticata.", 122 'changePasswordFormSafetyCheckboxLabel':"Sono consapevole che Clipperz non è in grado di recuperare una frase segreta dimenticata.",
125 'changePasswordFormSubmitLabel':"Cambia frase segreta", 123 'changePasswordFormSubmitLabel':"Cambia frase segreta",
126 'changePasswordFormWrongUsernameWarning':"Utente errato", 124 'changePasswordFormWrongUsernameWarning':"Utente errato",
127 'changePasswordFormWrongPassphraseWarning':"Frase segreta errata", 125 'changePasswordFormWrongPassphraseWarning':"Frase segreta errata",
128 'changePasswordFormWrongRetypePassphraseWarning':"Le frasi segrete non corrispondono, ripeti l&#x27;inserimento.", 126 'changePasswordFormWrongRetypePassphraseWarning':"Le frasi segrete non corrispondono, ripeti l&#x27;inserimento.",
129 'changePasswordFormSafetyCheckWarning':"Leggi e spunta le condizioni sotto riportate.", 127 'changePasswordFormSafetyCheckWarning':"Leggi e spunta le condizioni sotto riportate.",
130 'changePasswordFormProgressDialogTitle':"Aggiornamento credenziali", 128 'changePasswordFormProgressDialogTitle':"Aggiornamento credenziali",
131 'changePasswordFormProgressDialogEmptyText':"---", 129 'changePasswordFormProgressDialogEmptyText':"---",
132 'changePasswordFormProgressDialogConnectedMessageTitle':"Connesso", 130 'changePasswordFormProgressDialogConnectedMessageTitle':"Connesso",
133 'changePasswordFormProgressDialogConnectedMessageText':"Fatto", 131 'changePasswordFormProgressDialogConnectedMessageText':"Fatto",
134 'changePasswordFormProgressDialogErrorMessageTitle':"Errore", 132 'changePasswordFormProgressDialogErrorMessageTitle':"Errore",
135 'changePasswordFormProgressDialogErrorMessageText':"Aggiornamento credenziali fallito!", 133 'changePasswordFormProgressDialogErrorMessageText':"Aggiornamento credenziali fallito!",
136 'changeCredentialsPanelEncryptingDataMessageTitle':"Cambio della frase segreta", 134 'changeCredentialsPanelEncryptingDataMessageTitle':"Cambio della frase segreta",
137 'changeCredentialsPanelEncryptingDataMessageText':"Cripta localmente l&#x27;intestazione delle schede", 135 'changeCredentialsPanelEncryptingDataMessageText':"Cripta localmente l&#x27;intestazione delle schede",
138 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"Cambio della frase segreta", 136 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"Cambio della frase segreta",
139 'changeCredentialsPanelCreatingNewCredentialsMessageText':"Aggiornamento delle credenziali", 137 'changeCredentialsPanelCreatingNewCredentialsMessageText':"Aggiornamento delle credenziali",
140 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Cambio della frase segreta", 138 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Cambio della frase segreta",
141 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Carica le intestazioni criptate delle schede su Clipperz", 139 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Carica le intestazioni criptate delle schede su Clipperz",
142 'changeCredentialsPanelDoneMessageTitle':"Cambio della frase segreta", 140 'changeCredentialsPanelDoneMessageTitle':"Cambio della frase segreta",
143 'changeCredentialsPanelDoneMessageText':"Fatto", 141 'changeCredentialsPanelDoneMessageText':"Fatto",
144 'manageOTPTabLabel':"Codici di accesso “usa e getta”", 142 'manageOTPTabLabel':"Codici di accesso “usa e getta”",
145 'manageOTPTabTitle':"Codici di accesso “usa e getta”", 143 'manageOTPTabTitle':"Codici di accesso “usa e getta”",
146 'manageOTPTabDescription':"<p>I codici di accesso e “usa e getta” funzionano come la tua normale frase segreta, ma possono essere utilizzate una sola volta.</p> <p>Se lo stesso codice “usa e getta” viene utilizzato per tentare ulteriori accessi il processo di autenticazione fallirà.</p> <p>Infatti, dopo il primo utilizzo, il codice “usa e getta” verrà immediatamente disattivato e cancellato prevenendo così eventuali accessi non autorizzati.</p> <p>L&#x27;utilizzo di codici “usa e getta” è una scelta consigliata per chi teme che il computer dal quale sta accedendo a Clipperz non sia sicuro a causa di software quali keyloggers e spyware che potrebbero registrare le proprie credenziali di accesso.</p> <p><b>E&#x27; caldamente consigliato l&#x27;utilizzo di codici “usa e getta” quando ci si collega a Clipperz da terminali pubblici quali Internet Cafe e biblioteche.</b> </p> ", 144 'manageOTPTabDescription':"<p>I codici di accesso e “usa e getta” funzionano come la tua normale frase segreta, ma possono essere utilizzate una sola volta.</p> <p>Se lo stesso codice “usa e getta” viene utilizzato per tentare ulteriori accessi il processo di autenticazione fallirà.</p> <p>Infatti, dopo il primo utilizzo, il codice “usa e getta” verrà immediatamente disattivato e cancellato prevenendo così eventuali accessi non autorizzati.</p> <p>L&#x27;utilizzo di codici “usa e getta” è una scelta consigliata per chi teme che il computer dal quale sta accedendo a Clipperz non sia sicuro a causa di software quali keyloggers e spyware che potrebbero registrare le proprie credenziali di accesso.</p> <p><b>E&#x27; caldamente consigliato l&#x27;utilizzo di codici “usa e getta” quando ci si collega a Clipperz da terminali pubblici quali Internet Cafe e biblioteche.</b> </p> ",
147 'oneTimePasswordReadOnlyMessage':"<h6>Attenzione!</h6> <p>Non è possibilie accedere ai propri codici “usa e getta” quando si utilizza la versione offline di Clipperz.</p> ", 145 'oneTimePasswordReadOnlyMessage':"<h6>Attenzione!</h6> <p>Non è possibilie accedere ai propri codici “usa e getta” quando si utilizza la versione offline di Clipperz.</p> ",
148 'oneTimePasswordLoadingMessage':"<h6>Caricamento dati</h6> <p>Si prega di attendere ...</p> ", 146 'oneTimePasswordLoadingMessage':"<h6>Caricamento dati</h6> <p>Si prega di attendere ...</p> ",
149 'oneTimePasswordNoPasswordAvailable':"<h6>Nessun codice “usa e getta” disponibile</h6> <p>Per creare codici “usa e getta” clicca sul pulsante “Nuovo” che trovi qui sopra.</p> ", 147 'oneTimePasswordNoPasswordAvailable':"<h6>Nessun codice “usa e getta” disponibile</h6> <p>Per creare codici “usa e getta” clicca sul pulsante “Nuovo” che trovi qui sopra.</p> ",
150 'deleteOTPButtonLabel':"Elimina", 148 'deleteOTPButtonLabel':"Elimina",
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_ja-JP.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_ja-JP.js
index 42993b3..1401acc 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_ja-JP.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_ja-JP.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26Clipperz.PM.Strings.Languages['ja-JP'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], { 24Clipperz.PM.Strings.Languages['ja-JP'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
27 'clipperzServiceDescription':"<h2>自分で管理しよう!</h2> <ul> <li> <h3>Clipperz は</h3> <ul> <li> <p>安全でシンプルなパスワードマネージャです</p> </li> <li> <p>シングルサインオンを提供します</p> </li> <li> <p>機密情報のデジタル格納庫です</p> </li> </ul> </li> <li> <h3>Clipperz でできること</h3> <ul> <li> <p>パスワードを保管して管理できます</p> </li> <li> <p>ユーザー名やパスワードを入力せずに登録したウェブサービスにログインできます</p> </li> <li> <p>暗証番号やクレジットカード番号などあらゆる機密情報を守ります</p> </li> <li> <p>家族や信用できる相手と機密情報を共有できます(提供予定)</p> </li> </ul> </li> <li> <h3>Clipperz のよいところ</h3> <ul> <li> <p>無料で匿名利用できます</p> </li> <li> <p>いつでもどのコンピュータからでもアクセスできます</p> </li> <li> <p>ソフトウェアのダウンロードやインストールは不要です</p> </li> <li> <p>PC や紙に機密情報を残す必要がありません</p> </li> </ul> </li> <li> <h3>Clipperz のセキュリティ</h3> <ul> <li> <p>データはブラウザで暗号化されてから Clipprez に送信されます</p> </li> <li> <p>暗号化のキーはあなただけが知っているパスフレーズです</p> </li> <li> <p>保管したデータは暗号化されていて、保管中には決して中身を見ることができません</p> </li> <li> <p>標準が確立された暗号化手順を採用しています</p> </li> <li> <p>ソースコードはいつでも参照できますが、暗号化について何も知らなくても使えます</p> </li> </ul> </li> <li><a href=\"http://www.clipperz.com\" target=\"_blank\">もっと見る</a> </li> </ul> ", 25 'clipperzServiceDescription':"<h2>自分で管理しよう!</h2> <ul> <li> <h3>Clipperz は</h3> <ul> <li> <p>安全でシンプルなパスワードマネージャです</p> </li> <li> <p>シングルサインオンを提供します</p> </li> <li> <p>機密情報のデジタル格納庫です</p> </li> </ul> </li> <li> <h3>Clipperz でできること</h3> <ul> <li> <p>パスワードを保管して管理できます</p> </li> <li> <p>ユーザー名やパスワードを入力せずに登録したウェブサービスにログインできます</p> </li> <li> <p>暗証番号やクレジットカード番号などあらゆる機密情報を守ります</p> </li> <li> <p>家族や信用できる相手と機密情報を共有できます(提供予定)</p> </li> </ul> </li> <li> <h3>Clipperz のよいところ</h3> <ul> <li> <p>無料で匿名利用できます</p> </li> <li> <p>いつでもどのコンピュータからでもアクセスできます</p> </li> <li> <p>ソフトウェアのダウンロードやインストールは不要です</p> </li> <li> <p>PC や紙に機密情報を残す必要がありません</p> </li> </ul> </li> <li> <h3>Clipperz のセキュリティ</h3> <ul> <li> <p>データはブラウザで暗号化されてから Clipprez に送信されます</p> </li> <li> <p>暗号化のキーはあなただけが知っているパスフレーズです</p> </li> <li> <p>保管したデータは暗号化されていて、保管中には決して中身を見ることができません</p> </li> <li> <p>標準が確立された暗号化手順を採用しています</p> </li> <li> <p>ソースコードはいつでも参照できますが、暗号化について何も知らなくても使えます</p> </li> </ul> </li> <li><a href=\"http://www.clipperz.com\" target=\"_blank\">もっと見る</a> </li> </ul> ",
28 'loginFormTitle':"Clipperz のアカウントでログイン", 26 'loginFormTitle':"Clipperz のアカウントでログイン",
29 'loginFormUsernameLabel':"ユーザー名", 27 'loginFormUsernameLabel':"ユーザー名",
30 'loginFormPassphraseLabel':"パスフレーズ", 28 'loginFormPassphraseLabel':"パスフレーズ",
31 'loginFormDontHaveAnAccountLabel':"アカウントを持っていない?", 29 'loginFormDontHaveAnAccountLabel':"アカウントを持っていない?",
32 'loginFormCreateOneLabel':"新規作成", 30 'loginFormCreateOneLabel':"新規作成",
33 'loginFormForgotYourCredentialsLabel':"パスフレーズを忘れた?", 31 'loginFormForgotYourCredentialsLabel':"パスフレーズを忘れた?",
34 'loginFormAarghThatsBadLabel':"それは困った!", 32 'loginFormAarghThatsBadLabel':"それは困った!",
35 'loginFormAfraidOfMaliciousScriptsLabel':"偽サイトかも?", 33 'loginFormAfraidOfMaliciousScriptsLabel':"偽サイトかも?",
36 'loginFormVerifyTheCodeLabel':"確認する", 34 'loginFormVerifyTheCodeLabel':"確認する",
37 'loginFormButtonLabel':"ログイン", 35 'loginFormButtonLabel':"ログイン",
38 'loginFormOneTimePasswordCheckboxLabel':"ワンタイムパスフレーズ使用", 36 'loginFormOneTimePasswordCheckboxLabel':"ワンタイムパスフレーズ使用",
39 'loginFormOneTimePasswordCheckboxDescription':"", 37 'loginFormOneTimePasswordCheckboxDescription':"",
40 'loginPanelSwithLanguageDescription':"<h5>言語設定の変更</h5> ", 38 'loginPanelSwithLanguageDescription':"<h5>言語設定の変更</h5> ",
41 'browserCompatibilityDescription':"<p>Clipperz は Firefox に最適化されています。 しかし Clipperz は Opera や Safari そしてインターネットエクスプローラでも十分動作します。</p> ", 39 'browserCompatibilityDescription':"<p>Clipperz は Firefox に最適化されています。 しかし Clipperz は Opera や Safari そしてインターネットエクスプローラでも十分動作します。</p> ",
42 'OTPloginMessagePanelInitialTitle':"ワンタイムパスフレーズでログイン中", 40 'OTPloginMessagePanelInitialTitle':"ワンタイムパスフレーズでログイン中",
43 'OTPloginMessagePanelInitialText':"OTP 情報送信中 ...", 41 'OTPloginMessagePanelInitialText':"OTP 情報送信中 ...",
44 'OTPloginMessagePanelLoadingTitle':"ワンタイムパスフレーズでログイン中", 42 'OTPloginMessagePanelLoadingTitle':"ワンタイムパスフレーズでログイン中",
45 'OTPloginMessagePanelLoadingText':"認証情報を取得中 ...", 43 'OTPloginMessagePanelLoadingText':"認証情報を取得中 ...",
46 'OTPloginMessagePanelProcessingTitle':"ワンタイムパスフレーズでログイン中", 44 'OTPloginMessagePanelProcessingTitle':"ワンタイムパスフレーズでログイン中",
47 'OTPloginMessagePanelProcessingText':"認証情報を復号中 ...", 45 'OTPloginMessagePanelProcessingText':"認証情報を復号中 ...",
48 'loginMessagePanelInitialTitle':"ログイン中 ...", 46 'loginMessagePanelInitialTitle':"ログイン中 ...",
49 'loginMessagePanelInitialText':"---", 47 'loginMessagePanelInitialText':"---",
50 'loginMessagePanelInitialButtonLabel':"キャンセル", 48 'loginMessagePanelInitialButtonLabel':"キャンセル",
51 'loginMessagePanelConnectedTitle':"接続完了", 49 'loginMessagePanelConnectedTitle':"接続完了",
52 'loginMessagePanelConnectedText':"完了", 50 'loginMessagePanelConnectedText':"完了",
53 'loginMessagePanelFailureTitle':"エラー", 51 'loginMessagePanelFailureTitle':"エラー",
54 'loginMessagePanelFailureText':"ログインに失敗しました", 52 'loginMessagePanelFailureText':"ログインに失敗しました",
55 'loginMessagePanelFailureButtonLabel':"閉じる", 53 'loginMessagePanelFailureButtonLabel':"閉じる",
56 'connectionLoginSendingCredentialsMessageTitle':"認証確認中", 54 'connectionLoginSendingCredentialsMessageTitle':"認証確認中",
57 'connectionLoginSendingCredentialsMessageText':"認証送信中", 55 'connectionLoginSendingCredentialsMessageText':"認証送信中",
58 'connectionLoginCredentialsVerificationMessageTitle':"認証確認中", 56 'connectionLoginCredentialsVerificationMessageTitle':"認証確認中",
59 'connectionLoginCredentialsVerificationMessageText':"SRP 認証中", 57 'connectionLoginCredentialsVerificationMessageText':"SRP 認証中",
60 'connectionLoginDoneMessageTitle':"認証確認中", 58 'connectionLoginDoneMessageTitle':"認証確認中",
61 'connectionLoginDoneMessageText':"接続完了", 59 'connectionLoginDoneMessageText':"接続完了",
62 'userLoginPanelUpgradingUserCredentialsMessageTitle':"認証確認中", 60 'userLoginPanelUpgradingUserCredentialsMessageTitle':"認証確認中",
63 'userLoginPanelUpgradingUserCredentialsMessageText':"認証更新中", 61 'userLoginPanelUpgradingUserCredentialsMessageText':"認証更新中",
64 'userLoginPanelConnectedMessageTitle':"認証完了", 62 'userLoginPanelConnectedMessageTitle':"認証完了",
65 'userLoginPanelConnectedMessageText':"ログイン完了", 63 'userLoginPanelConnectedMessageText':"ログイン完了",
66 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"認証確認中", 64 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"認証確認中",
67 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"認証復元中", 65 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"認証復元中",
68 'userLoginPanelLoadingUserDataMessageTitle':"認証完了", 66 'userLoginPanelLoadingUserDataMessageTitle':"認証完了",
69 'userLoginPanelLoadingUserDataMessageText':"暗号化データを受信中", 67 'userLoginPanelLoadingUserDataMessageText':"暗号化データを受信中",
70 'userLoginPanelDecryptingUserDataMessageTitle':"認証完了", 68 'userLoginPanelDecryptingUserDataMessageTitle':"認証完了",
71 'userLoginPanelDecryptingUserDataMessageText':"復号中", 69 'userLoginPanelDecryptingUserDataMessageText':"復号中",
72 'userLoginPanelDecryptingUserStatisticsMessageTitle':"認証完了", 70 'userLoginPanelDecryptingUserStatisticsMessageTitle':"認証完了",
73 'userLoginPanelDecryptingUserStatisticsMessageText':"復号中", 71 'userLoginPanelDecryptingUserStatisticsMessageText':"復号中",
74 'splashAlertTitle':"Clipperz へようこそ", 72 'splashAlertTitle':"Clipperz へようこそ",
75 'splashAlertText':"<p>セキュリティアドバイス</p> <ul> <li> <p>Clipperz に保管したデータはパスフレーズによって保護されます。 パスフレーズを知らない人はデータにアクセスできません。</p> </li> <li> <p>Clipperz に重要なデータを保管するためにパスフレーズを類推されにくいものにしてください。 長いほど安全です。</p> </li> <li> <p>パスフレーズを忘れてしまったら Clipperz ではデータを復元できません。</p> </li> </ul> <p>さらに詳しくは Clipperz のサイトをごらんください。</p> ", 73 'splashAlertText':"<p>セキュリティアドバイス</p> <ul> <li> <p>Clipperz に保管したデータはパスフレーズによって保護されます。 パスフレーズを知らない人はデータにアクセスできません。</p> </li> <li> <p>Clipperz に重要なデータを保管するためにパスフレーズを類推されにくいものにしてください。 長いほど安全です。</p> </li> <li> <p>パスフレーズを忘れてしまったら Clipperz ではデータを復元できません。</p> </li> </ul> <p>さらに詳しくは Clipperz のサイトをごらんください。</p> ",
76 'splashAlertCloseButtonLabel':"OK", 74 'splashAlertCloseButtonLabel':"OK",
77 'registrationFormTitle':"新規アカウント作成", 75 'registrationFormTitle':"新規アカウント作成",
78 'registrationFormUsernameLabel':"ユーザー名", 76 'registrationFormUsernameLabel':"ユーザー名",
79 'registrationFormPassphraseLabel':"パスフレーズ", 77 'registrationFormPassphraseLabel':"パスフレーズ",
80 'registrationFormRetypePassphraseLabel':"パスフレーズをもう一度", 78 'registrationFormRetypePassphraseLabel':"パスフレーズをもう一度",
81 'registrationFormSafetyCheckLabel':"パスフレーズを忘れたら復活できないことを了承します。", 79 'registrationFormSafetyCheckLabel':"パスフレーズを忘れたら復活できないことを了承します。",
82 'registrationFormTermsOfServiceCheckLabel':"利用許諾に同意します 。", 80 'registrationFormTermsOfServiceCheckLabel':"利用許諾に同意します 。",
83 'registrationFormDoYouAlreadyHaveAnAccountLabel':"アカウントを持っている?", 81 'registrationFormDoYouAlreadyHaveAnAccountLabel':"アカウントを持っている?",
84 'registrationFormSimplyLoginLabel':"すぐにログイン", 82 'registrationFormSimplyLoginLabel':"すぐにログイン",
85 'registrationFormButtonLabel':"登録", 83 'registrationFormButtonLabel':"登録",
86 'registrationFormWarningMessageNotMatchingPassphrases':"パスフレーズの入力に誤りがあります。 再入力してください。", 84 'registrationFormWarningMessageNotMatchingPassphrases':"パスフレーズの入力に誤りがあります。 再入力してください。",
87 'registrationFormWarningMessageSafetyCheckNotSelected':"説明を読んで下のボックスを全てチェックしてください。", 85 'registrationFormWarningMessageSafetyCheckNotSelected':"説明を読んで下のボックスを全てチェックしてください。",
88 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"利用許諾に同意してください。", 86 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"利用許諾に同意してください。",
89 'registrationMessagePanelInitialTitle':"アカウント作成中 ...", 87 'registrationMessagePanelInitialTitle':"アカウント作成中 ...",
90 'registrationMessagePanelInitialText':"---", 88 'registrationMessagePanelInitialText':"---",
91 'registrationMessagePanelInitialButtonLabel':"キャンセル", 89 'registrationMessagePanelInitialButtonLabel':"キャンセル",
92 'registrationMessagePanelRegistrationDoneTitle':"登録", 90 'registrationMessagePanelRegistrationDoneTitle':"登録",
93 'registrationMessagePanelRegistrationDoneText':"完了", 91 'registrationMessagePanelRegistrationDoneText':"完了",
94 'registrationMessagePanelFailureTitle':"登録失敗", 92 'registrationMessagePanelFailureTitle':"登録失敗",
95 'registrationMessagePanelFailureButtonLabel':"閉じる", 93 'registrationMessagePanelFailureButtonLabel':"閉じる",
96 'connectionRegistrationSendingRequestMessageText':"認証確認中", 94 'connectionRegistrationSendingRequestMessageText':"認証確認中",
97 'connectionRegistrationSendingCredentialsMessageText':"認証送信中", 95 'connectionRegistrationSendingCredentialsMessageText':"認証送信中",
98 'registrationSplashPanelTitle':"セキュリティアドバイス", 96 'registrationSplashPanelTitle':"セキュリティアドバイス",
99 'registrationSplashPanelDescription':"<p>Clipperz の認証情報です。 大切に保管してください。 ユーザー名とパスフレーズは二度と表示されません。</p> ", 97 'registrationSplashPanelDescription':"<p>Clipperz の認証情報です。 大切に保管してください。 ユーザー名とパスフレーズは二度と表示されません。</p> ",
100 'registrationSplashPanelUsernameLabel':"ユーザー名", 98 'registrationSplashPanelUsernameLabel':"ユーザー名",
101 'registrationSplashPanelPassphraseLabel':"パスフレーズ", 99 'registrationSplashPanelPassphraseLabel':"パスフレーズ",
102 'registrationSplashPanelShowPassphraseButtonLabel':"パスフレーズを表示", 100 'registrationSplashPanelShowPassphraseButtonLabel':"パスフレーズを表示",
103 'donateHeaderLinkLabel':"寄付", 101 'donateHeaderLinkLabel':"寄付",
104 'creditsHeaderLinkLabel':"クレジット", 102 'creditsHeaderLinkLabel':"クレジット",
105 'feedbackHeaderLinkLabel':"フィードバック", 103 'feedbackHeaderLinkLabel':"フィードバック",
106 'helpHeaderLinkLabel':"ヘルプ", 104 'helpHeaderLinkLabel':"ヘルプ",
107 'forumHeaderLinkLabel':"フォーラム", 105 'forumHeaderLinkLabel':"フォーラム",
108 'recordMenuLabel':"カード", 106 'recordMenuLabel':"カード",
109 'accountMenuLabel':"アカウント", 107 'accountMenuLabel':"アカウント",
110 'dataMenuLabel':"データ", 108 'dataMenuLabel':"データ",
111 'contactsMenuLabel':"コンタクト", 109 'contactsMenuLabel':"コンタクト",
112 'toolsMenuLabel':"ツール", 110 'toolsMenuLabel':"ツール",
113 'logoutMenuLabel':"ログアウト", 111 'logoutMenuLabel':"ログアウト",
114 'lockMenuLabel':"ロック", 112 'lockMenuLabel':"ロック",
115 'lockTitle':"アカウントはロックされました", 113 'lockTitle':"アカウントはロックされました",
116 'lockDescription':"<p>ロックを解除するにはパスフレーズを入力してください。</p> ", 114 'lockDescription':"<p>ロックを解除するにはパスフレーズを入力してください。</p> ",
117 'unlockButtonLabel':"解除", 115 'unlockButtonLabel':"解除",
118 'changePasswordTabLabel':"パスフレーズの変更", 116 'changePasswordTabLabel':"パスフレーズの変更",
119 'changePasswordTabTitle':"パスフレーズの変更", 117 'changePasswordTabTitle':"パスフレーズの変更",
120 'changePasswordFormUsernameLabel':"ユーザー名", 118 'changePasswordFormUsernameLabel':"ユーザー名",
121 'changePasswordFormOldPassphraseLabel':"今のパスフレーズ", 119 'changePasswordFormOldPassphraseLabel':"今のパスフレーズ",
122 'changePasswordFormNewPassphraseLabel':"新しいパスフレーズ", 120 'changePasswordFormNewPassphraseLabel':"新しいパスフレーズ",
123 'changePasswordFormRetypePassphraseLabel':"パスフレーズをもう一度", 121 'changePasswordFormRetypePassphraseLabel':"パスフレーズをもう一度",
124 'changePasswordFormSafetyCheckboxLabel':"パスフレーズを忘れたら復活できないことを了承します。", 122 'changePasswordFormSafetyCheckboxLabel':"パスフレーズを忘れたら復活できないことを了承します。",
125 'changePasswordFormSubmitLabel':"変更", 123 'changePasswordFormSubmitLabel':"変更",
126 'changePasswordFormWrongUsernameWarning':"ユーザー名が違います", 124 'changePasswordFormWrongUsernameWarning':"ユーザー名が違います",
127 'changePasswordFormWrongPassphraseWarning':"パスフレーズが違います", 125 'changePasswordFormWrongPassphraseWarning':"パスフレーズが違います",
128 'changePasswordFormWrongRetypePassphraseWarning':"パスフレーズの入力に誤りがあります。 再入力してください。", 126 'changePasswordFormWrongRetypePassphraseWarning':"パスフレーズの入力に誤りがあります。 再入力してください。",
129 'changePasswordFormSafetyCheckWarning':"説明を読んでボックスをチェックしてください。", 127 'changePasswordFormSafetyCheckWarning':"説明を読んでボックスをチェックしてください。",
130 'changePasswordFormProgressDialogTitle':"認証情報を変更中", 128 'changePasswordFormProgressDialogTitle':"認証情報を変更中",
131 'changePasswordFormProgressDialogEmptyText':"---", 129 'changePasswordFormProgressDialogEmptyText':"---",
132 'changePasswordFormProgressDialogConnectedMessageTitle':"接続完了", 130 'changePasswordFormProgressDialogConnectedMessageTitle':"接続完了",
133 'changePasswordFormProgressDialogConnectedMessageText':"完了", 131 'changePasswordFormProgressDialogConnectedMessageText':"完了",
134 'changePasswordFormProgressDialogErrorMessageTitle':"エラー", 132 'changePasswordFormProgressDialogErrorMessageTitle':"エラー",
135 'changePasswordFormProgressDialogErrorMessageText':"変更に失敗しました", 133 'changePasswordFormProgressDialogErrorMessageText':"変更に失敗しました",
136 'changeCredentialsPanelEncryptingDataMessageTitle':"パスフレーズを変更中", 134 'changeCredentialsPanelEncryptingDataMessageTitle':"パスフレーズを変更中",
137 'changeCredentialsPanelEncryptingDataMessageText':"カードヘッダ暗号化", 135 'changeCredentialsPanelEncryptingDataMessageText':"カードヘッダ暗号化",
138 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"パスフレーズを変更中", 136 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"パスフレーズを変更中",
139 'changeCredentialsPanelCreatingNewCredentialsMessageText':"認証情報を送信中", 137 'changeCredentialsPanelCreatingNewCredentialsMessageText':"認証情報を送信中",
140 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"パスフレーズを変更中", 138 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"パスフレーズを変更中",
141 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"暗号化データを送信中", 139 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"暗号化データを送信中",
142 'changeCredentialsPanelDoneMessageTitle':"パスフレーズを変更中", 140 'changeCredentialsPanelDoneMessageTitle':"パスフレーズを変更中",
143 'changeCredentialsPanelDoneMessageText':"完了", 141 'changeCredentialsPanelDoneMessageText':"完了",
144 'manageOTPTabLabel':"ワンタイムパスフレーズ管理", 142 'manageOTPTabLabel':"ワンタイムパスフレーズ管理",
145 'manageOTPTabTitle':"ワンタイムパスフレーズ管理", 143 'manageOTPTabTitle':"ワンタイムパスフレーズ管理",
146 'manageOTPTabDescription':"<p>ワンタイムパスフレーズは通常のパスフレームと同様に機能しますが、一回限りの使い捨てパスフレーズです。</p> <p>同じパスフレーズで再度ログインすることはできません。</p> <p>不正アクセス防止のためにログインに成功したら直ちにワンタイムパスフレーズは削除されます</p> <p>ワンタイムパスフレーズはキーロガーやスパイウェアからパスフレーズを守るすばらしい機能です</p> <p><b>インターネットカフェや図書館などから Clipperz にアクセする場合にはワンタイムパスフレーズを利用することを強くお薦めします。</b> </p> ", 144 'manageOTPTabDescription':"<p>ワンタイムパスフレーズは通常のパスフレームと同様に機能しますが、一回限りの使い捨てパスフレーズです。</p> <p>同じパスフレーズで再度ログインすることはできません。</p> <p>不正アクセス防止のためにログインに成功したら直ちにワンタイムパスフレーズは削除されます</p> <p>ワンタイムパスフレーズはキーロガーやスパイウェアからパスフレーズを守るすばらしい機能です</p> <p><b>インターネットカフェや図書館などから Clipperz にアクセする場合にはワンタイムパスフレーズを利用することを強くお薦めします。</b> </p> ",
147 'oneTimePasswordReadOnlyMessage':"<h6>ごめんなさい</h6> <p>ローカルコピー使用中はワンタイムパスフレーズを利用できません。</p> ", 145 'oneTimePasswordReadOnlyMessage':"<h6>ごめんなさい</h6> <p>ローカルコピー使用中はワンタイムパスフレーズを利用できません。</p> ",
148 'oneTimePasswordLoadingMessage':"<h6>ロード中</h6> <p>お待ちください ...</p> ", 146 'oneTimePasswordLoadingMessage':"<h6>ロード中</h6> <p>お待ちください ...</p> ",
149 'oneTimePasswordNoPasswordAvailable':"<h6>有効なワンタイムパスフレーズがありません</h6> <p>「新規」ボタンをクリックしてワンタイムパスフレーズを作成してください。</p> ", 147 'oneTimePasswordNoPasswordAvailable':"<h6>有効なワンタイムパスフレーズがありません</h6> <p>「新規」ボタンをクリックしてワンタイムパスフレーズを作成してください。</p> ",
150 'createNewOTPButtonLabel':"新規", 148 'createNewOTPButtonLabel':"新規",
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_pt-BR.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_pt-BR.js
index 8fde63f..8478c0d 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_pt-BR.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_pt-BR.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26Clipperz.PM.Strings.Languages['pt-BR'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], { 24Clipperz.PM.Strings.Languages['pt-BR'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
27 'clipperzServiceDescriptionConfig':"<h2>Guarde com você!</h2> <ul> <li> <h3>Clipperz é:</h3> <ul> <li> <p>um simples e seguro gerenciador de senhas</p> </li> <li> <p>uma efetiva solução com uma única assinatura</p> </li> <li> <p>um cofre digital para suas informações confidenciais</p> </li> </ul> </li> <li> <h3>Com Clipperz você pode:</h3> <ul> <li> <p>guardar e gerenciar suas senhas e credenciais online</p> </li> <li> <p>logar em seus serviços web sem precisar entrar com nenhum nome de usuário ou senha</p> </li> <li> <p>proteger todos os seus dados sensíveis: códigos de alarme, PINs, números de cartão de crédito, &hellip;</p> </li> <li> <p>compartilhar segredos com membros da família e associados (em breve)</p> </li> </ul> </li> <li> <h3>Clipperz proporciona:</h3> <ul> <li> <p>anonimato completo e gratuito</p> </li> <li> <p>acesso a qualquer hora em qualquer computador</p> </li> <li> <p>sem software ou download e nada que instalar</p> </li> <li> <p>evite guardar seus segredos em seu PC ou papel</p> </li> </ul> </li> <li> <h3>Segurança Clipperz:</h3> <ul> <li> <p>seus segredos são codificados localmente por seu navegador antes de ser enviado para Clipperz</p> </li> <li> <p>a chave de codificação é uma senha que só você conhece</p> </li> <li> <p>Clipperz armazena apenas seus dados confidenciais codificados, nunca acessando os dados originais</p> </li> <li> <p>Clipperz é construído a partir de esquemas de codificação padrão, ou seja, nada é exclusivo ou caseiro</p> </li> <li> <p>você pode revisar o código a qualquer momento, mas você não precisa conhecer nada sobre criptograia para ser um usuário feliz!</p> </li> </ul> </li> <li> <a href=\"http://www.clipperz.com\" target=\"_blank\">Saiba mais</a> </li> </ul> ", 25 'clipperzServiceDescriptionConfig':"<h2>Guarde com você!</h2> <ul> <li> <h3>Clipperz é:</h3> <ul> <li> <p>um simples e seguro gerenciador de senhas</p> </li> <li> <p>uma efetiva solução com uma única assinatura</p> </li> <li> <p>um cofre digital para suas informações confidenciais</p> </li> </ul> </li> <li> <h3>Com Clipperz você pode:</h3> <ul> <li> <p>guardar e gerenciar suas senhas e credenciais online</p> </li> <li> <p>logar em seus serviços web sem precisar entrar com nenhum nome de usuário ou senha</p> </li> <li> <p>proteger todos os seus dados sensíveis: códigos de alarme, PINs, números de cartão de crédito, &hellip;</p> </li> <li> <p>compartilhar segredos com membros da família e associados (em breve)</p> </li> </ul> </li> <li> <h3>Clipperz proporciona:</h3> <ul> <li> <p>anonimato completo e gratuito</p> </li> <li> <p>acesso a qualquer hora em qualquer computador</p> </li> <li> <p>sem software ou download e nada que instalar</p> </li> <li> <p>evite guardar seus segredos em seu PC ou papel</p> </li> </ul> </li> <li> <h3>Segurança Clipperz:</h3> <ul> <li> <p>seus segredos são codificados localmente por seu navegador antes de ser enviado para Clipperz</p> </li> <li> <p>a chave de codificação é uma senha que só você conhece</p> </li> <li> <p>Clipperz armazena apenas seus dados confidenciais codificados, nunca acessando os dados originais</p> </li> <li> <p>Clipperz é construído a partir de esquemas de codificação padrão, ou seja, nada é exclusivo ou caseiro</p> </li> <li> <p>você pode revisar o código a qualquer momento, mas você não precisa conhecer nada sobre criptograia para ser um usuário feliz!</p> </li> </ul> </li> <li> <a href=\"http://www.clipperz.com\" target=\"_blank\">Saiba mais</a> </li> </ul> ",
28 'loginFormTitle':"entre sua conta Clipperz", 26 'loginFormTitle':"entre sua conta Clipperz",
29 'loginFormUsernameLabel':"nome do usuário", 27 'loginFormUsernameLabel':"nome do usuário",
30 'loginFormPassphraseLabel':"frase chave", 28 'loginFormPassphraseLabel':"frase chave",
31 'loginFormDontHaveAnAccountLabel':"não tem uma conta?", 29 'loginFormDontHaveAnAccountLabel':"não tem uma conta?",
32 'loginFormCreateOneLabel':"criar uma", 30 'loginFormCreateOneLabel':"criar uma",
33 'loginFormForgotYourCredentialsLabel':"esqueceu suas credenciais?", 31 'loginFormForgotYourCredentialsLabel':"esqueceu suas credenciais?",
34 'loginFormAarghThatsBadLabel':"xiiiii! isso é não é bom!", 32 'loginFormAarghThatsBadLabel':"xiiiii! isso é não é bom!",
35 'loginFormAfraidOfMaliciousScriptsLabel':"medo de scripts maliciosos?", 33 'loginFormAfraidOfMaliciousScriptsLabel':"medo de scripts maliciosos?",
36 'loginFormVerifyTheCodeLabel':"verifique o código", 34 'loginFormVerifyTheCodeLabel':"verifique o código",
37 'loginFormButtonLabel':"Entrar", 35 'loginFormButtonLabel':"Entrar",
38 'loginFormOneTimePasswordCheckboxLabel':"use uma frase chave descartável", 36 'loginFormOneTimePasswordCheckboxLabel':"use uma frase chave descartável",
39 'loginPanelSwithLanguageDescription':"<h5>Mudar para sua linguagem preferida</h5> ", 37 'loginPanelSwithLanguageDescription':"<h5>Mudar para sua linguagem preferida</h5> ",
40 'browserCompatibilityDescription':"<p>Tenha uma experiência melhor e mais segura com Clipperz, utilizando o Firefox. No entanto, Clipperz funciona bem também em Opera e MS Internet Explorer!</p> ", 38 'browserCompatibilityDescription':"<p>Tenha uma experiência melhor e mais segura com Clipperz, utilizando o Firefox. No entanto, Clipperz funciona bem também em Opera e MS Internet Explorer!</p> ",
41 'OTPloginMessagePanelInitialTitle':"Acessando usando a frase chave descartável", 39 'OTPloginMessagePanelInitialTitle':"Acessando usando a frase chave descartável",
42 'OTPloginMessagePanelInitialText':"Enviando credenciais descartáveis ...", 40 'OTPloginMessagePanelInitialText':"Enviando credenciais descartáveis ...",
43 'OTPloginMessagePanelLoadingTitle':"Acessando usando a frase chave descartável", 41 'OTPloginMessagePanelLoadingTitle':"Acessando usando a frase chave descartável",
44 'OTPloginMessagePanelLoadingText':"Buscando informação de autenticação codificada no servidor ...", 42 'OTPloginMessagePanelLoadingText':"Buscando informação de autenticação codificada no servidor ...",
45 'OTPloginMessagePanelProcessingTitle':"Acessando usando a frase chave descartável", 43 'OTPloginMessagePanelProcessingTitle':"Acessando usando a frase chave descartável",
46 'OTPloginMessagePanelProcessingText':"Decodificação local da informação de autenticação ...", 44 'OTPloginMessagePanelProcessingText':"Decodificação local da informação de autenticação ...",
47 'loginMessagePanelInitialTitle':"Entrando ...", 45 'loginMessagePanelInitialTitle':"Entrando ...",
48 'loginMessagePanelInitialButtonLabel':"Cancelar", 46 'loginMessagePanelInitialButtonLabel':"Cancelar",
49 'loginMessagePanelConnectedTitle':"Conectado", 47 'loginMessagePanelConnectedTitle':"Conectado",
50 'loginMessagePanelConnectedText':"Concluído", 48 'loginMessagePanelConnectedText':"Concluído",
51 'loginMessagePanelFailureTitle':"Erro", 49 'loginMessagePanelFailureTitle':"Erro",
52 'loginMessagePanelFailureText':"Ocorreu uma falha", 50 'loginMessagePanelFailureText':"Ocorreu uma falha",
53 'loginMessagePanelFailureButtonLabel':"Fechar", 51 'loginMessagePanelFailureButtonLabel':"Fechar",
54 'connectionLoginSendingCredentialsMessageTitle':"Verificando credenciais", 52 'connectionLoginSendingCredentialsMessageTitle':"Verificando credenciais",
55 'connectionLoginSendingCredentialsMessageText':"Enviando credenciais", 53 'connectionLoginSendingCredentialsMessageText':"Enviando credenciais",
56 'connectionLoginCredentialsVerificationMessageTitle':"Verificando credenciais", 54 'connectionLoginCredentialsVerificationMessageTitle':"Verificando credenciais",
57 'connectionLoginCredentialsVerificationMessageText':"Realizando autenticação SRP", 55 'connectionLoginCredentialsVerificationMessageText':"Realizando autenticação SRP",
58 'connectionLoginDoneMessageTitle':"Verificando credenciais", 56 'connectionLoginDoneMessageTitle':"Verificando credenciais",
59 'connectionLoginDoneMessageText':"Conectado", 57 'connectionLoginDoneMessageText':"Conectado",
60 'userLoginPanelUpgradingUserCredentialsMessageTitle':"Verificando credenciais", 58 'userLoginPanelUpgradingUserCredentialsMessageTitle':"Verificando credenciais",
61 'userLoginPanelUpgradingUserCredentialsMessageText':"Upgrade de suas credenciais para um novo esquema de autenticação", 59 'userLoginPanelUpgradingUserCredentialsMessageText':"Upgrade de suas credenciais para um novo esquema de autenticação",
62 'userLoginPanelConnectedMessageTitle':"Usuário autenticado", 60 'userLoginPanelConnectedMessageTitle':"Usuário autenticado",
63 'userLoginPanelConnectedMessageText':"Logado com sucesso em", 61 'userLoginPanelConnectedMessageText':"Logado com sucesso em",
64 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"Verificando credenciais", 62 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"Verificando credenciais",
65 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"Tentando esquema antigo de autenticação", 63 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"Tentando esquema antigo de autenticação",
66 'userLoginPanelLoadingUserDataMessageTitle':"Usuário autenticado", 64 'userLoginPanelLoadingUserDataMessageTitle':"Usuário autenticado",
67 'userLoginPanelLoadingUserDataMessageText':"Baixando cabeçalhos de cartão codificados de Clipperz", 65 'userLoginPanelLoadingUserDataMessageText':"Baixando cabeçalhos de cartão codificados de Clipperz",
68 'userLoginPanelDecryptingUserDataMessageTitle':"Usuário autenticado", 66 'userLoginPanelDecryptingUserDataMessageTitle':"Usuário autenticado",
69 'userLoginPanelDecryptingUserDataMessageText':"Descrição local de cabeçalhos dos cartões", 67 'userLoginPanelDecryptingUserDataMessageText':"Descrição local de cabeçalhos dos cartões",
70 'userLoginPanelDecryptingUserStatisticsMessageTitle':"Usuário autenticado", 68 'userLoginPanelDecryptingUserStatisticsMessageTitle':"Usuário autenticado",
71 'userLoginPanelDecryptingUserStatisticsMessageText':"Descrição local de estatísticas de uso", 69 'userLoginPanelDecryptingUserStatisticsMessageText':"Descrição local de estatísticas de uso",
72 'splashAlertTitle':"Bem-vindo ao Clipperz!", 70 'splashAlertTitle':"Bem-vindo ao Clipperz!",
73 'splashAlertText':"<p>Alguns avisos de segurança</p> <ul> <li> <p>Guardar suas informações no Clipperz é tão seguro quanto a frase chave que você escolher para protege-los. Ninguém pode acessá-los sem essa frase chave.</p> </li> <li> <p>Se você vai utlizar Clipperz para armazenar suas informações confidenciais e críticas, escolha uma frase chave difícil de ser descoberta. Quanto mais longa, melhor!</p> </li> <li> <p>Clipperz não será capaz de recuperar frase chave perdidas!</p> </li> </ul> <p>Para mais informações, por favor vá até <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a> website.</p> ", 71 'splashAlertText':"<p>Alguns avisos de segurança</p> <ul> <li> <p>Guardar suas informações no Clipperz é tão seguro quanto a frase chave que você escolher para protege-los. Ninguém pode acessá-los sem essa frase chave.</p> </li> <li> <p>Se você vai utlizar Clipperz para armazenar suas informações confidenciais e críticas, escolha uma frase chave difícil de ser descoberta. Quanto mais longa, melhor!</p> </li> <li> <p>Clipperz não será capaz de recuperar frase chave perdidas!</p> </li> </ul> <p>Para mais informações, por favor vá até <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a> website.</p> ",
74 'splashAlertCloseButtonLabel':"Ok", 72 'splashAlertCloseButtonLabel':"Ok",
75 'registrationFormTitle':"crie sua conta", 73 'registrationFormTitle':"crie sua conta",
76 'registrationFormUsernameLabel':"nome do usuário", 74 'registrationFormUsernameLabel':"nome do usuário",
77 'registrationFormPassphraseLabel':"frase chave", 75 'registrationFormPassphraseLabel':"frase chave",
78 'registrationFormRetypePassphraseLabel':"entre novamente sua frase chave", 76 'registrationFormRetypePassphraseLabel':"entre novamente sua frase chave",
79 'registrationFormSafetyCheckLabel':"Eu compreendo que Clipperz não será capaz de recuperar senhas perdidas.", 77 'registrationFormSafetyCheckLabel':"Eu compreendo que Clipperz não será capaz de recuperar senhas perdidas.",
80 'registrationFormTermsOfServiceCheckLabel':"Eu li e concordo com os <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Termos do Serviço</a>.", 78 'registrationFormTermsOfServiceCheckLabel':"Eu li e concordo com os <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Termos do Serviço</a>.",
81 'registrationFormDoYouAlreadyHaveAnAccountLabel':"você já tem uma conta?", 79 'registrationFormDoYouAlreadyHaveAnAccountLabel':"você já tem uma conta?",
82 'registrationFormSimplyLoginLabel':"login simples", 80 'registrationFormSimplyLoginLabel':"login simples",
83 'registrationFormButtonLabel':"Registrar", 81 'registrationFormButtonLabel':"Registrar",
84 'registrationFormWarningMessageNotMatchingPassphrases':"Suas frases chaves não conferem, por favor tente novamente.", 82 'registrationFormWarningMessageNotMatchingPassphrases':"Suas frases chaves não conferem, por favor tente novamente.",
85 'registrationFormWarningMessageSafetyCheckNotSelected':"Por favor leia e confira todos os campos abaixo.", 83 'registrationFormWarningMessageSafetyCheckNotSelected':"Por favor leia e confira todos os campos abaixo.",
86 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"Você precisa concordar com os Termos do Serviço.", 84 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"Você precisa concordar com os Termos do Serviço.",
87 'registrationMessagePanelInitialTitle':"Criando conta ...", 85 'registrationMessagePanelInitialTitle':"Criando conta ...",
88 'registrationMessagePanelInitialText':"---", 86 'registrationMessagePanelInitialText':"---",
89 'registrationMessagePanelInitialButtonLabel':"Cancelar", 87 'registrationMessagePanelInitialButtonLabel':"Cancelar",
90 'registrationMessagePanelRegistrationDoneTitle':"Registro", 88 'registrationMessagePanelRegistrationDoneTitle':"Registro",
91 'registrationMessagePanelRegistrationDoneText':"Concluído", 89 'registrationMessagePanelRegistrationDoneText':"Concluído",
92 'registrationMessagePanelFailureTitle':"Registrou falhou", 90 'registrationMessagePanelFailureTitle':"Registrou falhou",
93 'registrationMessagePanelFailureButtonLabel':"Fechar", 91 'registrationMessagePanelFailureButtonLabel':"Fechar",
94 'connectionRegistrationSendingRequestMessageText':"Verificando credenciais", 92 'connectionRegistrationSendingRequestMessageText':"Verificando credenciais",
95 'connectionRegistrationSendingCredentialsMessageText':"Enviando credenciais", 93 'connectionRegistrationSendingCredentialsMessageText':"Enviando credenciais",
96 'registrationSplashPanelTitle':"Informe de segurança", 94 'registrationSplashPanelTitle':"Informe de segurança",
97 'registrationSplashPanelDescription':"<p>Essas são suas credenciais Clipperz, cuide delas com cuidado. Clipperz nunca vai mostrar seu nome de usuário e frase chave uma outra vez!</p> ", 95 'registrationSplashPanelDescription':"<p>Essas são suas credenciais Clipperz, cuide delas com cuidado. Clipperz nunca vai mostrar seu nome de usuário e frase chave uma outra vez!</p> ",
98 'registrationSplashPanelUsernameLabel':"nome de usuário", 96 'registrationSplashPanelUsernameLabel':"nome de usuário",
99 'registrationSplashPanelPassphraseLabel':"frase chave", 97 'registrationSplashPanelPassphraseLabel':"frase chave",
100 'registrationSplashPanelShowPassphraseButtonLabel':"mostrar frase chave", 98 'registrationSplashPanelShowPassphraseButtonLabel':"mostrar frase chave",
101 'donateHeaderLinkLabel':"doar", 99 'donateHeaderLinkLabel':"doar",
102 'creditsHeaderLinkLabel':"créditos", 100 'creditsHeaderLinkLabel':"créditos",
103 'feedbackHeaderLinkLabel':"feedback", 101 'feedbackHeaderLinkLabel':"feedback",
104 'helpHeaderLinkLabel':"ajuda", 102 'helpHeaderLinkLabel':"ajuda",
105 'forumHeaderLinkLabel':"fórum", 103 'forumHeaderLinkLabel':"fórum",
106 'recordMenuLabel':"cartões", 104 'recordMenuLabel':"cartões",
107 'accountMenuLabel':"conta", 105 'accountMenuLabel':"conta",
108 'dataMenuLabel':"dados", 106 'dataMenuLabel':"dados",
109 'contactsMenuLabel':"contatos", 107 'contactsMenuLabel':"contatos",
110 'toolsMenuLabel':"ferramentas", 108 'toolsMenuLabel':"ferramentas",
111 'logoutMenuLabel':"sair", 109 'logoutMenuLabel':"sair",
112 'lockMenuLabel':"bloquear", 110 'lockMenuLabel':"bloquear",
113 'lockTitle':"A conta está bloqueada", 111 'lockTitle':"A conta está bloqueada",
114 'lockDescription':"<p>Para desbloquear sua conta, por favor, entre com a frase chave</p> ", 112 'lockDescription':"<p>Para desbloquear sua conta, por favor, entre com a frase chave</p> ",
115 'unlockButtonLabel':"desbloquear", 113 'unlockButtonLabel':"desbloquear",
116 'changePasswordTabLabel':"Alterar sua frase chave", 114 'changePasswordTabLabel':"Alterar sua frase chave",
117 'changePasswordTabTitle':"Alterar sua frase chave", 115 'changePasswordTabTitle':"Alterar sua frase chave",
118 'changePasswordFormUsernameLabel':"nome de usuário", 116 'changePasswordFormUsernameLabel':"nome de usuário",
119 'changePasswordFormOldPassphraseLabel':"frase chave antiga", 117 'changePasswordFormOldPassphraseLabel':"frase chave antiga",
120 'changePasswordFormNewPassphraseLabel':"frase chave nova", 118 'changePasswordFormNewPassphraseLabel':"frase chave nova",
121 'changePasswordFormRetypePassphraseLabel':"re-inserir frase chave nova", 119 'changePasswordFormRetypePassphraseLabel':"re-inserir frase chave nova",
122 'changePasswordFormSafetyCheckboxLabel':"Eu compreendo que Clipperz não poderá recuperar a frase chave perdida.", 120 'changePasswordFormSafetyCheckboxLabel':"Eu compreendo que Clipperz não poderá recuperar a frase chave perdida.",
123 'changePasswordFormSubmitLabel':"Alterar frase chave", 121 'changePasswordFormSubmitLabel':"Alterar frase chave",
124 'changePasswordFormWrongUsernameWarning':"Nome de usuário errado", 122 'changePasswordFormWrongUsernameWarning':"Nome de usuário errado",
125 'changePasswordFormWrongPassphraseWarning':"Frase chave errada", 123 'changePasswordFormWrongPassphraseWarning':"Frase chave errada",
126 'changePasswordFormWrongRetypePassphraseWarning':"Suas frases chaves não conferem, por favor tente novamente.", 124 'changePasswordFormWrongRetypePassphraseWarning':"Suas frases chaves não conferem, por favor tente novamente.",
127 'changePasswordFormSafetyCheckWarning':"Por favor leia e confira todos os campos abaixo.", 125 'changePasswordFormSafetyCheckWarning':"Por favor leia e confira todos os campos abaixo.",
128 'changePasswordFormProgressDialogTitle':"Alterando credenciais do usuário", 126 'changePasswordFormProgressDialogTitle':"Alterando credenciais do usuário",
129 'changePasswordFormProgressDialogConnectedMessageTitle':"Conectado", 127 'changePasswordFormProgressDialogConnectedMessageTitle':"Conectado",
130 'changePasswordFormProgressDialogConnectedMessageText':"Concluído", 128 'changePasswordFormProgressDialogConnectedMessageText':"Concluído",
131 'changePasswordFormProgressDialogErrorMessageTitle':"Erro", 129 'changePasswordFormProgressDialogErrorMessageTitle':"Erro",
132 'changePasswordFormProgressDialogErrorMessageText':"Mudança de credenciais falhou!", 130 'changePasswordFormProgressDialogErrorMessageText':"Mudança de credenciais falhou!",
133 'changeCredentialsPanelEncryptingDataMessageTitle':"Alterando sua frase chave", 131 'changeCredentialsPanelEncryptingDataMessageTitle':"Alterando sua frase chave",
134 'changeCredentialsPanelEncryptingDataMessageText':"Codificação local de cabeçalho de cartões", 132 'changeCredentialsPanelEncryptingDataMessageText':"Codificação local de cabeçalho de cartões",
135 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"Alterando sua frase chave", 133 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"Alterando sua frase chave",
136 'changeCredentialsPanelCreatingNewCredentialsMessageText':"Atualizando suas credenciais", 134 'changeCredentialsPanelCreatingNewCredentialsMessageText':"Atualizando suas credenciais",
137 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Alterando sua frase chave", 135 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Alterando sua frase chave",
138 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Enviando suas credenciais codificadas para Clipperz", 136 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Enviando suas credenciais codificadas para Clipperz",
139 'changeCredentialsPanelDoneMessageTitle':"Alterando sua frase chave", 137 'changeCredentialsPanelDoneMessageTitle':"Alterando sua frase chave",
140 'changeCredentialsPanelDoneMessageText':"Concluído", 138 'changeCredentialsPanelDoneMessageText':"Concluído",
141 'manageOTPTabLabel':"Gerenciar suas frases chaves descartáveis", 139 'manageOTPTabLabel':"Gerenciar suas frases chaves descartáveis",
142 'manageOTPTabTitle':"Gerenciar suas frases chaves descartáveis", 140 'manageOTPTabTitle':"Gerenciar suas frases chaves descartáveis",
143 'manageOTPTabDescription':"<p>Uma frase chave descartável funciona como uma frase chave normal, mas só pode ser utilizada uma única vez.</p> <p>Se a mesma frase chave for utilizada novamente num próximo login, ela será rejeitada e o login não irá ocorrer.</p> <p>Imediatamente após um login com sucesso, sua frase chave descartável será apagada para evitar logins fraudulentos.</p> <p>Frases chaves descartáveis são uma excelente opção se você está preocupado com keyloggers ou spywares que podem estar coletando seus dados em determinadas máquinas.</p> <p> <b>É recomendável que você utilize frases chaves descartáveis sempre que utilizar terminais públicos como Internet cafés e bibliotecas.</b> </p> ", 141 'manageOTPTabDescription':"<p>Uma frase chave descartável funciona como uma frase chave normal, mas só pode ser utilizada uma única vez.</p> <p>Se a mesma frase chave for utilizada novamente num próximo login, ela será rejeitada e o login não irá ocorrer.</p> <p>Imediatamente após um login com sucesso, sua frase chave descartável será apagada para evitar logins fraudulentos.</p> <p>Frases chaves descartáveis são uma excelente opção se você está preocupado com keyloggers ou spywares que podem estar coletando seus dados em determinadas máquinas.</p> <p> <b>É recomendável que você utilize frases chaves descartáveis sempre que utilizar terminais públicos como Internet cafés e bibliotecas.</b> </p> ",
144 'oneTimePasswordReadOnlyMessage':"<h6>Desculpe!</h6> <p>Você não pode gerenciar sua frase chave descartável quando usando a versão offline do Clipperz.</p> ", 142 'oneTimePasswordReadOnlyMessage':"<h6>Desculpe!</h6> <p>Você não pode gerenciar sua frase chave descartável quando usando a versão offline do Clipperz.</p> ",
145 'oneTimePasswordLoadingMessage':"<h6>Carregando informação</h6> <p>Por favor, aguarde ...</p> ", 143 'oneTimePasswordLoadingMessage':"<h6>Carregando informação</h6> <p>Por favor, aguarde ...</p> ",
146 'oneTimePasswordNoPasswordAvailable':"<h6>Nenhuma frase chave descartável disponível</h6> <p>Clique o botão “Novo” acima para adicionar uma frase chave descartável em sua conta.</p> ", 144 'oneTimePasswordNoPasswordAvailable':"<h6>Nenhuma frase chave descartável disponível</h6> <p>Clique o botão “Novo” acima para adicionar uma frase chave descartável em sua conta.</p> ",
147 'createNewOTPButtonLabel':"Novo", 145 'createNewOTPButtonLabel':"Novo",
148 'deleteOTPButtonLabel':"Apagar", 146 'deleteOTPButtonLabel':"Apagar",
149 'printOTPButtonLabel':"Imprimir", 147 'printOTPButtonLabel':"Imprimir",
150 'disabledOneTimePassword_warning':"desativada", 148 'disabledOneTimePassword_warning':"desativada",
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_pt-PT.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_pt-PT.js
index 7930852..d27829d 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_pt-PT.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_pt-PT.js
@@ -1,39 +1,37 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26//============================================================================= 24//=============================================================================
27// 25//
28 // P O R T U G U Ê S ( pt_PT ) 26 // P O R T U G U Ê S ( pt_PT )
29// 27//
30//============================================================================= 28//=============================================================================
31 29
32Clipperz.PM.Strings.Languages['pt-pt'] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['pt-br'], { 30Clipperz.PM.Strings.Languages['pt-pt'] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['pt-br'], {
33 31
34 32
35 33
36 //------------------------------------------------------------------------- 34 //-------------------------------------------------------------------------
37 __syntaxFix__: "syntax fix" 35 __syntaxFix__: "syntax fix"
38}); 36});
39 37
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_ru-RU.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_ru-RU.js
index 547dcc8..612e745 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_ru-RU.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_ru-RU.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26Clipperz.PM.Strings.Languages['ru-RU'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], { 24Clipperz.PM.Strings.Languages['ru-RU'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
27 'clipperzServiceDescription':"<h2>Держи всегда при себе!</h2> <ul> <li> <h3>Clipperz - это:</h3> <ul> <li> <p>безопасный и простой менеджер паролей</p> </li> <li> <p>эффективное решение для единой регистрации</p> </li> <li> <p>цифровое хранилище ваших конфиденциальных данных</p> </li> </ul> </li> <li>\ 25 'clipperzServiceDescription':"<h2>Держи всегда при себе!</h2> <ul> <li> <h3>Clipperz - это:</h3> <ul> <li> <p>безопасный и простой менеджер паролей</p> </li> <li> <p>эффективное решение для единой регистрации</p> </li> <li> <p>цифровое хранилище ваших конфиденциальных данных</p> </li> </ul> </li> <li>\
28 <h3>C помощью Clipperz вы можете:</h3> <ul>\ 26 <h3>C помощью Clipperz вы можете:</h3> <ul>\
29 <li> <p>хранить и управлять вашими паролями</p> </li> <li> <p>входить в любые веб-сервисы без ввода логина и пароля</p> </li> <li> <p>защитить все важные данные: коды охранной сигнализации, PINы, номера кредитных карт, и пр.</p> </li> <li> <p>открыть доступ к паролям вашим членам семьи, друзьям, коллегам</p> </li> </ul> </li> <li>\ 27 <li> <p>хранить и управлять вашими паролями</p> </li> <li> <p>входить в любые веб-сервисы без ввода логина и пароля</p> </li> <li> <p>защитить все важные данные: коды охранной сигнализации, PINы, номера кредитных карт, и пр.</p> </li> <li> <p>открыть доступ к паролям вашим членам семьи, друзьям, коллегам</p> </li> </ul> </li> <li>\
30 <h3>Преимущества Clipperz:</h3> <ul>\ 28 <h3>Преимущества Clipperz:</h3> <ul>\
31 <li> <p>бесплатный и абсолютно анонимный</p> </li> <li> <p>доступен в любое время и с любого компьютера</p> </li> <li> <p>не нужно ничего устанавливать</p> </li> <li> <p>не надо хранить секреты на компьютере или бумаге</p> </li> </ul> </li> <li>\ 29 <li> <p>бесплатный и абсолютно анонимный</p> </li> <li> <p>доступен в любое время и с любого компьютера</p> </li> <li> <p>не нужно ничего устанавливать</p> </li> <li> <p>не надо хранить секреты на компьютере или бумаге</p> </li> </ul> </li> <li>\
32 <h3>Безопасность Clipperz:</h3> <ul>\ 30 <h3>Безопасность Clipperz:</h3> <ul>\
33 <li> <p>все данные перед отправкой в Clipperz шифруются в браузере</p> </li> <li> <p>пароль знаете только вы</p> </li> <li> <p>Clipperz управляет важными данными в зашифрованном виде и никогда не получит доступ к ним в открытом виде</p> </li> <li> <p>Clipperz основан на стандартных криптографических протоколах: без каких-либо самоделок</p> </li> <li> <p>вы можете просмотреть исходный код, но вам ничего не надо знать о криптографии, чтобы просто использовать его!</p> </li> </ul> </li> <li>\ 31 <li> <p>все данные перед отправкой в Clipperz шифруются в браузере</p> </li> <li> <p>пароль знаете только вы</p> </li> <li> <p>Clipperz управляет важными данными в зашифрованном виде и никогда не получит доступ к ним в открытом виде</p> </li> <li> <p>Clipperz основан на стандартных криптографических протоколах: без каких-либо самоделок</p> </li> <li> <p>вы можете просмотреть исходный код, но вам ничего не надо знать о криптографии, чтобы просто использовать его!</p> </li> </ul> </li> <li>\
34 <a href=\"http://www.clipperz.com\" target=\"_blank\">Подробнее</a> </li> </ul> ", 32 <a href=\"http://www.clipperz.com\" target=\"_blank\">Подробнее</a> </li> </ul> ",
35 'loginFormTitle':"войти в аккаунт Clipperz", 33 'loginFormTitle':"войти в аккаунт Clipperz",
36 'loginFormUsernameLabel':"логин", 34 'loginFormUsernameLabel':"логин",
37 'loginFormPassphraseLabel':"пароль", 35 'loginFormPassphraseLabel':"пароль",
38 'loginFormDontHaveAnAccountLabel':"у вас еще нет аккаунта?", 36 'loginFormDontHaveAnAccountLabel':"у вас еще нет аккаунта?",
39 'loginFormCreateOneLabel':"создать сейчас", 37 'loginFormCreateOneLabel':"создать сейчас",
40 'loginFormForgotYourCredentialsLabel':"забыли пароль?", 38 'loginFormForgotYourCredentialsLabel':"забыли пароль?",
41 'loginFormAarghThatsBadLabel':"это плохо!", 39 'loginFormAarghThatsBadLabel':"это плохо!",
42 'loginFormAfraidOfMaliciousScriptsLabel':"опасаетесь вредоносных скриптов?", 40 'loginFormAfraidOfMaliciousScriptsLabel':"опасаетесь вредоносных скриптов?",
43 'loginFormVerifyTheCodeLabel':"проверить", 41 'loginFormVerifyTheCodeLabel':"проверить",
44 'loginFormButtonLabel':"Войти", 42 'loginFormButtonLabel':"Войти",
45 'loginFormOneTimePasswordCheckboxLabel':"использовать одноразовый пароль", 43 'loginFormOneTimePasswordCheckboxLabel':"использовать одноразовый пароль",
46 'loginPanelSwithLanguageDescription':"<h5>Переключить язык</h5> ", 44 'loginPanelSwithLanguageDescription':"<h5>Переключить язык</h5> ",
47 'browserCompatibilityDescription':"<p>Clipperz адаптирован для Firefox. Но также совместим с Opera и MS Internet Explorer!</p> ", 45 'browserCompatibilityDescription':"<p>Clipperz адаптирован для Firefox. Но также совместим с Opera и MS Internet Explorer!</p> ",
48 'OTPloginMessagePanelInitialTitle':"Вход", 46 'OTPloginMessagePanelInitialTitle':"Вход",
49 'OTPloginMessagePanelInitialText':"Передача данных учетной записи ...", 47 'OTPloginMessagePanelInitialText':"Передача данных учетной записи ...",
50 'OTPloginMessagePanelLoadingTitle':"Вход", 48 'OTPloginMessagePanelLoadingTitle':"Вход",
51 'OTPloginMessagePanelLoadingText':"Запрос аутентификационных данных с сервера ...", 49 'OTPloginMessagePanelLoadingText':"Запрос аутентификационных данных с сервера ...",
52 'OTPloginMessagePanelProcessingTitle':"Вход", 50 'OTPloginMessagePanelProcessingTitle':"Вход",
53 'OTPloginMessagePanelProcessingText':"Расшифровка аутентификационных данных", 51 'OTPloginMessagePanelProcessingText':"Расшифровка аутентификационных данных",
54 'loginMessagePanelInitialTitle':"Вход ...", 52 'loginMessagePanelInitialTitle':"Вход ...",
55 'loginMessagePanelInitialButtonLabel':"Отмена", 53 'loginMessagePanelInitialButtonLabel':"Отмена",
56 'loginMessagePanelConnectedTitle':"Соединен", 54 'loginMessagePanelConnectedTitle':"Соединен",
57 'loginMessagePanelConnectedText':"Выполнен", 55 'loginMessagePanelConnectedText':"Выполнен",
58 'loginMessagePanelFailureTitle':"Ошибка", 56 'loginMessagePanelFailureTitle':"Ошибка",
59 'loginMessagePanelFailureText':"Ошибка при попытке входа", 57 'loginMessagePanelFailureText':"Ошибка при попытке входа",
60 'loginMessagePanelFailureButtonLabel':"Закрыть", 58 'loginMessagePanelFailureButtonLabel':"Закрыть",
61 'connectionLoginSendingCredentialsMessageTitle':"Проверка учетной записи", 59 'connectionLoginSendingCredentialsMessageTitle':"Проверка учетной записи",
62 'connectionLoginSendingCredentialsMessageText':"Передача данных ...", 60 'connectionLoginSendingCredentialsMessageText':"Передача данных ...",
63 'connectionLoginCredentialsVerificationMessageTitle':"Проверка учетной записи", 61 'connectionLoginCredentialsVerificationMessageTitle':"Проверка учетной записи",
64 'connectionLoginCredentialsVerificationMessageText':"Выполняем SRP-аутентификацию ...", 62 'connectionLoginCredentialsVerificationMessageText':"Выполняем SRP-аутентификацию ...",
65 'connectionLoginDoneMessageTitle':"Проверка учетной записи", 63 'connectionLoginDoneMessageTitle':"Проверка учетной записи",
66 'connectionLoginDoneMessageText':"Соединено", 64 'connectionLoginDoneMessageText':"Соединено",
67 'userLoginPanelUpgradingUserCredentialsMessageTitle':"Проверка учетной записи", 65 'userLoginPanelUpgradingUserCredentialsMessageTitle':"Проверка учетной записи",
68 'userLoginPanelUpgradingUserCredentialsMessageText':"Обновляем полномочия к новой схеме аутентификации", 66 'userLoginPanelUpgradingUserCredentialsMessageText':"Обновляем полномочия к новой схеме аутентификации",
69 'userLoginPanelConnectedMessageTitle':"Пользователь аутентифицирован", 67 'userLoginPanelConnectedMessageTitle':"Пользователь аутентифицирован",
70 'userLoginPanelConnectedMessageText':"Успешный вход", 68 'userLoginPanelConnectedMessageText':"Успешный вход",
71 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"Проверка учетной записи", 69 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"Проверка учетной записи",
72 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"Пробуем войти по старой схеме", 70 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"Пробуем войти по старой схеме",
73 'userLoginPanelLoadingUserDataMessageTitle':"Пользователь аутентифицирован", 71 'userLoginPanelLoadingUserDataMessageTitle':"Пользователь аутентифицирован",
74 'userLoginPanelLoadingUserDataMessageText':"Загрузка зашифрованных заголовков карточек", 72 'userLoginPanelLoadingUserDataMessageText':"Загрузка зашифрованных заголовков карточек",
75 'userLoginPanelDecryptingUserDataMessageTitle':"Пользователь аутентифицирован", 73 'userLoginPanelDecryptingUserDataMessageTitle':"Пользователь аутентифицирован",
76 'userLoginPanelDecryptingUserDataMessageText':"Расшифровка заголовков карточек", 74 'userLoginPanelDecryptingUserDataMessageText':"Расшифровка заголовков карточек",
77 'userLoginPanelDecryptingUserStatisticsMessageTitle':"Пользователь аутентифицирован", 75 'userLoginPanelDecryptingUserStatisticsMessageTitle':"Пользователь аутентифицирован",
78 'userLoginPanelDecryptingUserStatisticsMessageText':"Расшифровка статистики", 76 'userLoginPanelDecryptingUserStatisticsMessageText':"Расшифровка статистики",
79 'splashAlertTitle':"Добро пожаловать в Clipperz!", 77 'splashAlertTitle':"Добро пожаловать в Clipperz!",
80 'splashAlertText':"<p>Несколько советов по безопасности:</p> <ul> <li> <p>Хранение данных в Clipperz зависит от того, насколько безопасен выбранный вами пароль</p> </li> <li> <p>Если собираетесь использовать Clipperz для защиты важных или критических данных, то убедитесь, что выбрали сложный пароль</p> </li> <li> <p>Clipperz не сможет восстановить забытый пароль</p> </li> </ul> <p>За дополнительной информацией обратитесь на <a href=\"http://www.clipperz.com\" target=\"_blank\">сайт</a> Clipperz.</p> ", 78 'splashAlertText':"<p>Несколько советов по безопасности:</p> <ul> <li> <p>Хранение данных в Clipperz зависит от того, насколько безопасен выбранный вами пароль</p> </li> <li> <p>Если собираетесь использовать Clipperz для защиты важных или критических данных, то убедитесь, что выбрали сложный пароль</p> </li> <li> <p>Clipperz не сможет восстановить забытый пароль</p> </li> </ul> <p>За дополнительной информацией обратитесь на <a href=\"http://www.clipperz.com\" target=\"_blank\">сайт</a> Clipperz.</p> ",
81 'splashAlertCloseButtonLabel':"OK", 79 'splashAlertCloseButtonLabel':"OK",
82 'registrationFormTitle':"создать аккаунт", 80 'registrationFormTitle':"создать аккаунт",
83 'registrationFormUsernameLabel':"имя пользователя", 81 'registrationFormUsernameLabel':"имя пользователя",
84 'registrationFormPassphraseLabel':"пароль", 82 'registrationFormPassphraseLabel':"пароль",
85 'registrationFormRetypePassphraseLabel':"повторите пароль", 83 'registrationFormRetypePassphraseLabel':"повторите пароль",
86 'registrationFormSafetyCheckLabel':"Я понимаю, что Clipperz не сможет восстановить забытый пароль", 84 'registrationFormSafetyCheckLabel':"Я понимаю, что Clipperz не сможет восстановить забытый пароль",
87 'registrationFormTermsOfServiceCheckLabel':"Я прочитал и согласен с <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Условиями предоставления услуг</a>.", 85 'registrationFormTermsOfServiceCheckLabel':"Я прочитал и согласен с <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Условиями предоставления услуг</a>.",
88 'registrationFormDoYouAlreadyHaveAnAccountLabel':"у вас уже есть аккаунт?", 86 'registrationFormDoYouAlreadyHaveAnAccountLabel':"у вас уже есть аккаунт?",
89 'registrationFormSimplyLoginLabel':"просто авторизируйтесь", 87 'registrationFormSimplyLoginLabel':"просто авторизируйтесь",
90 'registrationFormButtonLabel':"Зарегистрировать", 88 'registrationFormButtonLabel':"Зарегистрировать",
91 'registrationFormWarningMessageNotMatchingPassphrases':"Пароли не совпадают, пожайлуста, повторите ввод", 89 'registrationFormWarningMessageNotMatchingPassphrases':"Пароли не совпадают, пожайлуста, повторите ввод",
92 'registrationFormWarningMessageSafetyCheckNotSelected':"Прочитайте и проверьте все поля ниже", 90 'registrationFormWarningMessageSafetyCheckNotSelected':"Прочитайте и проверьте все поля ниже",
93 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"Вы должны принять Условия предоставления услуг", 91 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"Вы должны принять Условия предоставления услуг",
94 'registrationMessagePanelInitialTitle':"Создание аккаунта", 92 'registrationMessagePanelInitialTitle':"Создание аккаунта",
95 'registrationMessagePanelInitialButtonLabel':"Отмена", 93 'registrationMessagePanelInitialButtonLabel':"Отмена",
96 'registrationMessagePanelRegistrationDoneTitle':"Регистрация", 94 'registrationMessagePanelRegistrationDoneTitle':"Регистрация",
97 'registrationMessagePanelRegistrationDoneText':"Выполнено", 95 'registrationMessagePanelRegistrationDoneText':"Выполнено",
98 'registrationMessagePanelFailureTitle':"Ошибка регистрации", 96 'registrationMessagePanelFailureTitle':"Ошибка регистрации",
99 'registrationMessagePanelFailureButtonLabel':"Закрыть", 97 'registrationMessagePanelFailureButtonLabel':"Закрыть",
100 'connectionRegistrationSendingRequestMessageText':"Проверка учетной записи", 98 'connectionRegistrationSendingRequestMessageText':"Проверка учетной записи",
101 'connectionRegistrationSendingCredentialsMessageText':"Передача данных", 99 'connectionRegistrationSendingCredentialsMessageText':"Передача данных",
102 'registrationSplashPanelTitle':"Совет", 100 'registrationSplashPanelTitle':"Совет",
103 'registrationSplashPanelDescription':"<p>Это ваши данные учетной записи, позаботесь об их безопасности. Clipperz никогда больше не покажет ваш логин и пароль!</p> ", 101 'registrationSplashPanelDescription':"<p>Это ваши данные учетной записи, позаботесь об их безопасности. Clipperz никогда больше не покажет ваш логин и пароль!</p> ",
104 'registrationSplashPanelUsernameLabel':"имя пользователя", 102 'registrationSplashPanelUsernameLabel':"имя пользователя",
105 'registrationSplashPanelPassphraseLabel':"пароль", 103 'registrationSplashPanelPassphraseLabel':"пароль",
106 'registrationSplashPanelShowPassphraseButtonLabel':"показать пароль", 104 'registrationSplashPanelShowPassphraseButtonLabel':"показать пароль",
107 'donateHeaderLinkLabel':"помочь проекту", 105 'donateHeaderLinkLabel':"помочь проекту",
108 'creditsHeaderLinkLabel':"авторы", 106 'creditsHeaderLinkLabel':"авторы",
109 'feedbackHeaderLinkLabel':"обратная связь", 107 'feedbackHeaderLinkLabel':"обратная связь",
110 'helpHeaderLinkLabel':"помощь", 108 'helpHeaderLinkLabel':"помощь",
111 'forumHeaderLinkLabel':"форум", 109 'forumHeaderLinkLabel':"форум",
112 'recordMenuLabel':"карточки", 110 'recordMenuLabel':"карточки",
113 'accountMenuLabel':"аккаунт", 111 'accountMenuLabel':"аккаунт",
114 'dataMenuLabel':"данные", 112 'dataMenuLabel':"данные",
115 'contactsMenuLabel':"контакты", 113 'contactsMenuLabel':"контакты",
116 'toolsMenuLabel':"инструменты", 114 'toolsMenuLabel':"инструменты",
117 'logoutMenuLabel':"выход", 115 'logoutMenuLabel':"выход",
118 'lockMenuLabel':"заблокировать", 116 'lockMenuLabel':"заблокировать",
119 'lockTitle':"Аккаунт заблокирован", 117 'lockTitle':"Аккаунт заблокирован",
120 'lockDescription':"<p>Введите пароль для разблокировки</p> ", 118 'lockDescription':"<p>Введите пароль для разблокировки</p> ",
121 'unlockButtonLabel':"разблокировать", 119 'unlockButtonLabel':"разблокировать",
122 'changePasswordTabLabel':"Изменить пароль", 120 'changePasswordTabLabel':"Изменить пароль",
123 'changePasswordTabTitle':"Изменить пароль", 121 'changePasswordTabTitle':"Изменить пароль",
124 'changePasswordFormUsernameLabel':"логин", 122 'changePasswordFormUsernameLabel':"логин",
125 'changePasswordFormOldPassphraseLabel':"старый пароль", 123 'changePasswordFormOldPassphraseLabel':"старый пароль",
126 'changePasswordFormNewPassphraseLabel':"новый пароль", 124 'changePasswordFormNewPassphraseLabel':"новый пароль",
127 'changePasswordFormRetypePassphraseLabel':"повторите пароль", 125 'changePasswordFormRetypePassphraseLabel':"повторите пароль",
128 'changePasswordFormSafetyCheckboxLabel':"Я понимаю, что Clipperz не сможет восстановить забытый пароль.", 126 'changePasswordFormSafetyCheckboxLabel':"Я понимаю, что Clipperz не сможет восстановить забытый пароль.",
129 'changePasswordFormSubmitLabel':"Изменить", 127 'changePasswordFormSubmitLabel':"Изменить",
130 'changePasswordFormWrongUsernameWarning':"Неправильный логин", 128 'changePasswordFormWrongUsernameWarning':"Неправильный логин",
131 'changePasswordFormWrongPassphraseWarning':"Неверный пароль", 129 'changePasswordFormWrongPassphraseWarning':"Неверный пароль",
132 'changePasswordFormWrongRetypePassphraseWarning':"Пароли не совпадают, пожайлуста, повторите ввод.", 130 'changePasswordFormWrongRetypePassphraseWarning':"Пароли не совпадают, пожайлуста, повторите ввод.",
133 'changePasswordFormSafetyCheckWarning':"Прочитайте и проверьте все поля ниже.", 131 'changePasswordFormSafetyCheckWarning':"Прочитайте и проверьте все поля ниже.",
134 'changePasswordFormProgressDialogTitle':"Изменение учетной записи", 132 'changePasswordFormProgressDialogTitle':"Изменение учетной записи",
135 'changePasswordFormProgressDialogConnectedMessageTitle':"Соединено", 133 'changePasswordFormProgressDialogConnectedMessageTitle':"Соединено",
136 'changePasswordFormProgressDialogConnectedMessageText':"Выполнено", 134 'changePasswordFormProgressDialogConnectedMessageText':"Выполнено",
137 'changePasswordFormProgressDialogErrorMessageTitle':"Ошибка", 135 'changePasswordFormProgressDialogErrorMessageTitle':"Ошибка",
138 'changePasswordFormProgressDialogErrorMessageText':"Ошибка изменения учетной записи!", 136 'changePasswordFormProgressDialogErrorMessageText':"Ошибка изменения учетной записи!",
139 'changeCredentialsPanelEncryptingDataMessageTitle':"Изменение пароля", 137 'changeCredentialsPanelEncryptingDataMessageTitle':"Изменение пароля",
140 'changeCredentialsPanelEncryptingDataMessageText':"Шифрование заголовков карточек", 138 'changeCredentialsPanelEncryptingDataMessageText':"Шифрование заголовков карточек",
141 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"Изменение пароля", 139 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"Изменение пароля",
142 'changeCredentialsPanelCreatingNewCredentialsMessageText':"Обновление учетной записи", 140 'changeCredentialsPanelCreatingNewCredentialsMessageText':"Обновление учетной записи",
143 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Изменение пароля", 141 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Изменение пароля",
144 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Загрузка данных учетной записи в Clipperz", 142 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Загрузка данных учетной записи в Clipperz",
145 'changeCredentialsPanelDoneMessageTitle':"Изменение пароля", 143 'changeCredentialsPanelDoneMessageTitle':"Изменение пароля",
146 'changeCredentialsPanelDoneMessageText':"Выполнено", 144 'changeCredentialsPanelDoneMessageText':"Выполнено",
147 'manageOTPTabLabel':"Управление одноразовыми паролями", 145 'manageOTPTabLabel':"Управление одноразовыми паролями",
148 'manageOTPTabTitle':"Управление одноразовыми паролями", 146 'manageOTPTabTitle':"Управление одноразовыми паролями",
149 'manageOTPTabDescription':"<p>Одноразовый пароль работает так же, как ваш обычный пароль, но может быть использован только один раз.</p> <p>Если один и тот же пароль будет использоваться снова, он будет отклонен при попытке войти.</p> <p>Сразу после входа одноразовый пароль будет удален, чтобы предотвратить любую несанкционированную попытку доступа.</p> <p>Одноразовые пароли - удачный выбор для тех, кто обеспокоен кейлоггерами или spyware, которые могут украсть пароль.</p> <p> <b>Строго рекомендуется использовать одноразовые пароли для доступа к Clipperz с чужих компьютеров, интернет-кафе и компьютеров общего пользования.</b> </p> ", 147 'manageOTPTabDescription':"<p>Одноразовый пароль работает так же, как ваш обычный пароль, но может быть использован только один раз.</p> <p>Если один и тот же пароль будет использоваться снова, он будет отклонен при попытке войти.</p> <p>Сразу после входа одноразовый пароль будет удален, чтобы предотвратить любую несанкционированную попытку доступа.</p> <p>Одноразовые пароли - удачный выбор для тех, кто обеспокоен кейлоггерами или spyware, которые могут украсть пароль.</p> <p> <b>Строго рекомендуется использовать одноразовые пароли для доступа к Clipperz с чужих компьютеров, интернет-кафе и компьютеров общего пользования.</b> </p> ",
150 'oneTimePasswordReadOnlyMessage':"<h6>Извините!</h6> <p>Вы не можете управлять одноразовыми паролями в автономной версии Clipperz.</p> ", 148 'oneTimePasswordReadOnlyMessage':"<h6>Извините!</h6> <p>Вы не можете управлять одноразовыми паролями в автономной версии Clipperz.</p> ",
diff --git a/frontend/beta/js/Clipperz/PM/Strings/Strings_zh-CN.js b/frontend/beta/js/Clipperz/PM/Strings/Strings_zh-CN.js
index 1a9caed..e880954 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_zh-CN.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_zh-CN.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26Clipperz.PM.Strings.Languages['zh-CN'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], { 24Clipperz.PM.Strings.Languages['zh-CN'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
27 'clipperzServiceDescription':"<h2>只有你知道</h2> <ul> <li> <h3>Clipperz 是:</h3> <ul> <li> <p>一个简单而又安全的密码管理员</p> </li> <li> <p>一个有效的单一登录解决方案</p> </li> <li> <p>一个您保密的资料数据库</p> </li> </ul> </li> <li> <h3> 使用 Clipperz 你能:</h3> <ul> <li> <p>储存和管理你的密码和网上证书</p> </li> <li> <p>无需输入密码自动帮助你登录网站服务</p> </li> <li> <p>保护你的敏感数据:通讯录,口令,信用卡号码, ...</p> </li> <li> <p>与家人和伙伴分享秘密(将要上线)</p> </li> </ul> </li> <li> <h3>Clipperz 的特点:</h3> <ul> <li> <p>免费,彻底匿名</p> </li> <li> <p>在任何时间 任何电脑都可以轻松获取你的密码</p> </li> <li> <p>无需下载和安装任何软件</p> </li> <li> <p>再也无需在电脑或者纸上记录密码了</p> </li> </ul> </li> <li> <h3>Clipperz 的安全性:</h3> <ul> <li> <p>密码将在本地浏览器加密,然后上传至 Clipperz</p> </li> <li> <p>加密密钥是一个只有你知道的密码短语</p> </li> <li> <p>Clipperz 服务会加密你的敏感数据,并不会出现数据的原始形式</p> </li> <li> <p>Clipperz 基于加密标准,没有任何的花哨</p> </li> <li> <p>只要你愿意,你随时都可以查看源代码,但是做为一个使用者来说完全没有去必要去了解那些繁琐的加密原理</p> </li> </ul> </li> <li> <a href=\"http://www.clipperz.com\" target=\"_blank\">更多</a> </li> </ul> ", 25 'clipperzServiceDescription':"<h2>只有你知道</h2> <ul> <li> <h3>Clipperz 是:</h3> <ul> <li> <p>一个简单而又安全的密码管理员</p> </li> <li> <p>一个有效的单一登录解决方案</p> </li> <li> <p>一个您保密的资料数据库</p> </li> </ul> </li> <li> <h3> 使用 Clipperz 你能:</h3> <ul> <li> <p>储存和管理你的密码和网上证书</p> </li> <li> <p>无需输入密码自动帮助你登录网站服务</p> </li> <li> <p>保护你的敏感数据:通讯录,口令,信用卡号码, ...</p> </li> <li> <p>与家人和伙伴分享秘密(将要上线)</p> </li> </ul> </li> <li> <h3>Clipperz 的特点:</h3> <ul> <li> <p>免费,彻底匿名</p> </li> <li> <p>在任何时间 任何电脑都可以轻松获取你的密码</p> </li> <li> <p>无需下载和安装任何软件</p> </li> <li> <p>再也无需在电脑或者纸上记录密码了</p> </li> </ul> </li> <li> <h3>Clipperz 的安全性:</h3> <ul> <li> <p>密码将在本地浏览器加密,然后上传至 Clipperz</p> </li> <li> <p>加密密钥是一个只有你知道的密码短语</p> </li> <li> <p>Clipperz 服务会加密你的敏感数据,并不会出现数据的原始形式</p> </li> <li> <p>Clipperz 基于加密标准,没有任何的花哨</p> </li> <li> <p>只要你愿意,你随时都可以查看源代码,但是做为一个使用者来说完全没有去必要去了解那些繁琐的加密原理</p> </li> </ul> </li> <li> <a href=\"http://www.clipperz.com\" target=\"_blank\">更多</a> </li> </ul> ",
28 'loginFormTitle':"用你的 Clipperz 帐户登录", 26 'loginFormTitle':"用你的 Clipperz 帐户登录",
29 'loginFormUsernameLabel':"用户名", 27 'loginFormUsernameLabel':"用户名",
30 'loginFormPassphraseLabel':"密码短语", 28 'loginFormPassphraseLabel':"密码短语",
31 'loginFormDontHaveAnAccountLabel':"还未建立帐户?", 29 'loginFormDontHaveAnAccountLabel':"还未建立帐户?",
32 'loginFormCreateOneLabel':"创建一个新帐户", 30 'loginFormCreateOneLabel':"创建一个新帐户",
33 'loginFormForgotYourCredentialsLabel':"忘记你的证书?", 31 'loginFormForgotYourCredentialsLabel':"忘记你的证书?",
34 'loginFormAarghThatsBadLabel':"呃?这下糟糕了", 32 'loginFormAarghThatsBadLabel':"呃?这下糟糕了",
35 'loginFormAfraidOfMaliciousScriptsLabel':"害怕有恶意脚本?", 33 'loginFormAfraidOfMaliciousScriptsLabel':"害怕有恶意脚本?",
36 'loginFormVerifyTheCodeLabel':"验证代码", 34 'loginFormVerifyTheCodeLabel':"验证代码",
37 'loginFormButtonLabel':"登录", 35 'loginFormButtonLabel':"登录",
38 'loginFormOneTimePasswordCheckboxLabel':"使用一次性密码短语", 36 'loginFormOneTimePasswordCheckboxLabel':"使用一次性密码短语",
39 'loginPanelSwithLanguageDescription':"<h5>选择你的第一语言</h5> ", 37 'loginPanelSwithLanguageDescription':"<h5>选择你的第一语言</h5> ",
40 'browserCompatibilityDescription':"<p>使用 Firefox 将得到更快更安全的 Clipperz 服务。不过 Clipperz 同样可以很好的工作在 Opera 和 微软的 IE 中。</p> ", 38 'browserCompatibilityDescription':"<p>使用 Firefox 将得到更快更安全的 Clipperz 服务。不过 Clipperz 同样可以很好的工作在 Opera 和 微软的 IE 中。</p> ",
41 'OTPloginMessagePanelInitialTitle':"用一次性密码短语登录", 39 'OTPloginMessagePanelInitialTitle':"用一次性密码短语登录",
42 'OTPloginMessagePanelInitialText':"发送 OTP 证书 ...", 40 'OTPloginMessagePanelInitialText':"发送 OTP 证书 ...",
43 'OTPloginMessagePanelLoadingTitle':"用一次性密码短语登录", 41 'OTPloginMessagePanelLoadingTitle':"用一次性密码短语登录",
44 'OTPloginMessagePanelLoadingText':"从服务器读取加密认证数据 ...", 42 'OTPloginMessagePanelLoadingText':"从服务器读取加密认证数据 ...",
45 'OTPloginMessagePanelProcessingTitle':"用一次性密码短语登录", 43 'OTPloginMessagePanelProcessingTitle':"用一次性密码短语登录",
46 'OTPloginMessagePanelProcessingText':"本地解密认证数据", 44 'OTPloginMessagePanelProcessingText':"本地解密认证数据",
47 'loginMessagePanelInitialTitle':"登录中...", 45 'loginMessagePanelInitialTitle':"登录中...",
48 'loginMessagePanelInitialButtonLabel':"取消", 46 'loginMessagePanelInitialButtonLabel':"取消",
49 'loginMessagePanelConnectedTitle':"连接成功", 47 'loginMessagePanelConnectedTitle':"连接成功",
50 'loginMessagePanelConnectedText':"完成", 48 'loginMessagePanelConnectedText':"完成",
51 'loginMessagePanelFailureTitle':"错误", 49 'loginMessagePanelFailureTitle':"错误",
52 'loginMessagePanelFailureText':"登录失败", 50 'loginMessagePanelFailureText':"登录失败",
53 'loginMessagePanelFailureButtonLabel':"取消", 51 'loginMessagePanelFailureButtonLabel':"取消",
54 'connectionLoginSendingCredentialsMessageTitle':"验证证书", 52 'connectionLoginSendingCredentialsMessageTitle':"验证证书",
55 'connectionLoginSendingCredentialsMessageText':"传送证书", 53 'connectionLoginSendingCredentialsMessageText':"传送证书",
56 'connectionLoginCredentialsVerificationMessageTitle':"验证证书", 54 'connectionLoginCredentialsVerificationMessageTitle':"验证证书",
57 'connectionLoginCredentialsVerificationMessageText':"进行 SRP 认证", 55 'connectionLoginCredentialsVerificationMessageText':"进行 SRP 认证",
58 'connectionLoginDoneMessageTitle':"验证证书", 56 'connectionLoginDoneMessageTitle':"验证证书",
59 'connectionLoginDoneMessageText':"已连接", 57 'connectionLoginDoneMessageText':"已连接",
60 'userLoginPanelUpgradingUserCredentialsMessageTitle':"验证证书", 58 'userLoginPanelUpgradingUserCredentialsMessageTitle':"验证证书",
61 'userLoginPanelUpgradingUserCredentialsMessageText':"升级证书到新的认证模式", 59 'userLoginPanelUpgradingUserCredentialsMessageText':"升级证书到新的认证模式",
62 'userLoginPanelConnectedMessageTitle':"用户识别", 60 'userLoginPanelConnectedMessageTitle':"用户识别",
63 'userLoginPanelConnectedMessageText':"成功登录", 61 'userLoginPanelConnectedMessageText':"成功登录",
64 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"验证证书", 62 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle':"验证证书",
65 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"旧认证模式失效", 63 'userLoginPanelTryingAnOlderConnectionSchemaMessageText':"旧认证模式失效",
66 'userLoginPanelLoadingUserDataMessageTitle':"用户识别", 64 'userLoginPanelLoadingUserDataMessageTitle':"用户识别",
67 'userLoginPanelLoadingUserDataMessageText':"正在从 Clipperz 下载加密卡报头", 65 'userLoginPanelLoadingUserDataMessageText':"正在从 Clipperz 下载加密卡报头",
68 'userLoginPanelDecryptingUserDataMessageTitle':"用户识别", 66 'userLoginPanelDecryptingUserDataMessageTitle':"用户识别",
69 'userLoginPanelDecryptingUserDataMessageText':"加密卡报头本地解密", 67 'userLoginPanelDecryptingUserDataMessageText':"加密卡报头本地解密",
70 'userLoginPanelDecryptingUserStatisticsMessageTitle':"用户识别", 68 'userLoginPanelDecryptingUserStatisticsMessageTitle':"用户识别",
71 'userLoginPanelDecryptingUserStatisticsMessageText':"本地解密使用统计", 69 'userLoginPanelDecryptingUserStatisticsMessageText':"本地解密使用统计",
72 'splashAlertTitle':"Clipperz 欢迎您", 70 'splashAlertTitle':"Clipperz 欢迎您",
73 'splashAlertText':"<p>安全忠告</p> <ul> <li> <p>在 Clipperz ,用你选择的密码短语保存数据是安全的。没有人能够得到这些数据,除非他们有你的密码。</p> </li> <li> <p> 如果你决定使用 Clipperz 保护敏感数据和关键资料,请务必选用一个复杂的密码短语。越长越好</p> </li> <li> <p>注意:Clipperz将无法找回忘记的密码码短语!</p> </li> </ul> <p>获得更多的说明,请前往 <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a> 网站.</p> ", 71 'splashAlertText':"<p>安全忠告</p> <ul> <li> <p>在 Clipperz ,用你选择的密码短语保存数据是安全的。没有人能够得到这些数据,除非他们有你的密码。</p> </li> <li> <p> 如果你决定使用 Clipperz 保护敏感数据和关键资料,请务必选用一个复杂的密码短语。越长越好</p> </li> <li> <p>注意:Clipperz将无法找回忘记的密码码短语!</p> </li> </ul> <p>获得更多的说明,请前往 <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a> 网站.</p> ",
74 'splashAlertCloseButtonLabel':"确定", 72 'splashAlertCloseButtonLabel':"确定",
75 'registrationFormTitle':"创建你的帐户", 73 'registrationFormTitle':"创建你的帐户",
76 'registrationFormUsernameLabel':"用户名", 74 'registrationFormUsernameLabel':"用户名",
77 'registrationFormPassphraseLabel':"密码短语", 75 'registrationFormPassphraseLabel':"密码短语",
78 'registrationFormRetypePassphraseLabel':"确认密码短语", 76 'registrationFormRetypePassphraseLabel':"确认密码短语",
79 'registrationFormSafetyCheckLabel':"我明白 Clipperz 无法找回忘记的密码短语.", 77 'registrationFormSafetyCheckLabel':"我明白 Clipperz 无法找回忘记的密码短语.",
80 'registrationFormTermsOfServiceCheckLabel':"我同意接受 <a href='http://www.clipperz.com/terms_of_service' target='_blank'>服务条款</a> 款.", 78 'registrationFormTermsOfServiceCheckLabel':"我同意接受 <a href='http://www.clipperz.com/terms_of_service' target='_blank'>服务条款</a> 款.",
81 'registrationFormDoYouAlreadyHaveAnAccountLabel':"如果已有一个 Clipperz 帐户", 79 'registrationFormDoYouAlreadyHaveAnAccountLabel':"如果已有一个 Clipperz 帐户",
82 'registrationFormSimplyLoginLabel':"在此登录", 80 'registrationFormSimplyLoginLabel':"在此登录",
83 'registrationFormButtonLabel':"注册", 81 'registrationFormButtonLabel':"注册",
84 'registrationFormWarningMessageNotMatchingPassphrases':"两次密码短语不同,请重新输入", 82 'registrationFormWarningMessageNotMatchingPassphrases':"两次密码短语不同,请重新输入",
85 'registrationFormWarningMessageSafetyCheckNotSelected':"请阅读并检查下面的选项框", 83 'registrationFormWarningMessageSafetyCheckNotSelected':"请阅读并检查下面的选项框",
86 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"您需要同意服务条款", 84 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"您需要同意服务条款",
87 'registrationMessagePanelInitialTitle':"创建账户...", 85 'registrationMessagePanelInitialTitle':"创建账户...",
88 'registrationMessagePanelInitialButtonLabel':"取消", 86 'registrationMessagePanelInitialButtonLabel':"取消",
89 'registrationMessagePanelRegistrationDoneTitle':"注册", 87 'registrationMessagePanelRegistrationDoneTitle':"注册",
90 'registrationMessagePanelRegistrationDoneText':"完成", 88 'registrationMessagePanelRegistrationDoneText':"完成",
91 'registrationMessagePanelFailureTitle':"注册失败", 89 'registrationMessagePanelFailureTitle':"注册失败",
92 'registrationMessagePanelFailureButtonLabel':"关闭", 90 'registrationMessagePanelFailureButtonLabel':"关闭",
93 'connectionRegistrationSendingRequestMessageText':"验证证书", 91 'connectionRegistrationSendingRequestMessageText':"验证证书",
94 'connectionRegistrationSendingCredentialsMessageText':"传送证书", 92 'connectionRegistrationSendingCredentialsMessageText':"传送证书",
95 'registrationSplashPanelTitle':"安全忠告", 93 'registrationSplashPanelTitle':"安全忠告",
96 'registrationSplashPanelDescription':"<p>这是你的 Clipperz 证书,请保存好。Clipperz 永远不会第二次显示你的用户名和密码短语</p> ", 94 'registrationSplashPanelDescription':"<p>这是你的 Clipperz 证书,请保存好。Clipperz 永远不会第二次显示你的用户名和密码短语</p> ",
97 'registrationSplashPanelUsernameLabel':"用户名", 95 'registrationSplashPanelUsernameLabel':"用户名",
98 'registrationSplashPanelPassphraseLabel':"密码短语", 96 'registrationSplashPanelPassphraseLabel':"密码短语",
99 'registrationSplashPanelShowPassphraseButtonLabel':"显示密码短语", 97 'registrationSplashPanelShowPassphraseButtonLabel':"显示密码短语",
100 'donateHeaderLinkLabel':"捐赠", 98 'donateHeaderLinkLabel':"捐赠",
101 'creditsHeaderLinkLabel':"致谢", 99 'creditsHeaderLinkLabel':"致谢",
102 'feedbackHeaderLinkLabel':"反馈", 100 'feedbackHeaderLinkLabel':"反馈",
103 'helpHeaderLinkLabel':"帮助", 101 'helpHeaderLinkLabel':"帮助",
104 'forumHeaderLinkLabel':"论坛", 102 'forumHeaderLinkLabel':"论坛",
105 'recordMenuLabel':"密码卡片", 103 'recordMenuLabel':"密码卡片",
106 'accountMenuLabel':"账户", 104 'accountMenuLabel':"账户",
107 'dataMenuLabel':"资料", 105 'dataMenuLabel':"资料",
108 'contactsMenuLabel':"联系", 106 'contactsMenuLabel':"联系",
109 'toolsMenuLabel':"工具", 107 'toolsMenuLabel':"工具",
110 'logoutMenuLabel':"暂时离开", 108 'logoutMenuLabel':"暂时离开",
111 'lockMenuLabel':"安全锁", 109 'lockMenuLabel':"安全锁",
112 'lockTitle':"账户被锁定", 110 'lockTitle':"账户被锁定",
113 'lockDescription':"<p>请输入你的密码短语解开账户</p> ", 111 'lockDescription':"<p>请输入你的密码短语解开账户</p> ",
114 'unlockButtonLabel':"解锁", 112 'unlockButtonLabel':"解锁",
115 'changePasswordTabLabel':"修改密码短语", 113 'changePasswordTabLabel':"修改密码短语",
116 'changePasswordTabTitle':"修改密码短语", 114 'changePasswordTabTitle':"修改密码短语",
117 'changePasswordFormUsernameLabel':"用户名", 115 'changePasswordFormUsernameLabel':"用户名",
118 'changePasswordFormOldPassphraseLabel':"旧密码短语", 116 'changePasswordFormOldPassphraseLabel':"旧密码短语",
119 'changePasswordFormNewPassphraseLabel':"新密码短语", 117 'changePasswordFormNewPassphraseLabel':"新密码短语",
120 'changePasswordFormRetypePassphraseLabel':"确认密码短语", 118 'changePasswordFormRetypePassphraseLabel':"确认密码短语",
121 'changePasswordFormSafetyCheckboxLabel':"我知道 Clipperz 不能找回丢失的密码短语", 119 'changePasswordFormSafetyCheckboxLabel':"我知道 Clipperz 不能找回丢失的密码短语",
122 'changePasswordFormSubmitLabel':"修改密码短语", 120 'changePasswordFormSubmitLabel':"修改密码短语",
123 'changePasswordFormWrongUsernameWarning':"用户名错误", 121 'changePasswordFormWrongUsernameWarning':"用户名错误",
124 'changePasswordFormWrongPassphraseWarning':"旧密码短语错误", 122 'changePasswordFormWrongPassphraseWarning':"旧密码短语错误",
125 'changePasswordFormWrongRetypePassphraseWarning':"两次密码短语不同,请重新输入", 123 'changePasswordFormWrongRetypePassphraseWarning':"两次密码短语不同,请重新输入",
126 'changePasswordFormSafetyCheckWarning':"请阅读并检查下面的选项框", 124 'changePasswordFormSafetyCheckWarning':"请阅读并检查下面的选项框",
127 'changePasswordFormProgressDialogTitle':"正在修改密码短语", 125 'changePasswordFormProgressDialogTitle':"正在修改密码短语",
128 'changePasswordFormProgressDialogConnectedMessageTitle':"连接", 126 'changePasswordFormProgressDialogConnectedMessageTitle':"连接",
129 'changePasswordFormProgressDialogConnectedMessageText':"完成", 127 'changePasswordFormProgressDialogConnectedMessageText':"完成",
130 'changePasswordFormProgressDialogErrorMessageTitle':"错误", 128 'changePasswordFormProgressDialogErrorMessageTitle':"错误",
131 'changePasswordFormProgressDialogErrorMessageText':"证书修改失败", 129 'changePasswordFormProgressDialogErrorMessageText':"证书修改失败",
132 'changeCredentialsPanelEncryptingDataMessageTitle':"正在修改你的密码短语", 130 'changeCredentialsPanelEncryptingDataMessageTitle':"正在修改你的密码短语",
133 'changeCredentialsPanelEncryptingDataMessageText':"加密卡报头本地解密", 131 'changeCredentialsPanelEncryptingDataMessageText':"加密卡报头本地解密",
134 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"正在修改你的密码短语", 132 'changeCredentialsPanelCreatingNewCredentialsMessageTitle':"正在修改你的密码短语",
135 'changeCredentialsPanelCreatingNewCredentialsMessageText':"更新你的证书", 133 'changeCredentialsPanelCreatingNewCredentialsMessageText':"更新你的证书",
136 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"正在修改你的密码短语", 134 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"正在修改你的密码短语",
137 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"正在上传本地证书到 Clipperz", 135 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"正在上传本地证书到 Clipperz",
138 'changeCredentialsPanelDoneMessageTitle':"正在修改你的密码短语", 136 'changeCredentialsPanelDoneMessageTitle':"正在修改你的密码短语",
139 'changeCredentialsPanelDoneMessageText':"完成", 137 'changeCredentialsPanelDoneMessageText':"完成",
140 'manageOTPTabLabel':"管理你的一次性密码短语", 138 'manageOTPTabLabel':"管理你的一次性密码短语",
141 'manageOTPTabTitle':"管理你的一次性密码短语", 139 'manageOTPTabTitle':"管理你的一次性密码短语",
142 'manageOTPTabDescription':"<p>一次性密码短语工作起来和一般的密码短语一样,但是只可以使用一次</p> <p>如果同样的密码短语在一段时间以内再次登录,会被拒绝。登录进程将会失败。</p> <p>为了防止任何欺诈登录,在成功登陆之后,你的一次性密码将会立即被删除,</p> <p>如果一次性密码被键盘记录程序或者间谍软件得到,可能会从被感染的机器上收集数据,这样的话,一次性密码绝对是个很好的选择。</p> <p> <b>强烈建议在公共场合登录 Clipperz 时,使用一次性密码。比如公关计算机,网吧,图书馆等</b> </p> ", 140 'manageOTPTabDescription':"<p>一次性密码短语工作起来和一般的密码短语一样,但是只可以使用一次</p> <p>如果同样的密码短语在一段时间以内再次登录,会被拒绝。登录进程将会失败。</p> <p>为了防止任何欺诈登录,在成功登陆之后,你的一次性密码将会立即被删除,</p> <p>如果一次性密码被键盘记录程序或者间谍软件得到,可能会从被感染的机器上收集数据,这样的话,一次性密码绝对是个很好的选择。</p> <p> <b>强烈建议在公共场合登录 Clipperz 时,使用一次性密码。比如公关计算机,网吧,图书馆等</b> </p> ",
143 'oneTimePasswordReadOnlyMessage':"<h6>对不起!</h6> <p>你不能从离线版本管理你的一次性密码短语</p> ", 141 'oneTimePasswordReadOnlyMessage':"<h6>对不起!</h6> <p>你不能从离线版本管理你的一次性密码短语</p> ",
144 'oneTimePasswordLoadingMessage':"<h6>加载数据</h6> <p>请等待 ...</p> ", 142 'oneTimePasswordLoadingMessage':"<h6>加载数据</h6> <p>请等待 ...</p> ",
145 'oneTimePasswordNoPasswordAvailable':"<h6>一次性密码短语没有激活</h6> <p>点击“新建”按钮添加一次性密码短语到你的帐户</p> ", 143 'oneTimePasswordNoPasswordAvailable':"<h6>一次性密码短语没有激活</h6> <p>点击“新建”按钮添加一次性密码短语到你的帐户</p> ",
146 'createNewOTPButtonLabel':"新建", 144 'createNewOTPButtonLabel':"新建",
147 'deleteOTPButtonLabel':"删除", 145 'deleteOTPButtonLabel':"删除",
148 'printOTPButtonLabel':"打印", 146 'printOTPButtonLabel':"打印",
149 'disabledOneTimePassword_warning':"禁用", 147 'disabledOneTimePassword_warning':"禁用",
150 'oneTimePasswordSelectionLink_selectLabel':"选择:", 148 'oneTimePasswordSelectionLink_selectLabel':"选择:",
diff --git a/frontend/beta/js/Clipperz/PM/Toll.js b/frontend/beta/js/Clipperz/PM/Toll.js
index 3a9b48f..027d8a3 100644
--- a/frontend/beta/js/Clipperz/PM/Toll.js
+++ b/frontend/beta/js/Clipperz/PM/Toll.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28 26
29//============================================================================= 27//=============================================================================
30 28
31Clipperz.PM.Toll = function(args) { 29Clipperz.PM.Toll = function(args) {
32 this._requestType = args.requestType; 30 this._requestType = args.requestType;
33 this._targetValue = args.targetValue; 31 this._targetValue = args.targetValue;
34 this._cost = args.cost; 32 this._cost = args.cost;
35 this._toll = null; 33 this._toll = null;
36 34
37 return this; 35 return this;
38} 36}
39 37
40Clipperz.PM.Toll.prototype = MochiKit.Base.update(null, { 38Clipperz.PM.Toll.prototype = MochiKit.Base.update(null, {
41 39
42 'toString': function() { 40 'toString': function() {
43 return "Clipperz.PM.Toll (" + this.requestType() + ": " + this.cost() + " - " + ((this.toll() == null)? 'UNPAID' : 'PAID') + ")"; 41 return "Clipperz.PM.Toll (" + this.requestType() + ": " + this.cost() + " - " + ((this.toll() == null)? 'UNPAID' : 'PAID') + ")";
44 }, 42 },
45 43
46 //------------------------------------------------------------------------- 44 //-------------------------------------------------------------------------
47 45
48 'requestType': function() { 46 'requestType': function() {
49 return this._requestType; 47 return this._requestType;
50 }, 48 },
51 49
52 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
53 51
54 'targetValue': function() { 52 'targetValue': function() {
55 return this._targetValue; 53 return this._targetValue;
56 }, 54 },
57 55
58 //------------------------------------------------------------------------- 56 //-------------------------------------------------------------------------
59 57
60 'cost': function() { 58 'cost': function() {
61 return this._cost; 59 return this._cost;
62 }, 60 },
63 61
64 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
65 63
66 'toll': function() { 64 'toll': function() {
67 return this._toll; 65 return this._toll;
68 }, 66 },
69 67
70 //========================================================================= 68 //=========================================================================
71 69
72 'prefixMatchingBits': function(aValue1, aValue2) { 70 'prefixMatchingBits': function(aValue1, aValue2) {
73 varresult; 71 varresult;
74 var i,c; 72 var i,c;
75 73
76 result = 0; 74 result = 0;
77 75
78 c = Math.min(aValue1.length(), aValue2.length()); 76 c = Math.min(aValue1.length(), aValue2.length());
79 i = 0; 77 i = 0;
80 while (i<c && (aValue1.byteAtIndex(i) == aValue2.byteAtIndex(i))) { 78 while (i<c && (aValue1.byteAtIndex(i) == aValue2.byteAtIndex(i))) {
81 result += 8; 79 result += 8;
82 i++; 80 i++;
83 } 81 }
84 82
85 if (i<c) { 83 if (i<c) {
86 varxorValue; 84 varxorValue;
87 85
88 xorValue = (aValue1.byteAtIndex(i) ^ aValue2.byteAtIndex(i)); 86 xorValue = (aValue1.byteAtIndex(i) ^ aValue2.byteAtIndex(i));
89 87
90 if (xorValue >= 128) { 88 if (xorValue >= 128) {
91 result += 0; 89 result += 0;
92 } else if (xorValue >= 64) { 90 } else if (xorValue >= 64) {
93 result += 1; 91 result += 1;
94 } else if (xorValue >= 32) { 92 } else if (xorValue >= 32) {
95 result += 2; 93 result += 2;
96 } else if (xorValue >= 16) { 94 } else if (xorValue >= 16) {
97 result += 3; 95 result += 3;
98 } else if (xorValue >= 8) { 96 } else if (xorValue >= 8) {
99 result += 4; 97 result += 4;
100 } else if (xorValue >= 4) { 98 } else if (xorValue >= 4) {
101 result += 5; 99 result += 5;
102 } else if (xorValue >= 2) { 100 } else if (xorValue >= 2) {
103 result += 6; 101 result += 6;
104 } else if (xorValue >= 1) { 102 } else if (xorValue >= 1) {
105 result += 7; 103 result += 7;
106 } 104 }
107 } 105 }
108 106
109 return result; 107 return result;
110 }, 108 },
111 109
112 //========================================================================= 110 //=========================================================================
113 111
114 'pay': function() { 112 'pay': function() {
115 varresult; 113 varresult;
116 vartargetData; 114 vartargetData;
117 vartargetMatchSize; 115 vartargetMatchSize;
118 var prefixMatchingBits; 116 var prefixMatchingBits;
119 varpayment; 117 varpayment;
120 var i; 118 var i;
121 119
122//MochiKit.Logging.logDebug(">>> Toll.pay"); 120//MochiKit.Logging.logDebug(">>> Toll.pay");
123 if (this.toll() == null) { 121 if (this.toll() == null) {
124 i = 0; 122 i = 0;
125//MochiKit.Logging.logDebug("--- Proxy.payToll - 1"); 123//MochiKit.Logging.logDebug("--- Proxy.payToll - 1");
126 targetData = new Clipperz.ByteArray("0x" + this.targetValue()); 124 targetData = new Clipperz.ByteArray("0x" + this.targetValue());
127//MochiKit.Logging.logDebug("--- Proxy.payToll - 2"); 125//MochiKit.Logging.logDebug("--- Proxy.payToll - 2");
128 targetMatchSize = this.cost(); 126 targetMatchSize = this.cost();
129//MochiKit.Logging.logDebug("--- Proxy.payToll - 3"); 127//MochiKit.Logging.logDebug("--- Proxy.payToll - 3");
130 128
131 payment = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32); 129 payment = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32);
132//MochiKit.Logging.logDebug("--- Proxy.payToll - 4"); 130//MochiKit.Logging.logDebug("--- Proxy.payToll - 4");
133 131
134 do { 132 do {
135 varpaymentData; 133 varpaymentData;
136 134
137//MochiKit.Logging.logDebug("--- Proxy.payToll - 5"); 135//MochiKit.Logging.logDebug("--- Proxy.payToll - 5");
138 //payment = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32); 136 //payment = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32);
139 payment.increment(); 137 payment.increment();
140//MochiKit.Logging.logDebug("--- Proxy.payToll - 6"); 138//MochiKit.Logging.logDebug("--- Proxy.payToll - 6");
141 paymentData = Clipperz.Crypto.SHA.sha256(payment); 139 paymentData = Clipperz.Crypto.SHA.sha256(payment);
142//MochiKit.Logging.logDebug("--- Proxy.payToll - 7"); 140//MochiKit.Logging.logDebug("--- Proxy.payToll - 7");
143 prefixMatchingBits = this.prefixMatchingBits(targetData, paymentData); 141 prefixMatchingBits = this.prefixMatchingBits(targetData, paymentData);
144//MochiKit.Logging.logDebug("--- Proxy.payToll - 8"); 142//MochiKit.Logging.logDebug("--- Proxy.payToll - 8");
145 i++; 143 i++;
146//MochiKit.Logging.logDebug("--- Proxy.payToll - 9"); 144//MochiKit.Logging.logDebug("--- Proxy.payToll - 9");
147 } while (prefixMatchingBits < targetMatchSize); 145 } while (prefixMatchingBits < targetMatchSize);
148//MochiKit.Logging.logDebug("--- Proxy.payToll - 10"); 146//MochiKit.Logging.logDebug("--- Proxy.payToll - 10");
149 147
150 this._toll = payment.toHexString().substring(2) 148 this._toll = payment.toHexString().substring(2)
diff --git a/frontend/beta/js/Clipperz/Profile.js b/frontend/beta/js/Clipperz/Profile.js
index fb12417..98c1e53 100644
--- a/frontend/beta/js/Clipperz/Profile.js
+++ b/frontend/beta/js/Clipperz/Profile.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26addEvent(window, "load", sortables_init); 24addEvent(window, "load", sortables_init);
27 25
28var SORT_COLUMN_INDEX; 26var SORT_COLUMN_INDEX;
29 27
30function sortables_init() { 28function sortables_init() {
31 // Find all tables with class sortable and make them sortable 29 // Find all tables with class sortable and make them sortable
32 if (!document.getElementsByTagName) return; 30 if (!document.getElementsByTagName) return;
33 tbls = document.getElementsByTagName("table"); 31 tbls = document.getElementsByTagName("table");
34 for (ti=0;ti<tbls.length;ti++) { 32 for (ti=0;ti<tbls.length;ti++) {
35 thisTbl = tbls[ti]; 33 thisTbl = tbls[ti];
36 if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) { 34 if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
37 //initTable(thisTbl.id); 35 //initTable(thisTbl.id);
38 ts_makeSortable(thisTbl); 36 ts_makeSortable(thisTbl);
39 } 37 }
40 } 38 }
41} 39}
42 40
43function ts_makeSortable(table) { 41function ts_makeSortable(table) {
44 if (table.rows && table.rows.length > 0) { 42 if (table.rows && table.rows.length > 0) {
45 var firstRow = table.rows[0]; 43 var firstRow = table.rows[0];
46 } 44 }
47 if (!firstRow) return; 45 if (!firstRow) return;
48 46
49 // We have a first row: assume it's the header, and make its contents clickable links 47 // We have a first row: assume it's the header, and make its contents clickable links
50 for (var i=0;i<firstRow.cells.length;i++) { 48 for (var i=0;i<firstRow.cells.length;i++) {
51 var cell = firstRow.cells[i]; 49 var cell = firstRow.cells[i];
52 var txt = ts_getInnerText(cell); 50 var txt = ts_getInnerText(cell);
53 cell.innerHTML = '<a href="#" class="sortheader" '+ 51 cell.innerHTML = '<a href="#" class="sortheader" '+
54 'onclick="ts_resortTable(this, '+i+');return false;">' + 52 'onclick="ts_resortTable(this, '+i+');return false;">' +
55 txt+'<span class="sortarrow">&nbsp;&nbsp;&nbsp;</span></a>'; 53 txt+'<span class="sortarrow">&nbsp;&nbsp;&nbsp;</span></a>';
56 } 54 }
57} 55}
58 56
59function ts_getInnerText(el) { 57function ts_getInnerText(el) {
60 if (typeof el == "string") return el; 58 if (typeof el == "string") return el;
61 if (typeof el == "undefined") { return el }; 59 if (typeof el == "undefined") { return el };
62 if (el.innerText) return el.innerText;//Not needed but it is faster 60 if (el.innerText) return el.innerText;//Not needed but it is faster
63 var str = ""; 61 var str = "";
64 62
65 var cs = el.childNodes; 63 var cs = el.childNodes;
66 var l = cs.length; 64 var l = cs.length;
67 for (var i = 0; i < l; i++) { 65 for (var i = 0; i < l; i++) {
68 switch (cs[i].nodeType) { 66 switch (cs[i].nodeType) {
69 case 1: //ELEMENT_NODE 67 case 1: //ELEMENT_NODE
70 str += ts_getInnerText(cs[i]); 68 str += ts_getInnerText(cs[i]);
71 break; 69 break;
72 case 3://TEXT_NODE 70 case 3://TEXT_NODE
73 str += cs[i].nodeValue; 71 str += cs[i].nodeValue;
74 break; 72 break;
75 } 73 }
76 } 74 }
77 return str; 75 return str;
78} 76}
79 77
80function ts_resortTable(lnk,clid) { 78function ts_resortTable(lnk,clid) {
81 // get the span 79 // get the span
82 var span; 80 var span;
83 for (var ci=0;ci<lnk.childNodes.length;ci++) { 81 for (var ci=0;ci<lnk.childNodes.length;ci++) {
84 if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci]; 82 if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
85 } 83 }
86 var spantext = ts_getInnerText(span); 84 var spantext = ts_getInnerText(span);
87 var td = lnk.parentNode; 85 var td = lnk.parentNode;
88 var column = clid || td.cellIndex; 86 var column = clid || td.cellIndex;
89 var table = getParent(td,'TABLE'); 87 var table = getParent(td,'TABLE');
90 88
91 // Work out a type for the column 89 // Work out a type for the column
92 if (table.rows.length <= 1) return; 90 if (table.rows.length <= 1) return;
93 var itm = ts_getInnerText(table.rows[1].cells[column]); 91 var itm = ts_getInnerText(table.rows[1].cells[column]);
94 sortfn = ts_sort_caseinsensitive; 92 sortfn = ts_sort_caseinsensitive;
95 if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) { 93 if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) {
96 sortfn = ts_sort_date; 94 sortfn = ts_sort_date;
97 } 95 }
98 if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) { 96 if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) {
99 sortfn = ts_sort_date; 97 sortfn = ts_sort_date;
100 } 98 }
101 if (itm.match(/^[£$]/)) { 99 if (itm.match(/^[£$]/)) {
102 sortfn = ts_sort_currency; 100 sortfn = ts_sort_currency;
103 } 101 }
104 if (itm.match(/^[\d\.]+$/)) { 102 if (itm.match(/^[\d\.]+$/)) {
105 sortfn = ts_sort_numeric; 103 sortfn = ts_sort_numeric;
106 } 104 }
107 SORT_COLUMN_INDEX = column; 105 SORT_COLUMN_INDEX = column;
108 var firstRow = new Array(); 106 var firstRow = new Array();
109 var newRows = new Array(); 107 var newRows = new Array();
110 for (i=0;i<table.rows[0].length;i++) { 108 for (i=0;i<table.rows[0].length;i++) {
111 firstRow[i] = table.rows[0][i]; 109 firstRow[i] = table.rows[0][i];
112 } 110 }
113 111
114 for (j=1;j<table.rows.length;j++) { 112 for (j=1;j<table.rows.length;j++) {
115 newRows[j-1] = table.rows[j]; 113 newRows[j-1] = table.rows[j];
116 } 114 }
117 newRows.sort(sortfn); 115 newRows.sort(sortfn);
118 116
119 if (span.getAttribute("sortdir") == 'down') { 117 if (span.getAttribute("sortdir") == 'down') {
120 ARROW = '&nbsp;&nbsp;&uarr;'; 118 ARROW = '&nbsp;&nbsp;&uarr;';
121 newRows.reverse(); 119 newRows.reverse();
122 span.setAttribute('sortdir','up'); 120 span.setAttribute('sortdir','up');
123 } else { 121 } else {
124 ARROW = '&nbsp;&nbsp;&darr;'; 122 ARROW = '&nbsp;&nbsp;&darr;';
125 span.setAttribute('sortdir','down'); 123 span.setAttribute('sortdir','down');
126 } 124 }
127 125
128 // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones 126 // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
129 // don't do sortbottom rows 127 // don't do sortbottom rows
130 for (i=0;i<newRows.length;i++) { 128 for (i=0;i<newRows.length;i++) {
131 if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) { 129 if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) {
132 table.tBodies[0].appendChild(newRows[i]); 130 table.tBodies[0].appendChild(newRows[i]);
133 } 131 }
134 } 132 }
135 // do sortbottom rows only 133 // do sortbottom rows only
136 for (i=0;i<newRows.length;i++) { 134 for (i=0;i<newRows.length;i++) {
137 if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) { 135 if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) {
138 table.tBodies[0].appendChild(newRows[i]); 136 table.tBodies[0].appendChild(newRows[i]);
139 } 137 }
140 } 138 }
141 139
142 // Delete any other arrows there may be showing 140 // Delete any other arrows there may be showing
143 var allspans = document.getElementsByTagName("span"); 141 var allspans = document.getElementsByTagName("span");
144 for (var ci=0;ci<allspans.length;ci++) { 142 for (var ci=0;ci<allspans.length;ci++) {
145 if (allspans[ci].className == 'sortarrow') { 143 if (allspans[ci].className == 'sortarrow') {
146 if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us? 144 if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
147 allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;'; 145 allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';
148 } 146 }
149 } 147 }
150 } 148 }
diff --git a/frontend/beta/js/Clipperz/Set.js b/frontend/beta/js/Clipperz/Set.js
index 7023888..b3831a4 100644
--- a/frontend/beta/js/Clipperz/Set.js
+++ b/frontend/beta/js/Clipperz/Set.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26 24
27if (typeof(Clipperz) == 'undefined') { 25if (typeof(Clipperz) == 'undefined') {
28 Clipperz = {}; 26 Clipperz = {};
29} 27}
30 28
31//############################################################################# 29//#############################################################################
32 30
33Clipperz.Set = function(args) { 31Clipperz.Set = function(args) {
34 args = args || {}; 32 args = args || {};
35 //MochiKit.Base.bindMethods(this); 33 //MochiKit.Base.bindMethods(this);
36 34
37 if (args.items != null) { 35 if (args.items != null) {
38 this._items = args.items.slice(); 36 this._items = args.items.slice();
39 } else { 37 } else {
40 this._items = []; 38 this._items = [];
41 } 39 }
42 40
43 return this; 41 return this;
44} 42}
45 43
46//============================================================================= 44//=============================================================================
47 45
48Clipperz.Set.prototype = MochiKit.Base.update(null, { 46Clipperz.Set.prototype = MochiKit.Base.update(null, {
49 47
50 //------------------------------------------------------------------------- 48 //-------------------------------------------------------------------------
51 49
52 'toString': function() { 50 'toString': function() {
53 return "Clipperz.Set"; 51 return "Clipperz.Set";
54 }, 52 },
55 53
56 //------------------------------------------------------------------------- 54 //-------------------------------------------------------------------------
57 55
58 'items': function() { 56 'items': function() {
59 return this._items; 57 return this._items;
60 }, 58 },
61 59
62 //------------------------------------------------------------------------- 60 //-------------------------------------------------------------------------
63 61
64 'popAnItem': function() { 62 'popAnItem': function() {
65 var result; 63 var result;
66 64
67 if (this.size() > 0) { 65 if (this.size() > 0) {
68 result = this.items().pop(); 66 result = this.items().pop();
69 } else { 67 } else {
70 result = null; 68 result = null;
71 } 69 }
72 70
73 return result; 71 return result;
74 }, 72 },
75 73
76 //------------------------------------------------------------------------- 74 //-------------------------------------------------------------------------
77 75
78 'allItems': function() { 76 'allItems': function() {
79 return this.items(); 77 return this.items();
80 }, 78 },
81 79
82 //------------------------------------------------------------------------- 80 //-------------------------------------------------------------------------
83 81
84 'contains': function(anItem) { 82 'contains': function(anItem) {
85 return (this.indexOf(anItem) != -1); 83 return (this.indexOf(anItem) != -1);
86 }, 84 },
87 85
88 //------------------------------------------------------------------------- 86 //-------------------------------------------------------------------------
89 87
90 'indexOf': function(anItem) { 88 'indexOf': function(anItem) {
91 varresult; 89 varresult;
92 vari, c; 90 vari, c;
93 91
94 result = -1; 92 result = -1;
95 93
96 c = this.items().length; 94 c = this.items().length;
97 for (i=0; (i<c) && (result == -1); i++) { 95 for (i=0; (i<c) && (result == -1); i++) {
98 if (this.items()[i] === anItem) { 96 if (this.items()[i] === anItem) {
99 result = i; 97 result = i;
100 } 98 }
101 } 99 }
102 100
103 return result; 101 return result;
104 }, 102 },
105 103
106 //------------------------------------------------------------------------- 104 //-------------------------------------------------------------------------
107 105
108 'add': function(anItem) { 106 'add': function(anItem) {
109 if (anItem.constructor == Array) { 107 if (anItem.constructor == Array) {
110 MochiKit.Base.map(MochiKit.Base.bind(this,add, this), anItem); 108 MochiKit.Base.map(MochiKit.Base.bind(this,add, this), anItem);
111 } else { 109 } else {
112 if (! this.contains(anItem)) { 110 if (! this.contains(anItem)) {
113 this.items().push(anItem); 111 this.items().push(anItem);
114 } 112 }
115 } 113 }
116 }, 114 },
117 115
118 //------------------------------------------------------------------------- 116 //-------------------------------------------------------------------------
119 117
120 'debug': function() { 118 'debug': function() {
121 vari, c; 119 vari, c;
122 120
123 result = -1; 121 result = -1;
124 122
125 c = this.items().length; 123 c = this.items().length;
126 for (i=0; i<c; i++) { 124 for (i=0; i<c; i++) {
127 alert("[" + i + "] " + this.items()[i].label); 125 alert("[" + i + "] " + this.items()[i].label);
128 } 126 }
129 }, 127 },
130 128
131 //------------------------------------------------------------------------- 129 //-------------------------------------------------------------------------
132 130
133 'remove': function(anItem) { 131 'remove': function(anItem) {
134 if (anItem.constructor == Array) { 132 if (anItem.constructor == Array) {
135 MochiKit.Base.map(MochiKit.Base.bind(this.remove, this), anItem); 133 MochiKit.Base.map(MochiKit.Base.bind(this.remove, this), anItem);
136 } else { 134 } else {
137 varitemIndex; 135 varitemIndex;
138 136
139 itemIndex = this.indexOf(anItem); 137 itemIndex = this.indexOf(anItem);
140 if (itemIndex != -1) { 138 if (itemIndex != -1) {
141 this.items().splice(itemIndex, 1); 139 this.items().splice(itemIndex, 1);
142 } 140 }
143 } 141 }
144 }, 142 },
145 143
146 //------------------------------------------------------------------------- 144 //-------------------------------------------------------------------------
147 145
148 'size': function() { 146 'size': function() {
149 return this.items().length; 147 return this.items().length;
150 }, 148 },
diff --git a/frontend/beta/js/Clipperz/Signal.js b/frontend/beta/js/Clipperz/Signal.js
index 8ed37cc..996c398 100644
--- a/frontend/beta/js/Clipperz/Signal.js
+++ b/frontend/beta/js/Clipperz/Signal.js
@@ -1,68 +1,66 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.Signal) == 'undefined') { Clipperz.Signal = {}; } 25if (typeof(Clipperz.Signal) == 'undefined') { Clipperz.Signal = {}; }
28 26
29Clipperz.Signal.VERSION = "0.1"; 27Clipperz.Signal.VERSION = "0.1";
30Clipperz.Signal.NAME = "Clipperz.Signal"; 28Clipperz.Signal.NAME = "Clipperz.Signal";
31 29
32MochiKit.Base.update(Clipperz.Signal, { 30MochiKit.Base.update(Clipperz.Signal, {
33 31
34 //------------------------------------------------------------------------- 32 //-------------------------------------------------------------------------
35 33
36 '__repr__': function () { 34 '__repr__': function () {
37 return "[" + this.NAME + " " + this.VERSION + "]"; 35 return "[" + this.NAME + " " + this.VERSION + "]";
38 }, 36 },
39 37
40 //------------------------------------------------------------------------- 38 //-------------------------------------------------------------------------
41 39
42 'toString': function () { 40 'toString': function () {
43 return this.__repr__(); 41 return this.__repr__();
44 }, 42 },
45 43
46 //------------------------------------------------------------------------- 44 //-------------------------------------------------------------------------
47 45
48 'fireNativeEvent': function(element, eventName) { 46 'fireNativeEvent': function(element, eventName) {
49 if (element.fireEvent) { 47 if (element.fireEvent) {
50 // MSIE 48 // MSIE
51 element.fireEvent(eventName); 49 element.fireEvent(eventName);
52 } else { 50 } else {
53 // W3C 51 // W3C
54 var event; 52 var event;
55 53
56 event = document.createEvent("HTMLEvents"); 54 event = document.createEvent("HTMLEvents");
57 event.initEvent(eventName.replace(/^on/, ""), true, true); 55 event.initEvent(eventName.replace(/^on/, ""), true, true);
58 element.dispatchEvent(event); 56 element.dispatchEvent(event);
59 } 57 }
60 }, 58 },
61 59
62 //------------------------------------------------------------------------- 60 //-------------------------------------------------------------------------
63 __syntaxFix__: "syntax fix" 61 __syntaxFix__: "syntax fix"
64 62
65}); 63});
66 64
67 65
68 66
diff --git a/frontend/beta/js/Clipperz/Style.js b/frontend/beta/js/Clipperz/Style.js
index 1eecdd1..02cf2f0 100644
--- a/frontend/beta/js/Clipperz/Style.js
+++ b/frontend/beta/js/Clipperz/Style.js
@@ -1,70 +1,68 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.Style) == 'undefined') { Clipperz.Style = {}; } 25if (typeof(Clipperz.Style) == 'undefined') { Clipperz.Style = {}; }
28 26
29Clipperz.Style.VERSION = "0.1"; 27Clipperz.Style.VERSION = "0.1";
30Clipperz.Style.NAME = "Clipperz.DOM"; 28Clipperz.Style.NAME = "Clipperz.DOM";
31 29
32MochiKit.Base.update(Clipperz.Style, { 30MochiKit.Base.update(Clipperz.Style, {
33 31
34 //------------------------------------------------------------------------- 32 //-------------------------------------------------------------------------
35 33
36 '__repr__': function () { 34 '__repr__': function () {
37 return "[" + this.NAME + " " + this.VERSION + "]"; 35 return "[" + this.NAME + " " + this.VERSION + "]";
38 }, 36 },
39 37
40 //------------------------------------------------------------------------- 38 //-------------------------------------------------------------------------
41 39
42 'toString': function () { 40 'toString': function () {
43 return this.__repr__(); 41 return this.__repr__();
44 }, 42 },
45 43
46 //------------------------------------------------------------------------- 44 //-------------------------------------------------------------------------
47 45
48 'applyZebraStylesToTable': function(aTable) { 46 'applyZebraStylesToTable': function(aTable) {
49 var tbody; 47 var tbody;
50 var tbodyRows; 48 var tbodyRows;
51 var i,c; 49 var i,c;
52 50
53 tbody = MochiKit.DOM.getFirstElementByTagAndClassName('tbody', null, aTable); 51 tbody = MochiKit.DOM.getFirstElementByTagAndClassName('tbody', null, aTable);
54 tbodyRows = tbody.childNodes; 52 tbodyRows = tbody.childNodes;
55 // tbodyRows = MochiKit.DOM.getElementsByTagAndClassName('tr', null, tbody) 53 // tbodyRows = MochiKit.DOM.getElementsByTagAndClassName('tr', null, tbody)
56 c = tbodyRows.length; 54 c = tbodyRows.length;
57 for (i=0; i<c; i++) { 55 for (i=0; i<c; i++) {
58 var element; 56 var element;
59 57
60 element = YAHOO.ext.Element.get(tbodyRows[i]); 58 element = YAHOO.ext.Element.get(tbodyRows[i]);
61 element.addClass(((i%2 == 0) ? "zebra_odd": "zebra_even")); 59 element.addClass(((i%2 == 0) ? "zebra_odd": "zebra_even"));
62 element.removeClass(((i%2 == 1) ? "zebra_odd": "zebra_even")); 60 element.removeClass(((i%2 == 1) ? "zebra_odd": "zebra_even"));
63 } 61 }
64 }, 62 },
65 63
66 //------------------------------------------------------------------------- 64 //-------------------------------------------------------------------------
67 __syntaxFix__: "syntax fix" 65 __syntaxFix__: "syntax fix"
68 66
69}); 67});
70 68
diff --git a/frontend/beta/js/Clipperz/YUI/Collapser.js b/frontend/beta/js/Clipperz/YUI/Collapser.js
index b104877..849cbe9 100644
--- a/frontend/beta/js/Clipperz/YUI/Collapser.js
+++ b/frontend/beta/js/Clipperz/YUI/Collapser.js
@@ -1,70 +1,68 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.YUI) == 'undefined') { Clipperz.YUI = {}; } 25if (typeof(Clipperz.YUI) == 'undefined') { Clipperz.YUI = {}; }
28 26
29 //found on YUI-EXT forum (http://www.yui-ext.com/forum/viewtopic.php?t=683&highlight=accordion) 27 //found on YUI-EXT forum (http://www.yui-ext.com/forum/viewtopic.php?t=683&highlight=accordion)
30Clipperz.YUI.Collapser = function(clickEl, collapseEl, initiallyCollapsed) { 28Clipperz.YUI.Collapser = function(clickEl, collapseEl, initiallyCollapsed) {
31 this.clickEl = getEl(clickEl); 29 this.clickEl = getEl(clickEl);
32 this.collapseEl = getEl(collapseEl); 30 this.collapseEl = getEl(collapseEl);
33 this.clickEl.addClass('collapser-expanded'); 31 this.clickEl.addClass('collapser-expanded');
34 if (initiallyCollapsed == true) { 32 if (initiallyCollapsed == true) {
35 this.afterCollapse(); 33 this.afterCollapse();
36 } 34 }
37 this.clickEl.mon('click', function(){ 35 this.clickEl.mon('click', function(){
38 this.collapsed === true ? this.expand() : this.collapse(); 36 this.collapsed === true ? this.expand() : this.collapse();
39 }, this, true); 37 }, this, true);
40}; 38};
41 39
42Clipperz.YUI.Collapser.prototype = { 40Clipperz.YUI.Collapser.prototype = {
43 'collapse': function(){ 41 'collapse': function(){
44 this.collapseEl.clip(); 42 this.collapseEl.clip();
45 this.collapseEl.setHeight(1, true, .35, this.afterCollapse.createDelegate(this), YAHOO.util.Easing.easeOut); 43 this.collapseEl.setHeight(1, true, .35, this.afterCollapse.createDelegate(this), YAHOO.util.Easing.easeOut);
46 this.clickEl.replaceClass('collapser-expanded','collapser-collapsed'); 44 this.clickEl.replaceClass('collapser-expanded','collapser-collapsed');
47 }, 45 },
48 46
49 'afterCollapse': function(){ 47 'afterCollapse': function(){
50 this.collapsed = true; 48 this.collapsed = true;
51 this.collapseEl.setDisplayed(false); 49 this.collapseEl.setDisplayed(false);
52 this.clickEl.replaceClass('collapser-expanded','collapser-collapsed'); 50 this.clickEl.replaceClass('collapser-expanded','collapser-collapsed');
53 }, 51 },
54 52
55 'expand': function(){ 53 'expand': function(){
56 this.collapseEl.setDisplayed(true); 54 this.collapseEl.setDisplayed(true);
57 this.collapseEl.autoHeight(true, .35, this.afterExpand.createDelegate(this), YAHOO.util.Easing.easeOut); 55 this.collapseEl.autoHeight(true, .35, this.afterExpand.createDelegate(this), YAHOO.util.Easing.easeOut);
58 this.clickEl.replaceClass('collapser-collapsed','collapser-expanded'); 56 this.clickEl.replaceClass('collapser-collapsed','collapser-expanded');
59 }, 57 },
60 58
61 'afterExpand': function(){ 59 'afterExpand': function(){
62 this.collapsed = false; 60 this.collapsed = false;
63 this.collapseEl.unclip(); 61 this.collapseEl.unclip();
64 this.collapseEl.setStyle('height', ''); 62 this.collapseEl.setStyle('height', '');
65 this.clickEl.replaceClass('collapser-collapsed','collapser-expanded'); 63 this.clickEl.replaceClass('collapser-collapsed','collapser-expanded');
66 }, 64 },
67 65
68 //----------------------------------------------------- 66 //-----------------------------------------------------
69 __syntaxFix__: '__syntaxFix__' 67 __syntaxFix__: '__syntaxFix__'
70}; 68};
diff --git a/frontend/beta/js/Clipperz/YUI/DomHelper.js b/frontend/beta/js/Clipperz/YUI/DomHelper.js
index 05edc49..2c0ba34 100644
--- a/frontend/beta/js/Clipperz/YUI/DomHelper.js
+++ b/frontend/beta/js/Clipperz/YUI/DomHelper.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.ext) == 'undefined') { Clipperz.ext = {}; } 25if (typeof(Clipperz.ext) == 'undefined') { Clipperz.ext = {}; }
28 26
29/** 27/**
30 * @class Clipperz.YUI.DomHelper 28 * @class Clipperz.YUI.DomHelper
31 * Utility class for working with DOM and/or Templates. It transparently supports using HTML fragments or DOM. 29 * Utility class for working with DOM and/or Templates. It transparently supports using HTML fragments or DOM.
32 * For more information see <a href="http://www.jackslocum.com/yui/2006/10/06/domhelper-create-elements-using-dom-html-fragments-or-templates/">this blog post with examples</a>. 30 * For more information see <a href="http://www.jackslocum.com/yui/2006/10/06/domhelper-create-elements-using-dom-html-fragments-or-templates/">this blog post with examples</a>.
33 * @singleton 31 * @singleton
34 */ 32 */
35Clipperz.YUI.DomHelper = new function(){ 33Clipperz.YUI.DomHelper = new function(){
36 /**@private*/ 34 /**@private*/
37 var d = document; 35 var d = document;
38 var tempTableEl = null; 36 var tempTableEl = null;
39 /** True to force the use of DOM instead of html fragments @type Boolean */ 37 /** True to force the use of DOM instead of html fragments @type Boolean */
40 this.useDom = false; 38 this.useDom = false;
41 var emptyTags = /^(?:base|basefont|br|frame|hr|img|input|isindex|link|meta|nextid|range|spacer|wbr|audioscope|area|param|keygen|col|limittext|spot|tab|over|right|left|choose|atop|of)$/i; 39 var emptyTags = /^(?:base|basefont|br|frame|hr|img|input|isindex|link|meta|nextid|range|spacer|wbr|audioscope|area|param|keygen|col|limittext|spot|tab|over|right|left|choose|atop|of)$/i;
42 /** 40 /**
43 * Applies a style specification to an element 41 * Applies a style specification to an element
44 * @param {String/HTMLElement} el The element to apply styles to 42 * @param {String/HTMLElement} el The element to apply styles to
45 * @param {String/Object/Function} styles A style specification string eg "width:100px", or object in the form {width:"100px"}, or 43 * @param {String/Object/Function} styles A style specification string eg "width:100px", or object in the form {width:"100px"}, or
46 * a function which returns such a specification. 44 * a function which returns such a specification.
47 */ 45 */
48 this.applyStyles = function(el, styles){ 46 this.applyStyles = function(el, styles){
49 if(styles){ 47 if(styles){
50 var D = YAHOO.util.Dom; 48 var D = YAHOO.util.Dom;
51 if (typeof styles == "string"){ 49 if (typeof styles == "string"){
52 var re = /\s?([a-z\-]*)\:([^;]*);?/gi; 50 var re = /\s?([a-z\-]*)\:([^;]*);?/gi;
53 var matches; 51 var matches;
54 while ((matches = re.exec(styles)) != null){ 52 while ((matches = re.exec(styles)) != null){
55 D.setStyle(el, matches[1], matches[2]); 53 D.setStyle(el, matches[1], matches[2]);
56 } 54 }
57 }else if (typeof styles == "object"){ 55 }else if (typeof styles == "object"){
58 for (var style in styles){ 56 for (var style in styles){
59 D.setStyle(el, style, styles[style]); 57 D.setStyle(el, style, styles[style]);
60 } 58 }
61 }else if (typeof styles == "function"){ 59 }else if (typeof styles == "function"){
62 Clipperz.YUI.DomHelper.applyStyles(el, styles.call()); 60 Clipperz.YUI.DomHelper.applyStyles(el, styles.call());
63 } 61 }
64 } 62 }
65 }; 63 };
66 64
67 // build as innerHTML where available 65 // build as innerHTML where available
68 /** @ignore */ 66 /** @ignore */
69 var createHtml = function(o){ 67 var createHtml = function(o){
70 var b = ''; 68 var b = '';
71 69
72 if(typeof(o['html']) != 'undefined') { 70 if(typeof(o['html']) != 'undefined') {
73 o['html'] = Clipperz.Base.sanitizeString(o['html']); 71 o['html'] = Clipperz.Base.sanitizeString(o['html']);
74 } else if (typeof(o['htmlString']) != 'undefined') { 72 } else if (typeof(o['htmlString']) != 'undefined') {
75 o['html'] = o['htmlString']; 73 o['html'] = o['htmlString'];
76 delete o.htmlString; 74 delete o.htmlString;
77 } 75 }
78 76
79 b += '<' + o.tag; 77 b += '<' + o.tag;
80 for(var attr in o){ 78 for(var attr in o){
81 if(attr == 'tag' || attr == 'children' || attr == 'html' || typeof o[attr] == 'function') continue; 79 if(attr == 'tag' || attr == 'children' || attr == 'html' || typeof o[attr] == 'function') continue;
82 if(attr == 'style'){ 80 if(attr == 'style'){
83 var s = o['style']; 81 var s = o['style'];
84 if(typeof s == 'function'){ 82 if(typeof s == 'function'){
85 s = s.call(); 83 s = s.call();
86 } 84 }
87 if(typeof s == 'string'){ 85 if(typeof s == 'string'){
88 b += ' style="' + s + '"'; 86 b += ' style="' + s + '"';
89 }else if(typeof s == 'object'){ 87 }else if(typeof s == 'object'){
90 b += ' style="'; 88 b += ' style="';
91 for(var key in s){ 89 for(var key in s){
92 if(typeof s[key] != 'function'){ 90 if(typeof s[key] != 'function'){
93 b += key + ':' + s[key] + ';'; 91 b += key + ':' + s[key] + ';';
94 } 92 }
95 } 93 }
96 b += '"'; 94 b += '"';
97 } 95 }
98 }else{ 96 }else{
99 if(attr == 'cls'){ 97 if(attr == 'cls'){
100 b += ' class="' + o['cls'] + '"'; 98 b += ' class="' + o['cls'] + '"';
101 }else if(attr == 'htmlFor'){ 99 }else if(attr == 'htmlFor'){
102 b += ' for="' + o['htmlFor'] + '"'; 100 b += ' for="' + o['htmlFor'] + '"';
103 }else{ 101 }else{
104 b += ' ' + attr + '="' + o[attr] + '"'; 102 b += ' ' + attr + '="' + o[attr] + '"';
105 } 103 }
106 } 104 }
107 } 105 }
108 if(emptyTags.test(o.tag)){ 106 if(emptyTags.test(o.tag)){
109 b += ' />'; 107 b += ' />';
110 }else{ 108 }else{
111 b += '>'; 109 b += '>';
112 if(o.children){ 110 if(o.children){
113 for(var i = 0, len = o.children.length; i < len; i++) { 111 for(var i = 0, len = o.children.length; i < len; i++) {
114 b += createHtml(o.children[i], b); 112 b += createHtml(o.children[i], b);
115 } 113 }
116 } 114 }
117 if(o.html){ 115 if(o.html){
118 b += o.html; 116 b += o.html;
119 } 117 }
120 b += '</' + o.tag + '>'; 118 b += '</' + o.tag + '>';
121 } 119 }
122 return b; 120 return b;
123 } 121 }
124 122
125 // build as dom 123 // build as dom
126 /** @ignore */ 124 /** @ignore */
127 var createDom = function(o, parentNode){ 125 var createDom = function(o, parentNode){
128 var el = d.createElement(o.tag); 126 var el = d.createElement(o.tag);
129 var useSet = el.setAttribute ? true : false; // In IE some elements don't have setAttribute 127 var useSet = el.setAttribute ? true : false; // In IE some elements don't have setAttribute
130 for(var attr in o){ 128 for(var attr in o){
131 if(attr == 'tag' || attr == 'children' || attr == 'html' || attr == 'style' || typeof o[attr] == 'function') continue; 129 if(attr == 'tag' || attr == 'children' || attr == 'html' || attr == 'style' || typeof o[attr] == 'function') continue;
132 if(attr=='cls'){ 130 if(attr=='cls'){
133 el.className = o['cls']; 131 el.className = o['cls'];
134 }else{ 132 }else{
135 if(useSet) el.setAttribute(attr, o[attr]); 133 if(useSet) el.setAttribute(attr, o[attr]);
136 else el[attr] = o[attr]; 134 else el[attr] = o[attr];
137 } 135 }
138 } 136 }
139 Clipperz.YUI.DomHelper.applyStyles(el, o.style); 137 Clipperz.YUI.DomHelper.applyStyles(el, o.style);
140 if(o.children){ 138 if(o.children){
141 for(var i = 0, len = o.children.length; i < len; i++) { 139 for(var i = 0, len = o.children.length; i < len; i++) {
142 createDom(o.children[i], el); 140 createDom(o.children[i], el);
143 } 141 }
144 } 142 }
145 if(o.html){ 143 if(o.html){
146 el.innerHTML = o.html; 144 el.innerHTML = o.html;
147 } 145 }
148 if(parentNode){ 146 if(parentNode){
149 parentNode.appendChild(el); 147 parentNode.appendChild(el);
150 } 148 }
diff --git a/frontend/beta/js/Clipperz/YUI/DomQuery.js b/frontend/beta/js/Clipperz/YUI/DomQuery.js
index 4ad4193..6e54b6c 100644
--- a/frontend/beta/js/Clipperz/YUI/DomQuery.js
+++ b/frontend/beta/js/Clipperz/YUI/DomQuery.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26/* 24/*
27 * yui-ext 0.40 25 * yui-ext 0.40
28 * Copyright(c) 2006, Jack Slocum. 26 * Copyright(c) 2006, Jack Slocum.
29 */ 27 */
30 28
31/** 29/**
32 * @class Ext.DomQuery 30 * @class Ext.DomQuery
33 * Provides high performance selector/xpath processing by compiling queries into reusable functions. 31 * Provides high performance selector/xpath processing by compiling queries into reusable functions.
34 * New pseudo classes and matchers can be plugged. It works on HTML and XML documents (if a content node is passed in). 32 * New pseudo classes and matchers can be plugged. It works on HTML and XML documents (if a content node is passed in).
35 * @singleton 33 * @singleton
36 */ 34 */
37Ext.DomQuery = function(){ 35Ext.DomQuery = function(){
38 var cache = {}, simpleCache = {}, valueCache = {}; 36 var cache = {}, simpleCache = {}, valueCache = {};
39 var nonSpace = /\S/; 37 var nonSpace = /\S/;
40 var trimRe = /^\s*(.*?)\s*$/; 38 var trimRe = /^\s*(.*?)\s*$/;
41 var tplRe = /\{(\d+)\}/g; 39 var tplRe = /\{(\d+)\}/g;
42 var modeRe = /^(\s?[\/>]\s?|\s|$)/; 40 var modeRe = /^(\s?[\/>]\s?|\s|$)/;
43 var clsRes = {}; 41 var clsRes = {};
44 42
45 function child(p, index){ 43 function child(p, index){
46 var i = 0; 44 var i = 0;
47 var n = p.firstChild; 45 var n = p.firstChild;
48 while(n){ 46 while(n){
49 if(n.nodeType == 1){ 47 if(n.nodeType == 1){
50 i++; 48 i++;
51 if(i == index){ 49 if(i == index){
52 return n; 50 return n;
53 } 51 }
54 } 52 }
55 n = n.nextSibling; 53 n = n.nextSibling;
56 } 54 }
57 return null; 55 return null;
58 }; 56 };
59 57
60 function next(d){ 58 function next(d){
61 var n = d.nextSibling; 59 var n = d.nextSibling;
62 while(n && n.nodeType != 1){ 60 while(n && n.nodeType != 1){
63 n = n.nextSibling; 61 n = n.nextSibling;
64 } 62 }
65 return n; 63 return n;
66 }; 64 };
67 65
68 function prev(d){ 66 function prev(d){
69 var n = d.previousSibling; 67 var n = d.previousSibling;
70 while(n && n.nodeType != 1){ 68 while(n && n.nodeType != 1){
71 n = n.previousSibling; 69 n = n.previousSibling;
72 } 70 }
73 return n; 71 return n;
74 }; 72 };
75 73
76 function clean(d){ 74 function clean(d){
77 var n = d.firstChild, ni = -1; 75 var n = d.firstChild, ni = -1;
78 while(n){ 76 while(n){
79 var nx = n.nextSibling; 77 var nx = n.nextSibling;
80 if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){ 78 if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){
81 d.removeChild(n); 79 d.removeChild(n);
82 }else{ 80 }else{
83 n.nodeIndex = ++ni; 81 n.nodeIndex = ++ni;
84 } 82 }
85 n = nx; 83 n = nx;
86 } 84 }
87 return this; 85 return this;
88 }; 86 };
89 87
90 function byClassName(c, a, v){ 88 function byClassName(c, a, v){
91 if(!v){ 89 if(!v){
92 return c; 90 return c;
93 } 91 }
94 var re = clsRes[v]; 92 var re = clsRes[v];
95 if(!re){ 93 if(!re){
96 re = new RegExp('(?:^|\\s)(?:' + v + ')(?:\\s|$)'); 94 re = new RegExp('(?:^|\\s)(?:' + v + ')(?:\\s|$)');
97 clsRes[v] = re; 95 clsRes[v] = re;
98 } 96 }
99 var r = []; 97 var r = [];
100 for(var i = 0, ci; ci = c[i]; i++){ 98 for(var i = 0, ci; ci = c[i]; i++){
101 if(re.test(ci.className)){ 99 if(re.test(ci.className)){
102 r[r.length] = ci; 100 r[r.length] = ci;
103 } 101 }
104 } 102 }
105 return r; 103 return r;
106 }; 104 };
107 105
108 function convert(c){ 106 function convert(c){
109 if(c.slice){ 107 if(c.slice){
110 return c; 108 return c;
111 } 109 }
112 var r = []; 110 var r = [];
113 for(var i = 0, l = c.length; i < l; i++){ 111 for(var i = 0, l = c.length; i < l; i++){
114 r[r.length] = c[i]; 112 r[r.length] = c[i];
115 } 113 }
116 return r; 114 return r;
117 }; 115 };
118 116
119 function attrValue(n, attr){ 117 function attrValue(n, attr){
120 if(!n.tagName && typeof n.length != 'undefined'){ 118 if(!n.tagName && typeof n.length != 'undefined'){
121 n = n[0]; 119 n = n[0];
122 } 120 }
123 if(!n){ 121 if(!n){
124 return null; 122 return null;
125 } 123 }
126 if(attr == 'for'){ 124 if(attr == 'for'){
127 return n.htmlFor; 125 return n.htmlFor;
128 } 126 }
129 if(attr == 'class' || attr == 'className'){ 127 if(attr == 'class' || attr == 'className'){
130 return n.className; 128 return n.className;
131 } 129 }
132 return n.getAttribute(attr) || n[attr]; 130 return n.getAttribute(attr) || n[attr];
133 131
134 }; 132 };
135 133
136 function getNodes(ns, mode, tagName){ 134 function getNodes(ns, mode, tagName){
137 var result = [], cs; 135 var result = [], cs;
138 if(!ns){ 136 if(!ns){
139 return result; 137 return result;
140 } 138 }
141 mode = mode ? mode.replace(trimRe, '$1') : ''; 139 mode = mode ? mode.replace(trimRe, '$1') : '';
142 tagName = tagName || '*'; 140 tagName = tagName || '*';
143 if(ns.tagName || ns == document){ 141 if(ns.tagName || ns == document){
144 ns = [ns]; 142 ns = [ns];
145 } 143 }
146 if(mode != '/' && mode != '>'){ 144 if(mode != '/' && mode != '>'){
147 for(var i = 0, ni; ni = ns[i]; i++){ 145 for(var i = 0, ni; ni = ns[i]; i++){
148 cs = ni.getElementsByTagName(tagName); 146 cs = ni.getElementsByTagName(tagName);
149 result = concat(result, cs); 147 result = concat(result, cs);
150 } 148 }
diff --git a/frontend/beta/js/Clipperz/YUI/Drawer.js b/frontend/beta/js/Clipperz/YUI/Drawer.js
index 508bfe5..2105363 100644
--- a/frontend/beta/js/Clipperz/YUI/Drawer.js
+++ b/frontend/beta/js/Clipperz/YUI/Drawer.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.YUI) == 'undefined') { Clipperz.YUI = {}; } 25if (typeof(Clipperz.YUI) == 'undefined') { Clipperz.YUI = {}; }
28 26
29 27
30Clipperz.YUI.Drawer = function(anElement, aRegion) { 28Clipperz.YUI.Drawer = function(anElement, aRegion) {
31 this._status = 'slideIn'; 29 this._status = 'slideIn';
32 30
33 this._element = YAHOO.ext.Element.get(anElement); 31 this._element = YAHOO.ext.Element.get(anElement);
34 this._region = aRegion || null; 32 this._region = aRegion || null;
35 33
36 this._collapsedElement = this.element().getChildrenByClassName("drawer-collapsed")[0]; 34 this._collapsedElement = this.element().getChildrenByClassName("drawer-collapsed")[0];
37 this._contentElement = this.element().getChildrenByClassName("drawer-content")[0]; 35 this._contentElement = this.element().getChildrenByClassName("drawer-content")[0];
38 36
39 37
40 this._wholeCollapedElement = this.enhanceCollapsedElement(); 38 this._wholeCollapedElement = this.enhanceCollapsedElement();
41 this._wholeCollapedElement.setWidth(this.region().element().getWidth()); 39 this._wholeCollapedElement.setWidth(this.region().element().getWidth());
42 this._wholeCollapedElement.setHeight(this.region().element().getHeight()); 40 this._wholeCollapedElement.setHeight(this.region().element().getHeight());
43 41
44 this._contentWrapper = this.enhanceContentElement(); 42 this._contentWrapper = this.enhanceContentElement();
45 this._contentElementActor = new YAHOO.ext.Actor(this.contentWrapper().dom); 43 this._contentElementActor = new YAHOO.ext.Actor(this.contentWrapper().dom);
46 this.contentElementActor().hide(); 44 this.contentElementActor().hide();
47 45
48 this._contentWidth = 200; 46 this._contentWidth = 200;
49}; 47};
50 48
51YAHOO.extendX(Clipperz.YUI.Drawer, YAHOO.ext.util.Observable, { 49YAHOO.extendX(Clipperz.YUI.Drawer, YAHOO.ext.util.Observable, {
52 50
53 'element': function() { 51 'element': function() {
54 return this._element; 52 return this._element;
55 }, 53 },
56 54
57 //----------------------------------------------------- 55 //-----------------------------------------------------
58 56
59 'status': function() { 57 'status': function() {
60 return this._status; 58 return this._status;
61 }, 59 },
62 60
63 'setStatus': function(aValue) { 61 'setStatus': function(aValue) {
64 this._status = aValue; 62 this._status = aValue;
65 }, 63 },
66 64
67 //----------------------------------------------------- 65 //-----------------------------------------------------
68 66
69 'collapsedElement': function() { 67 'collapsedElement': function() {
70 return this._collapsedElement; 68 return this._collapsedElement;
71 }, 69 },
72 70
73 //----------------------------------------------------- 71 //-----------------------------------------------------
74 72
75 'contentElement': function() { 73 'contentElement': function() {
76 return this._contentElement; 74 return this._contentElement;
77 }, 75 },
78 76
79 //----------------------------------------------------- 77 //-----------------------------------------------------
80 78
81 'contentElementActor': function() { 79 'contentElementActor': function() {
82 return this._contentElementActor; 80 return this._contentElementActor;
83 }, 81 },
84 82
85 //----------------------------------------------------- 83 //-----------------------------------------------------
86 84
87 'contentWrapper': function() { 85 'contentWrapper': function() {
88 return this._contentWrapper; 86 return this._contentWrapper;
89 }, 87 },
90 88
91 //----------------------------------------------------- 89 //-----------------------------------------------------
92 90
93 'contentWidth': function() { 91 'contentWidth': function() {
94 return this._contentWidth; 92 return this._contentWidth;
95 }, 93 },
96 94
97 //----------------------------------------------------- 95 //-----------------------------------------------------
98 96
99 'region': function() { 97 'region': function() {
100 return this._region; 98 return this._region;
101 }, 99 },
102 100
103 //----------------------------------------------------- 101 //-----------------------------------------------------
104 102
105 'enhanceCollapsedElement': function() { 103 'enhanceCollapsedElement': function() {
106 varwrapper; 104 varwrapper;
107 var link; 105 var link;
108 106
109 wrapper = this.collapsedElement().wrap({tag:'div', cls:'drawer-collapsedElement-wrapper', children:[ 107 wrapper = this.collapsedElement().wrap({tag:'div', cls:'drawer-collapsedElement-wrapper', children:[
110 {tag:'div', cls:'drawer-pin-button', children:[ 108 {tag:'div', cls:'drawer-pin-button', children:[
111 {tag:'a', cls:'drawer-pin-button', href:"#", children:[ 109 {tag:'a', cls:'drawer-pin-button', href:"#", children:[
112 {tag:'img', src:'./images/directLogins/drawer/mm-expand.gif'} 110 {tag:'img', src:'./images/directLogins/drawer/mm-expand.gif'}
113 ]} 111 ]}
114 ]} 112 ]}
115 ]}); 113 ]});
116 114
117 link = wrapper.getChildrenByClassName('drawer-pin-button', 'a')[0]; 115 link = wrapper.getChildrenByClassName('drawer-pin-button', 'a')[0];
118 MochiKit.Signal.connect(link.dom, 'onclick', this, 'pinDrawer'); 116 MochiKit.Signal.connect(link.dom, 'onclick', this, 'pinDrawer');
119 117
120 this.collapsedElement().setHeight('100%'); 118 this.collapsedElement().setHeight('100%');
121 this.collapsedElement().setStyle('cursor', 'pointer'); 119 this.collapsedElement().setStyle('cursor', 'pointer');
122 MochiKit.Signal.connect(this.collapsedElement().dom, 'onclick', this, 'showDrawer'); 120 MochiKit.Signal.connect(this.collapsedElement().dom, 'onclick', this, 'showDrawer');
123 121
124 return wrapper; 122 return wrapper;
125 }, 123 },
126 124
127 //----------------------------------------------------- 125 //-----------------------------------------------------
128 126
129 'enhanceContentElement': function() { 127 'enhanceContentElement': function() {
130 var wrapper; 128 var wrapper;
131 129
132 wrapper = this.contentElement().wrap({tag:'div', cls:'drawer-content-wrapper', children:[ 130 wrapper = this.contentElement().wrap({tag:'div', cls:'drawer-content-wrapper', children:[
133 {tag:'div', cls:'drawer-content-header', html:'direct login', style:'width:100%;'} 131 {tag:'div', cls:'drawer-content-header', html:'direct login', style:'width:100%;'}
134 ]}); 132 ]});
135 133
136 MochiKit.Signal.connect(wrapper.dom, 'onclick', this, 'hideDrawer'); 134 MochiKit.Signal.connect(wrapper.dom, 'onclick', this, 'hideDrawer');
137 return wrapper; 135 return wrapper;
138 }, 136 },
139 137
140 //----------------------------------------------------- 138 //-----------------------------------------------------
141 139
142 'pinDrawer': function() { 140 'pinDrawer': function() {
143 alert("pin drawer"); 141 alert("pin drawer");
144 }, 142 },
145 143
146 //----------------------------------------------------- 144 //-----------------------------------------------------
147 145
148 'showDrawer': function() { 146 'showDrawer': function() {
149 if (this.status() == 'slideIn') { 147 if (this.status() == 'slideIn') {
150 var actor; 148 var actor;
diff --git a/frontend/beta/js/Clipperz/YUI/IBLayoutManager.js b/frontend/beta/js/Clipperz/YUI/IBLayoutManager.js
index 6e2138e..d6b5782 100644
--- a/frontend/beta/js/Clipperz/YUI/IBLayoutManager.js
+++ b/frontend/beta/js/Clipperz/YUI/IBLayoutManager.js
@@ -1,111 +1,109 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.YUI) == 'undefined') { Clipperz.YUI = {}; } 25if (typeof(Clipperz.YUI) == 'undefined') { Clipperz.YUI = {}; }
28 26
29 27
30Clipperz.YUI.IBLayoutManager = function(container, config) { 28Clipperz.YUI.IBLayoutManager = function(container, config) {
31 var regionName; 29 var regionName;
32 varelement; 30 varelement;
33 31
34 config = config || {}; 32 config = config || {};
35 33
36 Clipperz.YUI.IBLayoutManager.superclass.constructor.call(this, container); 34 Clipperz.YUI.IBLayoutManager.superclass.constructor.call(this, container);
37 this.hideOnLayout = config.hideOnLayout || false; 35 this.hideOnLayout = config.hideOnLayout || false;
38 36
39 element = YAHOO.ext.Element.get(container); 37 element = YAHOO.ext.Element.get(container);
40 element.setStyle('position', 'absolute'); 38 element.setStyle('position', 'absolute');
41 element.setStyle('overflow', 'hidden'); 39 element.setStyle('overflow', 'hidden');
42 40
43 for (regionName in config.regions) { 41 for (regionName in config.regions) {
44 var newRegion; 42 var newRegion;
45 43
46 newRegion = new new Clipperz.YUI.IBLayoutRegion(this, regionName, config.regions[regionName]); 44 newRegion = new new Clipperz.YUI.IBLayoutRegion(this, regionName, config.regions[regionName]);
47 this.addRegion(regionName, newRegion); 45 this.addRegion(regionName, newRegion);
48 } 46 }
49 47
50 this.layout(); 48 this.layout();
51}; 49};
52 50
53YAHOO.extendX(Clipperz.YUI.IBLayoutManager, YAHOO.ext.LayoutManager, { 51YAHOO.extendX(Clipperz.YUI.IBLayoutManager, YAHOO.ext.LayoutManager, {
54 52
55 'toString': function() { 53 'toString': function() {
56 return "IBLayoutManager (" + this.el.id + ")"; 54 return "IBLayoutManager (" + this.el.id + ")";
57 }, 55 },
58 56
59 //----------------------------------------------------- 57 //-----------------------------------------------------
60 58
61 'add': function(aName, aPanel) { 59 'add': function(aName, aPanel) {
62 var regionName; 60 var regionName;
63 61
64 regionName = aName.toLowerCase(); 62 regionName = aName.toLowerCase();
65 return this.regions[regionName].add(aPanel); 63 return this.regions[regionName].add(aPanel);
66 }, 64 },
67 65
68 //----------------------------------------------------- 66 //-----------------------------------------------------
69 67
70 'addRegion': function(aRegion) { 68 'addRegion': function(aRegion) {
71 var regionName; 69 var regionName;
72 70
73 regionName = aRegion.name().toLowerCase(); 71 regionName = aRegion.name().toLowerCase();
74 if (!this.regions[regionName]) { 72 if (!this.regions[regionName]) {
75//MochiKit.Logging.logDebug("--- adding region with name: " + aRegion.name()); 73//MochiKit.Logging.logDebug("--- adding region with name: " + aRegion.name());
76 this.regions[regionName] = aRegion; 74 this.regions[regionName] = aRegion;
77 } else { 75 } else {
78 // ???? 76 // ????
79 } 77 }
80 78
81 return aRegion; 79 return aRegion;
82 }, 80 },
83 81
84 //----------------------------------------------------- 82 //-----------------------------------------------------
85 83
86 'getRegion': function(target){ 84 'getRegion': function(target){
87 return this.regions[target.toLowerCase()]; 85 return this.regions[target.toLowerCase()];
88 }, 86 },
89 87
90 //----------------------------------------------------- 88 //-----------------------------------------------------
91 89
92 'layout': function(){ 90 'layout': function(){
93 varregion; 91 varregion;
94 92
95//MochiKit.Logging.logDebug(">>> IBLayoutManager.layout - regions: " + Clipperz.Base.serializeJSON(MochiKit.Base.keys(this.regions))); 93//MochiKit.Logging.logDebug(">>> IBLayoutManager.layout - regions: " + Clipperz.Base.serializeJSON(MochiKit.Base.keys(this.regions)));
96 for (region in this.regions) { 94 for (region in this.regions) {
97//MochiKit.Logging.logDebug("--- IBLayoutManager.layout - region: " + region); 95//MochiKit.Logging.logDebug("--- IBLayoutManager.layout - region: " + region);
98 this.regions[region].layout(); 96 this.regions[region].layout();
99 } 97 }
100//MochiKit.Logging.logDebug("<<< IBLayoutManager.layout"); 98//MochiKit.Logging.logDebug("<<< IBLayoutManager.layout");
101 }, 99 },
102 100
103 //----------------------------------------------------- 101 //-----------------------------------------------------
104 102
105 'getSize': function() { 103 'getSize': function() {
106 return this.el.getSize(); 104 return this.el.getSize();
107 }, 105 },
108 106
109 //----------------------------------------------------- 107 //-----------------------------------------------------
110 __syntaxFix__: '__syntaxFix__' 108 __syntaxFix__: '__syntaxFix__'
111}); 109});
diff --git a/frontend/beta/js/Clipperz/YUI/IBLayoutRegion.js b/frontend/beta/js/Clipperz/YUI/IBLayoutRegion.js
index f8e0cb1..11b7a6c 100644
--- a/frontend/beta/js/Clipperz/YUI/IBLayoutRegion.js
+++ b/frontend/beta/js/Clipperz/YUI/IBLayoutRegion.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.YUI) == 'undefined') { Clipperz.YUI = {}; } 25if (typeof(Clipperz.YUI) == 'undefined') { Clipperz.YUI = {}; }
28 26
29 27
30Clipperz.YUI.IBLayoutRegion = function(aManager, aName, aConfig) { 28Clipperz.YUI.IBLayoutRegion = function(aManager, aName, aConfig) {
31 this._configuration = aConfig; 29 this._configuration = aConfig;
32 30
33 //Clipperz.YUI.IBLayoutRegion.superclass.constructor.call(); 31 //Clipperz.YUI.IBLayoutRegion.superclass.constructor.call();
34 Clipperz.YUI.IBLayoutRegion.superclass.constructor.call(this, aManager, aConfig, aName); 32 Clipperz.YUI.IBLayoutRegion.superclass.constructor.call(this, aManager, aConfig, aName);
35}; 33};
36 34
37YAHOO.extendX(Clipperz.YUI.IBLayoutRegion, YAHOO.ext.LayoutRegion, { 35YAHOO.extendX(Clipperz.YUI.IBLayoutRegion, YAHOO.ext.LayoutRegion, {
38 36
39 'toString': function() { 37 'toString': function() {
40 return "IBLayoutRegion (" + this.name() + ")"; 38 return "IBLayoutRegion (" + this.name() + ")";
41 }, 39 },
42 40
43 //----------------------------------------------------- 41 //-----------------------------------------------------
44 42
45 'name': function() { 43 'name': function() {
46 return this.position; 44 return this.position;
47 }, 45 },
48 46
49 //----------------------------------------------------- 47 //-----------------------------------------------------
50 48
51 'manager': function() { 49 'manager': function() {
52 return this.mgr; 50 return this.mgr;
53 }, 51 },
54 52
55 'configuration': function() { 53 'configuration': function() {
56 return this._configuration; 54 return this._configuration;
57 }, 55 },
58 56
59 //----------------------------------------------------- 57 //-----------------------------------------------------
60 58
61 'getAttributeValue': function(anAttribute) { 59 'getAttributeValue': function(anAttribute) {
62 var result; 60 var result;
63 61
64 switch(anAttribute) { 62 switch(anAttribute) {
65 case "top": 63 case "top":
66 result = this.element().getTop(); 64 result = this.element().getTop();
67 break; 65 break;
68 case "left": 66 case "left":
69 result = this.element().getLeft(); 67 result = this.element().getLeft();
70 break; 68 break;
71 case "bottom": 69 case "bottom":
72 result = this.element().getBottom(); 70 result = this.element().getBottom();
73 break; 71 break;
74 case "right": 72 case "right":
75 result = this.element().getRight(); 73 result = this.element().getRight();
76 break; 74 break;
77 case "height": 75 case "height":
78 result = this.element().getHeight(); 76 result = this.element().getHeight();
79 break; 77 break;
80 case "width": 78 case "width":
81 result = this.element().getWidth(); 79 result = this.element().getWidth();
82 break; 80 break;
83 } 81 }
84//MochiKit.Logging.logDebug("--- " + this.name() + " [" + anAttribute + "] = " + result); 82//MochiKit.Logging.logDebug("--- " + this.name() + " [" + anAttribute + "] = " + result);
85 83
86 return result; 84 return result;
87 }, 85 },
88 86
89 //----------------------------------------------------- 87 //-----------------------------------------------------
90 88
91 'normalizeConfigureValue': function(aConfigurationValue) { 89 'normalizeConfigureValue': function(aConfigurationValue) {
92 var result; 90 var result;
93 91
94//MochiKit.Logging.logDebug("--- normalizeConfigureValue - " + aConfigurationValue); 92//MochiKit.Logging.logDebug("--- normalizeConfigureValue - " + aConfigurationValue);
95 if (typeof(aConfigurationValue) == 'number') { 93 if (typeof(aConfigurationValue) == 'number') {
96 result = aConfigurationValue; 94 result = aConfigurationValue;
97 } else if (aConfigurationValue == 'auto') { 95 } else if (aConfigurationValue == 'auto') {
98 result = aConfigurationValue; 96 result = aConfigurationValue;
99 } else { 97 } else {
100 var splitValues; 98 var splitValues;
101 var referenceValue; 99 var referenceValue;
102 var deltaValue; 100 var deltaValue;
103 var targetRegion; 101 var targetRegion;
104 var targetAttribute; 102 var targetAttribute;
105 103
106 splitValues = aConfigurationValue.split('+'); 104 splitValues = aConfigurationValue.split('+');
107 referenceValue = Clipperz.Base.trim(splitValues[0]); 105 referenceValue = Clipperz.Base.trim(splitValues[0]);
108 deltaValue = Clipperz.Base.trim(splitValues[1] || ""); 106 deltaValue = Clipperz.Base.trim(splitValues[1] || "");
109 107
110 splitValues = referenceValue.split('.'); 108 splitValues = referenceValue.split('.');
111 targetRegion = splitValues[0]; 109 targetRegion = splitValues[0];
112 targetAttribute = splitValues[1]; 110 targetAttribute = splitValues[1];
113 111
114//MochiKit.Logging.logDebug("> " + aConfigurationValue); 112//MochiKit.Logging.logDebug("> " + aConfigurationValue);
115//MochiKit.Logging.logDebug(">> manager: " + this.manager()); 113//MochiKit.Logging.logDebug(">> manager: " + this.manager());
116//MochiKit.Logging.logDebug(">> targetRegion: " + targetRegion); 114//MochiKit.Logging.logDebug(">> targetRegion: " + targetRegion);
117//MochiKit.Logging.logDebug(">>> " + this.manager().getRegion(targetRegion)); 115//MochiKit.Logging.logDebug(">>> " + this.manager().getRegion(targetRegion));
118 targetValue = this.manager().getRegion(targetRegion).getAttributeValue(targetAttribute); 116 targetValue = this.manager().getRegion(targetRegion).getAttributeValue(targetAttribute);
119//MochiKit.Logging.logDebug(">>>> " + targetRegion + "." + targetAttribute + " + " + deltaValue + " = " + targetValue); 117//MochiKit.Logging.logDebug(">>>> " + targetRegion + "." + targetAttribute + " + " + deltaValue + " = " + targetValue);
120 118
121 result = targetValue + (deltaValue - 0); 119 result = targetValue + (deltaValue - 0);
122 120
123//MochiKit.Logging.logDebug("<<< " + aConfigurationValue + " = " + result); 121//MochiKit.Logging.logDebug("<<< " + aConfigurationValue + " = " + result);
124 } 122 }
125 123
126 return result; 124 return result;
127 }, 125 },
128 126
129 'normalizedConfiguration': function(aConfiguration) { 127 'normalizedConfiguration': function(aConfiguration) {
130 varresult; 128 varresult;
131 varkey; 129 varkey;
132 130
133 result = {}; 131 result = {};
134 132
135//MochiKit.Logging.logDebug("--- normalizedConfiguration - keys: " + Clipperz.Base.serializeJSON(MochiKit.Base.keys(aConfiguration))); 133//MochiKit.Logging.logDebug("--- normalizedConfiguration - keys: " + Clipperz.Base.serializeJSON(MochiKit.Base.keys(aConfiguration)));
136 for (key in aConfiguration) { 134 for (key in aConfiguration) {
137 if ((key == 'top') || (key == 'bottom') || (key == 'left') || (key == 'rigth') || (key == 'width') || (key == 'height')) { 135 if ((key == 'top') || (key == 'bottom') || (key == 'left') || (key == 'rigth') || (key == 'width') || (key == 'height')) {
138 result[key] = this.normalizeConfigureValue(aConfiguration[key]); 136 result[key] = this.normalizeConfigureValue(aConfiguration[key]);
139 } else { 137 } else {
140 result[key] = aConfiguration[key]; 138 result[key] = aConfiguration[key];
141 } 139 }
142 } 140 }
143 141
144 return result; 142 return result;
145 }, 143 },
146 144
147 //----------------------------------------------------- 145 //-----------------------------------------------------
148 146
149 'element': function() { 147 'element': function() {
150 return this.el; 148 return this.el;
diff --git a/frontend/beta/js/Clipperz/YUI/MessageBox.js b/frontend/beta/js/Clipperz/YUI/MessageBox.js
index c7b4702..8b8ca7f 100644
--- a/frontend/beta/js/Clipperz/YUI/MessageBox.js
+++ b/frontend/beta/js/Clipperz/YUI/MessageBox.js
@@ -1,150 +1,148 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26Clipperz.YUI.MessageBox = function(){ 24Clipperz.YUI.MessageBox = function(){
27 var dlg, opt, mask; 25 var dlg, opt, mask;
28 var bodyEl, msgEl, textboxEl, textareaEl, progressEl, pp; 26 var bodyEl, msgEl, textboxEl, textareaEl, progressEl, pp;
29 var buttons, activeTextEl, bwidth; 27 var buttons, activeTextEl, bwidth;
30 28
31 var handleButton = function(button){ 29 var handleButton = function(button){
32 if(typeof opt.fn == 'function'){ 30 if(typeof opt.fn == 'function'){
33 if(opt.fn.call(opt.scope||window, button, activeTextEl.dom.value) !== false){ 31 if(opt.fn.call(opt.scope||window, button, activeTextEl.dom.value) !== false){
34 dlg.hide(); 32 dlg.hide();
35 } 33 }
36 }else{ 34 }else{
37 dlg.hide(); 35 dlg.hide();
38 } 36 }
39 }; 37 };
40 38
41 return { 39 return {
42 updateButtons: function(b){ 40 updateButtons: function(b){
43 var width = 0; 41 var width = 0;
44 if(!b){ 42 if(!b){
45 buttons['ok'].hide(); 43 buttons['ok'].hide();
46 buttons['cancel'].hide(); 44 buttons['cancel'].hide();
47 buttons['yes'].hide(); 45 buttons['yes'].hide();
48 buttons['no'].hide(); 46 buttons['no'].hide();
49 return width; 47 return width;
50 } 48 }
51 for(var k in buttons){ 49 for(var k in buttons){
52 if(typeof buttons[k] != 'function'){ 50 if(typeof buttons[k] != 'function'){
53 if(b[k]){ 51 if(b[k]){
54 buttons[k].show(); 52 buttons[k].show();
55 buttons[k].setText(typeof b[k] == 'string' ? b[k] : YAHOO.ext.MessageBox.buttonText[k]); 53 buttons[k].setText(typeof b[k] == 'string' ? b[k] : YAHOO.ext.MessageBox.buttonText[k]);
56 width += buttons[k].el.getWidth()+15; 54 width += buttons[k].el.getWidth()+15;
57 }else{ 55 }else{
58 buttons[k].hide(); 56 buttons[k].hide();
59 } 57 }
60 } 58 }
61 } 59 }
62 return width; 60 return width;
63 }, 61 },
64 62
65 getDialog : function(){ 63 getDialog : function(){
66 if(!dlg){ 64 if(!dlg){
67 dlg = new YAHOO.ext.BasicDialog('mb-dlg', { 65 dlg = new YAHOO.ext.BasicDialog('mb-dlg', {
68 autoCreate:true, 66 autoCreate:true,
69 shadow:true, 67 shadow:true,
70 draggable:true, 68 draggable:true,
71 resizable:false, 69 resizable:false,
72 constraintoviewport:true, 70 constraintoviewport:true,
73 fixedcenter:true, 71 fixedcenter:true,
74 shim:true, 72 shim:true,
75 modal:true, 73 modal:true,
76 width:400, height:100, 74 width:400, height:100,
77 buttonAlign:'center', 75 buttonAlign:'center',
78 closeClick : function(){ 76 closeClick : function(){
79 if(opt && opt.buttons && opt.buttons.no && !opt.buttons.cancel){ 77 if(opt && opt.buttons && opt.buttons.no && !opt.buttons.cancel){
80 handleButton('no'); 78 handleButton('no');
81 }else{ 79 }else{
82 handleButton('cancel'); 80 handleButton('cancel');
83 } 81 }
84 } 82 }
85 }); 83 });
86 dlg.closeClick = function(){ 84 dlg.closeClick = function(){
87 alert('wtf'); 85 alert('wtf');
88 }; 86 };
89 mask = dlg.mask; 87 mask = dlg.mask;
90 dlg.addKeyListener(27, dlg.hide, dlg); 88 dlg.addKeyListener(27, dlg.hide, dlg);
91 buttons = {}; 89 buttons = {};
92 buttons['ok'] = dlg.addButton(this.buttonText['ok'], handleButton.createCallback('ok')); 90 buttons['ok'] = dlg.addButton(this.buttonText['ok'], handleButton.createCallback('ok'));
93 buttons['yes'] = dlg.addButton(this.buttonText['yes'], handleButton.createCallback('yes')); 91 buttons['yes'] = dlg.addButton(this.buttonText['yes'], handleButton.createCallback('yes'));
94 buttons['no'] = dlg.addButton(this.buttonText['no'], handleButton.createCallback('no')); 92 buttons['no'] = dlg.addButton(this.buttonText['no'], handleButton.createCallback('no'));
95 buttons['cancel'] = dlg.addButton(this.buttonText['cancel'], handleButton.createCallback('cancel')); 93 buttons['cancel'] = dlg.addButton(this.buttonText['cancel'], handleButton.createCallback('cancel'));
96 bodyEl = dlg.body.createChild({ 94 bodyEl = dlg.body.createChild({
97 tag:'div', 95 tag:'div',
98 html:'<span class="ext-mb-text"></span><br /><input type="text" class="ext-mb-input"><textarea class="ext-mb-textarea"></textarea><div class="ext-mb-progress-wrap"><div class="ext-mb-progress"><div class="ext-mb-progress-bar">&#160;</div></div></div>' 96 html:'<span class="ext-mb-text"></span><br /><input type="text" class="ext-mb-input"><textarea class="ext-mb-textarea"></textarea><div class="ext-mb-progress-wrap"><div class="ext-mb-progress"><div class="ext-mb-progress-bar">&#160;</div></div></div>'
99 }); 97 });
100 msgEl = bodyEl.dom.firstChild; 98 msgEl = bodyEl.dom.firstChild;
101 textboxEl = getEl(bodyEl.dom.childNodes[2]); 99 textboxEl = getEl(bodyEl.dom.childNodes[2]);
102 textboxEl.enableDisplayMode(); 100 textboxEl.enableDisplayMode();
103 textboxEl.addKeyListener([10,13], function(){ 101 textboxEl.addKeyListener([10,13], function(){
104 if(dlg.isVisible() && opt && opt.buttons){ 102 if(dlg.isVisible() && opt && opt.buttons){
105 if(opt.buttons.ok){ 103 if(opt.buttons.ok){
106 handleButton('ok'); 104 handleButton('ok');
107 }else if(opt.buttons.yes){ 105 }else if(opt.buttons.yes){
108 handleButton('yes'); 106 handleButton('yes');
109 } 107 }
110 } 108 }
111 }); 109 });
112 textareaEl = getEl(bodyEl.dom.childNodes[3]); 110 textareaEl = getEl(bodyEl.dom.childNodes[3]);
113 textareaEl.enableDisplayMode(); 111 textareaEl.enableDisplayMode();
114 progressEl = getEl(bodyEl.dom.childNodes[4]); 112 progressEl = getEl(bodyEl.dom.childNodes[4]);
115 progressEl.enableDisplayMode(); 113 progressEl.enableDisplayMode();
116 pp = getEl(progressEl.dom.firstChild.firstChild); 114 pp = getEl(progressEl.dom.firstChild.firstChild);
117 } 115 }
118 return dlg; 116 return dlg;
119 }, 117 },
120 118
121 updateText : function(text){ 119 updateText : function(text){
122 if(!dlg.isVisible() && !opt.width){ 120 if(!dlg.isVisible() && !opt.width){
123 dlg.resizeTo(this.maxWidth, 100); // resize first so content is never clipped from previous shows 121 dlg.resizeTo(this.maxWidth, 100); // resize first so content is never clipped from previous shows
124 } 122 }
125 msgEl.innerHTML = text; 123 msgEl.innerHTML = text;
126 var w = Math.max(Math.min(opt.width || msgEl.offsetWidth, this.maxWidth), 124 var w = Math.max(Math.min(opt.width || msgEl.offsetWidth, this.maxWidth),
127 Math.max(opt.minWidth || this.minWidth, bwidth)); 125 Math.max(opt.minWidth || this.minWidth, bwidth));
128 if(opt.prompt){ 126 if(opt.prompt){
129 activeTextEl.setWidth(w); 127 activeTextEl.setWidth(w);
130 } 128 }
131 dlg.setContentSize(w, bodyEl.getHeight()); 129 dlg.setContentSize(w, bodyEl.getHeight());
132 }, 130 },
133 131
134 updateProgress : function(value, text){ 132 updateProgress : function(value, text){
135 if(text){ 133 if(text){
136 this.updateText(text); 134 this.updateText(text);
137 } 135 }
138 pp.setWidth(value*progressEl.dom.firstChild.offsetWidth); 136 pp.setWidth(value*progressEl.dom.firstChild.offsetWidth);
139 }, 137 },
140 138
141 isVisible : function(){ 139 isVisible : function(){
142 return dlg && dlg.isVisible(); 140 return dlg && dlg.isVisible();
143 }, 141 },
144 142
145 hide : function(){ 143 hide : function(){
146 if(this.isVisible()){ 144 if(this.isVisible()){
147 dlg.hide(); 145 dlg.hide();
148 } 146 }
149 }, 147 },
150 148