summaryrefslogtreecommitdiff
path: root/frontend
Unidiff
Diffstat (limited to 'frontend') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/css/yui-extensions/basic-dialog.css6
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/Record.js10
-rw-r--r--frontend/beta/js/Clipperz/PM/Strings/Strings_en-US.js2
3 files changed, 15 insertions, 3 deletions
diff --git a/frontend/beta/css/yui-extensions/basic-dialog.css b/frontend/beta/css/yui-extensions/basic-dialog.css
index 2b1e20c..5a6cefb 100644
--- a/frontend/beta/css/yui-extensions/basic-dialog.css
+++ b/frontend/beta/css/yui-extensions/basic-dialog.css
@@ -1,247 +1,253 @@
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
26.ydlg-proxy { 26.ydlg-proxy {
27<<<<<<< HEAD
27 background-image: url(./images/default/gradient-bg.gif); 28 background-image: url(./images/default/gradient-bg.gif);
29=======
30>>>>>>> 0db1d5c8b18eadc4bd9cfc6603e86227fa94b5a9
28 background-color:#c3daf9; 31 background-color:#c3daf9;
29 border:1px solid #6593cf; 32 border:1px solid #6593cf;
30 z-index:10001; 33 z-index:10001;
31 overflow:hidden; 34 overflow:hidden;
32 position:absolute; 35 position:absolute;
33 left:0;top:0; 36 left:0;top:0;
34} 37}
35.ydlg-shadow{ 38.ydlg-shadow{
36 background:#aaaaaa; 39 background:#aaaaaa;
37 position:absolute; 40 position:absolute;
38 left:0;top:0; 41 left:0;top:0;
39} 42}
40.ydlg-focus{ 43.ydlg-focus{
41 -moz-outline:0 none; 44 -moz-outline:0 none;
42 outline:0 none; 45 outline:0 none;
43 width:0; 46 width:0;
44 height:0; 47 height:0;
45 overflow:hidden; 48 overflow:hidden;
46 position:absolute; 49 position:absolute;
47 top:0; 50 top:0;
48 left:0; 51 left:0;
49} 52}
50.ydlg-mask{ 53.ydlg-mask{
51 z-index:10000; 54 z-index:10000;
52 display:none; 55 display:none;
53 position:absolute; 56 position:absolute;
54 top:0; 57 top:0;
55 left:0; 58 left:0;
56 -moz-opacity: 0.5; 59 -moz-opacity: 0.5;
57 opacity:.50; 60 opacity:.50;
58 filter: alpha(opacity=50); 61 filter: alpha(opacity=50);
59 background-color:#CCC; 62 background-color:#CCC;
60} 63}
61body.masked{ 64body.masked{
62} 65}
63body.masked select { 66body.masked select {
64 visibility:hidden; 67 visibility:hidden;
65} 68}
66body.masked .ydlg select { 69body.masked .ydlg select {
67 visibility:visible; 70 visibility:visible;
68} 71}
69.ydlg{ 72.ydlg{
70 z-index:10001; 73 z-index:10001;
71 overflow:hidden; 74 overflow:hidden;
72 position:absolute; 75 position:absolute;
73 left:300;top:0; 76 left:300;top:0;
74} 77}
75.yresizable-proxy{ 78.yresizable-proxy{
76 z-index:10002; 79 z-index:10002;
77} 80}
78.ydlg .ydlg-hd { 81.ydlg .ydlg-hd {
79 background: url(./images/default/basic-dialog/hd-sprite.gif) repeat-x 0 -82px; 82 background: url(./images/default/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
80 background-color:navy; 83 background-color:navy;
81 color:#ffffff; 84 color:#ffffff;
82 font:bold 12px "sans serif", tahoma, verdana, helvetica; 85 font:bold 12px "sans serif", tahoma, verdana, helvetica;
83 overflow:hidden; 86 overflow:hidden;
84 padding:5px; 87 padding:5px;
85} 88}
86.ydlg .ydlg-hd-left { 89.ydlg .ydlg-hd-left {
87 background: url(./images/default/basic-dialog/hd-sprite.gif) no-repeat 0 -41px; 90 background: url(./images/default/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
88 padding-left:3px; 91 padding-left:3px;
89 margin:0px; 92 margin:0px;
90} 93}
91.ydlg .ydlg-hd-right { 94.ydlg .ydlg-hd-right {
92 background: url(./images/default/basic-dialog/hd-sprite.gif) no-repeat right 0; 95 background: url(./images/default/basic-dialog/hd-sprite.gif) no-repeat right 0;
93 padding-right:3px; 96 padding-right:3px;
94} 97}
95.ydlg .ydlg-dlg-body{ 98.ydlg .ydlg-dlg-body{
99<<<<<<< HEAD
96 background:url(./images/default/layout/gradient-bg.gif); 100 background:url(./images/default/layout/gradient-bg.gif);
101=======
102>>>>>>> 0db1d5c8b18eadc4bd9cfc6603e86227fa94b5a9
97 border:1px solid #6593cf; 103 border:1px solid #6593cf;
98 border-top:0 none; 104 border-top:0 none;
99 padding:10px; 105 padding:10px;
100 overflow:hidden; 106 overflow:hidden;
101} 107}
102.ydlg .ydlg-bd{ 108.ydlg .ydlg-bd{
103 overflow:hidden; 109 overflow:hidden;
104} 110}
105.ydlg .ydlg-ft{ 111.ydlg .ydlg-ft{
106 overflow:hidden; 112 overflow:hidden;
107 padding:5px; 113 padding:5px;
108 padding-bottom:0; 114 padding-bottom:0;
109} 115}
110.ydlg .yui-ext-tabbody{ 116.ydlg .yui-ext-tabbody{
111 background:white; 117 background:white;
112 overflow:auto; 118 overflow:auto;
113} 119}
114.ydlg .ytabs-top .yui-ext-tabbody{ 120.ydlg .ytabs-top .yui-ext-tabbody{
115 border:1px solid #6593cf; 121 border:1px solid #6593cf;
116 border-top:0 none; 122 border-top:0 none;
117} 123}
118.ydlg .ytabs-bottom .yui-ext-tabbody{ 124.ydlg .ytabs-bottom .yui-ext-tabbody{
119 border:1px solid #6593cf; 125 border:1px solid #6593cf;
120 border-bottom:0 none; 126 border-bottom:0 none;
121} 127}
122.ydlg .ylayout-container .yui-ext-tabbody{ 128.ydlg .ylayout-container .yui-ext-tabbody{
123 border:0 none; 129 border:0 none;
124} 130}
125.ydlg .inner-tab{ 131.ydlg .inner-tab{
126 margin:5px; 132 margin:5px;
127} 133}
128.ydlg .ydlg-ft .ybtn{ 134.ydlg .ydlg-ft .ybtn{
129 margin-right:5px; 135 margin-right:5px;
130 float:right; 136 float:right;
131 clear:none; 137 clear:none;
132} 138}
133.ydlg .ydlg-ft .ydlg-btns td { 139.ydlg .ydlg-ft .ydlg-btns td {
134 border:0; 140 border:0;
135 padding:0; 141 padding:0;
136} 142}
137.ydlg .ydlg-ft .ydlg-btns-right table{ 143.ydlg .ydlg-ft .ydlg-btns-right table{
138 float:right; 144 float:right;
139 clear:none; 145 clear:none;
140} 146}
141.ydlg .ydlg-ft .ydlg-btns-left table{ 147.ydlg .ydlg-ft .ydlg-btns-left table{
142 float:left; 148 float:left;
143 clear:none; 149 clear:none;
144} 150}
145.ydlg .ydlg-ft .ydlg-btns-center{ 151.ydlg .ydlg-ft .ydlg-btns-center{
146 text-align:center; /*ie*/ 152 text-align:center; /*ie*/
147} 153}
148.ydlg .ydlg-ft .ydlg-btns-center table{ 154.ydlg .ydlg-ft .ydlg-btns-center table{
149 margin:0 auto; /*everyone else*/ 155 margin:0 auto; /*everyone else*/
150} 156}
151.ydlg-draggable .ydlg-hd{ 157.ydlg-draggable .ydlg-hd{
152 cursor:move; 158 cursor:move;
153} 159}
154.ydlg-closable .ydlg-hd{ 160.ydlg-closable .ydlg-hd{
155 padding-right:22px; 161 padding-right:22px;
156} 162}
157.ydlg .ydlg-close { 163.ydlg .ydlg-close {
158 position:absolute; 164 position:absolute;
159 top:4px; 165 top:4px;
160 right:4px; 166 right:4px;
161 z-index:6; 167 z-index:6;
162 height:15px; 168 height:15px;
163 width:15px; 169 width:15px;
164 margin:0; 170 margin:0;
165 padding:0; 171 padding:0;
166 line-height:1px; 172 line-height:1px;
167 font-size:1px; 173 font-size:1px;
168 background-repeat:no-repeat; 174 background-repeat:no-repeat;
169 cursor:pointer; 175 cursor:pointer;
170 visibility:inherit; 176 visibility:inherit;
171 background-image:url(./images/default/basic-dialog/close.gif); 177 background-image:url(./images/default/basic-dialog/close.gif);
172} 178}
173.ydlg div.yresizable-handle-east{ 179.ydlg div.yresizable-handle-east{
174 background-image:url(./images/default/sizer/e-handle-dark.gif); 180 background-image:url(./images/default/sizer/e-handle-dark.gif);
175 border:0; 181 border:0;
176 background-position:left; 182 background-position:left;
177 margin-right:0; 183 margin-right:0;
178} 184}
179.ydlg div.yresizable-handle-south{ 185.ydlg div.yresizable-handle-south{
180 background-image:url(./images/default/sizer/s-handle-dark.gif); 186 background-image:url(./images/default/sizer/s-handle-dark.gif);
181 border:0; 187 border:0;
182 height:6px; 188 height:6px;
183} 189}
184.ydlg div.yresizable-handle-west{ 190.ydlg div.yresizable-handle-west{
185 background-image:url(./images/default/sizer/e-handle-dark.gif); 191 background-image:url(./images/default/sizer/e-handle-dark.gif);
186 border:0; 192 border:0;
187 background-position:1px; 193 background-position:1px;
188} 194}
189.ydlg div.yresizable-handle-north{ 195.ydlg div.yresizable-handle-north{
190 background-image:url(./images/default/s.gif); 196 background-image:url(./images/default/s.gif);
191 border:0; 197 border:0;
192} 198}
193.ydlg div.yresizable-handle-northeast, .ytheme-gray .ydlg div.yresizable-handle-northeast{ 199.ydlg div.yresizable-handle-northeast, .ytheme-gray .ydlg div.yresizable-handle-northeast{
194 background-image:url(./images/default/s.gif); 200 background-image:url(./images/default/s.gif);
195 border:0; 201 border:0;
196} 202}
197.ydlg div.yresizable-handle-northwest, .ytheme-gray .ydlg div.yresizable-handle-northwest{ 203.ydlg div.yresizable-handle-northwest, .ytheme-gray .ydlg div.yresizable-handle-northwest{
198 background-image:url(./images/default/s.gif); 204 background-image:url(./images/default/s.gif);
199 border:0; 205 border:0;
200} 206}
201.ydlg div.yresizable-handle-southeast{ 207.ydlg div.yresizable-handle-southeast{
202 background-image:url(./images/default/sizer/corners-sprite.gif); 208 background-image:url(./images/default/sizer/corners-sprite.gif);
203 background-position: top left; 209 background-position: top left;
204 width:8px; 210 width:8px;
205 height:8px; 211 height:8px;
206 border:0; 212 border:0;
207} 213}
208.ydlg div.yresizable-handle-southwest{ 214.ydlg div.yresizable-handle-southwest{
209 background-image:url(./images/default/sizer/corners-sprite.gif); 215 background-image:url(./images/default/sizer/corners-sprite.gif);
210 background-position: top right; 216 background-position: top right;
211 margin-left:1px; 217 margin-left:1px;
212 margin-bottom:1px; 218 margin-bottom:1px;
213 border:0; 219 border:0;
214} 220}
215 221
216#mb-dlg .ydlg-ft .ybtn{ 222#mb-dlg .ydlg-ft .ybtn{
217 float:none; 223 float:none;
218 clear:none; 224 clear:none;
219 margin:0 3px; 225 margin:0 3px;
220} 226}
221 227
222#mb-dlg .ydlg-bd { 228#mb-dlg .ydlg-bd {
223 padding:5px; 229 padding:5px;
224 overflow:hidden !important; 230 overflow:hidden !important;
225} 231}
226#mb-dlg .ext-mb-input { 232#mb-dlg .ext-mb-input {
227 margin-top:4px; 233 margin-top:4px;
228 width:95%; 234 width:95%;
229} 235}
230#mb-dlg .ext-mb-textarea { 236#mb-dlg .ext-mb-textarea {
231 margin-top:4px; 237 margin-top:4px;
232 font:normal 13px verdana,tahoma,sans-serif; 238 font:normal 13px verdana,tahoma,sans-serif;
233} 239}
234#mb-dlg .ext-mb-progress-wrap { 240#mb-dlg .ext-mb-progress-wrap {
235 margin-top:4px; 241 margin-top:4px;
236 border:1px solid #6593cf; 242 border:1px solid #6593cf;
237} 243}
238#mb-dlg .ext-mb-progress { 244#mb-dlg .ext-mb-progress {
239 height:18px; 245 height:18px;
240 background:transparent url(./images/default/basic-dialog/progress2.gif) repeat-x 1px 1px; 246 background:transparent url(./images/default/basic-dialog/progress2.gif) repeat-x 1px 1px;
241} 247}
242#mb-dlg .ext-mb-progress-bar { 248#mb-dlg .ext-mb-progress-bar {
243 height:18px; 249 height:18px;
244 overflow:hidden; 250 overflow:hidden;
245 width:0; 251 width:0;
246 background:#8bb8f3; 252 background:#8bb8f3;
247} 253}
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/Record.js b/frontend/beta/js/Clipperz/PM/DataModel/Record.js
index ecb6c37..d6ebb39 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/Record.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/Record.js
@@ -1,763 +1,769 @@
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); 282console.log("Record.processData", someValues);
283 this.processDataToExtractLegacyValues(someValues['data']); 283 this.processDataToExtractLegacyValues(someValues['data']);
284 284
285 if (typeof(someValues['data']['notes']) != 'undefined') { 285 if (typeof(someValues['data']['notes']) != 'undefined') {
286 this.setNotes(someValues['data']['notes']); 286 this.setNotes(someValues['data']['notes']);
287 } 287 }
288 288
289 if (someValues['data']['currentVersionKey'] != null) { 289 if (someValues['data']['currentVersionKey'] != null) {
290 this.setCurrentVersionKey(someValues['data']['currentVersionKey']); 290 this.setCurrentVersionKey(someValues['data']['currentVersionKey']);
291 } else { 291 } else {
292 this.setCurrentVersionKey(this.key()); 292 this.setCurrentVersionKey(this.key());
293 } 293 }
294 294
295 // currentVersionParameters = someValues['currentVersion']; 295 // community edition doesn't currently pass version
296 currentVersionParameters = someValues['versions'][someValues['currentVersion']]; 296 // information
297 if (someValues['versions'] == null) {
298 currentVersionParameters = someValues['currentVersion'];
299 } else {
300 currentVersionParameters = someValues['versions'][someValues['currentVersion']];
301 }
302
297console.log("Record.processData - this.currentVersionKey()", this.currentVersionKey()); 303console.log("Record.processData - this.currentVersionKey()", this.currentVersionKey());
298console.log("Record.processData - currentVersionParameters", currentVersionParameters); 304console.log("Record.processData - currentVersionParameters", currentVersionParameters);
299 currentVersionParameters['key'] = this.currentVersionKey(); 305 currentVersionParameters['key'] = this.currentVersionKey();
300 this.setCurrentVersion(new Clipperz.PM.DataModel.RecordVersion(this, currentVersionParameters)); 306 this.setCurrentVersion(new Clipperz.PM.DataModel.RecordVersion(this, currentVersionParameters));
301 307
302 if (someValues['data']['directLogins'] != null) { 308 if (someValues['data']['directLogins'] != null) {
303 vardirectLoginReference; 309 vardirectLoginReference;
304 310
305 for (directLoginReference in someValues['data']['directLogins']) { 311 for (directLoginReference in someValues['data']['directLogins']) {
306 var directLogin; 312 var directLogin;
307 var directLoginParameters; 313 var directLoginParameters;
308 314
309 directLoginParameters = someValues['data']['directLogins'][directLoginReference]; 315 directLoginParameters = someValues['data']['directLogins'][directLoginReference];
310 directLoginParameters.record = this; 316 directLoginParameters.record = this;
311 directLoginParameters.reference = directLoginReference; 317 directLoginParameters.reference = directLoginReference;
312 318
313 directLogin = new Clipperz.PM.DataModel.DirectLogin(directLoginParameters); 319 directLogin = new Clipperz.PM.DataModel.DirectLogin(directLoginParameters);
314 this.addDirectLogin(directLogin, true); 320 this.addDirectLogin(directLogin, true);
315 } 321 }
316 } 322 }
317 this.setShouldProcessData(false); 323 this.setShouldProcessData(false);
318 } 324 }
319 325
320 Clipperz.NotificationCenter.notify(this, 'recordDataReady'); 326 Clipperz.NotificationCenter.notify(this, 'recordDataReady');
321//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.processData"); 327//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.processData");
322//MochiKit.Logging.logDebug("<<< Record.processData"); 328//MochiKit.Logging.logDebug("<<< Record.processData");
323 329
324 return this; 330 return this;
325 }, 331 },
326 332
327 //------------------------------------------------------------------------- 333 //-------------------------------------------------------------------------
328 334
329 'processDataToExtractLegacyValues': function(someValues) { 335 'processDataToExtractLegacyValues': function(someValues) {
330//MochiKit.Logging.logDebug(">>> Record.processDataToExtractLegacyValues"); 336//MochiKit.Logging.logDebug(">>> Record.processDataToExtractLegacyValues");
331 if (someValues['data'] != null) { 337 if (someValues['data'] != null) {
332 this.setNotes(someValues['data']); 338 this.setNotes(someValues['data']);
333 } 339 }
334 340
335 if ( 341 if (
336 (typeof(someValues['loginFormData']) != "undefined") 342 (typeof(someValues['loginFormData']) != "undefined")
337 &&(typeof(someValues['loginBindings'] != "undefined")) 343 &&(typeof(someValues['loginBindings'] != "undefined"))
338 &&(someValues['loginFormData'] != "") 344 &&(someValues['loginFormData'] != "")
339 &&(someValues['loginBindings'] != "") 345 &&(someValues['loginBindings'] != "")
340 ) { 346 ) {
341 vardirectLogin; 347 vardirectLogin;
342 348
343 directLogin = new Clipperz.PM.DataModel.DirectLogin({ 349 directLogin = new Clipperz.PM.DataModel.DirectLogin({
344 record:this, 350 record:this,
345 label:this.label() + Clipperz.PM.Strings['newDirectLoginLabelSuffix'], 351 label:this.label() + Clipperz.PM.Strings['newDirectLoginLabelSuffix'],
346 reference:Clipperz.Crypto.SHA.sha256(new Clipperz.ByteArray(this.label() + 352 reference:Clipperz.Crypto.SHA.sha256(new Clipperz.ByteArray(this.label() +
347 someValues['loginFormData'] + 353 someValues['loginFormData'] +
348 someValues['loginBindings'])).toHexString().substring(2), 354 someValues['loginBindings'])).toHexString().substring(2),
349 formData:Clipperz.Base.evalJSON(someValues['loginFormData']), 355 formData:Clipperz.Base.evalJSON(someValues['loginFormData']),
350 legacyBindingData:Clipperz.Base.evalJSON(someValues['loginBindings']), 356 legacyBindingData:Clipperz.Base.evalJSON(someValues['loginBindings']),
351 bookmarkletVersion:'0.1' 357 bookmarkletVersion:'0.1'
352 }); 358 });
353 this.addDirectLogin(directLogin, true); 359 this.addDirectLogin(directLogin, true);
354 } 360 }
355//MochiKit.Logging.logDebug("<<< Record.processDataToExtractLegacyValues"); 361//MochiKit.Logging.logDebug("<<< Record.processDataToExtractLegacyValues");
356 }, 362 },
357 363
358 //------------------------------------------------------------------------- 364 //-------------------------------------------------------------------------
359 365
360 'getReadyBeforeUpdatingVersionValues': function() { 366 'getReadyBeforeUpdatingVersionValues': function() {
361 }, 367 },
362 368
363 //------------------------------------------------------------------------- 369 //-------------------------------------------------------------------------
364 370
365 'addNewField': function() { 371 'addNewField': function() {
366 varnewField; 372 varnewField;
367 373
368//MochiKit.Logging.logDebug(">>> Record.addNewField - " + this); 374//MochiKit.Logging.logDebug(">>> Record.addNewField - " + this);
369 this.getReadyBeforeUpdatingVersionValues(); 375 this.getReadyBeforeUpdatingVersionValues();
370 newField = this.currentVersion().addNewField(); 376 newField = this.currentVersion().addNewField();
371 Clipperz.NotificationCenter.notify(this, 'recordUpdated'); 377 Clipperz.NotificationCenter.notify(this, 'recordUpdated');
372//MochiKit.Logging.logDebug("<<< Record.addNewField"); 378//MochiKit.Logging.logDebug("<<< Record.addNewField");
373 379
374 return newField; 380 return newField;
375 }, 381 },
376 382
377 //------------------------------------------------------------------------- 383 //-------------------------------------------------------------------------
378 384
379 'removeField': function(aField) { 385 'removeField': function(aField) {
380 this.getReadyBeforeUpdatingVersionValues(); 386 this.getReadyBeforeUpdatingVersionValues();
381 this.currentVersion().removeField(aField); 387 this.currentVersion().removeField(aField);
382 Clipperz.NotificationCenter.notify(this, 'recordUpdated'); 388 Clipperz.NotificationCenter.notify(this, 'recordUpdated');
383 }, 389 },
384 390
385 'removeEmptyFields': function() { 391 'removeEmptyFields': function() {
386 MochiKit.Iter.forEach(MochiKit.Base.values(this.currentVersion().fields()), MochiKit.Base.bind(function(aField) { 392 MochiKit.Iter.forEach(MochiKit.Base.values(this.currentVersion().fields()), MochiKit.Base.bind(function(aField) {
387 if (aField.isEmpty()) { 393 if (aField.isEmpty()) {
388 this.removeField(aField); 394 this.removeField(aField);
389 // this.currentVersion().removeField(aField); 395 // this.currentVersion().removeField(aField);
390 } 396 }
391 }, this)); 397 }, this));
392 }, 398 },
393 399
394 //------------------------------------------------------------------------- 400 //-------------------------------------------------------------------------
395 401
396 'notes': function() { 402 'notes': function() {
397 return this._notes; 403 return this._notes;
398 }, 404 },
399 405
400 'setNotes': function(aValue) { 406 'setNotes': function(aValue) {
401 this._notes = aValue; 407 this._notes = aValue;
402 this.setHeaderNotes(null); 408 this.setHeaderNotes(null);
403 }, 409 },
404 410
405 //------------------------------------------------------------------------- 411 //-------------------------------------------------------------------------
406 412
407 'headerNotes': function() { 413 'headerNotes': function() {
408 return this._headerNotes; 414 return this._headerNotes;
409 }, 415 },
410 416
411 'setHeaderNotes': function(aValue) { 417 'setHeaderNotes': function(aValue) {
412 this._headerNotes = aValue; 418 this._headerNotes = aValue;
413 }, 419 },
414 420
415 //------------------------------------------------------------------------- 421 //-------------------------------------------------------------------------
416 422
417 'remove': function() { 423 'remove': function() {
418//MochiKit.Logging.logDebug(">>> Record.remove - " + this); 424//MochiKit.Logging.logDebug(">>> Record.remove - " + this);
419 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), MochiKit.Base.method(this, 'removeDirectLogin')); 425 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), MochiKit.Base.method(this, 'removeDirectLogin'));
420 426
421 this.syncDirectLoginReferenceValues(); 427 this.syncDirectLoginReferenceValues();
422 this.user().removeRecord(this); 428 this.user().removeRecord(this);
423//MochiKit.Logging.logDebug("<<< Record.remove"); 429//MochiKit.Logging.logDebug("<<< Record.remove");
424 }, 430 },
425 431
426 //------------------------------------------------------------------------- 432 //-------------------------------------------------------------------------
427 433
428 'directLogins': function() { 434 'directLogins': function() {
429 return this._directLogins; 435 return this._directLogins;
430 }, 436 },
431 437
432 'addDirectLogin': function(aDirectLogin, shouldUpdateUser) { 438 'addDirectLogin': function(aDirectLogin, shouldUpdateUser) {
433 this.directLogins()[aDirectLogin.reference()] = aDirectLogin; 439 this.directLogins()[aDirectLogin.reference()] = aDirectLogin;
434 if (shouldUpdateUser == true) { 440 if (shouldUpdateUser == true) {
435 this.user().addDirectLogin(aDirectLogin); 441 this.user().addDirectLogin(aDirectLogin);
436 } 442 }
437 }, 443 },
438 444
439 'removeDirectLogin': function(aDirectLogin) { 445 'removeDirectLogin': function(aDirectLogin) {
440 this.removedDirectLogins().push(aDirectLogin); 446 this.removedDirectLogins().push(aDirectLogin);
441 delete this.directLogins()[aDirectLogin.reference()]; 447 delete this.directLogins()[aDirectLogin.reference()];
442 // this.user().removeDirectLogin(aDirectLogin); 448 // this.user().removeDirectLogin(aDirectLogin);
443 }, 449 },
444 450
445 'resetDirectLogins': function() { 451 'resetDirectLogins': function() {
446 this._directLogins = {}; 452 this._directLogins = {};
447 }, 453 },
448 454
449 'removedDirectLogins': function() { 455 'removedDirectLogins': function() {
450 return this._removedDirectLogins; 456 return this._removedDirectLogins;
451 }, 457 },
452 458
453 'resetRemovedDirectLogins': function() { 459 'resetRemovedDirectLogins': function() {
454 this._removedDirectLogins = []; 460 this._removedDirectLogins = [];
455 }, 461 },
456 462
457 //------------------------------------------------------------------------- 463 //-------------------------------------------------------------------------
458 464
459 'serverData': function() { 465 'serverData': function() {
460 return this._serverData; 466 return this._serverData;
461 }, 467 },
462 468
463 'setServerData': function(aValue) { 469 'setServerData': function(aValue) {
464 this._serverData = aValue; 470 this._serverData = aValue;
465 this.setShouldLoadData(false); 471 this.setShouldLoadData(false);
466 return aValue; 472 return aValue;
467 }, 473 },
468 474
469 //------------------------------------------------------------------------- 475 //-------------------------------------------------------------------------
470 476
471 'decryptedData': function() { 477 'decryptedData': function() {
472 return this._decryptedData; 478 return this._decryptedData;
473 }, 479 },
474 480
475 'setDecryptedData': function(aValue) { 481 'setDecryptedData': function(aValue) {
476 this._decryptedData = aValue; 482 this._decryptedData = aValue;
477 this.setShouldDecryptData(false); 483 this.setShouldDecryptData(false);
478 return aValue; 484 return aValue;
479 }, 485 },
480 486
481 //------------------------------------------------------------------------- 487 //-------------------------------------------------------------------------
482 488
483 'cachedData': function() { 489 'cachedData': function() {
484 return this._cachedData; 490 return this._cachedData;
485 }, 491 },
486 492
487 'setCachedData': function(aValue) { 493 'setCachedData': function(aValue) {
488//MochiKit.Logging.logDebug(">>> Record.setCachedData"); 494//MochiKit.Logging.logDebug(">>> Record.setCachedData");
489//MochiKit.Logging.logDebug("--- Record.setCachedData - aValue: " + Clipperz.Base.serializeJSON(aValue)); 495//MochiKit.Logging.logDebug("--- Record.setCachedData - aValue: " + Clipperz.Base.serializeJSON(aValue));
490 this._cachedData = aValue; 496 this._cachedData = aValue;
491 this.setShouldProcessData(false); 497 this.setShouldProcessData(false);
492//MochiKit.Logging.logDebug("<<< Record.setCachedData"); 498//MochiKit.Logging.logDebug("<<< Record.setCachedData");
493 499
494 return aValue; 500 return aValue;
495 }, 501 },
496 502
497 //------------------------------------------------------------------------- 503 //-------------------------------------------------------------------------
498 504
499 'hasPendingChanges': function() { 505 'hasPendingChanges': function() {
500 var result; 506 var result;
501 507
502//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.hasPendingChanges"); 508//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.hasPendingChanges");
503//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + this.cachedData()); 509//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + this.cachedData());
504//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData())); 510//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData()));
505//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + this.currentDataSnapshot()); 511//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + this.currentDataSnapshot());
506//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + Clipperz.Base.serializeJSON(this.currentDataSnapshot())); 512//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + Clipperz.Base.serializeJSON(this.currentDataSnapshot()));
507//console.log(">>> Record.hasPendingChanges - cachedData: %o", this.cachedData()); 513//console.log(">>> Record.hasPendingChanges - cachedData: %o", this.cachedData());
508//console.log(">>> Record.hasPendingChanges - currentSnapshot: %o", this.currentDataSnapshot()); 514//console.log(">>> Record.hasPendingChanges - currentSnapshot: %o", this.currentDataSnapshot());
509 result = (MochiKit.Base.compare(this.cachedData(), this.currentDataSnapshot()) != 0); 515 result = (MochiKit.Base.compare(this.cachedData(), this.currentDataSnapshot()) != 0);
510//MochiKit.Logging.logDebug("<<< Record.hasPendingChanges - " + result); 516//MochiKit.Logging.logDebug("<<< Record.hasPendingChanges - " + result);
511 517
512 if ((result == false) && this.isBrandNew() && (this.label() != Clipperz.PM.Strings['newRecordTitleLabel'])) { 518 if ((result == false) && this.isBrandNew() && (this.label() != Clipperz.PM.Strings['newRecordTitleLabel'])) {
513 result = true; 519 result = true;
514 } 520 }
515//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.hasPendingChanges"); 521//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.hasPendingChanges");
516 522
517 return result; 523 return result;
518 }, 524 },
519 525
520 //------------------------------------------------------------------------- 526 //-------------------------------------------------------------------------
521 527
522 'currentDataSnapshot': function() { 528 'currentDataSnapshot': function() {
523 varresult; 529 varresult;
524 530
525//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.currentDataSnapshot"); 531//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.currentDataSnapshot");
526 result = { 532 result = {
527 'label': this.label(), 533 'label': this.label(),
528 'data': this.serializedData(), 534 'data': this.serializedData(),
529 'currentVersion': this.currentVersion().currentDataSnapshot() 535 'currentVersion': this.currentVersion().currentDataSnapshot()
530 }; 536 };
531 537
532 // result['data']['data'] = this.notes(); 538 // result['data']['data'] = this.notes();
533 result = Clipperz.Base.serializeJSON(result); 539 result = Clipperz.Base.serializeJSON(result);
534 540
535//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.currentDataSnapshot"); 541//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.currentDataSnapshot");
536//MochiKit.Logging.logDebug("<<< Record.currentDataSnapshot"); 542//MochiKit.Logging.logDebug("<<< Record.currentDataSnapshot");
537 543
538 return result; 544 return result;
539 }, 545 },
540 546
541 //......................................................................... 547 //.........................................................................
542 548
543 'takeSnapshotOfCurrentData': function() { 549 'takeSnapshotOfCurrentData': function() {
544 this.setCachedData(this.currentDataSnapshot()); 550 this.setCachedData(this.currentDataSnapshot());
545 }, 551 },
546 552
547 //------------------------------------------------------------------------- 553 //-------------------------------------------------------------------------
548 554
549 'headerData': function() { 555 'headerData': function() {
550 var result; 556 var result;
551 557
552 result = { 558 result = {
553 'label': this.label(), 559 'label': this.label(),
554 'key': this.key() 560 'key': this.key()
555 }; 561 };
556 562
557 if (this.headerNotes() != null) { 563 if (this.headerNotes() != null) {
558 result['headerNotes'] = this.headerNotes(); 564 result['headerNotes'] = this.headerNotes();
559 } 565 }
560 566
561 return result; 567 return result;
562 }, 568 },
563 569
564 //------------------------------------------------------------------------- 570 //-------------------------------------------------------------------------
565 571
566 'serializedData': function() { 572 'serializedData': function() {
567 var result; 573 var result;
568 var directLoginReference; 574 var directLoginReference;
569 575
570 result = {}; 576 result = {};
571 result['currentVersionKey'] = this.currentVersion().key(); 577 result['currentVersionKey'] = this.currentVersion().key();
572 578
573 result['directLogins'] = {}; 579 result['directLogins'] = {};
574 for (directLoginReference in this.directLogins()) { 580 for (directLoginReference in this.directLogins()) {
575 result['directLogins'][directLoginReference] = this.directLogins()[directLoginReference].serializedData(); 581 result['directLogins'][directLoginReference] = this.directLogins()[directLoginReference].serializedData();
576 } 582 }
577 result['notes'] = this.notes(); 583 result['notes'] = this.notes();
578 584
579 return result; 585 return result;
580 }, 586 },
581 587
582 //------------------------------------------------------------------------- 588 //-------------------------------------------------------------------------
583 589
584 'encryptedData': function() { 590 'encryptedData': function() {
585 var deferredResult; 591 var deferredResult;
586 varresult; 592 varresult;
587 593
588//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.encryptedData"); 594//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.encryptedData");
589 result = {} 595 result = {}
590//MochiKit.Logging.logDebug("--- Record.encryptedData - 1"); 596//MochiKit.Logging.logDebug("--- Record.encryptedData - 1");
591 deferredResult = new MochiKit.Async.Deferred(); 597 deferredResult = new MochiKit.Async.Deferred();
592//MochiKit.Logging.logDebug("--- Record.encryptedData - 2"); 598//MochiKit.Logging.logDebug("--- Record.encryptedData - 2");
593//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 1: " + res); return res;}); 599//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 1: " + res); return res;});
594 deferredResult.addCallback(function(aResult, aRecord) { 600 deferredResult.addCallback(function(aResult, aRecord) {
595 aResult['reference'] = aRecord.reference(); 601 aResult['reference'] = aRecord.reference();
596 return aResult; 602 return aResult;
597 }, result, this); 603 }, result, this);
598//MochiKit.Logging.logDebug("--- Record.encryptedData - 3"); 604//MochiKit.Logging.logDebug("--- Record.encryptedData - 3");
599//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 2: " + res); return res;}); 605//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 2: " + res); return res;});
600 deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion, this.key(), this.serializedData()); 606 deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion, this.key(), this.serializedData());
601//MochiKit.Logging.logDebug("--- Record.encryptedData - 4"); 607//MochiKit.Logging.logDebug("--- Record.encryptedData - 4");
602//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 3: " + res); return res;}); 608//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 3: " + res); return res;});
603 deferredResult.addCallback(function(aResult, res) { 609 deferredResult.addCallback(function(aResult, res) {
604 aResult['data'] = res; 610 aResult['data'] = res;
605 return aResult; 611 return aResult;
606 }, result); 612 }, result);
607//MochiKit.Logging.logDebug("--- Record.encryptedData - 5"); 613//MochiKit.Logging.logDebug("--- Record.encryptedData - 5");
608//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 4: " + res); return res;}); 614//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 4: " + res); return res;});
609 deferredResult.addCallback(function(aResult) { 615 deferredResult.addCallback(function(aResult) {
610 aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion; 616 aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
611 return aResult; 617 return aResult;
612 }, result); 618 }, result);
613//MochiKit.Logging.logDebug("--- Record.encryptedData - 6"); 619//MochiKit.Logging.logDebug("--- Record.encryptedData - 6");
614//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 5: " + res); return res;}); 620//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 5: " + res); return res;});
615 deferredResult.callback(); 621 deferredResult.callback();
616//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.encryptedData"); 622//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.encryptedData");
617 623
618 return deferredResult; 624 return deferredResult;
619 }, 625 },
620 626
621 //------------------------------------------------------------------------- 627 //-------------------------------------------------------------------------
622 628
623 'syncDirectLoginReferenceValues': function() { 629 'syncDirectLoginReferenceValues': function() {
624//MochiKit.Logging.logDebug(">>> Record.syncDirectLoginReferenceValues"); 630//MochiKit.Logging.logDebug(">>> Record.syncDirectLoginReferenceValues");
625 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), function(aDirectLogin) { 631 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), function(aDirectLogin) {
626 aDirectLogin.record().user().synchronizeDirectLogin(aDirectLogin); 632 aDirectLogin.record().user().synchronizeDirectLogin(aDirectLogin);
627 }); 633 });
628 634
629 MochiKit.Iter.forEach(this.removedDirectLogins(), function(aDirectLogin) { 635 MochiKit.Iter.forEach(this.removedDirectLogins(), function(aDirectLogin) {
630 aDirectLogin.record().user().removeDirectLogin(aDirectLogin); 636 aDirectLogin.record().user().removeDirectLogin(aDirectLogin);
631 }); 637 });
632 638
633 this.resetRemovedDirectLogins(); 639 this.resetRemovedDirectLogins();
634//MochiKit.Logging.logDebug("<<< Record.syncDirectLoginReferenceValues"); 640//MochiKit.Logging.logDebug("<<< Record.syncDirectLoginReferenceValues");
635 }, 641 },
636 642
637 //------------------------------------------------------------------------- 643 //-------------------------------------------------------------------------
638 644
639 'saveChanges': function() { 645 'saveChanges': function() {
640 var result; 646 var result;
641 647
642 // if (this.isBrandNew() == false) { 648 // if (this.isBrandNew() == false) {
643 // result = this.user().saveRecords([this], 'updateData'); 649 // result = this.user().saveRecords([this], 'updateData');
644 // } else { 650 // } else {
645 // result = this.user().saveRecords([this], 'addNewRecords'); 651 // result = this.user().saveRecords([this], 'addNewRecords');
646 // } 652 // }
647 653
648 result = this.user().saveRecords([this]); 654 result = this.user().saveRecords([this]);
649 655
650 return result; 656 return result;
651 }, 657 },
652 658
653/* 659/*
654 'saveChanges': function() { 660 'saveChanges': function() {
655 var deferredResult; 661 var deferredResult;
656 varresult; 662 varresult;
657 663
658 Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'records', true); 664 Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'records', true);
659//MochiKit.Logging.logDebug(">>> Record.saveChanges"); 665//MochiKit.Logging.logDebug(">>> Record.saveChanges");
660//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.saveChanges"); 666//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.saveChanges");
661 if (this.headerNotes() != null) { 667 if (this.headerNotes() != null) {
662 this.setNotes(this.headerNotes()); 668 this.setNotes(this.headerNotes());
663 } 669 }
664 this.syncDirectLoginReferenceValues(); 670 this.syncDirectLoginReferenceValues();
665 this.currentVersion().createNewVersion(); 671 this.currentVersion().createNewVersion();
666 672
667 result = {'records': [{}]}; 673 result = {'records': [{}]};
668 674
669 deferredResult = new MochiKit.Async.Deferred(); 675 deferredResult = new MochiKit.Async.Deferred();
670 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo'); 676 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo');
671 deferredResult.addCallback(MochiKit.Base.method(this, 'updateKey')); 677 deferredResult.addCallback(MochiKit.Base.method(this, 'updateKey'));
672 678
673 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData'); 679 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData');
674 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'encryptedData')); 680 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'encryptedData'));
675 deferredResult.addCallback(function(aResult, res) { 681 deferredResult.addCallback(function(aResult, res) {
676 aResult['user'] = res; 682 aResult['user'] = res;
677 return aResult; 683 return aResult;
678 }, result); 684 }, result);
679 685
680 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData'); 686 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData');
681 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); 687 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData'));
682 deferredResult.addCallback(function(aResult, res) { 688 deferredResult.addCallback(function(aResult, res) {
683 //# aResult['record'] = res; 689 //# aResult['record'] = res;
684 aResult['records'][0]['record'] = res; 690 aResult['records'][0]['record'] = res;
685 return aResult; 691 return aResult;
686 }, result); 692 }, result);
687 693
688 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordVersions'); 694 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordVersions');
689 deferredResult.addCallback(MochiKit.Base.method(this.currentVersion(), 'encryptedData')); 695 deferredResult.addCallback(MochiKit.Base.method(this.currentVersion(), 'encryptedData'));
690 deferredResult.addCallback(function(aResult, res) { 696 deferredResult.addCallback(function(aResult, res) {
691 // aResult['currentRecordVersion'] = res; 697 // aResult['currentRecordVersion'] = res;
692 aResult['records'][0]['currentRecordVersion'] = res; 698 aResult['records'][0]['currentRecordVersion'] = res;
693 return aResult; 699 return aResult;
694 }, result); 700 }, result);
695 701
696 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_sendingData'); 702 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_sendingData');
697 if (this.isBrandNew() == false) { 703 if (this.isBrandNew() == false) {
698 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'updateData'); 704 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'updateData');
699 } else { 705 } else {
700 //# deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecord'); 706 //# deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecord');
701 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecords'); 707 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecords');
702 } 708 }
703 709
704 deferredResult.addCallback(MochiKit.Base.method(this, 'takeSnapshotOfCurrentData')); 710 deferredResult.addCallback(MochiKit.Base.method(this, 'takeSnapshotOfCurrentData'));
705 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_updatingInterface'); 711 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_updatingInterface');
706 deferredResult.addCallback(MochiKit.Base.method(this, 'setIsBrandNew'), false); 712 deferredResult.addCallback(MochiKit.Base.method(this, 'setIsBrandNew'), false);
707 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'recordUpdated'); 713 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'recordUpdated');
708 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'directLoginUpdated'); 714 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'directLoginUpdated');
709 deferredResult.callback(); 715 deferredResult.callback();
710 716
711 return deferredResult; 717 return deferredResult;
712 }, 718 },
713 */ 719 */
714 //------------------------------------------------------------------------- 720 //-------------------------------------------------------------------------
715 721
716 'cancelChanges': function() { 722 'cancelChanges': function() {
717//MochiKit.Logging.logDebug(">>> Record.cancelChanges"); 723//MochiKit.Logging.logDebug(">>> Record.cancelChanges");
718//MochiKit.Logging.logDebug("--- Record.cancelChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData())); 724//MochiKit.Logging.logDebug("--- Record.cancelChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData()));
719 if (this.isBrandNew()) { 725 if (this.isBrandNew()) {
720 this.user().removeRecord(this); 726 this.user().removeRecord(this);
721 } else { 727 } else {
722 this.restoreValuesFromSnapshot(this.cachedData()); 728 this.restoreValuesFromSnapshot(this.cachedData());
723 } 729 }
724//MochiKit.Logging.logDebug("<<< Record.cancelChanges"); 730//MochiKit.Logging.logDebug("<<< Record.cancelChanges");
725 }, 731 },
726 732
727 //------------------------------------------------------------------------- 733 //-------------------------------------------------------------------------
728 734
729 'restoreValuesFromSnapshot': function(someSnapshotData) { 735 'restoreValuesFromSnapshot': function(someSnapshotData) {
730 varsnapshotData; 736 varsnapshotData;
731 737
732//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.restoreValuesFromSnapshot"); 738//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.restoreValuesFromSnapshot");
733 snapshotData = Clipperz.Base.evalJSON(someSnapshotData); 739 snapshotData = Clipperz.Base.evalJSON(someSnapshotData);
734//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - someSnapshotData (1): " + Clipperz.Base.serializeJSON(someSnapshotData)); 740//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - someSnapshotData (1): " + Clipperz.Base.serializeJSON(someSnapshotData));
735 this.setLabel(snapshotData['label']); 741 this.setLabel(snapshotData['label']);
736 this.resetDirectLogins(); 742 this.resetDirectLogins();
737 this.setShouldProcessData(true); 743 this.setShouldProcessData(true);
738 this.processData(snapshotData); 744 this.processData(snapshotData);
739//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - snapshotData: (2)" + Clipperz.Base.serializeJSON(snapshotData)); 745//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - snapshotData: (2)" + Clipperz.Base.serializeJSON(snapshotData));
740 746
741 this.resetRemovedDirectLogins(); 747 this.resetRemovedDirectLogins();
742 748
743 { 749 {
744 var currentSnapshot; 750 var currentSnapshot;
745 varcomparisonResult; 751 varcomparisonResult;
746 752
747 currentSnapshot = this.currentDataSnapshot(); 753 currentSnapshot = this.currentDataSnapshot();
748//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - 1"); 754//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - 1");
749//console.log("snapshot data: %o", someSnapshotData.currentVersion); 755//console.log("snapshot data: %o", someSnapshotData.currentVersion);
750//console.log("current data: %o", currentSnapshot.currentVersion); 756//console.log("current data: %o", currentSnapshot.currentVersion);
751//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - someSnapshotData: " + Clipperz.Base.serializeJSON(someSnapshotData.currentVersion)); 757//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - someSnapshotData: " + Clipperz.Base.serializeJSON(someSnapshotData.currentVersion));
752//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - currentSnapshot: " + Clipperz.Base.serializeJSON(currentSnapshot.currentVersion)); 758//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - currentSnapshot: " + Clipperz.Base.serializeJSON(currentSnapshot.currentVersion));
753 comparisonResult = MochiKit.Base.compare(someSnapshotData.currentVersion, currentSnapshot.currentVersion); 759 comparisonResult = MochiKit.Base.compare(someSnapshotData.currentVersion, currentSnapshot.currentVersion);
754//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - " + comparisonResult); 760//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - " + comparisonResult);
755 } 761 }
756//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.restoreValuesFromSnapshot"); 762//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.restoreValuesFromSnapshot");
757 }, 763 },
758 764
759 //------------------------------------------------------------------------- 765 //-------------------------------------------------------------------------
760 __syntaxFix__: "syntax fix" 766 __syntaxFix__: "syntax fix"
761}); 767});
762 768
763 769
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 9fa95e9..299ebc7 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=\"https://www.clipperz.com/beta/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}