summaryrefslogtreecommitdiff
authorClipperz <info@clipperz.com>2013-01-09 11:45:31 (UTC)
committer Clipperz <info@clipperz.com>2013-01-09 11:45:31 (UTC)
commit9741a93a9f5c76827135b43c03b20c0a48f12604 (patch) (unidiff)
tree1a8fff379a033d873c9e1c7faff755fb6bb7b118
parent8ef30d00eb96004c39540019336c0ec99dae01cb (diff)
downloadclipperz-9741a93a9f5c76827135b43c03b20c0a48f12604.zip
clipperz-9741a93a9f5c76827135b43c03b20c0a48f12604.tar.gz
clipperz-9741a93a9f5c76827135b43c03b20c0a48f12604.tar.bz2
Merge latest changes with public repository
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/Record.js9
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_en-US.js2
-rw-r--r--scripts/builder/repository.py4
3 files changed, 8 insertions, 7 deletions
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/Record.js b/frontend/beta/js/Clipperz/PM/DataModel/Record.js
index d6ebb39..f89f79c 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/Record.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/Record.js
@@ -1,769 +1,768 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz Community Edition.
6Clipperz Community Edition is an online password manager. 6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 7For further information about its features and functionalities please
8refer to http://www.clipperz.com. 8refer to http://www.clipperz.com.
9 9
10* Clipperz Community Edition is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
11 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
12 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
13 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
14 14
15* Clipperz Community Edition is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
19 19
20* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 21 License along with Clipperz Community Edition. If not, see
22 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
23 23
24*/ 24*/
25 25
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 29
30 30
31//############################################################################# 31//#############################################################################
32 32
33Clipperz.PM.DataModel.Record = function(args) { 33Clipperz.PM.DataModel.Record = function(args) {
34 args = args || {}; 34 args = args || {};
35 35
36 this._user = args['user'] || null; 36 this._user = args['user'] || null;
37 this._reference = args['reference'] || Clipperz.PM.Crypto.randomKey(); 37 this._reference = args['reference'] || Clipperz.PM.Crypto.randomKey();
38 this._version = args['version'] || Clipperz.PM.Crypto.encryptingFunctions.currentVersion; 38 this._version = args['version'] || Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
39 this._key = args['key'] || Clipperz.PM.Crypto.randomKey(); 39 this._key = args['key'] || Clipperz.PM.Crypto.randomKey();
40 40
41 this.setLabel(args['label'] || Clipperz.PM.Strings['newRecordTitleLabel']); 41 this.setLabel(args['label'] || Clipperz.PM.Strings['newRecordTitleLabel']);
42 42
43 this.setHeaderNotes(args['headerNotes'] || null); 43 this.setHeaderNotes(args['headerNotes'] || null);
44 this.setNotes(args['notes'] || args['headerNotes'] || ""); 44 this.setNotes(args['notes'] || args['headerNotes'] || "");
45//MochiKit.Logging.logDebug("--- new Record ('" + this._label + "')- _headerNotes: '" + this._headerNotes + "'"); 45//MochiKit.Logging.logDebug("--- new Record ('" + this._label + "')- _headerNotes: '" + this._headerNotes + "'");
46//MochiKit.Logging.logDebug("--- new Record ('" + this._label + "')- _notes: '" + this._notes + "'"); 46//MochiKit.Logging.logDebug("--- new Record ('" + this._label + "')- _notes: '" + this._notes + "'");
47 //this._notes = args.notes || ""; 47 //this._notes = args.notes || "";
48 48
49 this._versions = {}; 49 this._versions = {};
50 this._directLogins = {}; 50 this._directLogins = {};
51 this._removedDirectLogins = []; 51 this._removedDirectLogins = [];
52 52
53 this.setIsBrandNew(args['reference'] == null); 53 this.setIsBrandNew(args['reference'] == null);
54 54
55 this.setShouldLoadData(this.isBrandNew() ? false: true); 55 this.setShouldLoadData(this.isBrandNew() ? false: true);
56 this.setShouldDecryptData(this.isBrandNew() ? false: true); 56 this.setShouldDecryptData(this.isBrandNew() ? false: true);
57 this.setShouldProcessData(this.isBrandNew() ? false: true); 57 this.setShouldProcessData(this.isBrandNew() ? false: true);
58 58
59 this.setCurrentVersion(this.isBrandNew() ? new Clipperz.PM.DataModel.RecordVersion(this, null): null); 59 this.setCurrentVersion(this.isBrandNew() ? new Clipperz.PM.DataModel.RecordVersion(this, null): null);
60 this.setCurrentVersionKey(null); 60 this.setCurrentVersionKey(null);
61 61
62 this._serverData = null; 62 this._serverData = null;
63 this._decryptedData = null; 63 this._decryptedData = null;
64 this._cachedData = null; 64 this._cachedData = null;
65 65
66 return this; 66 return this;
67} 67}
68 68
69Clipperz.PM.DataModel.Record.prototype = MochiKit.Base.update(null, { 69Clipperz.PM.DataModel.Record.prototype = MochiKit.Base.update(null, {
70 70
71 'toString': function() { 71 'toString': function() {
72 return "Record (" + this.label() + ")"; 72 return "Record (" + this.label() + ")";
73 }, 73 },
74 74
75 //------------------------------------------------------------------------- 75 //-------------------------------------------------------------------------
76 76
77 'isBrandNew': function() { 77 'isBrandNew': function() {
78 return this._isBrandNew; 78 return this._isBrandNew;
79 }, 79 },
80 80
81 'setIsBrandNew': function(aValue) { 81 'setIsBrandNew': function(aValue) {
82 this._isBrandNew = aValue; 82 this._isBrandNew = aValue;
83 }, 83 },
84 84
85 //------------------------------------------------------------------------- 85 //-------------------------------------------------------------------------
86/* 86/*
87 'shouldRunTheRecordCreationWizard': function() { 87 'shouldRunTheRecordCreationWizard': function() {
88 return (this.isBrandNew() && (MochiKit.Base.keys(this.currentVersion().fields()).length == 0)); 88 return (this.isBrandNew() && (MochiKit.Base.keys(this.currentVersion().fields()).length == 0));
89 }, 89 },
90 */ 90 */
91 //------------------------------------------------------------------------- 91 //-------------------------------------------------------------------------
92 92
93 'user': function() { 93 'user': function() {
94 return this._user; 94 return this._user;
95 }, 95 },
96 96
97 //------------------------------------------------------------------------- 97 //-------------------------------------------------------------------------
98 98
99 'reference': function() { 99 'reference': function() {
100 return this._reference; 100 return this._reference;
101 }, 101 },
102 102
103 //------------------------------------------------------------------------- 103 //-------------------------------------------------------------------------
104 104
105 'key': function() { 105 'key': function() {
106 return this._key; 106 return this._key;
107 }, 107 },
108 108
109 'updateKey': function() { 109 'updateKey': function() {
110 this._key = Clipperz.PM.Crypto.randomKey(); 110 this._key = Clipperz.PM.Crypto.randomKey();
111 }, 111 },
112 112
113 //------------------------------------------------------------------------- 113 //-------------------------------------------------------------------------
114 114
115 'label': function() { 115 'label': function() {
116 return this._label; 116 return this._label;
117 }, 117 },
118 118
119 'setLabel': function(aValue) { 119 'setLabel': function(aValue) {
120 this._label = aValue; 120 this._label = aValue;
121 }, 121 },
122 122
123 'lowerCaseLabel': function() { 123 'lowerCaseLabel': function() {
124 return this.label().toLowerCase(); 124 return this.label().toLowerCase();
125 }, 125 },
126 126
127 //------------------------------------------------------------------------- 127 //-------------------------------------------------------------------------
128 128
129 'versions': function() { 129 'versions': function() {
130 return this._versions; 130 return this._versions;
131 }, 131 },
132 132
133 //------------------------------------------------------------------------- 133 //-------------------------------------------------------------------------
134 134
135 'currentVersion': function() { 135 'currentVersion': function() {
136 return this._currentVersion; 136 return this._currentVersion;
137 }, 137 },
138 138
139 'setCurrentVersion': function(aValue) { 139 'setCurrentVersion': function(aValue) {
140 this._currentVersion = aValue; 140 this._currentVersion = aValue;
141 }, 141 },
142 142
143 //------------------------------------------------------------------------- 143 //-------------------------------------------------------------------------
144 144
145 'currentVersionKey': function() { 145 'currentVersionKey': function() {
146 return this._currentVersionKey; 146 return this._currentVersionKey;
147 }, 147 },
148 148
149 'setCurrentVersionKey': function(aValue) { 149 'setCurrentVersionKey': function(aValue) {
150 this._currentVersionKey = aValue; 150 this._currentVersionKey = aValue;
151 }, 151 },
152 152
153 //------------------------------------------------------------------------- 153 //-------------------------------------------------------------------------
154 154
155 'deferredData': function() { 155 'deferredData': function() {
156 vardeferredResult; 156 vardeferredResult;
157 157
158//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.deferredData - this: " + this); 158//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.deferredData - this: " + this);
159 deferredResult = new MochiKit.Async.Deferred(); 159 deferredResult = new MochiKit.Async.Deferred();
160 deferredResult.addCallback(MochiKit.Base.method(this, 'loadData')); 160 deferredResult.addCallback(MochiKit.Base.method(this, 'loadData'));
161 deferredResult.addCallback(MochiKit.Base.method(this, 'decryptData')); 161 deferredResult.addCallback(MochiKit.Base.method(this, 'decryptData'));
162 deferredResult.addCallback(MochiKit.Base.method(this, 'processData')); 162 deferredResult.addCallback(MochiKit.Base.method(this, 'processData'));
163 deferredResult.addCallback(function(aRecord) { 163 deferredResult.addCallback(function(aRecord) {
164 return aRecord.currentVersion().deferredData(); 164 return aRecord.currentVersion().deferredData();
165 }); 165 });
166 deferredResult.addCallback(MochiKit.Base.method(this, 'takeSnapshotOfCurrentData')); 166 deferredResult.addCallback(MochiKit.Base.method(this, 'takeSnapshotOfCurrentData'));
167 deferredResult.addCallback(MochiKit.Async.succeed, this); 167 deferredResult.addCallback(MochiKit.Async.succeed, this);
168 deferredResult.callback(); 168 deferredResult.callback();
169//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.deferredData"); 169//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.deferredData");
170 170
171 return deferredResult; 171 return deferredResult;
172 }, 172 },
173 173
174 //------------------------------------------------------------------------- 174 //-------------------------------------------------------------------------
175 175
176 'exportedData': function() { 176 'exportedData': function() {
177 var result; 177 var result;
178 178
179 result = {}; 179 result = {};
180 result['label'] = this.label(); 180 result['label'] = this.label();
181 result['data'] = this.serializedData(); 181 result['data'] = this.serializedData();
182 result['currentVersion'] = this.currentVersion().serializedData(); 182 result['currentVersion'] = this.currentVersion().serializedData();
183 result['currentVersion']['reference'] = this.currentVersion().reference(); 183 result['currentVersion']['reference'] = this.currentVersion().reference();
184 // result['versions'] = MochiKit.Base.map(MochiKit.Base.methodcaller("serializedData"), MochiKit.Base.values(this.versions())); 184 // result['versions'] = MochiKit.Base.map(MochiKit.Base.methodcaller("serializedData"), MochiKit.Base.values(this.versions()));
185 185
186 return Clipperz.Base.serializeJSON(result); 186 return Clipperz.Base.serializeJSON(result);
187 }, 187 },
188 188
189 //------------------------------------------------------------------------- 189 //-------------------------------------------------------------------------
190 190
191 'shouldLoadData': function() { 191 'shouldLoadData': function() {
192 return this._shouldLoadData; 192 return this._shouldLoadData;
193 }, 193 },
194 194
195 'setShouldLoadData': function(aValue) { 195 'setShouldLoadData': function(aValue) {
196 this._shouldLoadData = aValue; 196 this._shouldLoadData = aValue;
197 }, 197 },
198 198
199 //------------------------------------------------------------------------- 199 //-------------------------------------------------------------------------
200 200
201 'shouldDecryptData': function() { 201 'shouldDecryptData': function() {
202 return this._shouldDecryptData; 202 return this._shouldDecryptData;
203 }, 203 },
204 204
205 'setShouldDecryptData': function(aValue) { 205 'setShouldDecryptData': function(aValue) {
206 this._shouldDecryptData = aValue; 206 this._shouldDecryptData = aValue;
207 }, 207 },
208 208
209 //------------------------------------------------------------------------- 209 //-------------------------------------------------------------------------
210 210
211 'shouldProcessData': function() { 211 'shouldProcessData': function() {
212 return this._shouldProcessData; 212 return this._shouldProcessData;
213 }, 213 },
214 214
215 'setShouldProcessData': function(aValue) { 215 'setShouldProcessData': function(aValue) {
216 this._shouldProcessData = aValue; 216 this._shouldProcessData = aValue;
217 }, 217 },
218 218
219 //------------------------------------------------------------------------- 219 //-------------------------------------------------------------------------
220 220
221 'loadData': function() { 221 'loadData': function() {
222 var result; 222 var result;
223 223
224//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.loadData - this: " + this); 224//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.loadData - this: " + this);
225 if (this.shouldLoadData()) { 225 if (this.shouldLoadData()) {
226 var deferredResult; 226 var deferredResult;
227 227
228 deferredResult = new MochiKit.Async.Deferred(); 228 deferredResult = new MochiKit.Async.Deferred();
229 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'loadingRecordData'); 229 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'loadingRecordData');
230 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'getRecordDetail', {reference: this.reference()}); 230 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'getRecordDetail', {reference: this.reference()});
231 deferredResult.addCallback(MochiKit.Base.method(this,'setServerData')); 231 deferredResult.addCallback(MochiKit.Base.method(this,'setServerData'));
232 deferredResult.callback(); 232 deferredResult.callback();
233 result = deferredResult; 233 result = deferredResult;
234 } else { 234 } else {
235 result = MochiKit.Async.succeed(this.serverData()); 235 result = MochiKit.Async.succeed(this.serverData());
236 } 236 }
237//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.loadData"); 237//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.loadData");
238 238
239 return result; 239 return result;
240 }, 240 },
241 241
242 //------------------------------------------------------------------------- 242 //-------------------------------------------------------------------------
243 243
244 'decryptData': function(anEncryptedData) { 244 'decryptData': function(anEncryptedData) {
245 var result; 245 var result;
246 246
247//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.decryptData - this: " + this + " (" + anEncryptedData + ")"); 247//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.decryptData - this: " + this + " (" + anEncryptedData + ")");
248 if (this.shouldDecryptData()) { 248 if (this.shouldDecryptData()) {
249 var deferredResult; 249 var deferredResult;
250 250
251 deferredResult = new MochiKit.Async.Deferred(); 251 deferredResult = new MochiKit.Async.Deferred();
252 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'decryptingRecordData'); 252 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'decryptingRecordData');
253 deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt, this.key(), anEncryptedData['data'], anEncryptedData['version']); 253 deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt, this.key(), anEncryptedData['data'], anEncryptedData['version']);
254 deferredResult.addCallback(function(anEncryptedData, someDecryptedValues) { 254 deferredResult.addCallback(function(anEncryptedData, someDecryptedValues) {
255 varresult; 255 varresult;
256 256
257 result = anEncryptedData; 257 result = anEncryptedData;
258 result['data'] = someDecryptedValues; 258 result['data'] = someDecryptedValues;
259 259
260 return result; 260 return result;
261 }, anEncryptedData); 261 }, anEncryptedData);
262 deferredResult.addCallback(MochiKit.Base.method(this, 'setDecryptedData')); 262 deferredResult.addCallback(MochiKit.Base.method(this, 'setDecryptedData'));
263 deferredResult.callback(); 263 deferredResult.callback();
264 264
265 result = deferredResult; 265 result = deferredResult;
266 } else { 266 } else {
267 result = MochiKit.Async.succeed(this.decryptedData()); 267 result = MochiKit.Async.succeed(this.decryptedData());
268 } 268 }
269//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.decryptData"); 269//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.decryptData");
270 270
271 return result; 271 return result;
272 }, 272 },
273 273
274 //------------------------------------------------------------------------- 274 //-------------------------------------------------------------------------
275 275
276 'processData': function(someValues) { 276 'processData': function(someValues) {
277//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.processData"); 277//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.processData");
278//MochiKit.Logging.logDebug("--- Record.processData: " + Clipperz.Base.serializeJSON(someValues)); 278//MochiKit.Logging.logDebug("--- Record.processData: " + Clipperz.Base.serializeJSON(someValues));
279 if (this.shouldProcessData()) { 279 if (this.shouldProcessData()) {
280 var currentVersionParameters; 280 var currentVersionParameters;
281 281
282console.log("Record.processData", someValues);
283 this.processDataToExtractLegacyValues(someValues['data']); 282 this.processDataToExtractLegacyValues(someValues['data']);
284 283
285 if (typeof(someValues['data']['notes']) != 'undefined') { 284 if (typeof(someValues['data']['notes']) != 'undefined') {
286 this.setNotes(someValues['data']['notes']); 285 this.setNotes(someValues['data']['notes']);
287 } 286 }
288 287
289 if (someValues['data']['currentVersionKey'] != null) { 288 if (someValues['data']['currentVersionKey'] != null) {
290 this.setCurrentVersionKey(someValues['data']['currentVersionKey']); 289 this.setCurrentVersionKey(someValues['data']['currentVersionKey']);
291 } else { 290 } else {
292 this.setCurrentVersionKey(this.key()); 291 this.setCurrentVersionKey(this.key());
293 } 292 }
294 293
295 // community edition doesn't currently pass version 294 // community edition doesn't currently pass version information
296 // information
297 if (someValues['versions'] == null) { 295 if (someValues['versions'] == null) {
298 currentVersionParameters = someValues['currentVersion']; 296 currentVersionParameters = someValues['currentVersion'];
299 } else { 297 } else {
300 currentVersionParameters = someValues['versions'][someValues['currentVersion']]; 298 currentVersionParameters = someValues['versions'][someValues['currentVersion']];
301 } 299 }
302 300
303console.log("Record.processData - this.currentVersionKey()", this.currentVersionKey()); 301 //- currentVersionParameters = someValues['currentVersion'];
304console.log("Record.processData - currentVersionParameters", currentVersionParameters); 302 // currentVersionParameters = someValues['versions'][someValues['currentVersion']];
303
305 currentVersionParameters['key'] = this.currentVersionKey(); 304 currentVersionParameters['key'] = this.currentVersionKey();
306 this.setCurrentVersion(new Clipperz.PM.DataModel.RecordVersion(this, currentVersionParameters)); 305 this.setCurrentVersion(new Clipperz.PM.DataModel.RecordVersion(this, currentVersionParameters));
307 306
308 if (someValues['data']['directLogins'] != null) { 307 if (someValues['data']['directLogins'] != null) {
309 vardirectLoginReference; 308 vardirectLoginReference;
310 309
311 for (directLoginReference in someValues['data']['directLogins']) { 310 for (directLoginReference in someValues['data']['directLogins']) {
312 var directLogin; 311 var directLogin;
313 var directLoginParameters; 312 var directLoginParameters;
314 313
315 directLoginParameters = someValues['data']['directLogins'][directLoginReference]; 314 directLoginParameters = someValues['data']['directLogins'][directLoginReference];
316 directLoginParameters.record = this; 315 directLoginParameters.record = this;
317 directLoginParameters.reference = directLoginReference; 316 directLoginParameters.reference = directLoginReference;
318 317
319 directLogin = new Clipperz.PM.DataModel.DirectLogin(directLoginParameters); 318 directLogin = new Clipperz.PM.DataModel.DirectLogin(directLoginParameters);
320 this.addDirectLogin(directLogin, true); 319 this.addDirectLogin(directLogin, true);
321 } 320 }
322 } 321 }
323 this.setShouldProcessData(false); 322 this.setShouldProcessData(false);
324 } 323 }
325 324
326 Clipperz.NotificationCenter.notify(this, 'recordDataReady'); 325 Clipperz.NotificationCenter.notify(this, 'recordDataReady');
327//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.processData"); 326//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.processData");
328//MochiKit.Logging.logDebug("<<< Record.processData"); 327//MochiKit.Logging.logDebug("<<< Record.processData");
329 328
330 return this; 329 return this;
331 }, 330 },
332 331
333 //------------------------------------------------------------------------- 332 //-------------------------------------------------------------------------
334 333
335 'processDataToExtractLegacyValues': function(someValues) { 334 'processDataToExtractLegacyValues': function(someValues) {
336//MochiKit.Logging.logDebug(">>> Record.processDataToExtractLegacyValues"); 335//MochiKit.Logging.logDebug(">>> Record.processDataToExtractLegacyValues");
337 if (someValues['data'] != null) { 336 if (someValues['data'] != null) {
338 this.setNotes(someValues['data']); 337 this.setNotes(someValues['data']);
339 } 338 }
340 339
341 if ( 340 if (
342 (typeof(someValues['loginFormData']) != "undefined") 341 (typeof(someValues['loginFormData']) != "undefined")
343 &&(typeof(someValues['loginBindings'] != "undefined")) 342 &&(typeof(someValues['loginBindings'] != "undefined"))
344 &&(someValues['loginFormData'] != "") 343 &&(someValues['loginFormData'] != "")
345 &&(someValues['loginBindings'] != "") 344 &&(someValues['loginBindings'] != "")
346 ) { 345 ) {
347 vardirectLogin; 346 vardirectLogin;
348 347
349 directLogin = new Clipperz.PM.DataModel.DirectLogin({ 348 directLogin = new Clipperz.PM.DataModel.DirectLogin({
350 record:this, 349 record:this,
351 label:this.label() + Clipperz.PM.Strings['newDirectLoginLabelSuffix'], 350 label:this.label() + Clipperz.PM.Strings['newDirectLoginLabelSuffix'],
352 reference:Clipperz.Crypto.SHA.sha256(new Clipperz.ByteArray(this.label() + 351 reference:Clipperz.Crypto.SHA.sha256(new Clipperz.ByteArray(this.label() +
353 someValues['loginFormData'] + 352 someValues['loginFormData'] +
354 someValues['loginBindings'])).toHexString().substring(2), 353 someValues['loginBindings'])).toHexString().substring(2),
355 formData:Clipperz.Base.evalJSON(someValues['loginFormData']), 354 formData:Clipperz.Base.evalJSON(someValues['loginFormData']),
356 legacyBindingData:Clipperz.Base.evalJSON(someValues['loginBindings']), 355 legacyBindingData:Clipperz.Base.evalJSON(someValues['loginBindings']),
357 bookmarkletVersion:'0.1' 356 bookmarkletVersion:'0.1'
358 }); 357 });
359 this.addDirectLogin(directLogin, true); 358 this.addDirectLogin(directLogin, true);
360 } 359 }
361//MochiKit.Logging.logDebug("<<< Record.processDataToExtractLegacyValues"); 360//MochiKit.Logging.logDebug("<<< Record.processDataToExtractLegacyValues");
362 }, 361 },
363 362
364 //------------------------------------------------------------------------- 363 //-------------------------------------------------------------------------
365 364
366 'getReadyBeforeUpdatingVersionValues': function() { 365 'getReadyBeforeUpdatingVersionValues': function() {
367 }, 366 },
368 367
369 //------------------------------------------------------------------------- 368 //-------------------------------------------------------------------------
370 369
371 'addNewField': function() { 370 'addNewField': function() {
372 varnewField; 371 varnewField;
373 372
374//MochiKit.Logging.logDebug(">>> Record.addNewField - " + this); 373//MochiKit.Logging.logDebug(">>> Record.addNewField - " + this);
375 this.getReadyBeforeUpdatingVersionValues(); 374 this.getReadyBeforeUpdatingVersionValues();
376 newField = this.currentVersion().addNewField(); 375 newField = this.currentVersion().addNewField();
377 Clipperz.NotificationCenter.notify(this, 'recordUpdated'); 376 Clipperz.NotificationCenter.notify(this, 'recordUpdated');
378//MochiKit.Logging.logDebug("<<< Record.addNewField"); 377//MochiKit.Logging.logDebug("<<< Record.addNewField");
379 378
380 return newField; 379 return newField;
381 }, 380 },
382 381
383 //------------------------------------------------------------------------- 382 //-------------------------------------------------------------------------
384 383
385 'removeField': function(aField) { 384 'removeField': function(aField) {
386 this.getReadyBeforeUpdatingVersionValues(); 385 this.getReadyBeforeUpdatingVersionValues();
387 this.currentVersion().removeField(aField); 386 this.currentVersion().removeField(aField);
388 Clipperz.NotificationCenter.notify(this, 'recordUpdated'); 387 Clipperz.NotificationCenter.notify(this, 'recordUpdated');
389 }, 388 },
390 389
391 'removeEmptyFields': function() { 390 'removeEmptyFields': function() {
392 MochiKit.Iter.forEach(MochiKit.Base.values(this.currentVersion().fields()), MochiKit.Base.bind(function(aField) { 391 MochiKit.Iter.forEach(MochiKit.Base.values(this.currentVersion().fields()), MochiKit.Base.bind(function(aField) {
393 if (aField.isEmpty()) { 392 if (aField.isEmpty()) {
394 this.removeField(aField); 393 this.removeField(aField);
395 // this.currentVersion().removeField(aField); 394 // this.currentVersion().removeField(aField);
396 } 395 }
397 }, this)); 396 }, this));
398 }, 397 },
399 398
400 //------------------------------------------------------------------------- 399 //-------------------------------------------------------------------------
401 400
402 'notes': function() { 401 'notes': function() {
403 return this._notes; 402 return this._notes;
404 }, 403 },
405 404
406 'setNotes': function(aValue) { 405 'setNotes': function(aValue) {
407 this._notes = aValue; 406 this._notes = aValue;
408 this.setHeaderNotes(null); 407 this.setHeaderNotes(null);
409 }, 408 },
410 409
411 //------------------------------------------------------------------------- 410 //-------------------------------------------------------------------------
412 411
413 'headerNotes': function() { 412 'headerNotes': function() {
414 return this._headerNotes; 413 return this._headerNotes;
415 }, 414 },
416 415
417 'setHeaderNotes': function(aValue) { 416 'setHeaderNotes': function(aValue) {
418 this._headerNotes = aValue; 417 this._headerNotes = aValue;
419 }, 418 },
420 419
421 //------------------------------------------------------------------------- 420 //-------------------------------------------------------------------------
422 421
423 'remove': function() { 422 'remove': function() {
424//MochiKit.Logging.logDebug(">>> Record.remove - " + this); 423//MochiKit.Logging.logDebug(">>> Record.remove - " + this);
425 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), MochiKit.Base.method(this, 'removeDirectLogin')); 424 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), MochiKit.Base.method(this, 'removeDirectLogin'));
426 425
427 this.syncDirectLoginReferenceValues(); 426 this.syncDirectLoginReferenceValues();
428 this.user().removeRecord(this); 427 this.user().removeRecord(this);
429//MochiKit.Logging.logDebug("<<< Record.remove"); 428//MochiKit.Logging.logDebug("<<< Record.remove");
430 }, 429 },
431 430
432 //------------------------------------------------------------------------- 431 //-------------------------------------------------------------------------
433 432
434 'directLogins': function() { 433 'directLogins': function() {
435 return this._directLogins; 434 return this._directLogins;
436 }, 435 },
437 436
438 'addDirectLogin': function(aDirectLogin, shouldUpdateUser) { 437 'addDirectLogin': function(aDirectLogin, shouldUpdateUser) {
439 this.directLogins()[aDirectLogin.reference()] = aDirectLogin; 438 this.directLogins()[aDirectLogin.reference()] = aDirectLogin;
440 if (shouldUpdateUser == true) { 439 if (shouldUpdateUser == true) {
441 this.user().addDirectLogin(aDirectLogin); 440 this.user().addDirectLogin(aDirectLogin);
442 } 441 }
443 }, 442 },
444 443
445 'removeDirectLogin': function(aDirectLogin) { 444 'removeDirectLogin': function(aDirectLogin) {
446 this.removedDirectLogins().push(aDirectLogin); 445 this.removedDirectLogins().push(aDirectLogin);
447 delete this.directLogins()[aDirectLogin.reference()]; 446 delete this.directLogins()[aDirectLogin.reference()];
448 // this.user().removeDirectLogin(aDirectLogin); 447 // this.user().removeDirectLogin(aDirectLogin);
449 }, 448 },
450 449
451 'resetDirectLogins': function() { 450 'resetDirectLogins': function() {
452 this._directLogins = {}; 451 this._directLogins = {};
453 }, 452 },
454 453
455 'removedDirectLogins': function() { 454 'removedDirectLogins': function() {
456 return this._removedDirectLogins; 455 return this._removedDirectLogins;
457 }, 456 },
458 457
459 'resetRemovedDirectLogins': function() { 458 'resetRemovedDirectLogins': function() {
460 this._removedDirectLogins = []; 459 this._removedDirectLogins = [];
461 }, 460 },
462 461
463 //------------------------------------------------------------------------- 462 //-------------------------------------------------------------------------
464 463
465 'serverData': function() { 464 'serverData': function() {
466 return this._serverData; 465 return this._serverData;
467 }, 466 },
468 467
469 'setServerData': function(aValue) { 468 'setServerData': function(aValue) {
470 this._serverData = aValue; 469 this._serverData = aValue;
471 this.setShouldLoadData(false); 470 this.setShouldLoadData(false);
472 return aValue; 471 return aValue;
473 }, 472 },
474 473
475 //------------------------------------------------------------------------- 474 //-------------------------------------------------------------------------
476 475
477 'decryptedData': function() { 476 'decryptedData': function() {
478 return this._decryptedData; 477 return this._decryptedData;
479 }, 478 },
480 479
481 'setDecryptedData': function(aValue) { 480 'setDecryptedData': function(aValue) {
482 this._decryptedData = aValue; 481 this._decryptedData = aValue;
483 this.setShouldDecryptData(false); 482 this.setShouldDecryptData(false);
484 return aValue; 483 return aValue;
485 }, 484 },
486 485
487 //------------------------------------------------------------------------- 486 //-------------------------------------------------------------------------
488 487
489 'cachedData': function() { 488 'cachedData': function() {
490 return this._cachedData; 489 return this._cachedData;
491 }, 490 },
492 491
493 'setCachedData': function(aValue) { 492 'setCachedData': function(aValue) {
494//MochiKit.Logging.logDebug(">>> Record.setCachedData"); 493//MochiKit.Logging.logDebug(">>> Record.setCachedData");
495//MochiKit.Logging.logDebug("--- Record.setCachedData - aValue: " + Clipperz.Base.serializeJSON(aValue)); 494//MochiKit.Logging.logDebug("--- Record.setCachedData - aValue: " + Clipperz.Base.serializeJSON(aValue));
496 this._cachedData = aValue; 495 this._cachedData = aValue;
497 this.setShouldProcessData(false); 496 this.setShouldProcessData(false);
498//MochiKit.Logging.logDebug("<<< Record.setCachedData"); 497//MochiKit.Logging.logDebug("<<< Record.setCachedData");
499 498
500 return aValue; 499 return aValue;
501 }, 500 },
502 501
503 //------------------------------------------------------------------------- 502 //-------------------------------------------------------------------------
504 503
505 'hasPendingChanges': function() { 504 'hasPendingChanges': function() {
506 var result; 505 var result;
507 506
508//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.hasPendingChanges"); 507//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.hasPendingChanges");
509//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + this.cachedData()); 508//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + this.cachedData());
510//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData())); 509//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData()));
511//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + this.currentDataSnapshot()); 510//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + this.currentDataSnapshot());
512//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + Clipperz.Base.serializeJSON(this.currentDataSnapshot())); 511//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + Clipperz.Base.serializeJSON(this.currentDataSnapshot()));
513//console.log(">>> Record.hasPendingChanges - cachedData: %o", this.cachedData()); 512//console.log(">>> Record.hasPendingChanges - cachedData: %o", this.cachedData());
514//console.log(">>> Record.hasPendingChanges - currentSnapshot: %o", this.currentDataSnapshot()); 513//console.log(">>> Record.hasPendingChanges - currentSnapshot: %o", this.currentDataSnapshot());
515 result = (MochiKit.Base.compare(this.cachedData(), this.currentDataSnapshot()) != 0); 514 result = (MochiKit.Base.compare(this.cachedData(), this.currentDataSnapshot()) != 0);
516//MochiKit.Logging.logDebug("<<< Record.hasPendingChanges - " + result); 515//MochiKit.Logging.logDebug("<<< Record.hasPendingChanges - " + result);
517 516
518 if ((result == false) && this.isBrandNew() && (this.label() != Clipperz.PM.Strings['newRecordTitleLabel'])) { 517 if ((result == false) && this.isBrandNew() && (this.label() != Clipperz.PM.Strings['newRecordTitleLabel'])) {
519 result = true; 518 result = true;
520 } 519 }
521//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.hasPendingChanges"); 520//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.hasPendingChanges");
522 521
523 return result; 522 return result;
524 }, 523 },
525 524
526 //------------------------------------------------------------------------- 525 //-------------------------------------------------------------------------
527 526
528 'currentDataSnapshot': function() { 527 'currentDataSnapshot': function() {
529 varresult; 528 varresult;
530 529
531//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.currentDataSnapshot"); 530//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.currentDataSnapshot");
532 result = { 531 result = {
533 'label': this.label(), 532 'label': this.label(),
534 'data': this.serializedData(), 533 'data': this.serializedData(),
535 'currentVersion': this.currentVersion().currentDataSnapshot() 534 'currentVersion': this.currentVersion().currentDataSnapshot()
536 }; 535 };
537 536
538 // result['data']['data'] = this.notes(); 537 // result['data']['data'] = this.notes();
539 result = Clipperz.Base.serializeJSON(result); 538 result = Clipperz.Base.serializeJSON(result);
540 539
541//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.currentDataSnapshot"); 540//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.currentDataSnapshot");
542//MochiKit.Logging.logDebug("<<< Record.currentDataSnapshot"); 541//MochiKit.Logging.logDebug("<<< Record.currentDataSnapshot");
543 542
544 return result; 543 return result;
545 }, 544 },
546 545
547 //......................................................................... 546 //.........................................................................
548 547
549 'takeSnapshotOfCurrentData': function() { 548 'takeSnapshotOfCurrentData': function() {
550 this.setCachedData(this.currentDataSnapshot()); 549 this.setCachedData(this.currentDataSnapshot());
551 }, 550 },
552 551
553 //------------------------------------------------------------------------- 552 //-------------------------------------------------------------------------
554 553
555 'headerData': function() { 554 'headerData': function() {
556 var result; 555 var result;
557 556
558 result = { 557 result = {
559 'label': this.label(), 558 'label': this.label(),
560 'key': this.key() 559 'key': this.key()
561 }; 560 };
562 561
563 if (this.headerNotes() != null) { 562 if (this.headerNotes() != null) {
564 result['headerNotes'] = this.headerNotes(); 563 result['headerNotes'] = this.headerNotes();
565 } 564 }
566 565
567 return result; 566 return result;
568 }, 567 },
569 568
570 //------------------------------------------------------------------------- 569 //-------------------------------------------------------------------------
571 570
572 'serializedData': function() { 571 'serializedData': function() {
573 var result; 572 var result;
574 var directLoginReference; 573 var directLoginReference;
575 574
576 result = {}; 575 result = {};
577 result['currentVersionKey'] = this.currentVersion().key(); 576 result['currentVersionKey'] = this.currentVersion().key();
578 577
579 result['directLogins'] = {}; 578 result['directLogins'] = {};
580 for (directLoginReference in this.directLogins()) { 579 for (directLoginReference in this.directLogins()) {
581 result['directLogins'][directLoginReference] = this.directLogins()[directLoginReference].serializedData(); 580 result['directLogins'][directLoginReference] = this.directLogins()[directLoginReference].serializedData();
582 } 581 }
583 result['notes'] = this.notes(); 582 result['notes'] = this.notes();
584 583
585 return result; 584 return result;
586 }, 585 },
587 586
588 //------------------------------------------------------------------------- 587 //-------------------------------------------------------------------------
589 588
590 'encryptedData': function() { 589 'encryptedData': function() {
591 var deferredResult; 590 var deferredResult;
592 varresult; 591 varresult;
593 592
594//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.encryptedData"); 593//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.encryptedData");
595 result = {} 594 result = {}
596//MochiKit.Logging.logDebug("--- Record.encryptedData - 1"); 595//MochiKit.Logging.logDebug("--- Record.encryptedData - 1");
597 deferredResult = new MochiKit.Async.Deferred(); 596 deferredResult = new MochiKit.Async.Deferred();
598//MochiKit.Logging.logDebug("--- Record.encryptedData - 2"); 597//MochiKit.Logging.logDebug("--- Record.encryptedData - 2");
599//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 1: " + res); return res;}); 598//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 1: " + res); return res;});
600 deferredResult.addCallback(function(aResult, aRecord) { 599 deferredResult.addCallback(function(aResult, aRecord) {
601 aResult['reference'] = aRecord.reference(); 600 aResult['reference'] = aRecord.reference();
602 return aResult; 601 return aResult;
603 }, result, this); 602 }, result, this);
604//MochiKit.Logging.logDebug("--- Record.encryptedData - 3"); 603//MochiKit.Logging.logDebug("--- Record.encryptedData - 3");
605//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 2: " + res); return res;}); 604//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 2: " + res); return res;});
606 deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion, this.key(), this.serializedData()); 605 deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion, this.key(), this.serializedData());
607//MochiKit.Logging.logDebug("--- Record.encryptedData - 4"); 606//MochiKit.Logging.logDebug("--- Record.encryptedData - 4");
608//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 3: " + res); return res;}); 607//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 3: " + res); return res;});
609 deferredResult.addCallback(function(aResult, res) { 608 deferredResult.addCallback(function(aResult, res) {
610 aResult['data'] = res; 609 aResult['data'] = res;
611 return aResult; 610 return aResult;
612 }, result); 611 }, result);
613//MochiKit.Logging.logDebug("--- Record.encryptedData - 5"); 612//MochiKit.Logging.logDebug("--- Record.encryptedData - 5");
614//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 4: " + res); return res;}); 613//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 4: " + res); return res;});
615 deferredResult.addCallback(function(aResult) { 614 deferredResult.addCallback(function(aResult) {
616 aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion; 615 aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
617 return aResult; 616 return aResult;
618 }, result); 617 }, result);
619//MochiKit.Logging.logDebug("--- Record.encryptedData - 6"); 618//MochiKit.Logging.logDebug("--- Record.encryptedData - 6");
620//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 5: " + res); return res;}); 619//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 5: " + res); return res;});
621 deferredResult.callback(); 620 deferredResult.callback();
622//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.encryptedData"); 621//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.encryptedData");
623 622
624 return deferredResult; 623 return deferredResult;
625 }, 624 },
626 625
627 //------------------------------------------------------------------------- 626 //-------------------------------------------------------------------------
628 627
629 'syncDirectLoginReferenceValues': function() { 628 'syncDirectLoginReferenceValues': function() {
630//MochiKit.Logging.logDebug(">>> Record.syncDirectLoginReferenceValues"); 629//MochiKit.Logging.logDebug(">>> Record.syncDirectLoginReferenceValues");
631 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), function(aDirectLogin) { 630 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), function(aDirectLogin) {
632 aDirectLogin.record().user().synchronizeDirectLogin(aDirectLogin); 631 aDirectLogin.record().user().synchronizeDirectLogin(aDirectLogin);
633 }); 632 });
634 633
635 MochiKit.Iter.forEach(this.removedDirectLogins(), function(aDirectLogin) { 634 MochiKit.Iter.forEach(this.removedDirectLogins(), function(aDirectLogin) {
636 aDirectLogin.record().user().removeDirectLogin(aDirectLogin); 635 aDirectLogin.record().user().removeDirectLogin(aDirectLogin);
637 }); 636 });
638 637
639 this.resetRemovedDirectLogins(); 638 this.resetRemovedDirectLogins();
640//MochiKit.Logging.logDebug("<<< Record.syncDirectLoginReferenceValues"); 639//MochiKit.Logging.logDebug("<<< Record.syncDirectLoginReferenceValues");
641 }, 640 },
642 641
643 //------------------------------------------------------------------------- 642 //-------------------------------------------------------------------------
644 643
645 'saveChanges': function() { 644 'saveChanges': function() {
646 var result; 645 var result;
647 646
648 // if (this.isBrandNew() == false) { 647 // if (this.isBrandNew() == false) {
649 // result = this.user().saveRecords([this], 'updateData'); 648 // result = this.user().saveRecords([this], 'updateData');
650 // } else { 649 // } else {
651 // result = this.user().saveRecords([this], 'addNewRecords'); 650 // result = this.user().saveRecords([this], 'addNewRecords');
652 // } 651 // }
653 652
654 result = this.user().saveRecords([this]); 653 result = this.user().saveRecords([this]);
655 654
656 return result; 655 return result;
657 }, 656 },
658 657
659/* 658/*
660 'saveChanges': function() { 659 'saveChanges': function() {
661 var deferredResult; 660 var deferredResult;
662 varresult; 661 varresult;
663 662
664 Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'records', true); 663 Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'records', true);
665//MochiKit.Logging.logDebug(">>> Record.saveChanges"); 664//MochiKit.Logging.logDebug(">>> Record.saveChanges");
666//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.saveChanges"); 665//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.saveChanges");
667 if (this.headerNotes() != null) { 666 if (this.headerNotes() != null) {
668 this.setNotes(this.headerNotes()); 667 this.setNotes(this.headerNotes());
669 } 668 }
670 this.syncDirectLoginReferenceValues(); 669 this.syncDirectLoginReferenceValues();
671 this.currentVersion().createNewVersion(); 670 this.currentVersion().createNewVersion();
672 671
673 result = {'records': [{}]}; 672 result = {'records': [{}]};
674 673
675 deferredResult = new MochiKit.Async.Deferred(); 674 deferredResult = new MochiKit.Async.Deferred();
676 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo'); 675 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo');
677 deferredResult.addCallback(MochiKit.Base.method(this, 'updateKey')); 676 deferredResult.addCallback(MochiKit.Base.method(this, 'updateKey'));
678 677
679 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData'); 678 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData');
680 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'encryptedData')); 679 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'encryptedData'));
681 deferredResult.addCallback(function(aResult, res) { 680 deferredResult.addCallback(function(aResult, res) {
682 aResult['user'] = res; 681 aResult['user'] = res;
683 return aResult; 682 return aResult;
684 }, result); 683 }, result);
685 684
686 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData'); 685 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData');
687 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); 686 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData'));
688 deferredResult.addCallback(function(aResult, res) { 687 deferredResult.addCallback(function(aResult, res) {
689 //# aResult['record'] = res; 688 //# aResult['record'] = res;
690 aResult['records'][0]['record'] = res; 689 aResult['records'][0]['record'] = res;
691 return aResult; 690 return aResult;
692 }, result); 691 }, result);
693 692
694 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordVersions'); 693 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordVersions');
695 deferredResult.addCallback(MochiKit.Base.method(this.currentVersion(), 'encryptedData')); 694 deferredResult.addCallback(MochiKit.Base.method(this.currentVersion(), 'encryptedData'));
696 deferredResult.addCallback(function(aResult, res) { 695 deferredResult.addCallback(function(aResult, res) {
697 // aResult['currentRecordVersion'] = res; 696 // aResult['currentRecordVersion'] = res;
698 aResult['records'][0]['currentRecordVersion'] = res; 697 aResult['records'][0]['currentRecordVersion'] = res;
699 return aResult; 698 return aResult;
700 }, result); 699 }, result);
701 700
702 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_sendingData'); 701 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_sendingData');
703 if (this.isBrandNew() == false) { 702 if (this.isBrandNew() == false) {
704 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'updateData'); 703 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'updateData');
705 } else { 704 } else {
706 //# deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecord'); 705 //# deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecord');
707 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecords'); 706 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecords');
708 } 707 }
709 708
710 deferredResult.addCallback(MochiKit.Base.method(this, 'takeSnapshotOfCurrentData')); 709 deferredResult.addCallback(MochiKit.Base.method(this, 'takeSnapshotOfCurrentData'));
711 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_updatingInterface'); 710 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_updatingInterface');
712 deferredResult.addCallback(MochiKit.Base.method(this, 'setIsBrandNew'), false); 711 deferredResult.addCallback(MochiKit.Base.method(this, 'setIsBrandNew'), false);
713 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'recordUpdated'); 712 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'recordUpdated');
714 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'directLoginUpdated'); 713 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'directLoginUpdated');
715 deferredResult.callback(); 714 deferredResult.callback();
716 715
717 return deferredResult; 716 return deferredResult;
718 }, 717 },
719 */ 718 */
720 //------------------------------------------------------------------------- 719 //-------------------------------------------------------------------------
721 720
722 'cancelChanges': function() { 721 'cancelChanges': function() {
723//MochiKit.Logging.logDebug(">>> Record.cancelChanges"); 722//MochiKit.Logging.logDebug(">>> Record.cancelChanges");
724//MochiKit.Logging.logDebug("--- Record.cancelChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData())); 723//MochiKit.Logging.logDebug("--- Record.cancelChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData()));
725 if (this.isBrandNew()) { 724 if (this.isBrandNew()) {
726 this.user().removeRecord(this); 725 this.user().removeRecord(this);
727 } else { 726 } else {
728 this.restoreValuesFromSnapshot(this.cachedData()); 727 this.restoreValuesFromSnapshot(this.cachedData());
729 } 728 }
730//MochiKit.Logging.logDebug("<<< Record.cancelChanges"); 729//MochiKit.Logging.logDebug("<<< Record.cancelChanges");
731 }, 730 },
732 731
733 //------------------------------------------------------------------------- 732 //-------------------------------------------------------------------------
734 733
735 'restoreValuesFromSnapshot': function(someSnapshotData) { 734 'restoreValuesFromSnapshot': function(someSnapshotData) {
736 varsnapshotData; 735 varsnapshotData;
737 736
738//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.restoreValuesFromSnapshot"); 737//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.restoreValuesFromSnapshot");
739 snapshotData = Clipperz.Base.evalJSON(someSnapshotData); 738 snapshotData = Clipperz.Base.evalJSON(someSnapshotData);
740//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - someSnapshotData (1): " + Clipperz.Base.serializeJSON(someSnapshotData)); 739//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - someSnapshotData (1): " + Clipperz.Base.serializeJSON(someSnapshotData));
741 this.setLabel(snapshotData['label']); 740 this.setLabel(snapshotData['label']);
742 this.resetDirectLogins(); 741 this.resetDirectLogins();
743 this.setShouldProcessData(true); 742 this.setShouldProcessData(true);
744 this.processData(snapshotData); 743 this.processData(snapshotData);
745//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - snapshotData: (2)" + Clipperz.Base.serializeJSON(snapshotData)); 744//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - snapshotData: (2)" + Clipperz.Base.serializeJSON(snapshotData));
746 745
747 this.resetRemovedDirectLogins(); 746 this.resetRemovedDirectLogins();
748 747
749 { 748 {
750 var currentSnapshot; 749 var currentSnapshot;
751 varcomparisonResult; 750 varcomparisonResult;
752 751
753 currentSnapshot = this.currentDataSnapshot(); 752 currentSnapshot = this.currentDataSnapshot();
754//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - 1"); 753//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - 1");
755//console.log("snapshot data: %o", someSnapshotData.currentVersion); 754//console.log("snapshot data: %o", someSnapshotData.currentVersion);
756//console.log("current data: %o", currentSnapshot.currentVersion); 755//console.log("current data: %o", currentSnapshot.currentVersion);
757//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - someSnapshotData: " + Clipperz.Base.serializeJSON(someSnapshotData.currentVersion)); 756//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - someSnapshotData: " + Clipperz.Base.serializeJSON(someSnapshotData.currentVersion));
758//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - currentSnapshot: " + Clipperz.Base.serializeJSON(currentSnapshot.currentVersion)); 757//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - currentSnapshot: " + Clipperz.Base.serializeJSON(currentSnapshot.currentVersion));
759 comparisonResult = MochiKit.Base.compare(someSnapshotData.currentVersion, currentSnapshot.currentVersion); 758 comparisonResult = MochiKit.Base.compare(someSnapshotData.currentVersion, currentSnapshot.currentVersion);
760//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - " + comparisonResult); 759//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - " + comparisonResult);
761 } 760 }
762//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.restoreValuesFromSnapshot"); 761//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.restoreValuesFromSnapshot");
763 }, 762 },
764 763
765 //------------------------------------------------------------------------- 764 //-------------------------------------------------------------------------
766 __syntaxFix__: "syntax fix" 765 __syntaxFix__: "syntax fix"
767}); 766});
768 767
769 768
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 299ebc7..ab1bb0f 100644
--- a/frontend/beta/js/Clipperz/PM/Strings/Strings_en-US.js
+++ b/frontend/beta/js/Clipperz/PM/Strings/Strings_en-US.js
@@ -1,1256 +1,1256 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz Community Edition.
6Clipperz Community Edition is an online password manager. 6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 7For further information about its features and functionalities please
8refer to http://www.clipperz.com. 8refer to http://www.clipperz.com.
9 9
10* Clipperz Community Edition is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
11 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
12 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
13 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
14 14
15* Clipperz Community Edition is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
19 19
20* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 21 License along with Clipperz Community Edition. If not, see
22 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
23 23
24*/ 24*/
25 25
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Strings) == 'undefined') { Clipperz.PM.Strings = {}; } 28if (typeof(Clipperz.PM.Strings) == 'undefined') { Clipperz.PM.Strings = {}; }
29if (typeof(Clipperz.PM.Strings.Languages) == 'undefined') { Clipperz.PM.Strings.Languages = {}; } 29if (typeof(Clipperz.PM.Strings.Languages) == 'undefined') { Clipperz.PM.Strings.Languages = {}; }
30 30
31//============================================================================= 31//=============================================================================
32// 32//
33 // E N G L I S H A M E R I C A N ( en_US ) 33 // E N G L I S H A M E R I C A N ( en_US )
34// 34//
35//============================================================================= 35//=============================================================================
36 36
37Clipperz.PM.Strings.Languages['en-us'] = { 37Clipperz.PM.Strings.Languages['en-us'] = {
38 38
39 //Login page - description 39 //Login page - description
40'clipperzServiceDescription': "\ 40'clipperzServiceDescription': "\
41 <!-- FIX CSS DONE -->\ 41 <!-- FIX CSS DONE -->\
42 <h2>Keep it to yourself!</h2>\ 42 <h2>Keep it to yourself!</h2>\
43 <ul>\ 43 <ul>\
44 <li>\ 44 <li>\
45 <h3>Clipperz is:</h3>\ 45 <h3>Clipperz is:</h3>\
46 <ul>\ 46 <ul>\
47 <li><p>a secure and simple password manager</p></li>\ 47 <li><p>a secure and simple password manager</p></li>\
48 <li><p>an effective single sign-on solution</p></li>\ 48 <li><p>an effective single sign-on solution</p></li>\
49 <li><p>a digital vault for your personal data</p></li>\ 49 <li><p>a digital vault for your personal data</p></li>\
50 </ul>\ 50 </ul>\
51 </li>\ 51 </li>\
52 <li>\ 52 <li>\
53 <h3>With Clipperz you can:</h3>\ 53 <h3>With Clipperz you can:</h3>\
54 <ul>\ 54 <ul>\
55 <li><p>store and manage your passwords and online credentials</p></li>\ 55 <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>\ 56 <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>\ 57 <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>\ 58 <li><p>share secrets with family members and associates (coming soon)</p></li>\
59 </ul>\ 59 </ul>\
60 </li>\ 60 </li>\
61 <li>\ 61 <li>\
62 <h3>Clipperz benefits:</h3>\ 62 <h3>Clipperz benefits:</h3>\
63 <ul>\ 63 <ul>\
64 <li><p>free and completely anonymous</p></li>\ 64 <li><p>free and completely anonymous</p></li>\
65 <li><p>access it any time from any computer</p></li>\ 65 <li><p>access it any time from any computer</p></li>\
66 <li><p>no software to download and nothing to install</p></li>\ 66 <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>\ 67 <li><p>avoid keeping secrets on your PC or on paper</p></li>\
68 </ul>\ 68 </ul>\
69 </li>\ 69 </li>\
70 <li>\ 70 <li>\
71 <h3>Clipperz security:</h3>\ 71 <h3>Clipperz security:</h3>\
72 <ul>\ 72 <ul>\
73 <li><p>your secrets are locally encrypted by your browser before being uploaded to Clipperz</p></li>\ 73 <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>\ 74 <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>\ 75 <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>\ 76 <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>\ 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>\
78 </ul>\ 78 </ul>\
79 </li>\ 79 </li>\
80 <li>\ 80 <li>\
81 <a href=\"http://www.clipperz.com\" target=\"_blank\">Learn more</a>\ 81 <a href=\"http://www.clipperz.com\" target=\"_blank\">Learn more</a>\
82 </li>\ 82 </li>\
83 </ul>", 83 </ul>",
84 84
85 85
86 'loginFormTitle': "login with your Clipperz account", 86 'loginFormTitle': "login with your Clipperz account",
87 'loginFormUsernameLabel': "username", 87 'loginFormUsernameLabel': "username",
88 'loginFormPassphraseLabel': "passphrase", 88 'loginFormPassphraseLabel': "passphrase",
89 'loginFormDontHaveAnAccountLabel': "don\'t have an account?", 89 'loginFormDontHaveAnAccountLabel': "don\'t have an account?",
90 'loginFormCreateOneLabel': "create one", 90 'loginFormCreateOneLabel': "create one",
91 'loginFormForgotYourCredentialsLabel': "forgot your credentials?", 91 'loginFormForgotYourCredentialsLabel': "forgot your credentials?",
92 'loginFormAarghThatsBadLabel': "aargh! that\'s bad!", 92 'loginFormAarghThatsBadLabel': "aargh! that\'s bad!",
93 'loginFormAfraidOfMaliciousScriptsLabel': "afraid of malicious scripts?", 93 'loginFormAfraidOfMaliciousScriptsLabel': "afraid of malicious scripts?",
94 'loginFormVerifyTheCodeLabel': "verify the code", 94 'loginFormVerifyTheCodeLabel': "verify the code",
95 'loginFormButtonLabel': "Login", 95 'loginFormButtonLabel': "Login",
96 'loginFormOneTimePasswordCheckboxLabel': "use a one-time passphrase", 96 'loginFormOneTimePasswordCheckboxLabel': "use a one-time passphrase",
97'loginFormOneTimePasswordCheckboxDescription': "", 97'loginFormOneTimePasswordCheckboxDescription': "",
98 98
99// Login page - language selection 99// Login page - language selection
100 'loginPanelSwithLanguageDescription': "<h5>Switch to your preferred language</h5>", 100 'loginPanelSwithLanguageDescription': "<h5>Switch to your preferred language</h5>",
101 101
102// Login page - browser compatibility 102// 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>", 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>",
104 104
105// Login with OTP - message panel 105// Login with OTP - message panel
106 'OTPloginMessagePanelInitialTitle': "Logging in using a one-time passphrase", 106 'OTPloginMessagePanelInitialTitle': "Logging in using a one-time passphrase",
107 'OTPloginMessagePanelInitialText': "Sending OTP credentials …", 107 'OTPloginMessagePanelInitialText': "Sending OTP credentials …",
108 'OTPloginMessagePanelLoadingTitle': "Logging in using a one-time passphrase", 108 'OTPloginMessagePanelLoadingTitle': "Logging in using a one-time passphrase",
109 'OTPloginMessagePanelLoadingText': "Fetching encrypted authentication data from the server …", 109 'OTPloginMessagePanelLoadingText': "Fetching encrypted authentication data from the server …",
110 'OTPloginMessagePanelProcessingTitle': "Logging in using a one-time passphrase", 110 'OTPloginMessagePanelProcessingTitle': "Logging in using a one-time passphrase",
111 'OTPloginMessagePanelProcessingText': "Local decryption of authentication data", 111 'OTPloginMessagePanelProcessingText': "Local decryption of authentication data",
112 112
113// Regular login - message panel 113// Regular login - message panel
114 'loginMessagePanelInitialTitle': "Logging in …", 114 'loginMessagePanelInitialTitle': "Logging in …",
115 'loginMessagePanelInitialText': "---", 115 'loginMessagePanelInitialText': "---",
116 'loginMessagePanelInitialButtonLabel': "Cancel", 116 'loginMessagePanelInitialButtonLabel': "Cancel",
117 'loginMessagePanelConnectedTitle': "Connected", 117 'loginMessagePanelConnectedTitle': "Connected",
118 'loginMessagePanelConnectedText': "Done", 118 'loginMessagePanelConnectedText': "Done",
119 'loginMessagePanelFailureTitle': "Error", 119 'loginMessagePanelFailureTitle': "Error",
120 'loginMessagePanelFailureText': "Login failed", 120 'loginMessagePanelFailureText': "Login failed",
121 'loginMessagePanelFailureButtonLabel': "Close", 121 'loginMessagePanelFailureButtonLabel': "Close",
122 122
123// Regular login - message panel - connection 123// Regular login - message panel - connection
124 'connectionLoginSendingCredentialsMessageTitle': "Verifying credentials", 124 'connectionLoginSendingCredentialsMessageTitle': "Verifying credentials",
125 'connectionLoginSendingCredentialsMessageText': "Sending credentials", 125 'connectionLoginSendingCredentialsMessageText': "Sending credentials",
126 'connectionLoginCredentialsVerificationMessageTitle':"Verifying credentials", 126 'connectionLoginCredentialsVerificationMessageTitle':"Verifying credentials",
127 'connectionLoginCredentialsVerificationMessageText':"Performing SRP authentication", 127 'connectionLoginCredentialsVerificationMessageText':"Performing SRP authentication",
128 'connectionLoginDoneMessageTitle': "Verifying credentials", 128 'connectionLoginDoneMessageTitle': "Verifying credentials",
129 'connectionLoginDoneMessageText': "Connected", 129 'connectionLoginDoneMessageText': "Connected",
130 130
131 //Regular login - message panel - user 131 //Regular login - message panel - user
132 'userLoginPanelUpgradingUserCredentialsMessageTitle': "Verifying credentials", 132 'userLoginPanelUpgradingUserCredentialsMessageTitle': "Verifying credentials",
133 'userLoginPanelUpgradingUserCredentialsMessageText': "Upgrading your credentials to a new authentication schema", 133 'userLoginPanelUpgradingUserCredentialsMessageText': "Upgrading your credentials to a new authentication schema",
134 'userLoginPanelConnectedMessageTitle': "User authenticated", 134 'userLoginPanelConnectedMessageTitle': "User authenticated",
135 'userLoginPanelConnectedMessageText': "Successfully logged in", 135 'userLoginPanelConnectedMessageText': "Successfully logged in",
136 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle': "Verifying credentials", 136 'userLoginPanelTryingAnOlderConnectionSchemaMessageTitle': "Verifying credentials",
137 'userLoginPanelTryingAnOlderConnectionSchemaMessageText': "Trying an older authentication schema", 137 'userLoginPanelTryingAnOlderConnectionSchemaMessageText': "Trying an older authentication schema",
138 'userLoginPanelLoadingUserDataMessageTitle': "User authenticated", 138 'userLoginPanelLoadingUserDataMessageTitle': "User authenticated",
139 'userLoginPanelLoadingUserDataMessageText': "Downloading encrypted card headers from Clipperz", 139 'userLoginPanelLoadingUserDataMessageText': "Downloading encrypted card headers from Clipperz",
140 'userLoginPanelDecryptingUserDataMessageTitle': "User authenticated", 140 'userLoginPanelDecryptingUserDataMessageTitle': "User authenticated",
141 'userLoginPanelDecryptingUserDataMessageText': "Local decryption of card headers", 141 'userLoginPanelDecryptingUserDataMessageText': "Local decryption of card headers",
142 'userLoginPanelDecryptingUserStatisticsMessageTitle': "User authenticated", 142 'userLoginPanelDecryptingUserStatisticsMessageTitle': "User authenticated",
143 'userLoginPanelDecryptingUserStatisticsMessageText': "Local decryption of usage statistics", 143 'userLoginPanelDecryptingUserStatisticsMessageText': "Local decryption of usage statistics",
144 144
145 //Registration page - splash alert 145 //Registration page - splash alert
146 'splashAlertTitle':"Welcome to Clipperz!", 146 'splashAlertTitle':"Welcome to Clipperz!",
147'splashAlertText': "\ 147'splashAlertText': "\
148 <!-- FIX CSS DONE! -->\ 148 <!-- FIX CSS DONE! -->\
149 <p>Some security advice</p>\ 149 <p>Some security advice</p>\
150 <ul>\ 150 <ul>\
151 <li><p>Storing your data at Clipperz is as secure as the passphrase you choose to protect them. Nobody can access them unless they know your passphrase.</p></li>\ 151 <li><p>Storing your data at Clipperz is as secure as the passphrase you choose to protect them. Nobody can access them unless they know your passphrase.</p></li>\
152 <li><p>If you are going to use Clipperz for safeguarding sensitive and critical information please make sure to use a strong passphrase. The longer the better!</p></li>\ 152 <li><p>If you are going to use Clipperz for safeguarding sensitive and critical information please make sure to use a strong passphrase. The longer the better!</p></li>\
153 <li><p>Clipperz will not be able to recover a lost passphrase!</p></li>\ 153 <li><p>Clipperz will not be able to recover a lost passphrase!</p></li>\
154 </ul>\ 154 </ul>\
155 <p>For any further information, please refer to <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a> website.</p>", 155 <p>For any further information, please refer to <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a> website.</p>",
156 'splashAlertCloseButtonLabel':"Ok", 156 'splashAlertCloseButtonLabel':"Ok",
157 157
158 // Registration page - form 158 // Registration page - form
159 'registrationFormTitle': "create your account", 159 'registrationFormTitle': "create your account",
160 'registrationFormUsernameLabel': "username", 160 'registrationFormUsernameLabel': "username",
161 'registrationFormPassphraseLabel': "passphrase", 161 'registrationFormPassphraseLabel': "passphrase",
162 'registrationFormRetypePassphraseLabel': "re-enter passphrase", 162 'registrationFormRetypePassphraseLabel': "re-enter passphrase",
163 'registrationFormSafetyCheckLabel': "I understand that Clipperz will not be able to recover a lost passphrase.", 163 'registrationFormSafetyCheckLabel': "I understand that Clipperz will not be able to recover a lost passphrase.",
164 'registrationFormTermsOfServiceCheckLabel': "I have read and agreed to the <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Terms of Service</a>.", 164 'registrationFormTermsOfServiceCheckLabel': "I have read and agreed to the <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Terms of Service</a>.",
165 'registrationFormDoYouAlreadyHaveAnAccountLabel': "do you already have an account?", 165 'registrationFormDoYouAlreadyHaveAnAccountLabel': "do you already have an account?",
166 'registrationFormSimplyLoginLabel': "simply login", 166 'registrationFormSimplyLoginLabel': "simply login",
167 'registrationFormButtonLabel': "Register", 167 'registrationFormButtonLabel': "Register",
168 168
169// Registration page - warning messages 169// Registration page - warning messages
170 'registrationFormWarningMessageNotMatchingPassphrases':"Your passphrases don't match, please re-type them.", 170 'registrationFormWarningMessageNotMatchingPassphrases':"Your passphrases don't match, please re-type them.",
171 'registrationFormWarningMessageSafetyCheckNotSelected':"Please read and check all the boxes below.", 171 'registrationFormWarningMessageSafetyCheckNotSelected':"Please read and check all the boxes below.",
172 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"You need to agree to the Terms of Service.", 172 'registrationFormWarningMessageTermsOfServiceCheckNotSelected':"You need to agree to the Terms of Service.",
173 173
174 // Registration page - message panel 174 // Registration page - message panel
175 'registrationMessagePanelInitialTitle': "Creating account …", 175 'registrationMessagePanelInitialTitle': "Creating account …",
176 'registrationMessagePanelInitialText': "---", 176 'registrationMessagePanelInitialText': "---",
177 'registrationMessagePanelInitialButtonLabel': "Cancel", 177 'registrationMessagePanelInitialButtonLabel': "Cancel",
178 'registrationMessagePanelRegistrationDoneTitle': "Registration", 178 'registrationMessagePanelRegistrationDoneTitle': "Registration",
179 'registrationMessagePanelRegistrationDoneText': "Done", 179 'registrationMessagePanelRegistrationDoneText': "Done",
180 'registrationMessagePanelFailureTitle': "Registration failed", 180 'registrationMessagePanelFailureTitle': "Registration failed",
181 'registrationMessagePanelFailureButtonLabel': "Close", 181 'registrationMessagePanelFailureButtonLabel': "Close",
182 182
183// Registration page - message panel - connection 183// Registration page - message panel - connection
184 'connectionRegistrationSendingRequestMessageText': "Verifying credentials", 184 'connectionRegistrationSendingRequestMessageText': "Verifying credentials",
185 'connectionRegistrationSendingCredentialsMessageText':"Sending credentials", 185 'connectionRegistrationSendingCredentialsMessageText':"Sending credentials",
186 186
187// Registration page - splash panel 187// Registration page - splash panel
188 'registrationSplashPanelTitle': "Security advice", 188 'registrationSplashPanelTitle': "Security advice",
189 'registrationSplashPanelDescription': "<p>These are your Clipperz credentials, take good care of them. Clipperz will never display your username and passphrase a second time!</p>", 189 'registrationSplashPanelDescription': "<p>These are your Clipperz credentials, take good care of them. Clipperz will never display your username and passphrase a second time!</p>",
190 'registrationSplashPanelUsernameLabel': "username", 190 'registrationSplashPanelUsernameLabel': "username",
191 'registrationSplashPanelPassphraseLabel':"passphrase", 191 'registrationSplashPanelPassphraseLabel':"passphrase",
192 192
193 'registrationSplashPanelShowPassphraseButtonLabel':"show passphrase", 193 'registrationSplashPanelShowPassphraseButtonLabel':"show passphrase",
194 194
195 //Header links 195 //Header links
196 'donateHeaderLinkLabel': "donate", 196 'donateHeaderLinkLabel': "donate",
197 'creditsHeaderLinkLabel': "credits", 197 'creditsHeaderLinkLabel': "credits",
198 'feedbackHeaderLinkLabel': "feedback", 198 'feedbackHeaderLinkLabel': "feedback",
199 'helpHeaderLinkLabel': "help", 199 'helpHeaderLinkLabel': "help",
200 'forumHeaderLinkLabel': "forum", 200 'forumHeaderLinkLabel': "forum",
201 201
202 //Menu labels 202 //Menu labels
203 'recordMenuLabel': "cards", 203 'recordMenuLabel': "cards",
204 'accountMenuLabel': "account", 204 'accountMenuLabel': "account",
205 'dataMenuLabel': "data", 205 'dataMenuLabel': "data",
206 'contactsMenuLabel': "contacts", 206 'contactsMenuLabel': "contacts",
207 'toolsMenuLabel': "tools", 207 'toolsMenuLabel': "tools",
208 'logoutMenuLabel': "logout", 208 'logoutMenuLabel': "logout",
209 'lockMenuLabel': "lock", 209 'lockMenuLabel': "lock",
210 210
211 //Lock dialog 211 //Lock dialog
212 'lockTitle': "The account is locked", 212 'lockTitle': "The account is locked",
213 'lockDescription': "<p>To unlock your account, please enter your passphrase.</p>", 213 'lockDescription': "<p>To unlock your account, please enter your passphrase.</p>",
214 'unlockButtonLabel': "Unlock", 214 'unlockButtonLabel': "Unlock",
215 215
216 //Account panel - change passphrase 216 //Account panel - change passphrase
217 'changePasswordTabLabel': "Change your passphrase", 217 'changePasswordTabLabel': "Change your passphrase",
218 'changePasswordTabTitle': "Change your passphrase", 218 'changePasswordTabTitle': "Change your passphrase",
219 219
220 'changePasswordFormUsernameLabel': "username", 220 'changePasswordFormUsernameLabel': "username",
221 'changePasswordFormOldPassphraseLabel': "old passphrase", 221 'changePasswordFormOldPassphraseLabel': "old passphrase",
222 'changePasswordFormNewPassphraseLabel': "new passphrase", 222 'changePasswordFormNewPassphraseLabel': "new passphrase",
223 'changePasswordFormRetypePassphraseLabel':"re-enter new passphrase", 223 'changePasswordFormRetypePassphraseLabel':"re-enter new passphrase",
224 'changePasswordFormSafetyCheckboxLabel':"I understand that Clipperz will not be able to recover a lost passphrase.", 224 'changePasswordFormSafetyCheckboxLabel':"I understand that Clipperz will not be able to recover a lost passphrase.",
225 'changePasswordFormSubmitLabel': "Change passphrase", 225 'changePasswordFormSubmitLabel': "Change passphrase",
226 226
227 //Account panel - change passphrase - warning messages 227 //Account panel - change passphrase - warning messages
228 'changePasswordFormWrongUsernameWarning': "Wrong username", 228 'changePasswordFormWrongUsernameWarning': "Wrong username",
229 'changePasswordFormWrongPassphraseWarning': "Wrong passphrase", 229 'changePasswordFormWrongPassphraseWarning': "Wrong passphrase",
230 'changePasswordFormWrongRetypePassphraseWarning':"Your passphrases don't match, please re-type them.", 230 'changePasswordFormWrongRetypePassphraseWarning':"Your passphrases don't match, please re-type them.",
231 'changePasswordFormSafetyCheckWarning': "Please read and check the box below.", 231 'changePasswordFormSafetyCheckWarning': "Please read and check the box below.",
232 232
233 //Account panel - change passphrase - progress dialog 233 //Account panel - change passphrase - progress dialog
234 'changePasswordFormProgressDialogTitle': "Changing user credentials", 234 'changePasswordFormProgressDialogTitle': "Changing user credentials",
235 'changePasswordFormProgressDialogEmptyText': "---", 235 'changePasswordFormProgressDialogEmptyText': "---",
236 'changePasswordFormProgressDialogConnectedMessageTitle': "Connected", 236 'changePasswordFormProgressDialogConnectedMessageTitle': "Connected",
237 'changePasswordFormProgressDialogConnectedMessageText': "Done", 237 'changePasswordFormProgressDialogConnectedMessageText': "Done",
238 'changePasswordFormProgressDialogErrorMessageTitle': "Error", 238 'changePasswordFormProgressDialogErrorMessageTitle': "Error",
239 'changePasswordFormProgressDialogErrorMessageText': "Credentials change failed!", 239 'changePasswordFormProgressDialogErrorMessageText': "Credentials change failed!",
240 240
241 'changeCredentialsPanelEncryptingDataMessageTitle': "Changing your passphrase", 241 'changeCredentialsPanelEncryptingDataMessageTitle': "Changing your passphrase",
242 'changeCredentialsPanelEncryptingDataMessageText': "Local encryption of card headers", 242 'changeCredentialsPanelEncryptingDataMessageText': "Local encryption of card headers",
243 'changeCredentialsPanelCreatingNewCredentialsMessageTitle': "Changing your passphrase", 243 'changeCredentialsPanelCreatingNewCredentialsMessageTitle': "Changing your passphrase",
244 'changeCredentialsPanelCreatingNewCredentialsMessageText': "Updating your credentials", 244 'changeCredentialsPanelCreatingNewCredentialsMessageText': "Updating your credentials",
245 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Changing your passphrase", 245 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle':"Changing your passphrase",
246 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Uploading your encrypted credentials to Clipperz", 246 'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText':"Uploading your encrypted credentials to Clipperz",
247 'changeCredentialsPanelDoneMessageTitle': "Changing your passphrase", 247 'changeCredentialsPanelDoneMessageTitle': "Changing your passphrase",
248 'changeCredentialsPanelDoneMessageText': "Done", 248 'changeCredentialsPanelDoneMessageText': "Done",
249 249
250 //Account panel - OTP 250 //Account panel - OTP
251 'manageOTPTabLabel': "Manage your one-time passphrases", 251 'manageOTPTabLabel': "Manage your one-time passphrases",
252 'manageOTPTabTitle': "Manage your one-time passphrases", 252 'manageOTPTabTitle': "Manage your one-time passphrases",
253 253
254 'manageOTPTabDescription':"\ 254 'manageOTPTabDescription':"\
255 <p>A one-time passphrase works like your regular passphrase, but can be used only once.</p>\ 255 <p>A one-time passphrase works like your regular passphrase, but can be used only once.</p>\
256 <p>If the same passphrase is used again at a later stage in a login attempt it will be rejected and the login process will fail.</p>\ 256 <p>If the same passphrase is used again at a later stage in a login attempt it will be rejected and the login process will fail.</p>\
257 <p>Immediately after a successful login, your one-time passphrase will be deleted preventing any fraudulent access.</p>\ 257 <p>Immediately after a successful login, your one-time passphrase will be deleted preventing any fraudulent access.</p>\
258 <p>One-time passphrases are an excellent choice if one is concerned about keyloggers or spyware infections that may be collecting data from compromised machines.</p>\ 258 <p>One-time passphrases are an excellent choice if one is concerned about keyloggers or spyware infections that may be collecting data from compromised machines.</p>\
259 <p><b>It's strongly advisable to use one-time passphrases when accessing Clipperz from public terminals, such as Internet cafes and libraries.</b></p>", 259 <p><b>It's strongly advisable to use one-time passphrases when accessing Clipperz from public terminals, such as Internet cafes and libraries.</b></p>",
260 260
261 //Account panel - OTP - OTP table 261 //Account panel - OTP - OTP table
262'oneTimePasswordReadOnlyMessage': "\ 262'oneTimePasswordReadOnlyMessage': "\
263 <h6>Sorry!</h6>\ 263 <h6>Sorry!</h6>\
264 <p>You cannot manage your one-time passphrases when using the offline version of Clipperz.</p>", 264 <p>You cannot manage your one-time passphrases when using the offline version of Clipperz.</p>",
265 265
266 'oneTimePasswordLoadingMessage':"\ 266 'oneTimePasswordLoadingMessage':"\
267 <h6>Loading data</h6>\ 267 <h6>Loading data</h6>\
268 <p>Please wait …</p>", 268 <p>Please wait …</p>",
269 269
270 'oneTimePasswordNoPasswordAvailable':"\ 270 'oneTimePasswordNoPasswordAvailable':"\
271 <h6>No one-time passphrase available</h6>\ 271 <h6>No one-time passphrase available</h6>\
272 <p>Click the “New” button above to add one-time passphrases to your account.</p>", 272 <p>Click the “New” button above to add one-time passphrases to your account.</p>",
273 273
274 'createNewOTPButtonLabel': "New", 274 'createNewOTPButtonLabel': "New",
275 'deleteOTPButtonLabel': "Delete", 275 'deleteOTPButtonLabel': "Delete",
276 'printOTPButtonLabel': "Print", 276 'printOTPButtonLabel': "Print",
277 277
278 'disabledOneTimePassword_warning': "disabled", 278 'disabledOneTimePassword_warning': "disabled",
279 279
280 'oneTimePasswordSelectionLink_selectLabel':"Select:", 280 'oneTimePasswordSelectionLink_selectLabel':"Select:",
281 'oneTimePasswordSelectionLink_all': "all", 281 'oneTimePasswordSelectionLink_all': "all",
282 'oneTimePasswordSelectionLink_none': "none", 282 'oneTimePasswordSelectionLink_none': "none",
283 'oneTimePasswordSelectionLink_used': "used", 283 'oneTimePasswordSelectionLink_used': "used",
284 'oneTimePasswordSelectionLink_unused': "unused", 284 'oneTimePasswordSelectionLink_unused': "unused",
285 285
286//Account panel - OTP - saving new OTP dialog 286//Account panel - OTP - saving new OTP dialog
287 'saveOTP_encryptUserDataTitle': "Saving one-time passphrase", 287 'saveOTP_encryptUserDataTitle': "Saving one-time passphrase",
288 'saveOTP_encryptUserDataText': "Processing new OTP credentials …", 288 'saveOTP_encryptUserDataText': "Processing new OTP credentials …",
289 'saveOTP_encryptOTPDataTitle': "Saving one-time passphrase", 289 'saveOTP_encryptOTPDataTitle': "Saving one-time passphrase",
290 'saveOTP_encryptOTPDataText': "Local encryption of authentication data …", 290 'saveOTP_encryptOTPDataText': "Local encryption of authentication data …",
291 'saveOTP_sendingDataTitle': "Saving one-time passphrase", 291 'saveOTP_sendingDataTitle': "Saving one-time passphrase",
292 'saveOTP_sendingDataText': "Sending authentication data to the server …", 292 'saveOTP_sendingDataText': "Sending authentication data to the server …",
293 'saveOTP_updatingInterfaceTitle': "Saving one-time passphrase", 293 'saveOTP_updatingInterfaceTitle': "Saving one-time passphrase",
294 'saveOTP_updatingInterfaceText': "Updating interface", 294 'saveOTP_updatingInterfaceText': "Updating interface",
295 295
296// Account panel - preferences 296// Account panel - preferences
297 'accountPreferencesLabel': "Preferences", 297 'accountPreferencesLabel': "Preferences",
298 'accountPreferencesTabTitle': "Preferences", 298 'accountPreferencesTabTitle': "Preferences",
299 299
300 'accountPreferencesLanguageTitle': "Language", 300 'accountPreferencesLanguageTitle': "Language",
301 'accountPreferencesLanguageDescription':"<p>Choose your preferred language from the list below.</p>", 301 'accountPreferencesLanguageDescription':"<p>Choose your preferred language from the list below.</p>",
302 302
303 'showDonationReminderPanelTitle': "Donation reminders", 303 'showDonationReminderPanelTitle': "Donation reminders",
304 'showDonationReminderPanelDescription': "<p>Show donation reminders</p>", 304 'showDonationReminderPanelDescription': "<p>Show donation reminders</p>",
305 305
306 'saveUserPreferencesFormSubmitLabel': "Save", 306 'saveUserPreferencesFormSubmitLabel': "Save",
307 'cancelUserPreferencesFormSubmitLabel': "Cancel", 307 'cancelUserPreferencesFormSubmitLabel': "Cancel",
308 308
309// Account panel - preferences - saving dialog 309// Account panel - preferences - saving dialog
310 'accountPreferencesSavingPanelTitle_Step1': "Saving preferences", 310 'accountPreferencesSavingPanelTitle_Step1': "Saving preferences",
311 'accountPreferencesSavingPanelText_Step1': "Local encryption of your preferences", 311 'accountPreferencesSavingPanelText_Step1': "Local encryption of your preferences",
312 'accountPreferencesSavingPanelTitle_Step2': "Saving preferences", 312 'accountPreferencesSavingPanelTitle_Step2': "Saving preferences",
313 'accountPreferencesSavingPanelText_Step2': "Sending encrypted preferences to Clipperz", 313 'accountPreferencesSavingPanelText_Step2': "Sending encrypted preferences to Clipperz",
314 314
315 //Account panel - login history 315 //Account panel - login history
316 'accountLoginHistoryLabel': "Login history", 316 'accountLoginHistoryLabel': "Login history",
317 'loginHistoryTabTitle': "Login history", 317 'loginHistoryTabTitle': "Login history",
318 318
319 'loginHistoryReadOnlyMessage': "\ 319 'loginHistoryReadOnlyMessage': "\
320 <h6>Sorry!</h6>\ 320 <h6>Sorry!</h6>\
321 <p>The login history is not available while using the offline version of Clipperz.</p>", 321 <p>The login history is not available while using the offline version of Clipperz.</p>",
322 322
323 'loginHistoryLoadingMessage': "\ 323 'loginHistoryLoadingMessage': "\
324 <h6>Loading data</h6>\ 324 <h6>Loading data</h6>\
325 <p>Please wait …</p>", 325 <p>Please wait …</p>",
326 326
327 'loginHistoryLoadedMessage': "\ 327 'loginHistoryLoadedMessage': "\
328 <h6>Your latest 10 logins</h6>\ 328 <h6>Your latest 10 logins</h6>\
329 <p></p>", 329 <p></p>",
330 330
331 'loginHistoryIPLabel': "IP", 331 'loginHistoryIPLabel': "IP",
332 'loginHistoryTimeLabel': "date", 332 'loginHistoryTimeLabel': "date",
333 'loginHistoryCurrentSessionText': "current session", 333 'loginHistoryCurrentSessionText': "current session",
334 'loginHistoryReloadButtonLabel': "Reload login history", 334 'loginHistoryReloadButtonLabel': "Reload login history",
335 335
336 //Account panel - delete account 336 //Account panel - delete account
337 'deleteAccountTabLabel': "Delete your account", 337 'deleteAccountTabLabel': "Delete your account",
338 'deleteAccountTabTitle': "Delete your account", 338 'deleteAccountTabTitle': "Delete your account",
339 339
340 'deleteAccountFormUsernameLabel': "username", 340 'deleteAccountFormUsernameLabel': "username",
341 'deleteAccountFormPassphraseLabel': "passphrase", 341 'deleteAccountFormPassphraseLabel': "passphrase",
342 'deleteAccountFormSafetyCheckboxLabel': "I understand that all my data will be deleted and that this action is irreversible.", 342 'deleteAccountFormSafetyCheckboxLabel': "I understand that all my data will be deleted and that this action is irreversible.",
343 'deleteAccountFormSubmitLabel': "Delete my account", 343 'deleteAccountFormSubmitLabel': "Delete my account",
344 344
345//Account panel - delete account - warnings 345//Account panel - delete account - warnings
346 'deleteAccountFormWrongUsernameWarning':"Wrong username", 346 'deleteAccountFormWrongUsernameWarning':"Wrong username",
347 'deleteAccountFormWrongPassphraseWarning':"Wrong passphrase", 347 'deleteAccountFormWrongPassphraseWarning':"Wrong passphrase",
348 'deleteAccountFormSafetyCheckWarning': "Please read and check the box below.", 348 'deleteAccountFormSafetyCheckWarning': "Please read and check the box below.",
349 349
350//Account panel - delete account - confirmation 350//Account panel - delete account - confirmation
351 'accountPanelDeletingAccountPanelConfirmationTitle':"ATTENTION", 351 'accountPanelDeletingAccountPanelConfirmationTitle':"ATTENTION",
352 'accountPanelDeleteAccountPanelConfirmationText': "Are your sure you want to delete your account?", 352 'accountPanelDeleteAccountPanelConfirmationText': "Are your sure you want to delete your account?",
353 'accountPanelDeleteAccountPanelConfirmButtonLabel': "Yes", 353 'accountPanelDeleteAccountPanelConfirmButtonLabel': "Yes",
354 'accountPanelDeleteAccountPanelDenyButtonLabel': "No", 354 'accountPanelDeleteAccountPanelDenyButtonLabel': "No",
355 355
356//Account panel - delete account - confirmation 356//Account panel - delete account - confirmation
357 'accountPanelDeletingAccountPanelProgressTitle': "Deleting the account data", 357 'accountPanelDeletingAccountPanelProgressTitle': "Deleting the account data",
358 'accountPanelDeletingAccountPanelProgressText': "The operation could take long, please be patient.", 358 'accountPanelDeletingAccountPanelProgressText': "The operation could take long, please be patient.",
359 359
360//Data panel - offline copy 360//Data panel - offline copy
361 'offlineCopyTabLabel': "Offline copy", 361 'offlineCopyTabLabel': "Offline copy",
362 'offlineCopyTabTitle': "Offline copy", 362 'offlineCopyTabTitle': "Offline copy",
363 363
364'offlineCopyTabDescription': "\ 364'offlineCopyTabDescription': "\
365 <!-- FIX CSS DONE! -->\ 365 <!-- FIX CSS DONE! -->\
366 <p>With just one click you can dump all your encrypted data from Clipperz servers to your hard disk and create a read-only offline version of Clipperz to be used when you are not connected to the Internet.</p>\ 366 <p>With just one click you can dump all your encrypted data from Clipperz servers to your hard disk and create a read-only offline version of Clipperz to be used when you are not connected to the Internet.</p>\
367 <p>The read-only version is as secure as the read-and-write one and will not expose your data to higher risks since they both share the same code and security architecture.</p>\ 367 <p>The read-only version is as secure as the read-and-write one and will not expose your data to higher risks since they both share the same code and security architecture.</p>\
368 <ol>\ 368 <ol>\
369 <li><p>Click the link below to start the download.</p></li>\ 369 <li><p>Click the link below to start the download.</p></li>\
370 <li><p>The browser will ask you what to do with the “Clipperz_YYYYMMDD.html” file. Save it on your hard disk.</p></li>\ 370 <li><p>The browser will ask you what to do with the “Clipperz_YYYYMMDD.html” file. Save it on your hard disk.</p></li>\
371 <li><p>Double click on the downloaded file to launch the offline version in your browser.</p></li>\ 371 <li><p>Double click on the downloaded file to launch the offline version in your browser.</p></li>\
372 <li><p>Enter the usual username and passphrase.</p></li>\ 372 <li><p>Enter the usual username and passphrase.</p></li>\
373 </ol>", 373 </ol>",
374 374
375 'offlineCopyDownloadLinkLabel': "Download", 375 'offlineCopyDownloadLinkLabel': "Download",
376 376
377 //Data panel - offline copy - not updated 377 //Data panel - offline copy - not updated
378 'offlineCopyDownloadWarning': "\ 378 'offlineCopyDownloadWarning': "\
379 <!-- FIX CSS DONE! -->\ 379 <!-- FIX CSS DONE! -->\
380 <h4><a href=\"#\" id=\"offlineCopyDownloadWarningLink\">Update your “offline copy”!</a></h4>\ 380 <h4><a href=\"#\" id=\"offlineCopyDownloadWarningLink\">Update your “offline copy”!</a></h4>\
381 <p>You have recently created or modified one or more cards, it would be wise to download a new copy of the offline version.</p>", 381 <p>You have recently created or modified one or more cards, it would be wise to download a new copy of the offline version.</p>",
382 382
383 'offlineCopyDownloadOk': "", 383 'offlineCopyDownloadOk': "",
384 384
385 //Data panel - sharing 385 //Data panel - sharing
386 'sharingTabLabel': "Sharing", 386 'sharingTabLabel': "Sharing",
387 'sharingTabTitle': "Sharing", 387 'sharingTabTitle': "Sharing",
388 388
389 'sharingTabDescription': "\ 389 'sharingTabDescription': "\
390 <p>Quite often a confidential piece of information needs to be shared with one or more persons.</p>\ 390 <p>Quite often a confidential piece of information needs to be shared with one or more persons.</p>\
391 <p>This could be as simple as giving your colleague the access code of your voice mailbox when you are out of the office, or as complicated as enabling the entitled heirs to access your safe deposit box at the local bank when you pass on.</p>\ 391 <p>This could be as simple as giving your colleague the access code of your voice mailbox when you are out of the office, or as complicated as enabling the entitled heirs to access your safe deposit box at the local bank when you pass on.</p>\
392 <p>Clipperz can make sharing your secrets a secure and straightforward process.</p>\ 392 <p>Clipperz can make sharing your secrets a secure and straightforward process.</p>\
393 <p></p>\ 393 <p></p>\
394 <p><b>Coming soon …</b></p>", 394 <p><b>Coming soon …</b></p>",
395 395
396 // Data panel - import 396 // Data panel - import
397 'importTabLabel': "Import", 397 'importTabLabel': "Import",
398 'importTabTitle': "Import", 398 'importTabTitle': "Import",
399 399
400 'importTabDescription': "<p>You can bulk import data to your Clipperz account from several file formats.</p>", 400 'importTabDescription': "<p>You can bulk import data to your Clipperz account from several file formats.</p>",
401 401
402 //Data panel - export 402 //Data panel - export
403 'printingTabLabel': "Export", 403 'printingTabLabel': "Export",
404 'printingTabTitle': "Export", 404 'printingTabTitle': "Export",
405 405
406 'printingTabDescription': "\ 406 'printingTabDescription': "\
407 <h5>Printing</h5>\ 407 <h5>Printing</h5>\
408 <p>Click on the link below to open a new window displaying all your cards in a printable format.</p>\ 408 <p>Click on the link below to open a new window displaying all your cards in a printable format.</p>\
409 <p>If you are going to print for backup purposes, please consider the safer option provided by the “offline copy”.</p>", 409 <p>If you are going to print for backup purposes, please consider the safer option provided by the “offline copy”.</p>",
410 410
411 'printingLinkLabel': "Printable version", 411 'printingLinkLabel': "Printable version",
412 412
413 'exportTabDescription': "\ 413 'exportTabDescription': "\
414 <h5>Exporting to JSON</h5>\ 414 <h5>Exporting to JSON</h5>\
415 <p>JSON enables a “lossless” export of your cards. All the information will be preserved, including direct login configurations.</p>\ 415 <p>JSON enables a “lossless” export of your cards. All the information will be preserved, including direct login configurations.</p>\
416 <p>This custom format it’s quite convenient if you need to move some of all of your cards to a different Clipperz account. Or if you want to restore a card that has been accidentally deleted.</p>\ 416 <p>This custom format it’s quite convenient if you need to move some of all of your cards to a different Clipperz account. Or if you want to restore a card that has been accidentally deleted.</p>\
417 <p>Click on the link below to start the export process.</p>", 417 <p>Click on the link below to start the export process.</p>",
418 418
419 'exportLinkLabel': "Export to JSON", 419 'exportLinkLabel': "Export to JSON",
420 420
421 'exportDataInProgressDescription':"<h4>Exporting, please wait while your data are being processed …</h4>", 421 'exportDataInProgressDescription':"<h4>Exporting, please wait while your data are being processed …</h4>",
422 422
423 'exportDataDescription': "\ 423 'exportDataDescription': "\
424 <h4>Instructions</h4>\ 424 <h4>Instructions</h4>\
425 <p>Copy the text below to your favorite editor and save it. (e.g. “clipperz_export_20071217.json”)</p>", 425 <p>Copy the text below to your favorite editor and save it. (e.g. “clipperz_export_20071217.json”)</p>",
426 426
427 //Contacts panel 427 //Contacts panel
428 'contactsTabLabel': "Contacts", 428 'contactsTabLabel': "Contacts",
429 'contactsTabTitle': "Contacts", 429 'contactsTabTitle': "Contacts",
430 430
431//Tools panel - password generator 431//Tools panel - password generator
432 'passwordGeneratorTabLabel': "Password generator", 432 'passwordGeneratorTabLabel': "Password generator",
433 'bookmarkletTabLabel': "Bookmarklet", 433 'bookmarkletTabLabel': "Bookmarklet",
434 'compactTabLabel': "Compact edition", 434 'compactTabLabel': "Compact edition",
435 'httpAuthTabLabel': "HTTP authentication", 435 'httpAuthTabLabel': "HTTP authentication",
436 436
437 'passwordGeneratorTabTitle': "Password generator", 437 'passwordGeneratorTabTitle': "Password generator",
438 'bookmarkletTabTitle': "Bookmarklet", 438 'bookmarkletTabTitle': "Bookmarklet",
439 'compactTabTitle': "Compact edition", 439 'compactTabTitle': "Compact edition",
440 'httpAuthTabTitle': "HTTP authentication", 440 'httpAuthTabTitle': "HTTP authentication",
441 441
442 442
443 //Tools panel - password generator - description 443 //Tools panel - password generator - description
444 'paswordGeneratorTabDescription':"<p></p>", 444 'paswordGeneratorTabDescription':"<p></p>",
445 'passwordGeneratorTabButtonLabel':"Generate password", 445 'passwordGeneratorTabButtonLabel':"Generate password",
446 446
447 //Tools panel - bookmarklet 447 //Tools panel - bookmarklet
448 'bookmarkletTabLabel': "Bookmarklet", 448 'bookmarkletTabLabel': "Bookmarklet",
449 'bookmarkletTabTitle': "Bookmarklet", 449 'bookmarkletTabTitle': "Bookmarklet",
450 450
451 'bookmarkletTabDescription': "\ 451 'bookmarkletTabDescription': "\
452 <!-- FIX CSS DONE! -->\ 452 <!-- FIX CSS DONE! -->\
453 <p>A bookmarklet is a simple “one-click” tool that can perform very useful tasks. It can be saved and used like a normal web page bookmark.</p>\ 453 <p>A bookmarklet is a simple “one-click” tool that can perform very useful tasks. It can be saved and used like a normal web page bookmark.</p>\
454 <p>The Clipperz bookmarklet will help you to quickly create new cards and new “direct logins” within existing cards.</p>\ 454 <p>The Clipperz bookmarklet will help you to quickly create new cards and new “direct logins” within existing cards.</p>\
455 <p><b>Please note that the bookmarklet does not include any information related to your account (e.g. your username or passphrase), the bookmarklet is a general tool containing the same code for every Clipperz user.</b></p>\ 455 <p><b>Please note that the bookmarklet does not include any information related to your account (e.g. your username or passphrase), the bookmarklet is a general tool containing the same code for every Clipperz user.</b></p>\
456 <h3>How to install the bookmarklet</h3>\ 456 <h3>How to install the bookmarklet</h3>\
457 <h>Firefox, Camino, Opera, Safari</h5>\ 457 <h>Firefox, Camino, Opera, Safari</h5>\
458 <ol>\ 458 <ol>\
459 <li><p>Make sure that the “Bookmarks Bar” is displayed by selecting “View > Toolbars > Bookmarks”, or similar menu items, from the browser menu.</p></li>\ 459 <li><p>Make sure that the “Bookmarks Bar” is displayed by selecting “View > Toolbars > Bookmarks”, or similar menu items, from the browser menu.</p></li>\
460 <li><p>Drag and drop the “Add to Clipperz” link below to the bookmark bar.</p></li>\ 460 <li><p>Drag and drop the “Add to Clipperz” link below to the bookmark bar.</p></li>\
461 </ol>\ 461 </ol>\
462 \ 462 \
463 <h5>Internet Explorer</h5>\ 463 <h5>Internet Explorer</h5>\
464 <ol>\ 464 <ol>\
465 <li><p>Make sure that the “Links” toolbar is displayed by selecting “View > Toolbars > Links” from the browser menu.</p></li>\ 465 <li><p>Make sure that the “Links” toolbar is displayed by selecting “View > Toolbars > Links” from the browser menu.</p></li>\
466 <li><p>Right-click on the “Add to Clipperz” link below.</p></li>\ 466 <li><p>Right-click on the “Add to Clipperz” link below.</p></li>\
467 <li><p>Select “Add to favorites” from the contextual menu.</p></li>\ 467 <li><p>Select “Add to favorites” from the contextual menu.</p></li>\
468 <li><p>Click “Yes” for any security message that pops up.</p></li>\ 468 <li><p>Click “Yes” for any security message that pops up.</p></li>\
469 <li><p>Open the “Links” folder and click “OK”</p></li>\ 469 <li><p>Open the “Links” folder and click “OK”</p></li>\
470 </ol>", 470 </ol>",
471 471
472 'bookmarkletTabBookmarkletTitle':"Add to Clipperz", 472 'bookmarkletTabBookmarkletTitle':"Add to Clipperz",
473 473
474 //Tools panel - bookmarklet - instructions 474 //Tools panel - bookmarklet - instructions
475 'bookmarkletTabInstructions': "\ 475 'bookmarkletTabInstructions': "\
476 <!-- FIX CSS DONE! -->\ 476 <!-- FIX CSS DONE! -->\
477 <h3>How to create a new card inclusive of a “direct login” link to an online service</h3>\ 477 <h3>How to create a new card inclusive of a “direct login” link to an online service</h3>\
478 <ol>\ 478 <ol>\
479 <li><p>Open the web page where the login form is hosted. (this is the page where you usually enter your sign-in credentials)</p></li>\ 479 <li><p>Open the web page where the login form is hosted. (this is the page where you usually enter your sign-in credentials)</p></li>\
480 <li><p>Launch the bookmarklet by clicking on it: a pop-up window will appear over the web page.</p></li>\ 480 <li><p>Launch the bookmarklet by clicking on it: a pop-up window will appear over the web page.</p></li>\
481 <li><p>Copy to the clipboard the content of the large text area within the pop-up. (ctrl-C)</p></li>\ 481 <li><p>Copy to the clipboard the content of the large text area within the pop-up. (ctrl-C)</p></li>\
482 <li><p>Enter your Clipperz account and click on the <b>Add new card</b> button.</p></li>\ 482 <li><p>Enter your Clipperz account and click on the <b>Add new card</b> button.</p></li>\
483 <li><p>Select the “Direct login” template and paste the content of the clipboard to the large text area in the form. (ctrl-V)</p></li>\ 483 <li><p>Select the “Direct login” template and paste the content of the clipboard to the large text area in the form. (ctrl-V)</p></li>\
484 <li><p>Press the <b>Create</b> button, complete and review the details, then click <b>Save</b>.</p></li>\ 484 <li><p>Press the <b>Create</b> button, complete and review the details, then click <b>Save</b>.</p></li>\
485 </ol>\ 485 </ol>\
486 \ 486 \
487 <h3>How to add a “direct login” link to an existing card</h3>\ 487 <h3>How to add a “direct login” link to an existing card</h3>\
488 <ol>\ 488 <ol>\
489 <li><p>Same as above.</p></li>\ 489 <li><p>Same as above.</p></li>\
490 <li><p>Same as above.</p></li>\ 490 <li><p>Same as above.</p></li>\
491 <li><p>Same as above.</p></li>\ 491 <li><p>Same as above.</p></li>\
492 <li><p>Enter your Clipperz account and select the card containing the credentials for the web service you just visited and click the <b>Edit</b> button.</p></li>\ 492 <li><p>Enter your Clipperz account and select the card containing the credentials for the web service you just visited and click the <b>Edit</b> button.</p></li>\
493 <li><p>Paste the content of the clipboard to the large text area in the “Direct logins” section. (ctrl-V)</p></li>\ 493 <li><p>Paste the content of the clipboard to the large text area in the “Direct logins” section. (ctrl-V)</p></li>\
494 <li><p>Press the <b>Add direct login</b> button, review the details and then click <b>Save</b>.</p></li>\ 494 <li><p>Press the <b>Add direct login</b> button, review the details and then click <b>Save</b>.</p></li>\
495 </ol>\ 495 </ol>\
496 \ 496 \
497 <p></p>\ 497 <p></p>\
498 <p>Further information about the bookmarklet are <a href=\"http://www.clipperz.com/support/user_guide/bookmarklet\" target=\"_blank\">available here</a>.</p>", 498 <p>Further information about the bookmarklet are <a href=\"http://www.clipperz.com/support/user_guide/bookmarklet\" target=\"_blank\">available here</a>.</p>",
499 499
500 //Tools panel - Compact - instructions 500 //Tools panel - Compact - instructions
501 'compactTabDescription': "\ 501 'compactTabDescription': "\
502 <!-- FIX CSS DONE! -->\ 502 <!-- FIX CSS DONE! -->\
503 <p>Clipperz Compact is a special version of Clipperz designed to be opened in the Firefox sidebar.</p>\ 503 <p>Clipperz Compact is a special version of Clipperz designed to be opened in the Firefox sidebar.</p>\
504 <p>Its purpose is to keep your collection of “direct logins” always at hand. Read more <a href=\"http://www.clipperz.com/support/user_guide/clipperz_compact\", target=\"blank\">here</a></p>\ 504 <p>Its purpose is to keep your collection of “direct logins” always at hand. Read more <a href=\"http://www.clipperz.com/support/user_guide/clipperz_compact\", target=\"blank\">here</a></p>\
505 \ 505 \
506 <h3>How to launch Clipperz Compact in the sidebar</h3>\ 506 <h3>How to launch Clipperz Compact in the sidebar</h3>\
507 <ol>\ 507 <ol>\
508 <li><p>Get Firefox! Sidebars are only available in Firefox and you need to switch to Firefox in order to enjoy the convenience of Clipperz Compact.</p></li>\ 508 <li><p>Get Firefox! Sidebars are only available in Firefox and you need to switch to Firefox in order to enjoy the convenience of Clipperz Compact.</p></li>\
509 <li>\ 509 <li>\
510 <p>Add the following URL to Firefox bookmarks, or even better, drag it to the bookmark bar.</p>\ 510 <p>Add the following URL to Firefox bookmarks, or even better, drag it to the bookmark bar.</p>\
511 <div id=\"compactLinkBox\"><a href=\"index.html?compact\" target=\"_search\">Clipperz Compact</a></div>\ 511 <div id=\"compactLinkBox\"><a href=\"./index.html?compact\" target=\"_search\">Clipperz Compact</a></div>\
512 </li>\ 512 </li>\
513 <li><p>Change the properties of the bookmark so that “load this bookmark in the sidebar” is checked.</p></li>\ 513 <li><p>Change the properties of the bookmark so that “load this bookmark in the sidebar” is checked.</p></li>\
514 </ol>\ 514 </ol>\
515 \ 515 \
516 <h5>Added bonus: Clipperz Compact works also in Opera’s panel.</h5>", 516 <h5>Added bonus: Clipperz Compact works also in Opera’s panel.</h5>",
517 517
518 //Tools panel - HTTP authentication - instructions 518 //Tools panel - HTTP authentication - instructions
519 'httpAuthTabDescription': "\ 519 'httpAuthTabDescription': "\
520 <!-- FIX CSS DONE! -->\ 520 <!-- FIX CSS DONE! -->\
521 <p>HTTP authentication is a method designed to allow a web browser to provide credentials – in the form of a username and password – including them in a website address (HTTP or HTTPS URL).</p>\ 521 <p>HTTP authentication is a method designed to allow a web browser to provide credentials – in the form of a username and password – including them in a website address (HTTP or HTTPS URL).</p>\
522 <p>Nowadays it is rarely used, but it can still be found on small, private websites. You can tell that a website is protected by HTTP authentication when the browser displays a pop-up window to enter username and password.</p>\ 522 <p>Nowadays it is rarely used, but it can still be found on small, private websites. You can tell that a website is protected by HTTP authentication when the browser displays a pop-up window to enter username and password.</p>\
523 <p>Unfortunately the Clipperz bookmarklet does not work on websites that use HTTP authentication. However you can still create a “direct login”.</p>\ 523 <p>Unfortunately the Clipperz bookmarklet does not work on websites that use HTTP authentication. However you can still create a “direct login”.</p>\
524 \ 524 \
525 <h3>How to create a “direct login” for a website that uses HTTP authentication</h3>\ 525 <h3>How to create a “direct login” for a website that uses HTTP authentication</h3>\
526 <ol>\ 526 <ol>\
527 <li><p>Store website URL, username and password in a new card.</p></li>\ 527 <li><p>Store website URL, username and password in a new card.</p></li>\
528 <li><p>Copy the configuration below and paste it to the large text area in the “Direct logins” section of the new card.</p></li>\ 528 <li><p>Copy the configuration below and paste it to the large text area in the “Direct logins” section of the new card.</p></li>\
529 <li><p>Press the <b>Add direct login</b> button, bind URL, username and password fields and then click <b>Save</b>.</p></li>\ 529 <li><p>Press the <b>Add direct login</b> button, bind URL, username and password fields and then click <b>Save</b>.</p></li>\
530 </ol>\ 530 </ol>\
531 \ 531 \
532 <h5><a href=\"http://support.microsoft.com/kb/834489\" target=\"_blank\">Warning: Internet Explorer does not support HTTP authentication.</a></h5>", 532 <h5><a href=\"http://support.microsoft.com/kb/834489\" target=\"_blank\">Warning: Internet Explorer does not support HTTP authentication.</a></h5>",
533 533
534// Direct logins block 534// Direct logins block
535 'mainPanelDirectLoginBlockLabel': "Direct logins", 535 'mainPanelDirectLoginBlockLabel': "Direct logins",
536 'directLinkReferenceShowButtonLabel': "show", 536 'directLinkReferenceShowButtonLabel': "show",
537 537
538// Direct logins - blank slate 538// Direct logins - blank slate
539 'mainPanelDirectLoginBlockDescription': "\ 539 'mainPanelDirectLoginBlockDescription': "\
540 <!-- FIX CSS DONE! -->\ 540 <!-- FIX CSS DONE! -->\
541 <p>Add “direct logins” to sign in to your web accounts without typing usernames and passwords!</p>\ 541 <p>Add “direct logins” to sign in to your web accounts without typing usernames and passwords!</p>\
542 <p>“Direct logins” greatly enhance your password security since you can:</p>\ 542 <p>“Direct logins” greatly enhance your password security since you can:</p>\
543 <ul>\ 543 <ul>\
544 <li><p>conveniently adopt and enter complex passwords;</p></li>\ 544 <li><p>conveniently adopt and enter complex passwords;</p></li>\
545 <li><p>never re-use the same and easy-to-guess password.</p></li>\ 545 <li><p>never re-use the same and easy-to-guess password.</p></li>\
546 </ul>\ 546 </ul>\
547 <p>Simple and quick configuration with the <b>Clipperz bookmarklet</b>.</p>\ 547 <p>Simple and quick configuration with the <b>Clipperz bookmarklet</b>.</p>\
548 <a href=\"http://www.clipperz.com/support/user_guide/direct_logins\" target=\"_blank\">Learn more about “direct logins”</a>", 548 <a href=\"http://www.clipperz.com/support/user_guide/direct_logins\" target=\"_blank\">Learn more about “direct logins”</a>",
549 549
550 // Cards block 550 // Cards block
551 'mainPanelRecordsBlockLabel': "Cards", 551 'mainPanelRecordsBlockLabel': "Cards",
552 'mainPanelAddRecordButtonLabel': "Add new card", 552 'mainPanelAddRecordButtonLabel': "Add new card",
553 'mainPanelRemoveRecordButtonLabel': "Delete card", 553 'mainPanelRemoveRecordButtonLabel': "Delete card",
554 554
555// Cards block - filter tabs 555// Cards block - filter tabs
556 'mainPanelRecordFilterBlockAllLabel': "all", 556 'mainPanelRecordFilterBlockAllLabel': "all",
557 'mainPanelRecordFilterBlockTagsLabel': "tags", 557 'mainPanelRecordFilterBlockTagsLabel': "tags",
558 'mainPanelRecordFilterBlockSearchLabel':"search", 558 'mainPanelRecordFilterBlockSearchLabel':"search",
559 559
560// Cards block - blank slate 560// Cards block - blank slate
561 'recordDetailNoRecordAtAllTitle': "Welcome to Clipperz!", 561 'recordDetailNoRecordAtAllTitle': "Welcome to Clipperz!",
562 'recordDetailNoRecordAtAllDescription': "\ 562 'recordDetailNoRecordAtAllDescription': "\
563 <h5>Get started by adding cards to your account.</h5>\ 563 <h5>Get started by adding cards to your account.</h5>\
564 <p>Cards are simple and flexible forms where you can store your passwords and any other confidential data.</p>\ 564 <p>Cards are simple and flexible forms where you can store your passwords and any other confidential data.</p>\
565 <p>Cards could contain credentials for accessing a web site, the combination of your bicycle lock, details of your credit card, …</p>\ 565 <p>Cards could contain credentials for accessing a web site, the combination of your bicycle lock, details of your credit card, …</p>\
566 \ 566 \
567 <h5>Don't forget the Clipperz bookmarklet!</h5>\ 567 <h5>Don't forget the Clipperz bookmarklet!</h5>\
568 <p>Before you start, install the “Add to Clipperz” bookmarklet: it will make creating cards easier and more fun.</p>\ 568 <p>Before you start, install the “Add to Clipperz” bookmarklet: it will make creating cards easier and more fun.</p>\
569 <p>Go to the “Tools” tab to discover how to install it and how it use it.</p>\ 569 <p>Go to the “Tools” tab to discover how to install it and how it use it.</p>\
570 <p></p>\ 570 <p></p>\
571 <p>Then simply click the <b>\"Add new card\"</b> button and enjoy your Clipperz account.</p>\ 571 <p>Then simply click the <b>\"Add new card\"</b> button and enjoy your Clipperz account.</p>\
572 <p></p>\ 572 <p></p>\
573 <a href=\"http://www.clipperz.com/support/user_guide/managing_cards\" target=\"_blank\">Learn more about creating and managing cards</a>", 573 <a href=\"http://www.clipperz.com/support/user_guide/managing_cards\" target=\"_blank\">Learn more about creating and managing cards</a>",
574 574
575// Cards block - new card wizard - bookmarklet configuration 575// Cards block - new card wizard - bookmarklet configuration
576 'newRecordWizardTitleBox': "\ 576 'newRecordWizardTitleBox': "\
577 <h5>Please select a template</h5>\ 577 <h5>Please select a template</h5>\
578 <p>Cards are simple and flexible forms where you can store passwords or any other confidential data.</p>\ 578 <p>Cards are simple and flexible forms where you can store passwords or any other confidential data.</p>\
579 <p>Start choosing one of the templates below. You can always customize your cards later by adding or removing fields.</p>", 579 <p>Start choosing one of the templates below. You can always customize your cards later by adding or removing fields.</p>",
580 580
581 'newRecordWizardBookmarkletConfigurationTitle': "Direct login", 581 'newRecordWizardBookmarkletConfigurationTitle': "Direct login",
582 'newRecordWizardBookmarkletConfigurationDescription':"\ 582 'newRecordWizardBookmarkletConfigurationDescription':"\
583 <p>Paste below the configuration code generated by the Clipperz bookmarklet.</p>\ 583 <p>Paste below the configuration code generated by the Clipperz bookmarklet.</p>\
584 <p>A new card complete with a direct login to your web account will be created.</p>", 584 <p>A new card complete with a direct login to your web account will be created.</p>",
585 585
586 'newRecordWizardCreateButtonLabel': "Create", 586 'newRecordWizardCreateButtonLabel': "Create",
587 'newRecordWizardCancelButtonLabel': "Cancel", 587 'newRecordWizardCancelButtonLabel': "Cancel",
588 588
589 //Create new card - Donation splash 589 //Create new card - Donation splash
590 'donateSplashPanelTitle': "Support Clipperz, make a donation today!", 590 'donateSplashPanelTitle': "Support Clipperz, make a donation today!",
591 'donateSplashPanelDescription': "\ 591 'donateSplashPanelDescription': "\
592 <!-- FIX CSS DONE! -->\ 592 <!-- FIX CSS DONE! -->\
593 <p>A few good reasons to make a donation:</p>\ 593 <p>A few good reasons to make a donation:</p>\
594 <ul>\ 594 <ul>\
595 <li><p>support the development of new features</p></li>\ 595 <li><p>support the development of new features</p></li>\
596 <li><p>keep Clipperz free</p></li>\ 596 <li><p>keep Clipperz free</p></li>\
597 <li><p>show appreciation for our hard work</p></li>\ 597 <li><p>show appreciation for our hard work</p></li>\
598 </ul>\ 598 </ul>\
599 <p>For any further information, please visit our <a href=\"http://www.clipperz.com/donations\" target=\"_blank\">Donations page</a>.</p>\ 599 <p>For any further information, please visit our <a href=\"http://www.clipperz.com/donations\" target=\"_blank\">Donations page</a>.</p>\
600 <p><b>Ready to donate?</b></p>", 600 <p><b>Ready to donate?</b></p>",
601 601
602 'donateCloseButtonLabel': "Not yet", 602 'donateCloseButtonLabel': "Not yet",
603 'donateDonateButtonLabel': "Yes", 603 'donateDonateButtonLabel': "Yes",
604 604
605// Card templates 605// Card templates
606'recordTemplates': { 606'recordTemplates': {
607 607
608//Web password 608//Web password
609 'WebAccount': { 609 'WebAccount': {
610 'title': "Web password", 610 'title': "Web password",
611 'description':"<p>A simple card to store login credentials for your online services.</p>", 611 'description':"<p>A simple card to store login credentials for your online services.</p>",
612 'fields': [ 612 'fields': [
613 {label:"Web address", type:'URL'}, 613 {label:"Web address", type:'URL'},
614 {label:"Username or email", type:'TXT'}, 614 {label:"Username or email", type:'TXT'},
615 {label:"Password", type:'PWD'} 615 {label:"Password", type:'PWD'}
616 ] 616 ]
617 }, 617 },
618 618
619 //Bank account 619 //Bank account
620 'BankAccount': { 620 'BankAccount': {
621 'title': "Bank account", 621 'title': "Bank account",
622 'description':"<p>Safely store your bank account number and online banking credentials.</p>", 622 'description':"<p>Safely store your bank account number and online banking credentials.</p>",
623 'fields': [ 623 'fields': [
624 {label:"Bank", type:'TXT'}, 624 {label:"Bank", type:'TXT'},
625 {label:"Account number", type:'TXT'}, 625 {label:"Account number", type:'TXT'},
626 {label:"Bank website", type:'URL'}, 626 {label:"Bank website", type:'URL'},
627 {label:"Online banking ID", type:'TXT'}, 627 {label:"Online banking ID", type:'TXT'},
628 {label:"Online banking password", type:'PWD'} 628 {label:"Online banking password", type:'PWD'}
629 ] 629 ]
630 }, 630 },
631 631
632 // Credit card 632 // Credit card
633 'CreditCard': { 633 'CreditCard': {
634 'title': "Credit card", 634 'title': "Credit card",
635 'description':"<p>Card number, expire date, CVV2 and PIN always at hand with Clipperz.</p>", 635 'description':"<p>Card number, expire date, CVV2 and PIN always at hand with Clipperz.</p>",
636 'fields': [ 636 'fields': [
637 {label:"Type (Visa, AmEx, …)", type:'TXT'}, 637 {label:"Type (Visa, AmEx, …)", type:'TXT'},
638 {label:"Number", type:'TXT'}, 638 {label:"Number", type:'TXT'},
639 {label:"Owner name", type:'TXT'}, 639 {label:"Owner name", type:'TXT'},
640 {label:"Expiry date", type:'TXT'}, 640 {label:"Expiry date", type:'TXT'},
641 {label:"CVV2", type:'TXT'}, 641 {label:"CVV2", type:'TXT'},
642 {label:"PIN", type:'PWD'}, 642 {label:"PIN", type:'PWD'},
643 {label:"Card website", type:'URL'}, 643 {label:"Card website", type:'URL'},
644 {label:"Username", type:'TXT'}, 644 {label:"Username", type:'TXT'},
645 {label:"Password", type:'PWD'} 645 {label:"Password", type:'PWD'}
646 ] 646 ]
647 }, 647 },
648 648
649 // Address book entry 649 // Address book entry
650 'AddressBookEntry': { 650 'AddressBookEntry': {
651 'title': "Address book entry", 651 'title': "Address book entry",
652 'description':"<p>Clipperz could also work as your new private address book. Use this template to easily add a new entry.</p>", 652 'description':"<p>Clipperz could also work as your new private address book. Use this template to easily add a new entry.</p>",
653 'fields': [ 653 'fields': [
654 {label:"Name", type:'TXT'}, 654 {label:"Name", type:'TXT'},
655 {label:"Email", type:'TXT'}, 655 {label:"Email", type:'TXT'},
656 {label:"Phone", type:'TXT'}, 656 {label:"Phone", type:'TXT'},
657 {label:"Mobile", type:'TXT'}, 657 {label:"Mobile", type:'TXT'},
658 {label:"Address", type:'ADDR'}, 658 {label:"Address", type:'ADDR'},
659 ] 659 ]
660 }, 660 },
661 661
662//Custom card 662//Custom card
663 'Custom': { 663 'Custom': {
664 'title': "Custom card", 664 'title': "Custom card",
665 'description':"<p>No matter which kind of confidential data you need to protect, create a custom card to match your needs.</p>", 665 'description':"<p>No matter which kind of confidential data you need to protect, create a custom card to match your needs.</p>",
666 'fields': [ 666 'fields': [
667 {label:"Label 1", type:'TXT'}, 667 {label:"Label 1", type:'TXT'},
668 {label:"Label 2", type:'TXT'}, 668 {label:"Label 2", type:'TXT'},
669 {label:"Label 3", type:'TXT'} 669 {label:"Label 3", type:'TXT'}
670 ] 670 ]
671 } 671 }
672}, 672},
673 673
674 674
675'recordFieldTypologies': { 675'recordFieldTypologies': {
676 'TXT': { 676 'TXT': {
677 description: "simple text field", 677 description: "simple text field",
678 shortDescription: "text" 678 shortDescription: "text"
679 }, 679 },
680 'PWD': { 680 'PWD': {
681 description: "simple text field, with default status set to hidden", 681 description: "simple text field, with default status set to hidden",
682 shortDescription: "password" 682 shortDescription: "password"
683 }, 683 },
684 'URL': { 684 'URL': {
685 description: "simple text field in edit mode, that became an active url in view mode", 685 description: "simple text field in edit mode, that became an active url in view mode",
686 shortDescription: "web address" 686 shortDescription: "web address"
687 }, 687 },
688 'DATE': { 688 'DATE': {
689 description: "a value set with a calendar helper", 689 description: "a value set with a calendar helper",
690 shortDescription: "date" 690 shortDescription: "date"
691 }, 691 },
692 'ADDR': { 692 'ADDR': {
693 description: "just like the URL, but the active link points to Google Maps (or similar service) passing the address value as argument", 693 description: "just like the URL, but the active link points to Google Maps (or similar service) passing the address value as argument",
694 shortDescription: "street address" 694 shortDescription: "street address"
695 }, 695 },
696 'CHECK': { 696 'CHECK': {
697 description: "check description", 697 description: "check description",
698 shortDescription: "check" 698 shortDescription: "check"
699 }, 699 },
700 'RADIO': { 700 'RADIO': {
701 description: "radio description", 701 description: "radio description",
702 shortDescription: "radio" 702 shortDescription: "radio"
703 }, 703 },
704 'SELECT': { 704 'SELECT': {
705 description: "select description", 705 description: "select description",
706 shortDescription: "select" 706 shortDescription: "select"
707 } 707 }
708}, 708},
709 709
710// Cards block - new card - warnings 710// Cards block - new card - warnings
711 'newRecordPanelGeneralExceptionTitle': "Error", 711 'newRecordPanelGeneralExceptionTitle': "Error",
712 'newRecordPanelGeneralExceptionMessage': "The configuration text is not valid. Make sure to get your text from the bookmarklet pop-up and retry.", 712 'newRecordPanelGeneralExceptionMessage': "The configuration text is not valid. Make sure to get your text from the bookmarklet pop-up and retry.",
713 'newRecordPanelWrongBookmarkletVersionExceptionTitle': "Error", 713 'newRecordPanelWrongBookmarkletVersionExceptionTitle': "Error",
714 'newRecordPanelWrongBookmarkletVersionExceptionMessage':"The configuration text has been generated by an old version of the bookmarklet. Please update your bookmarklet and retry.", 714 'newRecordPanelWrongBookmarkletVersionExceptionMessage':"The configuration text has been generated by an old version of the bookmarklet. Please update your bookmarklet and retry.",
715 'newRecordPanelExceptionPanelCloseButtonLabel': "Cancel", 715 'newRecordPanelExceptionPanelCloseButtonLabel': "Cancel",
716 716
717// Cards block - delete card 717// Cards block - delete card
718 'mainPanelDeletingRecordPanelConfirmationTitle': "Deleting selected card", 718 'mainPanelDeletingRecordPanelConfirmationTitle': "Deleting selected card",
719 'mainPanelDeleteRecordPanelConfirmationText': "Do your really want to delete the selected card?", 719 'mainPanelDeleteRecordPanelConfirmationText': "Do your really want to delete the selected card?",
720 'mainPanelDeleteRecordPanelConfirmButtonLabel': "Yes", 720 'mainPanelDeleteRecordPanelConfirmButtonLabel': "Yes",
721 'mainPanelDeleteRecordPanelDenyButtonLabel': "No", 721 'mainPanelDeleteRecordPanelDenyButtonLabel': "No",
722 'mainPanelDeletingRecordPanelInitialTitle': "Deleting selected card", 722 'mainPanelDeletingRecordPanelInitialTitle': "Deleting selected card",
723 'mainPanelDeletingRecordPanelInitialText': "---", 723 'mainPanelDeletingRecordPanelInitialText': "---",
724 'mainPanelDeletingRecordPanelCompletedText': "Done", 724 'mainPanelDeletingRecordPanelCompletedText': "Done",
725 725
726// Cards block - delete card panel 726// Cards block - delete card panel
727 'deleteRecordPanelCollectRecordDataMessageTitle': "Delete card", 727 'deleteRecordPanelCollectRecordDataMessageTitle': "Delete card",
728 'deleteRecordPanelCollectRecordDataMessageText': "Updating card list", 728 'deleteRecordPanelCollectRecordDataMessageText': "Updating card list",
729 'deleteRecordPanelEncryptUserDataMessageTitle': "Delete card", 729 'deleteRecordPanelEncryptUserDataMessageTitle': "Delete card",
730 'deleteRecordPanelEncryptUserDataMessageText': "Local encryption of card headers", 730 'deleteRecordPanelEncryptUserDataMessageText': "Local encryption of card headers",
731 'deleteRecordPanelSendingDataToTheServerMessageTitle': "Delete card", 731 'deleteRecordPanelSendingDataToTheServerMessageTitle': "Delete card",
732 'deleteRecordPanelSendingDataToTheServerMessageText': "Uploading encrypted card headers to Clipperz", 732 'deleteRecordPanelSendingDataToTheServerMessageText': "Uploading encrypted card headers to Clipperz",
733 'deleteRecordPanelUpdatingTheInterfaceMessageTitle': "Delete card", 733 'deleteRecordPanelUpdatingTheInterfaceMessageTitle': "Delete card",
734 'deleteRecordPanelUpdatingTheInterfaceMessageText': "Updating the interface", 734 'deleteRecordPanelUpdatingTheInterfaceMessageText': "Updating the interface",
735 735
736// Cards block - no record selected 736// Cards block - no record selected
737 'recordDetailNoRecordSelectedTitle': "No card selected", 737 'recordDetailNoRecordSelectedTitle': "No card selected",
738 'recordDetailNoRecordSelectedDescription': "<p>Please select a card from the list on the left.</p>", 738 'recordDetailNoRecordSelectedDescription': "<p>Please select a card from the list on the left.</p>",
739 739
740 // Cards block - loading messages 740 // Cards block - loading messages
741 'recordDetailLoadingRecordMessage': "Downloading encrypted card from Clipperz", 741 'recordDetailLoadingRecordMessage': "Downloading encrypted card from Clipperz",
742 'recordDetailDecryptingRecordMessage': "Local decryption of card\'s data", 742 'recordDetailDecryptingRecordMessage': "Local decryption of card\'s data",
743 'recordDetailLoadingRecordVersionMessage': "Downloading latest card version", 743 'recordDetailLoadingRecordVersionMessage': "Downloading latest card version",
744 'recordDetailDecryptingRecordVersionMessage': "Local decryption of latest version", 744 'recordDetailDecryptingRecordVersionMessage': "Local decryption of latest version",
745 'recordDetailLoadingErrorMessageTitle': "Error while downloading the card", 745 'recordDetailLoadingErrorMessageTitle': "Error while downloading the card",
746 746
747// Cards block - card details 747// Cards block - card details
748 'recordDetailNotesLabel': "Notes", 748 'recordDetailNotesLabel': "Notes",
749 'recordDetailLabelFieldColumnLabel': "Field label", 749 'recordDetailLabelFieldColumnLabel': "Field label",
750 'recordDetailDataFieldColumnLabel': "Field data", 750 'recordDetailDataFieldColumnLabel': "Field data",
751 'recordDetailTypeFieldColumnLabel': "Type", 751 'recordDetailTypeFieldColumnLabel': "Type",
752 752
753 'recordDetailSavingChangesMessagePanelInitialTitle': "Saving card", 753 'recordDetailSavingChangesMessagePanelInitialTitle': "Saving card",
754 'recordDetailSavingChangesMessagePanelInitialText': "---", 754 'recordDetailSavingChangesMessagePanelInitialText': "---",
755 755
756 'recordDetailRemoveFieldButtonLabel': "-", 756 'recordDetailRemoveFieldButtonLabel': "-",
757 'recordDetailAddFieldButtonLabel': "Add new field", 757 'recordDetailAddFieldButtonLabel': "Add new field",
758 'recordDetailPasswordFieldHelpLabel': "click the stars to select the password and then Ctrl-C to copy", 758 'recordDetailPasswordFieldHelpLabel': "click the stars to select the password and then Ctrl-C to copy",
759 759
760 'recordDetailPasswordFieldScrambleLabel': "scramble", 760 'recordDetailPasswordFieldScrambleLabel': "scramble",
761 'recordDetailPasswordFieldUnscrambleLabel': "unscramble", 761 'recordDetailPasswordFieldUnscrambleLabel': "unscramble",
762 762
763 'recordDetailDirectLoginBlockTitle': "Direct logins", 763 'recordDetailDirectLoginBlockTitle': "Direct logins",
764 'recordDetailNewDirectLoginDescription': "<p>Direct login configuration</p>", 764 'recordDetailNewDirectLoginDescription': "<p>Direct login configuration</p>",
765 765
766 'recordDetailDirectLoginBlockNoDirectLoginConfiguredDescription':"\ 766 'recordDetailDirectLoginBlockNoDirectLoginConfiguredDescription':"\
767 <p>Does this card contain credentials to access an online service?</p>\ 767 <p>Does this card contain credentials to access an online service?</p>\
768 <p>Use the bookmarklet to configure a “direct login” from Clipperz with just one click!</p>", 768 <p>Use the bookmarklet to configure a “direct login” from Clipperz with just one click!</p>",
769 769
770 'recordDetailDeleteDirectLoginButtonLabel': "-", 770 'recordDetailDeleteDirectLoginButtonLabel': "-",
771 'recordDetailAddNewDirectLoginButtonLabel': "Add new direct login", 771 'recordDetailAddNewDirectLoginButtonLabel': "Add new direct login",
772 772
773 'recordDetailEditButtonLabel': "Edit", 773 'recordDetailEditButtonLabel': "Edit",
774 'recordDetailSaveButtonLabel': "Save", 774 'recordDetailSaveButtonLabel': "Save",
775 'recordDetailCancelButtonLabel': "Cancel", 775 'recordDetailCancelButtonLabel': "Cancel",
776 776
777 'newRecordTitleLabel': "_new card_", 777 'newRecordTitleLabel': "_new card_",
778 'newDirectLoginLabelSuffix': "", 778 'newDirectLoginLabelSuffix': "",
779 779
780// Cards block - save card panel 780// Cards block - save card panel
781 'recordSaveChangesPanelCollectRecordInfoMessageTitle': "Save card", 781 'recordSaveChangesPanelCollectRecordInfoMessageTitle': "Save card",
782 'recordSaveChangesPanelCollectRecordInfoMessageText': "Updating card headers", 782 'recordSaveChangesPanelCollectRecordInfoMessageText': "Updating card headers",
783 'recordSaveChangesPanelEncryptUserDataMessageTitle': "Save card", 783 'recordSaveChangesPanelEncryptUserDataMessageTitle': "Save card",
784 'recordSaveChangesPanelEncryptUserDataMessageText': "Local encryption of card headers", 784 'recordSaveChangesPanelEncryptUserDataMessageText': "Local encryption of card headers",
785 'recordSaveChangesPanelEncryptRecordDataMessageTitle': "Save card", 785 'recordSaveChangesPanelEncryptRecordDataMessageTitle': "Save card",
786 'recordSaveChangesPanelEncryptRecordDataMessageText': "Local encryption of card's data", 786 'recordSaveChangesPanelEncryptRecordDataMessageText': "Local encryption of card's data",
787 'recordSaveChangesPanelEncryptRecordVersionDataMessageTitle':"Save card", 787 'recordSaveChangesPanelEncryptRecordVersionDataMessageTitle':"Save card",
788 'recordSaveChangesPanelEncryptRecordVersionDataMessageText':"Local encryption of card's version data", 788 'recordSaveChangesPanelEncryptRecordVersionDataMessageText':"Local encryption of card's version data",
789 'recordSaveChangesPanelSendingDataToTheServerMessageTitle': "Save card", 789 'recordSaveChangesPanelSendingDataToTheServerMessageTitle': "Save card",
790 'recordSaveChangesPanelSendingDataToTheServerMessageText': "Uploading encrypted card's header to Clipperz", 790 'recordSaveChangesPanelSendingDataToTheServerMessageText': "Uploading encrypted card's header to Clipperz",
791 'recordSaveChangesPanelUpdatingTheInterfaceMessageTitle': "Save card", 791 'recordSaveChangesPanelUpdatingTheInterfaceMessageTitle': "Save card",
792 'recordSaveChangesPanelUpdatingTheInterfaceMessageText': "Updating the interface", 792 'recordSaveChangesPanelUpdatingTheInterfaceMessageText': "Updating the interface",
793 793
794 //Password Generator strings 794 //Password Generator strings
795 'passwordGeneratorPanelTitle': "Password generator", 795 'passwordGeneratorPanelTitle': "Password generator",
796 'passwordGeneratorPanelOkLabel': "Ok", 796 'passwordGeneratorPanelOkLabel': "Ok",
797 'passwordGeneratorPanelCancelLabel': "Cancel", 797 'passwordGeneratorPanelCancelLabel': "Cancel",
798 798
799 'passwordGeneratorLowercaseLabel': "abc", 799 'passwordGeneratorLowercaseLabel': "abc",
800 'passwordGeneratorUppercaseLabel': "ABC", 800 'passwordGeneratorUppercaseLabel': "ABC",
801 'passwordGeneratorNumberLabel': "012", 801 'passwordGeneratorNumberLabel': "012",
802 'passwordGeneratorSymbolLabel': "@#$", 802 'passwordGeneratorSymbolLabel': "@#$",
803 803
804 'passwordGeneratorLengthLabel': "length:", 804 'passwordGeneratorLengthLabel': "length:",
805 805
806 806
807 //Miscellaneous strings 807 //Miscellaneous strings
808 808
809 //'DWRUtilLoadingMessage': "Loading data …", 809 //'DWRUtilLoadingMessage': "Loading data …",
810 'comingSoon': "coming soon …", 810 'comingSoon': "coming soon …",
811 'panelCollectingEntryopyMessageText': "Collecting entropy", 811 'panelCollectingEntryopyMessageText': "Collecting entropy",
812 'directLoginConfigurationCheckBoxFieldSelectedValue': "Yes", 812 'directLoginConfigurationCheckBoxFieldSelectedValue': "Yes",
813 'directLoginConfigurationCheckBoxFieldNotSelectedValue': "No", 813 'directLoginConfigurationCheckBoxFieldNotSelectedValue': "No",
814 814
815 815
816 816
817// NEW - Import panel 817// NEW - Import panel
818 'importFormats':{ 818 'importFormats':{
819 'CSV': { 819 'CSV': {
820 'label': "CSV", 820 'label': "CSV",
821 'description':"<p>A widely recognized file format that stores tabular data. Several password managers can export data to this format.</p>" 821 'description':"<p>A widely recognized file format that stores tabular data. Several password managers can export data to this format.</p>"
822 }, 822 },
823 'Excel': { 823 'Excel': {
824 'label': "Excel", 824 'label': "Excel",
825 'description':"<p>The popular spreadsheet from Microsoft. Storing passwords in Excel files is very common but not advisable.</p>" 825 'description':"<p>The popular spreadsheet from Microsoft. Storing passwords in Excel files is very common but not advisable.</p>"
826 }, 826 },
827 'KeePass': { 827 'KeePass': {
828 'label': "KeePass", 828 'label': "KeePass",
829 'description':"<p>The custom TXT file created by KeePass password manager.</p>" 829 'description':"<p>The custom TXT file created by KeePass password manager.</p>"
830 }, 830 },
831 'PasswordPlus': { 831 'PasswordPlus': {
832 'label': "Password Plus", 832 'label': "Password Plus",
833 'description':"<p>The custom CSV format produced by Password Plus, a password manager mostly used on mobile devices.</p>" 833 'description':"<p>The custom CSV format produced by Password Plus, a password manager mostly used on mobile devices.</p>"
834 }, 834 },
835 'Roboform': { 835 'Roboform': {
836 'label': "RoboForm", 836 'label': "RoboForm",
837 'description':"<p>The special HTML file created by Roboform password manager when displaying Passcard and Safenotes for printing.</p>" 837 'description':"<p>The special HTML file created by Roboform password manager when displaying Passcard and Safenotes for printing.</p>"
838 }, 838 },
839 'ClipperzExport': { 839 'ClipperzExport': {
840 'label': "JSON", 840 'label': "JSON",
841 'description':"<p>The file created by Clipperz itself in JSON format. It preserves all information contained in your cards, even direct login configurations.</p>" 841 'description':"<p>The file created by Clipperz itself in JSON format. It preserves all information contained in your cards, even direct login configurations.</p>"
842 } 842 }
843}, 843},
844 844
845 //JSON 845 //JSON
846 'Clipperz_ImportWizard_Title': "JSON import", 846 'Clipperz_ImportWizard_Title': "JSON import",
847 'importOptions_clipperz_description': "<p>Open the JSON file exported from Clipperz in a text editor. Then copy and paste its content to the text area below.</p>", 847 'importOptions_clipperz_description': "<p>Open the JSON file exported from Clipperz in a text editor. Then copy and paste its content to the text area below.</p>",
848 848
849 //CSV 849 //CSV
850 'CSV_ImportWizard_Title': "CSV import", 850 'CSV_ImportWizard_Title': "CSV import",
851 'importOptions_csv_description_': "\ 851 'importOptions_csv_description_': "\
852 <p>Open the CSV file in a text editor. Then copy and paste its content to the text area below.</p>\ 852 <p>Open the CSV file in a text editor. Then copy and paste its content to the text area below.</p>\
853 <p>Please select the special characters used within your file.</p>", 853 <p>Please select the special characters used within your file.</p>",
854 854
855 //Excel 855 //Excel
856 'Excel_ImportWizard_Title': "Excel import", 856 'Excel_ImportWizard_Title': "Excel import",
857 'importOptions_excel_description_': "<p>Open the Excel file and select the cells you want to import. Then copy and paste them to the text area below.</p>", 857 'importOptions_excel_description_': "<p>Open the Excel file and select the cells you want to import. Then copy and paste them to the text area below.</p>",
858 858
859 //KeePass 859 //KeePass
860 'KeePass_ImportWizard_Title': "KeePass import", 860 'KeePass_ImportWizard_Title': "KeePass import",
861 'importOptions_keePass_description_': "<p>Open the TXT file created by Keepass in a text editor. Then copy and paste its content to the text area below.</p>", 861 'importOptions_keePass_description_': "<p>Open the TXT file created by Keepass in a text editor. Then copy and paste its content to the text area below.</p>",
862 862
863 //PasswordPlus 863 //PasswordPlus
864 'PasswordPlus_ImportWizard_Title': "Password Plus import", 864 'PasswordPlus_ImportWizard_Title': "Password Plus import",
865 'importOptions_passwordPlus_description':"<p>Open the CSV file created by PasswordPlus in a text editor. Then copy and paste its content to the text area below.</p>", 865 'importOptions_passwordPlus_description':"<p>Open the CSV file created by PasswordPlus in a text editor. Then copy and paste its content to the text area below.</p>",
866 866
867 //RoboForm 867 //RoboForm
868 'RoboForm_ImportWizard_Title': "RoboForm import", 868 'RoboForm_ImportWizard_Title': "RoboForm import",
869 'importOptions_roboForm_description': "<p>Open the HTML file created by RoboForm in a text editor. Then copy and paste its content to the text area below.</p>", 869 'importOptions_roboForm_description': "<p>Open the HTML file created by RoboForm in a text editor. Then copy and paste its content to the text area below.</p>",
870 870
871 871
872 'importData_parsingDataTitle': "Import", 872 'importData_parsingDataTitle': "Import",
873 'importData_parsingDataText': "Parsing data …", 873 'importData_parsingDataText': "Parsing data …",
874 874
875 'importData_previewingDataTitle': "Import", 875 'importData_previewingDataTitle': "Import",
876 'importData_previewingDataText': "Processing data …", 876 'importData_previewingDataText': "Processing data …",
877 877
878 'importData_processingDataTitle': "Import", 878 'importData_processingDataTitle': "Import",
879 'importData_processingDataText': "Creating new cards …", 879 'importData_processingDataText': "Creating new cards …",
880 880
881'ImportWizard': { 881'ImportWizard': {
882 'EDIT': "edit", 882 'EDIT': "edit",
883 'PREVIEW': "preview", 883 'PREVIEW': "preview",
884 'IMPORT': "import", 884 'IMPORT': "import",
885 885
886 'KEEPASS_SETTINGS': "settings", 886 'KEEPASS_SETTINGS': "settings",
887 887
888 'CSV_EDIT': "paste", 888 'CSV_EDIT': "paste",
889 'CSV_COLUMNS': "columns", 889 'CSV_COLUMNS': "columns",
890 'CSV_HEADER': "labels", 890 'CSV_HEADER': "labels",
891 'CSV_TITLE': "titles", 891 'CSV_TITLE': "titles",
892 'CSV_NOTES': "notes", 892 'CSV_NOTES': "notes",
893 'CSV_FIELDS': "types", 893 'CSV_FIELDS': "types",
894 894
895 'EXCEL_EDIT': "edit" 895 'EXCEL_EDIT': "edit"
896}, 896},
897 897
898 'CSV_ImportWizard_Columns': "<p>Select the columns you want to import.</p>", 898 'CSV_ImportWizard_Columns': "<p>Select the columns you want to import.</p>",
899 'CSV_ImportWizard_Header': "<p>If the first row of the CSV file contains field labels, tick off the checkbox below.</p>", 899 'CSV_ImportWizard_Header': "<p>If the first row of the CSV file contains field labels, tick off the checkbox below.</p>",
900 'CSV_ImportWizard_Header_Settings_firstRowHeaderLabel':"Use the first row as labels?", 900 'CSV_ImportWizard_Header_Settings_firstRowHeaderLabel':"Use the first row as labels?",
901 'CSV_ImportWizard_Title': "<p>Select the column that contains titles of the cards you are importing. (mandatory)</p>", 901 'CSV_ImportWizard_Title': "<p>Select the column that contains titles of the cards you are importing. (mandatory)</p>",
902 'CSV_ImportWizard_Notes': "<p>Select the column that represents a \"notes\" field. (optional)</p>", 902 'CSV_ImportWizard_Notes': "<p>Select the column that represents a \"notes\" field. (optional)</p>",
903 'CSV_ImportWizard_Notes_Settings_noSelectionLabel': "\"notes\" field not present", 903 'CSV_ImportWizard_Notes_Settings_noSelectionLabel': "\"notes\" field not present",
904 'CSV_ImportWizard_Fields': "<p>Select the correct type for each column from the drop down lists.</p>", 904 'CSV_ImportWizard_Fields': "<p>Select the correct type for each column from the drop down lists.</p>",
905 'CSV_ImportWizard_Fields_MissingLabelWarning': "Missing label", 905 'CSV_ImportWizard_Fields_MissingLabelWarning': "Missing label",
906 906
907 'importData_importConfirmation_title': "Import", 907 'importData_importConfirmation_title': "Import",
908 'importData_importConfirmation_text': "Do you want to import __numberOfRecords__ cards?", 908 'importData_importConfirmation_text': "Do you want to import __numberOfRecords__ cards?",
909 909
910 910
911 //Vulnerability warning 911 //Vulnerability warning
912 'VulnerabilityWarning_Panel_title': "Vulnerability warning", 912 'VulnerabilityWarning_Panel_title': "Vulnerability warning",
913 'VulnerabilityWarning_Panel_message': "The action as been aborted due to a catched vulnerability", 913 'VulnerabilityWarning_Panel_message': "The action as been aborted due to a catched vulnerability",
914 'VulnerabilityWarning_Panel_buttonLabel':"Close", 914 'VulnerabilityWarning_Panel_buttonLabel':"Close",
915 915
916 916
917 917
918 //All the loginInfo panel infos 918 //All the loginInfo panel infos
919 919
920 'WELCOME_BACK': "Welcome back!", 920 'WELCOME_BACK': "Welcome back!",
921 921
922 'currentConnectionText': "You are connected from ip&nbsp;__ip__, apparently from __country__, using __browser__ on __operatingSystem__.", 922 'currentConnectionText': "You are connected from ip&nbsp;__ip__, apparently from __country__, using __browser__ on __operatingSystem__.",
923 'latestConnectionText': "Your latest connection was __elapsedTimeDescription__ (__time__) from ip&nbsp;__ip__, apparently from __country__, using __browser__ on __operatingSystem__.", 923 'latestConnectionText': "Your latest connection was __elapsedTimeDescription__ (__time__) from ip&nbsp;__ip__, apparently from __country__, using __browser__ on __operatingSystem__.",
924 924
925 'fullLoginHistoryLinkLabel': "show login history", 925 'fullLoginHistoryLinkLabel': "show login history",
926 926
927'elapsedTimeDescriptions': { 927'elapsedTimeDescriptions': {
928 'MORE_THAN_A_MONTH_AGO': "more than a month ago", 928 'MORE_THAN_A_MONTH_AGO': "more than a month ago",
929 'MORE_THAN_A_WEEK_AGO': "more than a week ago", 929 'MORE_THAN_A_WEEK_AGO': "more than a week ago",
930 'MORE_THAN_*_WEEKS_AGO': "more than __elapsed__ weeks ago", 930 'MORE_THAN_*_WEEKS_AGO': "more than __elapsed__ weeks ago",
931 'YESTERDAY': "yesterday", 931 'YESTERDAY': "yesterday",
932 '*_DAYS_AGO': "__elapsed__ days ago", 932 '*_DAYS_AGO': "__elapsed__ days ago",
933 'ABOUT_AN_HOUR_AGO': "about an hour ago", 933 'ABOUT_AN_HOUR_AGO': "about an hour ago",
934 '*_HOURS_AGO': "__elapsed__ hours ago", 934 '*_HOURS_AGO': "__elapsed__ hours ago",
935 'JUST_A_FEW_MINUTES_AGO': "just a few minutes ago", 935 'JUST_A_FEW_MINUTES_AGO': "just a few minutes ago",
936 'ABOUT_*_MINUTES_AGO': "about __elapsed__ minutes ago" 936 'ABOUT_*_MINUTES_AGO': "about __elapsed__ minutes ago"
937}, 937},
938 938
939 'unknown_ip': "unknown", 939 'unknown_ip': "unknown",
940 940
941'countries': { 941'countries': {
942 '--': "unknown", 942 '--': "unknown",
943 'AD': "Andorra", 943 'AD': "Andorra",
944 'AE': "United Arab Emirates", 944 'AE': "United Arab Emirates",
945 'AF': "Afghanistan", 945 'AF': "Afghanistan",
946 'AG': "Antigua and Barbuda", 946 'AG': "Antigua and Barbuda",
947 'AI': "Anguilla", 947 'AI': "Anguilla",
948 'AL': "Albania", 948 'AL': "Albania",
949 'AM': "Armenia", 949 'AM': "Armenia",
950 'AN': "Netherlands Antilles", 950 'AN': "Netherlands Antilles",
951 'AO': "Angola", 951 'AO': "Angola",
952 'AP': "Non-Spec Asia Pas Location", 952 'AP': "Non-Spec Asia Pas Location",
953 'AR': "Argentina", 953 'AR': "Argentina",
954 'AS': "American Samoa", 954 'AS': "American Samoa",
955 'AT': "Austria", 955 'AT': "Austria",
956 'AU': "Australia", 956 'AU': "Australia",
957 'AW': "Aruba", 957 'AW': "Aruba",
958 'AX': "Aland Islands", 958 'AX': "Aland Islands",
959 'AZ': "Azerbaijan", 959 'AZ': "Azerbaijan",
960 'BA': "Bosnia and Herzegowina", 960 'BA': "Bosnia and Herzegowina",
961 'BB': "Barbados", 961 'BB': "Barbados",
962 'BD': "Bangladesh", 962 'BD': "Bangladesh",
963 'BE': "Belgium", 963 'BE': "Belgium",
964 'BF': "Burkina Faso", 964 'BF': "Burkina Faso",
965 'BG': "Bulgaria", 965 'BG': "Bulgaria",
966 'BH': "Bahrain", 966 'BH': "Bahrain",
967 'BI': "Burundi", 967 'BI': "Burundi",
968 'BJ': "Benin", 968 'BJ': "Benin",
969 'BM': "Bermuda", 969 'BM': "Bermuda",
970 'BN': "Brunei Darussalam", 970 'BN': "Brunei Darussalam",
971 'BO': "Bolivia", 971 'BO': "Bolivia",
972 'BR': "Brazil", 972 'BR': "Brazil",
973 'BS': "Bahamas", 973 'BS': "Bahamas",
974 'BT': "Bhutan", 974 'BT': "Bhutan",
975 'BW': "Botswana", 975 'BW': "Botswana",
976 'BY': "Belarus", 976 'BY': "Belarus",
977 'BZ': "Belize", 977 'BZ': "Belize",
978 'CA': "Canada", 978 'CA': "Canada",
979 'CD': "Congo the Democratic Republic of the", 979 'CD': "Congo the Democratic Republic of the",
980 'CF': "Central African Republic", 980 'CF': "Central African Republic",
981 'CH': "Switzerland", 981 'CH': "Switzerland",
982 'CI': "Cote D'ivoire", 982 'CI': "Cote D'ivoire",
983 'CK': "Cook Islands", 983 'CK': "Cook Islands",
984 'CL': "Chile", 984 'CL': "Chile",
985 'CM': "Cameroon", 985 'CM': "Cameroon",
986 'CN': "China", 986 'CN': "China",
987 'CO': "Colombia", 987 'CO': "Colombia",
988 'CR': "Costa Rica", 988 'CR': "Costa Rica",
989 'CS': "Serbia and Montenegro", 989 'CS': "Serbia and Montenegro",
990 'CU': "Cuba", 990 'CU': "Cuba",
991 'CY': "Cyprus", 991 'CY': "Cyprus",
992 'CZ': "Czech Republic", 992 'CZ': "Czech Republic",
993 'DE': "Germany", 993 'DE': "Germany",
994 'DJ': "Djibouti", 994 'DJ': "Djibouti",
995 'DK': "Denmark", 995 'DK': "Denmark",
996 'DO': "Dominican Republic", 996 'DO': "Dominican Republic",
997 'DZ': "Algeria", 997 'DZ': "Algeria",
998 'EC': "Ecuador", 998 'EC': "Ecuador",
999 'EE': "Estonia", 999 'EE': "Estonia",
1000 'EG': "Egypt", 1000 'EG': "Egypt",
1001 'ER': "Eritrea", 1001 'ER': "Eritrea",
1002 'ES': "Spain", 1002 'ES': "Spain",
1003 'ET': "Ethiopia", 1003 'ET': "Ethiopia",
1004 'EU': "European Union", 1004 'EU': "European Union",
1005 'FI': "Finland", 1005 'FI': "Finland",
1006 'FJ': "Fiji", 1006 'FJ': "Fiji",
1007 'FM': "Micronesia Federated States of", 1007 'FM': "Micronesia Federated States of",
1008 'FO': "Faroe Islands", 1008 'FO': "Faroe Islands",
1009 'FR': "France", 1009 'FR': "France",
1010 'GA': "Gabon", 1010 'GA': "Gabon",
1011 'GB': "United Kingdom", 1011 'GB': "United Kingdom",
1012 'GD': "Grenada", 1012 'GD': "Grenada",
1013 'GE': "Georgia", 1013 'GE': "Georgia",
1014 'GF': "French Guiana", 1014 'GF': "French Guiana",
1015 'GG': "Guernsey", 1015 'GG': "Guernsey",
1016 'GH': "Ghana", 1016 'GH': "Ghana",
1017 'GI': "Gibraltar", 1017 'GI': "Gibraltar",
1018 'GL': "Greenland", 1018 'GL': "Greenland",
1019 'GM': "Gambia", 1019 'GM': "Gambia",
1020 'GP': "Guadeloupe", 1020 'GP': "Guadeloupe",
1021 'GR': "Greece", 1021 'GR': "Greece",
1022 'GT': "Guatemala", 1022 'GT': "Guatemala",
1023 'GU': "Guam", 1023 'GU': "Guam",
1024 'GW': "Guinea-Bissau", 1024 'GW': "Guinea-Bissau",
1025 'GY': "Guyana", 1025 'GY': "Guyana",
1026 'HK': "Hong Kong", 1026 'HK': "Hong Kong",
1027 'HN': "Honduras", 1027 'HN': "Honduras",
1028 'HR': "Croatia (Local Name: Hrvatska)", 1028 'HR': "Croatia (Local Name: Hrvatska)",
1029 'HT': "Haiti", 1029 'HT': "Haiti",
1030 'HU': "Hungary", 1030 'HU': "Hungary",
1031 'ID': "Indonesia", 1031 'ID': "Indonesia",
1032 'IE': "Ireland", 1032 'IE': "Ireland",
1033 'IL': "Israel", 1033 'IL': "Israel",
1034 'IM': "Isle of Man", 1034 'IM': "Isle of Man",
1035 'IN': "India", 1035 'IN': "India",
1036 'IO': "British Indian Ocean Territory", 1036 'IO': "British Indian Ocean Territory",
1037 'IQ': "Iraq", 1037 'IQ': "Iraq",
1038 'IR': "Iran (Islamic Republic of)", 1038 'IR': "Iran (Islamic Republic of)",
1039 'IS': "Iceland", 1039 'IS': "Iceland",
1040 'IT': "Italy", 1040 'IT': "Italy",
1041 'JE': "Jersey", 1041 'JE': "Jersey",
1042 'JM': "Jamaica", 1042 'JM': "Jamaica",
1043 'JO': "Jordan", 1043 'JO': "Jordan",
1044 'JP': "Japan", 1044 'JP': "Japan",
1045 'KE': "Kenya", 1045 'KE': "Kenya",
1046 'KG': "Kyrgyzstan", 1046 'KG': "Kyrgyzstan",
1047 'KH': "Cambodia", 1047 'KH': "Cambodia",
1048 'KI': "Kiribati", 1048 'KI': "Kiribati",
1049 'KN': "Saint Kitts and Nevis", 1049 'KN': "Saint Kitts and Nevis",
1050 'KR': "Korea Republic of", 1050 'KR': "Korea Republic of",
1051 'KW': "Kuwait", 1051 'KW': "Kuwait",
1052 'KY': "Cayman Islands", 1052 'KY': "Cayman Islands",
1053 'KZ': "Kazakhstan", 1053 'KZ': "Kazakhstan",
1054 'LA': "Lao People's Democratic Republic", 1054 'LA': "Lao People's Democratic Republic",
1055 'LB': "Lebanon", 1055 'LB': "Lebanon",
1056 'LC': "Saint Lucia", 1056 'LC': "Saint Lucia",
1057 'LI': "Liechtenstein", 1057 'LI': "Liechtenstein",
1058 'LK': "Sri Lanka", 1058 'LK': "Sri Lanka",
1059 'LR': "Liberia", 1059 'LR': "Liberia",
1060 'LS': "Lesotho", 1060 'LS': "Lesotho",
1061 'LT': "Lithuania", 1061 'LT': "Lithuania",
1062 'LU': "Luxembourg", 1062 'LU': "Luxembourg",
1063 'LV': "Latvia", 1063 'LV': "Latvia",
1064 'LY': "Libyan Arab Jamahiriya", 1064 'LY': "Libyan Arab Jamahiriya",
1065 'MA': "Morocco", 1065 'MA': "Morocco",
1066 'MC': "Monaco", 1066 'MC': "Monaco",
1067 'MD': "Moldova Republic of", 1067 'MD': "Moldova Republic of",
1068 'MG': "Madagascar", 1068 'MG': "Madagascar",
1069 'MH': "Marshall Islands", 1069 'MH': "Marshall Islands",
1070 'MK': "Macedonia the Former Yugoslav Republic of", 1070 'MK': "Macedonia the Former Yugoslav Republic of",
1071 'ML': "Mali", 1071 'ML': "Mali",
1072 'MM': "Myanmar", 1072 'MM': "Myanmar",
1073 'MN': "Mongolia", 1073 'MN': "Mongolia",
1074 'MO': "Macau", 1074 'MO': "Macau",
1075 'MP': "Northern Mariana Islands", 1075 'MP': "Northern Mariana Islands",
1076 'MR': "Mauritania", 1076 'MR': "Mauritania",
1077 'MS': "Montserrat", 1077 'MS': "Montserrat",
1078 'MT': "Malta", 1078 'MT': "Malta",
1079 'MU': "Mauritius", 1079 'MU': "Mauritius",
1080 'MV': "Maldives", 1080 'MV': "Maldives",
1081 'MW': "Malawi", 1081 'MW': "Malawi",
1082 'MX': "Mexico", 1082 'MX': "Mexico",
1083 'MY': "Malaysia", 1083 'MY': "Malaysia",
1084 'MZ': "Mozambique", 1084 'MZ': "Mozambique",
1085 'NA': "Namibia", 1085 'NA': "Namibia",
1086 'NC': "New Caledonia", 1086 'NC': "New Caledonia",
1087 'NF': "Norfolk Island", 1087 'NF': "Norfolk Island",
1088 'NG': "Nigeria", 1088 'NG': "Nigeria",
1089 'NI': "Nicaragua", 1089 'NI': "Nicaragua",
1090 'NL': "Netherlands", 1090 'NL': "Netherlands",
1091 'NO': "Norway", 1091 'NO': "Norway",
1092 'NP': "Nepal", 1092 'NP': "Nepal",
1093 'NR': "Nauru", 1093 'NR': "Nauru",
1094 'NU': "Niue", 1094 'NU': "Niue",
1095 'NZ': "New Zealand", 1095 'NZ': "New Zealand",
1096 'OM': "Oman", 1096 'OM': "Oman",
1097 'PA': "Panama", 1097 'PA': "Panama",
1098 'PE': "Peru", 1098 'PE': "Peru",
1099 'PF': "French Polynesia", 1099 'PF': "French Polynesia",
1100 'PG': "Papua New Guinea", 1100 'PG': "Papua New Guinea",
1101 'PH': "Philippines", 1101 'PH': "Philippines",
1102 'PK': "Pakistan", 1102 'PK': "Pakistan",
1103 'PL': "Poland", 1103 'PL': "Poland",
1104 'PR': "Puerto Rico", 1104 'PR': "Puerto Rico",
1105 'PS': "Palestinian Territory Occupied", 1105 'PS': "Palestinian Territory Occupied",
1106 'PT': "Portugal", 1106 'PT': "Portugal",
1107 'PW': "Palau", 1107 'PW': "Palau",
1108 'PY': "Paraguay", 1108 'PY': "Paraguay",
1109 'QA': "Qatar", 1109 'QA': "Qatar",
1110 'RO': "Romania", 1110 'RO': "Romania",
1111 'RS': "Serbia", 1111 'RS': "Serbia",
1112 'RU': "Russian Federation", 1112 'RU': "Russian Federation",
1113 'RW': "Rwanda", 1113 'RW': "Rwanda",
1114 'SA': "Saudi Arabia", 1114 'SA': "Saudi Arabia",
1115 'SB': "Solomon Islands", 1115 'SB': "Solomon Islands",
1116 'SC': "Seychelles", 1116 'SC': "Seychelles",
1117 'SD': "Sudan", 1117 'SD': "Sudan",
1118 'SE': "Sweden", 1118 'SE': "Sweden",
1119 'SG': "Singapore", 1119 'SG': "Singapore",
1120 'SI': "Slovenia", 1120 'SI': "Slovenia",
1121 'SK': "Slovakia (Slovak Republic)", 1121 'SK': "Slovakia (Slovak Republic)",
1122 'SL': "Sierra Leone", 1122 'SL': "Sierra Leone",
1123 'SM': "San Marino", 1123 'SM': "San Marino",
1124 'SN': "Senegal", 1124 'SN': "Senegal",
1125 'SR': "Suriname", 1125 'SR': "Suriname",
1126 'SV': "El Salvador", 1126 'SV': "El Salvador",
1127 'SY': "Syrian Arab Republic", 1127 'SY': "Syrian Arab Republic",
1128 'SZ': "Swaziland", 1128 'SZ': "Swaziland",
1129 'TC': "Turks and Caicos Islands", 1129 'TC': "Turks and Caicos Islands",
1130 'TG': "Togo", 1130 'TG': "Togo",
1131 'TH': "Thailand", 1131 'TH': "Thailand",
1132 'TJ': "Tajikistan", 1132 'TJ': "Tajikistan",
1133 'TM': "Turkmenistan", 1133 'TM': "Turkmenistan",
1134 'TN': "Tunisia", 1134 'TN': "Tunisia",
1135 'TO': "Tonga", 1135 'TO': "Tonga",
1136 'TR': "Turkey", 1136 'TR': "Turkey",
1137 'TT': "Trinidad and Tobago", 1137 'TT': "Trinidad and Tobago",
1138 'TV': "Tuvalu", 1138 'TV': "Tuvalu",
1139 'TW': "Taiwan Province of China", 1139 'TW': "Taiwan Province of China",
1140 'TZ': "Tanzania United Republic of", 1140 'TZ': "Tanzania United Republic of",
1141 'UA': "Ukraine", 1141 'UA': "Ukraine",
1142 'UG': "Uganda", 1142 'UG': "Uganda",
1143 'US': "United States", 1143 'US': "United States",
1144 'UY': "Uruguay", 1144 'UY': "Uruguay",
1145 'UZ': "Uzbekistan", 1145 'UZ': "Uzbekistan",
1146 'VA': "Holy See (Vatican City State)", 1146 'VA': "Holy See (Vatican City State)",
1147 'VE': "Venezuela", 1147 'VE': "Venezuela",
1148 'VG': "Virgin Islands (British)", 1148 'VG': "Virgin Islands (British)",
1149 'VI': "Virgin Islands (U.S.)", 1149 'VI': "Virgin Islands (U.S.)",
1150 'VN': "Viet Nam", 1150 'VN': "Viet Nam",
1151 'VU': "Vanuatu", 1151 'VU': "Vanuatu",
1152 'WF': "Wallis and Futuna Islands", 1152 'WF': "Wallis and Futuna Islands",
1153 'WS': "Samoa", 1153 'WS': "Samoa",
1154 'YE': "Yemen", 1154 'YE': "Yemen",
1155 'ZA': "South Africa", 1155 'ZA': "South Africa",
1156 'ZM': "Zambia", 1156 'ZM': "Zambia",
1157 'ZW': "Zimbabwe", 1157 'ZW': "Zimbabwe",
1158 'ZZ': "Reserved" 1158 'ZZ': "Reserved"
1159}, 1159},
1160 1160
1161'browsers': { 1161'browsers': {
1162 'UNKNOWN': "Unknown", 1162 'UNKNOWN': "Unknown",
1163 'MSIE': "Internet Explorer", 1163 'MSIE': "Internet Explorer",
1164 'FIREFOX': "Firefox", 1164 'FIREFOX': "Firefox",
1165 'OPERA': "Opera", 1165 'OPERA': "Opera",
1166 'SAFARI': "Safari", 1166 'SAFARI': "Safari",
1167 'OMNIWEB': "OmniWeb", 1167 'OMNIWEB': "OmniWeb",
1168 'CAMINO': "Camino", 1168 'CAMINO': "Camino",
1169 'CHROME': "Chrome" 1169 'CHROME': "Chrome"
1170}, 1170},
1171 1171
1172'operatingSystems': { 1172'operatingSystems': {
1173 'UNKNOWN': "Unknown", 1173 'UNKNOWN': "Unknown",
1174 'WINDOWS': "Windows", 1174 'WINDOWS': "Windows",
1175 'MAC': "Mac", 1175 'MAC': "Mac",
1176 'LINUX': "Linux", 1176 'LINUX': "Linux",
1177 'IPHONE': "iPhone", 1177 'IPHONE': "iPhone",
1178 'MOBILE': "Mobile", 1178 'MOBILE': "Mobile",
1179 'OPENBSD': "OpenBSD", 1179 'OPENBSD': "OpenBSD",
1180 'FREEBSD': "FreeBSD", 1180 'FREEBSD': "FreeBSD",
1181 'NETBSD': "NetBSD" 1181 'NETBSD': "NetBSD"
1182}, 1182},
1183 1183
1184 1184
1185 //Calendar texts 1185 //Calendar texts
1186'calendarStrings': { 1186'calendarStrings': {
1187 'months': { 1187 'months': {
1188 '0':"January", 1188 '0':"January",
1189 '1':"February", 1189 '1':"February",
1190 '2':"March", 1190 '2':"March",
1191 '3':"April", 1191 '3':"April",
1192 '4':"May", 1192 '4':"May",
1193 '5':"June", 1193 '5':"June",
1194 '6':"July", 1194 '6':"July",
1195 '7':"August", 1195 '7':"August",
1196 '8':"September", 1196 '8':"September",
1197 '9':"October", 1197 '9':"October",
1198 '10':"November", 1198 '10':"November",
1199 '11':"December" 1199 '11':"December"
1200 }, 1200 },
1201 'shortMonths':{ 1201 'shortMonths':{
1202 '0':"Jan", 1202 '0':"Jan",
1203 '1':"Feb", 1203 '1':"Feb",
1204 '2':"Mar", 1204 '2':"Mar",
1205 '3':"Apr", 1205 '3':"Apr",
1206 '4':"May", 1206 '4':"May",
1207 '5':"Jun", 1207 '5':"Jun",
1208 '6':"Jul", 1208 '6':"Jul",
1209 '7':"Aug", 1209 '7':"Aug",
1210 '8':"Sep", 1210 '8':"Sep",
1211 '9':"Oct", 1211 '9':"Oct",
1212 '10':"Nov", 1212 '10':"Nov",
1213 '11':"Dec" 1213 '11':"Dec"
1214 }, 1214 },
1215 1215
1216 'days':{ 1216 'days':{
1217 '0':"Sunday", 1217 '0':"Sunday",
1218 '1':"Monday", 1218 '1':"Monday",
1219 '2':"Tuesday", 1219 '2':"Tuesday",
1220 '3':"Wednesday", 1220 '3':"Wednesday",
1221 '4':"Thursday", 1221 '4':"Thursday",
1222 '5':"Friday", 1222 '5':"Friday",
1223 '6':"Saturday" 1223 '6':"Saturday"
1224 }, 1224 },
1225 1225
1226 'shortDays':{ 1226 'shortDays':{
1227 '0':"Sun", 1227 '0':"Sun",
1228 '1':"Mon", 1228 '1':"Mon",
1229 '2':"Tue", 1229 '2':"Tue",
1230 '3':"Wed", 1230 '3':"Wed",
1231 '4':"Thu", 1231 '4':"Thu",
1232 '5':"Fri", 1232 '5':"Fri",
1233 '6':"Sat" 1233 '6':"Sat"
1234 }, 1234 },
1235 1235
1236 'veryShortDays':{ 1236 'veryShortDays':{
1237 '0':"Su", 1237 '0':"Su",
1238 '1':"Mo", 1238 '1':"Mo",
1239 '2':"Tu", 1239 '2':"Tu",
1240 '3':"We", 1240 '3':"We",
1241 '4':"Th", 1241 '4':"Th",
1242 '5':"Fr", 1242 '5':"Fr",
1243 '6':"Sa" 1243 '6':"Sa"
1244 }, 1244 },
1245 1245
1246 'amDesignation':"am", 1246 'amDesignation':"am",
1247 'pmDesignation':"pm" 1247 'pmDesignation':"pm"
1248}, 1248},
1249 1249
1250 1250
1251// Date format 1251// Date format
1252 'fullDate_format':"l, F d, Y H:i:s", 1252 'fullDate_format':"l, F d, Y H:i:s",
1253 1253
1254__syntaxFix__: "syntax fix" 1254__syntaxFix__: "syntax fix"
1255 1255
1256} 1256}
diff --git a/scripts/builder/repository.py b/scripts/builder/repository.py
index 7ac2324..7a44e47 100644
--- a/scripts/builder/repository.py
+++ b/scripts/builder/repository.py
@@ -1,97 +1,99 @@
1#!/usr/bin/env python 1#!/usr/bin/env python
2# -*- coding: UTF-8 -*- 2# -*- coding: UTF-8 -*-
3 3
4 4
5def repositoryWithPath (path): 5def repositoryWithPath (path):
6 try: 6 try:
7 from mercurial import ui, hg 7 from mercurial import ui, hg
8 8
9 repo = hg.repository(ui.ui(), path) 9 repo = hg.repository(ui.ui(), path)
10 result = HgRepository(repo, path) 10 result = HgRepository(repo, path)
11 except: 11 except:
12 try: 12 try:
13 from git import Repo 13 from git import Repo
14 repo = Repo(path) 14 repo = Repo(path)
15 result = GitRepository(repo, path) 15 result = GitRepository(repo, path)
16
17 except ImportError, exception: 16 except ImportError, exception:
18 print "Failed to import git, please install http://gitorious.org/git-python" 17 print "Failed to import git, please install http://gitorious.org/git-python"
19 raise exception 18 raise exception
20 except: 19 except:
21 result = SnapshotRepository('', path) 20 result = SnapshotRepository('', path)
22 21
23 22
24 return result 23 return result
25 24
26 25
27#=================================================================== 26#===================================================================
28 27
29 28
30class Repository(object): 29class Repository(object):
31 30
32 def __init__ (self, repository, path): 31 def __init__ (self, repository, path):
33 self.repository = repository 32 self.repository = repository
34 self.path = path 33 self.path = path
35 34
36 35
37 def revision (self): 36 def revision (self):
38 raise NotImplementedError() 37 raise NotImplementedError()
39 38
40 39
41 def areTherePendingChanges (self): 40 def areTherePendingChanges (self):
42 raise NotImplementedError() 41 raise NotImplementedError()
43 42
44 43
45 def version (self): 44 def version (self):
46 result = self.revision() 45 result = self.revision()
47 if self.areTherePendingChanges(): 46 if self.areTherePendingChanges():
48 result = '>>> ' + result + ' <<<' 47 result = '>>> ' + result + ' <<<'
49 48
50 # print "VERSION: " + result 49 # print "VERSION: " + result
51 return result 50 return result
52 51
53 52
54#=================================================================== 53#===================================================================
55 54
56 55
57class GitRepository(Repository): 56class GitRepository(Repository):
58 #http://gitorious.org/git-python 57 #http://gitorious.org/git-python
59 58
60 def revision (self): 59 def revision (self):
61 try: 60 try:
62 return self.repository.head.commit.hexsha 61 return self.repository.head.commit.hexsha
63 except: 62 except:
64 return self.repository.commits()[0].id 63 return self.repository.commits()[0].id
65 64
66 65
67 def areTherePendingChanges (self): 66 def areTherePendingChanges (self):
68 try: 67 try:
69 return self.repository.is_dirty() 68 return self.repository.is_dirty()
70 except TypeError, te: 69 except TypeError, te:
71 return self.repository.is_dirty 70 return self.repository.is_dirty
72 71
73 72
74 73
75#=================================================================== 74#===================================================================
76 75
77 76
78class HgRepository(Repository): 77class HgRepository(Repository):
79 #http://mercurial.selenic.com/wiki/MercurialApi 78 #http://mercurial.selenic.com/wiki/MercurialApi
80 79
81 def revision (self): 80 def revision (self):
82 return 'hg:' + str(self.repository['tip']) 81 return 'hg:' + str(self.repository['tip'])
83 82
84 83
85 def areTherePendingChanges (self): 84 def areTherePendingChanges (self):
86 # TODO: FIXME: repository.status() does not report 'unknown(?)' files. :( 85 # TODO: FIXME: repository.status() does not report 'unknown(?)' files. :(
87 return not all(map(lambda fileList: len(fileList) == 0, self.repository.status())) 86 return not all(map(lambda fileList: len(fileList) == 0, self.repository.status()))
88 87
89 88
90#=================================================================== 89#===================================================================
91 90
91
92class SnapshotRepository(Repository): 92class SnapshotRepository(Repository):
93
93 def revision (self): 94 def revision (self):
94 return 'SNAPSHOT' 95 return 'SNAPSHOT'
95 96
97
96 def areTherePendingChanges (self): 98 def areTherePendingChanges (self):
97 return False 99 return False