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
@@ -103,386 +103,392 @@ Clipperz.PM.DataModel.Record.prototype = MochiKit.Base.update(null, {
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");
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
@@ -319,385 +319,385 @@ Clipperz.PM.Strings.Languages['en-us'] = {
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 },