summaryrefslogtreecommitdiff
authorGiulio Cesare Solaroli <giulio.cesare@clipperz.com>2012-02-11 23:48:42 (UTC)
committer Giulio Cesare Solaroli <giulio.cesare@clipperz.com>2012-02-11 23:48:42 (UTC)
commita0661c3b02aa26d6b08ff13dc321e09478868159 (patch) (unidiff)
tree87bd0af25a0732adb9d14a34d25f9d5479fdf5ee
parent96d01919d3ff42c3fdd7f6186a0500caccd3c140 (diff)
parent7804333809bf725e32a08c531a06acd7d668e190 (diff)
downloadclipperz-a0661c3b02aa26d6b08ff13dc321e09478868159.zip
clipperz-a0661c3b02aa26d6b08ff13dc321e09478868159.tar.gz
clipperz-a0661c3b02aa26d6b08ff13dc321e09478868159.tar.bz2
Merge pull request #25 from gcsolaroli/master
Initial integration of /beta and /gamma with a single backend
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--backend/php/properties/php.properties.json7
-rw-r--r--backend/php/src/configuration.php6
-rw-r--r--backend/php/src/index.php189
-rw-r--r--backend/python/properties/python.properties.json8
-rw-r--r--frontend/beta/html/index_template.html4
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/Record.js7
-rw-r--r--frontend/beta/js/Clipperz/PM/Proxy.js3
-rwxr-xr-xfrontend/beta/js/Clipperz/PM/Proxy/Proxy.PHP.js262
-rw-r--r--frontend/gamma/css/clipperz.css3725
-rw-r--r--frontend/gamma/css/clipperz/clipperz.css4517
-rw-r--r--frontend/gamma/css/clipperz/iPhone.css461
-rw-r--r--frontend/gamma/css/clipperz/ie.css353
-rw-r--r--frontend/gamma/css/compact.css (renamed from frontend/gamma/css/clipperz/compact.css)152
-rw-r--r--frontend/gamma/css/iPhone.css428
-rw-r--r--frontend/gamma/html/index_template.html9
-rw-r--r--frontend/gamma/js/Clipperz/Async.js19
-rw-r--r--frontend/gamma/js/Clipperz/PM/Proxy.js2
-rw-r--r--frontend/gamma/properties/gamma.properties.json4
-rw-r--r--scripts/builder/backendBuilder.py101
-rw-r--r--scripts/builder/backends/phpBuilder.py (renamed from scripts/builder/phpBuilder.py)7
-rw-r--r--scripts/builder/backends/pythonBuilder.py27
-rw-r--r--scripts/builder/backends/scriptLanguageBuilder.py20
-rw-r--r--scripts/builder/frontendBuilder.py141
-rwxr-xr-xscripts/builder/main.py85
-rw-r--r--scripts/builder/pythonBuilder.py14
-rw-r--r--scripts/builder/repository.py75
26 files changed, 4754 insertions, 5872 deletions
diff --git a/backend/php/properties/php.properties.json b/backend/php/properties/php.properties.json
index 32d5084..8ce703a 100644
--- a/backend/php/properties/php.properties.json
+++ b/backend/php/properties/php.properties.json
@@ -1,4 +1,9 @@
1{ 1{
2 "request.path": "../index.php", 2 "request.path": "index.php",
3 "should.pay.toll": "false" 3 "should.pay.toll": "false"
4
5 "development.settings": {
6 "url": "http://localhost/php/clipperz"
7 }
8
4} \ No newline at end of file 9} \ No newline at end of file
diff --git a/backend/php/src/configuration.php b/backend/php/src/configuration.php
index 291e3a1..85f680e 100644
--- a/backend/php/src/configuration.php
+++ b/backend/php/src/configuration.php
@@ -1,36 +1,36 @@
1<?php 1<?php
2global $configuration; 2global $configuration;
3$configuration['soap'] = "http://www.phpobjectgenerator.com/services/soap.php?wsdl"; 3$configuration['soap'] = "http://www.phpobjectgenerator.com/services/soap.php?wsdl";
4$configuration['homepage'] = "http://www.phpobjectgenerator.com"; 4$configuration['homepage'] = "http://www.phpobjectgenerator.com";
5$configuration['revisionNumber'] = ""; 5$configuration['revisionNumber'] = "";
6$configuration['versionNumber'] = "3.0d"; 6$configuration['versionNumber'] = "3.0d";
7 7
8$configuration['setup_password'] = ''; 8$configuration['setup_password'] = '';
9 9
10 10
11// to enable automatic data encoding, run setup, go to the manage plugins tab and install the base64 plugin. 11// to enable automatic data encoding, run setup, go to the manage plugins tab and install the base64 plugin.
12// then set db_encoding = 1 below. 12// then set db_encoding = 1 below.
13// when enabled, db_encoding transparently encodes and decodes data to and from the database without any 13// when enabled, db_encoding transparently encodes and decodes data to and from the database without any
14// programmatic effort on your part. 14// programmatic effort on your part.
15$configuration['db_encoding'] = 0; 15$configuration['db_encoding'] = 0;
16 16
17// edit the information below to match your database settings 17// edit the information below to match your database settings
18 18
19 $configuration['db'] = 'clipperz'; //database name 19 $configuration['db'] = 'clipperz'; //database name
20 $configuration['host'] = 'localhost'; //database host 20 $configuration['host'] = 'localhost'; //database host
21 $configuration['user'] = 'root'; //database user 21 $configuration['user'] = 'clipperz'; //database user
22 $configuration['pass'] = 'pass'; //database password 22 $configuration['pass'] = 'clipperz'; //database password
23 $configuration['port'] = '3306'; //database port 23 $configuration['port'] = '3306'; //database port
24 24
25 25
26//proxy settings - if you are behnd a proxy, change the settings below 26//proxy settings - if you are behnd a proxy, change the settings below
27$configuration['proxy_host'] = false; 27$configuration['proxy_host'] = false;
28$configuration['proxy_port'] = false; 28$configuration['proxy_port'] = false;
29$configuration['proxy_username'] = false; 29$configuration['proxy_username'] = false;
30$configuration['proxy_password'] = false; 30$configuration['proxy_password'] = false;
31 31
32 32
33//plugin settings 33//plugin settings
34$configuration['plugins_path'] = dirname(__FILE__).'/plugins'; 34$configuration['plugins_path'] = dirname(__FILE__).'/plugins';
35 35
36?> \ No newline at end of file 36?> \ No newline at end of file
diff --git a/backend/php/src/index.php b/backend/php/src/index.php
index 214ac01..da7c60c 100644
--- a/backend/php/src/index.php
+++ b/backend/php/src/index.php
@@ -1,755 +1,918 @@
1<?php 1<?php
2 include "./configuration.php"; 2 include "./configuration.php";
3 include "./objects/class.database.php"; 3 include "./objects/class.database.php";
4 include "./objects/class.user.php"; 4 include "./objects/class.user.php";
5 include "./objects/class.record.php"; 5 include "./objects/class.record.php";
6 include "./objects/class.recordversion.php"; 6 include "./objects/class.recordversion.php";
7 include "./objects/class.onetimepassword.php"; 7 include "./objects/class.onetimepassword.php";
8 include "./objects/class.onetimepasswordstatus.php"; 8 include "./objects/class.onetimepasswordstatus.php";
9 9
10//----------------------------------------------------------------------------- 10//-----------------------------------------------------------------------------
11 11
12if ( !function_exists('json_decode') ) { 12if ( !function_exists('json_decode') ) {
13 function json_decode($content, $assoc=false) { 13 function json_decode($content, $assoc=false) {
14 require_once 'json/JSON.php'; 14 require_once 'json/JSON.php';
15 if ( $assoc ) { 15 if ( $assoc ) {
16 $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE); 16 $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
17 } else { 17 } else {
18 $json = new Services_JSON; 18 $json = new Services_JSON;
19 } 19 }
20 20
21 return $json->decode($content); 21 return $json->decode($content);
22 } 22 }
23} 23}
24 24
25if ( !function_exists('json_encode') ) { 25if ( !function_exists('json_encode') ) {
26 function json_encode($content) { 26 function json_encode($content) {
27 require_once 'json/JSON.php'; 27 require_once 'json/JSON.php';
28 $json = new Services_JSON; 28 $json = new Services_JSON;
29 29
30 return $json->encode($content); 30 return $json->encode($content);
31 } 31 }
32} 32}
33 33
34//----------------------------------------------------------------------------- 34//-----------------------------------------------------------------------------
35 //'dec2base', 'base2dec' and 'digits' are functions found on the following 35 //'dec2base', 'base2dec' and 'digits' are functions found on the following
36 //PHP manual page: http://ch2.php.net/manual/en/ref.bc.php 36 //PHP manual page: http://ch2.php.net/manual/en/ref.bc.php
37// 37//
38 38
39function dec2base($dec, $base, $digits=FALSE) { 39function dec2base($dec, $base, $digits=FALSE) {
40 if ($base<2 or $base>256) { 40 if ($base<2 or $base>256) {
41 die("Invalid Base: ".$base); 41 die("Invalid Base: ".$base);
42 } 42 }
43 43
44 bcscale(0); 44 bcscale(0);
45 $value=""; 45 $value="";
46 if (!$digits) { 46 if (!$digits) {
47 $digits = digits($base); 47 $digits = digits($base);
48 } 48 }
49 49
50 while ($dec > $base-1) { 50 while ($dec > $base-1) {
51 $rest = bcmod($dec, $base); 51 $rest = bcmod($dec, $base);
52 $dec = bcdiv($dec, $base); 52 $dec = bcdiv($dec, $base);
53 $value = $digits[$rest].$value; 53 $value = $digits[$rest].$value;
54 } 54 }
55 55
56 $value=$digits[intval($dec)].$value; 56 $value=$digits[intval($dec)].$value;
57 57
58 return (string)$value; 58 return (string)$value;
59} 59}
60 60
61//............................................................................. 61//.............................................................................
62 62
63// convert another base value to its decimal value 63// convert another base value to its decimal value
64function base2dec($value, $base, $digits=FALSE) { 64function base2dec($value, $base, $digits=FALSE) {
65 if ($base<2 or $base>256) { 65 if ($base<2 or $base>256) {
66 die("Invalid Base: ".$base); 66 die("Invalid Base: ".$base);
67 } 67 }
68 68
69 bcscale(0); 69 bcscale(0);
70 if ($base<37) { 70 if ($base<37) {
71 $value=strtolower($value); 71 $value=strtolower($value);
72 } 72 }
73 73
74 if (!$digits) { 74 if (!$digits) {
75 $digits=digits($base); 75 $digits=digits($base);
76 } 76 }
77 77
78 $size = strlen($value); 78 $size = strlen($value);
79 $dec="0"; 79 $dec="0";
80 for ($loop=0; $loop<$size; $loop++) { 80 for ($loop=0; $loop<$size; $loop++) {
81 $element = strpos($digits, $value[$loop]); 81 $element = strpos($digits, $value[$loop]);
82 $power = bcpow($base, $size-$loop-1); 82 $power = bcpow($base, $size-$loop-1);
83 $dec = bcadd($dec, bcmul($element,$power)); 83 $dec = bcadd($dec, bcmul($element,$power));
84 } 84 }
85 85
86 return (string)$dec; 86 return (string)$dec;
87} 87}
88 88
89//............................................................................. 89//.............................................................................
90 90
91function digits($base) { 91function digits($base) {
92 if ($base>64) { 92 if ($base>64) {
93 $digits=""; 93 $digits="";
94 for ($loop=0; $loop<256; $loop++) { 94 for ($loop=0; $loop<256; $loop++) {
95 $digits.=chr($loop); 95 $digits.=chr($loop);
96 } 96 }
97 } else { 97 } else {
98 $digits ="0123456789abcdefghijklmnopqrstuvwxyz"; 98 $digits ="0123456789abcdefghijklmnopqrstuvwxyz";
99 $digits.="ABCDEFGHIJKLMNOPQRSTUVWXYZ-_"; 99 $digits.="ABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
100 } 100 }
101 101
102 $digits=substr($digits,0,$base); 102 $digits=substr($digits,0,$base);
103 103
104 return (string)$digits; 104 return (string)$digits;
105} 105}
106 106
107//----------------------------------------------------------------------------- 107//-----------------------------------------------------------------------------
108 108
109function clipperz_hash($value) { 109function clipperz_hash($value) {
110 return hash("sha256", hash("sha256", $value, true)); 110 return hash("sha256", hash("sha256", $value, true));
111} 111}
112 112
113//----------------------------------------------------------------------------- 113//-----------------------------------------------------------------------------
114 114
115function clipperz_randomSeed() { 115function clipperz_randomSeed() {
116 $result; 116 $result;
117 117
118 srand((double) microtime()*1000000); 118 srand((double) microtime()*1000000);
119 $result = ""; 119 $result = "";
120 120
121 while(strlen($result) < 64) { 121 while(strlen($result) < 64) {
122 $result = $result.dec2base(rand(), 16); 122 $result = $result.dec2base(rand(), 16);
123 } 123 }
124 124
125 $result = substr($result, 0, 64); 125 $result = substr($result, 0, 64);
126 126
127 return $result; 127 return $result;
128} 128}
129 129
130//----------------------------------------------------------------------------- 130//-----------------------------------------------------------------------------
131 131
132function updateUserCredentials($parameters, &$user) { 132function updateUserCredentials($parameters, &$user) {
133 $user->username = $parameters["C"]; 133 $user->username = $parameters["C"];
134 $user->srp_s = $parameters["s"]; 134 $user->srp_s = $parameters["s"];
135 $user->srp_v = $parameters["v"]; 135 $user->srp_v = $parameters["v"];
136 $user->auth_version =$parameters["version"]; 136 $user->auth_version =$parameters["version"];
137} 137}
138 138
139function updateUserData($parameters, &$user) { 139function updateUserData($parameters, &$user) {
140 $user->header = $parameters["header"]; 140 $user->header = $parameters["header"];
141 $user->statistics =$parameters["statistics"]; 141 $user->statistics =$parameters["statistics"];
142 $user->version =$parameters["version"]; 142 $user->version =$parameters["version"];
143 $user->lock = $parameters["lock"]; 143 if (array_key_exists("lock", $parameters)) {
144 $user->lock = $parameters["lock"];
145 }
144} 146}
145 147
146function updateRecordData($parameters, &$record, &$recordVersion) { 148function updateRecordData($parameters, &$record, &$recordVersion) {
147 $recordData = $parameters["record"]; 149 $recordData = $parameters["record"];
148 $record->reference =$recordData["reference"]; 150 $record->reference =$recordData["reference"];
149 $record->data = $recordData["data"]; 151 $record->data = $recordData["data"];
150 $record->version = $recordData["version"]; 152 $record->version = $recordData["version"];
151 153
152 $recordVersionData = $parameters["currentRecordVersion"]; 154 $recordVersionData = $parameters["currentRecordVersion"];
153 $recordVersion->reference = $recordVersionData ["reference"]; 155 $recordVersion->reference = $recordVersionData ["reference"];
154 $recordVersion->data = $recordVersionData ["data"]; 156 $recordVersion->data = $recordVersionData ["data"];
155 $recordVersion->version = $recordVersionData ["version"]; 157 $recordVersion->version = $recordVersionData ["version"];
156 $recordVersion->previous_version_id =$recordVersionData ["previousVersion"]; 158 if (array_key_exists("previousVersion", $recordVersionData)) {
159 $recordVersion->previous_version_id =$recordVersionData ["previousVersion"];
160 }
157 $recordVersion->previous_version_key =$recordVersionData ["previousVersionKey"]; 161 $recordVersion->previous_version_key =$recordVersionData ["previousVersionKey"];
158} 162}
159 163
160//----------------------------------------------------------------------------- 164//-----------------------------------------------------------------------------
161 165
162function updateOTPStatus(&$otp, $status) { 166function updateOTPStatus(&$otp, $status) {
163 $otpStatus = new onetimepasswordstatus(); 167 $otpStatus = new onetimepasswordstatus();
164 $selectedStatuses = $otpStatus->GetList(array(array("code", "=", $status))); 168 $selectedStatuses = $otpStatus->GetList(array(array("code", "=", $status)));
165 $otpStatus = $selectedStatuses[0]; 169 $otpStatus = $selectedStatuses[0];
166 $otp->SetOnetimepasswordstatus($otpStatus); 170 $otp->SetOnetimepasswordstatus($otpStatus);
167} 171}
168 172
169function updateOTP($parameters, &$otp, $status) { 173function updateOTP($parameters, &$otp, $status) {
170 $otp->reference = $parameters["reference"]; 174 $otp->reference = $parameters["reference"];
171 $otp->key = $parameters["key"]; 175 $otp->key = $parameters["key"];
172 $otp->key_checksum= $parameters["keyChecksum"]; 176 $otp->key_checksum= $parameters["keyChecksum"];
173 $otp->data = $parameters["data"]; 177 $otp->data = $parameters["data"];
174 $otp->version = $parameters["version"]; 178 $otp->version = $parameters["version"];
175 179
176 updateOTPStatus($otp, $status); 180 updateOTPStatus($otp, $status);
177} 181}
178 182
179function resetOTP(&$otp, $status) { 183function resetOTP(&$otp, $status) {
180 $otp->data = ""; 184 $otp->data = "";
181 updateOTPStatus($otp, $status); 185 updateOTPStatus($otp, $status);
182 $otp->Save(); 186 $otp->Save();
183} 187}
184 188
185//----------------------------------------------------------------------------- 189//-----------------------------------------------------------------------------
186 190
187function fixOTPStatusTable() { 191function fixOTPStatusTable() {
188 $otpStatus = new onetimepasswordstatus(); 192 $otpStatus = new onetimepasswordstatus();
189 $otpStatusList = $otpStatus->GetList(); 193 $otpStatusList = $otpStatus->GetList();
190 if (count($otpStatusList) != 4) { 194 if (count($otpStatusList) != 4) {
191 $otpStatus->DeleteList(); 195 $otpStatus->DeleteList();
192 196
193 $otpStatus->code = "ACTIVE"; $otpStatus->name = "Active"; $otpStatus->description = "Active"; $otpStatus->SaveNew(); 197 $otpStatus->code = "ACTIVE"; $otpStatus->name = "Active"; $otpStatus->description = "Active"; $otpStatus->SaveNew();
194 $otpStatus->code = "REQUESTED"; $otpStatus->name = "Requested"; $otpStatus->description = "Requested";$otpStatus->SaveNew(); 198 $otpStatus->code = "REQUESTED"; $otpStatus->name = "Requested"; $otpStatus->description = "Requested";$otpStatus->SaveNew();
195 $otpStatus->code = "USED"; $otpStatus->name = "Used"; $otpStatus->description = "Used"; $otpStatus->SaveNew(); 199 $otpStatus->code = "USED"; $otpStatus->name = "Used"; $otpStatus->description = "Used"; $otpStatus->SaveNew();
196 $otpStatus->code = "DISABLED"; $otpStatus->name = "Disabled"; $otpStatus->description = "Disabled";$otpStatus->SaveNew(); 200 $otpStatus->code = "DISABLED"; $otpStatus->name = "Disabled"; $otpStatus->description = "Disabled";$otpStatus->SaveNew();
197 } 201 }
198} 202}
199 203
200//----------------------------------------------------------------------------- 204//-----------------------------------------------------------------------------
201 205
202function arrayContainsValue($array, $value) { 206function arrayContainsValue($array, $value) {
203 $object = NULL; 207 $object = NULL;
204 for ($i=0; $i<count($array); $i++) { 208 for ($i=0; $i<count($array); $i++) {
205 if ($array[$i] == $value) { 209 if ($array[$i] == $value) {
206 $object = $value; 210 $object = $value;
207 } 211 }
208 } 212 }
209 213
210 return !is_null($object); 214 return !is_null($object);
211} 215}
212 216
213//----------------------------------------------------------------------------- 217//-----------------------------------------------------------------------------
214 218
215 $result = Array(); 219 $result = Array();
216 220
217 session_start(); 221 session_start();
218 222
219 $method = $_POST['method']; 223 $method = $_POST['method'];
220 224
221 if (get_magic_quotes_gpc()) { 225 if (get_magic_quotes_gpc()) {
222 $parameters = json_decode(stripslashes($_POST['parameters']), true); 226 $parameters = json_decode(stripslashes($_POST['parameters']), true);
223 } else { 227 } else {
224 $parameters = json_decode($_POST['parameters'], true); 228 $parameters = json_decode($_POST['parameters'], true);
225 } 229 }
226 230
227 $parameters = $parameters["parameters"]; 231 $parameters = $parameters["parameters"];
228 232
229 switch($method) { 233 switch($method) {
230 case "registration": 234 case "registration":
231error_log("registration"); 235error_log("registration");
232 $message = $parameters["message"]; 236 $message = $parameters["message"];
233 237
234 if ($message == "completeRegistration") { 238 if ($message == "completeRegistration") {
235 $user = new user(); 239 $user = new user();
236 240
237 updateUserCredentials($parameters["credentials"], $user); 241 updateUserCredentials($parameters["credentials"], $user);
238 updateUserData($parameters["user"], $user); 242 updateUserData($parameters["user"], $user);
239 $user->Save(); 243 $user->Save();
240 244
241 $result["lock"] = $user->lock; 245 $result["lock"] = $user->lock;
242 $result["result"] = "done"; 246 $result["result"] = "done";
243 } 247 }
244 break; 248 break;
245 249
246 case "handshake": 250 case "handshake":
247error_log("handshake"); 251error_log("handshake");
248 $srp_g = "2"; 252 $srp_g = "2";
249 $srp_n = base2dec("115b8b692e0e045692cf280b436735c77a5a9e8a9e7ed56c965f87db5b2a2ece3", 16); 253 $srp_n = base2dec("115b8b692e0e045692cf280b436735c77a5a9e8a9e7ed56c965f87db5b2a2ece3", 16);
250 254
251 $message = $parameters["message"]; 255 $message = $parameters["message"];
252 256
253 //============================================================= 257 //=============================================================
254 if ($message == "connect") { 258 if ($message == "connect") {
255 $user= new user(); 259 $user= new user();
256 $_SESSION["C"] = $parameters["parameters"]["C"]; 260 $_SESSION["C"] = $parameters["parameters"]["C"];
257 $_SESSION["A"] = $parameters["parameters"]["A"]; 261 $_SESSION["A"] = $parameters["parameters"]["A"];
258 262
259 $userList = $user->GetList(array(array("username", "=", $_SESSION["C"]))); 263 $userList = $user->GetList(array(array("username", "=", $_SESSION["C"])));
260 264
261 if (count($userList) == 1) { 265 if (count($userList) == 1) {
262 $currentUser = $userList[ 0 ]; 266 $currentUser = $userList[ 0 ];
263 267
264 if (array_key_exists("otpId", $_SESSION)) { 268 if (array_key_exists("otpId", $_SESSION)) {
265 $otp = new onetimepassword(); 269 $otp = new onetimepassword();
266 $otp = $otp->Get($_SESSION["otpId"]); 270 $otp = $otp->Get($_SESSION["otpId"]);
267 271
268 if ($otp->GetUser()->userId != $currentUser->userId) { 272 if ($otp->GetUser()->userId != $currentUser->userId) {
269 throw new Exception("User missmatch between the current session and 'One Time Password' user"); 273 throw new Exception("User missmatch between the current session and 'One Time Password' user");
270 } else if ($otp->GetOnetimepasswordstatus()->code != "REQUESTED") { 274 } else if ($otp->GetOnetimepasswordstatus()->code != "REQUESTED") {
271 throw new Exception("Tring to use an 'One Time Password' in the wrong state"); 275 throw new Exception("Tring to use an 'One Time Password' in the wrong state");
272 } 276 }
273 277
274 resetOTP($otp, "USED"); 278 resetOTP($otp, "USED");
275 $result["oneTimePassword"] = $otp->reference; 279 $result["oneTimePassword"] = $otp->reference;
276 } 280 }
277 281
278 $_SESSION["s"] = $currentUser->srp_s; 282 $_SESSION["s"] = $currentUser->srp_s;
279 $_SESSION["v"] = $currentUser->srp_v; 283 $_SESSION["v"] = $currentUser->srp_v;
280 $_SESSION["userId"] = $currentUser->userId; 284 $_SESSION["userId"] = $currentUser->userId;
281 } else { 285 } else {
282 $_SESSION["s"] = "112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00"; 286 $_SESSION["s"] = "112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00";
283 $_SESSION["v"] = "112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00"; 287 $_SESSION["v"] = "112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00";
284 } 288 }
285 289
286 $_SESSION["b"] = clipperz_randomSeed(); 290 $_SESSION["b"] = clipperz_randomSeed();
287 // $_SESSION["b"] = "5761e6c84d22ea3c5649de01702d60f674ccfe79238540eb34c61cd020230c53"; 291 // $_SESSION["b"] = "5761e6c84d22ea3c5649de01702d60f674ccfe79238540eb34c61cd020230c53";
288 $_SESSION["B"] = dec2base(bcadd(base2dec($_SESSION["v"], 16), bcpowmod($srp_g, base2dec($_SESSION["b"], 16), $srp_n)), 16); 292 $_SESSION["B"] = dec2base(bcadd(base2dec($_SESSION["v"], 16), bcpowmod($srp_g, base2dec($_SESSION["b"], 16), $srp_n)), 16);
289 293
290 $result["s"] = $_SESSION["s"]; 294 $result["s"] = $_SESSION["s"];
291 $result["B"] = $_SESSION["B"]; 295 $result["B"] = $_SESSION["B"];
292 296
293 //============================================================= 297 //=============================================================
294 } else if ($message == "credentialCheck") { 298 } else if ($message == "credentialCheck") {
295error_log("credentialCheck"); 299error_log("credentialCheck");
296 $u = clipperz_hash(base2dec($_SESSION["B"],16)); 300 $u = clipperz_hash(base2dec($_SESSION["B"],16));
297 $A = base2dec($_SESSION["A"], 16); 301 $A = base2dec($_SESSION["A"], 16);
298 $S = bcpowmod(bcmul($A, bcpowmod(base2dec($_SESSION["v"], 16), base2dec($u, 16), $srp_n)), base2dec($_SESSION["b"], 16), $srp_n); 302 $S = bcpowmod(bcmul($A, bcpowmod(base2dec($_SESSION["v"], 16), base2dec($u, 16), $srp_n)), base2dec($_SESSION["b"], 16), $srp_n);
299 $K = clipperz_hash($S); 303 $K = clipperz_hash($S);
300 $M1 = clipperz_hash($A.base2dec($_SESSION["B"],16).$K); 304 $M1 = clipperz_hash($A.base2dec($_SESSION["B"],16).$K);
301 305
302//$result["B"] = $_SESSION["B"]; 306//$result["B"] = $_SESSION["B"];
303//$result["u"] = $u; 307//$result["u"] = $u;
304//$result["A"] = $A; 308//$result["A"] = $A;
305//$result["S"] = $S; 309//$result["S"] = $S;
306//$result["K"] = $K; 310//$result["K"] = $K;
307//$result["M1"] = $M1; 311//$result["M1"] = $M1;
308//$result["_M1"] = $parameters["parameters"]["M1"]; 312//$result["_M1"] = $parameters["parameters"]["M1"];
309 313
310 if ($M1 == $parameters["parameters"]["M1"]) { 314 if ($M1 == $parameters["parameters"]["M1"]) {
311 $_SESSION["K"] = $K; 315 $_SESSION["K"] = $K;
312 $M2 = clipperz_hash($A.$M1.$K); 316 $M2 = clipperz_hash($A.$M1.$K);
313 317
314 $result["M2"] = $M2; 318 $result["M2"] = $M2;
315 $result["connectionId"] = ""; 319 $result["connectionId"] = "";
316 $result["loginInfo"] = array(); 320 $result["loginInfo"] = array();
317 $result["loginInfo"]["latest"] = array(); 321 $result["loginInfo"]["latest"] = array();
318 $result["loginInfo"]["current"] = array(); 322 $result["loginInfo"]["current"] = array();
319 $result["offlineCopyNeeded"] = "false"; 323 $result["offlineCopyNeeded"] = "false";
320 $result["lock"] = "----"; 324 $result["lock"] = "----";
321 } else { 325 } else {
322 $result["error"] = "?"; 326 $result["error"] = "?";
323 } 327 }
324 //============================================================= 328 //=============================================================
325 } else if ($message == "oneTimePassword") { 329 } else if ($message == "oneTimePassword") {
326error_log("oneTimePassword"); 330error_log("oneTimePassword");
327//{ 331//{
328 //"message":"oneTimePassword", 332 //"message":"oneTimePassword",
329 //"version":"0.2", 333 //"version":"0.2",
330 //"parameters":{ 334 //"parameters":{
331 // "oneTimePasswordKey":"06dfa7f428081f8b2af98b0895e14e18af90b0ef2ff32828e55cc2ac6b24d29b", 335 // "oneTimePasswordKey":"06dfa7f428081f8b2af98b0895e14e18af90b0ef2ff32828e55cc2ac6b24d29b",
332 // "oneTimePasswordKeyChecksum":"60bcba3f72e56f6bb3f0ff88509b9a0e5ec730dfa71daa4c1e892dbd1b0c360d" 336 // "oneTimePasswordKeyChecksum":"60bcba3f72e56f6bb3f0ff88509b9a0e5ec730dfa71daa4c1e892dbd1b0c360d"
333 //} 337 //}
334//} 338//}
335 $otp = new onetimepassword(); 339 $otp = new onetimepassword();
336 $otpList = $otp->GetList(array(array("key", "=", $parameters["parameters"]["oneTimePasswordKey"]))); 340 $otpList = $otp->GetList(array(array("key", "=", $parameters["parameters"]["oneTimePasswordKey"])));
337 341
338 if (count($otpList) == 1) { 342 if (count($otpList) == 1) {
339 $currentOtp = $otpList[0]; 343 $currentOtp = $otpList[0];
340 344
341 if ($currentOtp->GetOnetimepasswordstatus()->code == "ACTIVE") { 345 if ($currentOtp->GetOnetimepasswordstatus()->code == "ACTIVE") {
342 if ($currentOtp->key_checksum == $parameters["parameters"]["oneTimePasswordKeyChecksum"]) { 346 if ($currentOtp->key_checksum == $parameters["parameters"]["oneTimePasswordKeyChecksum"]) {
343 $_SESSION["userId"] = $currentOtp->GetUser()->userId; 347 $_SESSION["userId"] = $currentOtp->GetUser()->userId;
344 $_SESSION["otpId"]= $currentOtp->onetimepasswordId; 348 $_SESSION["otpId"]= $currentOtp->onetimepasswordId;
345 349
346 $result["data"] = $currentOtp->data; 350 $result["data"] = $currentOtp->data;
347 $result["version"] = $currentOtp->version; 351 $result["version"] = $currentOtp->version;
348 352
349 resetOTP($currentOtp, "REQUESTED"); 353 resetOTP($currentOtp, "REQUESTED");
350 } else { 354 } else {
351 resetOTP($currentOtp, "DISABLED"); 355 resetOTP($currentOtp, "DISABLED");
352 throw new Exception("The requested One Time Password has been disabled, due to a wrong keyChecksum"); 356 throw new Exception("The requested One Time Password has been disabled, due to a wrong keyChecksum");
353 } 357 }
354 } else { 358 } else {
355 throw new Exception("The requested One Time Password was not active"); 359 throw new Exception("The requested One Time Password was not active");
356 } 360 }
357 } else { 361 } else {
358 throw new Exception("The requested One Time Password has not been found"); 362 throw new Exception("The requested One Time Password has not been found");
359 } 363 }
360 364
361 //============================================================= 365 //=============================================================
362 } 366 }
363 367
364 break; 368 break;
365 369
366 case "message": 370 case "message":
367error_log("message"); 371error_log("message");
372//error_log("message: ".json_encode($parameters));
368 if ($parameters["srpSharedSecret"] == $_SESSION["K"]) { 373 if ($parameters["srpSharedSecret"] == $_SESSION["K"]) {
369 $message = $parameters["message"]; 374 $message = $parameters["message"];
370 375
371 //============================================================= 376 //=============================================================
372 if ($message == "getUserDetails") { 377 if ($message == "getUserDetails") {
373//{"message":"getUserDetails", "srpSharedSecret":"f18e5cf7c3a83b67d4db9444af813ee48c13daf4f8f6635397d593e52ba89a08", "parameters":{}} 378//{"message":"getUserDetails", "srpSharedSecret":"f18e5cf7c3a83b67d4db9444af813ee48c13daf4f8f6635397d593e52ba89a08", "parameters":{}}
374 $user = new user(); 379 $user = new user();
375 $user = $user->Get($_SESSION["userId"]); 380 $user = $user->Get($_SESSION["userId"]);
376 381
377 $result["header"] = $user->header; 382 $result["header"] = $user->header;
378 383
379 $records = $user->GetRecordList(); 384 $records = $user->GetRecordList();
380 foreach ($records as $record) { 385 foreach ($records as $record) {
381 $recordStats["updateDate"] = $record->update_date; 386 $recordStats["updateDate"] = $record->update_date;
382 $recordsStats[$record->reference] = $recordStats; 387 $recordsStats[$record->reference] = $recordStats;
383 } 388 }
384 $result["recordsStats"] = $recordsStats; 389 $result["recordsStats"] = $recordsStats;
385 390
386 $result["statistics"] =$user->statistics; 391 $result["statistics"] =$user->statistics;
387 $result["version"] =$user->version; 392 $result["version"] =$user->version;
388 393
389 //============================================================= 394 //=============================================================
390 } else if ($message == "addNewRecords") { 395 } else if ($message == "addNewRecords") {
391/* 396/*
392//{ 397//{
393 //"message":"addNewRecords", 398 //"message":"addNewRecords",
394 //"srpSharedSecret":"b58fdf62acebbcb67f63d28c0437f166069f45690c648cd4376a792ae7a325f7", 399 //"srpSharedSecret":"b58fdf62acebbcb67f63d28c0437f166069f45690c648cd4376a792ae7a325f7",
395 //"parameters":{ 400 //"parameters":{
396 // "records":[ 401 // "records":[
397 // { 402 // {
398 // "record":{ 403 // "record":{
399 // "reference":"fda703707fee1fff42443124cd0e705f5bea0ac601758d81b2e832705339a610", 404 // "reference":"fda703707fee1fff42443124cd0e705f5bea0ac601758d81b2e832705339a610",
400 // "data":"OBSGtcb6blXq/xaYG.....4EqlQqgAvITN", 405 // "data":"OBSGtcb6blXq/xaYG.....4EqlQqgAvITN",
401 // "version":"0.3" 406 // "version":"0.3"
402 // }, 407 // },
403 // "currentRecordVersion":{ 408 // "currentRecordVersion":{
404 // "reference":"83ad301525c18f2afd72b6ac82c0a713382e1ef70ac69935ca7e2869dd4ff980", 409 // "reference":"83ad301525c18f2afd72b6ac82c0a713382e1ef70ac69935ca7e2869dd4ff980",
405 // "recordReference":"fda703707fee1fff42443124cd0e705f5bea0ac601758d81b2e832705339a610", 410 // "recordReference":"fda703707fee1fff42443124cd0e705f5bea0ac601758d81b2e832705339a610",
406 // "data":"NXJ5jiZhkd0CMiwwntAq....1TjjF+SGfE=", 411 // "data":"NXJ5jiZhkd0CMiwwntAq....1TjjF+SGfE=",
407 // "version":"0.3", 412 // "version":"0.3",
408 // "previousVersion":"3e174a86afc322271d8af28bc062b0f1bfd7344fad01212cd08b2757c4b199c4", 413 // "previousVersion":"3e174a86afc322271d8af28bc062b0f1bfd7344fad01212cd08b2757c4b199c4",
409 // "previousVersionKey":"kozaaGCzXWr71LbOKu6Z3nz520V..5U85tSBvb+u44twttv54Kw==" 414 // "previousVersionKey":"kozaaGCzXWr71LbOKu6Z3nz520V..5U85tSBvb+u44twttv54Kw=="
410 // } 415 // }
411 // } 416 // }
412 // ], 417 // ],
413 // "user":{ 418 // "user":{
414 // "header":"{\"reco...ersion\":\"0.1\"}", 419 // "header":"{\"reco...ersion\":\"0.1\"}",
415 // "statistics":"rKI6nR6iqggygQJ3SQ58bFUX", 420 // "statistics":"rKI6nR6iqggygQJ3SQ58bFUX",
416 // "version":"0.3", 421 // "version":"0.3",
417 // "lock":"----" 422 // "lock":"----"
418 // } 423 // }
419 //} 424 //}
420//} 425//}
421*/ 426*/
422 $user = new user(); 427 $user = new user();
423 $record = new record(); 428 $record = new record();
424 $recordVersion = new recordversion(); 429 $recordVersion = new recordversion();
425 430
426 $user = $user->Get($_SESSION["userId"]); 431 $user = $user->Get($_SESSION["userId"]);
427 updateUserData($parameters["parameters"]["user"], $user); 432 updateUserData($parameters["parameters"]["user"], $user);
428 433
429 $recordParameterList = $parameters["parameters"]["records"]; 434 $recordParameterList = $parameters["parameters"]["records"];
430 $c = count($recordParameterList); 435 $c = count($recordParameterList);
431 for ($i=0; $i<$c; $i++) { 436 for ($i=0; $i<$c; $i++) {
432 updateRecordData($recordParameterList[$i], $record, $recordVersion); 437 updateRecordData($recordParameterList[$i], $record, $recordVersion);
433 438
434 $record->SaveNew(); 439 $record->SaveNew();
435 $recordVersion->SaveNew(); 440 $recordVersion->SaveNew();
436 441
437 $record->AddRecordversion($recordVersion); 442 $record->AddRecordversion($recordVersion);
438 $user->AddRecord($record); 443 $user->AddRecord($record);
439 444
440 $record->Save(); 445 $record->Save();
441 $recordVersion->Save(); 446 $recordVersion->Save();
442 } 447 }
443 448
444 $user->Save(); 449 $user->Save();
445 450
446 $result["lock"] = $user->lock; 451 $result["lock"] = $user->lock;
447 $result["result"] = "done"; 452 $result["result"] = "done";
448 453
449 //============================================================= 454 //=============================================================
455 } else if ($message == "saveChanges") {
456
457//{
458// "message":"saveChanges",
459// "srpSharedSecret":"edc78508907c942173818f7247fa64869ba80672a7aa8d27b8fa6bfe524fb9c8",
460// "parameters":{
461// "records":{
462// "updated":[
463// {
464// "currentRecordVersion":{
465// "previousVersionKey":"####",
466// "reference":"08c8eb7ec528fbf987bbfb84fe2e960cf9ae937b19fbb5f05d8d90a7039fac6a",
467// "data":"WYQ16AjodjsmyZDXa4MKxOju0F…beD/zXlbVb0Zj0ZI/N55bZ",
468// "version":"0.3"
469// },
470// "record":{
471// "reference":"83de5304f60a808e48a815c6203d7d3f24874d3f40faba420bbc60b376fcc356",
472// "data":"B6uBuBE Aly0knvgrUppodDTGZQC…guizL9QvHCWyM bQQBGBVvHZ6LfA==",
473// "version":"0.3"
474// }
475// }
476// ],
477// "deleted":[
478//
479// ]
480// },
481// "user":{
482// "header":"{\"rec…sion\":\"0.1\"}",
483// "statistics":"e6iXVEM4i8ZatPZFCCads/9F",
484// "version":"0.3"
485// }
486// }
487//}
488 $user = new user();
489 $user = $user->Get($_SESSION["userId"]);
490 updateUserData($parameters["parameters"]["user"], $user);
491
492 $recordToUpdateParameterList = $parameters["parameters"]["records"]["updated"];
493 $c = count($recordToUpdateParameterList);
494 for ($i=0; $i<$c; $i++) {
495 $recordList = $user->GetRecordList(array(array("reference", "=", $recordToUpdateParameterList [$i]["record"]["reference"])));
496 if (count($recordList) == 0) {
497 $currentRecord = new record();
498 $currentVersion = new recordversion();
499 $isNewRecord = true;
500 } else {
501 $currentRecord = $recordList[0];
502 $currentRecordVersions = $currentRecord->GetRecordversionList();
503 $currentVersion = $currentRecordVersions[0];
504 $isNewRecord = false;
505 }
506
507 updateRecordData($recordToUpdateParameterList[$i], $currentRecord, $currentVersion);
508
509 if ($isNewRecord == true) {
510 $currentRecord->SaveNew();
511 $currentVersion->SaveNew();
512
513 $currentRecord->AddRecordversion($currentVersion);
514 $user->AddRecord($currentRecord);
515 }
516
517 $currentRecord->Save();
518 $currentVersion->Save();
519 }
520
521 $user->Save();
522
523 $recordToDeleteReferenceList = $parameters["parameters"]["records"]["deleted"];
524 $recordList = array();
525 $c = count($recordToDeleteReferenceList);
526 for ($i=0; $i<$c; $i++) {
527 array_push($recordList, array("reference", "=", $recordToDeleteReferenceList[$i]));
528 }
529
530 $record = new record();
531 $record->DeleteList($recordList, true);
532
533 $result["lock"] = $user->lock;
534 $result["result"] = "done";
535
536 //=============================================================
450 } else if ($message == "getRecordDetail") { 537 } else if ($message == "getRecordDetail") {
451//{ 538//{
452 //"message":"getRecordDetail", 539 //"message":"getRecordDetail",
453 //"srpSharedSecret":"4c00dcb66a9f2aea41a87e4707c526874e2eb29cc72d2c7086837e53d6bf2dfe", 540 //"srpSharedSecret":"4c00dcb66a9f2aea41a87e4707c526874e2eb29cc72d2c7086837e53d6bf2dfe",
454 //"parameters":{ 541 //"parameters":{
455 // "reference":"740009737139a189cfa2b1019a6271aaa39467b59e259706564b642ff3838d50" 542 // "reference":"740009737139a189cfa2b1019a6271aaa39467b59e259706564b642ff3838d50"
456 //} 543 //}
457//} 544//}
458// 545//
459 //result = { 546 //result = {
460 // currentVersion:{ 547 // currentVersion:{
461 // reference:"88943d709c3ea2442d4f58eaaec6409276037e5a37e0a6d167b9dad9e947e854", 548 // reference:"88943d709c3ea2442d4f58eaaec6409276037e5a37e0a6d167b9dad9e947e854",
462 // accessDate:"Wed, 13 February 2008 14:25:12 UTC", 549 // accessDate:"Wed, 13 February 2008 14:25:12 UTC",
463 // creationDate:"Tue, 17 April 2007 17:17:52 UTC", 550 // creationDate:"Tue, 17 April 2007 17:17:52 UTC",
464 // version:"0.2", 551 // version:"0.2",
465 // data:"xI3WXddQLFtL......EGyKnnAVik", 552 // data:"xI3WXddQLFtL......EGyKnnAVik",
466 // updateDate:"Tue, 17 April 2007 17:17:52 UTC", 553 // updateDate:"Tue, 17 April 2007 17:17:52 UTC",
467 // header:"####" 554 // header:"####"
468 // } 555 // }
469 // reference:"13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551", 556 // reference:"13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551",
470 // oldestUsedEncryptedVersion:"0.2", 557 // oldestUsedEncryptedVersion:"0.2",
471 // accessDate:"Wed, 13 February 2008 14:25:12 UTC", 558 // accessDate:"Wed, 13 February 2008 14:25:12 UTC",
472 // creationDate:"Wed, 14 March 2007 13:53:11 UTC", 559 // creationDate:"Wed, 14 March 2007 13:53:11 UTC",
473 // version:"0.2", 560 // version:"0.2",
474 // updatedDate:"Tue, 17 April 2007 17:17:52 UTC", 561 // updatedDate:"Tue, 17 April 2007 17:17:52 UTC",
475 // data:"0/BjzyY6jeh71h...pAw2++NEyylGhMC5C5f5m8pBApYziN84s4O3JQ3khW/1UttQl4=" 562 // data:"0/BjzyY6jeh71h...pAw2++NEyylGhMC5C5f5m8pBApYziN84s4O3JQ3khW/1UttQl4="
476 //} 563 //}
564
565
566 // #Actual result (causing error in /gamma)
567 //{
568 // "result" : {
569 // "currentVersion" : {
570 // "reference" : "cb05177f96a832062c6b936d24323cb74a64e2ef1d97ee026cd1003755af7495",
571 // "data" : "RAnoHmikp7RmiZ2WVyEMW+Ia",
572 // "header" : "",
573 // "version" : "0.3",
574 // "creationDate" : "0000-00-00 00:00:00",
575 // "updateDate" : "2011-10-09 19:49:11",
576 // "accessDate" : "2011-10-09 19:49:11"
577 // },
578 // "reference" : "b07e2afa2ba782b9f379649b36ded6de0452b43c27e6b887c7ce4f2a93f44346",
579 // "data" : "NtK1nkLUabbJQx5uO8ept...ZJ5dkJYYkyh3VQ==",
580 // "version" : "0.3",
581 // "creationDate" : "2011-10-09 19:49:11",
582 // "updateDate" : "Tue, 30 Nov 1999 00:00:00 +0000",
583 // "accessDate" : "0000-00-00 00:00:00",
584 // "oldestUsedEncryptedVersion" : "---"
585 // }
586 //}
587
588
589 // #Response from the online /gamma version
590 //{
591 // "result" : {
592 // "versions" : {
593 // "e2c193f017ad4f6babf51de59f7550a40596afc0c27373b6a360e426b5bc06de" : {
594 // "reference" : "e2c193f017ad4f6babf51de59f7550a40596afc0c27373b6a360e426b5bc06de",
595 // "data" : "s\/3ClggH4uCcf+BkIMqQ...+W0PVt\/MJ3t7s1g0g",
596 // "creationDate" : "Mon, 10 October 2011 14:42:42 UTC",
597 // "header" : "####",
598 // "updateDate" : "Mon, 10 October 2011 14:42:42 UTC",
599 // "previousVersion" : "a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463",
600 // "version" : "0.3",
601 // "accessDate" : "Mon, 10 October 2011 14:42:42 UTC",
602 // "previousVersionKey" : "####"
603 // },
604 // [...]
605 // "a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463" : {
606 // "reference" : "a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463",
607 // "accessDate" : "Mon, 10 October 2011 14:41:17 UTC",
608 // "creationDate" : "Mon, 27 October 2008 08:16:14 UTC",
609 // "version" : "0.3",
610 // "data" : "m3yhZu81UAjCY6U2Kn...IUCb9suV0fldGOg=",
611 // "updateDate" : "Mon, 27 October 2008 08:16:14 UTC",
612 // "header" : "####"
613 // }
614 // },
615 // "oldestUsedEncryptedVersion" : "0.2",
616 // "reference" : "36ec1a41118813ced3553534fa2607d781cba687768db305beed368a8e06e113",
617 // "data" : "frlUkTbaOWD9j2ROat...ruWioCK0Mss27oHjPg==",
618 // "creationDate" : "Wed, 14 March 2007 17:39:35 UTC",
619 // "version" : "0.3",
620 // "accessDate" : "Mon, 10 October 2011 14:45:12 UTC",
621 // "currentVersion" : "e2c193f017ad4f6babf51de59f7550a40596afc0c27373b6a360e426b5bc06de",
622 // "updatedDate" : "Mon, 10 October 2011 14:45:12 UTC"
623 // },
624 // "toll" : {
625 // "requestType" : "MESSAGE",
626 // "targetValue" : "a516c942a3792cc620775a41f8870a6c7b51796d9a94da978a75da6a52eb1e10",
627 // "cost" : 2
628 // }
629 // }
630
477 $record = new record(); 631 $record = new record();
478 632
479 $recordList = $record->GetList(array(array("reference", "=", $parameters["parameters"]["reference"]))); 633 $recordList = $record->GetList(array(array("reference", "=", $parameters["parameters"]["reference"])));
480 $currentRecord = $recordList[0]; 634 $currentRecord = $recordList[0];
481 $currentRecordVersions = $currentRecord->GetRecordversionList(); 635 $currentRecordVersions = $currentRecord->GetRecordversionList();
482 $currentVersion = $currentRecordVersions[0]; 636 $currentVersion = $currentRecordVersions[0];
483 637
484 $result["currentVersion"] = array(); 638 $result["versions"] = array();
485 $result["currentVersion"]["reference"] =$currentVersion->reference; 639 // foreach ($currentRecordVersions as $currentVersion) {
486 $result["currentVersion"]["data"] = $currentVersion->data; 640 $result["versions"][$currentVersion->reference] = array();
487 $result["currentVersion"]["header"] = $currentVersion->header; 641 $result["versions"][$currentVersion->reference]["reference"]= $currentVersion->reference;
488 $result["currentVersion"]["version"] = $currentVersion->version; 642 $result["versions"][$currentVersion->reference]["data"] = $currentVersion->data;
489 $result["currentVersion"]["creationDate"] =$currentVersion->creation_date; 643 $result["versions"][$currentVersion->reference]["header"] = $currentVersion->header;
490 $result["currentVersion"]["updateDate"] =$currentVersion->update_date; 644 $result["versions"][$currentVersion->reference]["version"] = $currentVersion->version;
491 $result["currentVersion"]["accessDate"] =$currentVersion->access_date; 645 $result["versions"][$currentVersion->reference]["creationDate"]= $currentVersion->creation_date;
646 $result["versions"][$currentVersion->reference]["updateDate"]= $currentVersion->update_date;
647 $result["versions"][$currentVersion->reference]["accessDate"]= $currentVersion->access_date;
648
649 // }
650 $result["currentVersion"] = $currentVersion->reference;
651 // $result["currentVersion"] = $currentRecord->currentVersion; //????
492 652
493 $result["reference"] = $currentRecord->reference; 653 $result["reference"] = $currentRecord->reference;
494 $result["data"] = $currentRecord->data; 654 $result["data"] = $currentRecord->data;
495 $result["version"] = $currentRecord->version; 655 $result["version"] = $currentRecord->version;
496 $result["creationDate"] =$currentRecord->creation_date; 656 $result["creationDate"] =$currentRecord->creation_date;
497 $result["updateDate"] = $currentRecord->update_date; 657 $result["updateDate"] = $currentRecord->update_date;
498 $result["accessDate"] = $currentRecord->access_date; 658 $result["accessDate"] = $currentRecord->access_date;
499 $result["oldestUsedEncryptedVersion"] ="---"; 659 $result["oldestUsedEncryptedVersion"] ="---";
500 660
501 //============================================================= 661 //=============================================================
502 } else if ($message == "updateData") { 662 } else if ($message == "updateData") {
503//{ 663//{
504 //"message":"updateData", 664 //"message":"updateData",
505 //"srpSharedSecret":"4e4aadb1d64513ec4dd42f5e8d5b2d4363de75e4424b6bcf178c9d6a246356c5", 665 //"srpSharedSecret":"4e4aadb1d64513ec4dd42f5e8d5b2d4363de75e4424b6bcf178c9d6a246356c5",
506 //"parameters":{ 666 //"parameters":{
507 // "records":[ 667 // "records":[
508 // { 668 // {
509 // "record":{ 669 // "record":{
510 // "reference":"740009737139a189cfa2b1019a6271aaa39467b59e259706564b642ff3838d50", 670 // "reference":"740009737139a189cfa2b1019a6271aaa39467b59e259706564b642ff3838d50",
511 // "data":"8hgR0Z+JDrUa812polDJ....JnZUKXNEqKI", 671 // "data":"8hgR0Z+JDrUa812polDJ....JnZUKXNEqKI",
512 // "version":"0.3" 672 // "version":"0.3"
513 // }, 673 // },
514 // "currentRecordVersion":{ 674 // "currentRecordVersion":{
515 // "reference":"b1d82aeb9a0c4f6584bea68ba80839f43dd6ede79791549e29a1860554b144ee", 675 // "reference":"b1d82aeb9a0c4f6584bea68ba80839f43dd6ede79791549e29a1860554b144ee",
516 // "recordReference":"740009737139a189cfa2b1019a6271aaa39467b59e259706564b642ff3838d50", 676 // "recordReference":"740009737139a189cfa2b1019a6271aaa39467b59e259706564b642ff3838d50",
517 // "data":"2d/UgKxxV+kBPV9GRUE.....VGonDoW0tqefxOJo=", 677 // "data":"2d/UgKxxV+kBPV9GRUE.....VGonDoW0tqefxOJo=",
518 // "version":"0.3", 678 // "version":"0.3",
519 // "previousVersion":"55904195249037394316d3be3f5e78f08073170103bf0e7ab49a911c159cb0be", 679 // "previousVersion":"55904195249037394316d3be3f5e78f08073170103bf0e7ab49a911c159cb0be",
520 // "previousVersionKey":"YWiaZeMIVHaIl96OWW+2e8....6d6nHbn6cr2NA/dbQRuC2w==" 680 // "previousVersionKey":"YWiaZeMIVHaIl96OWW+2e8....6d6nHbn6cr2NA/dbQRuC2w=="
521 // } 681 // }
522 // } 682 // }
523 // ], 683 // ],
524 // "user":{ 684 // "user":{
525 // "header":"{\"rec.....sion\":\"0.1\"}", 685 // "header":"{\"rec.....sion\":\"0.1\"}",
526 // "statistics":"tt3uU9hWBy8rNnMckgCnxMJh", 686 // "statistics":"tt3uU9hWBy8rNnMckgCnxMJh",
527 // "version":"0.3", 687 // "version":"0.3",
528 // "lock":"----" 688 // "lock":"----"
529 // } 689 // }
530 //} 690 //}
531//} 691//}
532 692
533 $user = new user(); 693 $user = new user();
534 $user = $user->Get($_SESSION["userId"]); 694 $user = $user->Get($_SESSION["userId"]);
535 updateUserData($parameters["parameters"]["user"], $user); 695 updateUserData($parameters["parameters"]["user"], $user);
536 $user->Save(); 696 $user->Save();
537 697
538 $recordParameterList = $parameters["parameters"]["records"]; 698 $recordParameterList = $parameters["parameters"]["records"];
539 $c = count($recordParameterList); 699 $c = count($recordParameterList);
540 for ($i=0; $i<$c; $i++) { 700 for ($i=0; $i<$c; $i++) {
541 $recordList = $user->GetRecordList(array(array("reference", "=", $recordParameterList[$i]["record"]["reference"]))); 701 $recordList = $user->GetRecordList(array(array("reference", "=", $recordParameterList[$i]["record"]["reference"])));
542 $currentRecord = $recordList[0]; 702 $currentRecord = $recordList[0];
543 $currentRecordVersions = $currentRecord->GetRecordversionList(); 703 $currentRecordVersions = $currentRecord->GetRecordversionList();
544 $currentVersion = $currentRecordVersions[0]; 704 $currentVersion = $currentRecordVersions[0];
545 705
546 updateRecordData($recordParameterList[$i], $currentRecord, $currentVersion); 706 updateRecordData($recordParameterList[$i], $currentRecord, $currentVersion);
547 707
548 708
549 $currentRecord->Save(); 709 $currentRecord->Save();
550 $currentVersion->Save(); 710 $currentVersion->Save();
551 } 711 }
552 712
553 713
554 $result["lock"] = $user->lock; 714 $result["lock"] = $user->lock;
555 $result["result"] = "done"; 715 $result["result"] = "done";
556 716
557 //============================================================= 717 //=============================================================
558 } else if ($message == "deleteRecords") { 718 } else if ($message == "deleteRecords") {
559//{ 719//{
560 //"message":"deleteRecords", 720 //"message":"deleteRecords",
561 //"srpSharedSecret":"4a64982f7ee366954ec50b9efea62a902a097ef111410c2aa7c4d5343bd1cdd1", 721 //"srpSharedSecret":"4a64982f7ee366954ec50b9efea62a902a097ef111410c2aa7c4d5343bd1cdd1",
562 //"parameters":{ 722 //"parameters":{
563 // "recordReferences":["46494c81d10b80ab190d41e6806ef63869cfcc7a0ab8fe98cc3f93de4729bb9a"], 723 // "recordReferences":["46494c81d10b80ab190d41e6806ef63869cfcc7a0ab8fe98cc3f93de4729bb9a"],
564 // "user":{ 724 // "user":{
565 // "header":"{\"rec...rsion\":\"0.1\"}", 725 // "header":"{\"rec...rsion\":\"0.1\"}",
566 // "statistics":"44kOOda0xYZjbcugJBdagBQx", 726 // "statistics":"44kOOda0xYZjbcugJBdagBQx",
567 // "version":"0.3", 727 // "version":"0.3",
568 // "lock":"----" 728 // "lock":"----"
569 // } 729 // }
570 //} 730 //}
571//} 731//}
572 $user = new user(); 732 $user = new user();
573 $user = $user->Get($_SESSION["userId"]); 733 $user = $user->Get($_SESSION["userId"]);
574 734
575 $recordReferenceList = $parameters["parameters"]["recordReferences"]; 735 $recordReferenceList = $parameters["parameters"]["recordReferences"];
576 $recordList = array(); 736 $recordList = array();
577 $c = count($recordReferenceList); 737 $c = count($recordReferenceList);
578 for ($i=0; $i<$c; $i++) { 738 for ($i=0; $i<$c; $i++) {
579 array_push($recordList, array("reference", "=", $recordReferenceList[$i])); 739 array_push($recordList, array("reference", "=", $recordReferenceList[$i]));
580 } 740 }
581 741
582 $record = new record(); 742 $record = new record();
583 $record->DeleteList($recordList, true); 743 $record->DeleteList($recordList, true);
584 744
585 updateUserData($parameters["parameters"]["user"], $user); 745 updateUserData($parameters["parameters"]["user"], $user);
586 $user->Save(); 746 $user->Save();
587 747
588 $result["recordList"] = $recordList; 748 $result["recordList"] = $recordList;
589 $result["lock"] = $user->lock; 749 $result["lock"] = $user->lock;
590 $result["result"] = "done"; 750 $result["result"] = "done";
591 751
592 //============================================================= 752 //=============================================================
593 } else if ($message == "deleteUser") { 753 } else if ($message == "deleteUser") {
594//{"message":"deleteUser", "srpSharedSecret":"e8e4ca6544dca49c95b3647d8358ad54c317048b74d2ac187ac25f719c9bac58", "parameters":{}} 754//{"message":"deleteUser", "srpSharedSecret":"e8e4ca6544dca49c95b3647d8358ad54c317048b74d2ac187ac25f719c9bac58", "parameters":{}}
595 $user = new user(); 755 $user = new user();
596 $user->Get($_SESSION["userId"]); 756 $user->Get($_SESSION["userId"]);
597 $user->Delete(true); 757 $user->Delete(true);
598 758
599 $result["result"] = "ok"; 759 $result["result"] = "ok";
600 760
601 //============================================================= 761 //=============================================================
602 } else if ($message == "addNewOneTimePassword") { 762 } else if ($message == "addNewOneTimePassword") {
603//{ 763//{
604 //"message":"addNewOneTimePassword", 764 //"message":"addNewOneTimePassword",
605 //"srpSharedSecret":"96fee4af06c09ce954fe7a9f87970e943449186bebf70bac0af1d6ebb818dabb", 765 //"srpSharedSecret":"96fee4af06c09ce954fe7a9f87970e943449186bebf70bac0af1d6ebb818dabb",
606 //"parameters":{ 766 //"parameters":{
607 // "user":{ 767 // "user":{
608 // "header":"{\"records\":{\"index\":{\"419ea6....rsion\":\"0.1\"}", 768 // "header":"{\"records\":{\"index\":{\"419ea6....rsion\":\"0.1\"}",
609 // "statistics":"rrlwNbDt83rpWT4S72upiVsC", 769 // "statistics":"rrlwNbDt83rpWT4S72upiVsC",
610 // "version":"0.3", 770 // "version":"0.3",
611 // "lock":"----" 771 // "lock":"----"
612 // }, 772 // },
613 // "oneTimePassword":{ 773 // "oneTimePassword":{
614 // "reference":"29e26f3a2aae61fe5cf58c45296c6df4f3dceafe067ea550b455be345f44123c", 774 // "reference":"29e26f3a2aae61fe5cf58c45296c6df4f3dceafe067ea550b455be345f44123c",
615 // "key":"afb848208758361a96a298b9db08995cf036011747809357a90645bc93fdfa03", 775 // "key":"afb848208758361a96a298b9db08995cf036011747809357a90645bc93fdfa03",
616 // "keyChecksum":"d1599ae443b5a566bfd93c0aeec4c81b42c0506ee09874dae050449580bb3486", 776 // "keyChecksum":"d1599ae443b5a566bfd93c0aeec4c81b42c0506ee09874dae050449580bb3486",
617 // "data":"hsyY8DHksgR52x6c4j7XAtIUeY.....dxsr3XWt7CbGg==", 777 // "data":"hsyY8DHksgR52x6c4j7XAtIUeY.....dxsr3XWt7CbGg==",
618 // "version":"0.3" 778 // "version":"0.3"
619 // } 779 // }
620 //} 780 //}
621//} 781//}
622 782
623 fixOTPStatusTable(); 783 fixOTPStatusTable();
624 784
625 $user = new user(); 785 $user = new user();
626 $user = $user->Get($_SESSION["userId"]); 786 $user = $user->Get($_SESSION["userId"]);
627 787
628 $otp = new onetimepassword(); 788 $otp = new onetimepassword();
629 updateOTP($parameters["parameters"]["oneTimePassword"], $otp, "ACTIVE"); 789 updateOTP($parameters["parameters"]["oneTimePassword"], $otp, "ACTIVE");
630 $user->AddOnetimepassword($otp); 790 $user->AddOnetimepassword($otp);
631 791
632 updateUserData($parameters["parameters"]["user"], $user); 792 updateUserData($parameters["parameters"]["user"], $user);
633 $user->Save(); 793 $user->Save();
634 794
635 $result["lock"] = $user->lock; 795 $result["lock"] = $user->lock;
636 $result["result"] = "done"; 796 $result["result"] = "done";
637 797
638 //============================================================= 798 //=============================================================
639 } else if ($message == "updateOneTimePasswords") { 799 } else if ($message == "updateOneTimePasswords") {
640//{ 800//{
641 //"message":"updateOneTimePasswords", 801 //"message":"updateOneTimePasswords",
642 //"srpSharedSecret":"c78f8ed099ea421f4dd0a4e02dbaf1f7da925f0088188d99399874ff064a3d27", 802 //"srpSharedSecret":"c78f8ed099ea421f4dd0a4e02dbaf1f7da925f0088188d99399874ff064a3d27",
643 //"parameters":{ 803 //"parameters":{
644 // "user":{ 804 // "user":{
645 // "header":"{\"reco...sion\":\"0.1\"}", 805 // "header":"{\"reco...sion\":\"0.1\"}",
646 // "statistics":"UeRq75RZHzDC7elzrh/+OB5d", 806 // "statistics":"UeRq75RZHzDC7elzrh/+OB5d",
647 // "version":"0.3", 807 // "version":"0.3",
648 // "lock":"----" 808 // "lock":"----"
649 // }, 809 // },
650 // "oneTimePasswords":["f5f44c232f239efe48ab81a6236deea1a840d52946f7d4d782dad52b4c5359ce"] 810 // "oneTimePasswords":["f5f44c232f239efe48ab81a6236deea1a840d52946f7d4d782dad52b4c5359ce"]
651 //} 811 //}
652//} 812//}
653 813
654 $user = new user(); 814 $user = new user();
655 $user = $user->Get($_SESSION["userId"]); 815 $user = $user->Get($_SESSION["userId"]);
656 816
657 $validOtpReferences = $parameters["parameters"]["oneTimePasswords"]; 817 $validOtpReferences = $parameters["parameters"]["oneTimePasswords"];
658 818
659 $otpList = $user->GetOnetimepasswordList(); 819 $otpList = $user->GetOnetimepasswordList();
660 $c = count($otpList); 820 $c = count($otpList);
661 for ($i=0; $i<$c; $i++) { 821 for ($i=0; $i<$c; $i++) {
662 $currentOtp = $otpList[$i]; 822 $currentOtp = $otpList[$i];
663 if (arrayContainsValue($validOtpReferences, $currentOtp->reference) == false) { 823 if (arrayContainsValue($validOtpReferences, $currentOtp->reference) == false) {
664 $currentOtp->Delete(); 824 $currentOtp->Delete();
665 } 825 }
666 } 826 }
667 827
668 updateUserData($parameters["parameters"]["user"], $user); 828 updateUserData($parameters["parameters"]["user"], $user);
669 $user->Save(); 829 $user->Save();
670 830
671 $result["result"] = $user->lock; 831 $result["result"] = $user->lock;
672 832
673 //============================================================= 833 //=============================================================
674 } else if ($message == "getOneTimePasswordsDetails") { 834 } else if ($message == "getOneTimePasswordsDetails") {
675 835
676 //============================================================= 836 //=============================================================
677 } else if ($message == "getLoginHistory") { 837 } else if ($message == "getLoginHistory") {
678 $result["result"] = array(); 838 $result["result"] = array();
679 839
680 //============================================================= 840 //=============================================================
681 } else if ($message == "upgradeUserCredentials") { 841 } else if ($message == "upgradeUserCredentials") {
682//{ 842//{
683 //"message":"upgradeUserCredentials", 843 //"message":"upgradeUserCredentials",
684 //"srpSharedSecret":"f1c25322e1478c8fb26063e9eef2f6fc25e0460065a31cb718f80bcff8f8a735", 844 //"srpSharedSecret":"f1c25322e1478c8fb26063e9eef2f6fc25e0460065a31cb718f80bcff8f8a735",
685 //"parameters":{ 845 //"parameters":{
686 // "user":{ 846 // "user":{
687 // "header":"{\"reco...sion\":\"0.1\"}", 847 // "header":"{\"reco...sion\":\"0.1\"}",
688 // "statistics":"s72Xva+w7CLgH+ihwqwXUbyu", 848 // "statistics":"s72Xva+w7CLgH+ihwqwXUbyu",
689 // "version":"0.3", 849 // "version":"0.3",
690 // "lock":"----" 850 // "lock":"----"
691 // }, 851 // },
692 // "credentials":{ 852 // "credentials":{
693 // "C":"57d15a8afbc1ae08103bd991d387ddfd8d26824276476fe709d754f098b6c26d", 853 // "C":"57d15a8afbc1ae08103bd991d387ddfd8d26824276476fe709d754f098b6c26d",
694 // "s":"d6735fc0486f391c4f3c947928f9e61a2418e7bed2bc9b25bb43f93acc52f636", 854 // "s":"d6735fc0486f391c4f3c947928f9e61a2418e7bed2bc9b25bb43f93acc52f636",
695 // "v":"540c2ebbf941a481b6b2c9026c07fb46e8202e4408ed96864a696deb622baece", 855 // "v":"540c2ebbf941a481b6b2c9026c07fb46e8202e4408ed96864a696deb622baece",
696 // "version":"0.2" 856 // "version":"0.2"
697 // }, 857 // },
698 // "oneTimePasswords":{ 858 // "oneTimePasswords":{
699 // "923cdc61c4b877b263236124c44d69b459d240453a461cce8ddf7518b423ca94": "1HD6Ta0xsifEDhDwE....9WDK6tvrS6w==", 859 // "923cdc61c4b877b263236124c44d69b459d240453a461cce8ddf7518b423ca94": "1HD6Ta0xsifEDhDwE....9WDK6tvrS6w==",
700 // "fb1573cb9497652a81688a099a524fb116e604c6fbc191cf33406eb8438efa5f": "CocN0cSxLmMRdgNF9....o3xhGUEY68Q==" 860 // "fb1573cb9497652a81688a099a524fb116e604c6fbc191cf33406eb8438efa5f": "CocN0cSxLmMRdgNF9....o3xhGUEY68Q=="
701 // } 861 // }
702 //} 862 //}
703//} 863//}
704 864
705 $user = new user(); 865 $user = new user();
706 $user->Get($_SESSION["userId"]); 866 $user->Get($_SESSION["userId"]);
707 867
708 $otp = new onetimepassword(); 868 $otp = new onetimepassword();
709 869
710 updateUserCredentials($parameters["parameters"]["credentials"], $user); 870 updateUserCredentials($parameters["parameters"]["credentials"], $user);
711 updateUserData($parameters["parameters"]["user"], $user); 871 updateUserData($parameters["parameters"]["user"], $user);
712 872
713 $otpList = $parameters["parameters"]["oneTimePasswords"]; 873 $otpList = $parameters["parameters"]["oneTimePasswords"];
714 foreach($otpList as $otpReference=>$otpData) { 874 foreach($otpList as $otpReference=>$otpData) {
715 $otpList = $otp->GetList(array(array("reference", "=", $otpReference))); 875 $otpList = $otp->GetList(array(array("reference", "=", $otpReference)));
716 $currentOtp = $otpList[0]; 876 $currentOtp = $otpList[0];
717 $currentOtp->data = $otpData; 877 $currentOtp->data = $otpData;
718 $currentOtp->Save(); 878 $currentOtp->Save();
719 } 879 }
720 880
721 $user->Save(); 881 $user->Save();
722 882
723 $result["lock"] = $user->lock; 883 $result["lock"] = $user->lock;
724 $result["result"] = "done"; 884 $result["result"] = "done";
725 885
726 //============================================================= 886 //=============================================================
727 } else if ($message == "echo") { 887 } else if ($message == "echo") {
728 $result["result"] = $parameters; 888 $result["result"] = $parameters;
729 } 889 }
730 890
731 //============================================================= 891 //=============================================================
732 } else if (isset($_SESSION['K'])) { 892 } else if (isset($_SESSION['K'])) {
733 $result["error"] = "Wrong shared secret!"; 893 $result["error"] = "Wrong shared secret!";
734 } else { 894 } else {
735 $result["result"] = "EXCEPTION"; 895 $result["result"] = "EXCEPTION";
736 $result["message"] = "Trying to communicate without an active connection"; 896 $result["message"] = "Trying to communicate without an active connection";
737 } 897 }
738 break; 898 break;
739 899
740 case "logout": 900 case "logout":
741error_log("logout"); 901error_log("logout");
742 session_destroy(); 902 session_destroy();
743 break; 903 break;
744 904
745 default: 905 default:
746error_log("default"); 906error_log("default");
747 $result["result"] = $parameters; 907 $result["result"] = $parameters;
748 break; 908 break;
749 } 909 }
750 910
751 session_write_close(); 911 session_write_close();
912
913 $finalResult = Array();
914 $finalResult["result"] = $result;
752 915
753 echo(json_encode($result)); 916 echo(json_encode($finalResult));
754error_log("result: ".json_encode($result)); 917error_log("result: ".json_encode($finalResult));
755?> 918?>
diff --git a/backend/python/properties/python.properties.json b/backend/python/properties/python.properties.json
index e69de29..128c98e 100644
--- a/backend/python/properties/python.properties.json
+++ b/backend/python/properties/python.properties.json
@@ -0,0 +1,8 @@
1{
2 "request.path": "clipperz.py",
3 "should.pay.toll": "false"
4
5 "development.settings": {
6 "url": "http://localhost/python/clipperz"
7 }
8} \ No newline at end of file
diff --git a/frontend/beta/html/index_template.html b/frontend/beta/html/index_template.html
index 9862518..27a8a64 100644
--- a/frontend/beta/html/index_template.html
+++ b/frontend/beta/html/index_template.html
@@ -1,100 +1,100 @@
1<html> 1<html>
2<head> 2<head>
3 <title>@page.title@</title> 3 <title>@page.title@</title>
4 <META http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4 <META http-equiv="Content-Type" content="text/html; charset=utf-8" />
5<!-- 5<!--
6@copyright@ 6@copyright@
7--> 7-->
8 8
9@css@ 9@css@
10 10
11 <link rel="shortcut icon" href="./clipperz.ico" /> 11 <link rel="shortcut icon" href="./clipperz.ico" />
12 12
13 <meta name="description" content="Login to your web accounts with just one click. Never type a password again! Use multiple complex passwords and forget them. A password manager that enhances your online security." /> 13 <meta name="description" content="Login to your web accounts with just one click. Never type a password again! Use multiple complex passwords and forget them. A password manager that enhances your online security." />
14 <meta name="keywords" content="password manager,gestor de contraseñas,gerenciador de senhas,Kennwortmanager,passwords,security,privacy,cryptography" /> 14 <meta name="keywords" content="password manager,gestor de contraseñas,gerenciador de senhas,Kennwortmanager,passwords,security,privacy,cryptography" />
15<script> 15<script>
16 Clipperz_IEisBroken = false; 16 Clipperz_IEisBroken = false;
17 Clipperz_normalizedNewLine = '\n'; 17 Clipperz_normalizedNewLine = '\n';
18 Clipperz_dumpUrl = "/dump/"; 18 Clipperz_dumpUrl = "/dump/";
19</script> 19</script>
20 20
21<!--[if IE]><script> 21<!--[if IE]><script>
22Clipperz_IEisBroken = true; 22Clipperz_IEisBroken = true;
23Clipperz_normalizedNewLine = '\x0d\x0a'; 23Clipperz_normalizedNewLine = '\x0d\x0a';
24</script><![endif]--> 24</script><![endif]-->
25 25
26@js_DEBUG@ 26@js_LINKED@
27 27
28</head> 28</head>
29<body> 29<body>
30<div id="mainDiv"> 30<div id="mainDiv">
31 <div id="header"> 31 <div id="header">
32 <div id="miscLinks"> 32 <div id="miscLinks">
33 <a id="donateHeaderIconLink" href="http://www.clipperz.com/donations" target="_blank"><img id='donateHeaderIcon' src=""></a> 33 <a id="donateHeaderIconLink" href="http://www.clipperz.com/donations" target="_blank"><img id='donateHeaderIcon' src=""></a>
34 <ul> 34 <ul>
35 <li><a href="http://www.clipperz.com/donations" id='donateHeaderLink' class='highlightedHeader' target="_blank">donate</a></li> 35 <li><a href="http://www.clipperz.com/donations" id='donateHeaderLink' class='highlightedHeader' target="_blank">donate</a></li>
36 <li><a href="http://www.clipperz.com/credits" id='creditsHeaderLink' target="_blank">credits</a></li> 36 <li><a href="http://www.clipperz.com/credits" id='creditsHeaderLink' target="_blank">credits</a></li>
37 <li><a href="http://www.clipperz.com/contact" id='feedbackHeaderLink' target="_blank">feedback</a></li> 37 <li><a href="http://www.clipperz.com/contact" id='feedbackHeaderLink' target="_blank">feedback</a></li>
38 <li><a href="http://www.clipperz.com/support/user_guide" target="_blank" id='helpHeaderLink'>help</a></li> 38 <li><a href="http://www.clipperz.com/support/user_guide" target="_blank" id='helpHeaderLink'>help</a></li>
39 <li><a href="http://www.clipperz.com/forum" target="_blank" id='forumHeaderLink'>forum</a></li> 39 <li><a href="http://www.clipperz.com/forum" target="_blank" id='forumHeaderLink'>forum</a></li>
40 </ul> 40 </ul>
41 </div> 41 </div>
42 <div id="logoFrame"> 42 <div id="logoFrame">
43 <a href="http://www.clipperz.com" target="_blank"><img id="logo" src="" /></a> 43 <a href="http://www.clipperz.com" target="_blank"><img id="logo" src="" /></a>
44 <h5 class="clipperzPayoff">keep it to yourself</h5> 44 <h5 class="clipperzPayoff">keep it to yourself</h5>
45 </div> 45 </div>
46 <div id="mainTabs"> 46 <div id="mainTabs">
47 <ul id="exitLinks"> 47 <ul id="exitLinks">
48 <li id="logoutLI"><!--<a href="#">logout</a>--></li> 48 <li id="logoutLI"><!--<a href="#">logout</a>--></li>
49 <li id="lockLI"><!--<a href="#">lock</a>--></li> 49 <li id="lockLI"><!--<a href="#">lock</a>--></li>
50 </ul> 50 </ul>
51 <div id="menus"> 51 <div id="menus">
52 <table cellpadding="0" cellspacing="0" border="0"> 52 <table cellpadding="0" cellspacing="0" border="0">
53 <tbody> 53 <tbody>
54 <tr id="menusTR"> 54 <tr id="menusTR">
55<!-- 55<!--
56 <td class="selected"><div><a href="#">records</a></div></td> 56 <td class="selected"><div><a href="#">records</a></div></td>
57 <td><div><a href="./Account.html">account</a></div></td> 57 <td><div><a href="./Account.html">account</a></div></td>
58 <td><div><a href="#">data</a></div></td> 58 <td><div><a href="#">data</a></div></td>
59 <td><div><a href="#">bookmarklet</a></div></td> 59 <td><div><a href="#">bookmarklet</a></div></td>
60--> 60-->
61 </tr> 61 </tr>
62 </tbody> 62 </tbody>
63 </table> 63 </table>
64 </div> 64 </div>
65 </div> 65 </div>
66 </div> 66 </div>
67 67
68 <div id="main"> 68 <div id="main">
69 <h3 class="loading">loading ...</h3> 69 <h3 class="loading">loading ...</h3>
70 70
71@js_INSTALL@ 71@js_EMBEDDED@
72 72
73<script> 73<script>
74 Clipperz.PM.Proxy.defaultProxy = new Clipperz.PM.Proxy.JSON({'url':'@request.path@', 'shouldPayTolls':@should.pay.toll@}); 74 Clipperz.PM.Proxy.defaultProxy = new Clipperz.PM.Proxy.JSON({'url':'@request.path@', 'shouldPayTolls':@should.pay.toll@});
75 /*offline_data_placeholder*/ 75 /*offline_data_placeholder*/
76</script> 76</script>
77 77
78 <div id="javaScriptAlert"> 78 <div id="javaScriptAlert">
79 <h1>Attention!</h1> 79 <h1>Attention!</h1>
80 <p>If you can read this message, the chances are that your browser does not properly support JavaScript? or you have disabled this functionality yourself.</p> 80 <p>If you can read this message, the chances are that your browser does not properly support JavaScript? or you have disabled this functionality yourself.</p>
81 <h3>Javascript is required to access Clipperz.</h3> 81 <h3>Javascript is required to access Clipperz.</h3>
82 <h5>Please enable scripting or upgrade your browser.</h5> 82 <h5>Please enable scripting or upgrade your browser.</h5>
83 </div> 83 </div>
84 </div> 84 </div>
85 <div id="footer"> 85 <div id="footer">
86 Copyright &copy; 2008 Clipperz Srl - 86 Copyright &copy; 2008 Clipperz Srl -
87 <a href="http://www.clipperz.com/terms_of_service" target="black">Terms of service</a> - 87 <a href="http://www.clipperz.com/terms_of_service" target="black">Terms of service</a> -
88 <a href="http://www.clipperz.com/privacy_policy" target="black">Privacy policy</a> 88 <a href="http://www.clipperz.com/privacy_policy" target="black">Privacy policy</a>
89 &nbsp;-&nbsp; 89 &nbsp;-&nbsp;
90 Application version: @application.version@ 90 Application version: @application.version@
91 </div> 91 </div>
92 92
93 <div id="recordDetailEditModeHeaderMask"></div> 93 <div id="recordDetailEditModeHeaderMask"></div>
94 <div id="recordDetailEditModeVerticalMask"></div> 94 <div id="recordDetailEditModeVerticalMask"></div>
95</div> 95</div>
96 96
97<div id="applicationVersionType" class="@application.version.type@" /> 97<div id="applicationVersionType" class="@application.version.type@" />
98 98
99</body> 99</body>
100</html> 100</html>
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/Record.js b/frontend/beta/js/Clipperz/PM/DataModel/Record.js
index 270f2ae..ffb45de 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/Record.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/Record.js
@@ -1,677 +1,682 @@
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);
282 this.processDataToExtractLegacyValues(someValues['data']); 283 this.processDataToExtractLegacyValues(someValues['data']);
283 284
284 if (typeof(someValues['data']['notes']) != 'undefined') { 285 if (typeof(someValues['data']['notes']) != 'undefined') {
285 this.setNotes(someValues['data']['notes']); 286 this.setNotes(someValues['data']['notes']);
286 } 287 }
288
287 if (someValues['data']['currentVersionKey'] != null) { 289 if (someValues['data']['currentVersionKey'] != null) {
288 this.setCurrentVersionKey(someValues['data']['currentVersionKey']); 290 this.setCurrentVersionKey(someValues['data']['currentVersionKey']);
289 } else { 291 } else {
290 this.setCurrentVersionKey(this.key()); 292 this.setCurrentVersionKey(this.key());
291 } 293 }
292 294
293 currentVersionParameters = someValues['currentVersion']; 295 // currentVersionParameters = someValues['currentVersion'];
296 currentVersionParameters = someValues['versions'][someValues['currentVersion']];
297console.log("Record.processData - this.currentVersionKey()", this.currentVersionKey());
298console.log("Record.processData - currentVersionParameters", currentVersionParameters);
294 currentVersionParameters['key'] = this.currentVersionKey(); 299 currentVersionParameters['key'] = this.currentVersionKey();
295 this.setCurrentVersion(new Clipperz.PM.DataModel.RecordVersion(this, currentVersionParameters)); 300 this.setCurrentVersion(new Clipperz.PM.DataModel.RecordVersion(this, currentVersionParameters));
296 301
297 if (someValues['data']['directLogins'] != null) { 302 if (someValues['data']['directLogins'] != null) {
298 vardirectLoginReference; 303 vardirectLoginReference;
299 304
300 for (directLoginReference in someValues['data']['directLogins']) { 305 for (directLoginReference in someValues['data']['directLogins']) {
301 var directLogin; 306 var directLogin;
302 var directLoginParameters; 307 var directLoginParameters;
303 308
304 directLoginParameters = someValues['data']['directLogins'][directLoginReference]; 309 directLoginParameters = someValues['data']['directLogins'][directLoginReference];
305 directLoginParameters.record = this; 310 directLoginParameters.record = this;
306 directLoginParameters.reference = directLoginReference; 311 directLoginParameters.reference = directLoginReference;
307 312
308 directLogin = new Clipperz.PM.DataModel.DirectLogin(directLoginParameters); 313 directLogin = new Clipperz.PM.DataModel.DirectLogin(directLoginParameters);
309 this.addDirectLogin(directLogin, true); 314 this.addDirectLogin(directLogin, true);
310 } 315 }
311 } 316 }
312 this.setShouldProcessData(false); 317 this.setShouldProcessData(false);
313 } 318 }
314 319
315 Clipperz.NotificationCenter.notify(this, 'recordDataReady'); 320 Clipperz.NotificationCenter.notify(this, 'recordDataReady');
316//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.processData"); 321//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.processData");
317//MochiKit.Logging.logDebug("<<< Record.processData"); 322//MochiKit.Logging.logDebug("<<< Record.processData");
318 323
319 return this; 324 return this;
320 }, 325 },
321 326
322 //------------------------------------------------------------------------- 327 //-------------------------------------------------------------------------
323 328
324 'processDataToExtractLegacyValues': function(someValues) { 329 'processDataToExtractLegacyValues': function(someValues) {
325//MochiKit.Logging.logDebug(">>> Record.processDataToExtractLegacyValues"); 330//MochiKit.Logging.logDebug(">>> Record.processDataToExtractLegacyValues");
326 if (someValues['data'] != null) { 331 if (someValues['data'] != null) {
327 this.setNotes(someValues['data']); 332 this.setNotes(someValues['data']);
328 } 333 }
329 334
330 if ( 335 if (
331 (typeof(someValues['loginFormData']) != "undefined") 336 (typeof(someValues['loginFormData']) != "undefined")
332 &&(typeof(someValues['loginBindings'] != "undefined")) 337 &&(typeof(someValues['loginBindings'] != "undefined"))
333 &&(someValues['loginFormData'] != "") 338 &&(someValues['loginFormData'] != "")
334 &&(someValues['loginBindings'] != "") 339 &&(someValues['loginBindings'] != "")
335 ) { 340 ) {
336 vardirectLogin; 341 vardirectLogin;
337 342
338 directLogin = new Clipperz.PM.DataModel.DirectLogin({ 343 directLogin = new Clipperz.PM.DataModel.DirectLogin({
339 record:this, 344 record:this,
340 label:this.label() + Clipperz.PM.Strings['newDirectLoginLabelSuffix'], 345 label:this.label() + Clipperz.PM.Strings['newDirectLoginLabelSuffix'],
341 reference:Clipperz.Crypto.SHA.sha256(new Clipperz.ByteArray(this.label() + 346 reference:Clipperz.Crypto.SHA.sha256(new Clipperz.ByteArray(this.label() +
342 someValues['loginFormData'] + 347 someValues['loginFormData'] +
343 someValues['loginBindings'])).toHexString().substring(2), 348 someValues['loginBindings'])).toHexString().substring(2),
344 formData:Clipperz.Base.evalJSON(someValues['loginFormData']), 349 formData:Clipperz.Base.evalJSON(someValues['loginFormData']),
345 legacyBindingData:Clipperz.Base.evalJSON(someValues['loginBindings']), 350 legacyBindingData:Clipperz.Base.evalJSON(someValues['loginBindings']),
346 bookmarkletVersion:'0.1' 351 bookmarkletVersion:'0.1'
347 }); 352 });
348 this.addDirectLogin(directLogin, true); 353 this.addDirectLogin(directLogin, true);
349 } 354 }
350//MochiKit.Logging.logDebug("<<< Record.processDataToExtractLegacyValues"); 355//MochiKit.Logging.logDebug("<<< Record.processDataToExtractLegacyValues");
351 }, 356 },
352 357
353 //------------------------------------------------------------------------- 358 //-------------------------------------------------------------------------
354 359
355 'getReadyBeforeUpdatingVersionValues': function() { 360 'getReadyBeforeUpdatingVersionValues': function() {
356 }, 361 },
357 362
358 //------------------------------------------------------------------------- 363 //-------------------------------------------------------------------------
359 364
360 'addNewField': function() { 365 'addNewField': function() {
361 varnewField; 366 varnewField;
362 367
363//MochiKit.Logging.logDebug(">>> Record.addNewField - " + this); 368//MochiKit.Logging.logDebug(">>> Record.addNewField - " + this);
364 this.getReadyBeforeUpdatingVersionValues(); 369 this.getReadyBeforeUpdatingVersionValues();
365 newField = this.currentVersion().addNewField(); 370 newField = this.currentVersion().addNewField();
366 Clipperz.NotificationCenter.notify(this, 'recordUpdated'); 371 Clipperz.NotificationCenter.notify(this, 'recordUpdated');
367//MochiKit.Logging.logDebug("<<< Record.addNewField"); 372//MochiKit.Logging.logDebug("<<< Record.addNewField");
368 373
369 return newField; 374 return newField;
370 }, 375 },
371 376
372 //------------------------------------------------------------------------- 377 //-------------------------------------------------------------------------
373 378
374 'removeField': function(aField) { 379 'removeField': function(aField) {
375 this.getReadyBeforeUpdatingVersionValues(); 380 this.getReadyBeforeUpdatingVersionValues();
376 this.currentVersion().removeField(aField); 381 this.currentVersion().removeField(aField);
377 Clipperz.NotificationCenter.notify(this, 'recordUpdated'); 382 Clipperz.NotificationCenter.notify(this, 'recordUpdated');
378 }, 383 },
379 384
380 'removeEmptyFields': function() { 385 'removeEmptyFields': function() {
381 MochiKit.Iter.forEach(MochiKit.Base.values(this.currentVersion().fields()), MochiKit.Base.bind(function(aField) { 386 MochiKit.Iter.forEach(MochiKit.Base.values(this.currentVersion().fields()), MochiKit.Base.bind(function(aField) {
382 if (aField.isEmpty()) { 387 if (aField.isEmpty()) {
383 this.removeField(aField); 388 this.removeField(aField);
384 // this.currentVersion().removeField(aField); 389 // this.currentVersion().removeField(aField);
385 } 390 }
386 }, this)); 391 }, this));
387 }, 392 },
388 393
389 //------------------------------------------------------------------------- 394 //-------------------------------------------------------------------------
390 395
391 'notes': function() { 396 'notes': function() {
392 return this._notes; 397 return this._notes;
393 }, 398 },
394 399
395 'setNotes': function(aValue) { 400 'setNotes': function(aValue) {
396 this._notes = aValue; 401 this._notes = aValue;
397 this.setHeaderNotes(null); 402 this.setHeaderNotes(null);
398 }, 403 },
399 404
400 //------------------------------------------------------------------------- 405 //-------------------------------------------------------------------------
401 406
402 'headerNotes': function() { 407 'headerNotes': function() {
403 return this._headerNotes; 408 return this._headerNotes;
404 }, 409 },
405 410
406 'setHeaderNotes': function(aValue) { 411 'setHeaderNotes': function(aValue) {
407 this._headerNotes = aValue; 412 this._headerNotes = aValue;
408 }, 413 },
409 414
410 //------------------------------------------------------------------------- 415 //-------------------------------------------------------------------------
411 416
412 'remove': function() { 417 'remove': function() {
413//MochiKit.Logging.logDebug(">>> Record.remove - " + this); 418//MochiKit.Logging.logDebug(">>> Record.remove - " + this);
414 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), MochiKit.Base.method(this, 'removeDirectLogin')); 419 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), MochiKit.Base.method(this, 'removeDirectLogin'));
415 420
416 this.syncDirectLoginReferenceValues(); 421 this.syncDirectLoginReferenceValues();
417 this.user().removeRecord(this); 422 this.user().removeRecord(this);
418//MochiKit.Logging.logDebug("<<< Record.remove"); 423//MochiKit.Logging.logDebug("<<< Record.remove");
419 }, 424 },
420 425
421 //------------------------------------------------------------------------- 426 //-------------------------------------------------------------------------
422 427
423 'directLogins': function() { 428 'directLogins': function() {
424 return this._directLogins; 429 return this._directLogins;
425 }, 430 },
426 431
427 'addDirectLogin': function(aDirectLogin, shouldUpdateUser) { 432 'addDirectLogin': function(aDirectLogin, shouldUpdateUser) {
428 this.directLogins()[aDirectLogin.reference()] = aDirectLogin; 433 this.directLogins()[aDirectLogin.reference()] = aDirectLogin;
429 if (shouldUpdateUser == true) { 434 if (shouldUpdateUser == true) {
430 this.user().addDirectLogin(aDirectLogin); 435 this.user().addDirectLogin(aDirectLogin);
431 } 436 }
432 }, 437 },
433 438
434 'removeDirectLogin': function(aDirectLogin) { 439 'removeDirectLogin': function(aDirectLogin) {
435 this.removedDirectLogins().push(aDirectLogin); 440 this.removedDirectLogins().push(aDirectLogin);
436 delete this.directLogins()[aDirectLogin.reference()]; 441 delete this.directLogins()[aDirectLogin.reference()];
437 // this.user().removeDirectLogin(aDirectLogin); 442 // this.user().removeDirectLogin(aDirectLogin);
438 }, 443 },
439 444
440 'resetDirectLogins': function() { 445 'resetDirectLogins': function() {
441 this._directLogins = {}; 446 this._directLogins = {};
442 }, 447 },
443 448
444 'removedDirectLogins': function() { 449 'removedDirectLogins': function() {
445 return this._removedDirectLogins; 450 return this._removedDirectLogins;
446 }, 451 },
447 452
448 'resetRemovedDirectLogins': function() { 453 'resetRemovedDirectLogins': function() {
449 this._removedDirectLogins = []; 454 this._removedDirectLogins = [];
450 }, 455 },
451 456
452 //------------------------------------------------------------------------- 457 //-------------------------------------------------------------------------
453 458
454 'serverData': function() { 459 'serverData': function() {
455 return this._serverData; 460 return this._serverData;
456 }, 461 },
457 462
458 'setServerData': function(aValue) { 463 'setServerData': function(aValue) {
459 this._serverData = aValue; 464 this._serverData = aValue;
460 this.setShouldLoadData(false); 465 this.setShouldLoadData(false);
461 return aValue; 466 return aValue;
462 }, 467 },
463 468
464 //------------------------------------------------------------------------- 469 //-------------------------------------------------------------------------
465 470
466 'decryptedData': function() { 471 'decryptedData': function() {
467 return this._decryptedData; 472 return this._decryptedData;
468 }, 473 },
469 474
470 'setDecryptedData': function(aValue) { 475 'setDecryptedData': function(aValue) {
471 this._decryptedData = aValue; 476 this._decryptedData = aValue;
472 this.setShouldDecryptData(false); 477 this.setShouldDecryptData(false);
473 return aValue; 478 return aValue;
474 }, 479 },
475 480
476 //------------------------------------------------------------------------- 481 //-------------------------------------------------------------------------
477 482
478 'cachedData': function() { 483 'cachedData': function() {
479 return this._cachedData; 484 return this._cachedData;
480 }, 485 },
481 486
482 'setCachedData': function(aValue) { 487 'setCachedData': function(aValue) {
483//MochiKit.Logging.logDebug(">>> Record.setCachedData"); 488//MochiKit.Logging.logDebug(">>> Record.setCachedData");
484//MochiKit.Logging.logDebug("--- Record.setCachedData - aValue: " + Clipperz.Base.serializeJSON(aValue)); 489//MochiKit.Logging.logDebug("--- Record.setCachedData - aValue: " + Clipperz.Base.serializeJSON(aValue));
485 this._cachedData = aValue; 490 this._cachedData = aValue;
486 this.setShouldProcessData(false); 491 this.setShouldProcessData(false);
487//MochiKit.Logging.logDebug("<<< Record.setCachedData"); 492//MochiKit.Logging.logDebug("<<< Record.setCachedData");
488 493
489 return aValue; 494 return aValue;
490 }, 495 },
491 496
492 //------------------------------------------------------------------------- 497 //-------------------------------------------------------------------------
493 498
494 'hasPendingChanges': function() { 499 'hasPendingChanges': function() {
495 var result; 500 var result;
496 501
497//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.hasPendingChanges"); 502//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.hasPendingChanges");
498//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + this.cachedData()); 503//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + this.cachedData());
499//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData())); 504//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData()));
500//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + this.currentDataSnapshot()); 505//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + this.currentDataSnapshot());
501//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + Clipperz.Base.serializeJSON(this.currentDataSnapshot())); 506//MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + Clipperz.Base.serializeJSON(this.currentDataSnapshot()));
502//console.log(">>> Record.hasPendingChanges - cachedData: %o", this.cachedData()); 507//console.log(">>> Record.hasPendingChanges - cachedData: %o", this.cachedData());
503//console.log(">>> Record.hasPendingChanges - currentSnapshot: %o", this.currentDataSnapshot()); 508//console.log(">>> Record.hasPendingChanges - currentSnapshot: %o", this.currentDataSnapshot());
504 result = (MochiKit.Base.compare(this.cachedData(), this.currentDataSnapshot()) != 0); 509 result = (MochiKit.Base.compare(this.cachedData(), this.currentDataSnapshot()) != 0);
505//MochiKit.Logging.logDebug("<<< Record.hasPendingChanges - " + result); 510//MochiKit.Logging.logDebug("<<< Record.hasPendingChanges - " + result);
506 511
507 if ((result == false) && this.isBrandNew() && (this.label() != Clipperz.PM.Strings['newRecordTitleLabel'])) { 512 if ((result == false) && this.isBrandNew() && (this.label() != Clipperz.PM.Strings['newRecordTitleLabel'])) {
508 result = true; 513 result = true;
509 } 514 }
510//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.hasPendingChanges"); 515//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.hasPendingChanges");
511 516
512 return result; 517 return result;
513 }, 518 },
514 519
515 //------------------------------------------------------------------------- 520 //-------------------------------------------------------------------------
516 521
517 'currentDataSnapshot': function() { 522 'currentDataSnapshot': function() {
518 varresult; 523 varresult;
519 524
520//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.currentDataSnapshot"); 525//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.currentDataSnapshot");
521 result = { 526 result = {
522 'label': this.label(), 527 'label': this.label(),
523 'data': this.serializedData(), 528 'data': this.serializedData(),
524 'currentVersion': this.currentVersion().currentDataSnapshot() 529 'currentVersion': this.currentVersion().currentDataSnapshot()
525 }; 530 };
526 531
527 // result['data']['data'] = this.notes(); 532 // result['data']['data'] = this.notes();
528 result = Clipperz.Base.serializeJSON(result); 533 result = Clipperz.Base.serializeJSON(result);
529 534
530//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.currentDataSnapshot"); 535//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.currentDataSnapshot");
531//MochiKit.Logging.logDebug("<<< Record.currentDataSnapshot"); 536//MochiKit.Logging.logDebug("<<< Record.currentDataSnapshot");
532 537
533 return result; 538 return result;
534 }, 539 },
535 540
536 //......................................................................... 541 //.........................................................................
537 542
538 'takeSnapshotOfCurrentData': function() { 543 'takeSnapshotOfCurrentData': function() {
539 this.setCachedData(this.currentDataSnapshot()); 544 this.setCachedData(this.currentDataSnapshot());
540 }, 545 },
541 546
542 //------------------------------------------------------------------------- 547 //-------------------------------------------------------------------------
543 548
544 'headerData': function() { 549 'headerData': function() {
545 var result; 550 var result;
546 551
547 result = { 552 result = {
548 'label': this.label(), 553 'label': this.label(),
549 'key': this.key() 554 'key': this.key()
550 }; 555 };
551 556
552 if (this.headerNotes() != null) { 557 if (this.headerNotes() != null) {
553 result['headerNotes'] = this.headerNotes(); 558 result['headerNotes'] = this.headerNotes();
554 } 559 }
555 560
556 return result; 561 return result;
557 }, 562 },
558 563
559 //------------------------------------------------------------------------- 564 //-------------------------------------------------------------------------
560 565
561 'serializedData': function() { 566 'serializedData': function() {
562 var result; 567 var result;
563 var directLoginReference; 568 var directLoginReference;
564 569
565 result = {}; 570 result = {};
566 result['currentVersionKey'] = this.currentVersion().key(); 571 result['currentVersionKey'] = this.currentVersion().key();
567 572
568 result['directLogins'] = {}; 573 result['directLogins'] = {};
569 for (directLoginReference in this.directLogins()) { 574 for (directLoginReference in this.directLogins()) {
570 result['directLogins'][directLoginReference] = this.directLogins()[directLoginReference].serializedData(); 575 result['directLogins'][directLoginReference] = this.directLogins()[directLoginReference].serializedData();
571 } 576 }
572 result['notes'] = this.notes(); 577 result['notes'] = this.notes();
573 578
574 return result; 579 return result;
575 }, 580 },
576 581
577 //------------------------------------------------------------------------- 582 //-------------------------------------------------------------------------
578 583
579 'encryptedData': function() { 584 'encryptedData': function() {
580 var deferredResult; 585 var deferredResult;
581 varresult; 586 varresult;
582 587
583//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.encryptedData"); 588//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.encryptedData");
584 result = {} 589 result = {}
585//MochiKit.Logging.logDebug("--- Record.encryptedData - 1"); 590//MochiKit.Logging.logDebug("--- Record.encryptedData - 1");
586 deferredResult = new MochiKit.Async.Deferred(); 591 deferredResult = new MochiKit.Async.Deferred();
587//MochiKit.Logging.logDebug("--- Record.encryptedData - 2"); 592//MochiKit.Logging.logDebug("--- Record.encryptedData - 2");
588//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 1: " + res); return res;}); 593//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 1: " + res); return res;});
589 deferredResult.addCallback(function(aResult, aRecord) { 594 deferredResult.addCallback(function(aResult, aRecord) {
590 aResult['reference'] = aRecord.reference(); 595 aResult['reference'] = aRecord.reference();
591 return aResult; 596 return aResult;
592 }, result, this); 597 }, result, this);
593//MochiKit.Logging.logDebug("--- Record.encryptedData - 3"); 598//MochiKit.Logging.logDebug("--- Record.encryptedData - 3");
594//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 2: " + res); return res;}); 599//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 2: " + res); return res;});
595 deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion, this.key(), this.serializedData()); 600 deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion, this.key(), this.serializedData());
596//MochiKit.Logging.logDebug("--- Record.encryptedData - 4"); 601//MochiKit.Logging.logDebug("--- Record.encryptedData - 4");
597//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 3: " + res); return res;}); 602//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 3: " + res); return res;});
598 deferredResult.addCallback(function(aResult, res) { 603 deferredResult.addCallback(function(aResult, res) {
599 aResult['data'] = res; 604 aResult['data'] = res;
600 return aResult; 605 return aResult;
601 }, result); 606 }, result);
602//MochiKit.Logging.logDebug("--- Record.encryptedData - 5"); 607//MochiKit.Logging.logDebug("--- Record.encryptedData - 5");
603//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 4: " + res); return res;}); 608//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 4: " + res); return res;});
604 deferredResult.addCallback(function(aResult) { 609 deferredResult.addCallback(function(aResult) {
605 aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion; 610 aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
606 return aResult; 611 return aResult;
607 }, result); 612 }, result);
608//MochiKit.Logging.logDebug("--- Record.encryptedData - 6"); 613//MochiKit.Logging.logDebug("--- Record.encryptedData - 6");
609//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 5: " + res); return res;}); 614//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 5: " + res); return res;});
610 deferredResult.callback(); 615 deferredResult.callback();
611//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.encryptedData"); 616//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.encryptedData");
612 617
613 return deferredResult; 618 return deferredResult;
614 }, 619 },
615 620
616 //------------------------------------------------------------------------- 621 //-------------------------------------------------------------------------
617 622
618 'syncDirectLoginReferenceValues': function() { 623 'syncDirectLoginReferenceValues': function() {
619//MochiKit.Logging.logDebug(">>> Record.syncDirectLoginReferenceValues"); 624//MochiKit.Logging.logDebug(">>> Record.syncDirectLoginReferenceValues");
620 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), function(aDirectLogin) { 625 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), function(aDirectLogin) {
621 aDirectLogin.record().user().synchronizeDirectLogin(aDirectLogin); 626 aDirectLogin.record().user().synchronizeDirectLogin(aDirectLogin);
622 }); 627 });
623 628
624 MochiKit.Iter.forEach(this.removedDirectLogins(), function(aDirectLogin) { 629 MochiKit.Iter.forEach(this.removedDirectLogins(), function(aDirectLogin) {
625 aDirectLogin.record().user().removeDirectLogin(aDirectLogin); 630 aDirectLogin.record().user().removeDirectLogin(aDirectLogin);
626 }); 631 });
627 632
628 this.resetRemovedDirectLogins(); 633 this.resetRemovedDirectLogins();
629//MochiKit.Logging.logDebug("<<< Record.syncDirectLoginReferenceValues"); 634//MochiKit.Logging.logDebug("<<< Record.syncDirectLoginReferenceValues");
630 }, 635 },
631 636
632 //------------------------------------------------------------------------- 637 //-------------------------------------------------------------------------
633 638
634 'saveChanges': function() { 639 'saveChanges': function() {
635 var result; 640 var result;
636 641
637 if (this.isBrandNew() == false) { 642 if (this.isBrandNew() == false) {
638 result = this.user().saveRecords([this], 'updateData'); 643 result = this.user().saveRecords([this], 'updateData');
639 } else { 644 } else {
640 result = this.user().saveRecords([this], 'addNewRecords'); 645 result = this.user().saveRecords([this], 'addNewRecords');
641 } 646 }
642 647
643 return result; 648 return result;
644 }, 649 },
645 650
646/* 651/*
647 'saveChanges': function() { 652 'saveChanges': function() {
648 var deferredResult; 653 var deferredResult;
649 varresult; 654 varresult;
650 655
651 Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'records', true); 656 Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'records', true);
652//MochiKit.Logging.logDebug(">>> Record.saveChanges"); 657//MochiKit.Logging.logDebug(">>> Record.saveChanges");
653//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.saveChanges"); 658//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.saveChanges");
654 if (this.headerNotes() != null) { 659 if (this.headerNotes() != null) {
655 this.setNotes(this.headerNotes()); 660 this.setNotes(this.headerNotes());
656 } 661 }
657 this.syncDirectLoginReferenceValues(); 662 this.syncDirectLoginReferenceValues();
658 this.currentVersion().createNewVersion(); 663 this.currentVersion().createNewVersion();
659 664
660 result = {'records': [{}]}; 665 result = {'records': [{}]};
661 666
662 deferredResult = new MochiKit.Async.Deferred(); 667 deferredResult = new MochiKit.Async.Deferred();
663 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo'); 668 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo');
664 deferredResult.addCallback(MochiKit.Base.method(this, 'updateKey')); 669 deferredResult.addCallback(MochiKit.Base.method(this, 'updateKey'));
665 670
666 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData'); 671 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData');
667 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'encryptedData')); 672 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'encryptedData'));
668 deferredResult.addCallback(function(aResult, res) { 673 deferredResult.addCallback(function(aResult, res) {
669 aResult['user'] = res; 674 aResult['user'] = res;
670 return aResult; 675 return aResult;
671 }, result); 676 }, result);
672 677
673 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData'); 678 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData');
674 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); 679 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData'));
675 deferredResult.addCallback(function(aResult, res) { 680 deferredResult.addCallback(function(aResult, res) {
676 //# aResult['record'] = res; 681 //# aResult['record'] = res;
677 aResult['records'][0]['record'] = res; 682 aResult['records'][0]['record'] = res;
diff --git a/frontend/beta/js/Clipperz/PM/Proxy.js b/frontend/beta/js/Clipperz/PM/Proxy.js
index f476196..bec9195 100644
--- a/frontend/beta/js/Clipperz/PM/Proxy.js
+++ b/frontend/beta/js/Clipperz/PM/Proxy.js
@@ -1,170 +1,169 @@
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 = {}; }
28 28
29//============================================================================= 29//=============================================================================
30 30
31Clipperz.PM.Proxy = function(args) { 31Clipperz.PM.Proxy = function(args) {
32 args = args || {}; 32 args = args || {};
33 33
34 this._shouldPayTolls = args.shouldPayTolls || false; 34 this._shouldPayTolls = args.shouldPayTolls || false;
35 35
36 this._tolls = { 36 this._tolls = {
37 'CONNECT':[], 37 'CONNECT':[],
38 'REGISTER':[], 38 'REGISTER':[],
39 'MESSAGE':[] 39 'MESSAGE':[]
40 }; 40 };
41 41
42 if (args.isDefault === true) { 42 if (args.isDefault === true) {
43 Clipperz.PM.Proxy.defaultProxy = this; 43 Clipperz.PM.Proxy.defaultProxy = this;
44 } 44 }
45 45
46 return this; 46 return this;
47} 47}
48 48
49Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, { 49Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, {
50 50
51 'toString': function() { 51 'toString': function() {
52 return "Clipperz.PM.Proxy"; 52 return "Clipperz.PM.Proxy";
53 }, 53 },
54 54
55 //========================================================================= 55 //=========================================================================
56 56
57 'shouldPayTolls': function() { 57 'shouldPayTolls': function() {
58 return this._shouldPayTolls; 58 return this._shouldPayTolls;
59 }, 59 },
60 60
61 //------------------------------------------------------------------------- 61 //-------------------------------------------------------------------------
62 62
63 'tolls': function() { 63 'tolls': function() {
64 return this._tolls; 64 return this._tolls;
65 }, 65 },
66 66
67 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
68 68
69 'payToll': function(aRequestType, someParameters) { 69 'payToll': function(aRequestType, someParameters) {
70 vardeferredResult; 70 vardeferredResult;
71 71
72//console.log(">>> Proxy.payToll", aRequestType, someParameters); 72//console.log(">>> Proxy.payToll", aRequestType, someParameters);
73 if (this.shouldPayTolls()) { 73 if (this.shouldPayTolls()) {
74 deferredResult = new MochiKit.Async.Deferred(); 74 deferredResult = new MochiKit.Async.Deferred();
75 75
76 if (this.tolls()[aRequestType].length == 0) { 76 if (this.tolls()[aRequestType].length == 0) {
77 deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage', 'knock', {requestType:aRequestType})); 77 deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage', 'knock', {requestType:aRequestType}));
78 deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback')); 78 deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback'));
79 } 79 }
80 deferredResult.addCallback(MochiKit.Base.method(this.tolls()[aRequestType], 'pop')); 80 deferredResult.addCallback(MochiKit.Base.method(this.tolls()[aRequestType], 'pop'));
81 deferredResult.addCallback(MochiKit.Base.methodcaller('deferredPay')); 81 deferredResult.addCallback(MochiKit.Base.methodcaller('deferredPay'));
82 deferredResult.addCallback(function(aToll) { 82 deferredResult.addCallback(function(aToll) {
83 var result; 83 var result;
84 84
85 result = { 85 result = {
86 parameters: someParameters, 86 parameters: someParameters,
87 toll: aToll 87 toll: aToll
88 } 88 }
89 89
90 return result; 90 return result;
91 }); 91 });
92 92
93 deferredResult.callback(); 93 deferredResult.callback();
94 } else { 94 } else {
95 deferredResult = MochiKit.Async.succeed({parameters:someParameters}); 95 deferredResult = MochiKit.Async.succeed({parameters:someParameters});
96 } 96 }
97//console.log("<<< Proxy.payToll"); 97//console.log("<<< Proxy.payToll");
98 98
99 return deferredResult; 99 return deferredResult;
100 }, 100 },
101 101
102 //------------------------------------------------------------------------- 102 //-------------------------------------------------------------------------
103 103
104 'addToll': function(aToll) { 104 'addToll': function(aToll) {
105//console.log(">>> Proxy.addToll", aToll); 105//console.log(">>> Proxy.addToll", aToll);
106 this.tolls()[aToll.requestType()].push(aToll); 106 this.tolls()[aToll.requestType()].push(aToll);
107//console.log("<<< Proxy.addToll"); 107//console.log("<<< Proxy.addToll");
108 }, 108 },
109 109
110 //========================================================================= 110 //=========================================================================
111 111
112 'setTollCallback': function(someParameters) { 112 'setTollCallback': function(someParameters) {
113//console.log(">>> Proxy.setTollCallback", someParameters); 113//console.log(">>> Proxy.setTollCallback", someParameters);
114 if (typeof(someParameters['toll']) != 'undefined') { 114 if (typeof(someParameters['toll']) != 'undefined') {
115//console.log("added a new toll", someParameters['toll']); 115//console.log("added a new toll", someParameters['toll']);
116 this.addToll(new Clipperz.PM.Toll(someParameters['toll'])); 116 this.addToll(new Clipperz.PM.Toll(someParameters['toll']));
117 } 117 }
118//console.log("<<< Proxy.setTallCallback", someParameters['result']); 118//console.log("<<< Proxy.setTallCallback", someParameters['result']);
119 //return someParameters['result']; 119 return someParameters['result'];
120 return someParameters;
121 }, 120 },
122 121
123 //========================================================================= 122 //=========================================================================
124 123
125 'registration': function (someParameters) { 124 'registration': function (someParameters) {
126 return this.processMessage('registration', someParameters, 'REGISTER'); 125 return this.processMessage('registration', someParameters, 'REGISTER');
127 }, 126 },
128 127
129 'handshake': function (someParameters) { 128 'handshake': function (someParameters) {
130 return this.processMessage('handshake', someParameters, 'CONNECT'); 129 return this.processMessage('handshake', someParameters, 'CONNECT');
131 }, 130 },
132 131
133 'message': function (someParameters) { 132 'message': function (someParameters) {
134 return this.processMessage('message', someParameters, 'MESSAGE'); 133 return this.processMessage('message', someParameters, 'MESSAGE');
135 }, 134 },
136 135
137 'logout': function (someParameters) { 136 'logout': function (someParameters) {
138 return this.processMessage('logout', someParameters, 'MESSAGE'); 137 return this.processMessage('logout', someParameters, 'MESSAGE');
139 }, 138 },
140 139
141 //========================================================================= 140 //=========================================================================
142 141
143 'processMessage': function (aFunctionName, someParameters, aRequestType) { 142 'processMessage': function (aFunctionName, someParameters, aRequestType) {
144 vardeferredResult; 143 vardeferredResult;
145 144
146 deferredResult = new MochiKit.Async.Deferred(); 145 deferredResult = new MochiKit.Async.Deferred();
147 deferredResult.addCallback(MochiKit.Base.method(this, 'payToll', aRequestType)); 146 deferredResult.addCallback(MochiKit.Base.method(this, 'payToll', aRequestType));
148 deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage', aFunctionName)); 147 deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage', aFunctionName));
149 deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback')); 148 deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback'));
150 deferredResult.callback(someParameters); 149 deferredResult.callback(someParameters);
151 150
152 return deferredResult; 151 return deferredResult;
153 }, 152 },
154 153
155 //========================================================================= 154 //=========================================================================
156 155
157 'sendMessage': function () { 156 'sendMessage': function () {
158 throw Clipperz.Base.exception.AbstractMethod; 157 throw Clipperz.Base.exception.AbstractMethod;
159 }, 158 },
160 159
161 //========================================================================= 160 //=========================================================================
162 161
163 'isReadOnly': function () { 162 'isReadOnly': function () {
164 return false; 163 return false;
165 }, 164 },
166 165
167 //========================================================================= 166 //=========================================================================
168 __syntaxFix__: "syntax fix" 167 __syntaxFix__: "syntax fix"
169 168
170}); 169});
diff --git a/frontend/beta/js/Clipperz/PM/Proxy/Proxy.PHP.js b/frontend/beta/js/Clipperz/PM/Proxy/Proxy.PHP.js
deleted file mode 100755
index 34a10c2..0000000
--- a/frontend/beta/js/Clipperz/PM/Proxy/Proxy.PHP.js
+++ b/dev/null
@@ -1,262 +0,0 @@
1/*
2
3Copyright 2008-2011 Clipperz Srl
4
5This file is part of Clipperz Community Edition.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please
8refer to http://www.clipperz.com.
9
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
12 License as published by the Free Software Foundation, either version
13 3 of the License, or (at your option) any later version.
14
15* Clipperz Community Edition is distributed in the hope that it will
16 be useful, but WITHOUT ANY WARRANTY; without even the implied
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details.
19
20* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see
22 <http://www.gnu.org/licenses/>.
23
24*/
25
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28
29//=============================================================================
30
31Clipperz.PM.Proxy.PHP = function(args) {
32 Clipperz.PM.Proxy.PHP.superclass.constructor.call(this, args);
33/*
34 this._tolls = {
35 'CONNECT':[],
36 'REGISTER':[],
37 'MESSAGE':[]
38 };
39 */
40 return this;
41}
42
43YAHOO.extendX(Clipperz.PM.Proxy.PHP, Clipperz.PM.Proxy, {
44
45 'toString': function() {
46 return "Clipperz.PM.Proxy.PHP - " + this.args();
47 },
48
49 //=========================================================================
50/*
51 'tolls': function() {
52 return this._tolls;
53 },
54*/
55 //-------------------------------------------------------------------------
56/*
57 'payToll': function(aRequestType, someParameters) {
58 vardeferredResult;
59
60//MochiKit.Logging.logDebug(">>> Proxy.DWR.payToll: " + aRequestType);
61 if (this.tolls()[aRequestType].length > 0) {
62 deferredResult = MochiKit.Async.succeed(this.tolls()[aRequestType].pop());
63 } else {
64//MochiKit.Logging.logDebug("### " + aRequestType + " toll NOT immediately available; request queued.");
65 deferredResult = new MochiKit.Async.Deferred();
66 deferredResult.addCallback(function(someParameters) {
67 return new Clipperz.PM.Toll(someParameters['toll']);
68 })
69 com_clipperz_pm_Proxy.knock(Clipperz.Base.serializeJSON({requestType:aRequestType}), {
70 callback:MochiKit.Base.method(deferredResult, 'callback'),
71 errorHandler:MochiKit.Base.method(deferredResult, 'errback')
72 });
73 }
74
75 deferredResult.addCallback(function(aToll) {
76 return aToll.deferredPay();
77 });
78 deferredResult.addCallback(function(someParameters, aToll) {
79 var result;
80
81 result = {
82 parameters: someParameters,
83 toll: aToll
84 }
85
86 return result;
87 }, someParameters);
88
89 return deferredResult;
90 },
91*/
92 //-------------------------------------------------------------------------
93/*
94 'addToll': function(aToll) {
95 this.tolls()[aToll.requestType()].push(aToll);
96 },
97*/
98 //=========================================================================
99/*
100 'setTollCallback': function(someParameters) {
101//MochiKit.Logging.logDebug(">>> Proxy.DWR.setTollCallback");
102//MochiKit.Logging.logDebug("--- Proxy.DWR.setTollCallback - " + Clipperz.Base.serializeJSON(someParameters));
103 if (typeof(someParameters['toll']) != 'undefined') {
104 this.addToll(new Clipperz.PM.Toll(someParameters['toll']));
105 }
106 return someParameters['result'];
107 },
108*/
109 //=========================================================================
110
111 'registration': function(someParameters) {
112 return this.sendMessage('registration', someParameters, 'REGISTER');
113 },
114
115 //-------------------------------------------------------------------------
116
117 'handshake': function(someParameters) {
118/*
119 _s = "e8a2162f29aeaabb729f5625e9740edbf0cd80ac77c6b19ab951ed6c88443b8c";
120 _v = new Clipperz.Crypto.BigInt("955e2db0f7844aca372f5799e5f7e51b5866718493096908bd66abcf1d068108", 16);
121 _b = new Clipperz.Crypto.BigInt("5761e6c84d22ea3c5649de01702d60f674ccfe79238540eb34c61cd020230c53", 16);
122
123 _B = _v.add(Clipperz.Crypto.SRP.g().powerModule(_b, Clipperz.Crypto.SRP.n()));
124 _u = new Clipperz.Crypto.BigInt(Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(_B.asString(10))).toHexString(), 16);
125 _A = new Clipperz.Crypto.BigInt("3b3567ec33d73673552e960872eb154d091a2488915941038aef759236a27e64", 16);
126 _S = (_A.multiply(_v.powerModule(_u, Clipperz.Crypto.SRP.n()))).powerModule(_b, Clipperz.Crypto.SRP.n());
127 _K = Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(_S.asString(10))).toHexString().slice(2);
128 _M1 = Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(_A.asString(10) + _B.asString(10) + _K)).toHexString().slice(2);
129 _M2 = Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(_A.asString(10) + _M1 + _K)).toHexString().slice(2);
130
131 // MochiKit.Logging.logDebug("b = " + _b.asString(16));
132 // MochiKit.Logging.logDebug("v = " + _v.asString(16));
133 MochiKit.Logging.logDebug("B = " + _B.asString(16));
134 MochiKit.Logging.logDebug("u = " + _u.asString(16));
135 MochiKit.Logging.logDebug("S = " + _S.asString(16));
136 MochiKit.Logging.logDebug("K = " + _K);
137 MochiKit.Logging.logDebug("M1 = " + _M1);
138 MochiKit.Logging.logDebug("M2 = " + _M2);
139 // MochiKit.Logging.logDebug("someParameters.version: " + someParameters.version);
140 */
141 return this.sendMessage('handshake', someParameters, 'CONNECT');
142 },
143
144 //-------------------------------------------------------------------------
145
146 'message': function(someParameters) {
147 return this.sendMessage('message', someParameters, 'MESSAGE');
148 },
149
150 //-------------------------------------------------------------------------
151
152 'logout': function(someParameters) {
153//MochiKit.Logging.logDebug("=== Proxy.DWR.logout");
154 return this.sendMessage('logout', someParameters, 'MESSAGE');
155 },
156
157 //=========================================================================
158
159 'sendMessage': function(aFunctionName, someParameters, aRequestType) {
160/*
161 vardeferredResult;
162 var proxy;
163
164//MochiKit.Logging.logDebug(">>> Proxy.DWR.sendMessage - " + aFunctionName + " - " + aRequestType);
165 proxy = this;
166
167 deferredResult = new MochiKit.Async.Deferred();
168//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("x.1 Proxy.DWR.sendMessage - 1: " + res); return res;});
169 deferredResult.addCallback(MochiKit.Base.method(proxy, 'payToll'), aRequestType);
170//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("x.2 Proxy.DWR.sendMessage - 2: " + Clipperz.Base.serializeJSON(res)); return res;});
171 deferredResult.addCallback(MochiKit.Base.method(proxy, 'sendRemoteMessage'), aFunctionName);
172//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("x.3 Proxy.DWR.sendMessage - 3: " + res); return res;});
173//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("x.3 Proxy.DWR.sendMessage - 3: " + Clipperz.Base.serializeJSON(res)); return res;});
174 deferredResult.callback(someParameters);
175
176//MochiKit.Logging.logDebug("<<< Proxy.DWR.sendMessage");
177 return deferredResult;
178*/
179
180 // return this.sendRemoteMessage(aFunctionName, someParameters);
181
182
183 vardeferredResult;
184 var proxy;
185
186 proxy = this;
187
188 deferredResult = new MochiKit.Async.Deferred();
189 deferredResult.addCallback(MochiKit.Base.method(proxy, 'sendRemoteMessage'), aFunctionName);
190//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("x.3 Proxy.PHP.sendMessage - 3: " + res); return res;});
191//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("x.3 Proxy.PHP.sendMessage - 3.1: " + Clipperz.Base.serializeJSON(res)); return res;});
192
193 deferredResult.callback(someParameters);
194
195 return deferredResult;
196 },
197
198 //=========================================================================
199
200 'sendRemoteMessage': function(aFunctionName, someParameters) {
201/*
202 vardeferredResult;
203
204//MochiKit.Logging.logDebug(">>> Proxy.DWR.sendRemoteMessage('" + aFunctionName + "', " + Clipperz.Base.serializeJSON(someParameters) + ") - " + this);
205 deferredResult = new MochiKit.Async.Deferred();
206//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Proxy.DWR.sendRemoteMessage - 1: " + res); return res;});
207 // deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback'));
208//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Proxy.DWR.sendRemoteMessage - 2: " + res); return res;});
209
210 com_clipperz_pm_Proxy[aFunctionName](Clipperz.Base.serializeJSON(someParameters), {
211 callback:MochiKit.Base.method(deferredResult, 'callback'),
212 errorHandler:MochiKit.Base.method(deferredResult, 'errback')
213 });
214//MochiKit.Logging.logDebug("<<< Proxy.PHP.sendRemoteMessage - result: " + deferredResult);
215
216 return deferredResult;
217*/
218
219 vardeferredResult;
220 var parameters;
221
222//MochiKit.Logging.logDebug(">>> Proxy.PHP.sendRemoteMessage('" + aFunctionName + "', " + Clipperz.Base.serializeJSON(someParameters) + ") - " + this);
223 parameters = {};
224 parameters['method'] = aFunctionName;
225 // parameters['version'] = someParameters['version'];
226 // parameters['message'] = someParameters['message'];
227 parameters['parameters'] = Clipperz.Base.serializeJSON(someParameters);
228//MochiKit.Logging.logDebug("--- Proxy.PHP.sendRemoteMessage('" + Clipperz.Base.serializeJSON(parameters) + ") - " + this);
229 deferredResult = new MochiKit.Async.Deferred();
230 deferredResult.addCallback(MochiKit.Async.doXHR, "./php/index.php", {
231 method:'POST',
232 sendContent:MochiKit.Base.queryString(parameters),
233 headers:{"Content-Type":"application/x-www-form-urlencoded"}
234 });
235//deferredResult.addCallback(function(res) {MochiKit.Logging.logDebug("Proxy.PHP.response - 2: " + res.responseText); return res;});
236//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("Proxy.PHP.response - ERROR: " + res); return res;});
237 deferredResult.addCallback(MochiKit.Async.evalJSONRequest);
238 deferredResult.addCallback(function (someValues) {
239 if (someValues['result'] == 'EXCEPTION') {
240 throw someValues['message'];
241 }
242 return someValues;
243 })
244 deferredResult.callback();
245
246 return deferredResult;
247 },
248
249 //=========================================================================
250
251 'isReadOnly': function() {
252 return false;
253 },
254
255 //=========================================================================
256 __syntaxFix__: "syntax fix"
257
258});
259
260//=============================================================================
261
262//Clipperz.PM.Proxy.defaultProxy = new Clipperz.PM.Proxy.PHP("Proxy.PHP - async test");
diff --git a/frontend/gamma/css/clipperz.css b/frontend/gamma/css/clipperz.css
new file mode 100644
index 0000000..c772c98
--- a/dev/null
+++ b/frontend/gamma/css/clipperz.css
@@ -0,0 +1,3725 @@
1/*
2
3Copyright 2008-2011 Clipperz Srl
4
5This file is part of Clipperz Community Edition.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please
8refer to http://www.clipperz.com.
9
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
12 License as published by the Free Software Foundation, either version
13 3 of the License, or (at your option) any later version.
14
15* Clipperz Community Edition is distributed in the hope that it will
16 be useful, but WITHOUT ANY WARRANTY; without even the implied
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details.
19
20* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see
22 <http://www.gnu.org/licenses/>.
23
24*/
25
26/* @override
27 https://www.example.com/DEVELOPMENT/css/clipperz.css
28 http://www.example.com/DEVELOPMENT/css/clipperz.css
29 https://www.clipperz.com/gamma/css/clipperz.css
30 https://www.example.com/iPHONE/css/clipperz.css
31*/
32/*
33
34Color list:
35- login box:
36 light#ff9955
37 dark#ff6622
38- login button:
39 regular#dd5500
40 hover#773311
41- login translations:
42 box: #cc6622;
43 not-selected:
44 color: #ddaa99
45 background:#994422
46 selected: #772211;
47*/
48html {
49 height: 100%;
50 color: #e8b81b;
51}
52body {
53 /*margin-left: 15px; margin-right: 15px;*/
54
55 font-family: Helvetica, Arial, Geneva, sans-serif;
56 margin: 0px;
57 /*
58 min-width: 600px;
59*/
60
61 height: 99%;
62}
63img.favicon {
64 height: 16px;
65 width: 16px;
66}
67/* @group Misc */
68.clear {
69 clear: both;
70}
71.hidden_none {
72 display: none;
73 visibility: hidden;
74}
75.keepTogether {
76 display: inline-block;
77 white-space: nowrap;
78}
79body.ext-gecko .keepTogether {
80 display: -moz-inline-box;
81}
82/* @end */
83/* @group Loading */
84div#loading {
85 margin-left: auto;
86 margin-right: auto;
87 text-align: center;
88 margin-top: 60px;
89 width: 200px;
90}
91div#loading img {
92 border: 0px;
93}
94div#loading h5 {
95 font-size: 16pt;
96 padding: 0px;
97 color: #333366;
98}
99div#loading h2 {
100 padding-left: 20px;
101 color: #ff9200;
102}
103/* @end */
104/* @group Login page */
105/* @group Header */
106div.pageHeader {
107 background-color: #1f2148;
108 min-width: 1013px;
109}
110div#logoFrame {
111 padding: 16px 16px 60px 16px;
112 min-height: 44px;
113}
114div#logoFrame div#logo {
115 background: url(../images/old/logo.png);
116 width: 150px;
117 height: 39px;
118}
119div#loading div#logo {
120 background: url(../images/old/logo_blue.png);
121 width: 193px;
122 height: 58px;
123 display: block;
124}
125h5.clipperzPayoff {
126 color: white;
127 font-size: 13pt;
128 font-weight: normal;
129 padding-left: 20px;
130 white-space: nowrap;
131 margin: 0px;
132 padding-left: 4px;
133}
134/* @group Misc links */
135div#miscLinks {
136 float: right;
137}
138div#miscLinks ul {
139 margin: 12px 0px 0px;
140 padding: 15px;
141}
142div#miscLinks ul li {
143 display: inline;
144 margin: 0px;
145 padding: 0px;
146 border: 0px;
147}
148div#miscLinks ul li a {
149 /*
150 color: #ccccff;
151*/
152
153 color: white;
154 margin: 0px;
155 padding: 0px;
156 border: 0px;
157 font-weight: normal;
158 text-decoration: none;
159 font-size: 12pt;
160 border-left: 1px solid #45486b;
161 padding: 15px;
162 margin: 0px;
163 min-width: 70px;
164}
165div#miscLinks ul li a#donateHeaderLink {
166 border-left: 0px;
167}
168div#miscLinks ul li a:hover {
169 color: #ff9200;
170}
171/* @end */
172/* @group Features Tabs */
173#featureTabs table {
174 width: 100%;
175 padding: 6px;
176 padding-bottom: 46px;
177}
178#featureTabs table tr td {
179 width: 25%;
180 vertical-align: top;
181 font-size: 11pt;
182 color: white;
183}
184#featureTabs table tr td img {
185 float: left;
186}
187#featureTabs table tr td span {
188 display: block;
189 padding: 5 10 5 85;
190}
191div#featureTabs canvas.featureIcon {
192 width: 76px;
193 height: 76px;
194 display: block;
195 float: left;
196 background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9955), to(#ff6622), color-stop(1, #333333));
197 background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ff9955);
198 -webkit-border-radius: 38px;
199 -moz-border-radius: 38px;
200 border-radius: 38px;
201}
202/*
203div#featureTabs div.featureIcon.storeIcon {
204 background-image: url(../images/old/home/features/store.png);
205}
206
207div#featureTabs div.featureIcon.protectIcon {
208 background-image: url(../images/old/home/features/protect.png);
209}
210
211div#featureTabs div.featureIcon.directLoginIcon {
212 background-image: url(../images/old/home/features/directLogin.png);
213}
214
215div#featureTabs div.featureIcon.shareIcon {
216 background-image: url(../images/old/home/features/share.png);
217}
218*/
219/*
220./images/home/features/store.png
221./images/home/features/protect.png
222./images/home/features/directLogin.png
223./images/home/features/share.png
224*/
225/* @end */
226/* @group Feature bullets */
227div#featurePoints {
228 min-width: 400px;
229 padding-left: 20px;
230 padding-right: 330px;
231 padding-top: 15px;
232 padding-bottom: 20px;
233}
234div#featurePoints table tbody tr td {
235 width: 50%;
236 vertical-align: top;
237}
238div#featurePoints table tbody tr td.separator {
239 width: 1px;
240 border-left: 1px solid #bebebe;
241}
242div#featurePoints div.block {
243 padding: 10px;
244 color: #8e8e8e;
245}
246div#featurePoints div.block h3 {
247 font-weight: normal;
248 font-size: 12pt;
249 margin: 0px;
250 padding: 5px 0px;
251}
252div#featurePoints div.block ul {
253 margin: 0px;
254 margin-left: 20px;
255 padding: 0px;
256 list-style-position: outside;
257 list-style-image: url(../images/old/home/features/bullet.png);
258}
259div#featurePoints div.block ul li {
260 font-size: 10pt;
261 padding: 3px 0px;
262}
263/* @end */
264/* @end */
265/* @group Login box */
266div#loginBox {
267 width: 273px;
268 /* z-index: 40000;*/
269
270 z-index: 19000;
271 position: relative;
272 top: -30px;
273 right: 30px;
274 float: right;
275}
276div#loginBox div.header {
277 height: 25px;
278 width: 273px;
279 /* background-image: url(../images/old/home/box/box_top.png);*/
280
281 /* background-color: #fe965f;*/
282
283 background-color: #ff9955;
284 -webkit-border-top-left-radius: 20px;
285 -webkit-border-top-right-radius: 20px;
286 -moz-border-radius-topleft: 20px;
287 -moz-border-radius-topright: 20px;
288 border-top-left-radius: 20px;
289 border-top-right-radius: 20px;
290}
291div#loginBox div.body {
292 background-color: #ff9955;
293 background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9955), to(#ff6622), color-stop(1, #333333));
294 background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ff9955);
295 /*background: url(../images/old/home/box/box_body.png) repeat-x; */
296
297}
298div#loginBox div.body h3.loading {
299 margin: 0px;
300 text-align: center;
301 padding-top: 60px;
302 color: white;
303 font-size: 30pt;
304 padding-left: 20px;
305}
306div#loginBox div.footer {
307 height: 37px;
308 width: 273px;
309 /* background-image: url(../images/old/home/box/box_bottom.png);*/
310
311 background-color: #ff6622;
312 -webkit-border-bottom-left-radius: 20px;
313 -webkit-border-bottom-right-radius: 20px;
314 -moz-border-radius-bottomleft: 20px;
315 -moz-border-radius-bottomright: 20px;
316 border-bottom-left-radius: 20px;
317 border-bottom-right-radius: 20px;
318}
319/* @group Login form */
320div#loginBox h4 {
321 color: white;
322 font-size: 16pt;
323 font-weight: normal;
324 padding-left: 20px;
325 margin: 0px;
326}
327div#loginBox form.loginForm {
328 padding: 5px 20px 0px;
329 margin-bottom: 0px;
330}
331div#loginBox form.loginForm label {
332 color: white;
333 font-size: 10pt;
334 display: block;
335 padding-top: 5px;
336}
337div#loginBox form.loginForm input {
338 width: 230px;
339 font-size: 14pt;
340 border: 1px solid #bb4924;
341 color: #333366;
342 background-color: white;
343 padding: 2px 5px;
344 height: 28px;
345}
346div#loginBox form.loginForm label.checkbox {
347 display: inline;
348}
349div#loginBox form.loginForm .checkbox:hover {
350 cursor: pointer;
351}
352div#loginBox form.loginForm input.checkbox {
353 margin: 10px 8px 0px 0px;
354 height: auto;
355 width: auto;
356 border: 0px;
357}
358div#loginBox form.loginForm ul {
359 list-style-type: none;
360 padding: 0px;
361 margin: 0px;
362}
363div#loginBox form.loginForm ul li {
364 display: block;
365}
366div#loginBox form.loginForm input.otp {
367 width: 57px;
368 display: inline;
369 padding-left: 0px;
370 padding-right: 0px;
371 height: 28px;
372 font: 8pt monospace;
373}
374div#loginBox form.loginForm input.submit {
375 margin: 0px 45px;
376 width: 140px;
377 border: 1px solid white;
378 color: white;
379 background-color: #dd5500;
380 padding: 6px;
381 font-size: 12pt;
382 height: auto;
383}
384div#loginBox form.loginForm input.submit:hover {
385 background-color: #773311;
386 color: white;
387 cursor: pointer;
388}
389/* @group language chooser */
390div#loginBox form.loginForm div.translations {
391 margin: 15px -20px;
392 background-color: #cc6622;
393}
394div#loginBox form.loginForm div.translations h4 {
395 font-size: 9pt;
396 padding: 6px 20px 0px;
397}
398div#loginBox form.loginForm div.translations ul {
399 margin: 0px;
400 padding: 5px 10px 10px;
401 margin-bottom: 15px;
402}
403div#loginBox form.loginForm div.translations ul li {
404 font-size: 8pt;
405 color: #ddaa99;
406 display: inline-block;
407 padding: 2px 4px;
408 background-color: #994422;
409 margin: 1px;
410}
411body.ext-gecko div#loginBox form.loginForm div.translations ul li {
412 display: -moz-inline-box;
413}
414div#loginBox form.loginForm div.translations ul li.selected {
415 background-color: #772211;
416 color: white;
417}
418div#loginBox form.loginForm div.translations ul li.selected:hover {
419 cursor: default;
420}
421div#loginBox form.loginForm div.translations ul li:hover {
422 cursor: pointer;
423 color: white;
424}
425/* @end */
426/* @end */
427/* @end */
428/* @group Create/Look/Offline */
429div.activeFeatures {
430 float: left;
431 margin-left: 20px;
432 height: 100px;
433}
434div.activeFeatures a {
435 display: inline-block;
436 padding-left: 46px;
437 color: #ff5906;
438 text-decoration: none;
439 font-size: 10pt;
440}
441div.activeFeatures .keepTogether a {
442 padding-left: 0px;
443}
444div.activeFeatures a span.payoff {
445 display: block;
446 font-size: 13pt;
447 font-weight: lighter;
448 color: #9b9689;
449 margin: 0px;
450 padding: 0px;
451}
452/*body.ext-gecko div.activeFeatures a {
453 display: -moz-inline-box;
454}*/
455div.activeFeatures a:hover span.payoff {
456 color: #666666;
457}
458div.activeFeatures a:hover span.link {
459 /*font-weight: bold;*/
460
461}
462div.activeFeatures div.keepTogether div {
463 display: inline-block;
464 padding-right: 15px;
465}
466/*body.ext-gecko div.activeFeatures div.keepTogether div {
467 display: -moz-inline-box;
468}*/
469div.activeFeatures div.createAccountLink {
470 display: inline-block;
471 width: 282;
472 height: 65px;
473 /* background-image: url(../images/old/home/register.png);*/
474
475 margin-right: 20px;
476}
477/*body.ext-gecko div.activeFeatures div.createAccountLink {
478 display: -moz-inline-box;
479}*/
480div.activeFeatures a.createAccountLink {
481 position: relative;
482 top: -92px;
483 left: 5px;
484}
485div.activeFeatures div.createAccountLink a.createAccountLink span.payoff {
486 margin-top: 23px;
487 margin-left: 40px;
488 font-size: 17pt;
489 color: #64626c;
490}
491div.activeFeatures div.createAccountLink a.createAccountLink span.link {
492 padding-left: 40px;
493 padding-right: 50px;
494 padding-bottom: 10px;
495 font-size: 12pt;
496}
497div.activeFeatures div.createAccountLink:hover {
498 /*background-image: url(../images/old/home/register_selected.png);*/
499
500}
501div.activeFeatures div.createAccountLink:hover a.createAccountLink span.payoff {
502 color: #54535a;
503}
504div.activeFeatures div.createAccountLink:hover a.createAccountLink span.link {
505 color: white;
506}
507/*
508div.activeFeatures div.screenshotLink {
509 background: url(../images/old/home/look.png) no-repeat 0 -3px;
510}
511
512div.activeFeatures div.offlineLink {
513 background: url(../images/old/home/download.png) no-repeat 10px -4px;
514}
515*/
516div.createAccountLink canvas {
517 width: 282px;
518 height: 93px;
519}
520div.activeFeatures .keepTogether canvas {
521 width: 46px;
522 height: 46px;
523 vertical-align: bottom;
524}
525/* @end */
526/* @end */
527/* @group Footer */
528div.pageHeaderAndBody {
529 height: 100%;
530}
531body > div.pageHeaderAndBody {
532 height: auto;
533 min-height: 100%;
534}
535div#pageBody {
536 min-width: 1013px;
537 padding-bottom: 90px;
538}
539div.pageFooter {
540 margin-top: -90px;
541 height: 90px;
542 clear: both;
543}
544div.footerWrapper {
545 clear: both;
546 padding-top: 10px;
547}
548div.footerContent {
549 background-color: #eaebe6;
550 padding: 20px;
551 font-size: 8pt;
552}
553/*div.pageFooter div.footerContent div.footerStarIcon {*/
554div.pageFooter div.footerContent canvas.footerStarIcon {
555 /* background-image: url(../images/old/footer/star.png);*/
556
557 width: 40px;
558 height: 40px;
559 float: left;
560}
561div.pageFooter div.footerContent span.copyright {
562 padding-left: 10px;
563 color: #a0a0a0;
564}
565div.pageFooter div.footerContent a {
566 padding-left: 50px;
567 display: block;
568 color: #888888;
569 font-weight: bold;
570 text-decoration: none;
571}
572div.pageFooter div.footerContent span.applicationVersion {
573 padding: 8px;
574 color: #888888;
575 background-color: #d2d2d2;
576 position: relative;
577 top: -40px;
578 float: right;
579}
580/* @end */
581/* @group Javascript Alert */
582div#javaScriptAlert div.mask {
583 position: fixed;
584 top: 0px;
585 left: 0px;
586 right: 0px;
587 bottom: 0px;
588 background-color: black;
589 z-index: 1001;
590 -moz-opacity: 0.7;
591 opacity: .70;
592 filter: alpha(opacity=70);
593}
594div#javaScriptAlert div.header {
595 height: 34px;
596 width: 468;
597 background-image: url(../images/old/alert/header.png);
598}
599div#javaScriptAlert div.body {
600 background-image: url(../images/old/alert/body.png);
601 padding: 0px 20px 10px 20px;
602}
603/*
604div#javaScriptAlert div.body div.alert {
605 padding-left: 100px;
606 background: url(../images/old/alert/alert.png) no-repeat;
607}
608*/
609/*div#javaScriptAlert div.body img.alert {*/
610div#javaScriptAlert div.body div.alertLogo {
611 float: left;
612 background-image: url(../images/old/alert/alert.png);
613 width: 88px;
614 height: 88px;
615}
616div#javaScriptAlert div.body div.alert {
617 padding-left: 100px;
618}
619div#javaScriptAlert div.footer {
620 height: 34px;
621 width: 468;
622 background-image: url(../images/old/alert/footer.png);
623}
624div#javaScriptAlert div.message {
625 position: relative;
626 top: -150px;
627 z-index: 1002;
628 /*
629 left: 100px;
630 right: 100px;
631*/
632
633 margin-left: auto;
634 margin-right: auto;
635 max-width: 468px;
636}
637div#javaScriptAlert div.message h1 {
638 font-size: 16pt;
639 margin: 0px;
640 color: #ff5930;
641}
642div#javaScriptAlert div.message p {
643 margin-top: 0px;
644 color: #999999;
645}
646div#javaScriptAlert div.message h3 {
647 font-size: 12pt;
648 margin-bottom: 0px;
649 color: #ff5930;
650}
651div#javaScriptAlert div.message h5 {
652 margin: 0px;
653 color: #999999;
654}
655/* @end */
656/* @group Components
657 */
658/* @group LoginProgress */
659div.LoginProgress {
660 position: relative;
661 left: -190px;
662 top: -100px;
663 width: 380px;
664 height: 200px;
665 /* background: url(../images/old/loginProgress/background.png);*/
666
667 background-color: #d7d7c0;
668 -webkit-border-radius: 20px;
669 -moz-border-radius: 20px;
670 border-radius: 20px;
671 -webkit-box-shadow: 5px 5px 7px rgba(0, 0, 0, 0.6);
672 -moz-box-shadow: 5px 5px 7px rgba(0, 0, 0, 0.6);
673 box-shadow: 5px 5px 7px rgba(0, 0, 0, 0.6);
674}
675div.LoginProgress div.header {
676 height: 40px;
677}
678div.LoginProgress div.header h3 {
679 font-size: 12pt;
680 font-weight: normal;
681 margin: 0px;
682 color: #777777;
683 padding-top: 13px;
684 padding-left: 18px;
685}
686div.LoginProgress div.body {
687 height: 120px;
688 overflow: auto;
689 padding-left: 20px;
690 padding-right: 20px;
691 background-color: #f1f1e9;
692 /*
693 margin-left: 19px;
694 margin-right: 18px;
695*/
696
697}
698div.LoginProgress div.body div.img {
699 margin: 10px;
700 width: 50px;
701 height: 50px;
702 float: left;
703}
704div.LoginProgress div.body div.img.ALERT {
705 /* background-image: url(../images/old/simpleMessageBox/Alert.png);*/
706
707 background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9955), to(#ff6622), color-stop(1, #333333));
708 background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ff9955);
709 -webkit-border-radius: 25px;
710 -moz-border-radius: 25px;
711 border-radius: 25px;
712}
713div.LoginProgress div.body div.img.ALERT canvas {
714 width: 50px;
715 height: 50px;
716 /*background-image: url(../images/old/simpleMessageBox/excalmationPoint.png); */
717
718}
719div.LoginProgress div.body div.loadingBar {
720 position: relative;
721 top: 51px;
722 left: 60px;
723}
724div.LoginProgress div.body div.errorBox p {
725 color: #787872;
726 padding-top: 20px;
727 padding-left: 80px;
728}
729div.LoginProgress div.footer {
730 margin-left: 19px;
731 margin-right: 18px;
732}
733div.LoginProgress div.footer a {
734 text-decoration: none;
735 text-align: center;
736 color: #787872;
737 display: block;
738 font-weight: bold;
739 font-size: 11pt;
740 width: 100px;
741 margin-top: 11px;
742 margin-left: auto;
743 margin-right: auto;
744}
745div.LoginProgress div.footer div.button.default {
746 text-decoration: underline;
747}
748div.LoginProgress div.buttonArea {
749 text-align: center;
750}
751div.LoginProgress div.button {
752 display: inline-block;
753}
754div.LoginProgress div.footer a:hover {
755 color: #515247;
756}
757/* @end */
758/* @group SimpleMessagePanel */
759div.SimpleMessagePanel {
760 position: relative;
761 left: -225px;
762 top: -70px;
763 width: 450px;
764 height: 140px;
765 /*
766 background: url(../images/old/loginProgress/background.png);
767*/
768
769}
770div.SimpleMessagePanel div.header {
771 height: 17px;
772 background: url(../images/old/simpleMessageBox/background_header.png) no-repeat;
773}
774div.SimpleMessagePanel div.body {
775 /*
776 height: 120px;
777 overflow: auto;
778 margin-left: 19px;
779 margin-right: 18px;
780*/
781
782 background: url(../images/old/simpleMessageBox/background_body.png) repeat-y;
783 padding-left: 25px;
784 padding-right: 25px;
785 padding-top: 10px;
786}
787div.SimpleMessagePanel div.body h3 {
788 font-size: 14pt;
789 font-weight: normal;
790 margin: 0px;
791 padding-top: 4px;
792 color: #787872;
793}
794div.SimpleMessagePanel div.body div.img {
795 width: 66px;
796 height: 60px;
797 float: left;
798}
799div.SimpleMessagePanel div.body p {
800 margin: 0;
801 font-size: 10pt;
802 font-weight: normal;
803 color: #787872;
804 padding-top: 10px;
805 padding-bottom: 5px;
806 line-height: 1.3;
807}
808div.SimpleMessagePanel div.body div.img.ALERT {
809 background: url(../images/old/simpleMessageBox/Alert.png) no-repeat;
810}
811div.SimpleMessagePanel div.body div.img.INFO {
812 background: url(../images/old/simpleMessageBox/Info.png) no-repeat;
813}
814div.SimpleMessagePanel div.body div.buttonArea {
815 height: 40px;
816 clear: both;
817}
818div.SimpleMessagePanel div.body div.buttonArea > div {
819 float: right;
820 margin-left: 15px;
821 margin-top: 10px;
822}
823div.SimpleMessagePanel div.footer {
824 height: 25px;
825 background: url(../images/old/simpleMessageBox/background_footer.png) no-repeat;
826}
827div.SimpleMessagePanel div.passphrase {
828 padding-left: 65px;
829}
830div.SimpleMessagePanel div.passphrase input {
831 width: 250px;
832 font-size: 14pt;
833 border: 1px solid #bb4924;
834 color: #333366;
835 background-color: white;
836 padding: 2px 5px;
837 height: 28px;
838}
839div.SimpleMessagePanel div.progressBarWrapper {
840 margin-left: 80px;
841}
842/* @end */
843/* @group Button */
844div.button_wrapper {
845 height: 32px;
846 background: url(../images/old/button/default_left.png) no-repeat;
847 cursor: pointer;
848}
849div.button_wrapper.hover {
850 background: url(../images/old/button/hover_left.png) no-repeat;
851}
852div.button_wrapper.clicked {
853 background: url(../images/old/button/clicked_left.png) no-repeat;
854}
855div.button_bodyWrapper {
856 height: 32px;
857 margin-left: 6px;
858 padding-right: 6px;
859 background: url(../images/old/button/default_main.png) repeat-x right 0;
860}
861div.button_wrapper.hover div.button_bodyWrapper {
862 background: url(../images/old/button/hover_main.png) repeat-x right 0;
863}
864div.button_wrapper.clicked div.button_bodyWrapper {
865 background: url(../images/old/button/clicked_main.png) repeat-x right 0;
866}
867div.button_body {
868 text-align: center;
869 min-width: 60px;
870 padding: 0px 7px;
871 padding-top: 8px;
872}
873div.button_body span {
874 font-size: 11pt;
875 color: white;
876}
877div.button_wrapper.default div.button_body span {
878 font-weight: bold;
879}
880/*
881div.button_footer {
882 margin: 0px;
883 height: 31px;
884 width: 6px;
885 background: green url(../images/old/button/default_right.png) no-repeat;
886}
887*/
888/* @end */
889/* @group Password enthropy */
890input.entropyLevelIndicator {
891 background: url(../images/old/passwordField/background.png) no-repeat 0 26px;
892}
893div.passwordEntropyWrapper {
894 padding: 0px;
895 border: 1px solid #bb4924;
896 border-top: 0px;
897 margin-bottom: 4px;
898 background-color: white;
899 margin-right: 3px;
900 margin-top: -2;
901}
902div.passwordEntropy {
903 height: 4px;
904 font-size: 1pt;
905 background: url(../images/old/entropyBackground.gif) repeat-x 0 0;
906 line-height: 3px;
907}
908/* @end */
909/* @end */
910/* @group Main page */
911/* @group User Info Box */
912div.userInfoBox {
913 position: absolute;
914 width: 160px;
915 height: 120px;
916 top: 100px;
917 left: 15px;
918 /*background-image: url(../images/old/main/userInfoBackground.png); */
919
920 background-color: #ff9955;
921 background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9a56), to(#ff6723), color-stop(1, #333333));
922 background: -moz-linear-gradient(0% 100% 90deg, #ff6723, #ff9a56);
923 -webkit-border-radius: 10px;
924 -moz-border-radius: 10px;
925 border-radius: 10px;
926 -webkit-box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6);
927 -moz-box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6);
928 box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6);
929 color: white;
930}
931div.userInfoBox div.body {
932 padding: 0px 12px;
933}
934div.userInfoBox div.header {
935 height: 30px;
936}
937div.userInfoBox div.header h1 {
938 font-size: 8pt;
939 font-weight: normal;
940 margin: 0px;
941 padding-top: 12px;
942 padding-left: 12px;
943}
944div.userInfoBox div.header a.lockButton {
945 position: absolute;
946 top: 8px;
947 right: 12px;
948 display: block;
949 width: 15px;
950 height: 20px;
951 text-decoration: none;
952 background: url(../images/old/lock/unlocked.png) no-repeat -5px -2px;
953}
954div.userInfoBox div.header a.lockButton:hover {
955 background: url(../images/old/lock/unlocked_hover.png) no-repeat -5px -2px;
956}
957div.userInfoBox.locked {
958 z-index: 19001;
959}
960div.modalDialogMask.userInfoBoxMask {
961 -moz-opacity: 0.0;
962 opacity: .0;
963 filter: alpha(opacity=0);
964 z-index: 19000;
965}
966div.userInfoBox.locked div.header a.lockButton {
967 background: url(../images/old/lock/locked.png) no-repeat -5px -2px;
968}
969div.userInfoBox.locked div.header a.lockButton:hover {
970 background: url(../images/old/lock/locked_hover.png) no-repeat -5px -2px;
971}
972div.userInfoBox div.body h3 {
973 font-size: 11pt;
974 font-weight: bold;
975 margin: 0px;
976}
977div.userInfoBox div.body ul {
978 /* #####*/
979
980 list-style-image: url(../images/old/main/userInfoBullet.png);
981 font-size: 8pt;
982 padding: 0px;
983 margin: 4px 0px;
984 list-style-position: inside;
985 text-shadow: #000000 0 0 0;
986}
987div.userInfoBox div.body ul li span.number {
988 font-weight: bold;
989 padding-right: 3px;
990}
991div.userInfoBox div.body a {
992 display: block;
993 margin-top: 8
994 px;
995 border-top: 1px solid white;
996 padding-top: 6px;
997 font-size: 10pt;
998 font-weight: bold;
999 color: #d15a22;
1000 text-decoration: none;
1001 border-color: #fe9a5f;
1002}
1003div.userInfoBox div.body a:hover {
1004 color: #8c3b15;
1005}
1006div.userInfoBox.locked div.body a {
1007 display: none;
1008}
1009/* @end */
1010/* @group Message Box */
1011div.messageBox {
1012 position: absolute;
1013 width: 409px;
1014 height: 29px;
1015 top: 23px;
1016 left: 204px;
1017 background: url(../images/old/main/messageBoxBackground.png);
1018}
1019div.messageBox h3 {
1020 display: inline-block;
1021 color: #342f6b;
1022 font-weight: bold;
1023 margin: 7px 2px 0px 12px;
1024 font-size: 10pt;
1025}
1026body.ext-gecko div.messageBox h3 {
1027 display: -moz-inline-box;
1028}
1029div.messageBox h1 {
1030 color: #342f6b;
1031 display: inline;
1032 font-weight: normal;
1033 margin: 0px 1px;
1034 font-size: 9pt;
1035}
1036div.messageBox a {
1037 display: block;
1038 width: 20px;
1039 height: 20px;
1040 float: right;
1041 position: absolute;
1042 right: 5px;
1043 top: 4px;
1044 background-image: url(../images/old/main/messageBoxCloseButton.png);
1045}
1046div.messageBox a:hover {
1047 background-image: url(../images/old/main/messageBoxCloseButtonActive.png);
1048}
1049/* @end */
1050/* @group Side panels */
1051div.sidePanels {
1052 /*
1053 position: relative;
1054 top: 110px;
1055*/
1056
1057 float: left;
1058 margin-top: 106px;
1059 margin-left: 20px;
1060 width: 160px;
1061}
1062/* @group Tab Side Panel */
1063div.tabSidePanel {
1064 margin-right: -10px;
1065 /*
1066 position: absolute;
1067 width: 250px;
1068 height: 250px;
1069 top: 250px;
1070 left: 10px;
1071*/
1072
1073}
1074div.tabSidePanel ul {
1075 margin: 0px;
1076 padding-left: 0px;
1077 list-style-type: none;
1078 color: #f78b46;
1079}
1080/* @group Main tabs */
1081div.tabSidePanel ul.mainTabs {
1082 margin: 0px;
1083}
1084div.tabSidePanel ul.mainTabs li {
1085 /*margin-bottom: 6px;*/
1086
1087}
1088div.tabSidePanel ul.mainTabs li a {
1089 display: block;
1090 line-height: 30px;
1091 height: 43px;
1092 padding-left: 40px;
1093 color: #ff6621;
1094 margin: 0px;
1095 font-weight: normal;
1096 font-size: 13pt;
1097 text-decoration: none;
1098}
1099div.tabSidePanel ul.mainTabs li div.selectionHighlighter {
1100 display: none;
1101}
1102div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter {
1103 display: block;
1104 position: absolute;
1105 left: 154px;
1106 margin-top: -43px;
1107}
1108/*
1109div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter div.selectionHighlighterIcon {
1110 background-image: url(../images/main/tabs/selectionHighligher.png);
1111 width: 50px;
1112 height: 34px;
1113 float: left;
1114 z-index: 35000;
1115 border: 1px solid red;
1116}
1117*/
1118div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter a.add {
1119 font-size: 14pt;
1120 font-weight: bold;
1121 position: relative;
1122 top: -34px;
1123 right: 16px;
1124 background: none;
1125 color: #c0531b;
1126 padding-left: 15px;
1127}
1128div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter a.add:hover {
1129 color: white;
1130}
1131div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter a.add span {
1132 font-size: 8pt;
1133 vertical-align: middle;
1134}
1135div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter a.add h3 {
1136 display: inline;
1137 padding-left: 5px;
1138}
1139div.tabSidePanel ul.mainTabs li.cards.selected a {
1140 margin-left: -10px;
1141 padding-left: 50px;
1142 color: white;
1143 background: url(../images/old/main/tabs/cardsBackground.png) -9px -14px;
1144}
1145div.tabSidePanel ul.mainTabs li.cards.selected a:hover {
1146 background: url(../images/old/main/tabs/cardsBackground.png) -9px -14px;
1147}
1148div.tabSidePanel ul.mainTabs li.cards a {
1149 background: url(../images/old/main/tabs/cardsBackground.png) -19px -63px;
1150}
1151div.tabSidePanel ul.mainTabs li.cards a:hover {
1152 background: url(../images/old/main/tabs/cardsBackground.png) -19px -110px;
1153}
1154div.tabSidePanel ul.mainTabs li.directLogins.selected a {
1155 margin-left: -10px;
1156 padding-left: 50px;
1157 color: white;
1158 /* background: url(../images/old/main/tabs/directLoginBackground.png) 0 -1px;*/
1159
1160 background: url(../images/old/main/tabs/directLoginBackground.png) -9px -14px;
1161}
1162div.tabSidePanel ul.mainTabs li.directLogins.selected a:hover {
1163 color: white;
1164 /* background: url(../images/old/main/tabs/directLoginBackground.png) 0 -1px;*/
1165
1166 background: url(../images/old/main/tabs/directLoginBackground.png) -9px -14px;
1167}
1168div.tabSidePanel ul.mainTabs li.directLogins a {
1169 /* background: url(../images/old/main/tabs/directLoginBackground.png) 0 -34px;*/
1170
1171 background: url(../images/old/main/tabs/directLoginBackground.png) -19px -63px;
1172}
1173div.tabSidePanel ul.mainTabs li.directLogins a:hover {
1174 /* background: url(../images/old/main/tabs/directLoginBackground.png) 0 -67px;*/
1175
1176 background: url(../images/old/main/tabs/directLoginBackground.png) -19px -110px;
1177}
1178/* @end */
1179/* @group Other tabs */
1180div.tabSidePanel ul.otherTabs {
1181 margin: 10px 0px;
1182}
1183div.tabSidePanel ul.otherTabs li {
1184 margin-top: -4px;
1185}
1186div.tabSidePanel ul.otherTabs li div.selectionHighlighter {
1187 display: none;
1188}
1189div.tabSidePanel ul.otherTabs li.selected div.selectionHighlighter {
1190 display: block;
1191 position: absolute;
1192 left: 154px;
1193 margin-top: -42px;
1194}
1195div.tabSidePanel ul.otherTabs a {
1196 display: block;
1197 line-height: 36px;
1198 height: 43px;
1199 padding-left: 40px;
1200 color: #ff6621;
1201 text-decoration: none;
1202 /* background: url(../images/old/main/tabs/itemsBackground.png) -10px -49px;*/
1203
1204}
1205div.tabSidePanel ul.otherTabs li.selected a {
1206 /*background: url(../images/old/main/tabs/itemsBackground.png) 0 -1px; */
1207
1208 /*background: url(../images/old/main/tabs/itemsBackground.png) 0 -67px; */
1209
1210 margin-left: -10px;
1211 padding-left: 50px;
1212 background: url(../images/old/main/tabs/itemsBackground.png) 1px -96px;
1213 color: white;
1214}
1215div.tabSidePanel ul.otherTabs a:hover {
1216 /*background: url(../images/old/main/tabs/itemsBackground.png) 0 -34px; */
1217
1218 background: url(../images/old/main/tabs/itemsBackground.png) -10px -49px;
1219}
1220/* @end */
1221/* @end */
1222/* @group Tag Side Panel */
1223div.tagSidePanel {
1224 /*
1225 position: relative;
1226 width: 250px;
1227 min-height: 100px;
1228 left: 10px;
1229*/
1230
1231 margin-right: -8px;
1232}
1233div.tagSidePanel div.header {
1234 height: 50px;
1235 background-image: url(../images/old/main/tabs/tagsBackground.png);
1236}
1237div.tagSidePanel div.header h1 {
1238 padding-left: 52px;
1239 padding-top: 14px;
1240 font-size: 14pt;
1241 font-weight: normal;
1242 color: #888888;
1243}
1244div.tagSidePanel div.body {
1245 background: url(../images/old/main/tabs/tagsBackground.png) -255px;
1246}
1247div.tagSidePanel div.footer {
1248 height: 10px;
1249 background: url(../images/old/main/tabs/tagsBackground.png) -510px -40px;
1250}
1251div.tagSidePanel ul.tags {
1252 margin: 0px;
1253 list-style-type: none;
1254 padding: 0px;
1255}
1256div.tagSidePanel ul.tags li a {
1257 display: block;
1258 font-size: 9pt;
1259 text-decoration: none;
1260 color: #ff6621;
1261 padding: 0px 4px 0px 15px;
1262 line-height: 20px;
1263}
1264div.tagSidePanel ul.tags li a:hover {
1265 background-color: #dddddd;
1266}
1267div.tagSidePanel ul.tags li span.tagCardinality {
1268 float: right;
1269 font-size: 8pt;
1270 color: #999999;
1271 margin-right: 15px;
1272 margin-top: -17px;
1273}
1274div.tagSidePanel ul.tags li.selected a {
1275 background-color: #d4d5cf;
1276}
1277div.tagSidePanel ul.tags li.selected a:hover {
1278 background-color: #d4d5cf;
1279}
1280div.tagSidePanel ul.tags li.selected a {
1281 font-weight: bold;
1282}
1283/* @end */
1284/* @group Group Side Panel */
1285div.groupSidePanel {
1286 margin-right: -10px;
1287 /*
1288 position: relative;
1289 width: 250px;
1290 min-height: 100px;
1291 left: 10px;
1292*/
1293
1294}
1295div.groupSidePanel div.header {
1296 height: 50px;
1297 background-image: url(../images/old/main/tabs/groupsBackground.png);
1298}
1299div.groupSidePanel div.header h1 {
1300 padding-left: 52px;
1301 padding-top: 14px;
1302 font-size: 14pt;
1303 font-weight: normal;
1304 color: white;
1305}
1306div.groupSidePanel div.header a {
1307 float: right;
1308 margin-top: -30px;
1309 margin-right: 20px;
1310 text-decoration: none;
1311 color: #666666;
1312 font-size: 9pt;
1313 line-height: 18px;
1314}
1315div.groupSidePanel div.header a:hover {
1316 color: #444444;
1317}
1318div.groupSidePanel div.body {
1319 background: url(../images/old/main/tabs/groupsBackground.png) -255px;
1320}
1321div.groupSidePanel div.footer {
1322 height: 10px;
1323 background: url(../images/old/main/tabs/groupsBackground.png) -510px -39px;
1324}
1325div.groupSidePanel ul.groups {
1326 margin: 0px;
1327 list-style-type: none;
1328 padding: 0px;
1329}
1330div.groupSidePanel ul.groups li a {
1331 display: block;
1332 font-size: 9pt;
1333 text-decoration: none;
1334 color: white;
1335 padding: 0px 4px 0px 15px;
1336 line-height: 20px;
1337}
1338div.groupSidePanel ul.groups li a:hover {
1339 background-color: #aaaaaa;
1340}
1341div.groupSidePanel ul.groups li span.groupCardinality {
1342 float: right;
1343 font-size: 8pt;
1344 color: #dddddd;
1345 margin-right: 15px;
1346 margin-top: -17px;
1347}
1348div.groupSidePanel ul.groups li.selected a {
1349 background-color: #bbbbbb;
1350}
1351div.groupSidePanel ul.groups li.selected a:hover {
1352 background-color: #bbbbbb;
1353}
1354div.groupSidePanel ul.groups li.selected a {
1355 font-weight: bold;
1356}
1357/* @end */
1358/* @end */
1359/* @group MainPanels */
1360div.mainPanels {
1361 float: left;
1362 width: 833px;
1363 margin-top: -38px;
1364 /*
1365 position: relative;
1366 width: 100%;
1367 min-height: 600px;
1368 top: -40px;
1369 left: 250px;
1370*/
1371
1372}
1373div.mainFooter {
1374 clear: both;
1375}
1376/* @end */
1377/* @group Grids */
1378/* @group grid Component */
1379/* @group delete */
1380/*div.body div.rows table.rows tbody tr td.delete */
1381div.delete, div.new {
1382 padding-left: 5px;
1383 height: 19px;
1384}
1385div.new span, div.delete span {
1386 margin: 0px;
1387 padding: 0px;
1388 border: 0px;
1389 display: inline-block;
1390 height: 19px;
1391 padding-right: 6px;
1392}
1393div.new span a, div.delete span a {
1394 white-space: nowrap;
1395}
1396div.delete:hover {
1397 background: url(../images/old/delete_background_left.png) no-repeat 0;
1398}
1399div.delete:hover span {
1400 background: url(../images/old/delete_background.png) no-repeat right 0;
1401}
1402div.new:hover {
1403 background: url(../images/old/new_background_left.png) no-repeat 0;
1404}
1405div.new:hover span {
1406 background: url(../images/old/new_background.png) no-repeat right 0;
1407}
1408/*
1409tr.selected div.delete {
1410 background: url(../images/old/delete_background_left.png) no-repeat 0;
1411}
1412tr.selected div.delete span {
1413 background: url(../images/old/delete_background.png) no-repeat right 0;
1414}
1415*/
1416div.body div.rows table.rows tbody tr td.delete div.delete span a {
1417 visibility: hidden;
1418 font-size: 8pt;
1419 vertical-align: -13px;
1420 color: black;
1421}
1422div.body div.rows table.rows tbody tr.selected td.delete div.delete span a {
1423 visibility: visible;
1424}
1425div.body div.rows table.rows tbody tr:hover td.delete div.delete span a {
1426 visibility: visible;
1427}
1428div.body div.rows table.rows tbody tr:hover td.delete div.delete:hover span a {
1429 color: white;
1430}
1431/*
1432div.body div.rows table.rows tbody tr.selected td.delete div.delete span a {
1433 color: white;
1434}
1435*/
1436/* @end */
1437/* @group header */
1438div.gridComponent table.rows thead tr th {
1439 text-align: left;
1440 height: 30px;
1441 vertical-align: bottom;
1442}
1443div.gridComponent table.rows thead tr th.sortable span {
1444 cursor: pointer;
1445}
1446div.gridComponent table.rows thead tr th.sortable span a {
1447 margin-left: 5px;
1448 padding-left: 10px;
1449}
1450div.gridComponent table.rows thead tr th.directLoginTH {
1451 width: 420px;
1452}
1453div.gridComponent table.rows thead tr th.latestUpdateTH {
1454 width: 100px;
1455}
1456div.gridComponent table.rows thead tr th.commandsTH {
1457 width: 150px;
1458}
1459div.gridComponent table.rows thead a {
1460 text-decoration: none;
1461}
1462div.gridComponent table.rows thead span {
1463 font-weight: normal;
1464 font-size: 9pt;
1465 line-height: 20px;
1466}
1467div.gridComponent div.header div.headerSlot {
1468 float: right;
1469}
1470/* @end */
1471div.mainPanels div.gridComponent div.body table.rows td.favicon {
1472 padding-left: 25px;
1473}
1474div.mainPanels div.gridComponent div.body table.rows td.favicon img {
1475 width: 16px;
1476 height: 16px;
1477 border: 0px;
1478}
1479/* @end */
1480/* @group Card Grid */
1481/* @group DirectLogin links */
1482div.gridComponent th.directLoginTH span {
1483 margin-left: 7px;
1484}
1485td.card_directLogins div {
1486 display: inline-table;
1487}
1488td.card_directLogins span {
1489 display: inline-block;
1490}
1491/*
1492td.card_directLogins a {
1493 display: inline-table;
1494 height: 19px;
1495
1496 padding-right: 7px;
1497}
1498
1499td.card_directLogins a:hover {
1500 background: url(../images/old/directLink_background.png) right 0;
1501}
1502*/
1503div.card_directLogin {
1504 display: inline-block;
1505 height: 19px;
1506 padding-left: 7px;
1507}
1508div.card_directLogin_ellipses span {
1509 padding-bottom: 2px;
1510}
1511div.card_directLogin div.card_directLogin_body {
1512 display: inline-block;
1513 height: 19px;
1514 padding-right: 8px;
1515 background-position: left;
1516}
1517div.card_directLogin div.card_directLogin_body a {
1518 vertical-align: -14px;
1519}
1520/*div.card_directLogin:hover {*/
1521div.card_directLogin:hover {
1522 background: url(../images/old/directLink_background_left.png) no-repeat 0 0;
1523}
1524/*div.card_directLogin:hover div {*/
1525div.card_directLogin:hover div.card_directLogin_body {
1526 background: url(../images/old/directLink_background.png) right 0;
1527}
1528/* @group DirectLogin Popup */
1529div.DirectLoginListPopup {
1530 position: absolute;
1531 width: 184px;
1532}
1533div.DirectLoginListPopup div.DirectLoginListPopup_body {
1534 background-image: url(../images/old/directLogins_background.png);
1535 padding-top: 8px;
1536}
1537div.DirectLoginListPopup div.DirectLoginListPopup_footer {
1538 height: 8px;
1539 background-image: url(../images/old/directLogins_background_bottom.png);
1540}
1541div.DirectLoginListPopup div.DirectLoginListPopup_body ul {
1542 margin: 0px;
1543 padding-left: 13px;
1544 list-style: none;
1545}
1546div.DirectLoginListPopup div.DirectLoginListPopup_body ul li {
1547 padding-top: 4px;
1548 height: 20px;
1549 padding-right: 10px;
1550 white-space: nowrap;
1551}
1552div.DirectLoginListPopup div.DirectLoginListPopup_body ul li div {
1553 padding-right: 10px;
1554 overflow: hidden;
1555}
1556div.DirectLoginListPopup div.DirectLoginListPopup_body ul li img.favicon {
1557 padding-left: 9px;
1558 padding-right: 5px;
1559}
1560div.DirectLoginListPopup div.DirectLoginListPopup_body ul li a {
1561 text-decoration: none;
1562 color: white;
1563 font-weight: normal;
1564 font-size: 10pt;
1565 vertical-align: 3px;
1566 white-space: nowrap;
1567 padding-right: 8px;
1568}
1569div.DirectLoginListPopup div.DirectLoginListPopup_body ul li:hover {
1570 /* background-color: #a5a696;*/
1571
1572 /* background-color: #7b7d70;*/
1573
1574 background-color: rgba(123, 125, 112, 0.5);
1575}
1576div.DirectLoginListPopup div.DirectLoginListPopup_body ul li:hover a {
1577 background: url(../images/old/directLink_no_background.png) right;
1578}
1579/* @end */
1580/* @end */
1581div.mainPanels div.gridComponent div.header {
1582 /*
1583 height: 90px;
1584 background: url(../images/old/main/blocks/cardGridBackground.png) no-repeat;
1585*/
1586
1587 background: url(../images/old/main/blocks/cardGridBackground.png) no-repeat;
1588 padding-left: 40px;
1589 padding-right: 40px;
1590 padding-top: 20px;
1591 padding-bottom: 10px;
1592}
1593div.mainPanels div.gridComponent div.header form.search {
1594 height: 32px;
1595 margin: 0px;
1596}
1597div.mainPanels div.gridComponent div.header form.search div.clearSearchButton {
1598 position: absolute;
1599 margin-left: 192px;
1600 width: 22px;
1601 height: 22px;
1602 margin-top: 6px;
1603 background: url(../images/old/filter/clearFilter_notSelected.png) no-repeat;
1604}
1605div.mainPanels div.gridComponent div.header form.search div.clearSearchButton:hover {
1606 background: url(../images/old/filter/clearFilter_selected.png) no-repeat;
1607 cursor: pointer;
1608}
1609div.mainPanels div.gridComponent div.header form.search div.search {
1610 display: block;
1611 float: left;
1612 width: 217px;
1613}
1614div.mainPanels div.gridComponent div.header form.search input.search {
1615 border: 1px solid #76786a;
1616 color: #666666;
1617 font-size: 12pt;
1618 width: 100%;
1619 padding: 4px;
1620 padding-left: 24px;
1621 padding-right: 26px;
1622 background: #e8ecde url(../images/old/main/grid/search.png) no-repeat 2px 4px;
1623}
1624div.mainPanels div.gridComponent div.header form.search input.search.disabled {
1625 disabled: disabled;
1626}
1627div.mainPanels div.gridComponent div.header form.search input.search.running {
1628 background: #e8ecde url(../images/old/main/grid/running_search.gif) no-repeat 4px 5px;
1629}
1630div.mainPanels div.gridComponent div.body {
1631 clear: both;
1632 background: url(../images/old/main/blocks/cardGridBackground.png) repeat-y -836px;
1633}
1634div.mainPanels div.gridComponent div.footer {
1635 background: url(../images/old/main/blocks/cardGridBackground.png) 834px -28px;
1636 height: 35px;
1637}
1638div.mainPanels div.gridComponent div.body h1 {
1639 margin: 0px;
1640}
1641div.mainPanels div.gridComponent div.body div.rows {
1642 margin-left: 9px;
1643 margin-right: 6px;
1644 min-height: 582px;
1645 background: url(../images/old/main/blocks/cardGridStripes.png) 0 7px;
1646}
1647div.mainPanels div.gridComponent.noRows div.body table.rows thead, div.mainPanels div.gridComponent.empty div.body table.rows thead {
1648 visibility: hidden;
1649}
1650div.mainPanels div.gridComponent.empty div.body div.rows {
1651 background: #eaebe6 url(../images/old/lock/background_star.png) no-repeat center center;
1652}
1653div.mainPanels div.gridComponent.noRows div.body div.rows {
1654 background: #eaebe6;
1655}
1656div.mainPanels div.gridComponent div.body table.rows {
1657 display: block;
1658 width: 100%;
1659}
1660div.mainPanels div.gridComponent div.body table.rows tbody tr.odd.selected {
1661 background-color: #a5a696;
1662}
1663div.mainPanels div.gridComponent div.body table.rows tbody tr.even.selected {
1664 background-color: #a5a696;
1665}
1666div.mainPanels div.gridComponent div.body table.rows tbody tr.selected td a {
1667 color: #f3f4eb;
1668}
1669div.mainPanels div.gridComponent div.body table.rows tbody tr.odd {
1670 background-color: #d4d5cf;
1671}
1672div.mainPanels div.gridComponent div.body table.rows tbody tr.even {
1673 background-color: #eaebe6;
1674}
1675div.mainPanels div.gridComponent div.body table.rows tbody tr.odd:hover {
1676 background-color: #a5a696;
1677}
1678div.mainPanels div.gridComponent div.body table.rows tbody tr.even:hover {
1679 background-color: #a5a696;
1680}
1681div.mainPanels div.gridComponent div.body table.rows tbody tr td {
1682 height: 23px;
1683 max-height: 23px;
1684 /*
1685 white-space: nowrap;
1686 overflow: hidden;
1687*/
1688
1689}
1690div.mainPanels div.gridComponent div.body table.rows tbody tr td span {
1691 color: #828479;
1692 font-size: 10pt;
1693}
1694div.mainPanels div.gridComponent div.body table.rows tbody tr td a {
1695 color: #828479;
1696 font-size: 10pt;
1697 text-decoration: none;
1698}
1699div.mainPanels div.gridComponent div.body table.rows tbody tr:hover td span {
1700 color: #f3f4eb;
1701}
1702div.mainPanels div.gridComponent div.body table.rows tbody tr.selected td span {
1703 color: #f3f4eb;
1704}
1705div.mainPanels div.gridComponent div.body table.rows tbody tr:hover td a {
1706 color: #f3f4eb;
1707}
1708div.mainPanels div.gridComponent div.body table.rows tbody tr td.title a {
1709 font-weight: bold;
1710}
1711div.mainPanels div.gridComponent div.body table.rows tbody tr td img.favicon {
1712 float: right;
1713 padding-right: 6px;
1714}
1715/* @group header */
1716div.gridComponent table.rows thead img {
1717 padding-left: 10px;
1718 vertical-align: middle;
1719}
1720div.gridComponent table.rows thead tr th {
1721 background-color: #eaebe6;
1722 border-bottom: 1px solid #b3b4af;
1723}
1724div.gridComponent table.rows thead span {
1725 color: #8c8f7e;
1726}
1727div.gridComponent table.rows thead tr th.unsorted span.sortable a {
1728 background-image: url(../images/old/main/grid/unsorted.png);
1729}
1730div.gridComponent table.rows thead tr th.descending span.sortable a {
1731 background-image: url(../images/old/main/grid/descending.png);
1732}
1733div.gridComponent table.rows thead tr th.ascending span.sortable a {
1734 background-image: url(../images/old/main/grid/ascending.png);
1735}
1736div.gridComponent table.rows thead tr th.faviconTH {
1737 width: 53px;
1738}
1739div.gridComponent table.rows thead tr th.titleTH {
1740 width: 200px;
1741 max-width: 200px;
1742}
1743div.gridComponent table.rows thead tr th.deleteTH {
1744 width: 50px;
1745}
1746/* @end */
1747/* @end */
1748/* @group Direct login Grid */
1749/*
1750div.mainPanels div.directLoginGrid div.header {
1751/*
1752 height: 90px;
1753 background: url(../images/old/main/blocks/cardGridBackground.png) no-repeat;
1754* /
1755}
1756
1757div.mainPanels div.directLoginGrid div.header form.search {
1758 background: url(../images/old/main/blocks/directLoginGridBackground.png) no-repeat;
1759 padding-left: 40px;
1760 padding-top: 20px;
1761 padding-bottom: 10px;
1762 margin: 0px;
1763}
1764
1765div.mainPanels div.directLoginGrid div.header form.search input.search {
1766 border: 1px solid #76786a;
1767 color: #666666;
1768 font-size: 12pt;
1769 padding: 4px;
1770 background-color: #e8ecde;
1771}
1772
1773div.mainPanels div.directLoginGrid div.header form.search input.searchButton {
1774 background-color: #858877;
1775 border: 0px;
1776 color: white;
1777 font-size: 10pt;
1778}
1779
1780div.mainPanels div.directLoginGrid div.body {
1781 background: url(../images/old/main/blocks/directLoginGridBackground.png) repeat-y -836px;
1782}
1783
1784div.mainPanels div.directLoginGrid div.footer {
1785 background: url(../images/old/main/blocks/directLoginGridBackground.png) 834px -28px;
1786 height: 35px;
1787}
1788
1789div.mainPanels div.directLoginGrid div.body h1 {
1790 margin: 0px;
1791}
1792
1793div.mainPanels div.directLoginGrid div.body div.rows {
1794 margin-left: 9px;
1795 margin-right: 6px;
1796 min-height: 582px;
1797 background: url(../images/old/main/blocks/directLoginGridStripes.png) 0 7px;
1798}
1799
1800div.mainPanels div.directLoginGrid div.body table.rows {
1801 display: block;
1802 width: 100%;
1803}
1804
1805div.mainPanels div.directLoginGrid div.body table.rows img {
1806 border: 0px;
1807}
1808
1809div.mainPanels div.directLoginGrid div.body table.rows tbody tr.even {
1810 background-color: #787666;
1811}
1812
1813div.mainPanels div.directLoginGrid div.body table.rows tbody tr.odd {
1814 background-color: #646351;
1815}
1816
1817div.mainPanels div.directLoginGrid div.body table.rows tbody tr.odd:hover {
1818 background-color: #d1d4c6;
1819}
1820
1821div.mainPanels div.directLoginGrid div.body table.rows tbody tr.even:hover {
1822 background-color: #d1d4c6;
1823}
1824
1825div.mainPanels div.directLoginGrid div.body table.rows tbody tr td {
1826 height: 23px;
1827 color: #e1e0d6;
1828 font-size: 10pt;
1829}
1830
1831div.mainPanels div.directLoginGrid div.body table.rows tbody tr:hover td {
1832 color: #777867;
1833}
1834
1835div.mainPanels div.directLoginGrid div.body table.rows tbody tr td.title {
1836 font-weight: bold;
1837}
1838
1839div.directLoginGrid div.body table.rows tbody tr a {
1840 color: #e1e0d6;
1841 text-decoration: none;
1842}
1843
1844div.directLoginGrid div.body table.rows tbody tr:hover a {
1845 color: #777867;
1846}
1847*/
1848/* @group DirectLogin links */
1849/*
1850td.card_directLogins div {
1851 display: inline-table;
1852}
1853
1854td.card_directLogins span {
1855 display: inline-table;
1856}
1857*/
1858div.directLogin_directLogin {
1859 display: inline-block;
1860 height: 19px;
1861 padding-left: 7px;
1862}
1863div.directLogin_directLogin div.directLogin_directLogin_body {
1864 display: inline-block;
1865 height: 19px;
1866 padding-right: 8px;
1867 background-position: left;
1868}
1869div.directLogin_directLogin div.directLogin_directLogin_body a {
1870 vertical-align: -14px;
1871}
1872div.directLogin_directLogin:hover {
1873 background: url(../images/old/directLink_background_left.png) no-repeat 0 0;
1874}
1875div.directLogin_directLogin:hover div.directLogin_directLogin_body {
1876 background: url(../images/old/directLink_background.png) right 0;
1877}
1878table.rows tbody tr td div.directLogin_directLogin:hover div.directLogin_directLogin_body a {
1879 color: #f3f4eb;
1880}
1881/* @end */
1882/* @group header */
1883div.directLoginGrid table.rows thead span {
1884 color: #e1e0d6;
1885}
1886div.directLoginGrid table.rows thead tr th {
1887 background-color: #787762;
1888 border-bottom: 1px solid #999883;
1889}
1890div.directLoginGrid table.rows thead tr th.faviconTH {
1891 min-width: 53px;
1892 width: 53px;
1893}
1894div.directLoginGrid table.rows thead tr th.titleTH {
1895 min-width: 250px;
1896 width: 250px;
1897}
1898div.directLoginGrid table.rows thead tr th.titleTH span {
1899 margin-left: 7px;
1900}
1901div.directLoginGrid table.rows thead tr th.strengthTH {
1902 width: 100px;
1903}
1904div.directLoginGrid table.rows thead tr th.cardTitleTH {
1905 width: 400px;
1906}
1907div.directLoginGrid table.rows thead tr th.bookmarkableLinkTH {
1908 width: 64px;
1909}
1910div.directLoginGrid table.rows thead tr th.deleteTH {
1911 width: 50px;
1912}
1913div.directLoginGrid table.rows thead tr th.latestAccessTH {
1914 width: 100px;
1915}
1916div.directLoginGrid table.rows thead tr th.commandsTH {
1917 width: 100px;
1918}
1919/*
1920div.directLoginGrid table.rows thead a {
1921 font-weight: normal;
1922 text-decoration: none;
1923 color: #e9e9df;
1924 font-size: 9pt;
1925 line-height: 20px;
1926}
1927*/
1928div.directLoginGrid table.rows thead img {
1929 padding-left: 10px;
1930 vertical-align: middle;
1931}
1932div.directLoginGrid table.rows thead tr th.unsorted span.sortable a {
1933 background: url(../images/old/main/grid/directLogins/unsorted.png) no-repeat;
1934}
1935div.directLoginGrid table.rows thead tr th.descending span.sortable a {
1936 background: url(../images/old/main/grid/directLogins/descending.png) no-repeat;
1937}
1938div.directLoginGrid table.rows thead tr th.ascending span.sortable a {
1939 background: url(../images/old/main/grid/directLogins/ascending.png) no-repeat;
1940}
1941/* @end */
1942/* @end */
1943/* @end */
1944/* @end */
1945/* @group other Panels */
1946/* @group common styles */
1947div.subPanelTabs ul {
1948 margin: 0px;
1949 margin-right: 7px;
1950 padding: 0px;
1951}
1952div.subPanelTabs ul li {
1953 display: inline-block;
1954 vertical-align: middle;
1955 /*width: 130px; */
1956
1957 height: 50px;
1958 /*border-right: 1px solid #a5a79c;
1959 border-bottom: 1px solid #a5a79c;*/
1960
1961 border-right: 1px solid #eef0e3;
1962 border-bottom: 1px solid #d5d5bc;
1963}
1964div.subPanelTabs ul li.first:hover {
1965 /*background: url(../images/old/main/blocks/otherPanelBackground_selected.png) no-repeat -9px -5px; */
1966
1967}
1968div.subPanelTabs ul li:hover {
1969 /*background: url(../images/old/main/blocks/otherPanelBackground_selected.png) no-repeat -45px -5px; */
1970
1971 border-right: 1px solid #d5d5bc;
1972 background-color: #eef0e3;
1973}
1974div.subPanelTabs ul li a {
1975 color: #787872;
1976 text-decoration: none;
1977 display: block;
1978 text-align: center;
1979 padding-top: 15px;
1980 padding-left: 20px;
1981 padding-right: 20px;
1982 font-size: 13pt;
1983}
1984div.subPanelTabs ul li.first {
1985 /*background: url(../images/old/main/blocks/otherPanelBackground_selected.png) no-repeat -9px -5px; */
1986
1987 -webkit-border-top-left-radius: 20px;
1988 -moz-border-radius-topleft: 20px;
1989 border-top-left-radius: 20px;
1990}
1991div.subPanelTabs ul li.selected {
1992 /*background: url(../images/old/main/blocks/otherPanelBackground_selected.png) no-repeat -45px -5px; */
1993
1994 background-color: #eef0e3;
1995 border-bottom: 1px solid #eef0e3;
1996 border-right: 1px solid #d5d5bc;
1997}
1998div.subPanelTabs ul li.selected:hover {
1999 border-right: 1px solid #d5d5bc;
2000}
2001div.subPanelTabs ul li.selected a {
2002 color: #444440;
2003}
2004div.subPanelContent {
2005 padding-top: 20px;
2006 padding-left: 30px;
2007 padding-right: 30px;
2008 min-height: 280px;
2009 color: #787872;
2010 margin: 0px 6px 0 9px;
2011}
2012div.subPanelContent ul {
2013 margin: 0px;
2014 padding: 0px;
2015 list-style-type: none;
2016}
2017div.subPanelContent ul li.selected {
2018 display: block;
2019}
2020div.subPanelContent ul li {
2021 display: none;
2022}
2023div.subPanelContent h3 {
2024 margin: 0px;
2025 border: 0px;
2026 padding: 0px;
2027}
2028/* @end */
2029/* @group mainPanels otherPanel */
2030div.mainPanels div.otherPanel {
2031 margin: 5px 10px;
2032 background-color: #eef0e3;
2033 -webkit-border-radius: 20px;
2034 -moz-border-radius: 20px;
2035 border-radius: 20px;
2036 -webkit-box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6);
2037 -moz-box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6);
2038 box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6);
2039}
2040div.mainPanels div.otherPanel div.header {
2041 /*background: url(../images/old/main/blocks/otherPanelBackground.png) no-repeat; */
2042
2043 /*
2044 height: 90px;
2045*/
2046
2047 background-color: #d5d5bc;
2048 /*padding-left: 9px;
2049 padding-top: 5px; */
2050
2051 margin: 0px;
2052 margin-bottom: 0px;
2053 -webkit-border-top-left-radius: 20px;
2054 -webkit-border-top-right-radius: 20px;
2055 -moz-border-radius-topleft: 20px;
2056 -moz-border-radius-topright: 20px;
2057 border-top-left-radius: 20px;
2058 border-top-right-radius: 20px;
2059}
2060div.mainPanels div.otherPanel div.body {
2061 /*background: url(../images/old/main/blocks/otherPanelBackground.png) repeat-y -836px; */
2062
2063 margin: 0px;
2064 border: 0px;
2065 padding: 0px;
2066}
2067div.mainPanels div.otherPanel div.footer {
2068 /*background: url(../images/old/main/blocks/otherPanelBackground.png) 834px -18px; */
2069
2070 height: 45px;
2071}
2072div.mainPanels div.otherPanel div.body h1 {
2073 margin: 0px;
2074}
2075/* @end */
2076/* @group Account */
2077form.changePassphrase div.currentCredentials, form.changePassphrase div.newPassphrase {
2078 float: left;
2079 padding: 10px 20px;
2080}
2081form.changePassphrase label {
2082 display: inline-block;
2083 width: 150px;
2084}
2085form.changePassphrase div.confirm {
2086 clear: both;
2087 padding: 10px 20px;
2088}
2089form.changePassphrase div.confirm label {
2090 width: 500px;
2091}
2092div.accountPanel h3.manageOTP {
2093 margin-top: 20px;
2094 margin-left: -20px;
2095 padding-top: 10px;
2096 padding-left: 20px;
2097 border-top: 1px solid #aaaaaa;
2098}
2099/* @end */
2100/* @end */
2101/* @group Message Panel (?) */
2102/*
2103div.messagePanelWrapper div.mask {
2104 position: fixed;
2105 top: 0px;
2106 left: 0px;
2107 right: 0px;
2108 bottom: 0px;
2109
2110 background-color: black;
2111 z-index:50001;
2112
2113 -moz-opacity: 0.0;
2114 opacity:.0;
2115 filter: alpha(opacity=0);
2116/ *
2117 -moz-opacity: 0.7;
2118 opacity:.70;
2119 filter: alpha(opacity=70);
2120* /
2121}
2122
2123div.messagePanelFrame {
2124 border: 1px solid white;
2125 z-index:50002;
2126/ *
2127 width: 443px;
2128 height: 155px;
2129 position: fixed;
2130 top: 205px;
2131 left: 260px;
2132 margin-left: auto;
2133 margin-right: auto;
2134 max-width: 468px;
2135* /
2136}
2137
2138
2139div.messagePanel {
2140 position: fixed;
2141 z-index:50003;
2142 top: 0px;
2143 left: 0px;
2144/ *
2145 margin-left: auto;
2146 margin-right: auto;
2147 max-width: 468px;
2148 top: 200px;
2149 left: 250px;
2150 left: 100px;
2151 right: 100px;
2152* /
2153}
2154
2155 div.messagePanel div.header {
2156 height: 34px;
2157 width: 468;
2158 background-image: url(../images/old/alert/header.png);
2159}
2160
2161 div.messagePanel div.body {
2162 background-image: url(../images/old/alert/body.png);
2163 padding: 0px 20px 10px 20px;
2164 min-height: 100px;
2165}
2166/ *
2167div#javaScriptAlert div.body div.alert {
2168 padding-left: 100px;
2169 background: url(../images/old/alert/alert.png) no-repeat;
2170}
2171* /
2172
2173div.messagePanel div.body img.alert {
2174 float: left;
2175}
2176
2177div.messagePanel div.body div.alert {
2178 padding-left: 100px;
2179}
2180
2181 div.messagePanel div.footer {
2182 height: 34px;
2183 width: 468;
2184 background-image: url(../images/old/alert/footer.png);
2185}
2186
2187div.messagePanel div.message h1 {
2188 font-size: 16pt;
2189 margin: 0px;
2190 color: #ff5930;
2191}
2192
2193div.messagePanel div.message p {
2194 margin-top: 0px;
2195 color: #999999;
2196}
2197
2198div.messagePanel div.message h3 {
2199 font-size: 12pt;
2200 margin-bottom: 0px;
2201 color: #ff5930;
2202}
2203
2204div.messagePanel div.message h5 {
2205 margin: 0px;
2206 color: #999999;
2207}
2208
2209
2210*/
2211/* @end */
2212/* @group LoginProgress (?) */
2213/*
2214div#loginProgress {
2215 position: relative;
2216 left: -198px;
2217 top: -118px;
2218 width: 397px;
2219 height: 236px;
2220 background: url(../images/old/loginProgress/background.png);
2221}
2222
2223div#loginProgress div.header {
2224 height: 52px;
2225}
2226
2227div#loginProgress div.header h3 {
2228 font-size: 12pt;
2229 font-weight: normal;
2230 margin: 0px;
2231 color: #787872;
2232 padding-top: 25px;
2233 padding-left: 35px;
2234}
2235
2236div#loginProgress div.body {
2237 height: 120px;
2238 overflow: auto;
2239 margin-left: 19px;
2240 margin-right: 18px;
2241}
2242
2243div#loginProgress div.footer {
2244 margin-left: 19px;
2245 margin-right: 18px;
2246}
2247
2248div#loginProgress div.footer a {
2249 font-weight: bold;
2250 text-decoration: none;
2251 text-align: center;
2252 color: #787872;
2253 display: block;
2254 font-size: 11pt;
2255 width: 100px;
2256 margin-top: 13px;
2257 margin-left: auto;
2258 margin-right: auto;
2259}
2260
2261div#loginProgress div.footer a:hover {
2262 color: #515247;
2263}
2264
2265*/
2266/* @end */
2267div#modalDialogMask, div.modalDialogMask {
2268 z-index: 20000;
2269 /* position: absolute;*/
2270
2271 position: fixed;
2272 top: 0;
2273 left: 0;
2274 -moz-opacity: 0.5;
2275 opacity: .50;
2276 filter: alpha(opacity=50);
2277 /* background-color: #cccccc;*/
2278
2279 background-color: #000000;
2280 width: 100%;
2281 height: 100%;
2282 zoom: 1;
2283}
2284div#modalDialogFrame, div.modalDialogFrame {
2285 position: absolute;
2286 /* border: 1px solid white;*/
2287
2288 -moz-opacity: 0.5;
2289 opacity: .50;
2290 filter: alpha(opacity=50);
2291 background-color: #333333;
2292 z-index: 20001;
2293 -webkit-border-radius: 20px;
2294 -moz-border-radius: 20px;
2295 border-radius: 20px;
2296}
2297div#modalDialog, div.modalDialog {
2298 z-index: 20001;
2299}
2300/*div#modalDialog.scrollable,*/
2301div.modalDialog.scrollable {
2302 position: absolute;
2303 top: 0;
2304 left: 50%;
2305}
2306/*div#modalDialog.fixed,*/
2307div.modalDialog.fixed {
2308 position: fixed;
2309 top: 40%;
2310 left: 50%;
2311}
2312div#modalDialog div, div.modalDialog div {
2313 z-index: 20002;
2314 list-style-type: circle;
2315}
2316div.modalDialogMask.simpleMessagePanelMask {
2317 z-index: 20010;
2318}
2319div.modalDialogFrame.simpleMessagePanelMask {
2320 z-index: 20011;
2321}
2322div.modalDialog.simpleMessagePanelMask {
2323 z-index: 20011;
2324}
2325div.modalDialog.simpleMessagePanelMask div {
2326 z-index: 20012;
2327}
2328/* @group Bookmarklet */
2329div.bookmarklet div.bookmarklet_link {
2330 /*
2331 padding-top: 5px;
2332 padding-left: 4px;
2333 padding-right: 3px;
2334
2335 float: right;
2336 margin-top: 12px;
2337 margin-right: 13px;
2338*/
2339
2340 height: 34px;
2341}
2342div.bookmarklet div.bookmarklet_link a {
2343 color: #838975;
2344 text-decoration: none;
2345 font-weight: bold;
2346 font-size: 10pt;
2347 /*
2348 display: block;
2349 text-align: right;
2350 padding-top: 7px;
2351 padding-right: 11px;
2352 padding-bottom: 6px;
2353*/
2354
2355}
2356div.bookmarklet div.bookmarklet_link a div.icon {
2357 background: url(../images/old/bookmarklet/placeholder_icon.png) no-repeat 0 0;
2358 float: left;
2359 width: 34px;
2360 height: 34px;
2361}
2362div.bookmarklet div.bookmarklet_link a:hover div.icon {
2363 background: url(../images/old/bookmarklet/placeholder_selected_icon.png) no-repeat 0 0;
2364}
2365div.bookmarklet div.bookmarklet_link a div.text {
2366 display: block;
2367 float: right;
2368 background: url(../images/old/bookmarklet/placeholder.png) no-repeat right 0;
2369 white-space: nowrap;
2370 height: 34px;
2371}
2372div.bookmarklet div.bookmarklet_link a:hover div.text {
2373 background: url(../images/old/bookmarklet/placeholder_selected.png) no-repeat right 0;
2374}
2375div.bookmarklet div.bookmarklet_link a div.text span {
2376 display: block;
2377 padding-top: 10px;
2378 padding-right: 10px;
2379 padding-left: 6px;
2380 clear: both;
2381}
2382/* @end */
2383/* @group Tooltip */
2384/*
2385div#Clipperz_PM_UI_Common_Components_Tooltip_wrapperNode {
2386 position: absolute;
2387 top: 0px;
2388 left: 0px;
2389}
2390*/
2391div.tooltip {
2392 position: absolute;
2393 z-index: 30001;
2394}
2395div.tooltip div.tooltip_body {
2396 position: absolute;
2397}
2398div.tooltip div.tooltip_arrow {
2399 position: absolute;
2400}
2401div.tooltip.BELOW div.tooltip_arrow {
2402 background: url(../images/old/tooltips/top_arrow.png) no-repeat;
2403}
2404div.tooltip.ABOVE div.tooltip_arrow {
2405 background: url(../images/old/tooltips/bottom_arrow.png) no-repeat;
2406}
2407div.tooltip.LEFT div.tooltip_arrow {
2408 background: url(../images/old/tooltips/right_arrow.png) no-repeat;
2409}
2410div.tooltip.RIGHT div.tooltip_arrow {
2411 /* margin-top: 7px;*/
2412
2413 background: url(../images/old/tooltips/left_arrow.png) no-repeat;
2414}
2415div.tooltip.RIGHT div.tooltip_body {
2416 /* padding-left: 13px;*/
2417
2418}
2419div.tooltip div.tooltip_body div.tooltip_text {
2420 width: 171px;
2421 background: url(../images/old/tooltips/body.png) no-repeat center top;
2422}
2423div.tooltip.LEFT div.tooltip_body div.tooltip_text, div.tooltip.RIGHT div.tooltip_body div.tooltip_text {
2424 min-height: 45px;
2425}
2426div.tooltip div.tooltip_body span {
2427 display: block;
2428 padding: 10px;
2429 padding-bottom: 4px;
2430 font-size: 10pt;
2431 color: white;
2432}
2433div.tooltip div.tooltip_footer {
2434 height: 7px;
2435 background: url(../images/old/tooltips/body_bottom.png) no-repeat;
2436}
2437/* @end */
2438/* @group News */
2439/*
2440div#news {
2441 top: 11px;
2442 left: 240px;
2443 width: 353px;
2444 height: 85px;
2445 padding-top: 4px;
2446 position: absolute;
2447 overflow: hidden;
2448 background: url(../images/old/note.png) 1px 3px;
2449}
2450
2451div#news.hidden {
2452 display: none;
2453}
2454
2455div#news div.close {
2456 display: inline;
2457 margin-top: 6px;
2458 margin-left: 17px;
2459 float: left;
2460 width: 15px;
2461}
2462
2463div#news div.close a {
2464 text-decoration: none;
2465 color: #929c1b;
2466}
2467
2468div#news div.close a:hover {
2469 text-decoration: none;
2470 color: #3d420b;
2471}
2472
2473div#news div#newsframe {
2474 display: block;
2475 overflow: hidden;
2476 width: 305px;
2477 height: 70px;
2478}
2479
2480div#news div#newsframe iframe {
2481 border: 0px;
2482}
2483*/
2484/* --------------------------------------- */
2485div#news {
2486 top: -82px;
2487 left: 240px;
2488 width: 310px;
2489 height: 90px;
2490 position: absolute;
2491 /*background: url(../images/old/tips/Tips_background.png) 0 -5px; */
2492
2493 background-color: #616474;
2494 -webkit-border-bottom-right-radius: 8px;
2495 -webkit-border-bottom-left-radius: 8px;
2496 -moz-border-radius-bottomright: 8px;
2497 -moz-border-radius-bottomleft: 8px;
2498 border-bottom-right-radius: 8px;
2499 border-bottom-left-radius: 8px;
2500 -webkit-box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6);
2501 -moz-box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6);
2502 box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6);
2503}
2504/*
2505div#news.open {
2506 background: url(../images/old/tips/Tips_open.png) 0 -5px;
2507}
2508
2509div#news.hidden {
2510 background: url(../images/old/tips/Tips_close.png) 0 -5px;
2511}
2512*/
2513div#news div#newsframe {
2514 margin-left: 10px;
2515 margin-right: 10px;
2516 height: 75px;
2517 overflow: hidden;
2518}
2519div#news div#newsframe.loading {
2520 background: url(../images/old/loading/news.gif) no-repeat center center;
2521}
2522div#news div#newsframe iframe {
2523 width: 290px;
2524 border: 0px;
2525 color: #616474;
2526 background-color: #616474;
2527}
2528div#news div.grip {
2529 width: 310px;
2530 height: 12px;
2531 margin-top: 2px;
2532 cursor: pointer;
2533}
2534div#news.open div.grip {
2535 background: url(../images/old/tips/close.png) no-repeat center 6px;
2536}
2537div#news.hidden div.grip {
2538 background: url(../images/old/tips/open.png) no-repeat center 6px;
2539}
2540/* @end */
2541/* @group mainDialog */
2542div.mainDialog {
2543 position: relative;
2544 left: -263px;
2545 width: 525px;
2546 height: 325px;
2547}
2548div.scrollable div.mainDialog {
2549 top: 0px;
2550}
2551div.fixed div.mainDialog {
2552 top: -118px;
2553}
2554div.mainDialog div.header {
2555 height: 55px;
2556 background: url(../images/old/cardDialog/background_header.png) no-repeat;
2557}
2558div.mainDialog div.header div.title {
2559 padding-top: 16px;
2560 padding-left: 20px;
2561 padding-right: 20px;
2562}
2563div.mainDialog div.header div.title input {
2564 width: 100%;
2565 display: block;
2566 font-size: 16pt;
2567 margin: 0px;
2568 border: 0px;
2569 padding: 3px 10px;
2570 color: #787872;
2571 border: 1px solid #cccec0;
2572 background-color: #cccec0;
2573}
2574div.mainDialog div.header div.title h3 {
2575 display: block;
2576 font-size: 16pt;
2577 color: #787872;
2578 margin: 0px;
2579 border: 0px;
2580 padding: 3px 10px;
2581}
2582div.mainDialog div.header div.title.selectedField input, div.mainDialog div.header div.title:hover input {
2583 border: 1px solid #515247;
2584 background-color: #b5b7ab;
2585}
2586div.mainDialog div.header div.title.disabled:hover input {
2587 border: 1px solid #cccec0;
2588 background-color: #cccec0;
2589}
2590div.mainDialog div.body {
2591 padding-top: 0px;
2592 padding-left: 10px;
2593 padding-right: 9px;
2594 min-height: 200px;
2595 background: url(../images/old/cardDialog/background_body.png) repeat-y;
2596}
2597div.mainDialog div.body div.mask {
2598 display: none;
2599}
2600div.mainDialog.loading div.body div.mask {
2601 display: block;
2602 position: absolute;
2603 top: 55px;
2604 left: 10px;
2605 right: 9px;
2606 bottom: 70px;
2607 z-index: 1001;
2608 background-color: white;
2609 padding-left: 146px;
2610 padding-right: 146px;
2611 padding-top: 70px;
2612}
2613div.mainDialog.loading div.body .tabPanels {
2614 display: none;
2615}
2616div.mainDialog.loading div.body div.mask h3.progressDescription {
2617 margin: 0px;
2618 text-align: center;
2619 padding-bottom: 10px;
2620 color: #cccec0;
2621 font-size: 14pt;
2622 font-weight: normal;
2623}
2624div.loadingBar {
2625 height: 22px;
2626 width: 214px;
2627 background: url(../images/old/loading/loadingBar.gif) no-repeat center top;
2628}
2629div.loadingBar div.loadingBarProgressBox {
2630 padding: 2px;
2631}
2632div.loadingBar div.loadingBarProgress {
2633 height: 18px;
2634 width: 0%;
2635 /* background-repeat: no-repeat;*/
2636
2637 background-color: rgba(248, 79, 0, 0.6);
2638 -webkit-border-radius: 9px;
2639 -moz-border-radius: 9px;
2640 border-radius: 9px;
2641}
2642/*
2643div.loadingBar div.loadingBarProgress div.loadingBarProgress_left {
2644 height: 100%;
2645 max-width: 8px;
2646 background: url(../images/old/loading/loadingBarProgress.png) no-repeat 0;
2647}
2648
2649div.loadingBar div.loadingBarProgress div.loadingBarProgress_right {
2650 position: relative;
2651 height: 100%;
2652 margin-left: 8px;
2653 background: url(../images/old/loading/loadingBarProgress.png) no-repeat right;
2654 top: -22px;
2655}
2656*/
2657div.mainDialog div.body div ul {
2658 padding: 0px;
2659 clear: both;
2660 margin: 0px;
2661 list-style-type: none;
2662}
2663div.mainDialog div.body div.tabs {
2664 height: 20px;
2665}
2666div.mainDialog div.body div.tabs ul.tabs {
2667 height: 33px;
2668 /*border-bottom: 1px solid #515247;*/
2669
2670 /*background: #cccec0 url(../images/old/cardDialog/tabs_shadow.png) repeat-x 0 -5px;*/
2671
2672 background: url(../images/old/cardDialog/tabs_background.png) repeat-x;
2673}
2674div.mainDialog div.body div.tabs ul.tabs li {
2675 /* width: 150px;*/
2676
2677 height: 32px;
2678 font-size: 11pt;
2679 text-align: center;
2680 border-right: 1px solid #515247;
2681 float: left;
2682 color: #787872;
2683 border-bottom: 1px solid #515247;
2684 background: #cccec0 url(../images/old/cardDialog/tabs_shadow.png) repeat-x 0 -5px;
2685 cursor: pointer;
2686}
2687div.mainDialog div.body div.tabs ul.tabs li div {
2688 display: none;
2689}
2690div.mainDialog div.body div.tabs ul.tabs li span {
2691 display: block;
2692 padding-top: 9px;
2693 padding-bottom: 6px;
2694 padding-left: 40px;
2695 padding-right: 40px;
2696}
2697div.mainDialog div.body div.tabs ul.tabs li:hover {
2698 color: #515247;
2699}
2700div.mainDialog div.body div.tabs ul.tabs li.disabled:hover {
2701 color: #787872;
2702 cursor: default;
2703}
2704div.mainDialog div.body div.tabs ul.tabs li.selected {
2705 color: #515247;
2706 background-color: #f1f2e9;
2707 border-bottom: 1px solid #f1f2e9;
2708 cursor: default;
2709}
2710div.mainDialog div.body div.tabs ul.tabs li.selected.disabled:hover {
2711 color: #515247;
2712}
2713div.mainDialog div.body div.tabs ul.tabs li.selected div.backToDirectLoginList {
2714 position: absolute;
2715 display: block;
2716 top: 63px;
2717 left: 140;
2718 width: 20px;
2719}
2720div.mainDialog div.body div.tabs ul.tabs li.selected div.addDirectLoginButton {
2721 position: absolute;
2722 display: block;
2723 top: 63px;
2724 left: 265px;
2725 width: 20px;
2726}
2727div.mainDialog div.body div.tabs ul.tabs li.selected div span {
2728 padding: 0px;
2729 margin: 0px;
2730}
2731div.mainDialog div.body div.tabs ul.tabs li.selected div:hover {
2732 cursor: pointer;
2733}
2734div.mainDialog div.body .tabPanels {
2735 clear: both;
2736}
2737div.mainDialog div.body ul.tabPanels li.tabPanel {
2738 display: none;
2739}
2740div.mainDialog div.body ul.tabPanels li.tabPanel.selected {
2741 display: block;
2742}
2743div.mainDialog div.body ul.tabPanels li.tabPanel.selected h2 {
2744 margin: 0px;
2745 text-align: center;
2746 padding-top: 50px;
2747 color: #787872;
2748}
2749div.mainDialog div.body ul.tabPanels li.tabPanel.selected div.wizardStepDescription {
2750 margin: 0px 20px 10px;
2751 font-size: 10pt;
2752 color: b0b0b0;
2753 font-style: italic;
2754 text-align: center;
2755}
2756div.mainDialog div.footer {
2757 height: 70px;
2758 background: url(../images/old/cardDialog/background_footer.png) no-repeat 0 -14px;
2759}
2760div.mainDialog div.footer div.buttonArea {
2761 padding-left: 40px;
2762 padding-right: 40px;
2763 padding-top: 15px;
2764}
2765div.mainDialog div.footer div.buttonArea div {
2766 padding-left: 20px;
2767 padding-right: 20px;
2768 float: left;
2769 font-weight: bold;
2770 color: #787872;
2771}
2772div.mainDialog div.footer div.buttonArea div.disabled {
2773 color: #b1b1a8;
2774}
2775div.mainDialog div.footer div.buttonArea div.disabled:hover {
2776 color: #b1b1a8;
2777 cursor: default;
2778}
2779div.mainDialog div.footer div.buttonArea div:hover {
2780 color: #515247;
2781 cursor: pointer;
2782}
2783div.mainDialog div.footer div.buttonArea div.save {
2784 float: right;
2785}
2786/* @end */
2787/* @group Card Dialog */
2788div.addDirectLoginButton {
2789 height: 20px;
2790 width: 20px;
2791 background: url(../images/old/cardDialog/addDirectLogin_disabled_background.png) no-repeat -9px -9px;
2792 color: white;
2793 font-weight: bold;
2794}
2795div.addDirectLoginButton span {
2796 display: block;
2797 height: 20px;
2798 width: 20px;
2799}
2800div.addDirectLoginButton:hover {
2801 background: url(../images/old/cardDialog/addDirectLogin_background.png) no-repeat -9px -9px;
2802}
2803/* @group Card Dialog - Direct Login */
2804div.directLoginsComponentContainer {
2805 overflow: hidden;
2806 /* background-color: green;*/
2807
2808}
2809div.CardDialog div.directLogins {
2810 /* background-color: yellow;*/
2811
2812 padding-top: 2px;
2813}
2814div.CardDialog div.addNewDirectLoginSplash {
2815 margin: 0px 80px;
2816}
2817div.CardDialog div.addNewDirectLoginSplash h3 {
2818 color: #aaaaaa;
2819 text-align: center;
2820 font-weight: normal;
2821 font-size: 11pt;
2822}
2823div.CardDialog div.addNewDirectLoginSplash a {
2824 display: block;
2825 text-decoration: none;
2826 margin-left: auto;
2827 margin-right: auto;
2828 width: 190px;
2829 /* color: #787878;*/
2830
2831 color: rgba(255, 98, 6, 0.75);
2832 text-transform: uppercase;
2833 background: url(../images/old/cardDialog/addDirectLogin_disabled_background.png) no-repeat right;
2834}
2835div.CardDialog div.addNewDirectLoginSplash a span {
2836 text-align: center;
2837}
2838div.CardDialog div.addNewDirectLoginSplash a:hover {
2839 color: #ff6206;
2840 background: url(../images/old/cardDialog/addDirectLogin_background.png) no-repeat right;
2841}
2842div.CardDialog div.directLoginItem {
2843 clear: both;
2844 min-height: 32px;
2845 padding-left: 10px;
2846 padding-top: 4px;
2847 padding-bottom: 2px;
2848 /* width: 100px;*/
2849
2850 max-height: 32px;
2851 overflow: hidden;
2852}
2853div.CardDialog div.directLoginItem:hover {
2854 background-color: #cccec0;
2855}
2856div.CardDialog div.addDirectLoginListItem {
2857 min-height: 32px;
2858 padding-left: 10px;
2859 padding-top: 4px;
2860 padding-bottom: 2px;
2861 max-height: 32px;
2862 overflow: hidden;
2863 background: url(../images/old/cardDialog/addDirectLogin_disabled_background.png) no-repeat 22px 0;
2864}
2865div.CardDialog div.addDirectLoginListItem a {
2866 display: block;
2867 font-size: 11pt;
2868 padding-top: 6px;
2869 padding-left: 50px;
2870 color: rgba(255, 98, 6, 0.75);
2871 text-decoration: none;
2872 text-transform: uppercase;
2873}
2874div.CardDialog div.addDirectLoginListItem:hover {
2875 background: url(../images/old/cardDialog/addDirectLogin_background.png) no-repeat 22px 0;
2876 color: #ff6206;
2877 background-color: #cccec0;
2878}
2879div.CardDialog div.directLoginItem div.cardDialogRecordDirectLoginComponent_favicon img.favicon {
2880 width: 32px;
2881 height: 32px;
2882 float: left;
2883}
2884div.CardDialog div.directLoginItem div.cardDialogRecordDirectLoginComponent_label input {
2885 float: left;
2886 font-size: 11pt;
2887 border: 0px;
2888 padding: 5px;
2889 color: #787872;
2890 border: 1px solid #ededeb;
2891 background-color: #ededeb;
2892 height: 30px;
2893 margin-left: 10px;
2894 width: 68%;
2895 margin-right: 5px;
2896}
2897div.CardDialog div.directLoginItem:hover div.cardDialogRecordDirectLoginComponent_label input {
2898 border: 1px solid #515247;
2899 background-color: #b5b7ab;
2900}
2901div.CardDialog div.directLoginItem > div.open {
2902 float: left;
2903 margin-top: 5px;
2904 margin-right: 2px;
2905 padding-left: 5px;
2906 visibility: hidden;
2907}
2908div.CardDialog div.directLoginItem > div.edit, div.CardDialog div.directLoginItem > div.delete {
2909 float: left;
2910 margin-top: 5px;
2911 margin-left: 3px;
2912 padding-left: 5px;
2913 visibility: hidden;
2914}
2915div.CardDialog div.directLoginItem > div.open a {
2916 display: block;
2917 width: 22px;
2918 height: 22px;
2919 background: url(../images/old/cardDialog/openDirectLogin.png) no-repeat 0 -2px;
2920}
2921div.CardDialog div.directLoginItem > div.open a:hover {
2922 background: url(../images/old/cardDialog/openDirectLogin_selected.png) no-repeat 0 -2px;
2923}
2924div.CardDialog div.directLoginItem:hover > div.open, div.CardDialog div.directLoginItem:hover > div.edit, div.CardDialog div.directLoginItem:hover > div.delete {
2925 visibility: visible;
2926}
2927div.CardDialog div.directLoginItem div.edit span {
2928 padding-right: 6px;
2929 display: block;
2930}
2931div.CardDialog div.directLoginItem div.open span a, div.CardDialog div.directLoginItem div.edit span a, div.CardDialog div.directLoginItem div.delete span a {
2932 font-size: 8pt;
2933 color: #666666;
2934 text-decoration: none;
2935 line-height: 19px;
2936}
2937div.CardDialog div.directLoginItem div.edit:hover {
2938 background: url(../images/old/new_background_left.png) no-repeat;
2939}
2940div.CardDialog div.directLoginItem div:hover span a {
2941 color: white;
2942}
2943div.CardDialog div.directLoginItem div.edit:hover span {
2944 background: url(../images/old/new_background.png) no-repeat right center;
2945}
2946div.CardDialog div.directLoginItem div.delete:hover {
2947 background: url(../images/old/delete_background_left.png) no-repeat;
2948}
2949div.CardDialog div.directLoginItem div.delete:hover span {
2950 background: url(../images/old/delete_background.png) right;
2951}
2952/* @group Direct Login Editing */
2953div.CardDialog div.directLoginEditDetail {
2954 position: relative;
2955 /* background-color: red;*/
2956
2957}
2958/*
2959div.CardDialog div.directLoginEditDetail div.back {
2960 float: left;
2961 width: 30px;
2962}
2963
2964div.CardDialog div.directLoginEditDetail div.back a {
2965 display: block;
2966 padding: 5px;
2967 text-decoration: none;
2968 font-weight: bold;
2969 font-size: 14pt;
2970 color: #cccec0;
2971
2972 background: url(../images/old/cardDialog/back.png) no-repeat 5px 14px;
2973 width: 20px;
2974 height: 200px;
2975}
2976
2977div.CardDialog div.directLoginEditDetail div.back a:hover {
2978 color: #7f7872;
2979 background: url(../images/old/cardDialog/back_selected.png) no-repeat 5px 14px;
2980}
2981*/
2982form.directLoginEditingForm div.title, form.directLoginEditingForm div.favicon {
2983 padding: 5px 10px;
2984}
2985form.directLoginEditingForm div.title.disabled:hover {
2986 background-color: #f1f2e9;
2987}
2988form.directLoginEditingForm div.title:hover, form.directLoginEditingForm div.favicon:hover {
2989 background-color: #cccec0;
2990}
2991form.directLoginEditingForm div.title input {
2992 /* width: 100%; */
2993
2994 margin: 0px;
2995 margin-left: 10px;
2996 width: 440px;
2997}
2998form.directLoginEditingForm div.favicon {
2999 padding-left: 10px;
3000}
3001/*form.directLoginEditingForm div.favicon img.favicon {*/
3002form.directLoginEditingForm img.favicon {
3003 float: left;
3004 width: 32px;
3005 height: 32px;
3006}
3007form.directLoginEditingForm div.favicon input {
3008 margin-top: 1px;
3009 width: 465px;
3010}
3011form.directLoginEditingForm div.disabled:hover input, form.directLoginEditingForm div input {
3012 font-size: 11pt;
3013 border: 0px;
3014 padding: 5px;
3015 color: #787872;
3016 border: 1px solid #ededeb;
3017 background-color: #ededeb;
3018 height: 30px;
3019}
3020form.directLoginEditingForm div:hover input {
3021 border: 1px solid #515247;
3022 background-color: #b5b7ab;
3023}
3024/* @group Bindings */
3025div.bindings div.binding > span.formFieldName {
3026 display: inline-block;
3027 width: 140px;
3028 overflow: hidden;
3029 margin-right: 10px;
3030 color: #6b5147;
3031 text-overflow: ellipsis;
3032}
3033div.bindings div.binding {
3034 padding-bottom: 3px;
3035}
3036div.bindings div.binding > input {
3037 margin-right: 10px;
3038 background: #cccec0;
3039 width: 150px;
3040 border: 1px solid #cccec0;
3041}
3042div.bindings div.binding:hover > input {
3043 border: 1px solid #cccec0;
3044}
3045div.bindings div.binding > select {
3046 font-size: 13pt;
3047}
3048div.bindings div.binding span.fieldLock {
3049 display: inline-block;
3050 width: 20px;
3051 height: 20px;
3052 margin-right: 3px;
3053}
3054div.bindings div.binding.showLocked input {
3055 background: url(../images/old/cardDialog/password_background.png) no-repeat 2px 3px;
3056 /* color: black;*/
3057
3058 overflow: hidden;
3059 background: #cccec0 url(../images/old/cardDialog/password_background.png) no-repeat 2px 3px;
3060 color: rgba(237, 237, 235, 0.1);
3061}
3062div.bindings div.binding span.fieldLock a {
3063 display: none;
3064}
3065div.bindings div.binding.locked span.fieldLock a {
3066 display: block;
3067 width: 20px;
3068 height: 20px;
3069 text-decoration: none;
3070 background-image: url(../images/old/cardDialog/lock_open.png);
3071}
3072div.bindings div.binding.locked.showLocked span.fieldLock a {
3073 background-image: url(../images/old/cardDialog/lock_closed.png);
3074 text-decoration: none;
3075}
3076/* @end */
3077/* @group FormValues */
3078div.formValues {
3079 padding-top: 15px;
3080}
3081div.formValues div.formValue div {
3082 margin: 0px;
3083 display: inline-block;
3084}
3085div.formValues div.formValue > span.formFieldName {
3086 display: inline-table;
3087 width: 160px;
3088 overflow: hidden;
3089 margin-right: 10px;
3090 color: #6b5147;
3091}
3092/* @end */
3093/* @group FormValues */
3094/*
3095div.formValues {
3096 padding-top: 15px;
3097}
3098
3099div.formValues div.formValue > span.formFieldName {
3100 display: inline-table;
3101 width: 150px;
3102 overflow: hidden;
3103 margin-right: 35px;
3104 color: #6b5147;
3105}
3106
3107div.formValues div.formValue > select {
3108 padding-left: 20px;
3109}
3110*/
3111/* @end */
3112/* @group Panels */
3113div.directLoginEditing {
3114 padding-top: 2px;
3115}
3116div.directLoginEditing div.tabContainer {
3117 min-height: 150px;
3118 height: 200px;
3119}
3120div.directLoginEditing div.tabContainer > ul.tabs {
3121 display: none;
3122}
3123/*
3124div.directLoginEditing li.configuration,
3125div.directLoginEditing li.bindings,
3126div.directLoginEditing li.favicon {
3127 padding: 10px;
3128}
3129*/
3130div.directLoginEditing li {
3131 padding: 10px;
3132}
3133div.directLoginEditing li.configuration > .bookmarkletConfigurationWrapper > textarea {
3134 float: left;
3135 width: 320px;
3136 height: 125px;
3137 font-family: monospace;
3138 font-weight: normal;
3139 font-size: 8pt;
3140 border: 1px solid #ccc;
3141}
3142div.directLoginEditing li.configuration > .bookmarkletConfigurationWrapper .bookmarkletComponent {
3143 float: right;
3144}
3145div.directLoginEditing li.configuration > textarea.error {
3146 border: 1px solid red;
3147 background-color: rgba(255, 0, 0, 0.1);
3148}
3149/*
3150div.directLoginEditing > form.directLoginEditingForm > div.tabContainer {
3151 padding-top: 10px;
3152}
3153
3154div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li {
3155 float: left;
3156 padding-left: 10px;
3157 padding-right: 10px;
3158 display: block;
3159 font-size: 10pt;
3160 color: #787872;
3161 cursor: pointer;
3162
3163 height: 22px;
3164 text-align: center;
3165 border-right: 1px solid #aaa;
3166 border-bottom: 1px solid #aaa;
3167 border-top: 1px solid #aaa;
3168
3169 background-color: #cccec0;
3170}
3171
3172div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li:first-child {
3173 border-left: 1px solid #aaa;
3174}
3175
3176div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs {
3177 height: 23px;
3178 padding-left: 10px;
3179 border-bottom: 1px solid #aaa;
3180 margin-left: 10px;
3181 margin-right: 10px;
3182}
3183
3184div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li > span {
3185 line-height: 23px;
3186}
3187
3188div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li.selected {
3189 color: #6a5147;
3190 cursor: default;
3191 border-bottom: 1px solid #f1f2e9;
3192 background-color: #f1f2e9;
3193}
3194
3195div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li:hover {
3196 color: #6a5147;
3197}
3198
3199div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabPanels {
3200 padding-bottom: 5px;
3201 margin-left: 10px;
3202 margin-right: 10px;
3203}
3204
3205div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabPanels > li.selected {
3206 border-bottom: 1px solid #aaa;
3207 border-left: 1px solid #aaa;
3208 border-right: 1px solid #aaa;
3209}
3210
3211div.directLoginEditing li.configuration {
3212 padding: 5px;
3213}
3214
3215div.directLoginEditing li.configuration > textarea {
3216 width: 100%;
3217 height: 100px;
3218 font-family: monospace;
3219 font-weight: normal;
3220 font-size: 8pt;
3221}
3222*/
3223/* @end */
3224/* @end */
3225/* @end */
3226/* @group Card Dialog FIELDS */
3227div.CardDialog div.body {
3228 padding-bottom: 1px;
3229}
3230div.CardDialog div.body table.fields {
3231 width: 100%;
3232 padding-top: 8px;
3233 padding-bottom: 1px;
3234}
3235div.CardDialog div.body table.fields thead {
3236 background: url(../images/old/cardDialog/dottedLine_background.png) repeat-x 0 15px;
3237}
3238div.CardDialog div.body table.fields tfoot {
3239 background: url(../images/old/cardDialog/dottedLine_background.png) repeat-x 0 bottom;
3240}
3241div.CardDialog div.body table.fields thead th {
3242 text-align: left;
3243 font-weight: normal;
3244 font-size: 9pt;
3245 color: #787872;
3246 padding-left: 10px;
3247 padding-bottom: 3px;
3248 /*
3249 border-bottom: 1px dotted;
3250*/
3251
3252}
3253div.CardDialog div.body table.fields thead th.fieldStateTH {
3254 width: 10px;
3255}
3256div.CardDialog div.body table.fields tbody td.fieldLabel input {
3257 width: 130px;
3258}
3259div.CardDialog div.body table.fields thead th.fieldLockTH {
3260 width: 10px;
3261}
3262div.CardDialog div.body table.fields tbody td.fieldValue input {
3263 width: 280px;
3264}
3265div.CardDialog div.body table.fields thead th.fieldActionTH {
3266 width: 30px;
3267}
3268div.CardDialog div.body table.fields thead th.fieldDeleteTH {
3269 width: 40px;
3270}
3271div.CardDialog div.body table.fields tbody tr:hover, div.CardDialog div.body table.fields tbody tr.selectedField {
3272 background-color: #cccec0;
3273}
3274div.CardDialog div.body table.fields tbody tr td {
3275 font-size: 11pt;
3276 color: #787872;
3277 height: 35px;
3278}
3279div.CardDialog div.body table.fields tbody tr td input {
3280 font-size: 11pt;
3281 border: 0px;
3282 padding: 5px;
3283 color: #787872;
3284 border: 1px solid #ededeb;
3285 background-color: #ededeb;
3286 height: 30px;
3287}
3288/*
3289div.CardDialog div.body table.fields tbody tr td.fieldValue div {
3290 margin-right: 10px;
3291}
3292
3293div.CardDialog div.body table.fields tbody tr td.fieldValue div input {
3294 width: 100%;
3295}
3296*/
3297div.CardDialog div.body table.fields tbody tr td.fieldValue div.locked input {
3298 background: #ededeb url(../images/old/cardDialog/password_background.png) no-repeat 2px 3px;
3299 color: #ededeb;
3300 color: rgba(237, 237, 235, 0.1);
3301 /* color: black;*/
3302
3303 /* line-height: 100px;*/
3304
3305 overflow: hidden;
3306}
3307div.locked input.value::-moz-selection {
3308 background: #ff0000;
3309}
3310div.locked input.value::selection {
3311 background: #ff0000;
3312}
3313div.CardDialog div.body table.fields tbody tr.new.selectedField td input,
3314div.CardDialog div.body table.fields tbody tr.new:hover td input,
3315div.CardDialog div.body table.fields tbody tr:hover td input,
3316div.CardDialog div.body table.fields tbody tr.selectedField td input {
3317 border: 1px solid #515247;
3318 background-color: #b5b7ab;
3319}
3320div.CardDialog div.body table.fields tbody tr:hover td.fieldValue div.locked input, div.CardDialog div.body table.fields tbody tr.selectedField td.fieldValue div.locked input {
3321 background: #b5b7ab url(../images/old/cardDialog/password_background.png) no-repeat 2px 3px;
3322 color: #b5b7ab;
3323 color: rgba(237, 237, 235, 0.1);
3324}
3325div.CardDialog div.body table.fields tbody td.fieldLock div {
3326 width: 20px;
3327 height: 19px;
3328 cursor: pointer;
3329}
3330div.CardDialog div.body table.fields tbody tr:hover td.fieldLock div.locked {
3331 background-image: url(../images/old/cardDialog/lock_closed.png);
3332}
3333div.CardDialog div.body table.fields tbody tr:hover td.fieldLock div.unlocked {
3334 background-image: url(../images/old/cardDialog/lock_open.png);
3335}
3336div.CardDialog div.body table.fields tbody tr td.fieldAddDelete div span a {
3337 text-decoration: none;
3338 visibility: hidden;
3339 font-size: 8pt;
3340 vertical-align: -13px;
3341 color: black;
3342}
3343div.CardDialog div.body table.fields tbody tr.selectedField td.fieldAddDelete div span a {
3344 visibility: visible;
3345}
3346div.CardDialog div.body table.fields tbody tr:hover td.fieldAddDelete div span a {
3347 visibility: visible;
3348}
3349div.CardDialog div.body table.fields tbody tr:hover td.fieldAddDelete div:hover span a {
3350 color: white;
3351}
3352div.CardDialog div.body div.notes {
3353 background: url(../images/old/cardDialog/dottedLine_background.png) repeat-x 0 0;
3354 padding-top: 2px;
3355}
3356div.CardDialog div.body div.notes div {
3357 padding-left: 20px;
3358 padding-right: 20px;
3359 padding-top: 4px;
3360 padding-bottom: 4px;
3361}
3362div.CardDialog div.body div.notes div:hover, div.CardDialog div.body div.notes.selectedField div {
3363 background-color: #cccec0;
3364}
3365div.CardDialog.loading div.body div.notes div textarea {
3366 display: none;
3367}
3368div.CardDialog div.body div.notes div textarea {
3369 border: 0;
3370 width: 470px;
3371 /*
3372 width: 100%;
3373 height: 100px;
3374 min-height: 400px;
3375 overflow: hidden;
3376*/
3377
3378 color: #787872;
3379 border: 1px solid #ededeb;
3380 background-color: #ededeb;
3381 display: block;
3382 line-height: 12pt;
3383 min-height: 50px;
3384}
3385div.CardDialog div.body div.notes div:hover textarea, div.CardDialog div.body div.notes.selectedField div textarea {
3386 border: 1px solid #515247;
3387 background-color: #b5b7ab;
3388}
3389div.CardDialog div.body table.fields tbody tr td.fieldAction {
3390 /* background-color: red;*/
3391
3392 padding-left: 4px;
3393}
3394div.CardDialog div.body table.fields tbody tr td.fieldAction a {
3395 display: inline-block;
3396 text-decoration: none;
3397 text-align: center;
3398 width: 16px;
3399 height: 16px;
3400}
3401div.CardDialog div.body table.fields tbody tr td.fieldAction a.email {
3402 background: url(../images/old/cardDialog/fieldTypes/email.png) no-repeat 0 0;
3403}
3404div.CardDialog div.body table.fields tbody tr td.fieldAction a.email:hover {
3405 background: url(../images/old/cardDialog/fieldTypes/email_selected.png) no-repeat 0 0;
3406}
3407div.CardDialog div.body table.fields tbody tr td.fieldAction a.url {
3408 background: url(../images/old/cardDialog/fieldTypes/url.png) no-repeat 0 0;
3409}
3410div.CardDialog div.body table.fields tbody tr td.fieldAction a.url:hover {
3411 background: url(../images/old/cardDialog/fieldTypes/url_selected.png) no-repeat 0 0;
3412}
3413div.CardDialog div.body table.fields tbody tr td.fieldAction a.password {
3414 background: url(../images/old/cardDialog/fieldTypes/password.png) no-repeat 0 0;
3415}
3416div.CardDialog div.body table.fields tbody tr td.fieldAction a.password:hover {
3417 background: url(../images/old/cardDialog/fieldTypes/password_selected.png) no-repeat 0 0;
3418}
3419/*
3420/ *div.CardDialog div.body table.fields tbody* / tr.new {
3421 background: yellow;
3422}
3423
3424div.CardDialog div.body table.fields tbody tr.new td input {
3425 border: 1px solid red;
3426 background-color: green;
3427}
3428*/
3429/* @end */
3430/* @end */
3431div#disabledZone {
3432 display: block;
3433 visibility: visible;
3434}
3435div#messageZone {
3436 display: block;
3437 visibility: visible;
3438}
3439div.CardDialog div.error div.img {
3440 margin: 10px;
3441 width: 50px;
3442 height: 50px;
3443 float: left;
3444 background-image: url(../images/old/simpleMessageBox/Alert.png);
3445}
3446/* @group Ruler */
3447/*
3448div.rulerExtraWrapper {
3449 position: absolute;
3450 top: 0px;
3451 left: 0px;
3452 width: 100%;
3453 height: 100%;
3454 overflow: hidden;
3455 background-color: rgba(255, 0, 0, 0.2);
3456 z-index: 24999;
3457}
3458*/
3459div.rulerWrapper {
3460 left: -1000px;
3461 margin-top: -30px;
3462 margin-left: 50%;
3463 z-index: 25000;
3464}
3465div.rulerWrapper.fixed {
3466 position: fixed;
3467}
3468div.rulerWrapper.scrollable {
3469 position: absolute;
3470}
3471div.ruler {
3472 /* position: absolute;*/
3473
3474 width: 541px;
3475 height: 96px;
3476 margin-left: -270px;
3477 background: url(../images/old/ruler/ruler.png) no-repeat;
3478}
3479div.ruler a {
3480 position: absolute;
3481 display: block;
3482 width: 15px;
3483 height: 15px;
3484 top: 3px;
3485 text-decoration: none;
3486}
3487div.ruler a.exit {
3488 margin-left: 2px;
3489 background: url(../images/old/ruler/exit.png) no-repeat;
3490}
3491div.ruler a.exit:hover {
3492 background: url(../images/old/ruler/exit_selected.png) no-repeat;
3493}
3494div.ruler a.smallButton.previous {
3495 right: 16px;
3496 background: url(../images/old/ruler/small_previous.png) no-repeat;
3497}
3498div.ruler a.smallButton.previous:hover {
3499 cursor: pointer;
3500 background: url(../images/old/ruler/small_previous_selected.png) no-repeat;
3501}
3502div.ruler a.smallButton.previous.disabled, div.ruler a.smallButton.previous.disabled:hover {
3503 cursor: default;
3504 background: url(../images/old/ruler/small_previous_disabled.png) no-repeat;
3505}
3506div.ruler a.smallButton.next {
3507 right: 3px;
3508 background: url(../images/old/ruler/small_next.png) no-repeat;
3509}
3510div.ruler a.smallButton.next:hover {
3511 cursor: pointer;
3512 background: url(../images/old/ruler/small_next_selected.png) no-repeat;
3513}
3514div.ruler a.smallButton.next.disabled, div.ruler a.smallButton.next.disabled:hover {
3515 cursor: default;
3516 background: url(../images/old/ruler/small_next_disabled.png) no-repeat;
3517}
3518div.ruler div.steps, div.ruler div.dots {
3519 position: absolute;
3520 background-color: rgba(255, 255, 255, 0);
3521 margin-left: 30px;
3522 margin-right: 30px;
3523}
3524div.ruler div.steps {
3525 top: 25px;
3526 height: 30px;
3527}
3528div.ruler div.dots {
3529 top: 58px;
3530 height: 25px;
3531}
3532div.ruler div ul {
3533 list-style-type: none;
3534 margin: 0px;
3535 padding: 0px;
3536}
3537div.ruler div ul li {
3538 display: inline-block;
3539 vertical-align: top;
3540}
3541div.ruler > div.steps > ul > li:first-child, div.ruler > div.dots > ul > li:first-child {
3542 margin-left: 0px;
3543}
3544div.ruler div.steps_3 ul li {
3545 margin-left: 135px;
3546}
3547div.ruler div.steps_4 ul li {
3548 margin-left: 67px;
3549}
3550div.ruler div.steps_5 ul li {
3551 margin-left: 32px;
3552}
3553div.ruler div.steps_6 ul li {
3554 margin-left: 12px;
3555}
3556div.ruler div ul li span {
3557 font-weight: bold;
3558 text-align: center;
3559 width: 70px;
3560 display: block;
3561 font-size: 8pt;
3562 overflow: hidden;
3563 color: rgba(0, 0, 0, 0.3);
3564}
3565div.ruler div ul li.selected span {
3566 color: black;
3567}
3568div.ruler div.dots ul li span {
3569 /*
3570 text-align: center;
3571 width: 26px;
3572 margin-left: 22px;
3573 margin-right: 22px;
3574 height: 25px;
3575 background-color: #e57218;
3576*/
3577
3578 font-size: 40pt;
3579 line-height: 47px;
3580}
3581div.ruler div.marker {
3582 position: absolute;
3583 top: -3px;
3584 /* left: -246px;*/
3585
3586}
3587div.ruler div.marker div.markerBody {
3588 width: 77px;
3589 height: 97px;
3590 background: url(../images/old/ruler/marker.png) no-repeat;
3591}
3592div.ruler div.marker div.next {
3593 position: absolute;
3594 top: 25px;
3595 left: 76px;
3596 width: 27px;
3597 height: 65px;
3598 background: url(../images/old/ruler/next.png) no-repeat -13px;
3599 z-index: 26000;
3600}
3601div.ruler div.marker div.next:hover {
3602 cursor: pointer;
3603 background: url(../images/old/ruler/next.png) no-repeat -2px;
3604}
3605div.ruler div.marker div.disabled {
3606 display: none;
3607}
3608div.ruler div.marker div.previous {
3609 position: absolute;
3610 top: 25px;
3611 left: -24px;
3612 width: 27px;
3613 height: 65px;
3614 /* background: url(../images/old/ruler/previous.png) no-repeat 13px 1px;*/
3615
3616 background: url(../images/old/ruler/previous.png) no-repeat 18px 1px;
3617 z-index: 26000;
3618}
3619div.ruler div.marker div.previous:hover {
3620 cursor: pointer;
3621 /* background: url(../images/old/ruler/previous.png) no-repeat 2px 1px;*/
3622
3623 background: url(../images/old/ruler/previous.png) no-repeat 7px 1px;
3624}
3625/* @end */
3626div.createNewCardSplash {
3627 margin-top: -450px;
3628 margin-left: 250px;
3629 width: 354px;
3630 float: left;
3631 height: 186px;
3632 text-align: center;
3633 background: url(../images/old/main/grid/createNewCardSplash.png) no-repeat;
3634}
3635div.createNewCardSplash:hover {
3636 cursor: pointer;
3637 background: url(../images/old/main/grid/createNewCardSplash_selected.png) no-repeat;
3638}
3639div.createNewCardSplash span {
3640 display: block;
3641 padding-top: 130px;
3642 font-size: 14pt;
3643 color: #9a9586;
3644}
3645div.createNewCardSplash:hover span {
3646 color: #605c4e;
3647}
3648/*=============================================*/
3649div.NewUserCreation div.tabContainer {
3650 min-height: 150px;
3651 height: 200px;
3652}
3653div.NewUserCreation div.tabContainer > ul.tabs {
3654 display: none;
3655}
3656ul.createUserStates li.creating {
3657 background: url(../images/old/creatingUser.gif) no-repeat center center;
3658}
3659ul.createUserStates li {
3660 height: 100px;
3661}
3662ul.createUserStates li span {
3663 display: block;
3664 width: 100%;
3665 text-align: center;
3666 color: #999;
3667 font-style: italic;
3668}
3669div.NewUserCreation form.newUserCreationForm ul.tabPanels {
3670 padding-top: 10px;
3671}
3672div.NewUserCreation form.newUserCreationForm ul ul {
3673 margin-left: auto;
3674 margin-right: auto;
3675 width: 400px;
3676}
3677div.NewUserCreation form.newUserCreationForm ul.credentials li {
3678 height: 45px;
3679}
3680div.NewUserCreation form.newUserCreationForm ul.credentials span.label {
3681 text-align: right;
3682 display: inline-block;
3683 font-size: 12pt;
3684 color: #787872;
3685 width: 110px;
3686 vertical-align: baseline;
3687}
3688div.NewUserCreation form.newUserCreationForm ul.credentials input {
3689 font-size: 13pt;
3690 color: #787872;
3691 height: 35px;
3692 margin-left: 15px;
3693 padding-left: 5px;
3694}
3695div.NewUserCreation form.newUserCreationForm ul.termsOfService li {
3696 padding: 0 0 15 0;
3697}
3698div.NewUserCreation form.newUserCreationForm ul.termsOfService input {
3699 display: inline-block;
3700}
3701div.NewUserCreation form.newUserCreationForm ul.termsOfService .label {
3702 display: inline-block;
3703 text-align: left;
3704 font-size: 12pt;
3705 color: #787872;
3706 width: 350px;
3707 vertical-align: top;
3708 padding-left: 10px;
3709}
3710div.NewUserCreation form.newUserCreationForm ul.termsOfService a {
3711 font-weight: bold;
3712 color: #787872;
3713 text-decoration: none;
3714}
3715div.NewUserCreation form.newUserCreationForm ul.termsOfService a:hover {
3716 color: #444;
3717}
3718div.NewUserCreation form.newUserCreationForm ul.createUserStates li.done span {
3719 font-size: 16pt;
3720 color: green;
3721}
3722div.NewUserCreation form.newUserCreationForm ul.createUserStates li.fail span {
3723 font-size: 16pt;
3724 color: red;
3725}
diff --git a/frontend/gamma/css/clipperz/clipperz.css b/frontend/gamma/css/clipperz/clipperz.css
deleted file mode 100644
index 68d9942..0000000
--- a/frontend/gamma/css/clipperz/clipperz.css
+++ b/dev/null
@@ -1,4517 +0,0 @@
1/*
2
3Copyright 2008-2011 Clipperz Srl
4
5This file is part of Clipperz Community Edition.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please
8refer to http://www.clipperz.com.
9
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
12 License as published by the Free Software Foundation, either version
13 3 of the License, or (at your option) any later version.
14
15* Clipperz Community Edition is distributed in the hope that it will
16 be useful, but WITHOUT ANY WARRANTY; without even the implied
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details.
19
20* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see
22 <http://www.gnu.org/licenses/>.
23
24*/
25
26/* @override
27 https://www.example.com/DEVELOPMENT/css/clipperz.css
28 http://www.example.com/DEVELOPMENT/css/clipperz.css
29 https://www.clipperz.com/gamma/css/clipperz.css
30 https://www.example.com/iPHONE/css/clipperz.css
31*/
32
33/*
34Color list:
35- login box:
36 light#ff9955
37 dark#ff6622
38- login button:
39 regular#dd5500
40 hover#773311
41- login translations:
42 box: #cc6622;
43 not-selected:
44 color: #ddaa99
45 background:#994422
46 selected: #772211;
47
48*/
49
50html {
51 height: 100%;
52}
53
54body {
55 /*margin-left: 15px; margin-right: 15px;*/
56 font-family: Helvetica, Arial, Geneva, sans-serif;
57 margin: 0px;
58/*
59 min-width: 600px;
60*/
61 height: 100%;
62}
63
64img.favicon {
65 height: 16px;
66 width: 16px;
67}
68
69/* @group Misc */
70
71.clear {
72 clear: both;
73}
74
75.hidden_none {
76 display: none;
77 visibility: hidden;
78}
79
80.keepTogether {
81 display: inline-block;
82 white-space: nowrap;
83}
84
85body.ext-gecko .keepTogether {
86 display: -moz-inline-box;
87 }
88
89/* @end */
90
91/* @group Loading */
92
93div#loading {
94 margin-left: auto;
95 margin-right: auto;
96 text-align: center;
97 margin-top: 60px;
98 width: 200px;
99}
100
101div#loading img {
102 border: 0px;
103}
104
105div#loading h5 {
106 font-size: 16pt;
107 padding: 0px;
108 color: #333366;
109}
110
111div#loading h2 {
112 padding-left: 20px;
113 color: #ff9200;
114}
115
116
117/* @end */
118
119/* @group Login page */
120
121/* @group Header */
122
123div.pageHeader {
124 background-color: #1f2148;
125 min-width: 1013px;
126}
127
128div#logoFrame {
129 padding: 16px 16px 60px 16px;
130 min-height: 44px;
131}
132
133
134div#logoFrame div#logo {
135 background: url(../images/old/logo.png);
136 width: 150px;
137 height: 39px;
138}
139
140
141div#loading div#logo {
142 background: url(../images/old/logo_blue.png);
143 width: 193px;
144 height: 58px;
145 display: block;
146}
147
148h5.clipperzPayoff {
149 color: white;
150 font-size: 13pt;
151 font-weight: normal;
152 padding-left: 20px;
153 white-space: nowrap;
154 margin: 0px;
155 padding-left: 4px;
156}
157
158
159/* @group Misc links */
160
161div#miscLinks {
162 float: right;
163}
164
165div#miscLinks ul {
166 margin: 12px 0px 0px;
167 padding: 15px;
168}
169
170div#miscLinks ul li {
171 display: inline;
172 margin: 0px; padding: 0px; border: 0px;
173}
174
175div#miscLinks ul li a {
176/*
177 color: #ccccff;
178*/
179 color: white;
180 margin: 0px; padding: 0px; border: 0px;
181 font-weight: normal;
182 text-decoration: none;
183 font-size: 12pt;
184 border-left: 1px solid #45486b;
185 padding: 15px;
186 margin: 0px;
187 min-width: 70px;
188}
189
190div#miscLinks ul li a#donateHeaderLink {
191 border-left: 0px;
192}
193
194div#miscLinks ul li a:hover {
195 color: #ff9200;
196}
197
198
199
200/* @end */
201
202
203/* @group Features Tabs */
204#featureTabs table {
205 width: 100%;
206 padding: 6px;
207 padding-bottom: 46px;
208}
209
210#featureTabs table tr td {
211 width: 25%;
212 vertical-align: top;
213 font-size: 11pt;
214 color: white;
215}
216
217#featureTabs table tr td img {
218 float: left;
219}
220
221#featureTabs table tr td span {
222 display: block;
223 padding: 5 10 5 85;
224}
225
226div#featureTabs canvas.featureIcon {
227 width: 76px;
228 height: 76px;
229 display: block;
230 float: left;
231
232 background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9955), to(#ff6622), color-stop(1,#333333));
233 background: -moz-linear-gradient(0% 100% 90deg,#ff6622, #ff9955);
234
235 -webkit-border-radius: 38px;
236 -moz-border-radius: 38px;
237 border-radius: 38px;
238}
239/*
240div#featureTabs div.featureIcon.storeIcon {
241 background-image: url(../images/old/home/features/store.png);
242}
243
244div#featureTabs div.featureIcon.protectIcon {
245 background-image: url(../images/old/home/features/protect.png);
246}
247
248div#featureTabs div.featureIcon.directLoginIcon {
249 background-image: url(../images/old/home/features/directLogin.png);
250}
251
252div#featureTabs div.featureIcon.shareIcon {
253 background-image: url(../images/old/home/features/share.png);
254}
255*/
256/*
257./images/home/features/store.png
258./images/home/features/protect.png
259./images/home/features/directLogin.png
260./images/home/features/share.png
261*/
262
263/* @end */
264
265/* @group Feature bullets */
266
267div#featurePoints {
268 min-width: 400px;
269 padding-left: 20px;
270 padding-right: 330px;
271 padding-top: 15px;
272 padding-bottom: 20px;
273}
274
275div#featurePoints table tbody tr td {
276 width: 50%;
277 vertical-align: top;
278}
279
280div#featurePoints table tbody tr td.separator {
281 width: 1px;
282 border-left: 1px solid #bebebe;
283}
284
285div#featurePoints div.block {
286 padding: 10px;
287 color: #8e8e8e;
288}
289
290div#featurePoints div.block h3 {
291 font-weight: normal;
292 font-size: 12pt;
293 margin: 0px;
294 padding: 5px 0px;
295}
296
297div#featurePoints div.block ul {
298 margin: 0px;
299 margin-left: 20px;
300 padding: 0px;
301 list-style-position: outside;
302 list-style-image: url(../images/old/home/features/bullet.png);
303}
304
305div#featurePoints div.block ul li {
306 font-size: 10pt;
307 padding: 3px 0px;
308}
309
310/* @end */
311
312
313
314/* @end */
315
316/* @group Login box */
317
318div#loginBox {
319 width: 273px;
320 /* z-index: 40000;*/
321 z-index: 19000;
322 position: relative;
323 top: -30px;
324 right: 30px;
325 float: right;
326}
327
328div#loginBox div.header {
329 height: 25px;
330 width: 273px;
331 /* background-image: url(../images/old/home/box/box_top.png);*/
332 /* background-color: #fe965f;*/
333 background-color: #ff9955;
334
335 -webkit-border-top-left-radius: 20px;
336 -webkit-border-top-right-radius: 20px;
337 -moz-border-radius-topleft: 20px;
338 -moz-border-radius-topright: 20px;
339 border-top-left-radius: 20px;
340 border-top-right-radius: 20px;
341}
342
343div#loginBox div.body {
344 background-color: #ff9955;
345
346 background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9955), to(#ff6622), color-stop(1,#333333));
347 background: -moz-linear-gradient(0% 100% 90deg,#ff6622, #ff9955);
348
349 /*background: url(../images/old/home/box/box_body.png) repeat-x; */
350}
351
352div#loginBox div.body h3.loading {
353 margin: 0px;
354 text-align: center;
355 padding-top: 60px;
356 color: white;
357 font-size: 30pt;
358 padding-left: 20px;
359}
360
361div#loginBox div.footer {
362 height: 37px;
363 width: 273px;
364 /* background-image: url(../images/old/home/box/box_bottom.png);*/
365 background-color: #ff6622;
366
367 -webkit-border-bottom-left-radius: 20px;
368 -webkit-border-bottom-right-radius: 20px;
369 -moz-border-radius-bottomleft: 20px;
370 -moz-border-radius-bottomright: 20px;
371 border-bottom-left-radius: 20px;
372 border-bottom-right-radius: 20px;
373}
374
375/* @group Login form */
376
377div#loginBox h4 {
378 color: white;
379 font-size: 16pt;
380 font-weight: normal;
381 padding-left: 20px;
382 margin: 0px;
383}
384
385div#loginBox form.loginForm {
386 padding: 5px 20px 0px;
387 margin-bottom: 0px;
388}
389
390div#loginBox form.loginForm label {
391 color: white;
392 font-size: 10pt;
393 display: block;
394 padding-top: 5px;
395}
396
397div#loginBox form.loginForm input {
398 width: 230px;
399 font-size: 14pt;
400 border: 1px solid #bb4924;
401 color: #333366;
402 background-color: white;
403 padding: 2px 5px;
404 height: 28px;
405}
406
407div#loginBox form.loginForm label.checkbox {
408 display: inline;
409}
410
411div#loginBox form.loginForm .checkbox:hover {
412 cursor: pointer;
413}
414
415div#loginBox form.loginForm input.checkbox {
416 margin: 10px 8px 0px 0px;
417 height: auto;
418 width: auto;
419 border: 0px;
420}
421
422div#loginBox form.loginForm ul {
423 list-style-type: none;
424 padding: 0px;
425 margin: 0px;
426}
427
428div#loginBox form.loginForm ul li {
429 display: block;
430}
431
432div#loginBox form.loginForm input.otp {
433 width: 57px;
434 display: inline;
435 padding-left: 0px;
436 padding-right: 0px;
437 height: 28px;
438 font: 8pt monospace;
439}
440
441
442
443div#loginBox form.loginForm input.submit {
444 margin: 0px 45px;
445 width: 140px;
446 border: 1px solid white;
447 color: white;
448 background-color: #dd5500;
449 padding: 6px;
450 font-size: 12pt;
451 height: auto;
452}
453
454div#loginBox form.loginForm input.submit:hover {
455 background-color: #773311;
456 color: white;
457 cursor: pointer;
458}
459
460
461/* @group language chooser */
462
463div#loginBox form.loginForm div.translations {
464 margin: 15px -20px;
465 background-color: #cc6622;
466}
467
468div#loginBox form.loginForm div.translations h4 {
469 font-size: 9pt;
470 padding: 6px 20px 0px;
471}
472
473div#loginBox form.loginForm div.translations ul {
474 margin: 0px;
475 padding: 5px 10px 10px;
476 margin-bottom: 15px;
477}
478
479div#loginBox form.loginForm div.translations ul li {
480 font-size: 8pt;
481 color: #ddaa99;
482 display: inline-block;
483 padding: 2px 4px;
484 background-color: #994422;
485 margin: 1px;
486}
487
488body.ext-gecko div#loginBox form.loginForm div.translations ul li {
489 display: -moz-inline-box;
490}
491
492div#loginBox form.loginForm div.translations ul li.selected {
493 background-color: #772211;
494 color: white;
495}
496
497div#loginBox form.loginForm div.translations ul li.selected:hover {
498 cursor: default;
499}
500
501div#loginBox form.loginForm div.translations ul li:hover {
502 cursor: pointer;
503 color: white;
504}
505
506/* @end */
507
508/* @end */
509
510/* @end */
511
512/* @group Create/Look/Offline */
513
514div.activeFeatures {
515 float: left;
516 margin-left: 20px;
517 height: 100px;
518}
519
520div.activeFeatures a {
521 display: inline-block;
522
523 padding-left: 46px;
524 color: #ff5906;
525 text-decoration: none;
526 font-size: 10pt;
527}
528
529
530div.activeFeatures .keepTogether a {
531 padding-left: 0px;
532}
533
534div.activeFeatures a span.payoff {
535 display: block;
536 font-size: 13pt;
537 font-weight: lighter;
538 color: #9b9689;
539 margin: 0px;
540 padding: 0px;
541}
542
543/*body.ext-gecko div.activeFeatures a {
544 display: -moz-inline-box;
545}*/
546div.activeFeatures a:hover span.payoff {
547 color: #666666;
548}
549
550div.activeFeatures a:hover span.link {
551 /*font-weight: bold;*/
552}
553
554div.activeFeatures div.keepTogether div {
555 display: inline-block;
556 padding-right: 15px;
557}
558
559/*body.ext-gecko div.activeFeatures div.keepTogether div {
560 display: -moz-inline-box;
561}*/
562
563div.activeFeatures div.createAccountLink {
564 display: inline-block;
565 width: 282;
566 height: 65px;
567 /* background-image: url(../images/old/home/register.png);*/
568 margin-right: 20px;
569}
570
571/*body.ext-gecko div.activeFeatures div.createAccountLink {
572 display: -moz-inline-box;
573}*/
574
575div.activeFeatures a.createAccountLink {
576 position: relative;
577 top: -92px;
578 left: 5px;
579}
580
581div.activeFeatures div.createAccountLink a.createAccountLink span.payoff {
582 margin-top: 23px;
583 margin-left: 40px;
584 font-size: 17pt;
585 color: #64626c;
586}
587
588div.activeFeatures div.createAccountLink a.createAccountLink span.link {
589 padding-left: 40px;
590 padding-right: 50px;
591 padding-bottom: 10px;
592 font-size: 12pt;
593}
594
595div.activeFeatures div.createAccountLink:hover {
596 /*background-image: url(../images/old/home/register_selected.png);*/
597}
598
599div.activeFeatures div.createAccountLink:hover a.createAccountLink span.payoff {
600 color: #54535a;
601}
602
603div.activeFeatures div.createAccountLink:hover a.createAccountLink span.link {
604 color: white;
605}
606
607/*
608div.activeFeatures div.screenshotLink {
609 background: url(../images/old/home/look.png) no-repeat 0 -3px;
610}
611
612div.activeFeatures div.offlineLink {
613 background: url(../images/old/home/download.png) no-repeat 10px -4px;
614}
615*/
616
617div.createAccountLink canvas {
618 width: 282px;
619 height: 93px;
620}
621div.activeFeatures .keepTogether canvas {
622 width: 46px;
623 height: 46px;
624 vertical-align: bottom;
625}
626
627/* @end */
628
629
630
631/* @end */
632
633/* @group Footer */
634
635div.pageHeaderAndBody {
636 height: 100%;
637}
638
639body > div.pageHeaderAndBody {
640 height: auto; min-height: 100%;
641}
642
643div#pageBody {
644 min-width: 1013px;
645 padding-bottom: 90px;
646}
647
648
649
650div.pageFooter {
651 margin-top: -90px;
652 height: 90px;
653 clear: both;
654}
655
656div.footerWrapper {
657 clear: both;
658 padding-top: 10px;
659}
660div.footerContent {
661 background-color: #eaebe6;
662 padding: 20px;
663 font-size: 8pt;
664}
665
666/*div.pageFooter div.footerContent div.footerStarIcon {*/
667div.pageFooter div.footerContent canvas.footerStarIcon {
668 /* background-image: url(../images/old/footer/star.png);*/
669 width: 40px;
670 height: 40px;
671 float: left;
672}
673
674div.pageFooter div.footerContent span.copyright {
675 padding-left: 10px;
676 color: #a0a0a0;
677}
678
679div.pageFooter div.footerContent a {
680 padding-left: 50px;
681 display: block;
682 color: #888888;
683 font-weight: bold;
684 text-decoration: none;
685}
686
687div.pageFooter div.footerContent span.applicationVersion {
688 padding: 8px;
689 color: #888888;
690 background-color: #d2d2d2;
691 position: relative;
692 top: -40px;
693 float: right;
694}
695
696
697/* @end */
698
699/* @group Javascript Alert */
700
701div#javaScriptAlert div.mask {
702 position: fixed;
703 top: 0px;
704 left: 0px;
705 right: 0px;
706 bottom: 0px;
707
708 background-color: black;
709 z-index:1001;
710 -moz-opacity: 0.7;
711 opacity:.70;
712 filter: alpha(opacity=70);
713}
714
715 div#javaScriptAlert div.header {
716 height: 34px;
717 width: 468;
718 background-image: url(../images/old/alert/header.png);
719}
720
721 div#javaScriptAlert div.body {
722 background-image: url(../images/old/alert/body.png);
723 padding: 0px 20px 10px 20px;
724}
725/*
726div#javaScriptAlert div.body div.alert {
727 padding-left: 100px;
728 background: url(../images/old/alert/alert.png) no-repeat;
729}
730*/
731
732/*div#javaScriptAlert div.body img.alert {*/
733div#javaScriptAlert div.body div.alertLogo {
734 float: left;
735 background-image: url(../images/old/alert/alert.png);
736 width: 88px;
737 height: 88px;
738}
739
740div#javaScriptAlert div.body div.alert {
741 padding-left: 100px;
742}
743
744 div#javaScriptAlert div.footer {
745 height: 34px;
746 width: 468;
747 background-image: url(../images/old/alert/footer.png);
748}
749
750
751
752div#javaScriptAlert div.message {
753 position: relative;
754 top: -150px;
755 z-index:1002;
756/*
757 left: 100px;
758 right: 100px;
759*/
760 margin-left: auto;
761 margin-right: auto;
762 max-width: 468px;
763}
764
765div#javaScriptAlert div.message h1 {
766 font-size: 16pt;
767 margin: 0px;
768 color: #ff5930;
769}
770
771div#javaScriptAlert div.message p {
772 margin-top: 0px;
773 color: #999999;
774}
775
776div#javaScriptAlert div.message h3 {
777 font-size: 12pt;
778 margin-bottom: 0px;
779 color: #ff5930;
780}
781
782div#javaScriptAlert div.message h5 {
783 margin: 0px;
784 color: #999999;
785}
786
787/* @end */
788
789/* @group Components
790 */
791
792
793/* @group LoginProgress */
794
795div.LoginProgress {
796 position: relative;
797 left: -190px;
798 top: -100px;
799 width: 380px;
800 height: 200px;
801 /* background: url(../images/old/loginProgress/background.png);*/
802 background-color: #d7d7c0;
803 -webkit-border-radius: 20px;
804 -moz-border-radius: 20px;
805 border-radius: 20px;
806
807 -webkit-box-shadow: 5px 5px 7px rgba(0,0,0,0.6);
808 -moz-box-shadow: 5px 5px 7px rgba(0,0,0,0.6);
809 box-shadow: 5px 5px 7px rgba(0,0,0,0.6);
810}
811
812div.LoginProgress div.header {
813 height: 40px;
814}
815
816div.LoginProgress div.header h3 {
817 font-size: 12pt;
818 font-weight: normal;
819 margin: 0px;
820 color: #777777;
821 padding-top: 13px;
822 padding-left: 18px;
823}
824
825div.LoginProgress div.body {
826 height: 120px;
827 overflow: auto;
828 padding-left: 20px;
829 padding-right: 20px;
830
831 background-color: #f1f1e9;
832/*
833 margin-left: 19px;
834 margin-right: 18px;
835*/
836}
837
838div.LoginProgress div.body div.img {
839 margin: 10px;
840 width: 50px;
841 height: 50px;
842 float: left;
843}
844
845div.LoginProgress div.body div.img.ALERT {
846 /* background-image: url(../images/old/simpleMessageBox/Alert.png);*/
847 background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9955), to(#ff6622), color-stop(1,#333333));
848 background: -moz-linear-gradient(0% 100% 90deg,#ff6622, #ff9955);
849 -webkit-border-radius: 25px;
850 -moz-border-radius: 25px;
851 border-radius: 25px;
852
853}
854
855div.LoginProgress div.body div.img.ALERT canvas {
856 width: 50px;
857 height: 50px;
858 /*background-image: url(../images/old/simpleMessageBox/excalmationPoint.png); */
859}
860
861div.LoginProgress div.body div.loadingBar {
862 position: relative;
863 top: 51px;
864 left: 60px;
865}
866
867div.LoginProgress div.body div.errorBox p {
868 color: #787872;
869 padding-top: 20px;
870 padding-left: 80px;
871}
872
873div.LoginProgress div.footer {
874 margin-left: 19px;
875 margin-right: 18px;
876}
877
878div.LoginProgress div.footer a {
879 text-decoration: none;
880 text-align: center;
881 color: #787872;
882 display: block;
883 font-weight: bold;
884 font-size: 11pt;
885 width: 100px;
886 margin-top: 11px;
887 margin-left: auto;
888 margin-right: auto;
889}
890
891div.LoginProgress div.footer div.button.default {
892 text-decoration: underline;
893}
894
895div.LoginProgress div.buttonArea {
896 text-align: center;
897}
898
899div.LoginProgress div.button {
900 display: inline-block;
901}
902
903div.LoginProgress div.footer a:hover {
904 color: #515247;
905}
906
907
908
909/* @end */
910
911/* @group SimpleMessagePanel */
912
913div.SimpleMessagePanel {
914 position: relative;
915 left: -225px;
916 top: -70px;
917 width: 450px;
918 height: 140px;
919/*
920 background: url(../images/old/loginProgress/background.png);
921*/
922}
923
924div.SimpleMessagePanel div.header {
925 height: 17px;
926 background: url(../images/old/simpleMessageBox/background_header.png) no-repeat;
927}
928
929div.SimpleMessagePanel div.body {
930/*
931 height: 120px;
932 overflow: auto;
933 margin-left: 19px;
934 margin-right: 18px;
935*/
936 background: url(../images/old/simpleMessageBox/background_body.png) repeat-y;
937 padding-left: 25px;
938 padding-right: 25px;
939 padding-top: 10px;
940}
941
942div.SimpleMessagePanel div.body h3 {
943 font-size: 14pt;
944 font-weight: normal;
945 margin: 0px;
946 padding-top: 4px;
947 color: #787872;
948}
949
950div.SimpleMessagePanel div.body div.img {
951 width: 66px;
952 height: 60px;
953 float: left;
954}
955
956div.SimpleMessagePanel div.body p {
957 margin: 0;
958 font-size: 10pt;
959 font-weight: normal;
960 color: #787872;
961 padding-top: 10px;
962 padding-bottom: 5px;
963 line-height: 1.3;
964}
965
966div.SimpleMessagePanel div.body div.img.ALERT {
967 background: url(../images/old/simpleMessageBox/Alert.png) no-repeat;
968}
969
970div.SimpleMessagePanel div.body div.img.INFO {
971 background: url(../images/old/simpleMessageBox/Info.png) no-repeat;
972}
973
974div.SimpleMessagePanel div.body div.buttonArea {
975 height: 40px;
976 clear: both;
977}
978
979div.SimpleMessagePanel div.body div.buttonArea > div {
980 float: right;
981 margin-left: 15px;
982 margin-top: 10px;
983}
984
985div.SimpleMessagePanel div.footer {
986 height: 25px;
987 background: url(../images/old/simpleMessageBox/background_footer.png) no-repeat;
988}
989
990div.SimpleMessagePanel div.passphrase {
991 padding-left: 65px;
992}
993
994div.SimpleMessagePanel div.passphrase input {
995 width: 250px;
996 font-size: 14pt;
997 border: 1px solid #bb4924;
998 color: #333366;
999 background-color: white;
1000 padding: 2px 5px;
1001 height: 28px;
1002}
1003
1004div.SimpleMessagePanel div.progressBarWrapper {
1005 margin-left: 80px;
1006}
1007
1008/* @end */
1009
1010/* @group Button */
1011
1012div.button_wrapper {
1013 height: 32px;
1014 background: url(../images/old/button/default_left.png) no-repeat;
1015 cursor: pointer;
1016}
1017
1018div.button_wrapper.hover {
1019 background: url(../images/old/button/hover_left.png) no-repeat;
1020}
1021
1022div.button_wrapper.clicked {
1023 background: url(../images/old/button/clicked_left.png) no-repeat;
1024}
1025
1026div.button_bodyWrapper {
1027 height: 32px;
1028 margin-left: 6px;
1029 padding-right: 6px;
1030 background: url(../images/old/button/default_main.png) repeat-x right 0;
1031}
1032
1033div.button_wrapper.hover div.button_bodyWrapper {
1034 background: url(../images/old/button/hover_main.png) repeat-x right 0;
1035}
1036
1037div.button_wrapper.clicked div.button_bodyWrapper {
1038 background: url(../images/old/button/clicked_main.png) repeat-x right 0;
1039}
1040
1041div.button_body {
1042 text-align: center;
1043 min-width: 60px;
1044 padding: 0px 7px;
1045 padding-top: 8px;
1046}
1047
1048div.button_body span {
1049 font-size: 11pt;
1050 color: white;
1051}
1052
1053div.button_wrapper.default div.button_body span {
1054 font-weight: bold;
1055}
1056
1057/*
1058div.button_footer {
1059 margin: 0px;
1060 height: 31px;
1061 width: 6px;
1062 background: green url(../images/old/button/default_right.png) no-repeat;
1063}
1064*/
1065/* @end */
1066
1067/* @group Password enthropy */
1068
1069input.entropyLevelIndicator {
1070 background: url(../images/old/passwordField/background.png) no-repeat 0 26px;
1071}
1072
1073div.passwordEntropyWrapper {
1074 padding: 0px;
1075 border: 1px solid #bb4924;
1076 border-top: 0px;
1077 margin-bottom: 4px;
1078 background-color: white;
1079 margin-right: 3px;
1080 margin-top: -2;
1081}
1082
1083div.passwordEntropy {
1084 height: 4px;
1085 font-size: 1pt;
1086 background: url(../images/old/entropyBackground.gif) repeat-x 0 0;
1087 line-height: 3px;
1088}
1089
1090
1091
1092/* @end */
1093
1094
1095
1096/* @end */
1097
1098/* @group Main page */
1099
1100/* @group User Info Box */
1101
1102div.userInfoBox {
1103 position: absolute;
1104 width: 160px;
1105 height: 120px;
1106
1107 top: 100px;
1108 left: 15px;
1109 /*background-image: url(../images/old/main/userInfoBackground.png); */
1110
1111 background-color: #ff9955;
1112 background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9a56), to(#ff6723), color-stop(1,#333333));
1113 background: -moz-linear-gradient(0% 100% 90deg,#ff6723, #ff9a56);
1114
1115 -webkit-border-radius: 10px;
1116 -moz-border-radius: 10px;
1117 border-radius: 10px;
1118
1119 -webkit-box-shadow: 2px 2px 9px rgba(0,0,0,0.6);
1120 -moz-box-shadow: 2px 2px 9px rgba(0,0,0,0.6);
1121 box-shadow: 2px 2px 9px rgba(0,0,0,0.6);
1122
1123 color: white;
1124}
1125
1126div.userInfoBox div.body {
1127 padding: 0px 12px;
1128}
1129
1130div.userInfoBox div.header {
1131 height: 30px;
1132}
1133
1134div.userInfoBox div.header h1 {
1135 font-size: 8pt;
1136 font-weight: normal;
1137 margin: 0px;
1138 padding-top: 12px;
1139 padding-left: 12px;
1140}
1141
1142div.userInfoBox div.header a.lockButton {
1143 position: absolute;
1144 top: 8px;
1145 right: 12px;
1146 display: block;
1147 width: 15px;
1148 height: 20px;
1149 text-decoration: none;
1150 background: url(../images/old/lock/unlocked.png) no-repeat -5px -2px;
1151}
1152
1153div.userInfoBox div.header a.lockButton:hover {
1154 background: url(../images/old/lock/unlocked_hover.png) no-repeat -5px -2px;
1155}
1156
1157div.userInfoBox.locked {
1158 z-index:19001;
1159}
1160
1161div.modalDialogMask.userInfoBoxMask {
1162 -moz-opacity: 0.0;
1163 opacity: .0;
1164 filter: alpha(opacity=0);
1165 z-index:19000;
1166}
1167
1168div.userInfoBox.locked div.header a.lockButton {
1169 background: url(../images/old/lock/locked.png) no-repeat -5px -2px;
1170}
1171
1172div.userInfoBox.locked div.header a.lockButton:hover {
1173 background: url(../images/old/lock/locked_hover.png) no-repeat -5px -2px;
1174}
1175
1176div.userInfoBox div.body h3 {
1177 font-size: 11pt;
1178 font-weight: bold;
1179 margin: 0px;
1180}
1181
1182div.userInfoBox div.body ul {
1183 /* #####*/
1184 list-style-image: url(../images/old/main/userInfoBullet.png);
1185 font-size: 8pt;
1186 padding: 0px;
1187 margin: 4px 0px;
1188 list-style-position: inside;
1189 text-shadow: #000000 0 0 0;
1190}
1191
1192div.userInfoBox div.body ul li span.number {
1193 font-weight: bold;
1194 padding-right: 3px;
1195}
1196
1197div.userInfoBox div.body a {
1198 display: block;
1199 margin-top: 8
1200 px;
1201 border-top: 1px solid white;
1202 padding-top: 6px;
1203 font-size: 10pt;
1204 font-weight: bold;
1205 color: #d15a22;
1206 text-decoration: none;
1207 border-color: #fe9a5f;
1208}
1209
1210div.userInfoBox div.body a:hover {
1211 color: #8c3b15;
1212}
1213
1214div.userInfoBox.locked div.body a {
1215 display: none;
1216}
1217
1218/* @end */
1219
1220
1221/* @group Message Box */
1222
1223div.messageBox {
1224 position: absolute;
1225 width: 409px;
1226 height: 29px;
1227 top: 23px;
1228 left: 204px;
1229 background: url(../images/old/main/messageBoxBackground.png);
1230}
1231
1232div.messageBox h3 {
1233 display: inline-block;
1234 color: #342f6b;
1235 font-weight: bold;
1236 margin: 7px 2px 0px 12px;
1237 font-size: 10pt;
1238
1239}
1240
1241body.ext-gecko div.messageBox h3 {
1242 display: -moz-inline-box;
1243}
1244
1245div.messageBox h1 {
1246 color: #342f6b;
1247 display: inline;
1248 font-weight: normal;
1249 margin: 0px 1px;
1250 font-size: 9pt;
1251}
1252
1253div.messageBox a {
1254 display: block;
1255 width: 20px;
1256 height: 20px;
1257 float: right;
1258 position: absolute;
1259 right: 5px;
1260 top: 4px;
1261 background-image: url(../images/old/main/messageBoxCloseButton.png);
1262}
1263
1264div.messageBox a:hover {
1265 background-image: url(../images/old/main/messageBoxCloseButtonActive.png);
1266}
1267
1268/* @end */
1269
1270/* @group Side panels */
1271
1272div.sidePanels {
1273/*
1274 position: relative;
1275 top: 110px;
1276*/
1277 float: left;
1278 margin-top: 106px;
1279 margin-left: 20px;
1280 width: 160px;
1281
1282}
1283
1284/* @group Tab Side Panel */
1285
1286div.tabSidePanel {
1287 margin-right: -10px;
1288/*
1289 position: absolute;
1290 width: 250px;
1291 height: 250px;
1292 top: 250px;
1293 left: 10px;
1294*/
1295}
1296
1297div.tabSidePanel ul {
1298 margin: 0px;
1299 padding-left: 0px;
1300 list-style-type: none;
1301 color: #f78b46;
1302}
1303
1304/* @group Main tabs */
1305
1306div.tabSidePanel ul.mainTabs {
1307 margin: 0px;
1308}
1309
1310div.tabSidePanel ul.mainTabs li {
1311 /*margin-bottom: 6px;*/
1312}
1313
1314div.tabSidePanel ul.mainTabs li a {
1315 display: block;
1316 line-height: 30px;
1317 height: 43px;
1318 padding-left: 40px;
1319 color: #ff6621;
1320 margin: 0px;
1321 font-weight: normal;
1322 font-size: 13pt;
1323 text-decoration: none;
1324}
1325
1326div.tabSidePanel ul.mainTabs li div.selectionHighlighter {
1327 display: none;
1328}
1329
1330div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter {
1331 display: block;
1332 position: absolute;
1333 left: 154px;
1334 margin-top: -43px;
1335}
1336
1337/*
1338div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter div.selectionHighlighterIcon {
1339 background-image: url(../images/main/tabs/selectionHighligher.png);
1340 width: 50px;
1341 height: 34px;
1342 float: left;
1343 z-index: 35000;
1344 border: 1px solid red;
1345}
1346*/
1347
1348div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter a.add {
1349 font-size: 14pt;
1350 font-weight: bold;
1351 position: relative;
1352 top: -34px;
1353 right: 16px;
1354 background: none;
1355 color: #c0531b;
1356 padding-left: 15px;
1357}
1358
1359div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter a.add:hover {
1360 color: white;
1361}
1362
1363div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter a.add span {
1364 font-size: 8pt;
1365 vertical-align: middle;
1366}
1367
1368div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter a.add h3 {
1369 display: inline;
1370 padding-left: 5px;
1371}
1372
1373div.tabSidePanel ul.mainTabs li.cards.selected a {
1374 margin-left: -10px;
1375 padding-left: 50px;
1376 color: white;
1377 background: url(../images/old/main/tabs/cardsBackground.png) -9px -14px;
1378}
1379
1380div.tabSidePanel ul.mainTabs li.cards.selected a:hover {
1381 background: url(../images/old/main/tabs/cardsBackground.png) -9px -14px;
1382}
1383
1384div.tabSidePanel ul.mainTabs li.cards a {
1385 background: url(../images/old/main/tabs/cardsBackground.png) -19px -63px;
1386}
1387
1388div.tabSidePanel ul.mainTabs li.cards a:hover {
1389 background: url(../images/old/main/tabs/cardsBackground.png) -19px -110px;
1390}
1391
1392
1393
1394div.tabSidePanel ul.mainTabs li.directLogins.selected a {
1395 margin-left: -10px;
1396 padding-left: 50px;
1397 color: white;
1398 /* background: url(../images/old/main/tabs/directLoginBackground.png) 0 -1px;*/
1399 background: url(../images/old/main/tabs/directLoginBackground.png) -9px -14px;
1400}
1401
1402div.tabSidePanel ul.mainTabs li.directLogins.selected a:hover {
1403 color: white;
1404 /* background: url(../images/old/main/tabs/directLoginBackground.png) 0 -1px;*/
1405 background: url(../images/old/main/tabs/directLoginBackground.png) -9px -14px;
1406}
1407
1408div.tabSidePanel ul.mainTabs li.directLogins a {
1409 /* background: url(../images/old/main/tabs/directLoginBackground.png) 0 -34px;*/
1410 background: url(../images/old/main/tabs/directLoginBackground.png) -19px -63px;
1411}
1412
1413div.tabSidePanel ul.mainTabs li.directLogins a:hover {
1414 /* background: url(../images/old/main/tabs/directLoginBackground.png) 0 -67px;*/
1415 background: url(../images/old/main/tabs/directLoginBackground.png) -19px -110px;
1416}
1417
1418
1419
1420
1421
1422/* @end */
1423
1424/* @group Other tabs */
1425
1426div.tabSidePanel ul.otherTabs {
1427 margin: 10px 0px;
1428}
1429
1430div.tabSidePanel ul.otherTabs li {
1431 margin-top: -4px;
1432}
1433
1434div.tabSidePanel ul.otherTabs li div.selectionHighlighter {
1435 display: none;
1436}
1437
1438div.tabSidePanel ul.otherTabs li.selected div.selectionHighlighter {
1439 display: block;
1440 position: absolute;
1441 left: 154px;
1442 margin-top: -42px;
1443}
1444
1445div.tabSidePanel ul.otherTabs a {
1446 display: block;
1447 line-height: 36px;
1448 height: 43px;
1449 padding-left: 40px;
1450 color: #ff6621;
1451 text-decoration: none;
1452 /* background: url(../images/old/main/tabs/itemsBackground.png) -10px -49px;*/
1453}
1454
1455div.tabSidePanel ul.otherTabs li.selected a {
1456 /*background: url(../images/old/main/tabs/itemsBackground.png) 0 -1px; */
1457 /*background: url(../images/old/main/tabs/itemsBackground.png) 0 -67px; */
1458 margin-left: -10px;
1459 padding-left: 50px;
1460 background: url(../images/old/main/tabs/itemsBackground.png) 1px -96px;
1461 color: white;
1462}
1463
1464div.tabSidePanel ul.otherTabs a:hover {
1465 /*background: url(../images/old/main/tabs/itemsBackground.png) 0 -34px; */
1466 background: url(../images/old/main/tabs/itemsBackground.png) -10px -49px;
1467}
1468
1469/* @end */
1470
1471/* @end */
1472
1473/* @group Tag Side Panel */
1474
1475div.tagSidePanel {
1476/*
1477 position: relative;
1478 width: 250px;
1479 min-height: 100px;
1480 left: 10px;
1481*/
1482
1483 margin-right: -8px;
1484}
1485
1486div.tagSidePanel div.header {
1487 height: 50px;
1488 background-image: url(../images/old/main/tabs/tagsBackground.png);
1489}
1490
1491div.tagSidePanel div.header h1 {
1492 padding-left: 52px;
1493 padding-top: 14px;
1494 font-size: 14pt;
1495 font-weight: normal;
1496 color: #888888;
1497}
1498
1499div.tagSidePanel div.body {
1500 background: url(../images/old/main/tabs/tagsBackground.png) -255px;
1501}
1502
1503div.tagSidePanel div.footer {
1504 height: 10px;
1505 background: url(../images/old/main/tabs/tagsBackground.png) -510px -40px;
1506}
1507
1508div.tagSidePanel ul.tags {
1509 margin: 0px;
1510 list-style-type: none;
1511 padding: 0px;
1512}
1513
1514div.tagSidePanel ul.tags li a {
1515 display: block;
1516 font-size: 9pt;
1517 text-decoration: none;
1518 color: #ff6621;
1519 padding: 0px 4px 0px 15px;
1520 line-height: 20px;
1521}
1522
1523div.tagSidePanel ul.tags li a:hover {
1524 background-color: #dddddd;
1525}
1526
1527div.tagSidePanel ul.tags li.selected a:hover {
1528}
1529
1530div.tagSidePanel ul.tags li span.tagCardinality {
1531 float: right;
1532 font-size: 8pt;
1533 color: #999999;
1534 margin-right: 15px;
1535 margin-top: -17px;
1536}
1537
1538div.tagSidePanel ul.tags li.selected a {
1539 background-color: #d4d5cf;
1540}
1541
1542div.tagSidePanel ul.tags li.selected a:hover {
1543 background-color: #d4d5cf;
1544}
1545
1546div.tagSidePanel ul.tags li.selected a {
1547 font-weight: bold;
1548}
1549
1550/* @end */
1551
1552
1553/* @group Group Side Panel */
1554
1555div.groupSidePanel {
1556 margin-right: -10px;
1557/*
1558 position: relative;
1559 width: 250px;
1560 min-height: 100px;
1561 left: 10px;
1562*/
1563}
1564
1565div.groupSidePanel div.header {
1566 height: 50px;
1567 background-image: url(../images/old/main/tabs/groupsBackground.png);
1568}
1569
1570div.groupSidePanel div.header h1 {
1571 padding-left: 52px;
1572 padding-top: 14px;
1573 font-size: 14pt;
1574 font-weight: normal;
1575 color: white;
1576}
1577
1578div.groupSidePanel div.header a {
1579 float: right;
1580 margin-top: -30px;
1581 margin-right: 20px;
1582 text-decoration: none;
1583 color: #666666;
1584 font-size: 9pt;
1585 line-height: 18px;
1586}
1587
1588div.groupSidePanel div.header a:hover {
1589 color: #444444;
1590}
1591
1592div.groupSidePanel div.body {
1593 background: url(../images/old/main/tabs/groupsBackground.png) -255px;
1594}
1595
1596div.groupSidePanel div.footer {
1597 height: 10px;
1598 background: url(../images/old/main/tabs/groupsBackground.png) -510px -39px;
1599}
1600
1601
1602
1603div.groupSidePanel ul.groups {
1604 margin: 0px;
1605 list-style-type: none;
1606 padding: 0px;
1607}
1608
1609div.groupSidePanel ul.groups li a {
1610 display: block;
1611 font-size: 9pt;
1612 text-decoration: none;
1613 color: white;
1614 padding: 0px 4px 0px 15px;
1615 line-height: 20px;
1616}
1617
1618div.groupSidePanel ul.groups li a:hover {
1619 background-color: #aaaaaa;
1620}
1621
1622div.groupSidePanel ul.groups li.selected a:hover {
1623}
1624
1625div.groupSidePanel ul.groups li span.groupCardinality {
1626 float: right;
1627 font-size: 8pt;
1628 color: #dddddd;
1629 margin-right: 15px;
1630 margin-top: -17px;
1631}
1632
1633div.groupSidePanel ul.groups li.selected a {
1634 background-color: #bbbbbb;
1635}
1636
1637div.groupSidePanel ul.groups li.selected a:hover {
1638 background-color: #bbbbbb;
1639}
1640
1641div.groupSidePanel ul.groups li.selected a {
1642 font-weight: bold;
1643}
1644
1645/* @end */
1646
1647
1648
1649/* @end */
1650
1651/* @group MainPanels */
1652
1653div.mainPanels {
1654 float: left;
1655 width: 833px;
1656 margin-top: -38px;
1657/*
1658 position: relative;
1659 width: 100%;
1660 min-height: 600px;
1661 top: -40px;
1662 left: 250px;
1663*/
1664}
1665
1666div.mainFooter {
1667 clear: both;
1668}
1669
1670/* @end */
1671
1672/* @group Grids */
1673
1674/* @group grid Component */
1675
1676/* @group delete */
1677
1678div.gridComponent table.rows tbody tr td.delete {
1679}
1680
1681/*div.body div.rows table.rows tbody tr td.delete */
1682div.delete,
1683div.new {
1684 padding-left: 5px;
1685 height: 19px;
1686}
1687
1688div.new span,
1689div.delete span {
1690 margin: 0px;
1691 padding: 0px;
1692 border: 0px;
1693 display: inline-block;
1694 height: 19px;
1695 padding-right: 6px;
1696}
1697
1698div.new span a,
1699div.delete span a {
1700 white-space: nowrap;
1701}
1702
1703div.delete:hover {
1704 background: url(../images/old/delete_background_left.png) no-repeat 0;
1705}
1706div.delete:hover span {
1707 background: url(../images/old/delete_background.png) no-repeat right 0;
1708}
1709
1710div.new:hover {
1711 background: url(../images/old/new_background_left.png) no-repeat 0;
1712}
1713div.new:hover span {
1714 background: url(../images/old/new_background.png) no-repeat right 0;
1715}
1716
1717/*
1718tr.selected div.delete {
1719 background: url(../images/old/delete_background_left.png) no-repeat 0;
1720}
1721tr.selected div.delete span {
1722 background: url(../images/old/delete_background.png) no-repeat right 0;
1723}
1724*/
1725div.body div.rows table.rows tbody tr td.delete div.delete span a {
1726 visibility: hidden;
1727 font-size: 8pt;
1728 vertical-align: -13px;
1729 color: black;
1730}
1731
1732div.body div.rows table.rows tbody tr.selected td.delete div.delete span a {
1733 visibility: visible;
1734}
1735
1736div.body div.rows table.rows tbody tr:hover td.delete div.delete span a {
1737 visibility: visible;
1738}
1739
1740div.body div.rows table.rows tbody tr:hover td.delete div.delete:hover span a {
1741 color: white;
1742}
1743/*
1744div.body div.rows table.rows tbody tr.selected td.delete div.delete span a {
1745 color: white;
1746}
1747*/
1748/* @end */
1749
1750/* @group header */
1751
1752div.gridComponent table.rows thead tr th {
1753 text-align: left;
1754 height: 30px;
1755 vertical-align: bottom;
1756}
1757
1758div.gridComponent table.rows thead tr th.sortable span {
1759 cursor: pointer;
1760}
1761
1762div.gridComponent table.rows thead tr th.sortable span a {
1763 margin-left: 5px;
1764 padding-left: 10px;
1765}
1766
1767div.gridComponent table.rows thead tr th.directLoginTH {
1768 width: 420px;
1769}
1770
1771div.gridComponent table.rows thead tr th.latestUpdateTH {
1772 width: 100px;
1773}
1774
1775div.gridComponent table.rows thead tr th.commandsTH {
1776 width: 150px;
1777}
1778
1779div.gridComponent table.rows thead a {
1780 text-decoration: none;
1781}
1782
1783div.gridComponent table.rows thead span {
1784 font-weight: normal;
1785 font-size: 9pt;
1786 line-height: 20px;
1787}
1788
1789div.gridComponent div.header div.headerSlot {
1790 float: right;
1791}
1792
1793/* @end */
1794
1795div.mainPanels div.gridComponent div.body table.rows td.favicon {
1796 padding-left: 25px;
1797}
1798
1799div.mainPanels div.gridComponent div.body table.rows td.favicon img {
1800 width: 16px;
1801 height: 16px;
1802 border: 0px;
1803}
1804
1805
1806
1807/* @end */
1808
1809/* @group Card Grid */
1810
1811/* @group DirectLogin links */
1812
1813div.gridComponent th.directLoginTH span {
1814 margin-left: 7px;
1815}
1816
1817td.card_directLogins div {
1818 display: inline-table;
1819}
1820
1821td.card_directLogins span {
1822 display: inline-block;
1823}
1824/*
1825td.card_directLogins a {
1826 display: inline-table;
1827 height: 19px;
1828
1829 padding-right: 7px;
1830}
1831
1832td.card_directLogins a:hover {
1833 background: url(../images/old/directLink_background.png) right 0;
1834}
1835*/
1836
1837div.card_directLogin {
1838 display: inline-block;
1839 height: 19px;
1840 padding-left: 7px;
1841}
1842
1843div.card_directLogin_ellipses span {
1844 padding-bottom: 2px;
1845}
1846
1847div.card_directLogin div.card_directLogin_body {
1848 display: inline-block;
1849 height: 19px;
1850 padding-right: 8px;
1851 background-position: left;
1852}
1853
1854div.card_directLogin div.card_directLogin_body a{
1855 vertical-align: -14px;
1856}
1857
1858/*div.card_directLogin:hover {*/
1859div.card_directLogin:hover {
1860 background: url(../images/old/directLink_background_left.png) no-repeat 0 0;
1861}
1862
1863/*div.card_directLogin:hover div {*/
1864div.card_directLogin:hover div.card_directLogin_body {
1865 background: url(../images/old/directLink_background.png) right 0;
1866}
1867
1868/* @group DirectLogin Popup */
1869
1870div.DirectLoginListPopup {
1871 position: absolute;
1872 width: 184px;
1873}
1874
1875div.DirectLoginListPopup div.DirectLoginListPopup_body {
1876 background-image: url(../images/old/directLogins_background.png);
1877 padding-top: 8px;
1878}
1879
1880div.DirectLoginListPopup div.DirectLoginListPopup_footer {
1881 height: 8px;
1882 background-image: url(../images/old/directLogins_background_bottom.png);
1883}
1884
1885div.DirectLoginListPopup div.DirectLoginListPopup_body ul {
1886 margin: 0px;
1887 padding-left: 13px;
1888 list-style: none;
1889}
1890
1891div.DirectLoginListPopup div.DirectLoginListPopup_body ul li {
1892 padding-top: 4px;
1893 height: 20px;
1894 padding-right: 10px;
1895 white-space: nowrap;
1896}
1897
1898div.DirectLoginListPopup div.DirectLoginListPopup_body ul li div {
1899 padding-right: 10px;
1900 overflow: hidden;
1901}
1902div.DirectLoginListPopup div.DirectLoginListPopup_body ul li img.favicon {
1903 padding-left: 9px;
1904 padding-right: 5px;
1905}
1906
1907div.DirectLoginListPopup div.DirectLoginListPopup_body ul li a {
1908 text-decoration: none;
1909 color: white;
1910 font-weight: normal;
1911 font-size: 10pt;
1912 vertical-align: 3px;
1913 white-space: nowrap;
1914 padding-right:8px;
1915}
1916
1917div.DirectLoginListPopup div.DirectLoginListPopup_body ul li:hover {
1918 /* background-color: #a5a696;*/
1919 /* background-color: #7b7d70;*/
1920 background-color: rgba(123,125,112,0.5);
1921}
1922
1923div.DirectLoginListPopup div.DirectLoginListPopup_body ul li:hover a {
1924 background: url(../images/old/directLink_no_background.png) right;
1925}
1926
1927/* @end */
1928
1929
1930/* @end */
1931
1932div.mainPanels div.gridComponent div.header {
1933/*
1934 height: 90px;
1935 background: url(../images/old/main/blocks/cardGridBackground.png) no-repeat;
1936*/
1937 background: url(../images/old/main/blocks/cardGridBackground.png) no-repeat;
1938 padding-left: 40px;
1939 padding-right: 40px;
1940 padding-top: 20px;
1941 padding-bottom: 10px;
1942}
1943
1944div.mainPanels div.gridComponent div.header form.search {
1945 height: 32px;
1946 margin: 0px;
1947}
1948
1949div.mainPanels div.gridComponent div.header form.search div.clearSearchButton {
1950 position: absolute;
1951 margin-left: 192px;
1952 width: 22px;
1953 height: 22px;
1954 margin-top: 6px;
1955 background: url(../images/old/filter/clearFilter_notSelected.png) no-repeat;
1956}
1957
1958div.mainPanels div.gridComponent div.header form.search div.clearSearchButton:hover {
1959 background: url(../images/old/filter/clearFilter_selected.png) no-repeat;
1960 cursor: pointer;
1961}
1962
1963div.mainPanels div.gridComponent div.header form.search div.search {
1964 display: block;
1965 float: left;
1966 width: 217px;
1967}
1968
1969div.mainPanels div.gridComponent div.header form.search input.search {
1970 border: 1px solid #76786a;
1971 color: #666666;
1972 font-size: 12pt;
1973 width: 100%;
1974 padding: 4px;
1975 padding-left: 24px;
1976 padding-right: 26px;
1977 background: #e8ecde url(../images/old/main/grid/search.png) no-repeat 2px 4px;
1978}
1979
1980div.mainPanels div.gridComponent div.header form.search input.search.disabled {
1981 disabled:disabled;
1982}
1983
1984div.mainPanels div.gridComponent div.header form.search input.search.running {
1985 background: #e8ecde url(../images/old/main/grid/running_search.gif) no-repeat 4px 5px;
1986}
1987
1988div.mainPanels div.gridComponent div.body {
1989 clear: both;
1990 background: url(../images/old/main/blocks/cardGridBackground.png) repeat-y -836px;
1991}
1992
1993div.mainPanels div.gridComponent div.footer {
1994 background: url(../images/old/main/blocks/cardGridBackground.png) 834px -28px;
1995 height: 35px;
1996}
1997
1998div.mainPanels div.gridComponent div.body h1 {
1999 margin: 0px;
2000}
2001
2002div.mainPanels div.gridComponent div.body div.rows {
2003 margin-left: 9px;
2004 margin-right: 6px;
2005 min-height: 582px;
2006 background: url(../images/old/main/blocks/cardGridStripes.png) 0 7px;
2007}
2008
2009div.mainPanels div.gridComponent.noRows div.body table.rows thead,
2010div.mainPanels div.gridComponent.empty div.body table.rows thead {
2011 visibility: hidden;
2012}
2013
2014div.mainPanels div.gridComponent.empty div.body div.rows {
2015 background: #eaebe6 url(../images/old/lock/background_star.png) no-repeat center center;
2016}
2017
2018div.mainPanels div.gridComponent.noRows div.body div.rows {
2019 background: #eaebe6;
2020}
2021
2022div.mainPanels div.gridComponent div.body table.rows {
2023 display: block;
2024 width: 100%;
2025}
2026
2027div.mainPanels div.gridComponent div.body table.rows tbody tr.odd.selected {
2028 background-color: #a5a696;
2029}
2030
2031div.mainPanels div.gridComponent div.body table.rows tbody tr.even.selected {
2032 background-color: #a5a696;
2033}
2034
2035div.mainPanels div.gridComponent div.body table.rows tbody tr.selected td a {
2036 color: #f3f4eb;
2037}
2038
2039
2040div.mainPanels div.gridComponent div.body table.rows tbody tr.odd {
2041 background-color: #d4d5cf;
2042}
2043
2044div.mainPanels div.gridComponent div.body table.rows tbody tr.even {
2045 background-color: #eaebe6;
2046}
2047
2048div.mainPanels div.gridComponent div.body table.rows tbody tr.odd:hover {
2049 background-color: #a5a696;
2050}
2051
2052div.mainPanels div.gridComponent div.body table.rows tbody tr.even:hover {
2053 background-color: #a5a696;
2054}
2055
2056div.mainPanels div.gridComponent div.body table.rows tbody tr td {
2057 height: 23px;
2058 max-height: 23px;
2059/*
2060 white-space: nowrap;
2061 overflow: hidden;
2062*/
2063}
2064
2065div.mainPanels div.gridComponent div.body table.rows tbody tr td span {
2066 color: #828479;
2067 font-size: 10pt;
2068}
2069
2070div.mainPanels div.gridComponent div.body table.rows tbody tr td a {
2071 color: #828479;
2072 font-size: 10pt;
2073 text-decoration: none;
2074}
2075
2076div.mainPanels div.gridComponent div.body table.rows tbody tr:hover td span {
2077 color: #f3f4eb;
2078}
2079
2080div.mainPanels div.gridComponent div.body table.rows tbody tr.selected td span {
2081 color: #f3f4eb;
2082}
2083
2084div.mainPanels div.gridComponent div.body table.rows tbody tr:hover td a {
2085 color: #f3f4eb;
2086}
2087
2088div.mainPanels div.gridComponent div.body table.rows tbody tr td.title a {
2089 font-weight: bold;
2090}
2091
2092div.mainPanels div.gridComponent div.body table.rows tbody tr td img.favicon {
2093 float: right;
2094 padding-right: 6px;
2095}
2096
2097/* @group header */
2098
2099div.gridComponent table.rows thead img {
2100 padding-left: 10px;
2101 vertical-align: middle;
2102}
2103
2104div.gridComponent table.rows thead tr th {
2105 background-color: #eaebe6;
2106 border-bottom: 1px solid #b3b4af;
2107}
2108
2109div.gridComponent table.rows thead span {
2110 color: #8c8f7e;
2111}
2112
2113div.gridComponent table.rows thead tr th.unsorted span.sortable a {
2114 background-image: url(../images/old/main/grid/unsorted.png);
2115}
2116
2117div.gridComponent table.rows thead tr th.descending span.sortable a {
2118 background-image: url(../images/old/main/grid/descending.png);
2119}
2120
2121div.gridComponent table.rows thead tr th.ascending span.sortable a {
2122 background-image: url(../images/old/main/grid/ascending.png);
2123}
2124
2125div.gridComponent table.rows thead tr th.faviconTH {
2126 width: 53px;
2127}
2128
2129div.gridComponent table.rows thead tr th.titleTH {
2130 width: 200px;
2131 max-width: 200px;
2132}
2133
2134div.gridComponent table.rows thead tr th.deleteTH {
2135 width: 50px;
2136}
2137
2138
2139/* @end */
2140
2141
2142/* @end */
2143
2144/* @group Direct login Grid */
2145/*
2146div.mainPanels div.directLoginGrid div.header {
2147/*
2148 height: 90px;
2149 background: url(../images/old/main/blocks/cardGridBackground.png) no-repeat;
2150* /
2151}
2152
2153div.mainPanels div.directLoginGrid div.header form.search {
2154 background: url(../images/old/main/blocks/directLoginGridBackground.png) no-repeat;
2155 padding-left: 40px;
2156 padding-top: 20px;
2157 padding-bottom: 10px;
2158 margin: 0px;
2159}
2160
2161div.mainPanels div.directLoginGrid div.header form.search input.search {
2162 border: 1px solid #76786a;
2163 color: #666666;
2164 font-size: 12pt;
2165 padding: 4px;
2166 background-color: #e8ecde;
2167}
2168
2169div.mainPanels div.directLoginGrid div.header form.search input.searchButton {
2170 background-color: #858877;
2171 border: 0px;
2172 color: white;
2173 font-size: 10pt;
2174}
2175
2176div.mainPanels div.directLoginGrid div.body {
2177 background: url(../images/old/main/blocks/directLoginGridBackground.png) repeat-y -836px;
2178}
2179
2180div.mainPanels div.directLoginGrid div.footer {
2181 background: url(../images/old/main/blocks/directLoginGridBackground.png) 834px -28px;
2182 height: 35px;
2183}
2184
2185div.mainPanels div.directLoginGrid div.body h1 {
2186 margin: 0px;
2187}
2188
2189div.mainPanels div.directLoginGrid div.body div.rows {
2190 margin-left: 9px;
2191 margin-right: 6px;
2192 min-height: 582px;
2193 background: url(../images/old/main/blocks/directLoginGridStripes.png) 0 7px;
2194}
2195
2196div.mainPanels div.directLoginGrid div.body table.rows {
2197 display: block;
2198 width: 100%;
2199}
2200
2201div.mainPanels div.directLoginGrid div.body table.rows img {
2202 border: 0px;
2203}
2204
2205div.mainPanels div.directLoginGrid div.body table.rows tbody tr.even {
2206 background-color: #787666;
2207}
2208
2209div.mainPanels div.directLoginGrid div.body table.rows tbody tr.odd {
2210 background-color: #646351;
2211}
2212
2213div.mainPanels div.directLoginGrid div.body table.rows tbody tr.odd:hover {
2214 background-color: #d1d4c6;
2215}
2216
2217div.mainPanels div.directLoginGrid div.body table.rows tbody tr.even:hover {
2218 background-color: #d1d4c6;
2219}
2220
2221div.mainPanels div.directLoginGrid div.body table.rows tbody tr td {
2222 height: 23px;
2223 color: #e1e0d6;
2224 font-size: 10pt;
2225}
2226
2227div.mainPanels div.directLoginGrid div.body table.rows tbody tr:hover td {
2228 color: #777867;
2229}
2230
2231div.mainPanels div.directLoginGrid div.body table.rows tbody tr td.title {
2232 font-weight: bold;
2233}
2234
2235div.directLoginGrid div.body table.rows tbody tr a {
2236 color: #e1e0d6;
2237 text-decoration: none;
2238}
2239
2240div.directLoginGrid div.body table.rows tbody tr:hover a {
2241 color: #777867;
2242}
2243*/
2244
2245/* @group DirectLogin links */
2246/*
2247td.card_directLogins div {
2248 display: inline-table;
2249}
2250
2251td.card_directLogins span {
2252 display: inline-table;
2253}
2254*/
2255div.directLogin_directLogin {
2256 display: inline-block;
2257 height: 19px;
2258 padding-left: 7px;
2259}
2260
2261div.directLogin_directLogin div.directLogin_directLogin_body {
2262 display: inline-block;
2263 height: 19px;
2264 padding-right: 8px;
2265 background-position: left;
2266}
2267
2268div.directLogin_directLogin div.directLogin_directLogin_body a {
2269 vertical-align: -14px;
2270}
2271
2272div.directLogin_directLogin:hover {
2273 background: url(../images/old/directLink_background_left.png) no-repeat 0 0;
2274}
2275
2276div.directLogin_directLogin:hover div.directLogin_directLogin_body {
2277 background: url(../images/old/directLink_background.png) right 0;
2278}
2279
2280table.rows tbody tr td div.directLogin_directLogin:hover div.directLogin_directLogin_body a {
2281 color: #f3f4eb;
2282}
2283
2284
2285
2286/* @end */
2287
2288
2289
2290/* @group header */
2291
2292div.directLoginGrid table.rows thead span {
2293 color: #e1e0d6;
2294}
2295
2296div.directLoginGrid table.rows thead tr th {
2297 background-color: #787762;
2298 border-bottom: 1px solid #999883;
2299}
2300
2301div.directLoginGrid table.rows thead tr th.faviconTH {
2302 min-width: 53px;
2303 width: 53px;
2304}
2305
2306div.directLoginGrid table.rows thead tr th.titleTH {
2307 min-width: 250px;
2308 width: 250px;
2309}
2310
2311div.directLoginGrid table.rows thead tr th.titleTH span {
2312 margin-left: 7px;
2313}
2314
2315div.directLoginGrid table.rows thead tr th.strengthTH {
2316 width: 100px;
2317}
2318
2319div.directLoginGrid table.rows thead tr th.cardTitleTH {
2320 width: 400px;
2321}
2322
2323div.directLoginGrid table.rows thead tr th.bookmarkableLinkTH {
2324 width: 64px;
2325}
2326
2327div.directLoginGrid table.rows thead tr th.deleteTH {
2328 width: 50px;
2329}
2330
2331div.directLoginGrid table.rows thead tr th.latestAccessTH {
2332 width: 100px;
2333}
2334
2335div.directLoginGrid table.rows thead tr th.commandsTH {
2336 width: 100px;
2337}
2338/*
2339div.directLoginGrid table.rows thead a {
2340 font-weight: normal;
2341 text-decoration: none;
2342 color: #e9e9df;
2343 font-size: 9pt;
2344 line-height: 20px;
2345}
2346*/
2347div.directLoginGrid table.rows thead img {
2348 padding-left: 10px;
2349 vertical-align: middle;
2350}
2351
2352div.directLoginGrid table.rows thead tr th.unsorted span.sortable a {
2353 background: url(../images/old/main/grid/directLogins/unsorted.png) no-repeat;
2354}
2355
2356div.directLoginGrid table.rows thead tr th.descending span.sortable a {
2357 background: url(../images/old/main/grid/directLogins/descending.png) no-repeat;
2358}
2359
2360div.directLoginGrid table.rows thead tr th.ascending span.sortable a {
2361 background: url(../images/old/main/grid/directLogins/ascending.png) no-repeat;
2362}
2363
2364/* @end */
2365
2366
2367
2368/* @end */
2369
2370
2371
2372/* @end */
2373
2374
2375/* @end */
2376
2377/* @group other Panels */
2378
2379/* @group common styles */
2380div.subPanelTabs {
2381}
2382
2383div.subPanelTabs ul {
2384 margin: 0px;
2385 margin-right: 7px;
2386 padding: 0px;
2387}
2388
2389div.subPanelTabs ul li.first {
2390}
2391
2392div.subPanelTabs ul li {
2393 display: inline-block;
2394 vertical-align: middle;
2395 /*width: 130px; */
2396 height: 50px;
2397 /*border-right: 1px solid #a5a79c;
2398 border-bottom: 1px solid #a5a79c;*/
2399 border-right: 1px solid #eef0e3;
2400 border-bottom: 1px solid #d5d5bc;
2401}
2402
2403div.subPanelTabs ul li.first:hover {
2404 /*background: url(../images/old/main/blocks/otherPanelBackground_selected.png) no-repeat -9px -5px; */
2405}
2406
2407div.subPanelTabs ul li:hover {
2408 /*background: url(../images/old/main/blocks/otherPanelBackground_selected.png) no-repeat -45px -5px; */
2409 border-right: 1px solid #d5d5bc;
2410 background-color: #eef0e3;
2411}
2412
2413div.subPanelTabs ul li a {
2414 color: #787872;
2415 text-decoration: none;
2416 display: block;
2417 text-align: center;
2418 padding-top: 15px;
2419 padding-left: 20px;
2420 padding-right: 20px;
2421 font-size: 13pt;
2422}
2423
2424div.subPanelTabs ul li.first {
2425 /*background: url(../images/old/main/blocks/otherPanelBackground_selected.png) no-repeat -9px -5px; */
2426 -webkit-border-top-left-radius: 20px;
2427 -moz-border-radius-topleft: 20px;
2428 border-top-left-radius: 20px;
2429}
2430
2431div.subPanelTabs ul li.selected {
2432 /*background: url(../images/old/main/blocks/otherPanelBackground_selected.png) no-repeat -45px -5px; */
2433 background-color: #eef0e3;
2434 border-bottom: 1px solid #eef0e3;
2435 border-right: 1px solid #d5d5bc;
2436}
2437
2438div.subPanelTabs ul li.selected:hover {
2439 border-right: 1px solid #d5d5bc;
2440}
2441
2442
2443div.subPanelTabs ul li.selected a {
2444 color: #444440;
2445}
2446
2447
2448
2449
2450
2451
2452div.subPanelContent {
2453 padding-top: 20px;
2454 padding-left: 30px;
2455 padding-right: 30px;
2456 min-height: 280px;
2457 color: #787872;
2458 margin: 0px 6px 0 9px;
2459}
2460
2461div.subPanelContent ul {
2462 margin: 0px;
2463 padding: 0px;
2464 list-style-type: none;
2465}
2466
2467div.subPanelContent ul li.selected {
2468 display: block;
2469}
2470
2471div.subPanelContent ul li {
2472 display: none;
2473}
2474
2475div.subPanelContent h3 {
2476 margin: 0px;
2477 border: 0px;
2478 padding: 0px;
2479}
2480
2481/* @end */
2482
2483/* @group mainPanels otherPanel */
2484div.mainPanels div.otherPanel {
2485 margin: 5px 10px;
2486 background-color: #eef0e3;
2487
2488 -webkit-border-radius: 20px;
2489 -moz-border-radius: 20px;
2490 border-radius: 20px;
2491
2492 -webkit-box-shadow: 2px 2px 9px rgba(0,0,0,0.6);
2493 -moz-box-shadow: 2px 2px 9px rgba(0,0,0,0.6);
2494 box-shadow: 2px 2px 9px rgba(0,0,0,0.6);
2495}
2496div.mainPanels div.otherPanel div.header {
2497 /*background: url(../images/old/main/blocks/otherPanelBackground.png) no-repeat; */
2498/*
2499 height: 90px;
2500*/
2501 background-color: #d5d5bc;
2502
2503 /*padding-left: 9px;
2504 padding-top: 5px; */
2505 margin: 0px;
2506 margin-bottom: 0px;
2507
2508 -webkit-border-top-left-radius: 20px;
2509 -webkit-border-top-right-radius: 20px;
2510 -moz-border-radius-topleft: 20px;
2511 -moz-border-radius-topright: 20px;
2512 border-top-left-radius: 20px;
2513 border-top-right-radius: 20px;
2514}
2515
2516div.mainPanels div.otherPanel div.body {
2517 /*background: url(../images/old/main/blocks/otherPanelBackground.png) repeat-y -836px; */
2518 margin: 0px;
2519 border: 0px;
2520 padding: 0px;
2521}
2522
2523div.mainPanels div.otherPanel div.footer {
2524 /*background: url(../images/old/main/blocks/otherPanelBackground.png) 834px -18px; */
2525 height: 45px;
2526}
2527
2528div.mainPanels div.otherPanel div.body h1 {
2529 margin: 0px;
2530}
2531
2532/* @end */
2533
2534/* @group Account */
2535
2536form.changePassphrase {
2537}
2538
2539form.changePassphrase div.currentCredentials,
2540form.changePassphrase div.newPassphrase {
2541 float: left;
2542 padding: 10px 20px;
2543}
2544
2545form.changePassphrase label {
2546 display: inline-block;
2547 width: 150px;
2548}
2549
2550form.changePassphrase div.confirm {
2551 clear: both;
2552 padding: 10px 20px;
2553}
2554
2555form.changePassphrase div.confirm label {
2556 width: 500px;
2557}
2558
2559div.currentCredentials {
2560}
2561
2562div.accountPanel h3.manageOTP {
2563 margin-top: 20px;
2564 margin-left: -20px;
2565 padding-top: 10px;
2566 padding-left: 20px;
2567 border-top: 1px solid #aaaaaa;
2568}
2569
2570/* @end */
2571
2572
2573
2574/* @end */
2575
2576/* @group Message Panel (?) */
2577/*
2578div.messagePanelWrapper div.mask {
2579 position: fixed;
2580 top: 0px;
2581 left: 0px;
2582 right: 0px;
2583 bottom: 0px;
2584
2585 background-color: black;
2586 z-index:50001;
2587
2588 -moz-opacity: 0.0;
2589 opacity:.0;
2590 filter: alpha(opacity=0);
2591/ *
2592 -moz-opacity: 0.7;
2593 opacity:.70;
2594 filter: alpha(opacity=70);
2595* /
2596}
2597
2598div.messagePanelFrame {
2599 border: 1px solid white;
2600 z-index:50002;
2601/ *
2602 width: 443px;
2603 height: 155px;
2604 position: fixed;
2605 top: 205px;
2606 left: 260px;
2607 margin-left: auto;
2608 margin-right: auto;
2609 max-width: 468px;
2610* /
2611}
2612
2613
2614div.messagePanel {
2615 position: fixed;
2616 z-index:50003;
2617 top: 0px;
2618 left: 0px;
2619/ *
2620 margin-left: auto;
2621 margin-right: auto;
2622 max-width: 468px;
2623 top: 200px;
2624 left: 250px;
2625 left: 100px;
2626 right: 100px;
2627* /
2628}
2629
2630 div.messagePanel div.header {
2631 height: 34px;
2632 width: 468;
2633 background-image: url(../images/old/alert/header.png);
2634}
2635
2636 div.messagePanel div.body {
2637 background-image: url(../images/old/alert/body.png);
2638 padding: 0px 20px 10px 20px;
2639 min-height: 100px;
2640}
2641/ *
2642div#javaScriptAlert div.body div.alert {
2643 padding-left: 100px;
2644 background: url(../images/old/alert/alert.png) no-repeat;
2645}
2646* /
2647
2648div.messagePanel div.body img.alert {
2649 float: left;
2650}
2651
2652div.messagePanel div.body div.alert {
2653 padding-left: 100px;
2654}
2655
2656 div.messagePanel div.footer {
2657 height: 34px;
2658 width: 468;
2659 background-image: url(../images/old/alert/footer.png);
2660}
2661
2662div.messagePanel div.message h1 {
2663 font-size: 16pt;
2664 margin: 0px;
2665 color: #ff5930;
2666}
2667
2668div.messagePanel div.message p {
2669 margin-top: 0px;
2670 color: #999999;
2671}
2672
2673div.messagePanel div.message h3 {
2674 font-size: 12pt;
2675 margin-bottom: 0px;
2676 color: #ff5930;
2677}
2678
2679div.messagePanel div.message h5 {
2680 margin: 0px;
2681 color: #999999;
2682}
2683
2684
2685*/
2686/* @end */
2687
2688/* @group LoginProgress (?) */
2689/*
2690div#loginProgress {
2691 position: relative;
2692 left: -198px;
2693 top: -118px;
2694 width: 397px;
2695 height: 236px;
2696 background: url(../images/old/loginProgress/background.png);
2697}
2698
2699div#loginProgress div.header {
2700 height: 52px;
2701}
2702
2703div#loginProgress div.header h3 {
2704 font-size: 12pt;
2705 font-weight: normal;
2706 margin: 0px;
2707 color: #787872;
2708 padding-top: 25px;
2709 padding-left: 35px;
2710}
2711
2712div#loginProgress div.body {
2713 height: 120px;
2714 overflow: auto;
2715 margin-left: 19px;
2716 margin-right: 18px;
2717}
2718
2719div#loginProgress div.footer {
2720 margin-left: 19px;
2721 margin-right: 18px;
2722}
2723
2724div#loginProgress div.footer a {
2725 font-weight: bold;
2726 text-decoration: none;
2727 text-align: center;
2728 color: #787872;
2729 display: block;
2730 font-size: 11pt;
2731 width: 100px;
2732 margin-top: 13px;
2733 margin-left: auto;
2734 margin-right: auto;
2735}
2736
2737div#loginProgress div.footer a:hover {
2738 color: #515247;
2739}
2740
2741*/
2742
2743/* @end */
2744
2745
2746
2747div#modalDialogMask,
2748div.modalDialogMask {
2749 z-index: 20000;
2750 /* position: absolute;*/
2751 position: fixed;
2752 top:0;
2753 left:0;
2754 -moz-opacity: 0.5;
2755 opacity: .50;
2756 filter: alpha(opacity=50);
2757 /* background-color: #cccccc;*/
2758 background-color: #000000;
2759 width: 100%;
2760 height: 100%;
2761 zoom: 1;
2762}
2763
2764div#modalDialogFrame,
2765div.modalDialogFrame {
2766 position: absolute;
2767 /* border: 1px solid white;*/
2768 -moz-opacity: 0.5;
2769 opacity: .50;
2770 filter: alpha(opacity=50);
2771 background-color: #333333;
2772 z-index: 20001;
2773
2774 -webkit-border-radius: 20px;
2775 -moz-border-radius: 20px;
2776 border-radius: 20px;
2777}
2778
2779div#modalDialog,
2780div.modalDialog {
2781 z-index: 20001;
2782}
2783
2784/*div#modalDialog.scrollable,*/
2785div.modalDialog.scrollable {
2786 position: absolute;
2787 top: 0;
2788 left: 50%;
2789}
2790
2791/*div#modalDialog.fixed,*/
2792div.modalDialog.fixed {
2793 position: fixed;
2794 top: 40%;
2795 left: 50%;
2796}
2797
2798div#modalDialog div,
2799div.modalDialog div {
2800 z-index: 20002;
2801 list-style-type: circle;
2802}
2803
2804
2805
2806div.modalDialogMask.simpleMessagePanelMask {
2807 z-index: 20010;
2808}
2809
2810div.modalDialogFrame.simpleMessagePanelMask {
2811 z-index: 20011;
2812}
2813
2814div.modalDialog.simpleMessagePanelMask {
2815 z-index: 20011;
2816}
2817
2818div.modalDialog.simpleMessagePanelMask div {
2819 z-index: 20012;
2820}
2821
2822
2823/* @group Bookmarklet */
2824
2825div.bookmarklet {
2826}
2827
2828div.bookmarklet div.bookmarklet_link {
2829/*
2830 padding-top: 5px;
2831 padding-left: 4px;
2832 padding-right: 3px;
2833
2834 float: right;
2835 margin-top: 12px;
2836 margin-right: 13px;
2837*/
2838 height: 34px;
2839}
2840
2841div.bookmarklet div.bookmarklet_link a {
2842 color: #838975;
2843 text-decoration: none;
2844 font-weight: bold;
2845 font-size: 10pt;
2846/*
2847 display: block;
2848 text-align: right;
2849 padding-top: 7px;
2850 padding-right: 11px;
2851 padding-bottom: 6px;
2852*/
2853}
2854
2855div.bookmarklet div.bookmarklet_link a div.icon {
2856 background: url(../images/old/bookmarklet/placeholder_icon.png) no-repeat 0 0;
2857 float: left;
2858 width: 34px;
2859 height: 34px;
2860}
2861
2862div.bookmarklet div.bookmarklet_link a:hover div.icon {
2863 background: url(../images/old/bookmarklet/placeholder_selected_icon.png) no-repeat 0 0;
2864}
2865
2866div.bookmarklet div.bookmarklet_link a div.text {
2867 display: block;
2868 float: right;
2869 background: url(../images/old/bookmarklet/placeholder.png) no-repeat right 0;
2870 white-space: nowrap;
2871 height: 34px;
2872}
2873
2874div.bookmarklet div.bookmarklet_link a:hover div.text {
2875 background: url(../images/old/bookmarklet/placeholder_selected.png) no-repeat right 0;
2876}
2877div.bookmarklet div.bookmarklet_link a div.text span {
2878 display: block;
2879 padding-top: 10px;
2880 padding-right: 10px;
2881 padding-left: 6px;
2882
2883 clear: both;
2884}
2885
2886/* @end */
2887
2888/* @group Tooltip */
2889
2890/*
2891div#Clipperz_PM_UI_Common_Components_Tooltip_wrapperNode {
2892 position: absolute;
2893 top: 0px;
2894 left: 0px;
2895}
2896*/
2897
2898div.tooltip {
2899 position: absolute;
2900 z-index: 30001;
2901}
2902
2903
2904div.tooltip div.tooltip_body {
2905 position: absolute;
2906}
2907
2908div.tooltip div.tooltip_arrow {
2909 position: absolute;
2910}
2911
2912div.tooltip.BELOW div.tooltip_arrow {
2913 background: url(../images/old/tooltips/top_arrow.png) no-repeat;
2914}
2915
2916div.tooltip.ABOVE div.tooltip_arrow {
2917 background: url(../images/old/tooltips/bottom_arrow.png) no-repeat;
2918}
2919
2920div.tooltip.LEFT div.tooltip_arrow {
2921 background: url(../images/old/tooltips/right_arrow.png) no-repeat;
2922}
2923
2924div.tooltip.RIGHT div.tooltip_arrow {
2925 /* margin-top: 7px;*/
2926 background: url(../images/old/tooltips/left_arrow.png) no-repeat;
2927}
2928div.tooltip.RIGHT div.tooltip_body {
2929 /* padding-left: 13px;*/
2930}
2931
2932
2933div.tooltip div.tooltip_body div.tooltip_text {
2934 width: 171px;
2935 background: url(../images/old/tooltips/body.png) no-repeat center top;
2936}
2937
2938div.tooltip.LEFT div.tooltip_body div.tooltip_text,
2939div.tooltip.RIGHT div.tooltip_body div.tooltip_text {
2940 min-height: 45px;
2941}
2942
2943div.tooltip div.tooltip_body span {
2944 display: block;
2945 padding: 10px;
2946 padding-bottom: 4px;
2947 font-size: 10pt;
2948 color: white;
2949}
2950
2951div.tooltip div.tooltip_footer {
2952 height: 7px;
2953 background: url(../images/old/tooltips/body_bottom.png) no-repeat;
2954}
2955
2956/* @end */
2957
2958/* @group News */
2959/*
2960div#news {
2961 top: 11px;
2962 left: 240px;
2963 width: 353px;
2964 height: 85px;
2965 padding-top: 4px;
2966 position: absolute;
2967 overflow: hidden;
2968 background: url(../images/old/note.png) 1px 3px;
2969}
2970
2971div#news.hidden {
2972 display: none;
2973}
2974
2975div#news div.close {
2976 display: inline;
2977 margin-top: 6px;
2978 margin-left: 17px;
2979 float: left;
2980 width: 15px;
2981}
2982
2983div#news div.close a {
2984 text-decoration: none;
2985 color: #929c1b;
2986}
2987
2988div#news div.close a:hover {
2989 text-decoration: none;
2990 color: #3d420b;
2991}
2992
2993div#news div#newsframe {
2994 display: block;
2995 overflow: hidden;
2996 width: 305px;
2997 height: 70px;
2998}
2999
3000div#news div#newsframe iframe {
3001 border: 0px;
3002}
3003*/
3004/* --------------------------------------- */
3005
3006div#news {
3007 top: -82px;
3008 left: 240px;
3009 width: 310px;
3010 height: 90px;
3011 position: absolute;
3012 /*background: url(../images/old/tips/Tips_background.png) 0 -5px; */
3013
3014 background-color: #616474;
3015
3016 -webkit-border-bottom-right-radius: 8px;
3017 -webkit-border-bottom-left-radius: 8px;
3018 -moz-border-radius-bottomright: 8px;
3019 -moz-border-radius-bottomleft: 8px;
3020 border-bottom-right-radius: 8px;
3021 border-bottom-left-radius: 8px;
3022
3023 -webkit-box-shadow: 2px 2px 9px rgba(0,0,0,0.6);
3024 -moz-box-shadow: 2px 2px 9px rgba(0,0,0,0.6);
3025 box-shadow: 2px 2px 9px rgba(0,0,0,0.6);
3026}
3027/*
3028div#news.open {
3029 background: url(../images/old/tips/Tips_open.png) 0 -5px;
3030}
3031
3032div#news.hidden {
3033 background: url(../images/old/tips/Tips_close.png) 0 -5px;
3034}
3035*/
3036div#news div#newsframe {
3037 margin-left: 10px;
3038 margin-right: 10px;
3039 height: 75px;
3040 overflow: hidden;
3041}
3042
3043div#news div#newsframe.loading {
3044 background: url(../images/old/loading/news.gif) no-repeat center center;
3045}
3046
3047div#news div#newsframe iframe {
3048 width: 290px;
3049 border: 0px;
3050 color: #616474;
3051 background-color: #616474;
3052}
3053
3054div#news div.grip {
3055 width: 310px;
3056 height: 12px;
3057 margin-top: 2px;
3058 cursor: pointer;
3059}
3060
3061div#news.open div.grip {
3062 background: url(../images/old/tips/close.png) no-repeat center 6px;
3063}
3064
3065div#news.hidden div.grip {
3066 background: url(../images/old/tips/open.png) no-repeat center 6px;
3067}
3068
3069/* @end */
3070
3071/* @group mainDialog */
3072div.mainDialog {
3073 position: relative;
3074 left: -263px;
3075 width: 525px;
3076 height: 325px;
3077}
3078
3079div.scrollable div.mainDialog {
3080 top: 0px;
3081}
3082
3083div.fixed div.mainDialog {
3084 top: -118px;
3085}
3086
3087div.mainDialog div.header {
3088 height: 55px;
3089 background: url(../images/old/cardDialog/background_header.png) no-repeat;
3090}
3091
3092div.mainDialog div.header div.title {
3093 padding-top: 16px;
3094 padding-left: 20px;
3095 padding-right: 20px;
3096}
3097
3098div.mainDialog div.header div.title input {
3099 width: 100%;
3100 display: block;
3101 font-size: 16pt;
3102 margin: 0px;
3103 border: 0px;
3104 padding: 3px 10px;
3105 color: #787872;
3106 border: 1px solid #cccec0;
3107 background-color: #cccec0;
3108}
3109
3110div.mainDialog div.header div.title h3 {
3111 display: block;
3112 font-size: 16pt;
3113 color: #787872;
3114 margin: 0px;
3115 border: 0px;
3116 padding: 3px 10px;
3117}
3118
3119div.mainDialog div.header div.title.selectedField input,
3120div.mainDialog div.header div.title:hover input {
3121 border: 1px solid #515247;
3122 background-color: #b5b7ab;
3123}
3124
3125div.mainDialog div.header div.title.disabled:hover input {
3126 border: 1px solid #cccec0;
3127 background-color: #cccec0;
3128}
3129
3130div.mainDialog div.body {
3131 padding-top: 0px;
3132 padding-left: 10px;
3133 padding-right: 9px;
3134 min-height: 200px;
3135 background: url(../images/old/cardDialog/background_body.png) repeat-y;
3136}
3137
3138div.mainDialog div.body div.mask {
3139 display: none;
3140}
3141
3142div.mainDialog.loading div.body div.mask {
3143 display: block;
3144 position: absolute;
3145 top: 55px;
3146 left: 10px;
3147 right: 9px;
3148 bottom: 70px;
3149 z-index:1001;
3150 background-color: white;
3151 padding-left: 146px;
3152 padding-right: 146px;
3153 padding-top: 70px;
3154}
3155
3156div.mainDialog.loading div.body .tabPanels {
3157 display: none;
3158}
3159
3160div.mainDialog.loading div.body div.mask h3.progressDescription {
3161 margin: 0px;
3162 text-align: center;
3163 padding-bottom: 10px;
3164 color: #cccec0;
3165 font-size: 14pt;
3166 font-weight: normal;
3167}
3168
3169div.loadingBar {
3170 height: 22px;
3171 width: 214px;
3172 background: url(../images/old/loading/loadingBar.gif) no-repeat center top;
3173}
3174
3175div.loadingBar div.loadingBarProgressBox {
3176 padding: 2px;
3177}
3178
3179div.loadingBar div.loadingBarProgress {
3180 height:18px;
3181 width: 0%;
3182 /* background-repeat: no-repeat;*/
3183 background-color: rgba(248,79,0,0.6);
3184 -webkit-border-radius: 9px;
3185 -moz-border-radius: 9px;
3186 border-radius: 9px;
3187}
3188
3189/*
3190div.loadingBar div.loadingBarProgress div.loadingBarProgress_left {
3191 height: 100%;
3192 max-width: 8px;
3193 background: url(../images/old/loading/loadingBarProgress.png) no-repeat 0;
3194}
3195
3196div.loadingBar div.loadingBarProgress div.loadingBarProgress_right {
3197 position: relative;
3198 height: 100%;
3199 margin-left: 8px;
3200 background: url(../images/old/loading/loadingBarProgress.png) no-repeat right;
3201 top: -22px;
3202}
3203*/
3204
3205div.mainDialog div.body div ul {
3206 padding: 0px;
3207 clear: both;
3208 margin: 0px;
3209 list-style-type: none;
3210}
3211
3212div.mainDialog div.body div.tabs {
3213 height: 20px;
3214}
3215
3216div.mainDialog div.body div.tabs ul.tabs {
3217 height: 33px;
3218 /*border-bottom: 1px solid #515247;*/
3219 /*background: #cccec0 url(../images/old/cardDialog/tabs_shadow.png) repeat-x 0 -5px;*/
3220 background: url(../images/old/cardDialog/tabs_background.png) repeat-x;
3221}
3222
3223div.mainDialog div.body div.tabs ul.tabs li {
3224 /* width: 150px;*/
3225 height: 32px;
3226 font-size: 11pt;
3227 text-align: center;
3228 border-right: 1px solid #515247;
3229 float: left;
3230 color: #787872;
3231 border-bottom: 1px solid #515247;
3232
3233 background: #cccec0 url(../images/old/cardDialog/tabs_shadow.png) repeat-x 0 -5px;
3234 cursor: pointer;
3235}
3236
3237div.mainDialog div.body div.tabs ul.tabs li div {
3238 display: none;
3239}
3240
3241div.mainDialog div.body div.tabs ul.tabs li span {
3242 display: block;
3243 padding-top: 9px;
3244 padding-bottom: 6px;
3245 padding-left: 40px;
3246 padding-right: 40px;
3247}
3248
3249div.mainDialog div.body div.tabs ul.tabs li:hover {
3250 color: #515247;
3251}
3252
3253div.mainDialog div.body div.tabs ul.tabs li.disabled:hover {
3254 color: #787872;
3255 cursor: default;
3256}
3257
3258div.mainDialog div.body div.tabs ul.tabs li.selected {
3259 color: #515247;
3260 background-color: #f1f2e9;
3261 border-bottom: 1px solid #f1f2e9;
3262 cursor: default;
3263}
3264
3265div.mainDialog div.body div.tabs ul.tabs li.selected.disabled:hover {
3266 color: #515247;
3267}
3268
3269div.mainDialog div.body div.tabs ul.tabs li.selected div.backToDirectLoginList {
3270 position: absolute;
3271 display: block;
3272 top: 63px;
3273 left: 140;
3274 width: 20px;
3275}
3276
3277div.mainDialog div.body div.tabs ul.tabs li.selected div.addDirectLoginButton {
3278 position: absolute;
3279 display: block;
3280 top: 63px;
3281 left: 265px;
3282
3283 width: 20px;
3284}
3285
3286div.mainDialog div.body div.tabs ul.tabs li.selected div span {
3287 padding: 0px;
3288 margin: 0px;
3289}
3290
3291div.mainDialog div.body div.tabs ul.tabs li.selected div:hover {
3292 cursor: pointer;
3293}
3294
3295div.mainDialog div.body .tabPanels {
3296 clear: both;
3297}
3298
3299div.mainDialog div.body ul.tabPanels li.tabPanel {
3300 display: none;
3301}
3302
3303div.mainDialog div.body ul.tabPanels li.tabPanel.selected {
3304 display: block;
3305}
3306
3307div.mainDialog div.body ul.tabPanels li.tabPanel.selected h2 {
3308 margin: 0px;
3309 text-align: center;
3310 padding-top: 50px;
3311 color: #787872;
3312}
3313
3314div.mainDialog div.body ul.tabPanels li.tabPanel.selected div.wizardStepDescription {
3315 margin: 0px 20px 10px;
3316 font-size: 10pt;
3317 color: b0b0b0;
3318 font-style: italic;
3319 text-align: center;
3320}
3321
3322div.mainDialog div.footer {
3323 height: 70px;
3324 background: url(../images/old/cardDialog/background_footer.png) no-repeat 0 -14px;
3325}
3326
3327div.mainDialog div.footer div.buttonArea {
3328 padding-left: 40px;
3329 padding-right: 40px;
3330 padding-top: 15px;
3331}
3332
3333div.mainDialog div.footer div.buttonArea div {
3334 padding-left: 20px;
3335 padding-right: 20px;
3336 float: left;
3337
3338 font-weight: bold;
3339 color: #787872;
3340}
3341
3342div.mainDialog div.footer div.buttonArea div.disabled {
3343 color: #b1b1a8;
3344}
3345
3346div.mainDialog div.footer div.buttonArea div.disabled:hover {
3347 color: #b1b1a8;
3348 cursor: default;
3349}
3350
3351div.mainDialog div.footer div.buttonArea div:hover {
3352 color: #515247;
3353 cursor: pointer;
3354}
3355
3356div.mainDialog div.footer div.buttonArea div.save {
3357 float: right;
3358}
3359
3360
3361/* @end */
3362
3363/* @group Card Dialog */
3364
3365div.addDirectLoginButton {
3366 height: 20px;
3367 width: 20px;
3368 background: url(../images/old/cardDialog/addDirectLogin_disabled_background.png) no-repeat -9px -9px;
3369 color: white;
3370 font-weight: bold;
3371}
3372
3373div.addDirectLoginButton span {
3374 display: block;
3375 height: 20px;
3376 width: 20px;
3377}
3378
3379div.addDirectLoginButton:hover {
3380 background: url(../images/old/cardDialog/addDirectLogin_background.png) no-repeat -9px -9px;
3381}
3382
3383/* @group Card Dialog - Direct Login */
3384
3385div.directLoginsComponentContainer {
3386 overflow: hidden;
3387 /* background-color: green;*/
3388}
3389
3390div.CardDialog div.directLogins {
3391 /* background-color: yellow;*/
3392 padding-top: 2px;
3393}
3394
3395div.CardDialog div.addNewDirectLoginSplash {
3396 margin: 0px 80px;
3397}
3398
3399div.CardDialog div.addNewDirectLoginSplash h3 {
3400 color: #aaaaaa;
3401 text-align: center;
3402 font-weight: normal;
3403 font-size: 11pt;
3404}
3405
3406div.CardDialog div.addNewDirectLoginSplash a {
3407 display: block;
3408 text-decoration: none;
3409 margin-left: auto;
3410 margin-right: auto;
3411 width: 190px;
3412 /* color: #787878;*/
3413 color: rgba(255,98,6,0.75);
3414 text-transform: uppercase;
3415 background: url(../images/old/cardDialog/addDirectLogin_disabled_background.png) no-repeat right;
3416}
3417
3418div.CardDialog div.addNewDirectLoginSplash a span {
3419 text-align: center;
3420}
3421
3422div.CardDialog div.addNewDirectLoginSplash a:hover {
3423 color: #ff6206;
3424 background: url(../images/old/cardDialog/addDirectLogin_background.png) no-repeat right;
3425}
3426
3427div.CardDialog div.directLoginItem {
3428 clear: both;
3429 min-height: 32px;
3430 padding-left: 10px;
3431 padding-top: 4px;
3432 padding-bottom: 2px;
3433
3434 /* width: 100px;*/
3435 max-height: 32px;
3436 overflow: hidden;
3437}
3438
3439div.CardDialog div.directLoginItem:hover {
3440 background-color: #cccec0;
3441}
3442
3443div.CardDialog div.addDirectLoginListItem {
3444 min-height: 32px;
3445 padding-left: 10px;
3446 padding-top: 4px;
3447 padding-bottom: 2px;
3448
3449 max-height: 32px;
3450 overflow: hidden;
3451
3452 background: url(../images/old/cardDialog/addDirectLogin_disabled_background.png) no-repeat 22px 0;
3453}
3454
3455div.CardDialog div.addDirectLoginListItem a {
3456 display: block;
3457 font-size: 11pt;
3458 padding-top: 6px;
3459 padding-left: 50px;
3460 color: rgba(255,98,6,0.75);
3461 text-decoration: none;
3462 text-transform: uppercase;
3463}
3464
3465div.CardDialog div.addDirectLoginListItem:hover {
3466 background: url(../images/old/cardDialog/addDirectLogin_background.png) no-repeat 22px 0;
3467 color: #ff6206;
3468 background-color: #cccec0;
3469}
3470
3471div.CardDialog div.addDirectLoginListItem:hover {
3472}
3473
3474
3475div.CardDialog div.directLoginItem div.cardDialogRecordDirectLoginComponent_favicon img.favicon {
3476 width: 32px;
3477 height: 32px;
3478 float: left;
3479}
3480div.CardDialog div.directLoginItem div.cardDialogRecordDirectLoginComponent_label input {
3481 float: left;
3482 font-size: 11pt;
3483 border: 0px;
3484 padding: 5px;
3485 color: #787872;
3486 border: 1px solid #ededeb;
3487 background-color: #ededeb;
3488 height: 30px;
3489 margin-left: 10px;
3490 width: 68%;
3491 margin-right: 5px;
3492}
3493
3494div.CardDialog div.directLoginItem:hover div.cardDialogRecordDirectLoginComponent_label input {
3495 border: 1px solid #515247;
3496 background-color: #b5b7ab;
3497}
3498
3499div.CardDialog div.directLoginItem > div.open {
3500 float: left;
3501 margin-top: 5px;
3502 margin-right: 2px;
3503 padding-left: 5px;
3504 visibility: hidden;
3505}
3506
3507div.CardDialog div.directLoginItem > div.edit,
3508div.CardDialog div.directLoginItem > div.delete {
3509 float: left;
3510 margin-top: 5px;
3511 margin-left: 3px;
3512 padding-left: 5px;
3513 visibility: hidden;
3514}
3515
3516div.CardDialog div.directLoginItem > div.open a {
3517 display: block;
3518 width: 22px;
3519 height: 22px;
3520 background: url(../images/old/cardDialog/openDirectLogin.png) no-repeat 0 -2px;
3521}
3522
3523div.CardDialog div.directLoginItem > div.open a:hover {
3524 background: url(../images/old/cardDialog/openDirectLogin_selected.png) no-repeat 0 -2px;
3525}
3526
3527div.CardDialog div.directLoginItem:hover > div.open,
3528div.CardDialog div.directLoginItem:hover > div.edit,
3529div.CardDialog div.directLoginItem:hover > div.delete {
3530 visibility: visible;
3531}
3532
3533div.CardDialog div.directLoginItem div.edit span {
3534 padding-right: 6px;
3535 display: block;
3536}
3537
3538div.CardDialog div.directLoginItem div.open span a,
3539div.CardDialog div.directLoginItem div.edit span a,
3540div.CardDialog div.directLoginItem div.delete span a {
3541 font-size: 8pt;
3542 color: #666666;
3543 text-decoration: none;
3544 line-height: 19px;
3545}
3546
3547div.CardDialog div.directLoginItem div.edit:hover {
3548 background: url(../images/old/new_background_left.png) no-repeat;
3549}
3550
3551div.CardDialog div.directLoginItem div:hover span a {
3552 color: white;
3553}
3554
3555div.CardDialog div.directLoginItem div.edit:hover span {
3556 background: url(../images/old/new_background.png) no-repeat right center;
3557}
3558
3559div.CardDialog div.directLoginItem div.delete:hover {
3560 background: url(../images/old/delete_background_left.png) no-repeat;
3561}
3562
3563div.CardDialog div.directLoginItem div.delete:hover span {
3564 background: url(../images/old/delete_background.png) right;
3565}
3566
3567/* @group Direct Login Editing */
3568
3569div.CardDialog div.directLoginEditDetail {
3570 position: relative;
3571 /* background-color: red;*/
3572}
3573
3574/*
3575div.CardDialog div.directLoginEditDetail div.back {
3576 float: left;
3577 width: 30px;
3578}
3579
3580div.CardDialog div.directLoginEditDetail div.back a {
3581 display: block;
3582 padding: 5px;
3583 text-decoration: none;
3584 font-weight: bold;
3585 font-size: 14pt;
3586 color: #cccec0;
3587
3588 background: url(../images/old/cardDialog/back.png) no-repeat 5px 14px;
3589 width: 20px;
3590 height: 200px;
3591}
3592
3593div.CardDialog div.directLoginEditDetail div.back a:hover {
3594 color: #7f7872;
3595 background: url(../images/old/cardDialog/back_selected.png) no-repeat 5px 14px;
3596}
3597*/
3598
3599
3600form.directLoginEditingForm div.title,
3601form.directLoginEditingForm div.favicon {
3602 padding: 5px 10px;
3603}
3604
3605form.directLoginEditingForm div.title.disabled:hover {
3606 background-color: #f1f2e9;
3607}
3608
3609form.directLoginEditingForm div.title:hover,
3610form.directLoginEditingForm div.favicon:hover {
3611 background-color: #cccec0;
3612}
3613
3614form.directLoginEditingForm div.title input {
3615 /* width: 100%; */
3616 margin: 0px;
3617 margin-left: 10px;
3618 width: 440px;
3619}
3620
3621form.directLoginEditingForm div.favicon {
3622 padding-left: 10px;
3623}
3624
3625/*form.directLoginEditingForm div.favicon img.favicon {*/
3626form.directLoginEditingForm img.favicon {
3627 float: left;
3628 width: 32px;
3629 height: 32px;
3630}
3631
3632form.directLoginEditingForm div.favicon input {
3633 margin-top: 1px;
3634 width: 465px;
3635}
3636
3637form.directLoginEditingForm div.disabled:hover input,
3638form.directLoginEditingForm div input {
3639 font-size: 11pt;
3640 border: 0px;
3641 padding: 5px;
3642 color: #787872;
3643 border: 1px solid #ededeb;
3644 background-color: #ededeb;
3645 height: 30px;
3646}
3647
3648form.directLoginEditingForm div:hover input {
3649 border: 1px solid #515247;
3650 background-color: #b5b7ab;
3651}
3652
3653/* @group Bindings */
3654
3655div.bindings div.binding > span.formFieldName {
3656 display: inline-block;
3657 width: 140px;
3658 overflow: hidden;
3659 margin-right: 10px;
3660 color: #6b5147;
3661 text-overflow:ellipsis;
3662}
3663
3664div.bindings div.binding {
3665 padding-bottom: 3px;
3666}
3667
3668div.bindings div.binding > input {
3669 margin-right: 10px;
3670 background: #cccec0;
3671 width: 150px;
3672 border: 1px solid #cccec0;
3673}
3674
3675div.bindings div.binding:hover > input {
3676 border: 1px solid #cccec0;
3677}
3678
3679div.bindings div.binding > select {
3680 font-size: 13pt;
3681}
3682
3683div.bindings div.binding span.fieldLock {
3684 display: inline-block;
3685 width: 20px;
3686 height: 20px;
3687 margin-right: 3px;
3688}
3689
3690div.bindings div.binding.showLocked input {
3691 background: url(../images/old/cardDialog/password_background.png) no-repeat 2px 3px;
3692 /* color: black;*/
3693 overflow: hidden;
3694
3695 background: #cccec0 url(../images/old/cardDialog/password_background.png) no-repeat 2px 3px;
3696 color: rgba(237,237,235,0.1);
3697}
3698
3699div.bindings div.binding span.fieldLock a {
3700 display: none;
3701}
3702
3703div.bindings div.binding.locked span.fieldLock {
3704}
3705
3706div.bindings div.binding.locked span.fieldLock a {
3707 display: block;
3708 width: 20px;
3709 height: 20px;
3710 text-decoration: none;
3711
3712 background-image: url(../images/old/cardDialog/lock_open.png);
3713}
3714
3715div.bindings div.binding.locked.showLocked span.fieldLock a {
3716 background-image: url(../images/old/cardDialog/lock_closed.png);
3717 text-decoration: none;
3718}
3719
3720/* @end */
3721
3722/* @group FormValues */
3723
3724div.formValues {
3725 padding-top: 15px;
3726}
3727
3728div.formValues div.formValue div {
3729 margin: 0px;
3730 display: inline-block;
3731}
3732
3733div.formValues div.formValue > span.formFieldName {
3734 display: inline-table;
3735 width: 160px;
3736 overflow: hidden;
3737 margin-right: 10px;
3738 color: #6b5147;
3739}
3740
3741/* @end */
3742
3743
3744/* @group FormValues */
3745/*
3746div.formValues {
3747 padding-top: 15px;
3748}
3749
3750div.formValues div.formValue > span.formFieldName {
3751 display: inline-table;
3752 width: 150px;
3753 overflow: hidden;
3754 margin-right: 35px;
3755 color: #6b5147;
3756}
3757
3758div.formValues div.formValue > select {
3759 padding-left: 20px;
3760}
3761*/
3762/* @end */
3763
3764/* @group Panels */
3765
3766div.directLoginEditing {
3767 padding-top: 2px;
3768}
3769
3770div.directLoginEditing div.tabContainer {
3771 min-height: 150px;
3772 height: 200px;
3773}
3774
3775div.directLoginEditing div.tabContainer > ul.tabs {
3776 display: none;
3777}
3778
3779/*
3780div.directLoginEditing li.configuration,
3781div.directLoginEditing li.bindings,
3782div.directLoginEditing li.favicon {
3783 padding: 10px;
3784}
3785*/
3786div.directLoginEditing li {
3787 padding: 10px;
3788}
3789
3790div.directLoginEditing li.configuration > .bookmarkletConfigurationWrapper > textarea {
3791 float: left;
3792 width: 320px;
3793 height: 125px;
3794 font-family: monospace;
3795 font-weight: normal;
3796 font-size: 8pt;
3797 border: 1px solid #ccc;
3798}
3799
3800div.directLoginEditing li.configuration > .bookmarkletConfigurationWrapper .bookmarkletComponent {
3801 float: right;
3802}
3803
3804div.directLoginEditing li.configuration > textarea.error {
3805 border: 1px solid red;
3806 background-color: rgba(255,0,0,0.1);
3807}
3808
3809/*
3810div.directLoginEditing > form.directLoginEditingForm > div.tabContainer {
3811 padding-top: 10px;
3812}
3813
3814div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li {
3815 float: left;
3816 padding-left: 10px;
3817 padding-right: 10px;
3818 display: block;
3819 font-size: 10pt;
3820 color: #787872;
3821 cursor: pointer;
3822
3823 height: 22px;
3824 text-align: center;
3825 border-right: 1px solid #aaa;
3826 border-bottom: 1px solid #aaa;
3827 border-top: 1px solid #aaa;
3828
3829 background-color: #cccec0;
3830}
3831
3832div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li:first-child {
3833 border-left: 1px solid #aaa;
3834}
3835
3836div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs {
3837 height: 23px;
3838 padding-left: 10px;
3839 border-bottom: 1px solid #aaa;
3840 margin-left: 10px;
3841 margin-right: 10px;
3842}
3843
3844div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li > span {
3845 line-height: 23px;
3846}
3847
3848div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li.selected {
3849 color: #6a5147;
3850 cursor: default;
3851 border-bottom: 1px solid #f1f2e9;
3852 background-color: #f1f2e9;
3853}
3854
3855div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li:hover {
3856 color: #6a5147;
3857}
3858
3859div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabPanels {
3860 padding-bottom: 5px;
3861 margin-left: 10px;
3862 margin-right: 10px;
3863}
3864
3865div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabPanels > li.selected {
3866 border-bottom: 1px solid #aaa;
3867 border-left: 1px solid #aaa;
3868 border-right: 1px solid #aaa;
3869}
3870
3871div.directLoginEditing li.configuration {
3872 padding: 5px;
3873}
3874
3875div.directLoginEditing li.configuration > textarea {
3876 width: 100%;
3877 height: 100px;
3878 font-family: monospace;
3879 font-weight: normal;
3880 font-size: 8pt;
3881}
3882*/
3883/* @end */
3884
3885/* @end */
3886
3887/* @end */
3888
3889/* @group Card Dialog FIELDS */
3890
3891div.CardDialog div.body {
3892 padding-bottom: 1px;
3893}
3894
3895div.CardDialog div.body table.fields {
3896 width: 100%;
3897 padding-top: 8px;
3898 padding-bottom: 1px;
3899}
3900
3901div.CardDialog div.body table.fields thead {
3902 background: url(../images/old/cardDialog/dottedLine_background.png) repeat-x 0 15px;
3903}
3904
3905div.CardDialog div.body table.fields tfoot {
3906 background: url(../images/old/cardDialog/dottedLine_background.png) repeat-x 0 bottom;
3907}
3908
3909div.CardDialog div.body table.fields thead th {
3910 text-align: left;
3911 font-weight: normal;
3912 font-size: 9pt;
3913 color: #787872;
3914 padding-left: 10px;
3915 padding-bottom: 3px;
3916
3917/*
3918 border-bottom: 1px dotted;
3919*/
3920}
3921
3922
3923div.CardDialog div.body table.fields thead th.fieldStateTH {
3924 width: 10px;
3925}
3926
3927div.CardDialog div.body table.fields thead th.fieldLabelTH {
3928}
3929
3930div.CardDialog div.body table.fields tbody td.fieldLabel input {
3931 width: 130px;
3932}
3933
3934div.CardDialog div.body table.fields thead th.fieldLockTH {
3935 width: 10px;
3936}
3937
3938
3939div.CardDialog div.body table.fields thead th.fieldValueTH {
3940}
3941
3942div.CardDialog div.body table.fields tbody td.fieldValue input {
3943 width: 280px;
3944}
3945
3946div.CardDialog div.body table.fields thead th.fieldActionTH {
3947 width: 30px;
3948}
3949
3950div.CardDialog div.body table.fields tbody td.fieldAction div {
3951}
3952
3953div.CardDialog div.body table.fields thead th.fieldDeleteTH {
3954 width: 40px;
3955}
3956
3957div.CardDialog div.body table.fields tbody tr:hover,
3958div.CardDialog div.body table.fields tbody tr.selectedField {
3959 background-color: #cccec0;
3960}
3961
3962div.CardDialog div.body table.fields tbody tr td {
3963 font-size: 11pt;
3964 color: #787872;
3965 height: 35px;
3966}
3967
3968
3969div.CardDialog div.body table.fields tbody tr td input {
3970 font-size: 11pt;
3971 border: 0px;
3972 padding: 5px;
3973 color: #787872;
3974 border: 1px solid #ededeb;
3975 background-color: #ededeb;
3976 height: 30px;
3977}
3978/*
3979div.CardDialog div.body table.fields tbody tr td.fieldValue div {
3980 margin-right: 10px;
3981}
3982
3983div.CardDialog div.body table.fields tbody tr td.fieldValue div input {
3984 width: 100%;
3985}
3986*/
3987div.CardDialog div.body table.fields tbody tr td.fieldValue div.locked input {
3988 background: #ededeb url(../images/old/cardDialog/password_background.png) no-repeat 2px 3px;
3989 color: #ededeb;
3990 color: rgba(237,237,235,0.1);
3991 /* color: black;*/
3992 /* line-height: 100px;*/
3993 overflow: hidden;
3994}
3995
3996div.locked input.value::-moz-selection {
3997 background: #ff0000;
3998}
3999
4000div.locked input.value::selection {
4001 background: #ff0000;
4002}
4003
4004
4005div.CardDialog div.body table.fields tbody tr.new.selectedField td input,
4006div.CardDialog div.body table.fields tbody tr.new:hover td input,
4007div.CardDialog div.body table.fields tbody tr:hover td input,
4008div.CardDialog div.body table.fields tbody tr.selectedField td input {
4009 border: 1px solid #515247;
4010 background-color: #b5b7ab;
4011}
4012
4013div.CardDialog div.body table.fields tbody tr:hover td.fieldValue div.locked input,
4014div.CardDialog div.body table.fields tbody tr.selectedField td.fieldValue div.locked input {
4015 background: #b5b7ab url(../images/old/cardDialog/password_background.png) no-repeat 2px 3px;
4016 color: #b5b7ab;
4017 color: rgba(237,237,235,0.1);
4018}
4019
4020
4021
4022div.CardDialog div.body table.fields tbody td.fieldLock div {
4023 width: 20px;
4024 height: 19px;
4025 cursor: pointer;
4026}
4027
4028div.CardDialog div.body table.fields tbody tr:hover td.fieldLock div.locked {
4029 background-image: url(../images/old/cardDialog/lock_closed.png);
4030}
4031
4032div.CardDialog div.body table.fields tbody tr:hover td.fieldLock div.unlocked {
4033 background-image: url(../images/old/cardDialog/lock_open.png);
4034}
4035
4036div.CardDialog div.body table.fields tbody tr td.fieldAddDelete div span a {
4037 text-decoration: none;
4038 visibility: hidden;
4039 font-size: 8pt;
4040 vertical-align: -13px;
4041 color: black;
4042}
4043
4044div.CardDialog div.body table.fields tbody tr.selectedField td.fieldAddDelete div span a {
4045 visibility: visible;
4046}
4047
4048div.CardDialog div.body table.fields tbody tr:hover td.fieldAddDelete div span a {
4049 visibility: visible;
4050}
4051
4052div.CardDialog div.body table.fields tbody tr:hover td.fieldAddDelete div:hover span a {
4053 color: white;
4054}
4055
4056
4057div.CardDialog div.body div.notes {
4058 background: url(../images/old/cardDialog/dottedLine_background.png) repeat-x 0 0;
4059 padding-top: 2px;
4060}
4061
4062div.CardDialog div.body div.notes div {
4063 padding-left: 20px;
4064 padding-right: 20px;
4065 padding-top: 4px;
4066 padding-bottom: 4px;
4067}
4068
4069div.CardDialog div.body div.notes div:hover,
4070div.CardDialog div.body div.notes.selectedField div {
4071 background-color: #cccec0;
4072}
4073
4074div.CardDialog.loading div.body div.notes div textarea {
4075 display: none;
4076}
4077
4078div.CardDialog div.body div.notes div textarea {
4079 border: 0;
4080 width: 470px;
4081/*
4082 width: 100%;
4083 height: 100px;
4084 min-height: 400px;
4085 overflow: hidden;
4086*/
4087 color: #787872;
4088 border: 1px solid #ededeb;
4089 background-color: #ededeb;
4090 display: block;
4091 line-height: 12pt;
4092 min-height: 50px;
4093}
4094
4095div.CardDialog div.body div.notes div:hover textarea,
4096div.CardDialog div.body div.notes.selectedField div textarea {
4097 border: 1px solid #515247;
4098 background-color: #b5b7ab;
4099}
4100
4101
4102div.CardDialog div.body table.fields tbody tr td.fieldAction {
4103 /* background-color: red;*/
4104 padding-left: 4px
4105}
4106
4107div.CardDialog div.body table.fields tbody tr td.fieldAction a {
4108 display: inline-block;
4109 text-decoration: none;
4110 text-align: center;
4111 width: 16px;
4112 height: 16px;
4113}
4114
4115div.CardDialog div.body table.fields tbody tr td.fieldAction a.email {
4116 background: url(../images/old/cardDialog/fieldTypes/email.png) no-repeat 0 0;
4117}
4118
4119div.CardDialog div.body table.fields tbody tr td.fieldAction a.email:hover {
4120 background: url(../images/old/cardDialog/fieldTypes/email_selected.png) no-repeat 0 0;
4121}
4122
4123div.CardDialog div.body table.fields tbody tr td.fieldAction a.url {
4124 background: url(../images/old/cardDialog/fieldTypes/url.png) no-repeat 0 0;
4125}
4126
4127div.CardDialog div.body table.fields tbody tr td.fieldAction a.url:hover {
4128 background: url(../images/old/cardDialog/fieldTypes/url_selected.png) no-repeat 0 0;
4129}
4130
4131div.CardDialog div.body table.fields tbody tr td.fieldAction a.password {
4132 background: url(../images/old/cardDialog/fieldTypes/password.png) no-repeat 0 0;
4133}
4134
4135div.CardDialog div.body table.fields tbody tr td.fieldAction a.password:hover {
4136 background: url(../images/old/cardDialog/fieldTypes/password_selected.png) no-repeat 0 0;
4137}
4138
4139/*
4140/ *div.CardDialog div.body table.fields tbody* / tr.new {
4141 background: yellow;
4142}
4143
4144div.CardDialog div.body table.fields tbody tr.new td input {
4145 border: 1px solid red;
4146 background-color: green;
4147}
4148*/
4149/* @end */
4150
4151
4152
4153/* @end */
4154
4155div#disabledZone {
4156 display: block;
4157 visibility: visible;
4158}
4159
4160div#messageZone {
4161 display: block;
4162 visibility: visible;
4163}
4164
4165
4166div.CardDialog div.error div.img {
4167 margin: 10px;
4168 width: 50px;
4169 height: 50px;
4170 float: left;
4171
4172 background-image: url(../images/old/simpleMessageBox/Alert.png);
4173}
4174
4175/* @group Ruler */
4176/*
4177div.rulerExtraWrapper {
4178 position: absolute;
4179 top: 0px;
4180 left: 0px;
4181 width: 100%;
4182 height: 100%;
4183 overflow: hidden;
4184 background-color: rgba(255, 0, 0, 0.2);
4185 z-index: 24999;
4186}
4187*/
4188
4189div.rulerWrapper {
4190 left: -1000px;
4191 margin-top: -30px;
4192 margin-left: 50%;
4193 z-index: 25000;
4194}
4195
4196div.rulerWrapper.fixed {
4197 position: fixed;
4198}
4199
4200div.rulerWrapper.scrollable {
4201 position: absolute;
4202}
4203
4204div.ruler {
4205 /* position: absolute;*/
4206 width: 541px;
4207 height: 96px;
4208 margin-left: -270px;
4209
4210 background: url(../images/old/ruler/ruler.png) no-repeat;
4211}
4212
4213div.ruler a {
4214 position: absolute;
4215 display: block;
4216
4217 width: 15px;
4218 height: 15px;
4219 top: 3px;
4220 text-decoration: none;
4221}
4222
4223div.ruler a.exit {
4224 margin-left: 2px;
4225 background: url(../images/old/ruler/exit.png) no-repeat;
4226}
4227
4228div.ruler a.exit:hover {
4229 background: url(../images/old/ruler/exit_selected.png) no-repeat;
4230}
4231
4232div.ruler a.smallButton.previous {
4233 right: 16px;
4234 background: url(../images/old/ruler/small_previous.png) no-repeat;
4235}
4236
4237div.ruler a.smallButton.previous:hover {
4238 cursor: pointer;
4239 background: url(../images/old/ruler/small_previous_selected.png) no-repeat;
4240}
4241
4242div.ruler a.smallButton.previous.disabled,
4243div.ruler a.smallButton.previous.disabled:hover {
4244 cursor: default;
4245 background: url(../images/old/ruler/small_previous_disabled.png) no-repeat;
4246}
4247
4248div.ruler a.smallButton.next {
4249 right: 3px;
4250 background: url(../images/old/ruler/small_next.png) no-repeat;
4251}
4252
4253div.ruler a.smallButton.next:hover {
4254 cursor: pointer;
4255 background: url(../images/old/ruler/small_next_selected.png) no-repeat;
4256}
4257
4258div.ruler a.smallButton.next.disabled,
4259div.ruler a.smallButton.next.disabled:hover {
4260 cursor: default;
4261 background: url(../images/old/ruler/small_next_disabled.png) no-repeat;
4262}
4263
4264div.ruler div.steps, div.ruler div.dots {
4265 position: absolute;
4266 background-color: rgba(255,255,255,0);
4267
4268 margin-left: 30px;
4269 margin-right: 30px;
4270}
4271
4272div.ruler div.steps {
4273 top: 25px;
4274 height: 30px;
4275}
4276
4277div.ruler div.dots {
4278 top: 58px;
4279 height: 25px;
4280}
4281
4282div.ruler div ul {
4283 list-style-type: none;
4284 margin: 0px;
4285 padding: 0px;
4286}
4287
4288div.ruler div ul li {
4289 display: inline-block;
4290 vertical-align: top;
4291}
4292
4293div.ruler > div.steps > ul > li:first-child,
4294div.ruler > div.dots > ul > li:first-child {
4295 margin-left: 0px;
4296}
4297
4298div.ruler div.steps_3 ul li {
4299 margin-left: 135px;
4300}
4301
4302div.ruler div.steps_4 ul li {
4303 margin-left: 67px;
4304}
4305
4306div.ruler div.steps_5 ul li {
4307 margin-left: 32px;
4308}
4309
4310div.ruler div.steps_6 ul li {
4311 margin-left: 12px;
4312}
4313
4314div.ruler div ul li span {
4315 font-weight: bold;
4316 text-align: center;
4317 width: 70px;
4318 display: block;
4319 font-size: 8pt;
4320 overflow: hidden;
4321 color: rgba(0, 0, 0, 0.3);
4322}
4323
4324div.ruler div ul li.selected span {
4325 color: black;
4326}
4327
4328div.ruler div.steps ul li span {
4329}
4330
4331div.ruler div.dots ul li span {
4332/*
4333 text-align: center;
4334 width: 26px;
4335 margin-left: 22px;
4336 margin-right: 22px;
4337 height: 25px;
4338 background-color: #e57218;
4339*/
4340 font-size: 40pt;
4341 line-height: 47px;
4342}
4343
4344div.ruler div.marker {
4345 position: absolute;
4346 top: -3px;
4347 /* left: -246px;*/
4348}
4349div.ruler div.marker div.markerBody {
4350 width: 77px;
4351 height: 97px;
4352 background: url(../images/old/ruler/marker.png) no-repeat;
4353}
4354
4355div.ruler div.marker div.next {
4356 position: absolute;
4357 top: 25px;
4358 left: 76px;
4359 width: 27px;
4360 height: 65px;
4361 background: url(../images/old/ruler/next.png) no-repeat -13px;
4362
4363 z-index: 26000;
4364}
4365
4366div.ruler div.marker div.next:hover {
4367 cursor: pointer;
4368 background: url(../images/old/ruler/next.png) no-repeat -2px;
4369}
4370
4371div.ruler div.marker div.disabled {
4372 display: none;
4373}
4374
4375div.ruler div.marker div.previous {
4376 position: absolute;
4377 top: 25px;
4378 left: -24px;
4379 width: 27px;
4380 height: 65px;
4381 /* background: url(../images/old/ruler/previous.png) no-repeat 13px 1px;*/
4382 background: url(../images/old/ruler/previous.png) no-repeat 18px 1px;
4383
4384 z-index: 26000;
4385}
4386
4387div.ruler div.marker div.previous:hover {
4388 cursor: pointer;
4389 /* background: url(../images/old/ruler/previous.png) no-repeat 2px 1px;*/
4390 background: url(../images/old/ruler/previous.png) no-repeat 7px 1px;
4391}
4392
4393/* @end */
4394
4395div.createNewCardSplash {
4396 margin-top: -450px;
4397 margin-left: 250px;
4398 width: 354px;
4399 float: left;
4400 height: 186px;
4401
4402 text-align: center;
4403 background: url(../images/old/main/grid/createNewCardSplash.png) no-repeat;
4404}
4405
4406div.createNewCardSplash:hover {
4407 cursor: pointer;
4408 background: url(../images/old/main/grid/createNewCardSplash_selected.png) no-repeat;
4409}
4410
4411div.createNewCardSplash span {
4412 display: block;
4413 padding-top: 130px;
4414 font-size: 14pt;
4415 color: #9a9586;
4416}
4417
4418div.createNewCardSplash:hover span {
4419 color: #605c4e;
4420}
4421
4422
4423
4424/*=============================================*/
4425
4426div.NewUserCreation div.tabContainer {
4427 min-height: 150px;
4428 height: 200px;
4429}
4430
4431div.NewUserCreation div.tabContainer > ul.tabs {
4432 display: none;
4433}
4434
4435ul.createUserStates li.creating {
4436 background: url(../images/old/creatingUser.gif) no-repeat center center;
4437}
4438
4439ul.createUserStates li {
4440 height: 100px;
4441}
4442
4443ul.createUserStates li span {
4444 display: block;
4445 width: 100%;
4446 text-align: center;
4447 color: #999;
4448 font-style: italic;
4449}
4450
4451div.NewUserCreation form.newUserCreationForm ul.tabPanels {
4452 padding-top: 10px;
4453}
4454
4455div.NewUserCreation form.newUserCreationForm ul ul {
4456 margin-left: auto;
4457 margin-right: auto;
4458 width: 400px;
4459}
4460
4461div.NewUserCreation form.newUserCreationForm ul.credentials li {
4462 height: 45px;
4463}
4464
4465div.NewUserCreation form.newUserCreationForm ul.credentials span.label {
4466 text-align: right;
4467 display: inline-block;
4468 font-size: 12pt;
4469 color: #787872;
4470 width: 110px;
4471 vertical-align: baseline;
4472}
4473
4474div.NewUserCreation form.newUserCreationForm ul.credentials input {
4475 font-size: 13pt;
4476 color: #787872;
4477 height: 35px;
4478 margin-left: 15px;
4479 padding-left: 5px;
4480}
4481
4482div.NewUserCreation form.newUserCreationForm ul.termsOfService li {
4483 padding: 0 0 15 0;
4484}
4485
4486div.NewUserCreation form.newUserCreationForm ul.termsOfService input {
4487 display: inline-block;
4488}
4489
4490div.NewUserCreation form.newUserCreationForm ul.termsOfService .label {
4491 display: inline-block;
4492 text-align: left;
4493 font-size: 12pt;
4494 color: #787872;
4495 width: 350px;
4496 vertical-align: top;
4497 padding-left: 10px
4498}
4499
4500div.NewUserCreation form.newUserCreationForm ul.termsOfService a {
4501 font-weight: bold;
4502 color: #787872;
4503 text-decoration: none;
4504}
4505div.NewUserCreation form.newUserCreationForm ul.termsOfService a:hover {
4506 color: #444;
4507}
4508
4509div.NewUserCreation form.newUserCreationForm ul.createUserStates li.done span {
4510 font-size: 16pt;
4511 color: green;
4512}
4513
4514div.NewUserCreation form.newUserCreationForm ul.createUserStates li.fail span {
4515 font-size: 16pt;
4516 color: red;
4517} \ No newline at end of file
diff --git a/frontend/gamma/css/clipperz/iPhone.css b/frontend/gamma/css/clipperz/iPhone.css
deleted file mode 100644
index ee1d795..0000000
--- a/frontend/gamma/css/clipperz/iPhone.css
+++ b/dev/null
@@ -1,461 +0,0 @@
1/*
2
3Copyright 2008-2011 Clipperz Srl
4
5This file is part of Clipperz Community Edition.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please
8refer to http://www.clipperz.com.
9
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
12 License as published by the Free Software Foundation, either version
13 3 of the License, or (at your option) any later version.
14
15* Clipperz Community Edition is distributed in the hope that it will
16 be useful, but WITHOUT ANY WARRANTY; without even the implied
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details.
19
20* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see
22 <http://www.gnu.org/licenses/>.
23
24*/
25
26/* @override
27 https://www.example.com/iPHONE/css/iPhone.css
28 https://www.example.com/DEVELOPMENT/css/iPhone.css
29 https://www.example.com/WIZARD/css/iPhone.css
30*/
31
32/* ---------------------------------------- */
33
34body {
35 margin: 0;
36 font-family: Helvetica;
37 background: #FFFFFF;
38 color: #000000;
39 overflow-x: hidden;
40 -webkit-user-select: none;
41 -webkit-text-size-adjust: none;
42}
43
44
45div.toolbar {
46 box-sizing: border-box;
47 -moz-box-sizing: border-box;
48 -webkit-box-sizing: border-box;
49 border-bottom: 1px solid #2d3642;
50 border-top: 1px solid #6d84a2;
51 padding: 10px;
52 height: 45px;
53 /* background: url(../images/old/iPhone/toolbar.png) #6d84a2 repeat-x;*/
54 background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAArCAIAAAA2QHWOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUCNddjDEOgEAQAgn//5qltYWFnb1GB4vdSy4WBAYStKyb9+O0FJMYyjMyMWCC35lJM71r6vF1P07/lFSfPx6ZxNLcy1HtihzpA/RWcOj0zlDhAAAAAElFTkSuQmCCCg==) #6d84a2 repeat-x;
55}
56
57div.toolbar h1#pageTitle {
58 overflow: hidden;
59 margin-top: 1px;
60 margin-bottom: 0px;
61 margin-left: auto;
62 margin-right: auto;
63 width: 150px;
64 height: 25px; /* 45px*/
65 font-size: 20px;
66 width: 150px;
67 font-weight: bold;
68 text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0;
69 text-align: center;
70 text-overflow: ellipsis;
71 white-space: nowrap;
72 color: #FFFFFF;
73}
74
75div.toolbar a.button {
76 position: absolute;
77 overflow: hidden;
78 top: 8px;
79 right: 6px;
80 margin: 0;
81 border-width: 0 5px;
82 padding: 0 3px;
83 width: auto;
84 height: 30px;
85 line-height: 30px;
86 font-family: inherit;
87 font-size: 12px;
88 font-weight: bold;
89 color: #FFFFFF;
90 text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0;
91 text-overflow: ellipsis;
92 text-decoration: none;
93 white-space: nowrap;
94 background: none;
95 /* -webkit-border-image: url(../images/old/iPhone/toolButton.png) 0 5 0 5;*/
96}
97
98div.toolbar a#backButton {
99 /* display: none;*/
100 left: 6px;
101 right: auto;
102 padding: 0px;
103 max-width: 55px;
104 border-width: 0 8px 0 14px;
105 /* -webkit-border-image: url(../images/old/iPhone/backButton.png) 0 8 0 14;*/
106 -webkit-border-image: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAeCAIAAAA6iHCJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtJJREFUeNrEV21P01AYbbtubNExBnXDbYjjZYI4BMdgEANDQoTElw/+Rw0mBs0UiSGaoJFEQEPwjRhFCW/JxrZ2Xdu1fe71bpAhCHzqupPnS5ObPOeec+5zb+lHLxao05HPiwvzr3/++J7N7FFGgaaDLe034+O+wCXyxSKET1u5+Wc98XTK39zeOzjudLmNIoAR2tlaf/Zkqm9gKNI/RBigE9dtb23MJKZj8fvuC16b3WGxsJRxOFfHeQOtH+ZnOI+XRfgEBoLAzz6fjo7ebfD4GYYhMiEdDGRAW6xOt6d7YGzl4xIL/7mgyPL044edkVt19T4EFAJEVQYud+MvOCkHc7MJ3+VrXGOzXrHeZS1s9trjOVj7tiqpONTWBRgD6BVmQFls9iMaSHnx/bu3ffEHgC2gVVqAIojKR3Iw9zLRcjVmtTnA0NydxQDg0IWvq59kYIOeZtWs9gQkagcMcgK/vLjYNXQHcEkas0AcYPdNIPr7Q/0M69B089ofavB5ZVm3OJ2cTwegzAUgxGbSe8tLS52xewjRZGabzAABZt+8mvGHBsiYNF+AAw1cXEBGNUiQqWpAlArM5MSYBXgEOl0NkLcCkxak28MRKbuDMa6KDAwAUnU8HO2Q+N0SJ3OLMCA7V1S9vt7d3tSg5LNV0ACXwOekcGfreVbVVYUqMjOvyPsH71cqkxsZ7NHFJIXBTCMONMAlEryoxAfDucyOmaOpmINyaTowrK23IyDxKbNzUIYoKU3+i37OXpCESvfGCOw11uMMcCkQke4rDlrS1coOSk2VOXftERfKtZsURmLXQUqBVqiUABgrQirc0Xp4Fv4t8kxN8dLkaJQupOVcGnTN0PuQHHlRSG1Eu9tUTLOnxZ5clclsfmK078va7/WN7axomCN2e42Xc/VEIoiiM0KePeM20DTY3M22BZtuhENW1rC/NrI3WVGTmZxSKEr7V4ABAJ+53J1I3nPjAAAAAElFTkSuQmCCCg==) 0 8 0 14;
107}
108
109/* ------------------------------------------- */
110
111body.iPhone form.loginForm {
112 min-height: 372px;
113
114 box-sizing: border-box;
115 -moz-box-sizing: border-box;
116 -webkit-box-sizing: border-box;
117 padding: 10px;
118 /* background: #c8c8c8 url(../images/old/iPhone/pinstripes.png);*/
119 background: #c8c8c8 url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAIAAACdaSOZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpiPHrmCgMC/GNjYwNSAAEGADdNA3dnzPlQAAAAAElFTkSuQmCCCg==);
120}
121
122fieldset {
123 position: relative;
124 margin: 0 0 20px 0;
125 padding: 0;
126 background: #FFFFFF;
127 -webkit-border-radius: 10px;
128 -moz-border-radius: 10px;
129 border: 1px solid #999999;
130 text-align: right;
131 font-size: 16px;
132}
133
134.row {
135 position: relative;
136 min-height: 42px;
137 border-bottom: 1px solid #999999;
138 -webkit-border-radius: 0;
139 text-align: right;
140}
141
142fieldset > .row:last-child {
143 border-bottom: none !important;
144}
145
146
147.row > input:not(input[type|=radio]):not(input[type|=checkbox]),
148.row > div.fieldValue {
149 width: 100%;
150 box-sizing: border-box;
151 -moz-box-sizing: border-box;
152 -webkit-box-sizing: border-box;
153 margin: 0;
154 border: none;
155 /* padding: 0px;*/
156 padding: 0px 10px 0 112px;
157 height: 42px;
158 background: none;
159 font-size: 16px;
160 font-weight: normal;
161
162 color: #666a60;
163 -webkit-user-select: text;
164}
165
166/*.row > span.fieldValue {*/
167.row > div.fieldValue p {
168/*.row > input.fieldValue {*/
169 margin: 0px;
170 text-align: left;
171 height: 40px;
172 vertical-align: middle;
173 line-height: 40px;
174 /* padding: 0px 10px 0 112px;*/
175}
176
177/*body[orientation="landscape"] .row > span.fieldValue.password {*/
178body[orientation="landscape"] .row > div.fieldValue.password {
179/*body[orientation="landscape"] .row > input.fieldValue.password {*/
180 padding-right: 120px;
181 /* background: url(../images/old/iPhone/password_background.png) no-repeat 105px;*/
182 background: url(data:image/png;charset=utf-8;base64,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) no-repeat 105px;
183}
184
185/*.row > span.fieldValue.password {*/
186.row > div.fieldValue.password {
187/*.row > input.fieldValue.password {*/
188 color: rgba(255,255,255,0.5);
189 /* background: url(../images/old/iPhone/password_background.png) no-repeat 106px;*/
190 background: url(data:image/png;charset=utf-8;base64,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) no-repeat 106px;
191}
192
193.row > div.fieldValue.password.clear {
194 color: #666a60;
195 background: none;
196}
197
198.row > input[type|=radio], .row > input[type|=checkbox] {
199 margin: 7px 7px 0 0;
200 height: 25px;
201 width: 25px;
202}
203
204
205.row > label {
206 position: absolute;
207 margin: 0 0 0 14px;
208 line-height: 42px;
209 font-weight: bold;
210 max-width: 92px;
211 overflow: hidden;
212 white-space: nowrap;
213}
214
215body[orientation="landscape"] .row > label {
216 max-width: 150px;
217}
218
219body[orientation="landscape"] .row > input:not(input[type|=radio]):not(input[type|=checkbox]) {
220 padding-left: 140px;
221}
222
223.row > img.favicon {
224 position: absolute;
225 width: 20px;
226 height: 20px;
227 top: 12px;
228 left: 11px;
229}
230
231.row > span {
232 padding: 8px 13px;
233 text-align: left;
234 display: block;
235 color: #666a60;
236 font-size: 10pt;
237}
238
239.row.notes {
240 -webkit-user-select: text;
241}
242
243/* ------------------------------------------- */
244
245.whiteButton {
246 margin-left: auto;
247 margin-right: auto;
248 width: 150px;
249 display: block;
250 border-width: 0 12px;
251 padding: 10px;
252 text-align: center;
253 font-size: 20px;
254 font-weight: bold;
255 text-decoration: inherit;
256 color: inherit;
257
258 /* -webkit-border-image: url(../images/old/iPhone/whiteButton.png) 0 12 0 12;*/
259 -webkit-border-image: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAuCAQAAAB+dNqHAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAdAAAALgChnaVgAAAAAmJLR0QA/4ePzL8AAANhSURBVEjHnZZNaFxVFMd/5747mclMkpmxzYdJtFaJglgFpYSiBAVX7l0UUZGuSkEEu3PtSulCUXFdxYXL7kQQIWD9CsRIqdomGGOaSdJmZjKTeW/eu/e4mKRmrE3n5X83j/ve7/3POfe+d67QrTxP8QLDnMTenkv4kQ2+YZ6d/Y/Kvut+XuZVKtygzVbXC8v0cT+jXORLWneix/mAZZZwKIrSbSAIAcd5kDdZ6kaf4zzfEeLPnHrr+UeOWpMJ9rjYxe7a5ntff/YThhyneJ/Zf9Ep3uEXkhNjX50bHoiStoPE76HWiPQFfcGN+kufLKxheZJ3+aOD5vmIBaLXpz89HSVhzF2Uy2TtGxe/+JksJzjHjgCvMEHz6cnZt7dD5zlAgSlkZy7MrVDgbz43FJimhV46W2vFzutBI3aN8NJZlBbTFAKepZ/o/IszU1Gs95Tz2Uw1nFuiiTE8Rhs9fbIROt/LaISvTaO0mbIM0kTKeefoUSMDCI6SxRCT9d77XlFrCYgQi0PH72vH9CyNMSjO4tGM9do76hXB4y2KU+c8aaR41KJ4SIn6DgqgPq2rggWc+kMEjBUBVDUNKQBiOx+218Pl6tVr+jJhUZx4PYSr4XBSsAKaJH9tpirT7uIoTj3pAna43TJJWtSjYDpxp5bv5OpTb4mOq3IIX0W14ypeUq+rYBH5T9fqbRerWMClrbB4PBgUjZPUuXrUGBW51Yhc71y9LSJi1NgQxVWj3a7aw2gmONSGJtNAxC9v9+56vaoe6aubXEWy4meXe/+VXl42TvqzG4ZFCkRzv/+w3lu436/PX6NNnsUgCctjUUJwnWdGC/ZenpXw47loTRrldu3XwLkSrQmiHbkSP3FkwB4MXpjfWDE3JTfw29ZGAGHjgWJdcDW9XC/0PVS4W47fVj5cuLUmFWlOVlevei8ApVLp8bWclnWU4khpZvTRwaw5VggEINHlZuSv1mcr6zW2ZF22xqLqlWr19uYdGSkeWyn4IY5okX61GBHMrp1HJaYldW4G9Ylm7c/19a4jV6k0+fBmtjbkCwxoDovdQ0lIpEXTNIrbR6OVxWr1joNeJjM+Xhyu2+0+Z6Ocmt17Kj4bBvFgPJTUNlZX4/j/zohAJlMuF4vW5vP7Z3d2kqRW29qKuxr4P1RbNFwZtqq8AAAAAElFTkSuQmCCCg==) 0 12 0 12;
260 text-shadow: rgba(255, 255, 255, 0.7) 0 1px 0;
261}
262
263/* ------------------------------------------- */
264
265body.iPhone .loginProgressPanel {
266 min-height: 372px;
267
268 box-sizing: border-box;
269 -moz-box-sizing: border-box;
270 -webkit-box-sizing: border-box;
271 padding: 10px;
272 /* background: #c8c8c8 url(../images/old/iPhone/pinstripes.png);*/
273 background: #c8c8c8 url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAIAAACdaSOZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpiPHrmCgMC/GNjYwNSAAEGADdNA3dnzPlQAAAAAElFTkSuQmCCCg==);
274}
275
276body.iPhone .loadingBar {
277 margin-left: auto;
278 margin-right: auto;
279 margin-top: 60px;
280}
281
282div.loadingBar {
283 height: 22px;
284 width: 214px;
285 /* background: url(../images/old/loading/loadingBar.gif) no-repeat center;*/
286 background: url(data:image/gif;charset=utf-8;base64,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) no-repeat center;
287}
288
289div.loadingBar div.loadingBarProgress {
290 height: 100%;
291 width: 0%;
292}
293
294div.loadingBar div.loadingBarProgress div.loadingBarProgress_left {
295 height: 100%;
296 max-width: 8px;
297 /* background: url(../images/old/loading/loadingBarProgress.png) no-repeat 0;*/
298 background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAANYAAAAWCAYAAAC8C2KaAAAACXBIWXMAAAsSAAALEgHS3X78AAACIklEQVR4Ae3brU7DUBQH8HO6PQAazx4BRUKDwfChQTGFQ4wRFGEERdgQONRQoGEzGFISFI8w/DQSWHsP565r0xY2BiWY/ivW+530l52cdr0jwgEBCPy5AE9aUc7XV0kcl4jniGR20lj0QaAYAtzXWHgmNh7v3HTGXfOXgSWnKy6VqEZMCKZxcmiHgFCfAjrjva6XxfgUWNJc3tVBG9mBqEMAAmMFrrl+10r2pgJLTpYO9dZvNTkAZQhAYAoBNh3evz+KRsaBJccLevtXakYdOEMAAj8UCII6Hzx6dlY5nipBjXwTV1GAAAR+KiA1neHZWcOMJY35FS03bAMOCEAgl0CDG0/dMGP5by6xk2s1TIYABFRAjKufo8AyfoUkftyCDwQg8FsBloqdGmaswMf7qt9CYh4E0gLDWBrdCg7SXahBAAK5BEYZa9AnZmStXJSYDAEVENEtT/GtYNAjxl5AfDEgkFtAuGfXCDPW4N0jh9zci2IBCBRdwCTeY1kL2Z65RdYq+rcC159LQLjPFy9rdo0wY9nS+2uLSk5qI6FtxgEBCEwpEJg4flIvr2SrfEgOYxPulI4YBoFYwEiHL/2jqJ4KLNuowVXT4NqMBuAMAQh8I2DkSoPqLDnqU2DZTqmWF4mcXTxzJalQhkBGQJ+piEyL2/5DpifchJttjOpSLenmXMfVvboVBFmkgnOhBYbBJPqTuv41vx10C22Bi4fAfwt8AJe2flCLvH1PAAAAAElFTkSuQmCCCg==) no-repeat 0;
299}
300
301div.loadingBar div.loadingBarProgress div.loadingBarProgress_right {
302 position: relative;
303 height: 100%;
304 margin-left: 8px;
305 /* background: url(../images/old/loading/loadingBarProgress.png) no-repeat right;*/
306 background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAANYAAAAWCAYAAAC8C2KaAAAACXBIWXMAAAsSAAALEgHS3X78AAACIklEQVR4Ae3brU7DUBQH8HO6PQAazx4BRUKDwfChQTGFQ4wRFGEERdgQONRQoGEzGFISFI8w/DQSWHsP565r0xY2BiWY/ivW+530l52cdr0jwgEBCPy5AE9aUc7XV0kcl4jniGR20lj0QaAYAtzXWHgmNh7v3HTGXfOXgSWnKy6VqEZMCKZxcmiHgFCfAjrjva6XxfgUWNJc3tVBG9mBqEMAAmMFrrl+10r2pgJLTpYO9dZvNTkAZQhAYAoBNh3evz+KRsaBJccLevtXakYdOEMAAj8UCII6Hzx6dlY5nipBjXwTV1GAAAR+KiA1neHZWcOMJY35FS03bAMOCEAgl0CDG0/dMGP5by6xk2s1TIYABFRAjKufo8AyfoUkftyCDwQg8FsBloqdGmaswMf7qt9CYh4E0gLDWBrdCg7SXahBAAK5BEYZa9AnZmStXJSYDAEVENEtT/GtYNAjxl5AfDEgkFtAuGfXCDPW4N0jh9zci2IBCBRdwCTeY1kL2Z65RdYq+rcC159LQLjPFy9rdo0wY9nS+2uLSk5qI6FtxgEBCEwpEJg4flIvr2SrfEgOYxPulI4YBoFYwEiHL/2jqJ4KLNuowVXT4NqMBuAMAQh8I2DkSoPqLDnqU2DZTqmWF4mcXTxzJalQhkBGQJ+piEyL2/5DpifchJttjOpSLenmXMfVvboVBFmkgnOhBYbBJPqTuv41vx10C22Bi4fAfwt8AJe2flCLvH1PAAAAAElFTkSuQmCCCg==) no-repeat right;
307 top: -22px;
308}
309
310/* ------------------------------------------- */
311
312body.iPhone .loginErrorPanel {
313 position: absolute;
314 min-height: 372px;
315 box-sizing: border-box;
316 -moz-box-sizing: border-box;
317 -webkit-box-sizing: border-box;
318 padding: 10px;
319 /* background: #c8c8c8 url(../images/old/iPhone/pinstripes.png);*/
320 background: #c8c8c8 url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAIAAACdaSOZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpiPHrmCgMC/GNjYwNSAAEGADdNA3dnzPlQAAAAAElFTkSuQmCCCg==);
321}
322
323body.iPhone .loginErrorPanel h2 {
324 text-align: center;
325 color: red;
326 margin-top: 40px;
327}
328
329/* ------------------------------------------- */
330
331
332
333
334
335
336
337
338form.cardListSearchForm {
339 box-sizing: border-box;
340 -moz-box-sizing: border-box;
341 -webkit-box-sizing: border-box;
342 border-bottom: 1px solid #2d3642;
343 border-top: 1px solid #6d84a2;
344 padding: 6px;
345 height: 45px;
346 /* background: url(../images/old/iPhone/toolbar.png) #6d84a2 repeat-x;*/
347 background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAArCAIAAAA2QHWOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUCNddjDEOgEAQAgn//5qltYWFnb1GB4vdSy4WBAYStKyb9+O0FJMYyjMyMWCC35lJM71r6vF1P07/lFSfPx6ZxNLcy1HtihzpA/RWcOj0zlDhAAAAAElFTkSuQmCCCg==) #6d84a2 repeat-x;
348 margin: 0px;
349}
350
351form.cardListSearchForm input {
352 margin: 7px;
353 -webkit-appearance: searchfield;
354 width: 200px;
355}
356
357ul.cardListPanel {
358 margin: 0px;
359 padding: 0px;
360 list-style-type: none;
361 min-height: 372px;
362}
363
364li.cardListItem {
365 height: 43px;
366 border-bottom: 1px solid #cccccc;
367 /* background: url(../images/old/iPhone/listArrow.png) no-repeat right center;*/
368 background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAUCAYAAAB4d5a9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpi/P//PwOtARMDHcDwsYQFRJSXl8P4dVC6CZvizs5O8i1BsqARid9Ei+BiQ2KDLKumhSU1QNyKxG+hlkXoEQ+yqAPNogpapK5KNIvaKbUIVxKeAsTvkPg5QCxETUukgfgAkqFPgdgBzVKKLIFZoIJmwR1qBRdNLEC2BJQpV9LCAmRL/gBxAtRwqlqAXqzcgRrOQE0LQIBxtNIiBQAEGAA7xCa2yF9zEgAAAABJRU5ErkJgggo=) no-repeat right center;
369
370}
371
372li.cardListItem a {
373 position: relative;
374 top: -22px;
375 left: 40px;
376 display: block;
377 white-space: nowrap;
378 overflow: hidden;
379}
380
381body[orientation="portrait"] li.cardListItem a {
382 max-width: 250px;
383}
384
385body[orientation="landscape"] li.cardListItem a {
386 max-width: 400px;
387}
388
389li.cardListItem img {
390 height: 20px;
391 width: 20px;
392 padding: 12px 10px 0px 10px;
393}
394
395li.cardListItem a {
396 text-decoration: none;
397 color: black;
398 font-weight: bold;
399 font-size: 14pt;
400 vertical-align: 3px;
401}
402
403
404div.cardDetailPanel {
405 position: absolute;
406 top: 45px;
407 min-height: 372px;
408
409 box-sizing: border-box;
410 -moz-box-sizing: border-box;
411 -webkit-box-sizing: border-box;
412 padding: 10px;
413 /* background: #c8c8c8 url(../images/old/iPhone/pinstripes.png);*/
414 background: #c8c8c8 url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAIAAACdaSOZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpiPHrmCgMC/GNjYwNSAAEGADdNA3dnzPlQAAAAAElFTkSuQmCCCg==);
415}
416
417/*div.cardDetailPanel > fieldset > div.row > input.directLogin {*/
418div.cardDetailPanel > fieldset > div.row > span.directLogin {
419 width: 100%;
420 box-sizing: border-box;
421 -moz-box-sizing: border-box;
422 -webkit-box-sizing: border-box;
423 margin: 0;
424 border: none;
425 padding: 12px 10px 0 110px;
426 height: 42px;
427 background: none;
428 font-size: 16px;
429 font-weight: normal;
430
431 padding-left: 40px;
432 color: black;
433 /* background: url(../images/old/iPhone/listArrow.png) no-repeat right center;*/
434 background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAUCAYAAAB4d5a9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpi/P//PwOtARMDHcDwsYQFRJSXl8P4dVC6CZvizs5O8i1BsqARid9Ei+BiQ2KDLKumhSU1QNyKxG+hlkXoEQ+yqAPNogpapK5KNIvaKbUIVxKeAsTvkPg5QCxETUukgfgAkqFPgdgBzVKKLIFZoIJmwR1qBRdNLEC2BJQpV9LCAmRL/gBxAtRwqlqAXqzcgRrOQE0LQIBxtNIiBQAEGAA7xCa2yF9zEgAAAABJRU5ErkJgggo=) no-repeat right center;
435}
436
437/*body[orientation="landscape"] div.cardDetailPanel > fieldset > div.row > input.directLogin { */
438body[orientation="landscape"] div.cardDetailPanel > fieldset > div.row > span.directLogin {
439 padding-left: 50px;
440}
441
442div.cardDetailPanel h2 {
443 margin: 0 0 8px 14px;
444 font-size: inherit;
445 font-weight: bold;
446 color: #4d4d70;
447 text-shadow: rgba(255, 255, 255, 0.75) 1px 1px 0;
448}
449
450
451
452
453 /* body[orientation="portrait"] div.cardList {*/
454body[orientation="portrait"] > * {
455 width: 320px;
456}
457
458/* body[orientation="landscape"] div.cardList { */
459body[orientation="landscape"] > * {
460 width: 480px;
461}
diff --git a/frontend/gamma/css/clipperz/ie.css b/frontend/gamma/css/clipperz/ie.css
deleted file mode 100644
index 3c2d59a..0000000
--- a/frontend/gamma/css/clipperz/ie.css
+++ b/dev/null
@@ -1,353 +0,0 @@
1/*
2
3Copyright 2008-2011 Clipperz Srl
4
5This file is part of Clipperz Community Edition.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please
8refer to http://www.clipperz.com.
9
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
12 License as published by the Free Software Foundation, either version
13 3 of the License, or (at your option) any later version.
14
15* Clipperz Community Edition is distributed in the hope that it will
16 be useful, but WITHOUT ANY WARRANTY; without even the implied
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details.
19
20* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see
22 <http://www.gnu.org/licenses/>.
23
24*/
25
26<!--[if IE]>
27
28<style>
29
30{
31 background-color: white;
32}
33
34div#logoFrame {
35 height: 44px;
36}
37
38div#logo {
39 /* padding-left: 15px;*/
40 background: url(../images/old/logo_blue.png);
41}
42
43div.clipperzLoginForm div.loginForm form {
44 padding-left: 20px;
45}
46
47div.clipperzLoginForm div.registrationForm form {
48 padding-left: 20px;
49}
50
51div#newRecordInnerPanel {
52 width: 350px;
53 height: 160px;
54 background: url(../images/old/newRecordPanelBackground.png) no-repeat 0 -165px;
55 /*background: url(data:image/png;charset=utf-8;base64,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) no-repeat 0 -165px; */
56}
57
58img#donateHeaderIcon {
59 padding-top: 0px;
60 margin-bottom: 0px;
61}
62
63/* ========================================================== */
64
65div#applicationVersionType {
66 position: absolute;
67}
68
69div#applicationVersionType.readOnly {
70 background: url(../images/old/read-only.png) no-repeat fixed -5px -8px;
71}
72
73div#applicationVersionType.TEST {
74 background: url(../images/old/test-database.png) no-repeat fixed -5px -8px;
75}
76
77div#mainTabs {
78 background: #ff9400 url(../images/old/menubarSprite.gif) repeat-x;
79}
80
81div#menus {
82 background: url(../images/old/menubarSprite.gif) no-repeat right -26px;
83}
84
85div#menus table {
86 background: url(../images/old/menubarSprite.gif) no-repeat 0 -52px;
87}
88
89div#menus table tbody tr td div {
90 background: url(../images/old/menubarSprite.gif) no-repeat right -52px;
91}
92
93div#menus table tbody tr td div a {
94 background: url(../images/old/menubarSprite.gif) no-repeat left -26px;
95}
96
97div#menus table tbody tr td.selectedTab {
98 background: url(../images/old/menubarSprite.gif) repeat-x right -78px;
99}
100
101div#menus table tbody tr td.selectedTab div {
102 background: url(../images/old/menubarSprite.gif) no-repeat right -130px;
103}
104
105div#menus table tbody tr td.selectedTab div a {
106 background: url(../images/old/menubarSprite.gif) no-repeat left -104px;
107}
108
109div.clipperzLoginForm div.loginFormHeaderBox {
110 background: url(../images/old/loginFormBox.png) no-repeat -3px top;
111}
112
113div.clipperzLoginForm div.loginForm {
114 background: url(../images/old/loginFormBox.png) repeat-y -408px;
115}
116
117div.loginForm div.loginFormFooterBox {
118 background: url(../images/old/loginFormBox.png) no-repeat -813px bottom;
119}
120
121div.clipperzLoginForm div.registrationForm {
122 background: url(../images/old/loginFormBox.png) repeat-y -408px;
123}
124
125div.clipperzLoginForm form.read-only table.formLayout, div.panelform.read-only table.panelBody, div.clipperzSubPanel span.read-only, div.read-only {
126 background-image: url(../images/old/read-only_background.png);
127}
128
129div.registrationForm div.loginFormFooterBox {
130 background: url(../images/old/loginFormBox.png) no-repeat -813px bottom;
131}
132
133div.loginPanelSwitchLanguageBox {
134 background: url(../images/old/languageBox.png) no-repeat 19px -15px;
135}
136
137div#directLoginsBlock {
138 background: url(../images/old/directLoginBox.png) repeat-y -262px bottom;
139}
140
141div#directLoginsBlock div.directLoginsBlockHeaderBox {
142 background: url(../images/old/directLoginBox.png) no-repeat -11px -13px;
143}
144
145ul#directLogins {
146 background: url(../images/old/directLoginBox.png) no-repeat -513px bottom;
147}
148
149div#directLoginsDescription {
150 background: url(../images/old/directLoginBox.png) no-repeat -513px bottom;
151}
152
153/*
154div#recordListFilterHeader {
155 background: url(../images/old/cardFiltersSprite.gif) repeat-x 0 -114px;
156}
157
158div#recordFiltersTableWrapper {
159 background: url(../images/old/cardFiltersSprite.gif) no-repeat left -38px;
160}
161
162div#recordFiltersDIV table {
163 background: url(../images/old/cardFiltersSprite.gif) no-repeat right -19px;
164}
165
166div#recordFiltersDIV table tbody tr td div {
167 background: url(../images/old/cardFiltersSprite.gif) no-repeat right -38px;
168}
169
170div#recordFiltersDIV table tbody tr td div a {
171 background: url(../images/old/cardFiltersSprite.gif) no-repeat left -19px;
172}
173
174div#recordFiltersDIV table tbody tr td.selectedTab {
175 background: url(../images/old/cardFiltersSprite.gif) repeat-x -57px;
176}
177
178div#recordFiltersDIV table tbody tr td.selectedTab div {
179 background: url(../images/old/cardFiltersSprite.gif) no-repeat right -95px;
180}
181
182div#recordFiltersDIV table tbody tr td.selectedTab div a {
183 background: url(../images/old/cardFiltersSprite.gif) no-repeat left -76px;
184}
185*/
186
187div#recordFiltersSearchInnerPanel {
188 background: url(../images/old/recordFilterBackground.png) no-repeat -10px -138px;
189}
190
191table#recordListAndDetailBlockTABLE {
192 background: url(../images/old/cardBlockLowerBorder.gif) repeat-x 0 bottom;
193}
194
195div#recordListBlockHeader table.recordListBlockHeaderTABLE {
196 background: url(../images/old/cardsBlockRoundCorners.gif) no-repeat right -51px;
197}
198
199div#recordListBlockHeader table.recordListBlockHeaderTABLE tbody tr td.recordBlockTitleTD {
200 background: url(../images/old/cardsBlockRoundCorners.gif) no-repeat left 0px;
201}
202
203td#cardBoxLowerLeftTD {
204 background: url(../images/old/cardBlockLowerRoundedCorner.gif) no-repeat left -32px;
205}
206
207td#cardBoxLowerRightTD {
208 background: url(../images/old/cardBlockLowerRoundedCorner.gif) no-repeat right -82px;
209}
210
211div#newRecordInnerPanel {
212 background: url(../images/old/newRecordPanelBackground.png) no-repeat 0 -165px;
213}
214
215.resizable-textarea .grippie {
216 background: #eee url(../images/old/grippie.png) no-repeat center 1px;
217}
218
219div.Clipperz_recordFieldData div.passwordBackground, div.passwordEntropy {
220 background: url(../images/old/entropyBackground.gif) repeat-x 0 0;
221}
222
223div.Clipperz_recordFieldData input.scrambledField {
224 background: transparent url(../images/old/scrambledValue.png) no-repeat 0 0px;
225}
226
227div.Clipperz_recordFieldData input.scrambledField:focus {
228 background: transparent url(../images/old/scrambledValue.png) no-repeat 0 -16px;
229}
230
231div.directLoginCollapseLink {
232 background: url(../images/old/directLogin/toggle.png) no-repeat;
233}
234
235#mb-dlg .ext-mb-progress {
236 background:transparent url(../images/old/default/basic-dialog/progress2.gif) repeat-x 1px 1px;
237}
238
239.ydlg .ydlg-hd {
240 background: url(../images/old/clipperz/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
241}
242.ydlg .ydlg-hd-left {
243 background: url(../images/old/clipperz/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
244}
245.ydlg .ydlg-hd-right {
246 background: url(../images/old/clipperz/basic-dialog/hd-sprite.gif) no-repeat right 0;
247}
248
249.ydlg .ydlg-close {
250 background-image:url(../images/old/clipperz/basic-dialog/close.gif);
251}
252
253body .ybtn-left{
254 background:url(../images/old/default/basic-dialog/btn-sprite.gif) no-repeat 0 0;
255}
256body .ybtn-right{
257 background:url(../images/old/default/basic-dialog/btn-sprite.gif) no-repeat 0 -21px;
258}
259body .ybtn-center{
260 background:url(../images/old/default/basic-dialog/btn-sprite.gif) repeat-x 0 -42px;
261}
262
263
264
265
266div.Clipperz_PasswordGenerator_button {
267 background: url(../images/old/passwordAssistant.png) 0 22px;
268}
269
270div.Clipperz_PasswordGenerator_button.hover {
271 background: url(../images/old/passwordAssistant.png) 0 -1px;
272}
273
274body ul.radioList li h4 {
275 cursor: auto;
276}
277
278/* ========================================================== */
279
280</style>
281
282<![endif]-->
283
284
285
286<!--[if lt IE 7]>
287
288<style>
289
290div#newRecordPanel {
291 position: absolute;
292 margin-left: 0px;
293 width: 350px;
294 height: 160px;
295}
296
297div#newRecordInnerPanel {
298 width: 350px;
299 height: 160px;
300 background: url(../images/old/newRecordPanelBackground.gif) no-repeat 0 -165px;
301 /*background: url(data:image/gif;charset=utf-8;base64,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) no-repeat 0 -165px; */
302}
303
304div.newRecordInnerInnerPanel {
305 background-color: white;
306 padding: 0px;
307 margin-left: 15px;
308 margin-right: 15px;
309}
310
311div#newRecordPanel table td.newRecordPanelLabelTD {
312 padding-left: 0px;
313 padding-top: 3px;
314 font-size: 9pt;
315 width: 100px;
316}
317
318div#readOnlyBanner {
319 background: url(../images/old/read-only.gif) no-repeat fixed -5px -8px;
320 /*background: url(data:image/gif;charset=utf-8;base64,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) no-repeat fixed -5px -8px; */
321}
322
323
324
325ul#directLogins {
326 height: 200px;
327}
328
329div#recordListBlock {
330 height: 200px;
331}
332
333div.clipperzSubPanel {
334 height: 200px;
335}
336
337
338
339div.Clipperz_recordFieldData input.scrambledField {
340 background: transparent url(../images/old/scrambledValue.gif) no-repeat 0 0px;
341 /* background: transparent url(data:image/gif;charset=utf-8;base64,R0lGODlhRwAgANUmAP///7XV/2ZmZqW/4ODg4HBwcGttcJChuLi4uHZ8hYWFhfX19bDO9YCLmZmZmaOjo4aSo6C31tbW1q2trXuEj4uarY+Pj+vr66rG68LCwpWpwnp6eszMzHF1epuwzMTd/7rY/9Pm/8ng/7/b/87j/9jp/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACYALAAAAABHACAAAAb/QIBwSCwaj8ikcslsOp/QqHRKRV4QkmQGkbxmkVtlGGkyLSUCLtIiSKLVR7ZSTjYfLwvAW0gY9gF0eEKCewB/hkKBeXyJbQCCRGVIDgIOE5UPBQV8AhsTCmmgapSWmJqcnqKiqJ+haUJlsbFFCKACt50TeQSZuLcOHEK1vrm7vb7AfMe4yQCyskcEBbcZRw+3CotE0tTW2NpE1wLZRtBI19fk25qU1UXo4+CG7ALu6wXt5bNHHAIWAAgEPCgCSsICTYcA9PsXcCCRggcLJAQAEWEkO5KMcNhwIREcAAssCZGgIOHGjoA+hpwwsiSRlS0TZsxYpabNmzhz6tzJs6fP/wBAgwodSrSo0aNIkypdyrSp06dQo0o1iuFAhKMaDhytetVoVqRfjZZJGkGAVqMUBBwte7ZoWqRvxZqgyiAAW6ADguYNEBdD3QB+7ZrFqxdo378B9h4G+gHo2AAjQAhtIKBBhcoQDBjAK6BDhQRmQZ+lbBmzZs6eRYtG/Tn04A/PYpUQegC0L891B2Qm1sAD0NrEcCfe7as3XuK4jMOObYIE0QEGbmkoCuFWAsR6owuYTrS6gOvUrWN3HEty+OrghUI3QJm70Orox69v/1wzfaHLy4Qo6kEAhQAHCADBUKBFwIBmewHV338BDihUgQcakCBQECIoVBkigFBGY0N50DIBBoa1FQADlgEVQQITeggiXyKSWIGJKArlIowJajhXABtOpeOOPPbo449ABinkkAEEAQA7Cg==) no-repeat 0 0px;*/
342}
343
344div.Clipperz_recordFieldData input.scrambledField:focus {
345 background: transparent url(../images/old/scrambledValue.gif) no-repeat 0 -14px;
346 /* background: transparent url(data:image/gif;charset=utf-8;base64,R0lGODlhRwAgANUmAP///7XV/2ZmZqW/4ODg4HBwcGttcJChuLi4uHZ8hYWFhfX19bDO9YCLmZmZmaOjo4aSo6C31tbW1q2trXuEj4uarY+Pj+vr66rG68LCwpWpwnp6eszMzHF1epuwzMTd/7rY/9Pm/8ng/7/b/87j/9jp/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACYALAAAAABHACAAAAb/QIBwSCwaj8ikcslsOp/QqHRKRV4QkmQGkbxmkVtlGGkyLSUCLtIiSKLVR7ZSTjYfLwvAW0gY9gF0eEKCewB/hkKBeXyJbQCCRGVIDgIOE5UPBQV8AhsTCmmgapSWmJqcnqKiqJ+haUJlsbFFCKACt50TeQSZuLcOHEK1vrm7vb7AfMe4yQCyskcEBbcZRw+3CotE0tTW2NpE1wLZRtBI19fk25qU1UXo4+CG7ALu6wXt5bNHHAIWAAgEPCgCSsICTYcA9PsXcCCRggcLJAQAEWEkO5KMcNhwIREcAAssCZGgIOHGjoA+hpwwsiSRlS0TZsxYpabNmzhz6tzJs6fP/wBAgwodSrSo0aNIkypdyrSp06dQo0o1iuFAhKMaDhytetVoVqRfjZZJGkGAVqMUBBwte7ZoWqRvxZqgyiAAW6ADguYNEBdD3QB+7ZrFqxdo378B9h4G+gHo2AAjQAhtIKBBhcoQDBjAK6BDhQRmQZ+lbBmzZs6eRYtG/Tn04A/PYpUQegC0L891B2Qm1sAD0NrEcCfe7as3XuK4jMOObYIE0QEGbmkoCuFWAsR6owuYTrS6gOvUrWN3HEty+OrghUI3QJm70Orox69v/1wzfaHLy4Qo6kEAhQAHCADBUKBFwIBmewHV338BDihUgQcakCBQECIoVBkigFBGY0N50DIBBoa1FQADlgEVQQITeggiXyKSWIGJKArlIowJajhXABtOpeOOPPbo449ABinkkAEEAQA7Cg==) no-repeat 0 -14px;*/
347}
348
349
350
351</style>
352
353<![endif]-->
diff --git a/frontend/gamma/css/clipperz/compact.css b/frontend/gamma/css/compact.css
index c6e8661..0b32401 100644
--- a/frontend/gamma/css/clipperz/compact.css
+++ b/frontend/gamma/css/compact.css
@@ -1,159 +1,151 @@
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/* @override https://www.example.com/css/compact.css */ 26/* @override https://www.example.com/css/compact.css */
27/*
27 28
29Color list:
30- login box:
31 light#ff9955
32 dark#ff6622
33- login button:
34 regular#dd5500
35 hover#773311
36- login translations:
37 box: #cc6622;
38 not-selected:
39 color: #ddaa99
40 background:#994422
41 selected: #772211;
42*/
28body.compact div#mainDiv { 43body.compact div#mainDiv {
29/* 44 /*
30 width: 250px; 45 width: 250px;
31 height: 95%; 46 height: 95%;
32 border: 1px solid #333366; 47 border: 1px solid #333366;
33*/ 48*/
34 padding: 0px;
35}
36 49
50 padding: 0px;
51}
37body.compact div#compactHeader { 52body.compact div#compactHeader {
38 background-color: #333366; 53 background-color: #333366;
39} 54}
40
41body.compact div#compactHeader img { 55body.compact div#compactHeader img {
42 padding: 2px 20px 2px 4px; 56 padding: 2px 20px 2px 4px;
43 width: 60; 57 width: 60;
44} 58}
45
46body.compact div#compactHeader a { 59body.compact div#compactHeader a {
47 color: white; 60 color: white;
48 text-decoration: none; 61 text-decoration: none;
49 font-size: 10pt; 62 font-size: 10pt;
50 /*position: absolute; */ 63 /*position: absolute; */
51 right: 10px;
52 top: 6px;
53}
54 64
65 right: 10px;
66 top: 6px;
67}
55body.compact div#compactHeader a:hover { 68body.compact div#compactHeader a:hover {
56 color: #ff9400; 69 color: #ff9400;
57} 70}
58
59body.compact h4 { 71body.compact h4 {
60 color: #999999; 72 color: #999999;
61 text-align: center; 73 text-align: center;
62 padding: 20px; 74 padding: 20px;
63 font-weight: normal; 75 font-weight: normal;
64 font-size: 12pt; 76 font-size: 12pt;
65 font-style: italic; 77 font-style: italic;
66} 78}
67
68body.compact div.loginPanel form { 79body.compact div.loginPanel form {
69 padding: 10px; 80 padding: 10px;
70} 81}
71
72body.compact div.loginPanel dt { 82body.compact div.loginPanel dt {
73 color: #aaaaaa; 83 color: #aaaaaa;
74 font-size: 10pt; 84 font-size: 10pt;
75} 85}
76
77body.compact div.loginPanel input { 86body.compact div.loginPanel input {
78 width: 180px; 87 width: 180px;
79} 88}
80
81body.compact ul#directLogins { 89body.compact ul#directLogins {
82 background-image: none; 90 background-image: none;
83 padding: 4px 0px; 91 padding: 4px 0px;
84} 92}
85
86body.compact ul#directLogins li { 93body.compact ul#directLogins li {
87 width:auto; 94 width: auto;
88} 95}
89
90body.compact ul#directLogins li.hover { 96body.compact ul#directLogins li.hover {
91 width:auto; 97 width: auto;
92 padding-right: 0px; 98 padding-right: 0px;
93} 99}
94
95body.compact div.lockPanel { 100body.compact div.lockPanel {
96 color: #999999; 101 color: #999999;
97 font-size: 10pt; 102 font-size: 10pt;
98 padding: 10px; 103 padding: 10px;
99} 104}
100
101div#compactMiscLinks ul { 105div#compactMiscLinks ul {
102 /* text-align: center;*/ 106 /* text-align: center;*/
103 display: block;
104 padding-left: 22px;
105 background-color: #ff9400;
106}
107 107
108 display: block;
109 padding-left: 22px;
110 background-color: #ff9400;
111}
108div#compactMiscLinks ul li { 112div#compactMiscLinks ul li {
109 display: inline; 113 display: inline;
110 padding: 2px 5px; 114 padding: 2px 5px;
111} 115}
112
113div#compactHeader div#compactMiscLinks ul li a { 116div#compactHeader div#compactMiscLinks ul li a {
114 font-size: 9pt; 117 font-size: 9pt;
115} 118}
116
117div#compactHeader div#compactMiscLinks ul li a:hover { 119div#compactHeader div#compactMiscLinks ul li a:hover {
118 color: #333366; 120 color: #333366;
119} 121}
120
121div#lockBlock { 122div#lockBlock {
122 position: absolute; 123 position: absolute;
123 right: 10px; 124 right: 10px;
124 top: 6px; 125 top: 6px;
125} 126}
126
127div#lockBlock input { 127div#lockBlock input {
128 width: auto; 128 width: auto;
129 padding-bottom: 2px; 129 padding-bottom: 2px;
130} 130}
131
132div#lockBlock span { 131div#lockBlock span {
133 font-size: 9pt; 132 font-size: 9pt;
134 padding: 0px 5px 0px 4px; 133 padding: 0px 5px 0px 4px;
135 color: #aaaaaa; 134 color: #aaaaaa;
136} 135}
137
138div#lockBlock a#lock { 136div#lockBlock a#lock {
139 font-size: 9pt; 137 font-size: 9pt;
140} 138}
141
142/* @group Donate */ 139/* @group Donate */
143
144a#donateHeaderLink { 140a#donateHeaderLink {
145 font-weight: bold; 141 font-weight: bold;
146} 142}
147
148div#compactMiscLinks a#donateHeaderIconLink img#donateHeaderLinkIcon { 143div#compactMiscLinks a#donateHeaderIconLink img#donateHeaderLinkIcon {
149 display: inline; 144 display: inline;
150 position: absolute; 145 position: absolute;
151 top: 22px; 146 top: 22px;
152 left: 1px; 147 left: 1px;
153 width: 12px; 148 width: 12px;
154 height: 12px; 149 height: 12px;
155} 150}
156
157
158
159/* @end */ \ No newline at end of file 151/* @end */ \ No newline at end of file
diff --git a/frontend/gamma/css/iPhone.css b/frontend/gamma/css/iPhone.css
new file mode 100644
index 0000000..e6e233d
--- a/dev/null
+++ b/frontend/gamma/css/iPhone.css
@@ -0,0 +1,428 @@
1/*
2
3Copyright 2008-2011 Clipperz Srl
4
5This file is part of Clipperz Community Edition.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please
8refer to http://www.clipperz.com.
9
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
12 License as published by the Free Software Foundation, either version
13 3 of the License, or (at your option) any later version.
14
15* Clipperz Community Edition is distributed in the hope that it will
16 be useful, but WITHOUT ANY WARRANTY; without even the implied
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details.
19
20* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see
22 <http://www.gnu.org/licenses/>.
23
24*/
25
26/* @override
27 https://www.example.com/iPHONE/css/iPhone.css
28 https://www.example.com/DEVELOPMENT/css/iPhone.css
29 https://www.example.com/WIZARD/css/iPhone.css
30*/
31/*
32
33Color list:
34- login box:
35 light#ff9955
36 dark#ff6622
37- login button:
38 regular#dd5500
39 hover#773311
40- login translations:
41 box: #cc6622;
42 not-selected:
43 color: #ddaa99
44 background:#994422
45 selected: #772211;
46*/
47/* ---------------------------------------- */
48body {
49 margin: 0;
50 font-family: Helvetica;
51 background: #FFFFFF;
52 color: #000000;
53 overflow-x: hidden;
54 -webkit-user-select: none;
55 -webkit-text-size-adjust: none;
56}
57div.toolbar {
58 box-sizing: border-box;
59 -moz-box-sizing: border-box;
60 -webkit-box-sizing: border-box;
61 border-bottom: 1px solid #2d3642;
62 border-top: 1px solid #6d84a2;
63 padding: 10px;
64 height: 45px;
65 /* background: url(../images/old/iPhone/toolbar.png) #6d84a2 repeat-x;*/
66
67 background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAArCAIAAAA2QHWOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUCNddjDEOgEAQAgn//5qltYWFnb1GB4vdSy4WBAYStKyb9+O0FJMYyjMyMWCC35lJM71r6vF1P07/lFSfPx6ZxNLcy1HtihzpA/RWcOj0zlDhAAAAAElFTkSuQmCCCg==) #6d84a2 repeat-x;
68}
69div.toolbar h1#pageTitle {
70 overflow: hidden;
71 margin-top: 1px;
72 margin-bottom: 0px;
73 margin-left: auto;
74 margin-right: auto;
75 width: 150px;
76 height: 25px;
77 /* 45px*/
78
79 font-size: 20px;
80 width: 150px;
81 font-weight: bold;
82 text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0;
83 text-align: center;
84 text-overflow: ellipsis;
85 white-space: nowrap;
86 color: #FFFFFF;
87}
88div.toolbar a.button {
89 position: absolute;
90 overflow: hidden;
91 top: 8px;
92 right: 6px;
93 margin: 0;
94 border-width: 0 5px;
95 padding: 0 3px;
96 width: auto;
97 height: 30px;
98 line-height: 30px;
99 font-family: inherit;
100 font-size: 12px;
101 font-weight: bold;
102 color: #FFFFFF;
103 text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0;
104 text-overflow: ellipsis;
105 text-decoration: none;
106 white-space: nowrap;
107 background: none;
108 /* -webkit-border-image: url(../images/old/iPhone/toolButton.png) 0 5 0 5;*/
109
110}
111div.toolbar a#backButton {
112 /* display: none;*/
113
114 left: 6px;
115 right: auto;
116 padding: 0px;
117 max-width: 55px;
118 border-width: 0 8px 0 14px;
119 /* -webkit-border-image: url(../images/old/iPhone/backButton.png) 0 8 0 14;*/
120
121 -webkit-border-image: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAeCAIAAAA6iHCJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtJJREFUeNrEV21P01AYbbtubNExBnXDbYjjZYI4BMdgEANDQoTElw/+Rw0mBs0UiSGaoJFEQEPwjRhFCW/JxrZ2Xdu1fe71bpAhCHzqupPnS5ObPOeec+5zb+lHLxao05HPiwvzr3/++J7N7FFGgaaDLe034+O+wCXyxSKET1u5+Wc98XTK39zeOzjudLmNIoAR2tlaf/Zkqm9gKNI/RBigE9dtb23MJKZj8fvuC16b3WGxsJRxOFfHeQOtH+ZnOI+XRfgEBoLAzz6fjo7ebfD4GYYhMiEdDGRAW6xOt6d7YGzl4xIL/7mgyPL044edkVt19T4EFAJEVQYud+MvOCkHc7MJ3+VrXGOzXrHeZS1s9trjOVj7tiqpONTWBRgD6BVmQFls9iMaSHnx/bu3ffEHgC2gVVqAIojKR3Iw9zLRcjVmtTnA0NydxQDg0IWvq59kYIOeZtWs9gQkagcMcgK/vLjYNXQHcEkas0AcYPdNIPr7Q/0M69B089ofavB5ZVm3OJ2cTwegzAUgxGbSe8tLS52xewjRZGabzAABZt+8mvGHBsiYNF+AAw1cXEBGNUiQqWpAlArM5MSYBXgEOl0NkLcCkxak28MRKbuDMa6KDAwAUnU8HO2Q+N0SJ3OLMCA7V1S9vt7d3tSg5LNV0ACXwOekcGfreVbVVYUqMjOvyPsH71cqkxsZ7NHFJIXBTCMONMAlEryoxAfDucyOmaOpmINyaTowrK23IyDxKbNzUIYoKU3+i37OXpCESvfGCOw11uMMcCkQke4rDlrS1coOSk2VOXftERfKtZsURmLXQUqBVqiUABgrQirc0Xp4Fv4t8kxN8dLkaJQupOVcGnTN0PuQHHlRSG1Eu9tUTLOnxZ5clclsfmK078va7/WN7axomCN2e42Xc/VEIoiiM0KePeM20DTY3M22BZtuhENW1rC/NrI3WVGTmZxSKEr7V4ABAJ+53J1I3nPjAAAAAElFTkSuQmCCCg==) 0 8 0 14;
122}
123/* ------------------------------------------- */
124body.iPhone form.loginForm {
125 min-height: 372px;
126 box-sizing: border-box;
127 -moz-box-sizing: border-box;
128 -webkit-box-sizing: border-box;
129 padding: 10px;
130 /* background: #c8c8c8 url(../images/old/iPhone/pinstripes.png);*/
131
132 background: #c8c8c8 url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAIAAACdaSOZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpiPHrmCgMC/GNjYwNSAAEGADdNA3dnzPlQAAAAAElFTkSuQmCCCg==);
133}
134fieldset {
135 position: relative;
136 margin: 0 0 20px 0;
137 padding: 0;
138 background: #FFFFFF;
139 -webkit-border-radius: 10px;
140 -moz-border-radius: 10px;
141 border: 1px solid #999999;
142 text-align: right;
143 font-size: 16px;
144}
145.row {
146 position: relative;
147 min-height: 42px;
148 border-bottom: 1px solid #999999;
149 -webkit-border-radius: 0;
150 text-align: right;
151}
152fieldset > .row:last-child {
153 border-bottom: none !important;
154}
155.row > input:not(input[type|=radio]):not(input[type|=checkbox]), .row > div.fieldValue {
156 width: 100%;
157 box-sizing: border-box;
158 -moz-box-sizing: border-box;
159 -webkit-box-sizing: border-box;
160 margin: 0;
161 border: none;
162 /* padding: 0px;*/
163
164 padding: 0px 10px 0 112px;
165 height: 42px;
166 background: none;
167 font-size: 16px;
168 font-weight: normal;
169 color: #666a60;
170 -webkit-user-select: text;
171}
172/*.row > span.fieldValue {*/
173.row > div.fieldValue p {
174 /*.row > input.fieldValue {*/
175
176 margin: 0px;
177 text-align: left;
178 height: 40px;
179 vertical-align: middle;
180 line-height: 40px;
181 /* padding: 0px 10px 0 112px;*/
182
183}
184/*body[orientation="landscape"] .row > span.fieldValue.password {*/
185body[orientation="landscape"] .row > div.fieldValue.password {
186 /*body[orientation="landscape"] .row > input.fieldValue.password {*/
187
188 padding-right: 120px;
189 /* background: url(../images/old/iPhone/password_background.png) no-repeat 105px;*/
190
191 background: url(data:image/png;charset=utf-8;base64,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) no-repeat 105px;
192}
193/*.row > span.fieldValue.password {*/
194.row > div.fieldValue.password {
195 /*.row > input.fieldValue.password {*/
196
197 color: rgba(255, 255, 255, 0.5);
198 /* background: url(../images/old/iPhone/password_background.png) no-repeat 106px;*/
199
200 background: url(data:image/png;charset=utf-8;base64,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) no-repeat 106px;
201}
202.row > div.fieldValue.password.clear {
203 color: #666a60;
204 background: none;
205}
206.row > input[type|=radio], .row > input[type|=checkbox] {
207 margin: 7px 7px 0 0;
208 height: 25px;
209 width: 25px;
210}
211.row > label {
212 position: absolute;
213 margin: 0 0 0 14px;
214 line-height: 42px;
215 font-weight: bold;
216 max-width: 92px;
217 overflow: hidden;
218 white-space: nowrap;
219}
220body[orientation="landscape"] .row > label {
221 max-width: 150px;
222}
223body[orientation="landscape"] .row > input:not(input[type|=radio]):not(input[type|=checkbox]) {
224 padding-left: 140px;
225}
226.row > img.favicon {
227 position: absolute;
228 width: 20px;
229 height: 20px;
230 top: 12px;
231 left: 11px;
232}
233.row > span {
234 padding: 8px 13px;
235 text-align: left;
236 display: block;
237 color: #666a60;
238 font-size: 10pt;
239}
240.row.notes {
241 -webkit-user-select: text;
242}
243/* ------------------------------------------- */
244.whiteButton {
245 margin-left: auto;
246 margin-right: auto;
247 width: 150px;
248 display: block;
249 border-width: 0 12px;
250 padding: 10px;
251 text-align: center;
252 font-size: 20px;
253 font-weight: bold;
254 text-decoration: inherit;
255 color: inherit;
256 /* -webkit-border-image: url(../images/old/iPhone/whiteButton.png) 0 12 0 12;*/
257
258 -webkit-border-image: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAuCAQAAAB+dNqHAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAdAAAALgChnaVgAAAAAmJLR0QA/4ePzL8AAANhSURBVEjHnZZNaFxVFMd/5747mclMkpmxzYdJtFaJglgFpYSiBAVX7l0UUZGuSkEEu3PtSulCUXFdxYXL7kQQIWD9CsRIqdomGGOaSdJmZjKTeW/eu/e4mKRmrE3n5X83j/ve7/3POfe+d67QrTxP8QLDnMTenkv4kQ2+YZ6d/Y/Kvut+XuZVKtygzVbXC8v0cT+jXORLWneix/mAZZZwKIrSbSAIAcd5kDdZ6kaf4zzfEeLPnHrr+UeOWpMJ9rjYxe7a5ntff/YThhyneJ/Zf9Ep3uEXkhNjX50bHoiStoPE76HWiPQFfcGN+kufLKxheZJ3+aOD5vmIBaLXpz89HSVhzF2Uy2TtGxe/+JksJzjHjgCvMEHz6cnZt7dD5zlAgSlkZy7MrVDgbz43FJimhV46W2vFzutBI3aN8NJZlBbTFAKepZ/o/IszU1Gs95Tz2Uw1nFuiiTE8Rhs9fbIROt/LaISvTaO0mbIM0kTKeefoUSMDCI6SxRCT9d77XlFrCYgQi0PH72vH9CyNMSjO4tGM9do76hXB4y2KU+c8aaR41KJ4SIn6DgqgPq2rggWc+kMEjBUBVDUNKQBiOx+218Pl6tVr+jJhUZx4PYSr4XBSsAKaJH9tpirT7uIoTj3pAna43TJJWtSjYDpxp5bv5OpTb4mOq3IIX0W14ypeUq+rYBH5T9fqbRerWMClrbB4PBgUjZPUuXrUGBW51Yhc71y9LSJi1NgQxVWj3a7aw2gmONSGJtNAxC9v9+56vaoe6aubXEWy4meXe/+VXl42TvqzG4ZFCkRzv/+w3lu436/PX6NNnsUgCctjUUJwnWdGC/ZenpXw47loTRrldu3XwLkSrQmiHbkSP3FkwB4MXpjfWDE3JTfw29ZGAGHjgWJdcDW9XC/0PVS4W47fVj5cuLUmFWlOVlevei8ApVLp8bWclnWU4khpZvTRwaw5VggEINHlZuSv1mcr6zW2ZF22xqLqlWr19uYdGSkeWyn4IY5okX61GBHMrp1HJaYldW4G9Ylm7c/19a4jV6k0+fBmtjbkCwxoDovdQ0lIpEXTNIrbR6OVxWr1joNeJjM+Xhyu2+0+Z6Ocmt17Kj4bBvFgPJTUNlZX4/j/zohAJlMuF4vW5vP7Z3d2kqRW29qKuxr4P1RbNFwZtqq8AAAAAElFTkSuQmCCCg==) 0 12 0 12;
259 text-shadow: rgba(255, 255, 255, 0.7) 0 1px 0;
260}
261/* ------------------------------------------- */
262body.iPhone .loginProgressPanel {
263 min-height: 372px;
264 box-sizing: border-box;
265 -moz-box-sizing: border-box;
266 -webkit-box-sizing: border-box;
267 padding: 10px;
268 /* background: #c8c8c8 url(../images/old/iPhone/pinstripes.png);*/
269
270 background: #c8c8c8 url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAIAAACdaSOZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpiPHrmCgMC/GNjYwNSAAEGADdNA3dnzPlQAAAAAElFTkSuQmCCCg==);
271}
272body.iPhone .loadingBar {
273 margin-left: auto;
274 margin-right: auto;
275 margin-top: 60px;
276}
277div.loadingBar {
278 height: 22px;
279 width: 214px;
280 /* background: url(../images/old/loading/loadingBar.gif) no-repeat center;*/
281
282 background: url(data:image/gif;charset=utf-8;base64,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) no-repeat center;
283}
284div.loadingBar div.loadingBarProgress {
285 height: 100%;
286 width: 0%;
287}
288div.loadingBar div.loadingBarProgress div.loadingBarProgress_left {
289 height: 100%;
290 max-width: 8px;
291 /* background: url(../images/old/loading/loadingBarProgress.png) no-repeat 0;*/
292
293 background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAANYAAAAWCAYAAAC8C2KaAAAACXBIWXMAAAsSAAALEgHS3X78AAACIklEQVR4Ae3brU7DUBQH8HO6PQAazx4BRUKDwfChQTGFQ4wRFGEERdgQONRQoGEzGFISFI8w/DQSWHsP565r0xY2BiWY/ivW+530l52cdr0jwgEBCPy5AE9aUc7XV0kcl4jniGR20lj0QaAYAtzXWHgmNh7v3HTGXfOXgSWnKy6VqEZMCKZxcmiHgFCfAjrjva6XxfgUWNJc3tVBG9mBqEMAAmMFrrl+10r2pgJLTpYO9dZvNTkAZQhAYAoBNh3evz+KRsaBJccLevtXakYdOEMAAj8UCII6Hzx6dlY5nipBjXwTV1GAAAR+KiA1neHZWcOMJY35FS03bAMOCEAgl0CDG0/dMGP5by6xk2s1TIYABFRAjKufo8AyfoUkftyCDwQg8FsBloqdGmaswMf7qt9CYh4E0gLDWBrdCg7SXahBAAK5BEYZa9AnZmStXJSYDAEVENEtT/GtYNAjxl5AfDEgkFtAuGfXCDPW4N0jh9zci2IBCBRdwCTeY1kL2Z65RdYq+rcC159LQLjPFy9rdo0wY9nS+2uLSk5qI6FtxgEBCEwpEJg4flIvr2SrfEgOYxPulI4YBoFYwEiHL/2jqJ4KLNuowVXT4NqMBuAMAQh8I2DkSoPqLDnqU2DZTqmWF4mcXTxzJalQhkBGQJ+piEyL2/5DpifchJttjOpSLenmXMfVvboVBFmkgnOhBYbBJPqTuv41vx10C22Bi4fAfwt8AJe2flCLvH1PAAAAAElFTkSuQmCCCg==) no-repeat 0;
294}
295div.loadingBar div.loadingBarProgress div.loadingBarProgress_right {
296 position: relative;
297 height: 100%;
298 margin-left: 8px;
299 /* background: url(../images/old/loading/loadingBarProgress.png) no-repeat right;*/
300
301 background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAANYAAAAWCAYAAAC8C2KaAAAACXBIWXMAAAsSAAALEgHS3X78AAACIklEQVR4Ae3brU7DUBQH8HO6PQAazx4BRUKDwfChQTGFQ4wRFGEERdgQONRQoGEzGFISFI8w/DQSWHsP565r0xY2BiWY/ivW+530l52cdr0jwgEBCPy5AE9aUc7XV0kcl4jniGR20lj0QaAYAtzXWHgmNh7v3HTGXfOXgSWnKy6VqEZMCKZxcmiHgFCfAjrjva6XxfgUWNJc3tVBG9mBqEMAAmMFrrl+10r2pgJLTpYO9dZvNTkAZQhAYAoBNh3evz+KRsaBJccLevtXakYdOEMAAj8UCII6Hzx6dlY5nipBjXwTV1GAAAR+KiA1neHZWcOMJY35FS03bAMOCEAgl0CDG0/dMGP5by6xk2s1TIYABFRAjKufo8AyfoUkftyCDwQg8FsBloqdGmaswMf7qt9CYh4E0gLDWBrdCg7SXahBAAK5BEYZa9AnZmStXJSYDAEVENEtT/GtYNAjxl5AfDEgkFtAuGfXCDPW4N0jh9zci2IBCBRdwCTeY1kL2Z65RdYq+rcC159LQLjPFy9rdo0wY9nS+2uLSk5qI6FtxgEBCEwpEJg4flIvr2SrfEgOYxPulI4YBoFYwEiHL/2jqJ4KLNuowVXT4NqMBuAMAQh8I2DkSoPqLDnqU2DZTqmWF4mcXTxzJalQhkBGQJ+piEyL2/5DpifchJttjOpSLenmXMfVvboVBFmkgnOhBYbBJPqTuv41vx10C22Bi4fAfwt8AJe2flCLvH1PAAAAAElFTkSuQmCCCg==) no-repeat right;
302 top: -22px;
303}
304/* ------------------------------------------- */
305body.iPhone .loginErrorPanel {
306 position: absolute;
307 min-height: 372px;
308 box-sizing: border-box;
309 -moz-box-sizing: border-box;
310 -webkit-box-sizing: border-box;
311 padding: 10px;
312 /* background: #c8c8c8 url(../images/old/iPhone/pinstripes.png);*/
313
314 background: #c8c8c8 url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAIAAACdaSOZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpiPHrmCgMC/GNjYwNSAAEGADdNA3dnzPlQAAAAAElFTkSuQmCCCg==);
315}
316body.iPhone .loginErrorPanel h2 {
317 text-align: center;
318 color: red;
319 margin-top: 40px;
320}
321/* ------------------------------------------- */
322form.cardListSearchForm {
323 box-sizing: border-box;
324 -moz-box-sizing: border-box;
325 -webkit-box-sizing: border-box;
326 border-bottom: 1px solid #2d3642;
327 border-top: 1px solid #6d84a2;
328 padding: 6px;
329 height: 45px;
330 /* background: url(../images/old/iPhone/toolbar.png) #6d84a2 repeat-x;*/
331
332 background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAArCAIAAAA2QHWOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUCNddjDEOgEAQAgn//5qltYWFnb1GB4vdSy4WBAYStKyb9+O0FJMYyjMyMWCC35lJM71r6vF1P07/lFSfPx6ZxNLcy1HtihzpA/RWcOj0zlDhAAAAAElFTkSuQmCCCg==) #6d84a2 repeat-x;
333 margin: 0px;
334}
335form.cardListSearchForm input {
336 margin: 7px;
337 -webkit-appearance: searchfield;
338 width: 200px;
339}
340ul.cardListPanel {
341 margin: 0px;
342 padding: 0px;
343 list-style-type: none;
344 min-height: 372px;
345}
346li.cardListItem {
347 height: 43px;
348 border-bottom: 1px solid #cccccc;
349 /* background: url(../images/old/iPhone/listArrow.png) no-repeat right center;*/
350
351 background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAUCAYAAAB4d5a9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpi/P//PwOtARMDHcDwsYQFRJSXl8P4dVC6CZvizs5O8i1BsqARid9Ei+BiQ2KDLKumhSU1QNyKxG+hlkXoEQ+yqAPNogpapK5KNIvaKbUIVxKeAsTvkPg5QCxETUukgfgAkqFPgdgBzVKKLIFZoIJmwR1qBRdNLEC2BJQpV9LCAmRL/gBxAtRwqlqAXqzcgRrOQE0LQIBxtNIiBQAEGAA7xCa2yF9zEgAAAABJRU5ErkJgggo=) no-repeat right center;
352}
353li.cardListItem a {
354 position: relative;
355 top: -22px;
356 left: 40px;
357 display: block;
358 white-space: nowrap;
359 overflow: hidden;
360}
361body[orientation="portrait"] li.cardListItem a {
362 max-width: 250px;
363}
364body[orientation="landscape"] li.cardListItem a {
365 max-width: 400px;
366}
367li.cardListItem img {
368 height: 20px;
369 width: 20px;
370 padding: 12px 10px 0px 10px;
371}
372li.cardListItem a {
373 text-decoration: none;
374 color: black;
375 font-weight: bold;
376 font-size: 14pt;
377 vertical-align: 3px;
378}
379div.cardDetailPanel {
380 position: absolute;
381 top: 45px;
382 min-height: 372px;
383 box-sizing: border-box;
384 -moz-box-sizing: border-box;
385 -webkit-box-sizing: border-box;
386 padding: 10px;
387 /* background: #c8c8c8 url(../images/old/iPhone/pinstripes.png);*/
388
389 background: #c8c8c8 url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAIAAACdaSOZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpiPHrmCgMC/GNjYwNSAAEGADdNA3dnzPlQAAAAAElFTkSuQmCCCg==);
390}
391/*div.cardDetailPanel > fieldset > div.row > input.directLogin {*/
392div.cardDetailPanel > fieldset > div.row > span.directLogin {
393 width: 100%;
394 box-sizing: border-box;
395 -moz-box-sizing: border-box;
396 -webkit-box-sizing: border-box;
397 margin: 0;
398 border: none;
399 padding: 12px 10px 0 110px;
400 height: 42px;
401 background: none;
402 font-size: 16px;
403 font-weight: normal;
404 padding-left: 40px;
405 color: black;
406 /* background: url(../images/old/iPhone/listArrow.png) no-repeat right center;*/
407
408 background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAUCAYAAAB4d5a9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpi/P//PwOtARMDHcDwsYQFRJSXl8P4dVC6CZvizs5O8i1BsqARid9Ei+BiQ2KDLKumhSU1QNyKxG+hlkXoEQ+yqAPNogpapK5KNIvaKbUIVxKeAsTvkPg5QCxETUukgfgAkqFPgdgBzVKKLIFZoIJmwR1qBRdNLEC2BJQpV9LCAmRL/gBxAtRwqlqAXqzcgRrOQE0LQIBxtNIiBQAEGAA7xCa2yF9zEgAAAABJRU5ErkJgggo=) no-repeat right center;
409}
410/*body[orientation="landscape"] div.cardDetailPanel > fieldset > div.row > input.directLogin { */
411body[orientation="landscape"] div.cardDetailPanel > fieldset > div.row > span.directLogin {
412 padding-left: 50px;
413}
414div.cardDetailPanel h2 {
415 margin: 0 0 8px 14px;
416 font-size: inherit;
417 font-weight: bold;
418 color: #4d4d70;
419 text-shadow: rgba(255, 255, 255, 0.75) 1px 1px 0;
420}
421 /* body[orientation="portrait"] div.cardList {*/
422body[orientation="portrait"] > * {
423 width: 320px;
424}
425/* body[orientation="landscape"] div.cardList { */
426body[orientation="landscape"] > * {
427 width: 480px;
428}
diff --git a/frontend/gamma/html/index_template.html b/frontend/gamma/html/index_template.html
index 8cf838c..a7067da 100644
--- a/frontend/gamma/html/index_template.html
+++ b/frontend/gamma/html/index_template.html
@@ -1,62 +1,67 @@
1<html> 1<html>
2<head> 2<head>
3 <title>@page.title@</title> 3 <title>@page.title@</title>
4 <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 4 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
5<!-- 5<!--
6@copyright@ 6@copyright@
7--> 7-->
8 8
9@css@ 9@css@
10 10
11 <link rel="shortcut icon" href="./clipperz.ico" /> 11 <link rel="shortcut icon" href="./clipperz.ico" />
12 12
13 <meta name="description" content="Login to your web accounts with just one click. Never type a password again! Use multiple complex passwords and forget them. A password manager that enhances your online security." /> 13 <meta name="description" content="Login to your web accounts with just one click. Never type a password again! Use multiple complex passwords and forget them. A password manager that enhances your online security." />
14 <meta name="keywords" content="password manager,gestor de contraseñas,gerenciador de senhas,Kennwortmanager,passwords,security,privacy,cryptography" /> 14 <meta name="keywords" content="password manager,gestor de contraseñas,gerenciador de senhas,Kennwortmanager,passwords,security,privacy,cryptography" />
15<script> 15<script>
16 Clipperz_IEisBroken = false; 16 Clipperz_IEisBroken = false;
17 Clipperz_normalizedNewLine = '\n'; 17 Clipperz_normalizedNewLine = '\n';
18 Clipperz_dumpUrl = "/dump/"; 18 Clipperz_dumpUrl = "/dump/";
19</script> 19</script>
20 20
21<!--[if IE]><script> 21<!--[if IE]><script>
22Clipperz_IEisBroken = true; 22Clipperz_IEisBroken = true;
23Clipperz_normalizedNewLine = '\x0d\x0a'; 23Clipperz_normalizedNewLine = '\x0d\x0a';
24</script><![endif]--> 24</script><![endif]-->
25 25
26@js_DEBUG@ 26@js_LINKED@
27 27
28</head> 28</head>
29<body> 29<body>
30<div id="mainDiv"> 30<div id="mainDiv">
31 <div id="loading"> 31 <div id="loading">
32 <a href="http://www.clipperz.com" target="_blank"><div id="logo"></div></a> 32 <a href="http://www.clipperz.com" target="_blank"><div id="logo"></div></a>
33 <h5 class="clipperzPayoff">keep it to yourself!</h5> 33 <h5 class="clipperzPayoff">keep it to yourself!</h5>
34 <h2>loading ...</h2> 34 <h2>loading ...</h2>
35 </div> 35 </div>
36 36
37@js_INSTALL@ 37@js_EMBEDDED@
38 38
39</div> 39</div>
40<div id="applicationVersionType" class="@application.version.type@"></div> 40<div id="applicationVersionType" class="@application.version.type@"></div>
41 41
42<script>
43 Clipperz.PM.Proxy.defaultProxy = new Clipperz.PM.Proxy.JSON({'url':'@request.path@', 'shouldPayTolls':@should.pay.toll@});
44 /*offline_data_placeholder*/
45</script>
46
42<!-- --> 47<!-- -->
43<div id="javaScriptAlert"> 48<div id="javaScriptAlert">
44 <div class="mask"></div> 49 <div class="mask"></div>
45 <div class="message"> 50 <div class="message">
46 <div class="header"></div> 51 <div class="header"></div>
47 <div class="body"> 52 <div class="body">
48 <div class="alertLogo"></div> 53 <div class="alertLogo"></div>
49 <div class="alert"> 54 <div class="alert">
50 <h1>Attention!</h1> 55 <h1>Attention!</h1>
51 <p>If you can read this message, the chances are that your browser does not properly support JavaScript? or you have disabled this functionality yourself.</p> 56 <p>If you can read this message, the chances are that your browser does not properly support JavaScript? or you have disabled this functionality yourself.</p>
52 <h3>Javascript is required to access Clipperz.</h3> 57 <h3>Javascript is required to access Clipperz.</h3>
53 <h5>Please enable scripting or upgrade your browser.</h5> 58 <h5>Please enable scripting or upgrade your browser.</h5>
54 </div> 59 </div>
55 </div> 60 </div>
56 <div class="footer"></div> 61 <div class="footer"></div>
57 </div> 62 </div>
58</div> 63</div>
59<!-- --> 64<!-- -->
60 65
61</body> 66</body>
62</html> 67</html>
diff --git a/frontend/gamma/js/Clipperz/Async.js b/frontend/gamma/js/Clipperz/Async.js
index 7c9d783..97d8ecf 100644
--- a/frontend/gamma/js/Clipperz/Async.js
+++ b/frontend/gamma/js/Clipperz/Async.js
@@ -1,704 +1,711 @@
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//Clipperz.Async = MochiKit.Async; 26//Clipperz.Async = MochiKit.Async;
27 27
28 28
29if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 29if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
30if (typeof(Clipperz.Async) == 'undefined') { Clipperz.Async = {}; } 30if (typeof(Clipperz.Async) == 'undefined') { Clipperz.Async = {}; }
31 31
32Clipperz.Async.VERSION = "0.1"; 32Clipperz.Async.VERSION = "0.1";
33Clipperz.Async.NAME = "Clipperz.Async"; 33Clipperz.Async.NAME = "Clipperz.Async";
34 34
35Clipperz.Async.Deferred = function(aName, args) { 35Clipperz.Async.Deferred = function(aName, args) {
36 args = args || {}; 36 args = args || {};
37 37
38 Clipperz.Async.Deferred.superclass.constructor.call(this, args.canceller); 38 Clipperz.Async.Deferred.superclass.constructor.call(this, args.canceller);
39 39
40 this._args = args; 40 this._args = args;
41 this._name = aName || "Anonymous deferred"; 41 this._name = aName || "Anonymous deferred";
42 this._count = 0; 42 this._count = 0;
43 this._shouldTrace = ((CLIPPERZ_DEFERRED_TRACING_ENABLED === true) || (args.trace === true)); 43 this._shouldTrace = ((CLIPPERZ_DEFERRED_TRACING_ENABLED === true) || (args.trace === true));
44 this._vars = null; 44 this._vars = null;
45 45
46 return this; 46 return this;
47} 47}
48 48
49//============================================================================= 49//=============================================================================
50 50
51Clipperz.Base.extend(Clipperz.Async.Deferred, MochiKit.Async.Deferred, { 51Clipperz.Base.extend(Clipperz.Async.Deferred, MochiKit.Async.Deferred, {
52 52
53 'name': function () { 53 'name': function () {
54 return this._name; 54 return this._name;
55 }, 55 },
56 56
57 'args': function () { 57 'args': function () {
58 return this._args; 58 return this._args;
59 }, 59 },
60 60
61 //----------------------------------------------------------------------------- 61 //-----------------------------------------------------------------------------
62 62
63 'callback': function (aValue) { 63 'callback': function (aValue) {
64 if (this._shouldTrace) { 64 if (this._shouldTrace) {
65 Clipperz.log("CALLBACK " + this._name, aValue); 65 //Clipperz.log("CALLBACK " + this._name, aValue);
66 console.log("CALLBACK " + this._name, aValue);
66 } 67 }
67 68
68 if (this.chained == false) { 69 if (this.chained == false) {
69 var message; 70 var message;
70 71
71 message = "ERROR [" + this._name + "]"; 72 message = "ERROR [" + this._name + "]";
72 this.addErrback(function(aResult) { 73 this.addErrback(function(aResult) {
73 if (! (aResult instanceof MochiKit.Async.CancelledError)) { 74 if (! (aResult instanceof MochiKit.Async.CancelledError)) {
74 Clipperz.log(message, aResult); 75 Clipperz.log(message, aResult);
75 } 76 }
76 return aResult; 77 return aResult;
77 }); 78 });
78 79
79 if (this._shouldTrace) { 80 if (this._shouldTrace) {
80 var resultMessage; 81 var resultMessage;
81 82
82 resultMessage = "RESULT " + this._name + " <=="; 83 resultMessage = "RESULT " + this._name + " <==";
83 // this.addCallback(function(aResult) { 84 // this.addCallback(function(aResult) {
84 Clipperz.Async.Deferred.superclass.addCallback.call(this, function(aResult) { 85 Clipperz.Async.Deferred.superclass.addCallback.call(this, function(aResult) {
85 Clipperz.log(resultMessage, aResult); 86 //Clipperz.log(resultMessage, aResult);
87 console.log(resultMessage, aResult);
86 88
87 return aResult; 89 return aResult;
88 }); 90 });
89 } 91 }
90 } 92 }
91 93
92 if (CLIPPERZ_DEFERRED_CALL_LOGGING_ENABLED === true) { 94 if (CLIPPERZ_DEFERRED_CALL_LOGGING_ENABLED === true) {
93 Clipperz.log("callback " + this._name, this); 95 Clipperz.log("callback " + this._name, this);
94 } 96 }
95 97
96 return Clipperz.Async.Deferred.superclass.callback.apply(this, arguments); 98 return Clipperz.Async.Deferred.superclass.callback.apply(this, arguments);
97 }, 99 },
98 100
99 //----------------------------------------------------------------------------- 101 //-----------------------------------------------------------------------------
100 102
101 'addCallback': function () { 103 'addCallback': function () {
102 var message; 104 var message;
103 105
104 if (this._shouldTrace) { 106 if (this._shouldTrace) {
105 this._count ++; 107 this._count ++;
106 message = "[" + this._count + "] " + this._name + " "; 108 message = "[" + this._count + "] " + this._name + " ";
107 // this.addBoth(function(aResult) {Clipperz.log(message + "-->", aResult); return aResult;}); 109 // this.addBoth(function(aResult) {Clipperz.log(message + "-->", aResult); return aResult;});
108 this.addCallbacks( 110 this.addCallbacks(
109 function(aResult) {Clipperz.log("-OK- " + message + "-->"/*, aResult*/); return aResult;}, 111 //function(aResult) {Clipperz.log("-OK- " + message + "-->"/*, aResult*/); return aResult;},
110 function(aResult) {Clipperz.log("FAIL " + message + "-->"/*, aResult*/); return aResult;} 112 function(aResult) {console.log("-OK- " + message + "-->"/*, aResult*/); return aResult;},
113 //function(aResult) {Clipperz.log("FAIL " + message + "-->"/*, aResult*/); return aResult;}
114 function(aResult) {console.log("FAIL " + message + "-->"/*, aResult*/); return aResult;}
111 ); 115 );
112 } 116 }
113 117
114 Clipperz.Async.Deferred.superclass.addCallback.apply(this, arguments); 118 Clipperz.Async.Deferred.superclass.addCallback.apply(this, arguments);
115 119
116 if (this._shouldTrace) { 120 if (this._shouldTrace) {
117 // this.addBoth(function(aResult) {Clipperz.log(message + "<--", aResult); return aResult;}); 121 // this.addBoth(function(aResult) {Clipperz.log(message + "<--", aResult); return aResult;});
118 this.addCallbacks( 122 this.addCallbacks(
119 function(aResult) {Clipperz.log("-OK- " + message + "<--", aResult); return aResult;}, 123 //function(aResult) {Clipperz.log("-OK- " + message + "<--", aResult); return aResult;},
120 function(aResult) {Clipperz.log("FAIL " + message + "<--", aResult); return aResult;} 124 function(aResult) {console.log("-OK- " + message + "<--", aResult); return aResult;},
125 //function(aResult) {Clipperz.log("FAIL " + message + "<--", aResult); return aResult;}
126 function(aResult) {console.log("FAIL " + message + "<--", aResult); return aResult;}
121 ); 127 );
122 } 128 }
123 }, 129 },
124 130
125 //============================================================================= 131 //=============================================================================
126 132
127 'addCallbackPass': function() { 133 'addCallbackPass': function() {
128 var passFunction; 134 var passFunction;
129 135
130 passFunction = MochiKit.Base.partial.apply(null, arguments); 136 passFunction = MochiKit.Base.partial.apply(null, arguments);
131 137
132 this.addCallback(function() { 138 this.addCallback(function() {
133 var result; 139 var result;
134 140
135 result = arguments[arguments.length -1]; 141 result = arguments[arguments.length -1];
136 passFunction(); 142 passFunction();
137 143
138 return result; 144 return result;
139 }); 145 });
140 }, 146 },
141 147
142 //----------------------------------------------------------------------------- 148 //-----------------------------------------------------------------------------
143 149
144 'addErrbackPass': function() { 150 'addErrbackPass': function() {
145 var passFunction; 151 var passFunction;
146 152
147 passFunction = MochiKit.Base.partial.apply(null, arguments); 153 passFunction = MochiKit.Base.partial.apply(null, arguments);
148 154
149 this.addErrback(function() { 155 this.addErrback(function() {
150 var result; 156 var result;
151 157
152 result = arguments[arguments.length -1]; 158 result = arguments[arguments.length -1];
153 passFunction(); 159 passFunction();
154 160
155 return result; 161 return result;
156 }); 162 });
157 }, 163 },
158 164
159 //----------------------------------------------------------------------------- 165 //-----------------------------------------------------------------------------
160 166
161 'addBothPass': function() { 167 'addBothPass': function() {
162 var passFunction; 168 var passFunction;
163 169
164 passFunction = MochiKit.Base.partial.apply(null, arguments); 170 passFunction = MochiKit.Base.partial.apply(null, arguments);
165 171
166 this.addBoth(function() { 172 this.addBoth(function() {
167 var result; 173 var result;
168 174
169 result = arguments[arguments.length -1]; 175 result = arguments[arguments.length -1];
170 passFunction(); 176 passFunction();
171 177
172 return result; 178 return result;
173 }); 179 });
174 }, 180 },
175 181
176 //----------------------------------------------------------------------------- 182 //-----------------------------------------------------------------------------
177 183
178 'addIf': function (aThenBlock, anElseBlock) { 184 'addIf': function (aThenBlock, anElseBlock) {
179 this.addCallback(MochiKit.Base.bind(function (aValue) { 185 this.addCallback(MochiKit.Base.bind(function (aValue) {
180 var deferredResult; 186 var deferredResult;
181 187
182 if (!MochiKit.Base.isUndefinedOrNull(aValue) && aValue) { 188 if (!MochiKit.Base.isUndefinedOrNull(aValue) && aValue) {
183 deferredResult = Clipperz.Async.callbacks(this._name + " <then>", aThenBlock, null, aValue); 189 deferredResult = Clipperz.Async.callbacks(this._name + " <then>", aThenBlock, null, aValue);
184 } else { 190 } else {
185 deferredResult = Clipperz.Async.callbacks(this._name + " <else>", anElseBlock, null, aValue); 191 deferredResult = Clipperz.Async.callbacks(this._name + " <else>", anElseBlock, null, aValue);
186 } 192 }
187 193
188 return deferredResult; 194 return deferredResult;
189 })) 195 }))
190 }, 196 },
191 197
192 //----------------------------------------------------------------------------- 198 //-----------------------------------------------------------------------------
193 199
194 'addMethod': function () { 200 'addMethod': function () {
195 this.addCallback(MochiKit.Base.method.apply(this, arguments)); 201 this.addCallback(MochiKit.Base.method.apply(this, arguments));
196 }, 202 },
197 203
198 //----------------------------------------------------------------------------- 204 //-----------------------------------------------------------------------------
199 205
200 'addMethodcaller': function () { 206 'addMethodcaller': function () {
201 this.addCallback(MochiKit.Base.methodcaller.apply(this, arguments)); 207 this.addCallback(MochiKit.Base.methodcaller.apply(this, arguments));
202 }, 208 },
203 209
204 //============================================================================= 210 //=============================================================================
205 211
206 'addLog': function (aLog) { 212 'addLog': function (aLog) {
207 if (CLIPPERZ_DEFERRED_LOGGING_ENABLED) { 213 if (CLIPPERZ_DEFERRED_LOGGING_ENABLED) {
208 this.addBothPass(function(res) {Clipperz.log(aLog + " ", res);}); 214 this.addBothPass(function(res) {Clipperz.log(aLog + " ", res);});
209 // this.addBothPass(function(res) {console.log(aLog + " ", res);}); 215 // this.addBothPass(function(res) {console.log(aLog + " ", res);});
210 } 216 }
211 }, 217 },
212 218
213 //============================================================================= 219 //=============================================================================
214 220
215 'acquireLock': function (aLock) { 221 'acquireLock': function (aLock) {
216 // this.addCallback(function (aResult) { 222 // this.addCallback(function (aResult) {
217 // return Clipperz.Async.callbacks("Clipperz.Async.acquireLock", [ 223 // return Clipperz.Async.callbacks("Clipperz.Async.acquireLock", [
218 // MochiKit.Base.method(aLock, 'acquire'), 224 // MochiKit.Base.method(aLock, 'acquire'),
219 // MochiKit.Base.partial(MochiKit.Async.succeed, aResult) 225 // MochiKit.Base.partial(MochiKit.Async.succeed, aResult)
220 // ], {trace:false}); 226 // ], {trace:false});
221 // }); 227 // });
222 228
223 this.addCallback(MochiKit.Base.method(aLock, 'acquire')); 229 this.addCallback(MochiKit.Base.method(aLock, 'acquire'));
224 }, 230 },
225 231
226 'releaseLock': function (aLock) { 232 'releaseLock': function (aLock) {
227 // this.addCallback(function (aResult) { 233 // this.addCallback(function (aResult) {
228 // return Clipperz.Async.callbacks("Clipperz.Async.release <ok>", [ 234 // return Clipperz.Async.callbacks("Clipperz.Async.release <ok>", [
229 // MochiKit.Base.method(aLock, 'release'), 235 // MochiKit.Base.method(aLock, 'release'),
230 // MochiKit.Base.partial(MochiKit.Async.succeed, aResult) 236 // MochiKit.Base.partial(MochiKit.Async.succeed, aResult)
231 // ], {trace:false}); 237 // ], {trace:false});
232 // }); 238 // });
233 // this.addErrback(function (aResult) { 239 // this.addErrback(function (aResult) {
234///console.log("releaseLock.addErrback:", aResult); 240///console.log("releaseLock.addErrback:", aResult);
235 // return Clipperz.Async.callbacks("Clipperz.Async.release <fail>", [ 241 // return Clipperz.Async.callbacks("Clipperz.Async.release <fail>", [
236 // MochiKit.Base.method(aLock, 'release'), 242 // MochiKit.Base.method(aLock, 'release'),
237 // MochiKit.Base.partial(MochiKit.Async.fail, aResult) 243 // MochiKit.Base.partial(MochiKit.Async.fail, aResult)
238 // ], {trace:false}); 244 // ], {trace:false});
239 // }); 245 // });
240 246
241 // this.addBothPass(MochiKit.Base.method(aLock, 'release')); 247 // this.addBothPass(MochiKit.Base.method(aLock, 'release'));
242 this.addCallbackPass(MochiKit.Base.method(aLock, 'release')); 248 this.addCallbackPass(MochiKit.Base.method(aLock, 'release'));
243 this.addErrback(function (anError) { 249 this.addErrback(function (anError) {
244 aLock.release(); 250 aLock.release();
245 251
246 return anError; 252 return anError;
247 }); 253 });
248 }, 254 },
249 255
250 //============================================================================= 256 //=============================================================================
251 257
252 'collectResults': function (someRequests) { 258 'collectResults': function (someRequests) {
253 this.addCallback(Clipperz.Async.collectResults(this._name + " <collect results>", someRequests, this._args)); 259 this.addCallback(Clipperz.Async.collectResults(this._name + " <collect results>", someRequests, this._args));
254 }, 260 },
255 261
256 'addCallbackList': function (aRequestList) { 262 'addCallbackList': function (aRequestList) {
257 this.addCallback(Clipperz.Async.callbacks, this._name + " <callback list>", aRequestList, this._args); 263 this.addCallback(Clipperz.Async.callbacks, this._name + " <callback list>", aRequestList, this._args);
258 }, 264 },
259 265
260 //============================================================================= 266 //=============================================================================
261 267
262 'vars': function () { 268 'vars': function () {
263 if (this._vars == null) { 269 if (this._vars == null) {
264 this._vars = {} 270 this._vars = {}
265 } 271 }
266 272
267 return this._vars; 273 return this._vars;
268 }, 274 },
269 275
270 'setValue': function (aKey) { 276 'setValue': function (aKey) {
271 this.addCallback(MochiKit.Base.bind(function (aValue) { 277 this.addCallback(MochiKit.Base.bind(function (aValue) {
272 this.vars()[aKey] = aValue; 278 this.vars()[aKey] = aValue;
273 return aValue; 279 return aValue;
274 }, this)); 280 }, this));
275 }, 281 },
276 282
277 'getValue': function (aKey) { 283 'getValue': function (aKey) {
278 this.addCallback(MochiKit.Base.bind(function () { 284 this.addCallback(MochiKit.Base.bind(function () {
279 return this.vars()[aKey]; 285 return this.vars()[aKey];
280 }, this)); 286 }, this));
281 }, 287 },
282 288
283 //============================================================================= 289 //=============================================================================
284 290
285 __syntaxFix__: "syntax fix" 291 __syntaxFix__: "syntax fix"
286}); 292});
287 293
288//############################################################################# 294//#############################################################################
289 295
290Clipperz.Async.DeferredSynchronizer = function(aName, someMethods) { 296Clipperz.Async.DeferredSynchronizer = function(aName, someMethods) {
291 this._name = aName || "Anonymous deferred Synchronizer"; 297 this._name = aName || "Anonymous deferred Synchronizer";
292 this._methods = someMethods; 298 this._methods = someMethods;
293 299
294 this._numberOfMethodsDone= 0; 300 this._numberOfMethodsDone= 0;
295 this._methodResults = []; 301 this._methodResults = [];
296 302
297 this._result = new Clipperz.Async.Deferred("Clipperz.Async.DeferredSynchronizer # " + this.name(), {trace:false}); 303 this._result = new Clipperz.Async.Deferred("Clipperz.Async.DeferredSynchronizer # " + this.name(), {trace:false});
298 this._result.addMethod(this, 'methodResults'); 304 this._result.addMethod(this, 'methodResults');
299 this._result.addCallback(function(someResults) { 305 this._result.addCallback(function(someResults) {
300 varcancels; 306 varcancels;
301 var errors; 307 var errors;
302 var result; 308 var result;
303 309
304 cancels = MochiKit.Base.filter(function(aResult) { return (aResult instanceof MochiKit.Async.CancelledError)}, someResults); 310 cancels = MochiKit.Base.filter(function(aResult) { return (aResult instanceof MochiKit.Async.CancelledError)}, someResults);
305 311
306 if (cancels.length == 0) { 312 if (cancels.length == 0) {
307 errors = MochiKit.Base.filter(function(aResult) { return (aResult instanceof Error)}, someResults); 313 errors = MochiKit.Base.filter(function(aResult) { return (aResult instanceof Error)}, someResults);
308 314
309 if (errors.length == 0) { 315 if (errors.length == 0) {
310 // result = MochiKit.Async.succeed(someResults); 316 // result = MochiKit.Async.succeed(someResults);
311 result = someResults; 317 result = someResults;
312 } else { 318 } else {
313 result = MochiKit.Async.fail(someResults); 319 result = MochiKit.Async.fail(someResults);
314 } 320 }
315 } else { 321 } else {
316 result = MochiKit.Async.fail(cancels[0]); 322 result = MochiKit.Async.fail(cancels[0]);
317 } 323 }
318 324
319 return result; 325 return result;
320 }/*, this._methodResults */); 326 }/*, this._methodResults */);
321 327
322 return this; 328 return this;
323} 329}
324 330
325MochiKit.Base.update(Clipperz.Async.DeferredSynchronizer.prototype, { 331MochiKit.Base.update(Clipperz.Async.DeferredSynchronizer.prototype, {
326 332
327 //----------------------------------------------------------------------------- 333 //-----------------------------------------------------------------------------
328 334
329 'name': function() { 335 'name': function() {
330 return this._name; 336 return this._name;
331 }, 337 },
332 338
333 //----------------------------------------------------------------------------- 339 //-----------------------------------------------------------------------------
334 340
335 'methods': function() { 341 'methods': function() {
336 return this._methods; 342 return this._methods;
337 }, 343 },
338 344
339 'methodResults': function() { 345 'methodResults': function() {
340 return this._methodResults; 346 return this._methodResults;
341 }, 347 },
342 348
343 //----------------------------------------------------------------------------- 349 //-----------------------------------------------------------------------------
344 350
345 'result': function() { 351 'result': function() {
346 return this._result; 352 return this._result;
347 }, 353 },
348 354
349 //----------------------------------------------------------------------------- 355 //-----------------------------------------------------------------------------
350 356
351 'numberOfMethodsDone':function() { 357 'numberOfMethodsDone':function() {
352 return this._numberOfMethodsDone; 358 return this._numberOfMethodsDone;
353 }, 359 },
354 360
355 'incrementNumberOfMethodsDone': function() { 361 'incrementNumberOfMethodsDone': function() {
356 this._numberOfMethodsDone ++; 362 this._numberOfMethodsDone ++;
357 }, 363 },
358 364
359 //----------------------------------------------------------------------------- 365 //-----------------------------------------------------------------------------
360 366
361 'run': function(args, aValue) { 367 'run': function(args, aValue) {
362 var deferredResults; 368 var deferredResults;
363 var i, c; 369 var i, c;
364 370
365 deferredResults = []; 371 deferredResults = [];
366 args = args || {}; 372 args = args || {};
367 373
368 c = this.methods().length; 374 c = this.methods().length;
369 for (i=0; i<c; i++) { 375 for (i=0; i<c; i++) {
370 var deferredResult; 376 var deferredResult;
371 varmethodCalls; 377 varmethodCalls;
372 var ii, cc; 378 var ii, cc;
373 379
374//console.log("TYPEOF", typeof(this.methods()[i])); 380//console.log("TYPEOF", typeof(this.methods()[i]));
375 if (typeof(this.methods()[i]) == 'function') { 381 if (typeof(this.methods()[i]) == 'function') {
376 methodCalls = [ this.methods()[i] ]; 382 methodCalls = [ this.methods()[i] ];
377 } else { 383 } else {
378 methodCalls = this.methods()[i]; 384 methodCalls = this.methods()[i];
379 } 385 }
380 386
381 cc = methodCalls.length; 387 cc = methodCalls.length;
382 deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.DeferredSynchronizer.run => " + this.name() + "[" + i + "]", args); 388 deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.DeferredSynchronizer.run => " + this.name() + "[" + i + "]", args);
383 for (ii=0; ii<cc; ii++) { 389 for (ii=0; ii<cc; ii++) {
384 deferredResult.addCallback(methodCalls[ii]); 390 deferredResult.addCallback(methodCalls[ii]);
385 } 391 }
386 deferredResult.addBoth(MochiKit.Base.method(this, 'handleMethodCallDone', i)); 392 deferredResult.addBoth(MochiKit.Base.method(this, 'handleMethodCallDone', i));
387 393
388 deferredResults.push(deferredResult); 394 deferredResults.push(deferredResult);
389 } 395 }
390 396
391 for (i=0; i<c; i++) { 397 for (i=0; i<c; i++) {
392 deferredResults[i].callback(aValue); 398 deferredResults[i].callback(aValue);
393 } 399 }
394 400
395 return this.result(); 401 return this.result();
396 }, 402 },
397 403
398 //----------------------------------------------------------------------------- 404 //-----------------------------------------------------------------------------
399 405
400 'handleMethodCallDone': function(anIndexValue, aResult) { 406 'handleMethodCallDone': function(anIndexValue, aResult) {
401 this.incrementNumberOfMethodsDone(); 407 this.incrementNumberOfMethodsDone();
402 this.methodResults()[anIndexValue] = aResult; 408 this.methodResults()[anIndexValue] = aResult;
403 409
404 if (this.numberOfMethodsDone() < this.methods().length) { 410 if (this.numberOfMethodsDone() < this.methods().length) {
405 //nothing to do here other than possibly log something 411 //nothing to do here other than possibly log something
406 } else if (this.numberOfMethodsDone() == this.methods().length) { 412 } else if (this.numberOfMethodsDone() == this.methods().length) {
407 this.result().callback(); 413 this.result().callback();
408 } else if (this.numberOfMethodsDone() > this.methods().length) { 414 } else if (this.numberOfMethodsDone() > this.methods().length) {
415 alert("Clipperz.Async.Deferred.handleMethodCallDone -> WTF!");
409 //WTF!!! :( 416 //WTF!!! :(
410 } 417 }
411 418
412 }, 419 },
413 420
414 //----------------------------------------------------------------------------- 421 //-----------------------------------------------------------------------------
415 422
416 __syntaxFix__: "syntax fix" 423 __syntaxFix__: "syntax fix"
417}); 424});
418 425
419//############################################################################# 426//#############################################################################
420 427
421MochiKit.Base.update(Clipperz.Async, { 428MochiKit.Base.update(Clipperz.Async, {
422 429
423 'callbacks': function (aName, someFunctions, someArguments, aCallbackValue) { 430 'callbacks': function (aName, someFunctions, someArguments, aCallbackValue) {
424 var deferredResult; 431 var deferredResult;
425 var i, c; 432 var i, c;
426 433
427 deferredResult = new Clipperz.Async.Deferred(aName, someArguments); 434 deferredResult = new Clipperz.Async.Deferred(aName, someArguments);
428 c = someFunctions.length; 435 c = someFunctions.length;
429 for (i=0; i<c; i++) { 436 for (i=0; i<c; i++) {
430 deferredResult.addCallback(someFunctions[i]); 437 deferredResult.addCallback(someFunctions[i]);
431 } 438 }
432 deferredResult.callback(aCallbackValue); 439 deferredResult.callback(aCallbackValue);
433 440
434 return deferredResult; 441 return deferredResult;
435 }, 442 },
436 443
437 //------------------------------------------------------------------------- 444 //-------------------------------------------------------------------------
438 445
439 'forkAndJoin': function (aName, someMethods, args) { 446 'forkAndJoin': function (aName, someMethods, args) {
440 return MochiKit.Base.partial(function (aName, someMethods, args, aValue) { 447 return MochiKit.Base.partial(function (aName, someMethods, args, aValue) {
441 var synchronizer; 448 var synchronizer;
442 varresult; 449 varresult;
443 450
444 args = args || {}; 451 args = args || {};
445 synchronizer = new Clipperz.Async.DeferredSynchronizer(aName, someMethods); 452 synchronizer = new Clipperz.Async.DeferredSynchronizer(aName, someMethods);
446 result = synchronizer.run(args, aValue); 453 result = synchronizer.run(args, aValue);
447 454
448 return result; 455 return result;
449 }, aName, someMethods, args); 456 }, aName, someMethods, args);
450 }, 457 },
451 458
452 //------------------------------------------------------------------------- 459 //-------------------------------------------------------------------------
453 460
454 'collectResults': function(aName, someRequests, args) { 461 'collectResults': function(aName, someRequests, args) {
455 return MochiKit.Base.partial(function(aName, someRequests, args, aValue) { 462 return MochiKit.Base.partial(function(aName, someRequests, args, aValue) {
456 var deferredResult; 463 var deferredResult;
457 var requestKeys; 464 var requestKeys;
458 var methods; 465 var methods;
459 466
460 requestKeys = MochiKit.Base.keys(someRequests); 467 requestKeys = MochiKit.Base.keys(someRequests);
461 methods = MochiKit.Base.values(someRequests); 468 methods = MochiKit.Base.values(someRequests);
462 469
463 deferredResult = new Clipperz.Async.Deferred(aName, args); 470 deferredResult = new Clipperz.Async.Deferred(aName, args);
464 deferredResult.addCallback(Clipperz.Async.forkAndJoin(aName + " [inner forkAndJoin]", methods, args)); 471 deferredResult.addCallback(Clipperz.Async.forkAndJoin(aName + " [inner forkAndJoin]", methods, args));
465 deferredResult.addBoth(function(someResults) { 472 deferredResult.addBoth(function(someResults) {
466 var returnFunction; 473 var returnFunction;
467 var results; 474 var results;
468 var i,c; 475 var i,c;
469 var result; 476 var result;
470 477
471 if (someResults instanceof MochiKit.Async.CancelledError) { 478 if (someResults instanceof MochiKit.Async.CancelledError) {
472 returnFunction = MochiKit.Async.fail; 479 returnFunction = MochiKit.Async.fail;
473 result = someResults; 480 result = someResults;
474 } else { 481 } else {
475 if (someResults instanceof Error) { 482 if (someResults instanceof Error) {
476 returnFunction = MochiKit.Async.fail; 483 returnFunction = MochiKit.Async.fail;
477 results = someResults['message']; 484 results = someResults['message'];
478 } else { 485 } else {
479 returnFunction = MochiKit.Async.succeed; 486 returnFunction = MochiKit.Async.succeed;
480 results = someResults; 487 results = someResults;
481 } 488 }
482 489
483 result = {}; 490 result = {};
484 491
485 c = requestKeys.length; 492 c = requestKeys.length;
486 for (i=0; i<c; i++) { 493 for (i=0; i<c; i++) {
487 result[requestKeys[i]] = results[i]; 494 result[requestKeys[i]] = results[i];
488 } 495 }
489 } 496 }
490 497
491 return returnFunction.call(null, result); 498 return returnFunction.call(null, result);
492 }); 499 });
493 deferredResult.callback(aValue); 500 deferredResult.callback(aValue);
494 501
495 return deferredResult; 502 return deferredResult;
496 }, aName, someRequests, args); 503 }, aName, someRequests, args);
497 }, 504 },
498 505
499 //------------------------------------------------------------------------- 506 //-------------------------------------------------------------------------
500 507
501 'collectAll': function (someDeferredObjects) { 508 'collectAll': function (someDeferredObjects) {
502 var deferredResult; 509 var deferredResult;
503 510
504 deferredResult = new MochiKit.Async.DeferredList(someDeferredObjects, false, false, false); 511 deferredResult = new MochiKit.Async.DeferredList(someDeferredObjects, false, false, false);
505 deferredResult.addCallback(function (aResultList) { 512 deferredResult.addCallback(function (aResultList) {
506 return MochiKit.Base.map(function (aResult) { 513 return MochiKit.Base.map(function (aResult) {
507 if (aResult[0]) { 514 if (aResult[0]) {
508 return aResult[1]; 515 return aResult[1];
509 } else { 516 } else {
510 throw aResult[1]; 517 throw aResult[1];
511 } 518 }
512 }, aResultList); 519 }, aResultList);
513 }); 520 });
514 521
515 return deferredResult; 522 return deferredResult;
516 }, 523 },
517 524
518 //------------------------------------------------------------------------- 525 //-------------------------------------------------------------------------
519 526
520 'setItem': function (anObject, aKey, aValue) { 527 'setItem': function (anObject, aKey, aValue) {
521 anObject[aKey] = aValue; 528 anObject[aKey] = aValue;
522 529
523 return anObject; 530 return anObject;
524 }, 531 },
525 532
526 'setItemOnObject': function (aKey, aValue, anObject) { 533 'setItemOnObject': function (aKey, aValue, anObject) {
527 anObject[aKey] = aValue; 534 anObject[aKey] = aValue;
528 535
529 return anObject; 536 return anObject;
530 }, 537 },
531 538
532 'setDeferredItemOnObject': function (aKey, aDeferredFunction, anObject) { 539 'setDeferredItemOnObject': function (aKey, aDeferredFunction, anObject) {
533 return Clipperz.Async.callbacks("Clipperz.Async.setDeferredItemOnObject", [ 540 return Clipperz.Async.callbacks("Clipperz.Async.setDeferredItemOnObject", [
534 aDeferredFunction, 541 aDeferredFunction,
535 MochiKit.Base.partial(Clipperz.Async.setItem, anObject, aKey) 542 MochiKit.Base.partial(Clipperz.Async.setItem, anObject, aKey)
536 ], {trace:false}, anObject); 543 ], {trace:false}, anObject);
537 }, 544 },
538 545
539 //------------------------------------------------------------------------- 546 //-------------------------------------------------------------------------
540 547
541 'deferredIf': function (aName, aThenBlock, anElseBlock) { 548 'deferredIf': function (aName, aThenBlock, anElseBlock) {
542 return function (aValue) { 549 return function (aValue) {
543 var deferredResult; 550 var deferredResult;
544 551
545 if (!MochiKit.Base.isUndefinedOrNull(aValue) && aValue) { 552 if (!MochiKit.Base.isUndefinedOrNull(aValue) && aValue) {
546 deferredResult = Clipperz.Async.callbacks(aName + " <then>", aThenBlock, null, aValue); 553 deferredResult = Clipperz.Async.callbacks(aName + " <then>", aThenBlock, null, aValue);
547 } else { 554 } else {
548 deferredResult = Clipperz.Async.callbacks(aName + " <else>", anElseBlock, null, aValue); 555 deferredResult = Clipperz.Async.callbacks(aName + " <else>", anElseBlock, null, aValue);
549 } 556 }
550 557
551 return deferredResult; 558 return deferredResult;
552 } 559 }
553 }, 560 },
554 561
555 //------------------------------------------------------------------------- 562 //-------------------------------------------------------------------------
556 563
557 'log': function(aMessage, aResult) { 564 'log': function(aMessage, aResult) {
558 if (CLIPPERZ_DEFERRED_LOGGING_ENABLED) { 565 if (CLIPPERZ_DEFERRED_LOGGING_ENABLED) {
559 Clipperz.log(aMessage + " ", aResult); 566 Clipperz.log(aMessage + " ", aResult);
560 } 567 }
561 568
562 return aResult; 569 return aResult;
563 }, 570 },
564 571
565 //========================================================================= 572 //=========================================================================
566 573
567 'deferredCompare': function (aComparator, aDeferred, bDeferred) { 574 'deferredCompare': function (aComparator, aDeferred, bDeferred) {
568 var deferredResult; 575 var deferredResult;
569 576
570 deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.deferredCompare", {trace:false}); 577 deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.deferredCompare", {trace:false});
571 deferredResult.addCallback(Clipperz.Async.collectAll, [aDeferred, bDeferred]); 578 deferredResult.addCallback(Clipperz.Async.collectAll, [aDeferred, bDeferred]);
572 deferredResult.addCallback(function (someResults) { 579 deferredResult.addCallback(function (someResults) {
573 var result; 580 var result;
574 581
575 if (aComparator(someResults[0], someResults[1]) > 0) { 582 if (aComparator(someResults[0], someResults[1]) > 0) {
576 result = MochiKit.Async.succeed(); 583 result = MochiKit.Async.succeed();
577 } else { 584 } else {
578 result = MochiKit.Async.fail(); 585 result = MochiKit.Async.fail();
579 }; 586 };
580 587
581 return result; 588 return result;
582 }); 589 });
583 deferredResult.callback(); 590 deferredResult.callback();
584 591
585 return deferredResult; 592 return deferredResult;
586 }, 593 },
587 594
588 //------------------------------------------------------------------------- 595 //-------------------------------------------------------------------------
589 596
590 'insertIntoSortedArray': function (anObject, aDeferredComparator, aSortedResult) { 597 'insertIntoSortedArray': function (anObject, aDeferredComparator, aSortedResult) {
591 var deferredResult; 598 var deferredResult;
592 var i, c; 599 var i, c;
593 600
594 if (aSortedResult.length == 0) { 601 if (aSortedResult.length == 0) {
595 deferredResult = MochiKit.Async.succeed([anObject]); 602 deferredResult = MochiKit.Async.succeed([anObject]);
596 } else { 603 } else {
597 deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.insertIntoSortedArray", {trace:false}); 604 deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.insertIntoSortedArray", {trace:false});
598 c = aSortedResult.length + 1; 605 c = aSortedResult.length + 1;
599 for (i=0; i<c; i++) { 606 for (i=0; i<c; i++) {
600 deferredResult.addCallback(function (aDeferredComparator, aObject, bObject, aContext) { 607 deferredResult.addCallback(function (aDeferredComparator, aObject, bObject, aContext) {
601 var innerDeferredResult; 608 var innerDeferredResult;
602 609
603 innerDeferredResult = new Clipperz.Async.Deferred("Clipperz.Async.insertIntoSortedArray <inner compare>", {trace:false}); 610 innerDeferredResult = new Clipperz.Async.Deferred("Clipperz.Async.insertIntoSortedArray <inner compare>", {trace:false});
604 innerDeferredResult.addCallback(aDeferredComparator, aObject, bObject); 611 innerDeferredResult.addCallback(aDeferredComparator, aObject, bObject);
605 innerDeferredResult.addErrback(MochiKit.Async.fail, aContext); 612 innerDeferredResult.addErrback(MochiKit.Async.fail, aContext);
606 innerDeferredResult.callback(); 613 innerDeferredResult.callback();
607 614
608 return innerDeferredResult; 615 return innerDeferredResult;
609 }, aDeferredComparator, anObject, aSortedResult[i], i); 616 }, aDeferredComparator, anObject, aSortedResult[i], i);
610 } 617 }
611 deferredResult.addMethod(aSortedResult, 'push', anObject); 618 deferredResult.addMethod(aSortedResult, 'push', anObject);
612 deferredResult.addErrback(function (anError) { 619 deferredResult.addErrback(function (anError) {
613 aSortedResult.splice(anError.message, 0, anObject); 620 aSortedResult.splice(anError.message, 0, anObject);
614 }) 621 })
615 deferredResult.addBoth(MochiKit.Async.succeed, aSortedResult); 622 deferredResult.addBoth(MochiKit.Async.succeed, aSortedResult);
616 deferredResult.callback(); 623 deferredResult.callback();
617 } 624 }
618 625
619 return deferredResult; 626 return deferredResult;
620 }, 627 },
621 628
622 //------------------------------------------------------------------------- 629 //-------------------------------------------------------------------------
623 630
624 'deferredSort': function (aDeferredComparator, someObjects) { 631 'deferredSort': function (aDeferredComparator, someObjects) {
625 var deferredResult; 632 var deferredResult;
626 var i, c; 633 var i, c;
627 634
628 deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.deferredSort", {trace:false}); 635 deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.deferredSort", {trace:false});
629 c = someObjects.length; 636 c = someObjects.length;
630 for (i=0; i<c; i++) { 637 for (i=0; i<c; i++) {
631 deferredResult.addCallback(Clipperz.Async.insertIntoSortedArray, someObjects[i], aDeferredComparator); 638 deferredResult.addCallback(Clipperz.Async.insertIntoSortedArray, someObjects[i], aDeferredComparator);
632 if ((i % 50) == 0) { 639 if ((i % 50) == 0) {
633 //console.log("######### sort wait ##########"); 640 //console.log("######### sort wait ##########");
634 deferredResult.addCallback(MochiKit.Async.wait, 0.5); 641 deferredResult.addCallback(MochiKit.Async.wait, 0.5);
635 } 642 }
636 } 643 }
637 deferredResult.callback([]); 644 deferredResult.callback([]);
638 645
639 return deferredResult; 646 return deferredResult;
640 }, 647 },
641 648
642 //========================================================================= 649 //=========================================================================
643 650
644 'deferredFilter': function (aFunction, someObjects) { 651 'deferredFilter': function (aFunction, someObjects) {
645 vardeferredResult; 652 vardeferredResult;
646 vari, c; 653 vari, c;
647 654
648 deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.deferredFilter", {trace:false}); 655 deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.deferredFilter", {trace:false});
649 c = someObjects.length; 656 c = someObjects.length;
650 for (i=0; i<c; i++) { 657 for (i=0; i<c; i++) {
651 deferredResult.addCallback(function (aFunction, anObject, anIndex, aResult) { 658 deferredResult.addCallback(function (aFunction, anObject, anIndex, aResult) {
652 var innerDeferredResult; 659 var innerDeferredResult;
653 660
654 innerDeferredResult = new Clipperz.Async.Deferred("Clipperz.Async.deferredFilter <inner - " + anIndex + ">", {trace:false}); 661 innerDeferredResult = new Clipperz.Async.Deferred("Clipperz.Async.deferredFilter <inner - " + anIndex + ">", {trace:false});
655 innerDeferredResult.addCallback(aFunction, anObject); 662 innerDeferredResult.addCallback(aFunction, anObject);
656 innerDeferredResult.addCallback(function (aFilterResult) { 663 innerDeferredResult.addCallback(function (aFilterResult) {
657 if (aFilterResult) { 664 if (aFilterResult) {
658 aResult.push(anObject); 665 aResult.push(anObject);
659 }; 666 };
660 }); 667 });
661 innerDeferredResult.addBoth(MochiKit.Async.succeed, aResult); 668 innerDeferredResult.addBoth(MochiKit.Async.succeed, aResult);
662 innerDeferredResult.callback(); 669 innerDeferredResult.callback();
663 670
664 return innerDeferredResult; 671 return innerDeferredResult;
665 }, aFunction, someObjects[i], i); 672 }, aFunction, someObjects[i], i);
666 } 673 }
667 deferredResult.callback([]); 674 deferredResult.callback([]);
668 675
669 return deferredResult; 676 return deferredResult;
670 }, 677 },
671 678
672 'forEach': function (aFunction) { 679 'forEach': function (aFunction) {
673 return MochiKit.Base.partial(function (aFunction, anIterable) { 680 return MochiKit.Base.partial(function (aFunction, anIterable) {
674 MochiKit.Iter.forEach(anIterable, aFunction); 681 MochiKit.Iter.forEach(anIterable, aFunction);
675 }, aFunction); 682 }, aFunction);
676 }, 683 },
677 684
678 //========================================================================= 685 //=========================================================================
679 686
680 'or': function (someValues) { 687 'or': function (someValues) {
681 return Clipperz.Async.callbacks("Clipperz.Async.or", [ 688 return Clipperz.Async.callbacks("Clipperz.Async.or", [
682 MochiKit.Base.values, 689 MochiKit.Base.values,
683 MochiKit.Base.flattenArguments, 690 MochiKit.Base.flattenArguments,
684//function (aValue) { console.log("Record.hasAnyCleanTextData - flatten", aValue); return aValue; }, 691//function (aValue) { console.log("Record.hasAnyCleanTextData - flatten", aValue); return aValue; },
685 function(someInnerValues) { 692 function(someInnerValues) {
686 return MochiKit.Iter.some(someInnerValues, MochiKit.Base.operator.identity); 693 return MochiKit.Iter.some(someInnerValues, MochiKit.Base.operator.identity);
687 } 694 }
688 ], {trace:false}, someValues); 695 ], {trace:false}, someValues);
689 }, 696 },
690 697
691 //========================================================================= 698 //=========================================================================
692 699
693 'clearResult': function () {}, 700 'clearResult': function () {},
694 701
695 //========================================================================= 702 //=========================================================================
696 __syntaxFix__: "syntax fix" 703 __syntaxFix__: "syntax fix"
697}); 704});
698 705
699 706
700//############################################################################# 707//#############################################################################
701 708
702CLIPPERZ_DEFERRED_LOGGING_ENABLED = true; 709CLIPPERZ_DEFERRED_LOGGING_ENABLED = true;
703CLIPPERZ_DEFERRED_TRACING_ENABLED = false; 710CLIPPERZ_DEFERRED_TRACING_ENABLED = false;
704CLIPPERZ_DEFERRED_CALL_LOGGING_ENABLED = false; 711CLIPPERZ_DEFERRED_CALL_LOGGING_ENABLED = false;
diff --git a/frontend/gamma/js/Clipperz/PM/Proxy.js b/frontend/gamma/js/Clipperz/PM/Proxy.js
index 190bffd..9817eac 100644
--- a/frontend/gamma/js/Clipperz/PM/Proxy.js
+++ b/frontend/gamma/js/Clipperz/PM/Proxy.js
@@ -1,169 +1,169 @@
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 = {}; }
28 28
29//============================================================================= 29//=============================================================================
30 30
31Clipperz.PM.Proxy = function(args) { 31Clipperz.PM.Proxy = function(args) {
32 args = args || {}; 32 args = args || {};
33 33
34 this._shouldPayTolls = args.shouldPayTolls || false; 34 this._shouldPayTolls = args.shouldPayTolls || false;
35 35
36 this._tolls = { 36 this._tolls = {
37 'CONNECT':[], 37 'CONNECT':[],
38 'REGISTER':[], 38 'REGISTER':[],
39 'MESSAGE':[] 39 'MESSAGE':[]
40 }; 40 };
41 41
42 if (args.isDefault === true) { 42 if (args.isDefault === true) {
43 Clipperz.PM.Proxy.defaultProxy = this; 43 Clipperz.PM.Proxy.defaultProxy = this;
44 } 44 }
45 45
46 return this; 46 return this;
47} 47}
48 48
49Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, { 49Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, {
50 50
51 'toString': function() { 51 'toString': function() {
52 return "Clipperz.PM.Proxy"; 52 return "Clipperz.PM.Proxy";
53 }, 53 },
54 54
55 //========================================================================= 55 //=========================================================================
56 56
57 'shouldPayTolls': function() { 57 'shouldPayTolls': function() {
58 return this._shouldPayTolls; 58 return this._shouldPayTolls;
59 }, 59 },
60 60
61 //------------------------------------------------------------------------- 61 //-------------------------------------------------------------------------
62 62
63 'tolls': function() { 63 'tolls': function() {
64 return this._tolls; 64 return this._tolls;
65 }, 65 },
66 66
67 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
68 68
69 'payToll': function(aRequestType, someParameters) { 69 'payToll': function(aRequestType, someParameters) {
70 vardeferredResult; 70 vardeferredResult;
71 71
72//console.log(">>> Proxy.payToll", aRequestType, someParameters); 72//console.log(">>> Proxy.payToll", aRequestType, someParameters);
73 if (this.shouldPayTolls()) { 73 if (this.shouldPayTolls()) {
74 deferredResult = new Clipperz.Async.Deferred("Proxy.payToll", {trace:false}); 74 deferredResult = new Clipperz.Async.Deferred("Proxy.payToll", {trace:false});
75 75
76 if (this.tolls()[aRequestType].length == 0) { 76 if (this.tolls()[aRequestType].length == 0) {
77 deferredResult.addMethod(this, 'sendMessage', 'knock', {requestType:aRequestType}); 77 deferredResult.addMethod(this, 'sendMessage', 'knock', {requestType:aRequestType});
78 deferredResult.addMethod(this, 'setTollCallback'); 78 deferredResult.addMethod(this, 'setTollCallback');
79 } 79 }
80 deferredResult.addMethod(this.tolls()[aRequestType], 'pop'); 80 deferredResult.addMethod(this.tolls()[aRequestType], 'pop');
81 deferredResult.addCallback(MochiKit.Base.methodcaller('deferredPay')); 81 deferredResult.addCallback(MochiKit.Base.methodcaller('deferredPay'));
82 deferredResult.addCallback(function(aToll) { 82 deferredResult.addCallback(function(aToll) {
83 var result; 83 var result;
84 84
85 result = { 85 result = {
86 parameters: someParameters, 86 parameters: someParameters,
87 toll: aToll 87 toll: aToll
88 } 88 }
89 89
90 return result; 90 return result;
91 }); 91 });
92 92
93 deferredResult.callback(); 93 deferredResult.callback();
94 } else { 94 } else {
95 deferredResult = MochiKit.Async.succeed({parameters:someParameters}); 95 deferredResult = MochiKit.Async.succeed({parameters:someParameters});
96 } 96 }
97//console.log("<<< Proxy.payToll"); 97//console.log("<<< Proxy.payToll");
98 98
99 return deferredResult; 99 return deferredResult;
100 }, 100 },
101 101
102 //------------------------------------------------------------------------- 102 //-------------------------------------------------------------------------
103 103
104 'addToll': function(aToll) { 104 'addToll': function(aToll) {
105//console.log(">>> Proxy.addToll", aToll); 105//console.log(">>> Proxy.addToll", aToll);
106 this.tolls()[aToll.requestType()].push(aToll); 106 this.tolls()[aToll.requestType()].push(aToll);
107//console.log("<<< Proxy.addToll"); 107//console.log("<<< Proxy.addToll");
108 }, 108 },
109 109
110 //========================================================================= 110 //=========================================================================
111 111
112 'setTollCallback': function(someParameters) { 112 'setTollCallback': function(someParameters) {
113//console.log(">>> Proxy.setTollCallback", someParameters); 113//console.log(">>> Proxy.setTollCallback", someParameters);
114 if (typeof(someParameters['toll']) != 'undefined') { 114 if (typeof(someParameters['toll']) != 'undefined') {
115//console.log("added a new toll", someParameters['toll']); 115//console.log("added a new toll", someParameters['toll']);
116 this.addToll(new Clipperz.PM.Toll(someParameters['toll'])); 116 this.addToll(new Clipperz.PM.Toll(someParameters['toll']));
117 } 117 }
118//console.log("<<< Proxy.setTallCallback", someParameters['result']); 118//console.log("<<< Proxy.setTallCallback", someParameters['result']);
119 return someParameters['result']; 119 return someParameters['result'];
120 }, 120 },
121 121
122 //========================================================================= 122 //=========================================================================
123 123
124 'registration': function (someParameters) { 124 'registration': function (someParameters) {
125 return this.processMessage('registration', someParameters, 'REGISTER'); 125 return this.processMessage('registration', someParameters, 'REGISTER');
126 }, 126 },
127 127
128 'handshake': function (someParameters) { 128 'handshake': function (someParameters) {
129 return this.processMessage('handshake', someParameters, 'CONNECT'); 129 return this.processMessage('handshake', someParameters, 'CONNECT');
130 }, 130 },
131 131
132 'message': function (someParameters) { 132 'message': function (someParameters) {
133 return this.processMessage('message', someParameters, 'MESSAGE'); 133 return this.processMessage('message', someParameters, 'MESSAGE');
134 }, 134 },
135 135
136 'logout': function (someParameters) { 136 'logout': function (someParameters) {
137 return this.processMessage('logout', someParameters, 'MESSAGE'); 137 return this.processMessage('logout', someParameters, 'MESSAGE');
138 }, 138 },
139 139
140 //========================================================================= 140 //=========================================================================
141 141
142 'processMessage': function (aFunctionName, someParameters, aRequestType) { 142 'processMessage': function (aFunctionName, someParameters, aRequestType) {
143 vardeferredResult; 143 vardeferredResult;
144 144
145 deferredResult = new Clipperz.Async.Deferred("Proxy.processMessage", {trace:false}); 145 deferredResult = new Clipperz.Async.Deferred("Proxy.processMessage", {trace:true});
146 deferredResult.addMethod(this, 'payToll', aRequestType); 146 deferredResult.addMethod(this, 'payToll', aRequestType);
147 deferredResult.addMethod(this, 'sendMessage', aFunctionName); 147 deferredResult.addMethod(this, 'sendMessage', aFunctionName);
148 deferredResult.addMethod(this, 'setTollCallback'); 148 deferredResult.addMethod(this, 'setTollCallback');
149 deferredResult.callback(someParameters); 149 deferredResult.callback(someParameters);
150 150
151 return deferredResult; 151 return deferredResult;
152 }, 152 },
153 153
154 //========================================================================= 154 //=========================================================================
155 155
156 'sendMessage': function () { 156 'sendMessage': function () {
157 throw Clipperz.Base.exception.AbstractMethod; 157 throw Clipperz.Base.exception.AbstractMethod;
158 }, 158 },
159 159
160 //========================================================================= 160 //=========================================================================
161 161
162 'isReadOnly': function () { 162 'isReadOnly': function () {
163 return false; 163 return false;
164 }, 164 },
165 165
166 //========================================================================= 166 //=========================================================================
167 __syntaxFix__: "syntax fix" 167 __syntaxFix__: "syntax fix"
168 168
169}); 169});
diff --git a/frontend/gamma/properties/gamma.properties.json b/frontend/gamma/properties/gamma.properties.json
index 57f26f1..5fab24d 100644
--- a/frontend/gamma/properties/gamma.properties.json
+++ b/frontend/gamma/properties/gamma.properties.json
@@ -1,189 +1,189 @@
1{ 1{
2 "copyright.values": { 2 "copyright.values": {
3 "mochikit.repository": "http://svn.mochikit.com/mochikit/trunk/", 3 "mochikit.repository": "http://svn.mochikit.com/mochikit/trunk/",
4 "mochikit.version": "1506" 4 "mochikit.version": "1506"
5 }, 5 },
6 "js": [ 6 "js": [
7 "MochiKit/Base.js", 7 "MochiKit/Base.js",
8 "MochiKit/Iter.js", 8 "MochiKit/Iter.js",
9 "MochiKit/Logging.js", 9 "MochiKit/Logging.js",
10 "-- MochiKit/DateTime.js", 10 "-- MochiKit/DateTime.js",
11 "MochiKit/Format.js", 11 "MochiKit/Format.js",
12 "MochiKit/Async.js", 12 "MochiKit/Async.js",
13 "MochiKit/DOM.js", 13 "MochiKit/DOM.js",
14 "MochiKit/Style.js", 14 "MochiKit/Style.js",
15 "MochiKit/LoggingPane.js", 15 "MochiKit/LoggingPane.js",
16 "MochiKit/Color.js", 16 "MochiKit/Color.js",
17 "MochiKit/Signal.js", 17 "MochiKit/Signal.js",
18 "MochiKit/Position.js", 18 "MochiKit/Position.js",
19 "MochiKit/Selector.js", 19 "MochiKit/Selector.js",
20 "MochiKit/Visual.js", 20 "MochiKit/Visual.js",
21 21
22 "JSON/json2.js", 22 "JSON/json2.js",
23 23
24 "Clipperz/YUI/Utils.js", 24 "Clipperz/YUI/Utils.js",
25 "Clipperz/YUI/DomHelper.js", 25 "Clipperz/YUI/DomHelper.js",
26 26
27 "Clipperz/ByteArray.js", 27 "Clipperz/ByteArray.js",
28 "Clipperz/Base.js", 28 "Clipperz/Base.js",
29 "Clipperz/Async.js", 29 "Clipperz/Async.js",
30 "Clipperz/CSVProcessor.js", 30 "Clipperz/CSVProcessor.js",
31 "Clipperz/KeePassExportProcessor.js", 31 "Clipperz/KeePassExportProcessor.js",
32 "Clipperz/Date.js", 32 "Clipperz/Date.js",
33 "Clipperz/DOM.js", 33 "Clipperz/DOM.js",
34 "Clipperz/Logging.js", 34 "Clipperz/Logging.js",
35 "Clipperz/Signal.js", 35 "Clipperz/Signal.js",
36 "Clipperz/Style.js", 36 "Clipperz/Style.js",
37 "Clipperz/Visual.js", 37 "Clipperz/Visual.js",
38 "Clipperz/Set.js", 38 "Clipperz/Set.js",
39 "-- Clipperz/Profile.js", 39 "-- Clipperz/Profile.js",
40 "Clipperz/KeyValueObjectStore.js", 40 "Clipperz/KeyValueObjectStore.js",
41 41
42 "Clipperz/Crypto/SHA.js", 42 "Clipperz/Crypto/SHA.js",
43 "Clipperz/Crypto/AES.js", 43 "Clipperz/Crypto/AES.js",
44 "Clipperz/Crypto/PRNG.js", 44 "Clipperz/Crypto/PRNG.js",
45 "Clipperz/Crypto/BigInt.js", 45 "Clipperz/Crypto/BigInt.js",
46 "Clipperz/Crypto/Base.js", 46 "Clipperz/Crypto/Base.js",
47 "Clipperz/Crypto/SRP.js", 47 "Clipperz/Crypto/SRP.js",
48 "Clipperz/Crypto/RSA.js", 48 "Clipperz/Crypto/RSA.js",
49 49
50 "Clipperz/PM/Strings/Strings_defaults.js", 50 "Clipperz/PM/Strings/Strings_defaults.js",
51 "Clipperz/PM/Strings/Strings_en-US.js", 51 "Clipperz/PM/Strings/Strings_en-US.js",
52 "-- # Clipperz/PM/Strings/Strings_en-GB.js", 52 "-- # Clipperz/PM/Strings/Strings_en-GB.js",
53 "-- # Clipperz/PM/Strings/Strings_en-CA.js", 53 "-- # Clipperz/PM/Strings/Strings_en-CA.js",
54 "-- Clipperz/PM/Strings/Strings_it-IT.js", 54 "-- Clipperz/PM/Strings/Strings_it-IT.js",
55 "-- Clipperz/PM/Strings/Strings_pt-BR.js", 55 "-- Clipperz/PM/Strings/Strings_pt-BR.js",
56 "-- # Clipperz/PM/Strings/Strings_pt-PT.js", 56 "-- # Clipperz/PM/Strings/Strings_pt-PT.js",
57 "-- Clipperz/PM/Strings/Strings_ja-JP.js", 57 "-- Clipperz/PM/Strings/Strings_ja-JP.js",
58 "-- Clipperz/PM/Strings/Strings_zh-CN.js", 58 "-- Clipperz/PM/Strings/Strings_zh-CN.js",
59 "-- Clipperz/PM/Strings/Strings_es-ES.js", 59 "-- Clipperz/PM/Strings/Strings_es-ES.js",
60 "-- Clipperz/PM/Strings/Strings_fr-FR.js", 60 "-- Clipperz/PM/Strings/Strings_fr-FR.js",
61 "-- # Clipperz/PM/Strings/Strings_de-DE.js", 61 "-- # Clipperz/PM/Strings/Strings_de-DE.js",
62 "-- # Clipperz/PM/Strings/Strings_el-GR.js", 62 "-- # Clipperz/PM/Strings/Strings_el-GR.js",
63 "-- # Clipperz/PM/Strings/Strings_ru-RU.js", 63 "-- # Clipperz/PM/Strings/Strings_ru-RU.js",
64 "-- # Clipperz/PM/Strings/Strings_he-IL.js", 64 "-- # Clipperz/PM/Strings/Strings_he-IL.js",
65 "Clipperz/PM/Strings.js", 65 "Clipperz/PM/Strings.js",
66 "-- Clipperz/PM/Strings/MessagePanelConfigurations.js", 66 "-- Clipperz/PM/Strings/MessagePanelConfigurations.js",
67 67
68 "Clipperz/PM/Date.js", 68 "Clipperz/PM/Date.js",
69 69
70 "Clipperz/PM/Toll.js", 70 "Clipperz/PM/Toll.js",
71 "Clipperz/PM/Proxy.js", 71 "Clipperz/PM/Proxy.js",
72 "Clipperz/PM/Proxy/Proxy.JSON.js", 72 "Clipperz/PM/Proxy/Proxy.JSON.js",
73 "Clipperz/PM/Proxy/Proxy.Offline.js", 73 "Clipperz/PM/Proxy/Proxy.Offline.js",
74 "Clipperz/PM/Proxy/Proxy.Offline.DataStore.js", 74 "Clipperz/PM/Proxy/Proxy.Offline.DataStore.js",
75 "Clipperz/PM/Connection.js", 75 "Clipperz/PM/Connection.js",
76 "Clipperz/PM/Crypto.js", 76 "Clipperz/PM/Crypto.js",
77 "Clipperz/PM/BookmarkletProcessor.js", 77 "Clipperz/PM/BookmarkletProcessor.js",
78 78
79 "Clipperz/PM/DataModel/EncryptedRemoteObject.js", 79 "Clipperz/PM/DataModel/EncryptedRemoteObject.js",
80 "Clipperz/PM/DataModel/User.js", 80 "Clipperz/PM/DataModel/User.js",
81 "Clipperz/PM/DataModel/User.Header.Legacy.js", 81 "Clipperz/PM/DataModel/User.Header.Legacy.js",
82 "Clipperz/PM/DataModel/User.Header.RecordIndex.js", 82 "Clipperz/PM/DataModel/User.Header.RecordIndex.js",
83 "Clipperz/PM/DataModel/User.Header.Preferences.js", 83 "Clipperz/PM/DataModel/User.Header.Preferences.js",
84 "Clipperz/PM/DataModel/User.Header.OneTimePasswords.js", 84 "Clipperz/PM/DataModel/User.Header.OneTimePasswords.js",
85 "Clipperz/PM/DataModel/Record.js", 85 "Clipperz/PM/DataModel/Record.js",
86 "Clipperz/PM/DataModel/Record.Version.js", 86 "Clipperz/PM/DataModel/Record.Version.js",
87 "Clipperz/PM/DataModel/Record.Version.Field.js", 87 "Clipperz/PM/DataModel/Record.Version.Field.js",
88 "Clipperz/PM/DataModel/DirectLogin.js", 88 "Clipperz/PM/DataModel/DirectLogin.js",
89 "Clipperz/PM/DataModel/DirectLoginInput.js", 89 "Clipperz/PM/DataModel/DirectLoginInput.js",
90 "Clipperz/PM/DataModel/DirectLoginBinding.js", 90 "Clipperz/PM/DataModel/DirectLoginBinding.js",
91 "Clipperz/PM/DataModel/DirectLoginFormValue.js", 91 "Clipperz/PM/DataModel/DirectLoginFormValue.js",
92 "Clipperz/PM/DataModel/OneTimePassword.js", 92 "Clipperz/PM/DataModel/OneTimePassword.js",
93 93
94 "Clipperz/PM/UI/Canvas/Marks/exclamationMark.js", 94 "Clipperz/PM/UI/Canvas/Marks/exclamationMark.js",
95 "Clipperz/PM/UI/Canvas/Marks/questionMark.js", 95 "Clipperz/PM/UI/Canvas/Marks/questionMark.js",
96 "Clipperz/PM/UI/Canvas/Marks/info.js", 96 "Clipperz/PM/UI/Canvas/Marks/info.js",
97 97
98 "Clipperz/PM/UI/Canvas/Features/store.js", 98 "Clipperz/PM/UI/Canvas/Features/store.js",
99 "Clipperz/PM/UI/Canvas/Features/protect.js", 99 "Clipperz/PM/UI/Canvas/Features/protect.js",
100 "Clipperz/PM/UI/Canvas/Features/directLogin.js", 100 "Clipperz/PM/UI/Canvas/Features/directLogin.js",
101 "Clipperz/PM/UI/Canvas/Features/share.js", 101 "Clipperz/PM/UI/Canvas/Features/share.js",
102 102
103 "Clipperz/PM/UI/Canvas/Star/normal.js", 103 "Clipperz/PM/UI/Canvas/Star/normal.js",
104 104
105 "Clipperz/PM/UI/Canvas/CoverActions/look.js", 105 "Clipperz/PM/UI/Canvas/CoverActions/look.js",
106 "Clipperz/PM/UI/Canvas/CoverActions/download.js", 106 "Clipperz/PM/UI/Canvas/CoverActions/download.js",
107 107
108 "Clipperz/PM/UI/Canvas/Tips/open.js", 108 "Clipperz/PM/UI/Canvas/Tips/open.js",
109 "Clipperz/PM/UI/Canvas/Tips/close.js", 109 "Clipperz/PM/UI/Canvas/Tips/close.js",
110 110
111 "Clipperz/PM/UI/Canvas/RegisterButton/normal.js", 111 "Clipperz/PM/UI/Canvas/RegisterButton/normal.js",
112 112
113 "Clipperz/PM/UI/Canvas/Logo/normal.js", 113 "Clipperz/PM/UI/Canvas/Logo/normal.js",
114 114
115 "Clipperz/PM/UI/Canvas/GraphicFunctions.js", 115 "Clipperz/PM/UI/Canvas/GraphicFunctions.js",
116 116
117 "Clipperz/PM/UI/Common/Components/BaseComponent.js", 117 "Clipperz/PM/UI/Common/Components/BaseComponent.js",
118 "Clipperz/PM/UI/Common/Components/Button.js", 118 "Clipperz/PM/UI/Common/Components/Button.js",
119 "Clipperz/PM/UI/Common/Components/ComponentSlot.js", 119 "Clipperz/PM/UI/Common/Components/ComponentSlot.js",
120 "Clipperz/PM/UI/Common/Components/FaviconComponent.js", 120 "Clipperz/PM/UI/Common/Components/FaviconComponent.js",
121 "Clipperz/PM/UI/Common/Components/PasswordEntropyDisplay.js", 121 "Clipperz/PM/UI/Common/Components/PasswordEntropyDisplay.js",
122 "Clipperz/PM/UI/Common/Components/ProgressBar.js", 122 "Clipperz/PM/UI/Common/Components/ProgressBar.js",
123 "Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js", 123 "Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js",
124 "Clipperz/PM/UI/Common/Components/MessagePanelWithProgressBar.js", 124 "Clipperz/PM/UI/Common/Components/MessagePanelWithProgressBar.js",
125 "Clipperz/PM/UI/Common/Components/TabPanelComponent.js", 125 "Clipperz/PM/UI/Common/Components/TabPanelComponent.js",
126 "Clipperz/PM/UI/Common/Components/Tooltip.js", 126 "Clipperz/PM/UI/Common/Components/Tooltip.js",
127 "Clipperz/PM/UI/Common/Components/TranslatorWidget.js", 127 "Clipperz/PM/UI/Common/Components/TranslatorWidget.js",
128 128
129 "Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js", 129 "Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js",
130 "Clipperz/PM/UI/Common/Controllers/ProgressBarController.js", 130 "Clipperz/PM/UI/Common/Controllers/ProgressBarController.js",
131 "Clipperz/PM/UI/Common/Controllers/TabPanelController.js", 131 "Clipperz/PM/UI/Common/Controllers/TabPanelController.js",
132 "Clipperz/PM/UI/Common/Controllers/WizardController.js", 132 "Clipperz/PM/UI/Common/Controllers/WizardController.js",
133 133
134 "Clipperz/PM/UI/Web/Components/Page.js", 134 "Clipperz/PM/UI/Web/Components/Page.js",
135 "Clipperz/PM/UI/Web/Components/PageHeader.js", 135 "Clipperz/PM/UI/Web/Components/PageHeader.js",
136 "Clipperz/PM/UI/Web/Components/PageFooter.js", 136 "Clipperz/PM/UI/Web/Components/PageFooter.js",
137 "Clipperz/PM/UI/Web/Components/LoginPage.js", 137 "Clipperz/PM/UI/Web/Components/LoginPage.js",
138 "Clipperz/PM/UI/Web/Components/LoginForm.js", 138 "Clipperz/PM/UI/Web/Components/LoginForm.js",
139 "Clipperz/PM/UI/Web/Components/LoginProgress.js", 139 "Clipperz/PM/UI/Web/Components/LoginProgress.js",
140 "Clipperz/PM/UI/Web/Components/AppPage.js", 140 "Clipperz/PM/UI/Web/Components/AppPage.js",
141 "Clipperz/PM/UI/Web/Components/UserInfoBox.js", 141 "Clipperz/PM/UI/Web/Components/UserInfoBox.js",
142 "Clipperz/PM/UI/Web/Components/TabSidePanel.js", 142 "Clipperz/PM/UI/Web/Components/TabSidePanel.js",
143 "Clipperz/PM/UI/Web/Components/GridComponent.js", 143 "Clipperz/PM/UI/Web/Components/GridComponent.js",
144 144
145 "Clipperz/PM/UI/Web/Components/ColumnManager.js", 145 "Clipperz/PM/UI/Web/Components/ColumnManager.js",
146 "Clipperz/PM/UI/Web/Components/TextColumnManager.js", 146 "Clipperz/PM/UI/Web/Components/TextColumnManager.js",
147 "Clipperz/PM/UI/Web/Components/FaviconColumnManager.js", 147 "Clipperz/PM/UI/Web/Components/FaviconColumnManager.js",
148 "Clipperz/PM/UI/Web/Components/ImageColumnManager.js", 148 "Clipperz/PM/UI/Web/Components/ImageColumnManager.js",
149 "Clipperz/PM/UI/Web/Components/DateColumnManager.js", 149 "Clipperz/PM/UI/Web/Components/DateColumnManager.js",
150 "Clipperz/PM/UI/Web/Components/LinkColumnManager.js", 150 "Clipperz/PM/UI/Web/Components/LinkColumnManager.js",
151 "Clipperz/PM/UI/Web/Components/DirectLoginColumnManager.js", 151 "Clipperz/PM/UI/Web/Components/DirectLoginColumnManager.js",
152 "Clipperz/PM/UI/Web/Components/DirectLoginsColumnManager.js", 152 "Clipperz/PM/UI/Web/Components/DirectLoginsColumnManager.js",
153 "Clipperz/PM/UI/Web/Components/DeleteObjectColumnManager.js", 153 "Clipperz/PM/UI/Web/Components/DeleteObjectColumnManager.js",
154 "Clipperz/PM/UI/Web/Components/CreateNewCardSplashComponent.js", 154 "Clipperz/PM/UI/Web/Components/CreateNewCardSplashComponent.js",
155 155
156 "Clipperz/PM/UI/Web/Components/AccountPanel.js", 156 "Clipperz/PM/UI/Web/Components/AccountPanel.js",
157 "Clipperz/PM/UI/Web/Components/DataPanel.js", 157 "Clipperz/PM/UI/Web/Components/DataPanel.js",
158 "Clipperz/PM/UI/Web/Components/ToolsPanel.js", 158 "Clipperz/PM/UI/Web/Components/ToolsPanel.js",
159 "Clipperz/PM/UI/Web/Components/RulerComponent.js", 159 "Clipperz/PM/UI/Web/Components/RulerComponent.js",
160 "Clipperz/PM/UI/Web/Components/CardDialogComponent.js", 160 "Clipperz/PM/UI/Web/Components/CardDialogComponent.js",
161 "Clipperz/PM/UI/Web/Components/CardDialogRecordFieldComponent.js", 161 "Clipperz/PM/UI/Web/Components/CardDialogRecordFieldComponent.js",
162 "Clipperz/PM/UI/Web/Components/CardDialogRecordDirectLoginComponent.js", 162 "Clipperz/PM/UI/Web/Components/CardDialogRecordDirectLoginComponent.js",
163 "Clipperz/PM/UI/Web/Components/DirectLoginEditingComponent.js", 163 "Clipperz/PM/UI/Web/Components/DirectLoginEditingComponent.js",
164 "Clipperz/PM/UI/Web/Components/DirectLoginEditingBindingComponent.js", 164 "Clipperz/PM/UI/Web/Components/DirectLoginEditingBindingComponent.js",
165 "Clipperz/PM/UI/Web/Components/DirectLoginEditingFormValueComponent.js", 165 "Clipperz/PM/UI/Web/Components/DirectLoginEditingFormValueComponent.js",
166 "Clipperz/PM/UI/Web/Components/BookmarkletComponent.js", 166 "Clipperz/PM/UI/Web/Components/BookmarkletComponent.js",
167 "Clipperz/PM/UI/Web/Components/UnlockPasswordComponent.js", 167 "Clipperz/PM/UI/Web/Components/UnlockPasswordComponent.js",
168 "Clipperz/PM/UI/Web/Components/NewUserCreationComponent.js", 168 "Clipperz/PM/UI/Web/Components/NewUserCreationComponent.js",
169 "Clipperz/PM/UI/Web/Components/PasswordTooltip.js", 169 "Clipperz/PM/UI/Web/Components/PasswordTooltip.js",
170 170
171 "Clipperz/PM/UI/Web/Controllers/MainController.js", 171 "Clipperz/PM/UI/Web/Controllers/MainController.js",
172 "Clipperz/PM/UI/Web/Controllers/LoginController.js", 172 "Clipperz/PM/UI/Web/Controllers/LoginController.js",
173 "Clipperz/PM/UI/Web/Controllers/AppController.js", 173 "Clipperz/PM/UI/Web/Controllers/AppController.js",
174 "Clipperz/PM/UI/Web/Controllers/FilterController.js", 174 "Clipperz/PM/UI/Web/Controllers/FilterController.js",
175 "Clipperz/PM/UI/Web/Controllers/GridController.js", 175 "Clipperz/PM/UI/Web/Controllers/GridController.js",
176 "Clipperz/PM/UI/Web/Controllers/CardsController.js", 176 "Clipperz/PM/UI/Web/Controllers/CardsController.js",
177 "Clipperz/PM/UI/Web/Controllers/DirectLoginsController.js", 177 "Clipperz/PM/UI/Web/Controllers/DirectLoginsController.js",
178 "Clipperz/PM/UI/Web/Controllers/CardDialogController.js", 178 "Clipperz/PM/UI/Web/Controllers/CardDialogController.js",
179 "Clipperz/PM/UI/Web/Controllers/DirectLoginWizardController.js", 179 "Clipperz/PM/UI/Web/Controllers/DirectLoginWizardController.js",
180 "Clipperz/PM/UI/Web/Controllers/NewUserWizardController.js", 180 "Clipperz/PM/UI/Web/Controllers/NewUserWizardController.js",
181 181
182 "main.js" 182 "main.js"
183 ], 183 ],
184 184
185 "css": [ 185 "css": [
186 "clipperz/clipperz.css", 186 "clipperz.css",
187 "clipperz/compact.css" 187 "compact.css"
188 ] 188 ]
189} \ No newline at end of file 189} \ No newline at end of file
diff --git a/scripts/builder/backendBuilder.py b/scripts/builder/backendBuilder.py
index 16dbe2f..5ecdda0 100644
--- a/scripts/builder/backendBuilder.py
+++ b/scripts/builder/backendBuilder.py
@@ -1,89 +1,118 @@
1#!/usr/bin/env python 1#!/usr/bin/env python
2# -*- coding: UTF-8 -*- 2# -*- coding: UTF-8 -*-
3 3
4import sys, os, json 4import sys, os, json
5import shutil 5import shutil
6import main
7import hashlib 6import hashlib
8 7
9class BackendBuilder: 8import main
9
10#===================================================================
11
12
13class BackendBuilder(object):
10 14
11 def __init__ (self, projectTargetDir, frontends, versions, settings): 15 def __init__ (self, projectTargetDir, frontends, versions, settings):
12 self.projectTargetDir = projectTargetDir 16 self.projectTargetDir = projectTargetDir
13 self.frontends = frontends 17 self.frontends = frontends
14 self.versions = versions 18 self.versions = versions
15 self.settings = settings 19 self.settings = settings
20
21 # --------------------------------------------------------------------------
16 22
17 def name (self): 23 def name (self):
18 raise NotImplementedError() 24 raise NotImplementedError()
25
19 26
20 def relativePath (self): 27 def relativePath (self):
21 raise NotImplementedError() 28 raise NotImplementedError()
29
22 30
23 def compileCode (self): 31 def compileCode (self):
24 pass 32 raise NotImplementedError()
33
25 34
26 def copyCompiledCodeToTargetDir (self): 35 def createPackage (self):
27 src = self.sourceFolder() 36 raise NotImplementedError()
28 dst = self.targetFolder() 37
29 main.createFolder(os.path.dirname(dst)) 38 # --------------------------------------------------------------------------
30 shutil.copytree(src, dst)
31 39
32 def sourceFolder (self): 40 def sourceFolder (self):
33 return main.projectBaseDir() + '/backend/' + self.relativePath() + '/src' 41 return os.path.join(main.projectBaseDir() , 'backend', self.relativePath(), 'src')
34
35 42
36 def targetFolder (self):
37 return self.projectTargetDir + self.relativePath()
38
39 def createTargetFolder (self):
40 main.createFolder(self.targetFolder())
41
42 43
43 #def copyFrontendResources (self, frontend): 44 def tempFolder (self):
44 # print "copying resources for frontend: " + frontend 45 return os.path.join(self.projectTargetDir, '.tmp', self.relativePath())
45 # print "SETTINGS: " + str(self.settings) 46
46 47
48 def frontEndTempFolder (self):
49 return self.tempFolder()
50
47 51
48 def writeToTargetFolder (self, filename, content): 52 def developmentTargetFolder (self):
49 file = open(self.targetFolder() + '/' + filename, 'w') 53 return os.path.join(self.projectTargetDir, 'development', self.relativePath())
54
55 def targetFolder (self):
56 return os.path.join(self.projectTargetDir, self.relativePath())
57
58 # --------------------------------------------------------------------------
59
60 def writeToFolder (self, folder, filename, content):
61 file = open(os.path.join(folder, filename), 'w')
50 file.write(content.encode('utf-8')) 62 file.write(content.encode('utf-8'))
51 file.close() 63 file.close()
52 64
53 65
54 def configureIndexContent (self, indexContent): 66 def configureIndexContent (self, indexContent, requestPathPrefix = ".."):
55 result = indexContent 67 result = indexContent
56 result = result.replace( '@request.path@', self.settings['request.path'] ) 68 result = result.replace( '@request.path@', requestPathPrefix + '/' + self.settings['request.path'] )
57 result = result.replace( '@should.pay.toll@', self.settings['should.pay.toll'] ) 69 result = result.replace( '@should.pay.toll@', self.settings['should.pay.toll'] )
58 70
59 return result 71 return result
60 72
61 73
62 def logChecksums (self, content, message): 74 def logChecksums (self, content, message):
63 md5Digest = hashlib.md5(content.encode('utf-8')).hexdigest() 75 md5Digest = hashlib.md5(content.encode('utf-8')).hexdigest()
64 shaDigest = hashlib.sha1(content.encode('utf-8')).hexdigest() 76 shaDigest = hashlib.sha1(content.encode('utf-8')).hexdigest()
65 sha256Digest= hashlib.sha256(content.encode('utf-8')).hexdigest() 77 sha256Digest= hashlib.sha256(content.encode('utf-8')).hexdigest()
66 print message + ": " + md5Digest + " (md5)" 78 print message + ": " + md5Digest + " (md5)"
67 print message + ": " + shaDigest + " (sha1)" 79 print message + ": " + shaDigest + " (sha1)"
68 print message + ": " + sha256Digest + " (sha256)" 80 print message + ": " + sha256Digest + " (sha256)"
69 81
70 82
83 def shouldCompileCode (self):
84 return ('debug' in self.versions) or ('install' in self.versions)
85
71 86
72 def run (self): 87 def run (self):
73 print self.name() + " - RUN" 88 print self.name() + " - RUN"
74 89
75 self.compileCode() 90 if self.shouldCompileCode():
76 self.copyCompiledCodeToTargetDir() 91 self.compileCode()
77 92
78 for frontend in self.frontends: 93 for frontend in self.frontends:
79 frontendPath = frontend.module + '/' 94 main.createFolder(os.path.join(self.frontEndTempFolder(), frontend.module))
80 if 'debug' in self.versions: 95
81 frontend.copyResourcesToTargetFolder(self.targetFolder()) 96 if 'debug' in self.versions:
82 #self.writeToTargetFolder(frontendPath + 'index_debug.html', self.configureIndexContent(frontend.assembleDebugVersion())) 97 frontend.copyResourcesToFolder(self.frontEndTempFolder())
83 self.writeToTargetFolder(frontendPath + 'index_debug.html', self.configureIndexContent(frontend.assemble(assemblyMode='DEBUG', versionType='DEBUG'))) 98
99 index = self.configureIndexContent(frontend.assemble(assemblyMode='DEBUG', versionType='DEBUG'))
100 self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index_debug.html'), index)
101
102 if 'install' in self.versions:
103 index = self.configureIndexContent(frontend.assemble())
104 self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index.html'), index)
105
106 self.logChecksums(index, "[" + self.name() + " - " + frontend.module + "] index.html checksum")
84 107
85 if 'install' in self.versions: 108 self.createPackage()
86 index = self.configureIndexContent(frontend.assemble()) 109
87 self.writeToTargetFolder(frontendPath + 'index.html', index) 110 if 'development' in self.versions:
88 self.logChecksums(index, "[" + self.name() + " - " + frontend.module + "] index.html checksum") 111 for frontend in self.frontends:
112 main.createFolder(os.path.join(self.developmentTargetFolder(), frontend.module))
113
114 index = self.configureIndexContent(frontend.assemble(assemblyMode='DEVELOPMENT', versionType='DEBUG'), self.settings['development.settings']['url'])
115 self.writeToFolder(self.developmentTargetFolder(), os.path.join(frontend.module, 'index_development.html'), index)
116
89 117
118#===================================================================
diff --git a/scripts/builder/phpBuilder.py b/scripts/builder/backends/phpBuilder.py
index cb4661d..c928aa0 100644
--- a/scripts/builder/phpBuilder.py
+++ b/scripts/builder/backends/phpBuilder.py
@@ -1,14 +1,13 @@
1#!/usr/bin/env python 1#!/usr/bin/env python
2# -*- coding: UTF-8 -*- 2# -*- coding: UTF-8 -*-
3 3
4from backendBuilder import BackendBuilder 4from scriptLanguageBuilder import ScriptLanguageBuilder
5 5
6class PhpBuilder(BackendBuilder): 6class PhpBuilder(ScriptLanguageBuilder):
7 7
8 def name(self): 8 def name(self):
9 return "PHP builder" 9 return "PHP builder"
10
10 11
11 def relativePath(self): 12 def relativePath(self):
12 return 'php' 13 return 'php'
13
14
diff --git a/scripts/builder/backends/pythonBuilder.py b/scripts/builder/backends/pythonBuilder.py
new file mode 100644
index 0000000..1e44209
--- a/dev/null
+++ b/scripts/builder/backends/pythonBuilder.py
@@ -0,0 +1,27 @@
1#!/usr/bin/env python
2# -*- coding: UTF-8 -*-
3
4from scriptLanguageBuilder import ScriptLanguageBuilder
5
6class PythonBuilder(ScriptLanguageBuilder):
7
8 def name(self):
9 return "Python builder"
10
11
12 def relativePath(self):
13 return 'python'
14
15
16 def compileCode (self):
17 src = self.sourceFolder()
18 dst = self.targetFolder()
19
20 shutil.copytree(src, dst)
21
22
23 #def copyCompiledCodeToTargetDir (self):
24 # src = self.sourceFolder()
25 # dst = self.targetFolder()
26#
27 # shutil.copytree(src, dst)
diff --git a/scripts/builder/backends/scriptLanguageBuilder.py b/scripts/builder/backends/scriptLanguageBuilder.py
new file mode 100644
index 0000000..7d5b31c
--- a/dev/null
+++ b/scripts/builder/backends/scriptLanguageBuilder.py
@@ -0,0 +1,20 @@
1#!/usr/bin/env python
2# -*- coding: UTF-8 -*-
3
4import shutil
5from backendBuilder import BackendBuilder
6
7class ScriptLanguageBuilder(BackendBuilder):
8
9 def compileCode (self):
10 src = self.sourceFolder()
11 dst = self.tempFolder()
12
13 shutil.copytree(src, dst)
14
15
16 def createPackage (self):
17 src = self.tempFolder()
18 dst = self.targetFolder()
19
20 shutil.copytree(src, dst)
diff --git a/scripts/builder/frontendBuilder.py b/scripts/builder/frontendBuilder.py
index 55054ee..dae837b 100644
--- a/scripts/builder/frontendBuilder.py
+++ b/scripts/builder/frontendBuilder.py
@@ -1,398 +1,389 @@
1#!/usr/bin/env python 1#!/usr/bin/env python
2# -*- coding: UTF-8 -*- 2# -*- coding: UTF-8 -*-
3 3
4import sys, os, re 4import sys, os, re
5import cssmin 5import cssmin
6import jsmin 6import jsmin
7import codecs 7import codecs
8import shutil 8import shutil
9import StringIO 9import StringIO
10import urllib 10import urllib
11 11
12#from mercurial import ui, hg
13#from mercurial.node import hex
14from dulwich.repo import Repo
15
16import main 12import main
17 13
14class FrontendBuilder(object):
18 15
19 16 def __init__ (self, frontend, settings, repositoryVersion):
20class FrontendBuilder:
21
22 def __init__ (self, frontend, settings):
23 if '.' in frontend: 17 if '.' in frontend:
24 moduleComponents = frontend.split('.') 18 moduleComponents = frontend.split('.')
25 self.module = moduleComponents[0] 19 self.module = moduleComponents[0]
26 self.submodule = moduleComponents[1] 20 self.submodule = moduleComponents[1]
27 else: 21 else:
28 self.module = frontend 22 self.module = frontend
29 self.submodule = frontend 23 self.submodule = frontend
30 24
31 self.settings = settings 25 self.settings = settings
32 self.projectDir = main.projectBaseDir() 26 self.projectDir = main.projectBaseDir()
27 # self.repository = repository.repositoryWithPath(self.projectDir)
28 self.repositoryVersion = repositoryVersion
33 self.processedFiles = {} 29 self.processedFiles = {}
34 30
35 31
36 def mercurialRepositoryVersion (self):
37 repo = hg.repository(ui.ui(), self.projectDir)
38 context = repo['tip']
39 result = str(context)
40
41 return result
42
43
44 def gitRepositoryVersion (self):
45 repo = Repo(self.projectDir)
46 #if repo.is_dirty():
47 #print "WARNING: build run with dirty repository"
48 result = repo.refs['HEAD']
49
50 return result
51
52
53
54 def repositoryVersion (self):
55 cacheKey = 'repositoryVersion'
56 if not self.processedFiles.has_key(cacheKey):
57 #result = self.mercurialRepositoryVersion()
58 result = self.gitRepositoryVersion()
59 self.processedFiles[cacheKey] = result
60 else:
61 result = self.processedFiles[cacheKey]
62
63 return result
64
65
66 #def relativePath (self):
67 #return self.module
68 #
69
70 def log (self, message): 32 def log (self, message):
71 print "frontend [" + self.module + "]: " + message 33 print "frontend [" + self.module + "]: " + message
72 34
73 35
74 def absolutePathForSourceFile (self, folder, basePath, file): 36 def absolutePathForSources (self):
75 return folder + '/frontend/' + self.module + '/' + basePath + '/' + file 37 return os.path.join(self.projectDir, 'frontend', self.module)
38
39
40 def absolutePathForSourceFile (self, basePath, file):
41 return os.path.join(self.absolutePathForSources(), basePath, file)
76 42
77 43
78 def absolutePathForTargetFile (self, folder, basePath, file): 44 def absolutePathForTargetFile (self, folder, basePath, file):
79 return folder + '/' + self.module + '/' + basePath + '/' + file 45 return os.path.join(folder, self.module, basePath, file)
46
80 47
81 def filterFiles (self, files): 48 def filterFiles (self, files):
82 result = [] 49 result = []
83 50
84 for file in files: 51 for file in files:
85 if file.startswith('--'): 52 if file.startswith('--'):
86 pass 53 pass
87 else: 54 else:
88 result.append(file) 55 result.append(file)
89 56
90 return result 57 return result
91 58
92 59
93 def copyResources (self, sourceFolder, destinationFolder, fileType): 60 def copyResources (self, sourceFolder, destinationFolder, fileType):
94 for file in self.filterFiles(self.settings[fileType]): 61 for file in self.filterFiles(self.settings[fileType]):
95 src = self.absolutePathForSourceFile(sourceFolder, fileType, file) 62 src = self.absolutePathForSourceFile(fileType, file)
96 dst = self.absolutePathForTargetFile(destinationFolder, fileType, file) 63 dst = self.absolutePathForTargetFile(destinationFolder, fileType, file)
97 main.createFolder(os.path.dirname(dst)) 64 main.createFolder(os.path.dirname(dst))
98 shutil.copy2(src, dst) 65 shutil.copy2(src, dst)
99 66
100 67
101 def copyResourcesToTargetFolder (self, targetFolder): 68 def copyResourcesToFolder (self, targetFolder):
102 self.copyResources(self.projectDir, targetFolder, 'css') 69 self.copyResources(self.projectDir, targetFolder, 'css')
103 self.copyResources(self.projectDir, targetFolder, 'js') 70 self.copyResources(self.projectDir, targetFolder, 'js')
104 71
105 72
106 def loadFilesContent (self, basePath, files): 73 def loadFilesContent (self, basePath, files):
107 result = "" 74 result = ""
108 75
109 for file in self.filterFiles(files): 76 for file in self.filterFiles(files):
110 try: 77 try:
111 fileHandler = codecs.open(self.absolutePathForSourceFile(self.projectDir, basePath, file), 'r', 'utf-8') 78 fileHandler = codecs.open(self.absolutePathForSourceFile(basePath, file), 'r', 'utf-8')
112 except: 79 except:
113 print "FILE: " + file 80 print "FILE: " + file
114 81
115 result += fileHandler.read() + '\n' 82 result += fileHandler.read() + '\n'
116 fileHandler.close() 83 fileHandler.close()
117 84
118 return result 85 return result
119 86
120 87
121 def template (self): 88 def template (self):
122 processedFile = 'html_template' 89 processedFile = 'html_template'
123 if not self.processedFiles.has_key(processedFile): 90 if not self.processedFiles.has_key(processedFile):
124 self.processedFiles[processedFile] = self.loadFilesContent('html', ['index_template.html']) 91 self.processedFiles[processedFile] = self.loadFilesContent('html', ['index_template.html'])
125 92
126 return self.processedFiles[processedFile] 93 return self.processedFiles[processedFile]
127 94
128 95
129 def cssminCompressor (self, css): 96 def cssminCompressor (self, css):
130 # package found here: 97 # package found here:
131 # - http://stackoverflow.com/questions/222581/python-script-for-minifying-css/2396777#2396777 98 # - http://stackoverflow.com/questions/222581/python-script-for-minifying-css/2396777#2396777
132 # actual downloaded version: http://pypi.python.org/pypi/cssmin/0.1.4 99 # actual downloaded version: http://pypi.python.org/pypi/cssmin/0.1.4
133 return cssmin.cssmin(css) 100 return cssmin.cssmin(css)
134 101
135 102
136 def regexCssCompressor (self, css): 103 def regexCssCompressor (self, css):
137 # http://stackoverflow.com/questions/222581/python-script-for-minifying-css/223689#223689 104 # http://stackoverflow.com/questions/222581/python-script-for-minifying-css/223689#223689
138 105
139 # remove comments - this will break a lot of hacks :-P 106 # remove comments - this will break a lot of hacks :-P
140 css = re.sub( r'\s*/\*\s*\*/', "$$HACK1$$", css ) # preserve IE<6 comment hack 107 css = re.sub( r'\s*/\*\s*\*/', "$$HACK1$$", css ) # preserve IE<6 comment hack
141 css = re.sub( r'/\*[\s\S]*?\*/', "", css ) 108 css = re.sub( r'/\*[\s\S]*?\*/', "", css )
142 css = css.replace( "$$HACK1$$", '/**/' ) # preserve IE<6 comment hack 109 css = css.replace( "$$HACK1$$", '/**/' ) # preserve IE<6 comment hack
143 110
144 # url() doesn't need quotes 111 # url() doesn't need quotes
145 css = re.sub( r'url\((["\'])([^)]*)\1\)', r'url(\2)', css ) 112 css = re.sub( r'url\((["\'])([^)]*)\1\)', r'url(\2)', css )
146 113
147 # spaces may be safely collapsed as generated content will collapse them anyway 114 # spaces may be safely collapsed as generated content will collapse them anyway
148 css = re.sub( r'\s+', ' ', css ) 115 css = re.sub( r'\s+', ' ', css )
149 116
150 # shorten collapsable colors: #aabbcc to #abc 117 # shorten collapsable colors: #aabbcc to #abc
151 css = re.sub( r'#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3(\s|;)', r'#\1\2\3\4', css ) 118 css = re.sub( r'#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3(\s|;)', r'#\1\2\3\4', css )
152 119
153 # fragment values can loose zeros 120 # fragment values can loose zeros
154 css = re.sub( r':\s*0(\.\d+([cm]m|e[mx]|in|p[ctx]))\s*;', r':\1;', css ) 121 css = re.sub( r':\s*0(\.\d+([cm]m|e[mx]|in|p[ctx]))\s*;', r':\1;', css )
155 122
156 for rule in re.findall( r'([^{]+){([^}]*)}', css ): 123 for rule in re.findall( r'([^{]+){([^}]*)}', css ):
157 124
158 # we don't need spaces around operators 125 # we don't need spaces around operators
159 selectors = [re.sub( r'(?<=[\[\(>+=])\s+|\s+(?=[=~^$*|>+\]\)])', r'', selector.strip() ) for selector in rule[0].split( ',' )] 126 selectors = [re.sub( r'(?<=[\[\(>+=])\s+|\s+(?=[=~^$*|>+\]\)])', r'', selector.strip() ) for selector in rule[0].split( ',' )]
160 127
161 # order is important, but we still want to discard repetitions 128 # order is important, but we still want to discard repetitions
162 properties = {} 129 properties = {}
163 porder = [] 130 porder = []
164 for prop in re.findall( '(.*?):(.*?)(;|$)', rule[1] ): 131 for prop in re.findall( '(.*?):(.*?)(;|$)', rule[1] ):
165 key = prop[0].strip().lower() 132 key = prop[0].strip().lower()
166 if key not in porder: porder.append( key ) 133 if key not in porder: porder.append( key )
167 properties[ key ] = prop[1].strip() 134 properties[ key ] = prop[1].strip()
168 135
169 # output rule if it contains any declarations 136 # output rule if it contains any declarations
170 if properties: 137 if properties:
171 print "%s{%s}" % ( ','.join( selectors ), ''.join(['%s:%s;' % (key, properties[key]) for key in porder])[:-1] ) 138 print "%s{%s}" % ( ','.join( selectors ), ''.join(['%s:%s;' % (key, properties[key]) for key in porder])[:-1] )
172 139
173 return css 140 return css
174 141
175 142
176 def compressCSS (self, css): 143 def compressCSS (self, css):
177 self.log("compressing CSS") 144 self.log("compressing CSS")
178 #return self.regexCssCompressor(css) 145 #return self.regexCssCompressor(css)
179 return self.cssminCompressor(css) 146 return self.cssminCompressor(css)
180 147
181 148
182 #========================================================================== 149 #==========================================================================
183 150
184 def compressJS_jsmin (self, js): 151 def compressJS_jsmin (self, js, description):
185 self.log("compressing JS code") 152 self.log("compressing " + description + " code")
186 original = StringIO.StringIO(js) 153 original = StringIO.StringIO(js)
187 output = StringIO.StringIO() 154 output = StringIO.StringIO()
188 155
189 jsMinifier = jsmin.JavascriptMinify() 156 jsMinifier = jsmin.JavascriptMinify()
190 jsMinifier.minify(original, output) 157 jsMinifier.minify(original, output)
191 158
192 result = output.getvalue() 159 result = output.getvalue()
193 160
194 original.close() 161 original.close()
195 output.close() 162 output.close()
196 163
197 return result 164 return result
198 165
199 def compressJS_closureCompiler (self, js): 166 def compressJS_closureCompiler (self, js, description):
200 #Googles Closure compiler 167 #Googles Closure compiler
201 #java -jar compiler.jar --js=in1.js --js=in2.js ... --js_output_file=out.js 168 #java -jar compiler.jar --js=in1.js --js=in2.js ... --js_output_file=out.js
202 169
203 result = js 170 result = js
204 171
205 return result 172 return result
206 173
207 174
208 def compressJS (self, js): 175 def compressJS (self, js, description):
209 return self.compressJS_jsmin(js) 176 return self.compressJS_jsmin(js, description)
210 #return self.compressJS_closureCompiler(js) 177 #return self.compressJS_closureCompiler(js, description)
211 178
212 179
213 #========================================================================== 180 #==========================================================================
214 181
215 def packBookmarklet (self, bookmakeletCode): 182 def packBookmarklet (self, bookmakeletCode, version):
216 replacers = [ 183 replacers = [
217 ('isLoginForm', 'ilf'), 184 ('isLoginForm', 'ilf'),
218 ('findLoginForm', 'flf'), 185 ('findLoginForm', 'flf'),
219 ('findLoginForm', 'flf'), 186 ('findLoginForm', 'flf'),
220 ('formParameters', 'fp' ), 187 ('formParameters', 'fp' ),
221 ('pageParameters', 'pp' ), 188 ('pageParameters', 'pp' ),
222 ('serializeJSON', 'sj' ), 189 ('serializeJSON', 'sj' ),
223 ('reprString', 'rs' ), 190 ('reprString', 'rs' ),
224 ('logFormParameters', 'lfp'), 191 ('logFormParameters', 'lfp'),
225 ('loadClipperzBookmarklet','lcb'), 192 ('loadClipperzBookmarklet','lcb'),
226 ('loginForm', 'lf' ), 193 ('loginForm', 'lf' ),
227 ('parameters', 'p' ), 194 ('parameters', 'p' ),
228 ('inputElementValues', 'iev'), 195 ('inputElementValues', 'iev'),
229 ] 196 ]
230 result = self.compressJS(bookmakeletCode) 197 result = self.compressJS(bookmakeletCode, version + " bookmarklet")
231 198
232 result = re.sub('\n', ' ', result) #Fit all in a single line 199 result = re.sub('\n', ' ', result) #Fit all in a single line
233 # result = re.sub('\s+', ' ', result) #Collapse "redundant" spaces. WARNING: this could have some evil side effects on constant strings used inside to code!! 200 # result = re.sub('\s+', ' ', result) #Collapse "redundant" spaces. WARNING: this could have some evil side effects on constant strings used inside to code!!
234 # result = re.sub('\s?([,\+=\(\)\{\};])\s?', '\\1', result) 201 # result = re.sub('\s?([,\+=\(\)\{\};])\s?', '\\1', result)
235 202
236 for replacer in replacers: 203 for replacer in replacers:
237 result = re.sub(replacer[0], replacer[1], result) 204 result = re.sub(replacer[0], replacer[1], result)
238 205
239 # <!-- escaping required to handle the bookmarklet code within the javascript code --> 206 # <!-- escaping required to handle the bookmarklet code within the javascript code -->
240 result = re.sub('\://', '%3a%2f%2f',result) 207 result = re.sub('\://', '%3a%2f%2f',result)
241 result = re.sub('/', '%2f', result) 208 result = re.sub('/', '%2f', result)
242 # result = re.sub('"', '%22', result) 209 # result = re.sub('"', '%22', result)
243 result = re.sub('"', '\\"', result) 210 result = re.sub('"', '\\"', result)
244 result = re.sub('\"', '%22', result) 211 result = re.sub('\"', '%22', result)
245 result = re.sub('\'', '%22', result) 212 result = re.sub('\'', '%22', result)
246 result = re.sub('\\\\', '%5c', result) 213 result = re.sub('\\\\', '%5c', result)
247 result = result.strip() 214 result = result.strip()
248 result = 'javascript:' + result 215 result = 'javascript:' + result
249 216
250 # replacers = [ 217 # replacers = [
251 # ('aForm', '_1' ), 218 # ('aForm', '_1' ),
252 # ('inputFields', '_2' ), 219 # ('inputFields', '_2' ),
253 # ('passwordFieldsFound','_3' ), 220 # ('passwordFieldsFound','_3' ),
254 # ('aDocument', '_6' ), 221 # ('aDocument', '_6' ),
255 # ('aLevel', '_7' ), 222 # ('aLevel', '_7' ),
256 # # ('result', '_8' ), 223 # # ('result', '_8' ),
257 # ('documentForms', '_9' ), 224 # ('documentForms', '_9' ),
258 # ('iFrames', '_c' ), 225 # ('iFrames', '_c' ),
259 # ('anInputElement', '_d' ), 226 # ('anInputElement', '_d' ),
260 # ('options', '_f' ), 227 # ('options', '_f' ),
261 # ('option', '_12'), 228 # ('option', '_12'),
262 # ('aLoginForm', '_13'), 229 # ('aLoginForm', '_13'),
263 # # ('action', '_17'), 230 # # ('action', '_17'),
264 # ('radioValues', '_18'), 231 # ('radioValues', '_18'),
265 # ('radioValueName', '_19'), 232 # ('radioValueName', '_19'),
266 # ('inputElement', '_1a'), 233 # ('inputElement', '_1a'),
267 # ('elementValues', '_1b'), 234 # ('elementValues', '_1b'),
268 # ('radioValue', '_1c'), 235 # ('radioValue', '_1c'),
269 # ('values', '_1d'), 236 # ('values', '_1d'),
270 # ('objtype', '_21'), 237 # ('objtype', '_21'),
271 # ('useKey', '_27'), 238 # ('useKey', '_27'),
272 # ('bookmarkletDiv', '_28'), 239 # ('bookmarkletDiv', '_28'),
273 # ('someParameters', '_29'), 240 # ('someParameters', '_29'),
274 # ('anException', '_2a'), 241 # ('anException', '_2a'),
275 # ('newDiv', '_2b'), 242 # ('newDiv', '_2b'),
276 # ('base_url', '_2c'), 243 # ('base_url', '_2c'),
277 # ('help_url', '_2d'), 244 # ('help_url', '_2d'),
278 # ('logo_image_url', '_2e'), 245 # ('logo_image_url', '_2e'),
279 # ('background_image_url','_2f'), 246 # ('background_image_url','_2f'),
280 # ('close_image_url', '_30'), 247 # ('close_image_url', '_30'),
281 # #('bookmarklet_textarea','_31'), 248 # #('bookmarklet_textarea','_31'),
282 # ('innerHTML', '_32'), 249 # ('innerHTML', '_32'),
283 # ] 250 # ]
284 # for replacer in replacers: 251 # for replacer in replacers:
285 # result = re.sub('([^\.])' + replacer[0], '\\1' + replacer[1], result) 252 # result = re.sub('([^\.])' + replacer[0], '\\1' + replacer[1], result)
286 253
287 # replacers = [ 254 # replacers = [
288 # ('headNode', '_1' ), 255 # ('headNode', '_1' ),
289 # ('clipperzScriptNode','_2' ), 256 # ('clipperzScriptNode','_2' ),
290 # ] 257 # ]
291 # for replacer in replacers: 258 # for replacer in replacers:
292 # result = re.sub('([^\.])' + replacer[0], '\\1' + replacer[1], result) 259 # result = re.sub('([^\.])' + replacer[0], '\\1' + replacer[1], result)
293 260
294 # result = re.sub(';', ';\n', result) 261 # result = re.sub(';', ';\n', result)
295 262
296 return result 263 return result
297 264
298 265
299 266
300 def bookmarklet (self): 267 def bookmarklet (self):
301 cacheKey = 'bookmarklet' 268 cacheKey = 'bookmarklet'
302 if not self.processedFiles.has_key(cacheKey): 269 if not self.processedFiles.has_key(cacheKey):
303 result = 'bookmarklet="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet.js'])) + '";bookmarklet_ie="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet_IE.js'])) + '";' 270 result = 'bookmarklet="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet.js']), "regular") + '";bookmarklet_ie="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet_IE.js']), "IE") + '";'
304 self.processedFiles[cacheKey] = result 271 self.processedFiles[cacheKey] = result
305 else: 272 else:
306 result = self.processedFiles[cacheKey] 273 result = self.processedFiles[cacheKey]
307 274
308 return result 275 return result
309 276
310 277
311 def replaceTemplatePlaceholders (self, assemblyMode, pageTitle, copyright, css, code, version, versionType): 278 def replaceTemplatePlaceholders (self, pageTitle, copyright, css, code, jsLoadMode, version, versionType):
312 result = self.template() 279 result = self.template()
313 280
314 result = result.replace('@page.title@', pageTitle, 1) 281 result = result.replace('@page.title@', pageTitle, 1)
315 result = result.replace('@copyright@', copyright, 1) 282 result = result.replace('@copyright@', copyright, 1)
316 result = result.replace('@css@', css, 1) 283 result = result.replace('@css@', css, 1)
317 #result = result.replace('@bookmarklet@', bookmarklet,1) 284 #result = result.replace('@bookmarklet@', bookmarklet,1)
318 result = result.replace('@application.version@', version, 1) 285 result = result.replace('@application.version@', version, 1)
319 result = result.replace('@application.version.type@', versionType,1) 286 result = result.replace('@application.version.type@', versionType,1)
320 result = result.replace('@js_' + assemblyMode + '@', code, 1) 287 result = result.replace('@js_' + jsLoadMode + '@', code, 1)
321 288
322 result = re.sub('@js_[^@]+@', '', result) 289 result = re.sub('@js_[^@]+@', '', result)
323 290
324 return result 291 return result
325 292
326 293
327 def assembleCopyrightHeader (self): 294 def assembleCopyrightHeader (self):
328 processedFile = 'copyright' 295 processedFile = 'copyright'
329 if not self.processedFiles.has_key(processedFile): 296 if not self.processedFiles.has_key(processedFile):
330 #self.log("assembling copyright header") 297 #self.log("assembling copyright header")
331 copyrightValues = self.settings['copyright.values'] 298 copyrightValues = self.settings['copyright.values']
332 license = self.loadFilesContent('../../properties', ['license.txt']) 299 license = self.loadFilesContent('../../properties', ['license.txt'])
333 result = self.loadFilesContent('properties', ['creditsAndCopyrights.txt']) 300 result = self.loadFilesContent('properties', ['creditsAndCopyrights.txt'])
334 301
335 result = re.sub('@clipperz.license@', license, result) 302 result = re.sub('@clipperz.license@', license, result)
336 for key in copyrightValues: 303 for key in copyrightValues:
337 result = re.sub('@'+key+'@', copyrightValues[key], result) 304 result = re.sub('@'+key+'@', copyrightValues[key], result)
338 305
339 self.processedFiles[processedFile] = result 306 self.processedFiles[processedFile] = result
340 307
341 return self.processedFiles[processedFile] 308 return self.processedFiles[processedFile]
342 309
343 310
344 def cssTagsForFiles (self, basePath, files): 311 def cssTagsForFiles (self, basePath, files):
345 #<link rel="stylesheet" type="text/css" href="./css/reset-min.css" /> 312 #<link rel="stylesheet" type="text/css" href="./css/reset-min.css" />
346 return '\n'.join(map(lambda file: '<link rel="stylesheet" type="text/css" href="./' + basePath + '/' + file + '" />', files)) 313 return '\n'.join(map(lambda file: '<link rel="stylesheet" type="text/css" href="' + basePath + '/' + file + '" />', files))
347 314
348 315
349 def cssTagForContent (self, content): 316 def cssTagForContent (self, content):
350 return '<style type="text/css">' + content + '</style>' 317 return '<style type="text/css">' + content + '</style>'
351 318
352 319
353 def scriptTagsForFiles (self, basePath, files): 320 def scriptTagsForFiles (self, basePath, files):
354 #<script type='text/javascript' src='./js/src/bookmarklet.js'></script> 321 #<script type='text/javascript' src='./js/src/bookmarklet.js'></script>
355 return '\n'.join(map(lambda file: '<script type="text/javascript" src="./' + basePath + '/' + file + '"></script>', files)) 322 return '\n'.join(map(lambda file: '<script type="text/javascript" src="' + basePath + '/' + file + '"></script>', files))
356 323
357 324
358 def scriptTagForContent (self, content): 325 def scriptTagForContent (self, content):
359 return '<script>' + content + '</script>' 326 return '<script>' + content + '</script>'
360 327
361 328
362 def assembleVersion (self, assemblyMode, pageTitle, copyright, css, js, version, versionType): 329 def assembleVersion (self, pageTitle, copyright, css, js, jsLoadMode, version, versionType):
363 cacheKey = version + "-" + versionType 330 cacheKey = version + "-" + versionType
364 if not self.processedFiles.has_key(cacheKey): 331 if not self.processedFiles.has_key(cacheKey):
365 result = self.replaceTemplatePlaceholders(assemblyMode, pageTitle, copyright, css, js, version, versionType) 332 result = self.replaceTemplatePlaceholders(pageTitle, copyright, css, js, jsLoadMode, version, versionType)
366 self.processedFiles[cacheKey] = result 333 self.processedFiles[cacheKey] = result
367 else: 334 else:
368 result = self.processedFiles[cacheKey] 335 result = self.processedFiles[cacheKey]
369 336
370 #self.log("# cacheKey:\n" + result) 337 #self.log("# cacheKey:\n" + result)
371 return result 338 return result
372 339
373 340
374 def assemble (self, assemblyMode='INSTALL', versionType='LIVE'): 341 def assemble (self, assemblyMode='INSTALL', versionType='LIVE'):
375 pageTitle = "Clipperz - " + self.module 342
376 if versionType != 'LIVE': 343 if versionType == 'LIVE':
377 pageTitle += " [" + versionType + " - " + assemblyMode +"]" 344 pageTitle = "Clipperz - " + self.module
378 345 else:
346 pageTitle = "Clipperz - " + self.module + " [" + versionType + " - " + assemblyMode +"]"
347
379 if assemblyMode == 'INSTALL': 348 if assemblyMode == 'INSTALL':
380 css= self.cssTagForContent(self.compressCSS(self.loadFilesContent('css', self.settings['css']))) 349 copyright = self.assembleCopyrightHeader()
381 js= self.scriptTagForContent(self.bookmarklet() + '\n' + self.compressJS(self.loadFilesContent('js', self.settings['js']))) 350 css =self.cssTagForContent(self.compressCSS(self.loadFilesContent('css', self.settings['css'])))
351 js =self.scriptTagForContent(
352 self.bookmarklet() +
353 '\n' +
354 self.compressJS(self.loadFilesContent('js', self.settings['js']), "application")
355 )
356 jsLoadMode = 'EMBEDDED'
357
358 elif assemblyMode == 'DEBUG':
359 copyright = self.assembleCopyrightHeader()
360 css =self.cssTagsForFiles('./css', self.filterFiles(self.settings['css']))
361 js =self.scriptTagForContent(self.bookmarklet()) + \
362 '\n' + \
363 self.scriptTagsForFiles('./js', self.filterFiles(self.settings['js']))
364 jsLoadMode = 'LINKED'
365
366 elif assemblyMode == 'DEVELOPMENT':
367 copyright = ""
368 css =self.cssTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'css')), self.filterFiles(self.settings['css']))
369 js =self.scriptTagForContent(self.bookmarklet()) + \
370 '\n' + \
371 self.scriptTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'js')), self.filterFiles(self.settings['js']))
372 jsLoadMode = 'LINKED'
373
382 else: 374 else:
383 css= self.cssTagsForFiles('css', self.filterFiles(self.settings['css'])) 375 raise NotImplementedError()
384 js= self.scriptTagForContent(self.bookmarklet()) + '\n' + self.scriptTagsForFiles('js', self.filterFiles(self.settings['js'])) 376
385
386 return self.assembleVersion( 377 return self.assembleVersion(
387 assemblyMode= assemblyMode,
388 pageTitle = pageTitle, 378 pageTitle = pageTitle,
389 copyright = self.assembleCopyrightHeader(), 379 copyright = copyright,
390 css = css, 380 css = css,
391 js = js, 381 js = js,
392 version = self.repositoryVersion(), 382 jsLoadMode = jsLoadMode,
383 version = self.repositoryVersion,
393 versionType = versionType 384 versionType = versionType
394 ) 385 )
395 386
396 387
397 388
398 389
diff --git a/scripts/builder/main.py b/scripts/builder/main.py
index 94f738f..6fce65d 100755
--- a/scripts/builder/main.py
+++ b/scripts/builder/main.py
@@ -1,166 +1,177 @@
1#!/usr/bin/env python 1#!/usr/bin/env python
2# -*- coding: UTF-8 -*- 2# -*- coding: UTF-8 -*-
3 3
4import sys, os, json 4import sys
5import os
6import json
5import shutil 7import shutil
6import pprint 8import pprint
7import frontendBuilder
8import codecs 9import codecs
9import itertools 10import itertools
10
11from collections import deque 11from collections import deque
12from phpBuilder import PhpBuilder 12
13from pythonBuilder import PythonBuilder 13import frontendBuilder
14import repository
14 15
15pp = pprint.PrettyPrinter(indent=4, depth=4) 16pp = pprint.PrettyPrinter(indent=4, depth=4)
16 17
17#-------------------------------------------------------------------- 18#--------------------------------------------------------------------
18 19
19def scriptDir (): 20def scriptDir ():
20 return os.path.dirname(sys.argv[0]) 21 return os.path.dirname(sys.argv[0])
21 22
22def projectBaseDir (): 23def projectBaseDir ():
23 return os.path.abspath(scriptDir() + '/../..') 24 return os.path.abspath(scriptDir() + '/../..')
24 25
25def projectTargetDir(): 26def projectTargetDir():
26 return projectBaseDir() + '/target/' 27 return projectBaseDir() + '/target/'
27 28
28#-------------------------------------------------------------------- 29#--------------------------------------------------------------------
29 30
30def createFolder (path): 31def createFolder (path):
31 if not os.path.exists(path): 32 if not os.path.exists(path):
32 os.makedirs(path) 33 os.makedirs(path)
33 34
34#-------------------------------------------------------------------- 35#--------------------------------------------------------------------
35 36
36def loadSettings (component, module): 37def loadSettings (component, module):
37 print "MODULE: " + module 38 # print "MODULE: " + module
38 39
39 if '.' in module: 40 if '.' in module:
40 moduleComponents = module.split('.') 41 moduleComponents = module.split('.')
41 module = moduleComponents[0] 42 module = moduleComponents[0]
42 submodule = moduleComponents[1] 43 submodule = moduleComponents[1]
43 else: 44 else:
44 submodule = module 45 submodule = module
45 46
46 settings = codecs.open(projectBaseDir() + '/' + component + '/' + module + '/properties/' + submodule + '.properties.json', 'r', 'utf-8') 47 #settings = codecs.open(projectBaseDir() + os.sep + component + os.sep + module + os.sep + 'properties' + os.sep + submodule + '.properties.json', 'r', 'utf-8')
48 settings = codecs.open(os.path.join(projectBaseDir(), component, module, 'properties', submodule + '.properties.json'), 'r', 'utf-8')
47 result = json.load(settings) 49 result = json.load(settings)
48 settings.close 50 settings.close
49 51
50 return result 52 return result
51 53
52#==================================================================== 54#====================================================================
53# 55#
54# def assembleFrontend (frontend, versions): 56# def assembleFrontend (frontend, versions):
55 # result = {} 57 # result = {}
56 # settings = loadSettings('frontend', frontend) 58 # settings = loadSettings('frontend', frontend)
57 # builder = frontendBuilder.FrontendBuilder(frontend, settings, projectBaseDir()) 59 # builder = frontendBuilder.FrontendBuilder(frontend, settings, projectBaseDir())
58 # 60 #
59 # for version in versions: 61 # for version in versions:
60 # if version == 'install': 62 # if version == 'install':
61 # result[version] = builder.assembleInstallVersion() 63 # result[version] = builder.assembleInstallVersion()
62 # elif version == 'debug': 64 # elif version == 'debug':
63 # result[version] = builder.assembleDebugVersion() 65 # result[version] = builder.assembleDebugVersion()
64 # else: 66 # else:
65 # raise Exception('unrecognized version: ' + version) 67 # raise Exception('unrecognized version: ' + version)
66 # 68 #
67 # return result 69 # return result
68# 70#
69#==================================================================== 71#====================================================================
70 72
71def assembleBackend (backend, frontends, versions): 73def assembleBackend (backend, frontends, versions):
72 settings = loadSettings('backend', backend) 74 settings = loadSettings('backend', backend)
73 75
74 if backend == 'php': 76 builderModuleName = backend + 'Builder'
75 backendBuilder = PhpBuilder(projectTargetDir(), frontends, versions, settings) 77 builderClassName = backend.capitalize() + 'Builder'
76 elif backend == 'python': 78
77 backendBuilder = PythonBuilder(projectTargetDir(), frontends, versions, settings) 79 builderModule = __import__(builderModuleName)
78 #elif backend == 'java': 80 builderClass = getattr(builderModule, builderClassName)
79 #buildJavaBackend (frontends, versions, settings) 81
80 else: 82 backendBuilder = builderClass(projectTargetDir(), frontends, versions, settings)
81 raise Exception('unrecognized backend: ' + backend)
82
83 backendBuilder.run() 83 backendBuilder.run()
84 84
85#==================================================================== 85#====================================================================
86 86
87def build (settings): 87def build (settings, repository):
88 frontends = [] 88 frontends = []
89 89
90 if repository.areTherePendingChanges():
91 print "\nWARNING: repository has pending changes\n"
92
90 for frontend in settings['frontends']: 93 for frontend in settings['frontends']:
91 frontends.append(frontendBuilder.FrontendBuilder(frontend, loadSettings('frontend', frontend))) 94 frontends.append(frontendBuilder.FrontendBuilder(frontend, loadSettings('frontend', frontend), repository.version()))
92 95
93 for backend in settings['backends']: 96 for backend in settings['backends']:
94 assembleBackend(backend, frontends, settings['versions']) 97 assembleBackend(backend, frontends, settings['versions'])
95 98
96#-------------------------------------------------------------------- 99#--------------------------------------------------------------------
97 100
98def clean (): 101def clean ():
99 print "cleaning up …" 102 # print "cleaning up …"
100 if os.path.exists(projectTargetDir()): 103 if os.path.exists(projectTargetDir()):
101 shutil.rmtree(projectTargetDir()) 104 shutil.rmtree(projectTargetDir())
102 105
103#-------------------------------------------------------------------- 106#--------------------------------------------------------------------
104 107
105def usage (message): 108def usage (message):
106 if message != None: 109 if message != None:
107 print "ERROR: " + message 110 print "ERROR: " + message
108 111
109 print 112 print
110 print "build.py clean" 113 # print "build clean"
111 print "build.py clean install" 114 # print "build clean install"
112 print "build.py install --ALL" 115 print "build install --ALL"
113 print "build.py install debug --ALL" 116 print "build install debug --ALL"
114 print "build.py clean install debug --ALL" 117 # print "build clean install debug --ALL"
115 print "build.ph install, debug --backends php java --frontends beta gamma" 118 print "build install debug --backends php python --frontends beta gamma"
116 print "build.ph install, debug --backends php java --frontends beta gamma gamma.mobile" 119 print "build install debug development --backends php python --frontends beta gamma gamma.mobile"
117 exit(1) 120 exit(1)
118 121
119#-------------------------------------------------------------------- 122#--------------------------------------------------------------------
120 123
124def allFrontends ():
125 return ['beta', 'gamma', 'mobile']
126
127def allBackends ():
128 return ['php', 'python']
129
130#--------------------------------------------------------------------
131
121def main (): 132def main ():
122 settings = {} 133 settings = {}
123 parameters = list(itertools.islice(sys.argv, 1, None)) 134 parameters = list(itertools.islice(sys.argv, 1, None))
124 135
125 shouldClean = len(filter(lambda x: x == 'clean', parameters)) > 0 136 sys.path.append(os.path.join(scriptDir(), 'backends'))
126 if (shouldClean): 137 currentRepository = repository.repositoryWithPath(projectBaseDir())
127 clean () 138
128 139 clean()
129 parameters = filter(lambda x: x != 'clean', parameters)
130 versions = list(itertools.takewhile(lambda x: not x.startswith('--'), parameters)) 140 versions = list(itertools.takewhile(lambda x: not x.startswith('--'), parameters))
131 settings['versions'] = versions; #['debug', 'install'] 141 settings['versions'] = versions; #['debug', 'install', 'development']
132 parameters = deque(itertools.dropwhile(lambda x: not x.startswith('--'), parameters)) 142 parameters = deque(itertools.dropwhile(lambda x: not x.startswith('--'), parameters))
133 143
134 if len(parameters) > 0: 144 if len(parameters) > 0:
135 parameter = parameters.popleft() 145 parameter = parameters.popleft()
136 if parameter == "--ALL": 146 if parameter == "--ALL":
137 settings['frontends'] = ['beta', 'gamma', 'mobile'] 147 settings['frontends'] = allFrontends()
138 settings['backends'] = ['php', 'python', 'java'] 148 settings['backends'] = allBackends()
139 else: 149 else:
140 while parameter != None: 150 while parameter != None:
141 values = list(itertools.takewhile(lambda x: not x.startswith('--'), parameters)) 151 values = list(itertools.takewhile(lambda x: not x.startswith('--'), parameters))
142 152
143 if parameter == "--backends": 153 if parameter == "--backends":
144 settings['backends'] = values 154 settings['backends'] = values
145 elif parameter == "--frontends": 155 elif parameter == "--frontends":
146 settings['frontends'] = values 156 settings['frontends'] = values
147 157
148 parameters = deque(itertools.dropwhile(lambda x: not x.startswith('--'), parameters)) 158 parameters = deque(itertools.dropwhile(lambda x: not x.startswith('--'), parameters))
149 if parameters: 159 if parameters:
150 parameter = parameters.popleft() 160 parameter = parameters.popleft()
151 else: 161 else:
152 parameter = None 162 parameter = None
153 163
154 if (not settings.has_key('versions')): 164 if (not settings.has_key('versions')):
155 usage("missing 'versions'") 165 usage("missing 'versions'")
156 if (not settings.has_key('frontends')): 166 if (not settings.has_key('frontends')):
157 usage("missing 'frontends'") 167 usage("missing 'frontends'")
158 if (not settings.has_key('backends')): 168 if (not settings.has_key('backends')):
159 usage("missing 'backends'") 169 usage("missing 'backends'")
160 170
161 build (settings) 171 build(settings, currentRepository)
162 172 else:
173 usage("Suggestions on how to call the 'build' script:")
163 174
164 175
165if __name__ == "__main__": 176if __name__ == "__main__":
166 main() 177 main()
diff --git a/scripts/builder/pythonBuilder.py b/scripts/builder/pythonBuilder.py
deleted file mode 100644
index a84598d..0000000
--- a/scripts/builder/pythonBuilder.py
+++ b/dev/null
@@ -1,14 +0,0 @@
1#!/usr/bin/env python
2# -*- coding: UTF-8 -*-
3
4from backendBuilder import BackendBuilder
5
6class PythonBuilder(BackendBuilder):
7
8 def name(self):
9 return "Python builder"
10
11 def relativePath(self):
12 return 'python'
13
14
diff --git a/scripts/builder/repository.py b/scripts/builder/repository.py
new file mode 100644
index 0000000..89db9a5
--- a/dev/null
+++ b/scripts/builder/repository.py
@@ -0,0 +1,75 @@
1#!/usr/bin/env python
2# -*- coding: UTF-8 -*-
3
4
5def repositoryWithPath (path):
6 try:
7 from dulwich.repo import Repo
8
9 repo = Repo(path)
10 result = GitRepository(repo, path)
11 except:
12 from mercurial import ui, hg
13
14 repo = hg.repository(ui.ui(), path)
15 result = HgRepository(repo, path)
16
17 return result
18
19
20#===================================================================
21
22
23class Repository(object):
24
25 def __init__ (self, repository, path):
26 self.repository = repository
27 self.path = path
28
29
30 def revision (self):
31 raise NotImplementedError()
32
33
34 def areTherePendingChanges (self):
35 raise NotImplementedError()
36
37
38 def version (self):
39 result = self.revision()
40 if self.areTherePendingChanges():
41 result = '>>> ' + result + ' <<<'
42
43 # print "VERSION: " + result
44 return result
45
46
47#===================================================================
48
49
50class GitRepository(Repository):
51
52 def revision (self):
53 return repository.refs['HEAD']
54
55
56 def areTherePendingChanges (self):
57 return repository.is_dirty()
58
59
60#===================================================================
61
62
63class HgRepository(Repository):
64 #http://mercurial.selenic.com/wiki/MercurialApi
65
66 def revision (self):
67 return 'hg:' + str(self.repository['tip'])
68
69
70 def areTherePendingChanges (self):
71 # TODO: FIXME: repository.status() does not report 'unknown(?)' files. :(
72 return not all(map(lambda fileList: len(fileList) == 0, self.repository.status()))
73
74
75#===================================================================