This request is superseded by
request 3333
(Show diff)
Overview
Request 3332 (superseded)
New release 1.6.9.3
- Created by mollekopf 3 months ago
- In state superseded
- Superseded by 3333
-
Open review for
Admin
-
Open review for
vanmeeuwen
-
Open review for
mollekopf
-
Open review for
kolab-developers
Submit package Kolab:16:Testing / roundcubema...fcontained to package Kolab:16 / roundcubemail-selfcontained
roundcubemail.spec
Changed
x
1
2
%global basedir %{name}-%{rc_version}%{?dash_rel_suffix}
3
4
Name: roundcubemail
5
-Version: 1.6.9.7
6
+Version: 1.6.9.3
7
8
Release: 4%{?dot_rel_suffix}%{?dist}
9
10
Dockerfile
Changed
8
1
2
FROM quay.io/almalinux/almalinux:9
3
-RUN dnf -y install php php-dom php-gd php-xml php-ldap php-mbstring php-cli php-json php-zip unzip bash git tar gzip wget curl-minimal npm which patch
4
+RUN dnf -y install php php-dom php-gd php-xml php-ldap php-mbstring php-cli php-json php-zip unzip bash git tar gzip wget curl-minimal npm which
5
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"; php composer-setup.php --install-dir=/usr/local/bin --filename=composer
6
ADD buildroundcubemailtarball.sh /buildroundcubemailtarball.sh
7
RUN id default || (groupadd -g 1000 default && useradd -d /home/default/ -u 1000 -g 1000 default)
8
buildroundcubemailtarball.sh
Changed
39
1
2
"license": "GPL-3.0+",
3
"config": {
4
"platform": {
5
- "php": "7.4"
6
+ "php": "7.2.24"
7
},
8
"allow-plugins": {
9
"roundcube/plugin-installer": true
10
11
}
12
,
13
"require": {
14
- "php": ">=7.4.0",
15
+ "php": ">=7.2.0",
16
"caxy/php-htmldiff": "0.1.9",
17
"pear/pear-core-minimal": "~1.10.1",
18
"pear/auth_sasl": "~1.1.0",
19
20
"pear/net_smtp": "~1.10.0",
21
"pear/crypt_gpg": "~1.6.3",
22
"pear/net_sieve": "~1.4.5",
23
- "roundcube/plugin-installer": "dev-master",
24
+ "roundcube/plugin-installer": "~0.2.0",
25
"roundcube/rtf-html-php": "~2.1",
26
- "roundcube/larry": "~1.6.0",
27
"masterminds/html5": "~2.7.0",
28
"endroid/qr-code": "~1.6.5",
29
"guzzlehttp/guzzle": "^6.5.5",
30
31
mv composer.json $NAME/composer.json
32
pushd $NAME
33
# Avoid running the roundcubemail plugin installer (we're not installing on this system)
34
-env SKIP_DB_INIT=true SKIP_DB_UPDATE=true composer install
35
+composer install
36
bin/install-jsdeps.sh
37
38
# Install build deps
39
debian.changelog
Changed
7
1
2
-roundcubemail (1.6.9.7-1~kolab1) unstable; urgency=low
3
+roundcubemail (1.6.9.3-1~kolab1) unstable; urgency=low
4
5
* Update to RC 1.6
6
7
roundcubemail-1.6.tar.gz/CHANGELOG.md
Changed
9
1
2
3
## Unreleased
4
5
-- IMAP: Partial support for ANNOTATE-EXPERIMENT-1 extension (RFC 5257)
6
- OAuth: Support standard authentication with short-living password received with OIDC token (#9530)
7
- Fix PHP warnings (#9616, #9611)
8
- Fix whitespace handling in vCard line continuation (#9637)
9
roundcubemail-1.6.tar.gz/composer.json
Changed
30
1
2
"license": "GPL-3.0+",
3
"config": {
4
"platform": {
5
- "php": "7.4"
6
+ "php": "7.2.24"
7
},
8
"allow-plugins": {
9
"roundcube/plugin-installer": true
10
11
}
12
,
13
"require": {
14
- "php": ">=7.4.0",
15
+ "php": ">=7.2.0",
16
"caxy/php-htmldiff": "0.1.9",
17
"pear/pear-core-minimal": "~1.10.1",
18
"pear/auth_sasl": "~1.1.0",
19
20
"pear/net_smtp": "~1.10.0",
21
"pear/crypt_gpg": "~1.6.3",
22
"pear/net_sieve": "~1.4.5",
23
- "roundcube/plugin-installer": "dev-master",
24
+ "roundcube/plugin-installer": "~0.2.0",
25
"roundcube/rtf-html-php": "~2.1",
26
- "roundcube/larry": "~1.6.0",
27
"masterminds/html5": "~2.7.0",
28
"endroid/qr-code": "~1.6.5",
29
"guzzlehttp/guzzle": "^6.5.5",
30
roundcubemail-1.6.tar.gz/composer.lock
Changed
485
1
2
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
3
"This file is @generated automatically"
4
,
5
- "content-hash": "85451a37b3f0077caeb7d96fe7c31367",
6
+ "content-hash": "c6a250ad85fd067f9d235d5d523ffe44",
7
"packages":
8
{
9
"name": "beberlei/assert",
10
11
},
12
{
13
"name": "enygma/yubikey",
14
- "version": "3.9",
15
+ "version": "3.3",
16
"source": {
17
"type": "git",
18
"url": "https://github.com/enygma/yubikey.git",
19
- "reference": "9eaa725ecc200fbb930f51c344adb4b272d87ae6"
20
+ "reference": "2c2502dd85ed3d13c08fbb8a3eef516fdef58ec6"
21
},
22
"dist": {
23
"type": "zip",
24
- "url": "https://api.github.com/repos/enygma/yubikey/zipball/9eaa725ecc200fbb930f51c344adb4b272d87ae6",
25
- "reference": "9eaa725ecc200fbb930f51c344adb4b272d87ae6",
26
+ "url": "https://api.github.com/repos/enygma/yubikey/zipball/2c2502dd85ed3d13c08fbb8a3eef516fdef58ec6",
27
+ "reference": "2c2502dd85ed3d13c08fbb8a3eef516fdef58ec6",
28
"shasum": ""
29
},
30
"require": {
31
- "php": ">=7.4"
32
+ "php": ">=5.3.1"
33
},
34
"require-dev": {
35
"codeclimate/php-test-reporter": "dev-master",
36
37
,
38
"support": {
39
"issues": "https://github.com/enygma/yubikey/issues",
40
- "source": "https://github.com/enygma/yubikey/tree/3.9"
41
+ "source": "https://github.com/enygma/yubikey/tree/master"
42
},
43
- "time": "2024-12-02T17:08:18+00:00"
44
+ "time": "2018-03-08T20:38:39+00:00"
45
},
46
{
47
"name": "ezyang/htmlpurifier",
48
49
},
50
{
51
"name": "kolab/kolab_tags",
52
- "version": "3.5.3",
53
+ "version": "3.5.2",
54
"dist": {
55
"type": "path",
56
"url": "/tmp/roundcubemail-1.6/roundcubemail-plugins-kolab-latest/plugins/kolab_tags",
57
- "reference": "177159cad2b1c822d9fbf509fd2c04c62d3f02b7"
58
+ "reference": "62ffa5279d9f351941be6b23b0d0478aeff91bfd"
59
},
60
"require": {
61
"kolab/libkolab": ">=3.4.0",
62
63
"time": "2019-03-08T08:55:37+00:00"
64
},
65
{
66
- "name": "roundcube/larry",
67
- "version": "1.6.1",
68
- "source": {
69
- "type": "git",
70
- "url": "https://github.com/roundcube/larry.git",
71
- "reference": "6a7c98a5285812a2f226fce6230d1f762386fb68"
72
- },
73
- "dist": {
74
- "type": "zip",
75
- "url": "https://api.github.com/repos/roundcube/larry/zipball/6a7c98a5285812a2f226fce6230d1f762386fb68",
76
- "reference": "6a7c98a5285812a2f226fce6230d1f762386fb68",
77
- "shasum": ""
78
- },
79
- "require": {
80
- "roundcube/plugin-installer": ">=0.3.0"
81
- },
82
- "type": "roundcube-skin",
83
- "notification-url": "https://packagist.org/downloads/",
84
- "license":
85
- "CC-BY-SA-3.0"
86
- ,
87
- "description": "The Larry theme for Roundcube Webmail",
88
- "support": {
89
- "issues": "https://github.com/roundcube/larry/issues",
90
- "source": "https://github.com/roundcube/larry/tree/1.6.1"
91
- },
92
- "time": "2023-07-11T16:26:44+00:00"
93
- },
94
- {
95
"name": "roundcube/plugin-installer",
96
- "version": "dev-master",
97
+ "version": "0.2.0",
98
"source": {
99
"type": "git",
100
"url": "https://github.com/roundcube/plugin-installer.git",
101
- "reference": "c4db5c9da438a5802925c895c90cd46db7503437"
102
+ "reference": "10148d050ee2db019d83113a479fb7716fd04d48"
103
},
104
"dist": {
105
"type": "zip",
106
- "url": "https://api.github.com/repos/roundcube/plugin-installer/zipball/c4db5c9da438a5802925c895c90cd46db7503437",
107
- "reference": "c4db5c9da438a5802925c895c90cd46db7503437",
108
+ "url": "https://api.github.com/repos/roundcube/plugin-installer/zipball/10148d050ee2db019d83113a479fb7716fd04d48",
109
+ "reference": "10148d050ee2db019d83113a479fb7716fd04d48",
110
"shasum": ""
111
},
112
"require": {
113
- "composer-plugin-api": "^2.1",
114
- "php": ">=7.3 <8.5",
115
- "roundcube/roundcubemail": "*"
116
+ "php": ">=5.3.0"
117
},
118
"require-dev": {
119
- "composer/composer": "^2.1",
120
- "ergebnis/composer-normalize": "^2.13",
121
- "friendsofphp/php-cs-fixer": "^3.0",
122
- "phpstan/extension-installer": "^1.1",
123
- "phpstan/phpstan": "^1.2",
124
- "phpstan/phpstan-deprecation-rules": "^1.0",
125
- "phpstan/phpstan-strict-rules": "^1.3"
126
+ "composer/composer": "*"
127
},
128
- "default-branch": true,
129
- "type": "composer-plugin",
130
+ "bin":
131
+ "src/bin/rcubeinitdb.sh"
132
+ ,
133
+ "type": "composer-installer",
134
"extra": {
135
- "class":
136
- "Roundcube\\Composer\\RoundcubeInstaller"
137
-
138
+ "class": "Roundcube\\Composer\\PluginInstaller"
139
},
140
"autoload": {
141
- "psr-4": {
142
- "Roundcube\\Composer\\": "src/"
143
+ "psr-0": {
144
+ "Roundcube\\Composer": "src/"
145
}
146
},
147
"notification-url": "https://packagist.org/downloads/",
148
"license":
149
- "GPL-3.0-or-later"
150
+ "GPL-3.0+"
151
,
152
"authors":
153
{
154
155
{
156
"name": "Till Klampaeckel",
157
"email": "till@php.net"
158
- },
159
- {
160
- "name": "Philip Weir",
161
- "email": "roundcube@tehinterweb.co.uk"
162
}
163
,
164
- "description": "A composer-installer for Roundcube plugins and skins.",
165
+ "description": "A composer-installer for Roundcube plugins.",
166
"support": {
167
"issues": "https://github.com/roundcube/plugin-installer/issues",
168
- "source": "https://github.com/roundcube/plugin-installer/tree/0.3.10"
169
+ "source": "https://github.com/roundcube/plugin-installer/tree/0.2.0"
170
},
171
- "time": "2025-01-22T12:23:56+00:00"
172
+ "time": "2020-11-02T20:04:07+00:00"
173
},
174
{
175
"name": "roundcube/rtf-html-php",
176
177
},
178
{
179
"name": "sabre/uri",
180
- "version": "2.3.4",
181
+ "version": "2.2.4",
182
"source": {
183
"type": "git",
184
"url": "https://github.com/sabre-io/uri.git",
185
- "reference": "b76524c22de90d80ca73143680a8e77b1266c291"
186
+ "reference": "c0c9af9f7754e60a49ebd760e1708adc6d1510c0"
187
},
188
"dist": {
189
"type": "zip",
190
- "url": "https://api.github.com/repos/sabre-io/uri/zipball/b76524c22de90d80ca73143680a8e77b1266c291",
191
- "reference": "b76524c22de90d80ca73143680a8e77b1266c291",
192
+ "url": "https://api.github.com/repos/sabre-io/uri/zipball/c0c9af9f7754e60a49ebd760e1708adc6d1510c0",
193
+ "reference": "c0c9af9f7754e60a49ebd760e1708adc6d1510c0",
194
"shasum": ""
195
},
196
"require": {
197
- "php": "^7.4 || ^8.0"
198
+ "php": "^7.1 || ^8.0"
199
},
200
"require-dev": {
201
- "friendsofphp/php-cs-fixer": "^3.63",
202
- "phpstan/extension-installer": "^1.4",
203
- "phpstan/phpstan": "^1.12",
204
- "phpstan/phpstan-phpunit": "^1.4",
205
- "phpstan/phpstan-strict-rules": "^1.6",
206
- "phpunit/phpunit": "^9.6"
207
+ "friendsofphp/php-cs-fixer": "~2.19.3",
208
+ "phpstan/phpstan": "^0.12",
209
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
210
},
211
"type": "library",
212
"autoload": {
213
214
"issues": "https://github.com/sabre-io/uri/issues",
215
"source": "https://github.com/fruux/sabre-uri"
216
},
217
- "time": "2024-08-27T12:18:16+00:00"
218
+ "time": "2022-09-19T12:25:28+00:00"
219
},
220
{
221
"name": "sabre/vobject",
222
223
,
224
"packages-dev":
225
{
226
- "name": "doctrine/deprecations",
227
- "version": "1.1.4",
228
- "source": {
229
- "type": "git",
230
- "url": "https://github.com/doctrine/deprecations.git",
231
- "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9"
232
- },
233
- "dist": {
234
- "type": "zip",
235
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9",
236
- "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9",
237
- "shasum": ""
238
- },
239
- "require": {
240
- "php": "^7.1 || ^8.0"
241
- },
242
- "require-dev": {
243
- "doctrine/coding-standard": "^9 || ^12",
244
- "phpstan/phpstan": "1.4.10 || 2.0.3",
245
- "phpstan/phpstan-phpunit": "^1.0 || ^2",
246
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
247
- "psr/log": "^1 || ^2 || ^3"
248
- },
249
- "suggest": {
250
- "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
251
- },
252
- "type": "library",
253
- "autoload": {
254
- "psr-4": {
255
- "Doctrine\\Deprecations\\": "src"
256
- }
257
- },
258
- "notification-url": "https://packagist.org/downloads/",
259
- "license":
260
- "MIT"
261
- ,
262
- "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
263
- "homepage": "https://www.doctrine-project.org/",
264
- "support": {
265
- "issues": "https://github.com/doctrine/deprecations/issues",
266
- "source": "https://github.com/doctrine/deprecations/tree/1.1.4"
267
- },
268
- "time": "2024-12-07T21:18:45+00:00"
269
- },
270
- {
271
"name": "doctrine/instantiator",
272
"version": "1.5.0",
273
"source": {
274
275
},
276
{
277
"name": "phpdocumentor/reflection-docblock",
278
- "version": "5.6.1",
279
+ "version": "5.3.0",
280
"source": {
281
"type": "git",
282
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
283
- "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8"
284
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
285
},
286
"dist": {
287
"type": "zip",
288
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8",
289
- "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8",
290
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
291
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
292
"shasum": ""
293
},
294
"require": {
295
- "doctrine/deprecations": "^1.1",
296
"ext-filter": "*",
297
- "php": "^7.4 || ^8.0",
298
+ "php": "^7.2 || ^8.0",
299
"phpdocumentor/reflection-common": "^2.2",
300
- "phpdocumentor/type-resolver": "^1.7",
301
- "phpstan/phpdoc-parser": "^1.7|^2.0",
302
+ "phpdocumentor/type-resolver": "^1.3",
303
"webmozart/assert": "^1.9.1"
304
},
305
"require-dev": {
306
- "mockery/mockery": "~1.3.5 || ~1.6.0",
307
- "phpstan/extension-installer": "^1.1",
308
- "phpstan/phpstan": "^1.8",
309
- "phpstan/phpstan-mockery": "^1.1",
310
- "phpstan/phpstan-webmozart-assert": "^1.2",
311
- "phpunit/phpunit": "^9.5",
312
- "psalm/phar": "^5.26"
313
+ "mockery/mockery": "~1.3.2",
314
+ "psalm/phar": "^4.8"
315
},
316
"type": "library",
317
"extra": {
318
319
},
320
{
321
"name": "Jaap van Otterdijk",
322
- "email": "opensource@ijaap.nl"
323
+ "email": "account@ijaap.nl"
324
}
325
,
326
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
327
"support": {
328
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
329
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1"
330
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
331
},
332
- "time": "2024-12-07T09:39:29+00:00"
333
+ "time": "2021-10-19T17:43:47+00:00"
334
},
335
{
336
"name": "phpdocumentor/type-resolver",
337
- "version": "1.10.0",
338
+ "version": "1.6.1",
339
"source": {
340
"type": "git",
341
"url": "https://github.com/phpDocumentor/TypeResolver.git",
342
- "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a"
343
+ "reference": "77a32518733312af16a44300404e945338981de3"
344
},
345
"dist": {
346
"type": "zip",
347
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a",
348
- "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a",
349
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
350
+ "reference": "77a32518733312af16a44300404e945338981de3",
351
"shasum": ""
352
},
353
"require": {
354
- "doctrine/deprecations": "^1.0",
355
- "php": "^7.3 || ^8.0",
356
- "phpdocumentor/reflection-common": "^2.0",
357
- "phpstan/phpdoc-parser": "^1.18|^2.0"
358
+ "php": "^7.2 || ^8.0",
359
+ "phpdocumentor/reflection-common": "^2.0"
360
},
361
"require-dev": {
362
"ext-tokenizer": "*",
363
- "phpbench/phpbench": "^1.2",
364
- "phpstan/extension-installer": "^1.1",
365
- "phpstan/phpstan": "^1.8",
366
- "phpstan/phpstan-phpunit": "^1.1",
367
- "phpunit/phpunit": "^9.5",
368
- "rector/rector": "^0.13.9",
369
- "vimeo/psalm": "^4.25"
370
+ "psalm/phar": "^4.8"
371
},
372
"type": "library",
373
"extra": {
374
375
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
376
"support": {
377
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
378
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0"
379
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
380
},
381
- "time": "2024-11-09T15:12:26+00:00"
382
+ "time": "2022-03-15T21:29:03+00:00"
383
},
384
{
385
"name": "phpspec/prophecy",
386
387
"time": "2020-03-05T15:02:03+00:00"
388
},
389
{
390
- "name": "phpstan/phpdoc-parser",
391
- "version": "2.0.0",
392
- "source": {
393
- "type": "git",
394
- "url": "https://github.com/phpstan/phpdoc-parser.git",
395
- "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299"
396
- },
397
- "dist": {
398
- "type": "zip",
399
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299",
400
- "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299",
401
- "shasum": ""
402
- },
403
- "require": {
404
- "php": "^7.4 || ^8.0"
405
- },
406
- "require-dev": {
407
- "doctrine/annotations": "^2.0",
408
- "nikic/php-parser": "^5.3.0",
409
- "php-parallel-lint/php-parallel-lint": "^1.2",
410
- "phpstan/extension-installer": "^1.0",
411
- "phpstan/phpstan": "^2.0",
412
- "phpstan/phpstan-phpunit": "^2.0",
413
- "phpstan/phpstan-strict-rules": "^2.0",
414
- "phpunit/phpunit": "^9.6",
415
- "symfony/process": "^5.2"
416
- },
417
- "type": "library",
418
- "autoload": {
419
- "psr-4": {
420
- "PHPStan\\PhpDocParser\\":
421
- "src/"
422
-
423
- }
424
- },
425
- "notification-url": "https://packagist.org/downloads/",
426
- "license":
427
- "MIT"
428
- ,
429
- "description": "PHPDoc parser with support for nullable, intersection and generic types",
430
- "support": {
431
- "issues": "https://github.com/phpstan/phpdoc-parser/issues",
432
- "source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.0"
433
- },
434
- "time": "2024-10-13T11:29:49+00:00"
435
- },
436
- {
437
"name": "phpstan/phpstan",
438
- "version": "1.12.16",
439
+ "version": "1.12.12",
440
"source": {
441
"type": "git",
442
"url": "https://github.com/phpstan/phpstan.git",
443
- "reference": "e0bb5cb78545aae631220735aa706eac633a6be9"
444
+ "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0"
445
},
446
"dist": {
447
"type": "zip",
448
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e0bb5cb78545aae631220735aa706eac633a6be9",
449
- "reference": "e0bb5cb78545aae631220735aa706eac633a6be9",
450
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0",
451
+ "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0",
452
"shasum": ""
453
},
454
"require": {
455
456
"type": "github"
457
}
458
,
459
- "time": "2025-01-21T14:50:05+00:00"
460
+ "time": "2024-11-28T22:13:23+00:00"
461
},
462
{
463
"name": "phpunit/php-code-coverage",
464
465
"minimum-stability": "stable",
466
"stability-flags": {
467
"desarrolla2/cache": 20,
468
- "kolab/net_ldap3": 20,
469
- "roundcube/plugin-installer": 20
470
+ "kolab/net_ldap3": 20
471
},
472
"prefer-stable": false,
473
"prefer-lowest": false,
474
"platform": {
475
- "php": ">=7.4.0"
476
+ "php": ">=7.2.0"
477
},
478
"platform-dev": {},
479
"platform-overrides": {
480
- "php": "7.4"
481
+ "php": "7.2.24"
482
},
483
"plugin-api-version": "2.6.0"
484
}
485
roundcubemail-1.6.tar.gz/logs/errors.log
Added
20
1
2
+17-Dec-2024 09:52:27 UTC PHP Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_FOUND_ROWS in /tmp/roundcubemail-1.6/roundcubemail-1.6/program/lib/Roundcube/db/mysql.php:129
3
+Stack trace:
4
+#0 /tmp/roundcubemail-1.6/roundcubemail-1.6/program/lib/Roundcube/rcube_db.php(168): rcube_db_mysql->dsn_options()
5
+#1 /tmp/roundcubemail-1.6/roundcubemail-1.6/program/lib/Roundcube/rcube_db.php(154): rcube_db->conn_create()
6
+#2 /tmp/roundcubemail-1.6/roundcubemail-1.6/program/lib/Roundcube/rcube_db.php(259): rcube_db->dsn_connect()
7
+#3 /tmp/roundcubemail-1.6/roundcubemail-1.6/vendor/roundcube/plugin-installer/src/bin/rcubeinitdb.sh(30): rcube_db->db_connect()
8
+#4 /tmp/roundcubemail-1.6/roundcubemail-1.6/vendor/bin/rcubeinitdb.sh(119): include('...')
9
+#5 {main}
10
+ thrown in /tmp/roundcubemail-1.6/roundcubemail-1.6/program/lib/Roundcube/db/mysql.php on line 129
11
+17-Dec-2024 09:52:27 UTC PHP Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_FOUND_ROWS in /tmp/roundcubemail-1.6/roundcubemail-1.6/program/lib/Roundcube/db/mysql.php:129
12
+Stack trace:
13
+#0 /tmp/roundcubemail-1.6/roundcubemail-1.6/program/lib/Roundcube/rcube_db.php(168): rcube_db_mysql->dsn_options()
14
+#1 /tmp/roundcubemail-1.6/roundcubemail-1.6/program/lib/Roundcube/rcube_db.php(154): rcube_db->conn_create()
15
+#2 /tmp/roundcubemail-1.6/roundcubemail-1.6/program/lib/Roundcube/rcube_db.php(259): rcube_db->dsn_connect()
16
+#3 /tmp/roundcubemail-1.6/roundcubemail-1.6/vendor/roundcube/plugin-installer/src/bin/rcubeinitdb.sh(30): rcube_db->db_connect()
17
+#4 /tmp/roundcubemail-1.6/roundcubemail-1.6/vendor/bin/rcubeinitdb.sh(119): include('...')
18
+#5 {main}
19
+ thrown in /tmp/roundcubemail-1.6/roundcubemail-1.6/program/lib/Roundcube/db/mysql.php on line 129
20
roundcubemail-1.6.tar.gz/plugins/kolab_tags/README
Deleted
73
1
2
-A mail tags module for Roundcube
3
---------------------------------------
4
-
5
-This plugin currently supports a few storage backends:
6
-- "database": SQL database
7
-- "kolab": Kolab Groupware v3 Server
8
-- "annotate": IMAP server with METADATA and ANNOTATE-EXPERIMENT-1 support (e.g. Cyrus IMAP)
9
-
10
-
11
-REQUIREMENTS
12
-------------
13
-
14
-Some functions are shared with other plugins and therefore being moved to
15
-library plugins. Thus in order to run the kolab_tags plugin, you also need the
16
-following plugins installed:
17
-
18
-* kolab/libkolab 1
19
-
20
-
21
-INSTALLATION
22
-------------
23
-
24
-For a manual installation of the plugin (and its dependencies),
25
-execute the following steps. This will set it up with the database backend
26
-driver.
27
-
28
-1. Get the source from git
29
-
30
- $ cd /tmp
31
- $ git clone https://git.kolab.org/diffusion/RPK/roundcubemail-plugins-kolab.git
32
- $ cd /<path-to-roundcube>/plugins
33
- $ cp -r /tmp/roundcubemail-plugins-kolab/plugins/kolab_tags .
34
- $ cp -r /tmp/roundcubemail-plugins-kolab/plugins/libkolab .
35
-
36
-2. Create kolab_tags plugin configuration
37
-
38
- $ cd kolab_tags/
39
- $ cp config.inc.php.dist config.inc.php
40
- $ edit config.inc.php
41
-
42
-3. Initialize the plugin database tables
43
-
44
- $ cd ../../
45
- $ bin/initdb.sh --dir=plugins/kolab_tags/drivers/database/SQL
46
-
47
-4. Build css styles for the Elastic skin (if needed)
48
-
49
- $ lessc --relative-urls -x plugins/libkolab/skins/elastic/libkolab.less > plugins/libkolab/skins/elastic/libkolab.min.css
50
-
51
-5. Enable the plugin
52
-
53
- $ edit config/config.inc.php
54
-
55
-Add 'kolab_tags' to the list of active plugins:
56
-
57
- $config'plugins' =
58
- (...)
59
- 'kolab_tags',
60
- ;
61
-
62
-
63
-IMPORTANT
64
----------
65
-
66
-This plugin doesn't work with the Classic skin of Roundcube because no
67
-templates are available for that skin.
68
-
69
-Use Roundcube `skins_allowed` option to limit skins available to the user
70
-or remove incompatible skins from the skins folder.
71
-
72
-1 https://git.kolab.org/diffusion/RPK/
73
roundcubemail-1.6.tar.gz/plugins/kolab_tags/composer.json
Changed
10
1
2
"description": "Email tags plugin",
3
"homepage": "https://git.kolab.org/diffusion/RPK/",
4
"license": "AGPLv3",
5
- "version": "3.5.3",
6
+ "version": "3.5.2",
7
"authors":
8
{
9
"name": "Aleksander Machniak",
10
roundcubemail-1.6.tar.gz/plugins/kolab_tags/config.inc.php
Deleted
6
1
2
-<?php
3
-
4
-// Storage backend type (database, kolab, annotate)
5
-$config'kolab_tags_driver' = 'kolab';
6
roundcubemail-1.6.tar.gz/plugins/kolab_tags/config.inc.php.dist
Deleted
6
1
2
-<?php
3
-
4
-// Storage backend type (database, kolab, annotate)
5
-$config'kolab_tags_driver' = 'kolab';
6
roundcubemail-1.6.tar.gz/plugins/kolab_tags/drivers
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/plugins/kolab_tags/drivers/DriverInterface.php
Deleted
104
1
2
-<?php
3
-
4
-/**
5
- * Kolab Tags backend driver interface
6
- *
7
- * @author Aleksander Machniak <machniak@kolabsys.com>
8
- *
9
- * Copyright (C) 2024, Apheleia IT AG <contact@apheleia-it.ch>
10
- *
11
- * This program is free software: you can redistribute it and/or modify
12
- * it under the terms of the GNU Affero General Public License as
13
- * published by the Free Software Foundation, either version 3 of the
14
- * License, or (at your option) any later version.
15
- *
16
- * This program is distributed in the hope that it will be useful,
17
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- * GNU Affero General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU Affero General Public License
22
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
23
- */
24
-
25
-namespace KolabTags\Drivers;
26
-
27
-interface DriverInterface
28
-{
29
- /**
30
- * Tags list
31
- *
32
- * @param array $filter Search filter
33
- *
34
- * @return array List of tags
35
- */
36
- public function list_tags($filter = );
37
-
38
- /**
39
- * Create tag object
40
- *
41
- * @param array $tag Tag data
42
- *
43
- * @return false|array Tag data on success, False on failure
44
- */
45
- public function create($tag);
46
-
47
- /**
48
- * Update tag object
49
- *
50
- * @param array $tag Tag data
51
- *
52
- * @return false|array Tag data on success, False on failure
53
- */
54
- public function update($tag);
55
-
56
- /**
57
- * Remove tag object
58
- *
59
- * @param string $uid Object unique identifier
60
- *
61
- * @return bool True on success, False on failure
62
- */
63
- public function remove($uid);
64
-
65
- /**
66
- * Build IMAP SEARCH criteria for mail messages search (per-folder)
67
- *
68
- * @param array $tag Tag data
69
- * @param array $folders List of folders to search in
70
- *
71
- * @return array<string> IMAP SEARCH criteria per-folder
72
- */
73
- public function members_search_criteria($tag, $folders);
74
-
75
- /**
76
- * Returns tag assignments with multiple members
77
- *
78
- * @param array<\rcube_message_header> $messages Mail messages
79
- *
80
- * @return array<string, array> Tags assigned
81
- */
82
- public function members_tags($messages);
83
-
84
- /**
85
- * Add mail members to a tag
86
- *
87
- * @param array $tag Tag object
88
- * @param array $messages List of messages in rcmail::get_uids() output format
89
- *
90
- * @return bool True on success, False on error
91
- */
92
- public function add_tag_members($tag, $messages);
93
-
94
- /**
95
- * Remove mail members from a tag
96
- *
97
- * @param array $tag Tag object
98
- * @param array $messages List of messages in rcmail::get_uids() output format
99
- *
100
- * @return bool True on success, False on error
101
- */
102
- public function remove_tag_members($tag, $messages);
103
-}
104
roundcubemail-1.6.tar.gz/plugins/kolab_tags/drivers/annotate
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/plugins/kolab_tags/drivers/annotate/Driver.php
Deleted
198
1
2
-<?php
3
-
4
-/**
5
- * Kolab Tags backend driver for IMAP ANNOTATE (and METADATA). E.g. Kolab4.
6
- *
7
- * @author Aleksander Machniak <machniak@apheleia-it.ch>
8
- *
9
- * Copyright (C) 2024, Apheleia IT AG <contact@apheleia-it.ch>
10
- *
11
- * This program is free software: you can redistribute it and/or modify
12
- * it under the terms of the GNU Affero General Public License as
13
- * published by the Free Software Foundation, either version 3 of the
14
- * License, or (at your option) any later version.
15
- *
16
- * This program is distributed in the hope that it will be useful,
17
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- * GNU Affero General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU Affero General Public License
22
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
23
- */
24
-
25
-namespace KolabTags\Drivers\Annotate;
26
-
27
-use KolabTags\Drivers\DriverInterface;
28
-use kolab_storage_tags;
29
-use rcube;
30
-use rcube_imap_generic;
31
-use rcube_message_header;
32
-
33
-class Driver implements DriverInterface
34
-{
35
- public $immutableName = true;
36
-
37
- protected $engine;
38
-
39
- /**
40
- * Class constructor
41
- */
42
- public function __construct()
43
- {
44
- $this->engine = new kolab_storage_tags();
45
- }
46
-
47
- /**
48
- * Tags list
49
- *
50
- * @param array $filter Search filter
51
- *
52
- * @return array List of tags
53
- */
54
- public function list_tags($filter = )
55
- {
56
- return $this->engine->list($filter);
57
- }
58
-
59
- /**
60
- * Create tag object
61
- *
62
- * @param array $tag Tag data
63
- *
64
- * @return false|array Tag data on success, False on failure
65
- */
66
- public function create($tag)
67
- {
68
- $tag'uid' = $this->engine->create($tag);
69
-
70
- if (empty($tag'uid')) {
71
- return false;
72
- }
73
-
74
- return $tag;
75
- }
76
-
77
- /**
78
- * Update tag object
79
- *
80
- * @param array $tag Tag data
81
- *
82
- * @return false|array Tag data on success, False on failure
83
- */
84
- public function update($tag)
85
- {
86
- $success = $this->engine->update($tag);
87
-
88
- return $success ? $tag : false;
89
- }
90
-
91
- /**
92
- * Remove tag object
93
- *
94
- * @param string $uid Object unique identifier
95
- *
96
- * @return bool True on success, False on failure
97
- */
98
- public function remove($uid)
99
- {
100
- return $this->engine->delete($uid);
101
- }
102
-
103
- /**
104
- * Build IMAP SEARCH criteria for mail messages search (per-folder)
105
- *
106
- * @param array $tag Tag data
107
- * @param array $folders List of folders to search in
108
- *
109
- * @return array<string> IMAP SEARCH criteria per-folder
110
- */
111
- public function members_search_criteria($tag, $folders)
112
- {
113
- $result = ;
114
- foreach ($folders as $folder) {
115
- $result$folder = $this->engine->imap_search_criteria($tag'name');
116
- }
117
-
118
- return $result;
119
- }
120
-
121
- /**
122
- * Returns tag assignments with multiple members
123
- *
124
- * @param array<rcube_message_header> $messages Mail messages
125
- *
126
- * @return array<string, array> Tags assigned
127
- */
128
- public function members_tags($messages)
129
- {
130
- return $this->engine->members_tags($messages);
131
- }
132
-
133
- /**
134
- * Add mail members to a tag
135
- *
136
- * @param array $tag Tag object
137
- * @param array $messages List of messages in rcmail::get_uids() output format
138
- *
139
- * @return bool True on success, False on error
140
- */
141
- public function add_tag_members($tag, $messages)
142
- {
143
- $storage = rcube::get_instance()->get_storage();
144
- $members = ;
145
-
146
- foreach ($messages as $mbox => $uids) {
147
- if ($uids === '*') {
148
- $index = $storage->index($mbox, null, null, true);
149
- $uids = $index->get();
150
- }
151
-
152
- if (empty($uids)) {
153
- continue;
154
- }
155
-
156
- $result = $this->engine->add_members($tag'uid', $mbox, $uids);
157
-
158
- if (!$result) {
159
- return false;
160
- }
161
- }
162
-
163
- return true;
164
- }
165
-
166
- /**
167
- * Remove mail members from a tag
168
- *
169
- * @param array $tag Tag object
170
- * @param array $messages List of messages in rcmail::get_uids() output format
171
- *
172
- * @return bool True on success, False on error
173
- */
174
- public function remove_tag_members($tag, $messages)
175
- {
176
- $storage = rcube::get_instance()->get_storage();
177
-
178
- foreach ($messages as $mbox => $uids) {
179
- if ($uids === '*') {
180
- $index = $storage->index($mbox, null, null, true);
181
- $uids = $index->get();
182
- }
183
-
184
- if (empty($uids)) {
185
- continue;
186
- }
187
-
188
- $result = $this->engine->remove_members($tag'uid', $mbox, $uids);
189
-
190
- if (!$result) {
191
- return false;
192
- }
193
- }
194
-
195
- return true;
196
- }
197
-}
198
roundcubemail-1.6.tar.gz/plugins/kolab_tags/drivers/database
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/plugins/kolab_tags/drivers/database/Driver.php
Deleted
396
1
2
-<?php
3
-
4
-/**
5
- * Kolab Tags backend driver for SQL database.
6
- *
7
- * @author Aleksander Machniak <machniak@apheleia-it.ch>
8
- *
9
- * Copyright (C) 2024, Apheleia IT AG <contact@apheleia-it.ch>
10
- *
11
- * This program is free software: you can redistribute it and/or modify
12
- * it under the terms of the GNU Affero General Public License as
13
- * published by the Free Software Foundation, either version 3 of the
14
- * License, or (at your option) any later version.
15
- *
16
- * This program is distributed in the hope that it will be useful,
17
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- * GNU Affero General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU Affero General Public License
22
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
23
- */
24
-
25
-namespace KolabTags\Drivers\Database;
26
-
27
-use KolabTags\Drivers\DriverInterface;
28
-use kolab_storage_cache;
29
-use kolab_storage_config;
30
-use rcube;
31
-use rcube_imap_generic;
32
-use rcube_message_header;
33
-
34
-class Driver implements DriverInterface
35
-{
36
- public $immutableName = false;
37
-
38
- private $members_table = 'kolab_tag_members';
39
- private $tags_table = 'kolab_tags';
40
- private $tag_cols = 'name', 'color';
41
-
42
-
43
- /**
44
- * Tags list
45
- *
46
- * @param array $filter Search filter
47
- *
48
- * @return array List of tags
49
- */
50
- public function list_tags($filter = )
51
- {
52
- $rcube = rcube::get_instance();
53
- $db = $rcube->get_dbh();
54
- $user_id = $rcube->get_user_id();
55
-
56
- // Parse filter, convert 'uid' into 'id'
57
- foreach ($filter as $idx => $record) {
58
- if ($record0 == 'uid') {
59
- $filter$idx0 = 'id';
60
- }
61
- }
62
-
63
- $where = kolab_storage_cache::sql_where($filter);
64
-
65
- $query = $db->query("SELECT * FROM `{$this->tags_table}` WHERE `user_id` = {$user_id}" . $where);
66
-
67
- $result = ;
68
- while ($tag = $db->fetch_assoc($query)) {
69
- $tag'uid' = $tag'id'; // the API expects 'uid' property
70
- unset($tag'id');
71
- $result = $tag;
72
- }
73
-
74
- return $result;
75
- }
76
-
77
- /**
78
- * Create tag object
79
- *
80
- * @param array $tag Tag data
81
- *
82
- * @return false|array Tag data on success, False on failure
83
- */
84
- public function create($tag)
85
- {
86
- $rcube = rcube::get_instance();
87
- $db = $rcube->get_dbh();
88
- $user_id = $rcube->get_user_id();
89
- $insert = ;
90
-
91
- foreach ($this->tag_cols as $col) {
92
- if (isset($tag$col)) {
93
- $insert$db->quoteIdentifier($col) = $db->quote($tag$col);
94
- }
95
- }
96
-
97
- if (empty($insert)) {
98
- return false;
99
- }
100
-
101
- $now = new \DateTime('now', new \DateTimeZone('UTC'));
102
-
103
- $insert'user_id' = $user_id;
104
- $insert'created' = $insert'updated' = $now->format("'Y-m-d H:i:s'");
105
-
106
- $result = $db->query(
107
- "INSERT INTO `{$this->tags_table}`"
108
- . " (" . implode(', ', array_keys($insert)) . ")"
109
- . " VALUES(" . implode(', ', array_values($insert)) . ")"
110
- );
111
-
112
- $tag'uid' = $db->insert_id($this->tags_table);
113
-
114
- if (empty($tag'uid')) {
115
- return false;
116
- }
117
-
118
- return $tag;
119
- }
120
-
121
- /**
122
- * Update tag object
123
- *
124
- * @param array $tag Tag data
125
- *
126
- * @return false|array Tag data on success, False on failure
127
- */
128
- public function update($tag)
129
- {
130
- $rcube = rcube::get_instance();
131
- $db = $rcube->get_dbh();
132
- $user_id = $rcube->get_user_id();
133
- $update = ;
134
-
135
- foreach ($this->tag_cols as $col) {
136
- if (isset($tag$col)) {
137
- $update = $db->quoteIdentifier($col) . ' = ' . $db->quote($tag$col);
138
- }
139
- }
140
-
141
- if (!empty($update)) {
142
- $now = new \DateTime('now', new \DateTimeZone('UTC'));
143
- $update = '`updated` = ' . $db->quote($now->format('Y-m-d H:i:s'));
144
- if (isset($tag'name')) {
145
- $update = '`modseq` = `modseq` + (CASE WHEN name <> ' . $db->quote($tag'name') . ' THEN 1 ELSE 0 END)';
146
- }
147
-
148
- $result = $db->query("UPDATE `{$this->tags_table}` SET " . implode(', ', $update)
149
- . " WHERE `id` = ? AND `user_id` = ?", $tag'uid', $user_id);
150
-
151
- if ($result === false) {
152
- return false;
153
- }
154
- }
155
-
156
- return $tag;
157
- }
158
-
159
- /**
160
- * Remove tag object
161
- *
162
- * @param string $uid Object unique identifier
163
- *
164
- * @return bool True on success, False on failure
165
- */
166
- public function remove($uid)
167
- {
168
- $rcube = rcube::get_instance();
169
- $db = $rcube->get_dbh();
170
- $user_id = $rcube->get_user_id();
171
-
172
- $result = $db->query("DELETE FROM `{$this->tags_table}` WHERE `id` = ? AND `user_id` = ?", $uid, $user_id);
173
-
174
- return $db->affected_rows($result) > 0;
175
- }
176
-
177
- /**
178
- * Build IMAP SEARCH criteria for mail messages search (per-folder)
179
- *
180
- * @param array $tag Tag data
181
- * @param array $folders List of folders to search in
182
- *
183
- * @return array<string> IMAP SEARCH criteria per-folder
184
- */
185
- public function members_search_criteria($tag, $folders)
186
- {
187
- $tag_members = self::resolve_members($tag);
188
- $result = ;
189
-
190
- foreach ($tag_members as $folder => $uid_list) {
191
- if (!empty($uid_list) && in_array($folder, $folders)) {
192
- $result$folder = 'UID ' . rcube_imap_generic::compressMessageSet($uid_list);
193
- }
194
- }
195
-
196
- return $result;
197
- }
198
-
199
- /**
200
- * Returns tag assignments with multiple members
201
- *
202
- * @param array<rcube_message_header> $messages Mail messages
203
- *
204
- * @return array<string, array> Tags assigned
205
- */
206
- public function members_tags($messages)
207
- {
208
- // get tags list
209
- $taglist = $this->list_tags();
210
-
211
- // get message UIDs
212
- $message_tags = ;
213
- foreach ($messages as $msg) {
214
- $message_tags$msg->uid . '-' . $msg->folder = null;
215
- }
216
-
217
- $uids = array_keys($message_tags);
218
-
219
- foreach ($taglist as $tag) {
220
- $tag_members = self::resolve_members($tag);
221
-
222
- foreach ((array) $tag_members as $folder => $_uids) {
223
- array_walk($_uids, function (&$uid, $key, $folder) { $uid .= '-' . $folder; }, $folder);
224
-
225
- foreach (array_intersect($uids, $_uids) as $uid) {
226
- $message_tags$uid = $tag'uid';
227
- }
228
- }
229
- }
230
-
231
- return array_filter($message_tags);
232
- }
233
-
234
- /**
235
- * Add mail members to a tag
236
- *
237
- * @param array $tag Tag object
238
- * @param array $messages List of messages in rcmail::get_uids() output format
239
- *
240
- * @return bool True on success, False on error
241
- */
242
- public function add_tag_members($tag, $messages)
243
- {
244
- $rcube = rcube::get_instance();
245
- $storage = $rcube->get_storage();
246
- $members = ;
247
-
248
- // build list of members
249
- foreach ($messages as $mbox => $uids) {
250
- if ($uids === '*') {
251
- $index = $storage->index($mbox, null, null, true);
252
- $uids = $index->get();
253
- $msgs = $storage->fetch_headers($mbox, $uids, false);
254
- } else {
255
- $msgs = $storage->fetch_headers($mbox, $uids, false);
256
- }
257
-
258
- // fetch_headers doesn't detect IMAP errors, so we make sure we get something back.
259
- if (!empty($uids) && empty($msgs)) {
260
- throw new \Exception("Failed to find relation members, check the IMAP log.");
261
- }
262
-
263
- $members = array_merge($members, kolab_storage_config::build_members($mbox, $msgs));
264
- }
265
-
266
- if (empty($members)) {
267
- return false;
268
- }
269
-
270
- $db = $rcube->get_dbh();
271
- $existing = ;
272
-
273
- $query = $db->query("SELECT `url` FROM `{$this->members_table}` WHERE `tag_id` = ?", $tag'uid');
274
-
275
- while ($member = $db->fetch_assoc($query)) {
276
- $existing = $member'url';
277
- }
278
-
279
- $insert = array_unique(array_merge((array) $existing, $members));
280
-
281
- if (!empty($insert)) {
282
- $ts = (new \DateTime('now', new \DateTimeZone('UTC')))->format('Y-m-d H:i:s');
283
-
284
- foreach (array_chunk($insert, 100) as $chunk) {
285
- $query = "INSERT INTO `{$this->members_table}` (`tag_id`, `url`, `created`) VALUES ";
286
- foreach ($chunk as $idx => $url) {
287
- $chunk$idx = sprintf("(%d, %s, %s)", $tag'uid', $db->quote($url), $db->quote($ts));
288
- }
289
-
290
- $query = $db->query($query . implode(', ', $chunk));
291
- }
292
- }
293
-
294
- return true;
295
- }
296
-
297
- /**
298
- * Remove mail members from a tag
299
- *
300
- * @param array $tag Tag object
301
- * @param array $messages List of messages in rcmail::get_uids() output format
302
- *
303
- * @return bool True on success, False on error
304
- */
305
- public function remove_tag_members($tag, $messages)
306
- {
307
- $rcube = rcube::get_instance();
308
- $db = $rcube->get_dbh();
309
-
310
- // TODO: Why we use URLs? It's because the original Kolab driver does this.
311
- // We should probably store folder, uid, and Message-ID separately (and just ignore other headers).
312
- // As it currently is the queries below seem to be fragile.
313
-
314
- foreach ($messages as $mbox => $uids) {
315
- if ($uids === '*') {
316
- $folder_url = kolab_storage_config::build_member_url('folder' => $mbox);
317
- $regexp = '^' . $folder_url . '/0-9+\?';
318
- $query = "DELETE FROM `{$this->members_table}` WHERE `tag_id` = ? AND `url` REGEXP ?";
319
- if ($db->query($query, $tag'uid', $regexp) === false) {
320
- return false;
321
- }
322
- } else {
323
- $members = ;
324
- foreach ((array)$uids as $uid) {
325
- $members = kolab_storage_config::build_member_url(
326
- 'folder' => $mbox,
327
- 'uid' => $uid,
328
- );
329
- }
330
-
331
- foreach (array_chunk($members, 100) as $chunk) {
332
- foreach ($chunk as $idx => $member) {
333
- $chunk$idx = 'LEFT(`url`, ' . (strlen($member) + 1) . ') = ' . $db->quote($member . '?');
334
- }
335
-
336
- $query = "DELETE FROM `{$this->members_table}` WHERE `tag_id` = ? AND (" . implode(' OR ', $chunk) . ")";
337
- if ($db->query($query, $tag'uid') === false) {
338
- return false;
339
-
340
- }
341
- }
342
- }
343
- }
344
-
345
- return true;
346
- }
347
-
348
- /**
349
- * Resolve tag members into (up-to-date) IMAP folder => uids map
350
- */
351
- protected function resolve_members($tag)
352
- {
353
- $rcube = rcube::get_instance();
354
- $db = $rcube->get_dbh();
355
- $existing = ;
356
-
357
- $query = $db->query("SELECT `url` FROM `{$this->members_table}` WHERE `tag_id` = ?", $tag'uid');
358
-
359
- while ($member = $db->fetch_assoc($query)) {
360
- $existing = $member'url';
361
- }
362
-
363
- $tag'members' = $existing;
364
-
365
- // TODO: Don't force-resolve members all the time (2nd argument), store the last resolution timestamp
366
- // in kolab_tags table and use some interval (15 minutes?) to not do this heavy operation too often.
367
- $members = kolab_storage_config::resolve_members($tag, true, false);
368
-
369
- // Refresh the members in database
370
- $delete = array_unique(array_diff($existing, $tag'members'));
371
- $insert = array_unique(array_diff($tag'members', $existing));
372
-
373
- if (!empty($delete)) {
374
- foreach (array_chunk($delete, 100) as $chunk) {
375
- $query = "DELETE FROM `{$this->members_table}` WHERE `tag_id` = ? AND `url` IN (" . $db->array2list($chunk) . ")";
376
- $query = $db->query($query, $tag'uid');
377
- }
378
- }
379
-
380
- if (!empty($insert)) {
381
- $ts = (new \DateTime('now', new \DateTimeZone('UTC')))->format('Y-m-d H:i:s');
382
-
383
- foreach (array_chunk($insert, 100) as $chunk) {
384
- $query = "INSERT INTO `{$this->members_table}` (`tag_id`, `url`, `created`) VALUES ";
385
- foreach ($chunk as $idx => $url) {
386
- $chunk$idx = sprintf("(%d, %s, %s)", $tag'uid', $db->quote($url), $db->quote($ts));
387
- }
388
-
389
- $query = $db->query($query . implode(', ', $chunk));
390
- }
391
- }
392
-
393
- return $members;
394
- }
395
-}
396
roundcubemail-1.6.tar.gz/plugins/kolab_tags/drivers/database/SQL
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/plugins/kolab_tags/drivers/database/SQL/mysql.initial.sql
Deleted
29
1
2
-
3
-CREATE TABLE IF NOT EXISTS `kolab_tags` (
4
- `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
5
- `user_id` int(10) UNSIGNED NOT NULL,
6
- `name` varchar(255) NOT NULL,
7
- `color` varchar(8) DEFAULT NULL,
8
- `created` datetime DEFAULT NULL,
9
- `updated` datetime DEFAULT NULL,
10
- `modseq` int UNSIGNED DEFAULT 0,
11
- PRIMARY KEY(`id`),
12
- UNIQUE KEY `user_id_name_idx` (`user_id`, `name`),
13
- INDEX (`updated`),
14
- CONSTRAINT `fk_kolab_tags_user_id` FOREIGN KEY (`user_id`)
15
- REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
16
-) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
17
-
18
-CREATE TABLE IF NOT EXISTS `kolab_tag_members` (
19
- `tag_id` int UNSIGNED NOT NULL,
20
- `url` varchar(2048) BINARY NOT NULL,
21
- `created` datetime DEFAULT NULL,
22
- PRIMARY KEY(`tag_id`, `url`),
23
- INDEX (`created`),
24
- CONSTRAINT `fk_kolab_tag_members_tag_id` FOREIGN KEY (`tag_id`)
25
- REFERENCES `kolab_tags`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
26
-) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET ascii;
27
-
28
-REPLACE INTO `system` (`name`, `value`) VALUES ('kolab-tags-database-version', '2024112000');
29
roundcubemail-1.6.tar.gz/plugins/kolab_tags/drivers/kolab
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/plugins/kolab_tags/drivers/kolab/Driver.php
Deleted
270
1
2
-<?php
3
-
4
-/**
5
- * Kolab Tags backend driver for Kolab v3
6
- *
7
- * @author Aleksander Machniak <machniak@apheleia-it.ch>
8
- *
9
- * Copyright (C) 2024, Apheleia IT AG <contact@apheleia-it.ch>
10
- *
11
- * This program is free software: you can redistribute it and/or modify
12
- * it under the terms of the GNU Affero General Public License as
13
- * published by the Free Software Foundation, either version 3 of the
14
- * License, or (at your option) any later version.
15
- *
16
- * This program is distributed in the hope that it will be useful,
17
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- * GNU Affero General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU Affero General Public License
22
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
23
- */
24
-
25
-namespace KolabTags\Drivers\Kolab;
26
-
27
-use KolabTags\Drivers\DriverInterface;
28
-use kolab_storage_config;
29
-use rcube_imap_generic;
30
-use rcube_message_header;
31
-
32
-class Driver implements DriverInterface
33
-{
34
- public const O_TYPE = 'relation';
35
- public const O_CATEGORY = 'tag';
36
-
37
- public $immutableName = false;
38
-
39
- private $tag_cols = 'name', 'category', 'color', 'parent', 'iconName', 'priority', 'members';
40
-
41
- /**
42
- * Tags list
43
- *
44
- * @param array $filter Search filter
45
- *
46
- * @return array List of tags
47
- */
48
- public function list_tags($filter = )
49
- {
50
- $config = kolab_storage_config::get_instance();
51
- $default = true;
52
- $filter = 'type', '=', self::O_TYPE;
53
- $filter = 'category', '=', self::O_CATEGORY;
54
-
55
- // for performance reasons assume there will be no more than 100 tags (per-folder)
56
-
57
- return $config->get_objects($filter, $default, 100);
58
- }
59
-
60
- /**
61
- * Create tag object
62
- *
63
- * @param array $tag Tag data
64
- *
65
- * @return false|array Tag data on success, False on failure
66
- */
67
- public function create($tag)
68
- {
69
- $config = kolab_storage_config::get_instance();
70
- $tag = array_intersect_key($tag, array_combine($this->tag_cols, $this->tag_cols));
71
- $tag'category' = self::O_CATEGORY;
72
-
73
- // Create the object
74
- $result = $config->save($tag, self::O_TYPE);
75
-
76
- return $result ? $tag : false;
77
- }
78
-
79
- /**
80
- * Update tag object
81
- *
82
- * @param array $tag Tag data
83
- *
84
- * @return false|array Tag data on success, False on failure
85
- */
86
- public function update($tag)
87
- {
88
- // get tag object data, we need _mailbox
89
- $list = $this->list_tags('uid', '=', $tag'uid');
90
- $old_tag = $list0 ?? null;
91
-
92
- if (!$old_tag) {
93
- return false;
94
- }
95
-
96
- $config = kolab_storage_config::get_instance();
97
- $tag = array_intersect_key($tag, array_combine($this->tag_cols, $this->tag_cols));
98
- $tag = array_merge($old_tag, $tag);
99
-
100
- // Update the object
101
- $result = $config->save($tag, self::O_TYPE);
102
-
103
- return $result ? $tag : false;
104
- }
105
-
106
- /**
107
- * Remove tag object
108
- *
109
- * @param string $uid Object unique identifier
110
- *
111
- * @return bool True on success, False on failure
112
- */
113
- public function remove($uid)
114
- {
115
- $config = kolab_storage_config::get_instance();
116
-
117
- return $config->delete($uid);
118
- }
119
-
120
- /**
121
- * Build IMAP SEARCH criteria for mail messages search (per-folder)
122
- *
123
- * @param array $tag Tag data
124
- * @param array $folders List of folders to search in
125
- *
126
- * @return array<string> IMAP SEARCH criteria per-folder
127
- */
128
- public function members_search_criteria($tag, $folders)
129
- {
130
- $uids = kolab_storage_config::resolve_members($tag, true);
131
- $result = ;
132
-
133
- foreach ($uids as $folder => $uid_list) {
134
- if (!empty($uid_list) && in_array($folder, $folders)) {
135
- $result$folder = 'UID ' . rcube_imap_generic::compressMessageSet($uid_list);
136
- }
137
- }
138
-
139
- return $result;
140
- }
141
-
142
- /**
143
- * Returns tag assignments with multiple members
144
- *
145
- * @param array<rcube_message_header> $messages Mail messages
146
- *
147
- * @return array<string, array> Tags assigned
148
- */
149
- public function members_tags($messages)
150
- {
151
- // get tags list
152
- $taglist = $this->list_tags();
153
-
154
- // get message UIDs
155
- $message_tags = ;
156
- foreach ($messages as $msg) {
157
- $message_tags$msg->uid . '-' . $msg->folder = null;
158
- }
159
-
160
- $uids = array_keys($message_tags);
161
-
162
- foreach ($taglist as $tag) {
163
- $tag'uids' = kolab_storage_config::resolve_members($tag, true);
164
-
165
- foreach ((array) $tag'uids' as $folder => $_uids) {
166
- array_walk($_uids, function (&$uid, $key, $folder) { $uid .= '-' . $folder; }, $folder);
167
-
168
- foreach (array_intersect($uids, $_uids) as $uid) {
169
- $message_tags$uid = $tag'uid';
170
- }
171
- }
172
- }
173
-
174
- return array_filter($message_tags);
175
- }
176
-
177
-
178
- /**
179
- * Add mail members to a tag
180
- *
181
- * @param array $tag Tag object
182
- * @param array $messages List of messages in rcmail::get_uids() output format
183
- *
184
- * @return bool True on success, False on error
185
- */
186
- public function add_tag_members($tag, $messages)
187
- {
188
- $storage = \rcube::get_instance()->get_storage();
189
- $members = ;
190
-
191
- // build list of members
192
- foreach ($messages as $mbox => $uids) {
193
- if ($uids === '*') {
194
- $index = $storage->index($mbox, null, null, true);
195
- $uids = $index->get();
196
- $msgs = $storage->fetch_headers($mbox, $uids, false);
197
- } else {
198
- $msgs = $storage->fetch_headers($mbox, $uids, false);
199
- }
200
-
201
- // fetch_headers doesn't detect IMAP errors, so we make sure we get something back.
202
- if (!empty($uids) && empty($msgs)) {
203
- throw new \Exception("Failed to find relation members, check the IMAP log.");
204
- }
205
-
206
- $members = array_merge($members, kolab_storage_config::build_members($mbox, $msgs));
207
- }
208
-
209
- $tag'members' = array_unique(array_merge((array) ($tag'members' ?? ), $members));
210
-
211
- // update tag object
212
- return $this->update($tag);
213
- }
214
-
215
- /**
216
- * Remove mail members from a tag
217
- *
218
- * @param array $tag Tag object
219
- * @param array $messages List of messages in rcmail::get_uids() output format
220
- *
221
- * @return bool True on success, False on error
222
- */
223
- public function remove_tag_members($tag, $messages)
224
- {
225
- $filter = ;
226
-
227
- foreach ($messages as $mbox => $uids) {
228
- if ($uids === '*') {
229
- $filter$mbox = kolab_storage_config::build_member_url('folder' => $mbox);
230
- } else {
231
- foreach ((array)$uids as $uid) {
232
- $filter$mbox = kolab_storage_config::build_member_url(
233
- 'folder' => $mbox,
234
- 'uid' => $uid,
235
- );
236
- }
237
- }
238
- }
239
-
240
- $updated = false;
241
-
242
- // @todo: make sure members list is up-to-date (UIDs are up-to-date)
243
-
244
- // ...filter members by folder/uid prefix
245
- foreach ((array) $tag'members' as $idx => $member) {
246
- foreach ($filter as $members) {
247
- // list of prefixes
248
- if (is_array($members)) {
249
- foreach ($members as $message) {
250
- if ($member == $message || strpos($member, $message . '?') === 0) {
251
- unset($tag'members'$idx);
252
- $updated = true;
253
- }
254
- }
255
- }
256
- // one prefix (all messages in a folder)
257
- else {
258
- if (preg_match('/^' . preg_quote($members, '/') . '\/0-9+(\?|$)/', $member)) {
259
- unset($tag'members'$idx);
260
- $updated = true;
261
- }
262
- }
263
- }
264
- }
265
-
266
- // update tag object
267
- return $updated ? $this->update($tag) : true;
268
- }
269
-}
270
roundcubemail-1.6.tar.gz/plugins/kolab_tags/kolab_tags.js
Changed
29
1
2
content.append(row1.append(name_label).append($('<div class="col-sm-10">').append(name_input)))
3
.append(row2.append(color_label).append($('<div class="col-sm-10">').append(color_input)))
4
.show();
5
- name_input.prop('disabled', tag && tag.immutableName).focus();
6
+ name_input.focus();
7
color_input.minicolors(rcmail.env.minicolors_config || {});
8
}
9
10
11
12
var postdata = rcmail.selection_post_data(),
13
tags = props != '*' ? props : $.map(rcmail.env.tags, function(tag) { return tag.uid; }),
14
- win = window.parent && parent.rcmail && parent.remove_tags ? parent : window,
15
- rc = win.rcmail;
16
+ rc = window.parent && parent.rcmail && parent.remove_tags ? parent.rcmail : rcmail;
17
18
postdata._tag = props;
19
postdata._act = 'remove';
20
21
22
// remove tags from message(s) without waiting to a response
23
// in case of an error the list will be refreshed
24
- $.each(tags, function() { win.tag_remove_callback(this); });
25
+ $.each(tags, function() { tag_remove_callback(this); });
26
}
27
28
// update messages list and message frame after removing tag assignments
29
roundcubemail-1.6.tar.gz/plugins/kolab_tags/kolab_tags.php
Changed
34
1
2
private function engine()
3
{
4
if ($this->engine === null) {
5
- // the plugin can be enabled/disabled by the kolab_auth plugin
6
+ // the files module can be enabled/disabled by the kolab_auth plugin
7
if ($this->rc->config->get('kolab_tags_disabled') || !$this->rc->config->get('kolab_tags_enabled', true)) {
8
return $this->engine = false;
9
}
10
11
- $this->load_config();
12
+ // $this->load_config();
13
14
require_once $this->home . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'kolab_tags_engine.php';
15
16
17
*/
18
public function startup($args)
19
{
20
- if ($engine = $this->engine()) {
21
- if ($this->rc->output->type != 'html') {
22
- return;
23
- }
24
+ // call this from startup to give a chance to set
25
+ // kolab_files_enabled/disabled in kolab_auth plugin
26
+ if ($this->rc->output->type != 'html') {
27
+ return;
28
+ }
29
30
+ if ($engine = $this->engine()) {
31
$engine->ui();
32
}
33
}
34
roundcubemail-1.6.tar.gz/plugins/kolab_tags/lib/kolab_tags_backend.php
Added
112
1
2
+<?php
3
+
4
+/**
5
+ * Kolab Tags backend
6
+ *
7
+ * @author Aleksander Machniak <machniak@kolabsys.com>
8
+ *
9
+ * Copyright (C) 2014, Kolab Systems AG <contact@kolabsys.com>
10
+ *
11
+ * This program is free software: you can redistribute it and/or modify
12
+ * it under the terms of the GNU Affero General Public License as
13
+ * published by the Free Software Foundation, either version 3 of the
14
+ * License, or (at your option) any later version.
15
+ *
16
+ * This program is distributed in the hope that it will be useful,
17
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
+ * GNU Affero General Public License for more details.
20
+ *
21
+ * You should have received a copy of the GNU Affero General Public License
22
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
23
+ */
24
+
25
+class kolab_tags_backend
26
+{
27
+ private $tag_cols = 'name', 'category', 'color', 'parent', 'iconName', 'priority', 'members';
28
+
29
+ public const O_TYPE = 'relation';
30
+ public const O_CATEGORY = 'tag';
31
+
32
+
33
+ /**
34
+ * Tags list
35
+ *
36
+ * @param array $filter Search filter
37
+ *
38
+ * @return array List of tags
39
+ */
40
+ public function list_tags($filter = )
41
+ {
42
+ $config = kolab_storage_config::get_instance();
43
+ $default = true;
44
+ $filter = 'type', '=', self::O_TYPE;
45
+ $filter = 'category', '=', self::O_CATEGORY;
46
+
47
+ // for performance reasons assume there will be no more than 100 tags (per-folder)
48
+
49
+ return $config->get_objects($filter, $default, 100);
50
+ }
51
+
52
+ /**
53
+ * Create tag object
54
+ *
55
+ * @param array $tag Tag data
56
+ *
57
+ * @return boolean|array Tag data on success, False on failure
58
+ */
59
+ public function create($tag)
60
+ {
61
+ $config = kolab_storage_config::get_instance();
62
+ $tag = array_intersect_key($tag, array_combine($this->tag_cols, $this->tag_cols));
63
+ $tag'category' = self::O_CATEGORY;
64
+
65
+ // Create the object
66
+ $result = $config->save($tag, self::O_TYPE);
67
+
68
+ return $result ? $tag : false;
69
+ }
70
+
71
+ /**
72
+ * Update tag object
73
+ *
74
+ * @param array $tag Tag data
75
+ *
76
+ * @return boolean|array Tag data on success, False on failure
77
+ */
78
+ public function update($tag)
79
+ {
80
+ // get tag object data, we need _mailbox
81
+ $list = $this->list_tags('uid', '=', $tag'uid');
82
+ $old_tag = $list0;
83
+
84
+ if (!$old_tag) {
85
+ return false;
86
+ }
87
+
88
+ $config = kolab_storage_config::get_instance();
89
+ $tag = array_intersect_key($tag, array_combine($this->tag_cols, $this->tag_cols));
90
+ $tag = array_merge($old_tag, $tag);
91
+
92
+ // Update the object
93
+ $result = $config->save($tag, self::O_TYPE);
94
+
95
+ return $result ? $tag : false;
96
+ }
97
+
98
+ /**
99
+ * Remove tag object
100
+ *
101
+ * @param string $uid Object unique identifier
102
+ *
103
+ * @return boolean True on success, False on failure
104
+ */
105
+ public function remove($uid)
106
+ {
107
+ $config = kolab_storage_config::get_instance();
108
+
109
+ return $config->delete($uid);
110
+ }
111
+}
112
roundcubemail-1.6.tar.gz/plugins/kolab_tags/lib/kolab_tags_engine.php
Changed
393
1
2
private $backend;
3
private $plugin;
4
private $rc;
5
+ private $taglist;
6
7
/**
8
* Class constructor
9
10
{
11
$plugin->require_plugin('libkolab');
12
13
+ require_once $plugin->home . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'kolab_tags_backend.php';
14
+
15
+ $this->backend = new kolab_tags_backend();
16
$this->plugin = $plugin;
17
$this->rc = $plugin->rc;
18
-
19
- $driver = $this->rc->config->get('kolab_tags_driver') ?: 'database';
20
- $class = "\\KolabTags\\Drivers\\" . ucfirst($driver) . "\\Driver";
21
-
22
- require_once "{$plugin->home}/drivers/DriverInterface.php";
23
- require_once "{$plugin->home}/drivers/{$driver}/Driver.php";
24
-
25
- $this->backend = new $class();
26
}
27
28
/**
29
30
$this->rc->output->command('plugin.kolab_tags', $response);
31
}
32
33
+
34
$this->rc->output->send();
35
}
36
37
38
*/
39
public function action_remove()
40
{
41
- $tag = rcube_utils::get_input_value('_tag', rcube_utils::INPUT_POST);
42
- $filter = $tag == '*' ? : 'uid', '=', explode(',', $tag);
43
+ $tag = rcube_utils::get_input_value('_tag', rcube_utils::INPUT_POST);
44
+ $filter = $tag == '*' ? : 'uid', '=', explode(',', $tag);
45
$taglist = $this->backend->list_tags($filter);
46
- $tags = ;
47
+ $filter = ;
48
+ $tags = ;
49
+
50
+ foreach (rcmail::get_uids() as $mbox => $uids) {
51
+ if ($uids === '*') {
52
+ $filter$mbox = $this->build_member_url('folder' => $mbox);
53
+ } else {
54
+ foreach ((array)$uids as $uid) {
55
+ $filter$mbox = $this->build_member_url(
56
+ 'folder' => $mbox,
57
+ 'uid' => $uid,
58
+ );
59
+ }
60
+ }
61
+ }
62
63
// for every tag...
64
foreach ($taglist as $tag) {
65
- $error = !$this->backend->remove_tag_members($tag, rcmail::get_uids());
66
+ $updated = false;
67
+
68
+ // @todo: make sure members list is up-to-date (UIDs are up-to-date)
69
+
70
+ // ...filter members by folder/uid prefix
71
+ foreach ((array) $tag'members' as $idx => $member) {
72
+ foreach ($filter as $members) {
73
+ // list of prefixes
74
+ if (is_array($members)) {
75
+ foreach ($members as $message) {
76
+ if ($member == $message || strpos($member, $message . '?') === 0) {
77
+ unset($tag'members'$idx);
78
+ $updated = true;
79
+ }
80
+ }
81
+ }
82
+ // one prefix (all messages in a folder)
83
+ else {
84
+ if (preg_match('/^' . preg_quote($members, '/') . '\/0-9+(\?|$)/', $member)) {
85
+ unset($tag'members'$idx);
86
+ $updated = true;
87
+ }
88
+ }
89
+ }
90
+ }
91
92
- if ($error) {
93
- break;
94
+ // update tag object
95
+ if ($updated) {
96
+ if (!$this->backend->update($tag)) {
97
+ $error = true;
98
+ }
99
}
100
101
$tags = $tag'uid';
102
}
103
104
if (!empty($error)) {
105
- if (!isset($_POST'_from') || $_POST'_from' != 'show') {
106
+ if ($_POST'_from' != 'show') {
107
$this->rc->output->show_message($this->plugin->gettext('untaggingerror'), 'error');
108
$this->rc->output->command('list_mailbox');
109
}
110
111
*/
112
public function action_add()
113
{
114
- $tag = rcube_utils::get_input_value('_tag', rcube_utils::INPUT_POST);
115
- $taglist = ;
116
+ $tag = rcube_utils::get_input_value('_tag', rcube_utils::INPUT_POST);
117
+ $storage = $this->rc->get_storage();
118
+ $members = ;
119
+
120
+ // build list of members
121
+ foreach (rcmail::get_uids() as $mbox => $uids) {
122
+ if ($uids === '*') {
123
+ $index = $storage->index($mbox, null, null, true);
124
+ $uids = $index->get();
125
+ $msgs = $storage->fetch_headers($mbox, $uids, false);
126
+ } else {
127
+ $msgs = $storage->fetch_headers($mbox, $uids, false);
128
+ }
129
+ // fetch_headers doesn't detect IMAP errors, so we make sure we get something back.
130
+ if (!empty($uids) && empty($msgs)) {
131
+ throw new Exception("Failed to find relation members, check the IMAP log.");
132
+ }
133
+
134
+ $members = array_merge($members, $this->build_members($mbox, $msgs));
135
+ }
136
137
// create a new tag?
138
if (!empty($_POST'_new')) {
139
$object =
140
- 'name' => $tag,
141
+ 'name' => $tag,
142
+ 'members' => $members,
143
;
144
145
$object = $this->backend->create($object);
146
$error = $object === false;
147
- if ($object) {
148
- $taglist = $object;
149
- }
150
}
151
// use existing tags (by UID)
152
else {
153
$filter = 'uid', '=', explode(',', $tag);
154
$taglist = $this->backend->list_tags($filter);
155
- }
156
157
- if (empty($error)) {
158
// for every tag...
159
foreach ($taglist as $tag) {
160
- $error = !$this->backend->add_tag_members($tag, rcmail::get_uids());
161
- if ($error) {
162
- break;
163
+ $tag'members' = array_unique(array_merge((array) $tag'members', $members));
164
+
165
+ // update tag object
166
+ if (!$this->backend->update($tag)) {
167
+ $error = true;
168
}
169
}
170
}
171
172
public function taglist($attrib)
173
{
174
$taglist = $this->backend->list_tags();
175
+
176
+ // Performance: Save the list for later
177
+ if ($this->rc->action == 'show' || $this->rc->action == 'preview') {
178
+ $this->taglist = $taglist;
179
+ }
180
+
181
$taglist = array_map($this, 'parse_tag', $taglist);
182
183
$this->rc->output->set_env('tags', $taglist);
184
185
return;
186
}
187
188
- $this->rc->output->set_env('message_tags', $this->backend->members_tags($args'messages'));
189
+ // get tags list
190
+ $taglist = $this->backend->list_tags();
191
+
192
+ // get message UIDs
193
+ $message_tags = ;
194
+ foreach ($args'messages' as $msg) {
195
+ $message_tags$msg->uid . '-' . $msg->folder = null;
196
+ }
197
+
198
+ $uids = array_keys($message_tags);
199
+
200
+ foreach ($taglist as $tag) {
201
+ $tag = $this->parse_tag($tag, true);
202
+
203
+ foreach ((array) $tag'uids' as $folder => $_uids) {
204
+ array_walk($_uids, function (&$uid, $key, $folder) { $uid .= '-' . $folder; }, $folder);
205
+
206
+ foreach (array_intersect($uids, $_uids) as $uid) {
207
+ $message_tags$uid = $tag'uid';
208
+ }
209
+ }
210
+ }
211
+
212
+ $this->rc->output->set_env('message_tags', array_filter($message_tags));
213
214
// @TODO: tag counters for the whole folder (search result)
215
216
217
*/
218
public function message_headers_handler($args)
219
{
220
- $taglist = $this->backend->list_tags();
221
-
222
- if (!empty($taglist)) {
223
- $tag_uids = $this->backend->members_tags($args'headers');
224
+ $taglist = $this->taglist ?: $this->backend->list_tags();
225
+ $uid = $args'uid';
226
+ $folder = $args'folder';
227
+ $tags = ;
228
229
- if (!empty($tag_uids)) {
230
- $tag_uids = array_first($tag_uids);
231
- $taglist = array_filter($taglist, function ($tag) use ($tag_uids) {
232
- return in_array($tag'uid', $tag_uids);
233
- });
234
- $taglist = array_map($this, 'parse_tag', $taglist);
235
-
236
- $this->rc->output->set_env('message_tags', $taglist);
237
+ foreach ($taglist as $tag) {
238
+ $tag = $this->parse_tag($tag, true, false);
239
+ if (!empty($tag'uids'$folder) && in_array($uid, (array) $tag'uids'$folder)) {
240
+ unset($tag'uids');
241
+ $tags = $tag;
242
}
243
}
244
245
+ if (!empty($tags)) {
246
+ $this->rc->output->set_env('message_tags', $tags);
247
+ }
248
+
249
return $args;
250
}
251
252
253
$tags = $this->backend->list_tags('uid', '=', $args'search_tags');
254
255
// sanity check (that should not happen)
256
- // TODO: This is driver-specific and should be moved to drivers
257
if (empty($tags)) {
258
if ($orig_folder) {
259
$storage->set_folder($orig_folder);
260
261
return $args;
262
}
263
264
- $criteria = ;
265
- $folders = $args'folder' = (array) $args'folder';
266
- $search = $args'search';
267
+ $search = ;
268
+ $folders = (array) $args'folder';
269
270
+ // collect folders and uids
271
foreach ($tags as $tag) {
272
- $res = $this->backend->members_search_criteria($tag, $args'folder');
273
+ $tag = $this->parse_tag($tag, true);
274
275
- if (empty($res)) {
276
- // If any tag has no members in any folder we can skip the other tags
277
+ // tag has no members -> empty search result
278
+ if (empty($tag'uids')) {
279
goto empty_result;
280
}
281
282
- $criteria = array_intersect_key($criteria, $res);
283
- $args'folder' = array_keys($res);
284
-
285
- foreach ($res as $folder => $value) {
286
- $current = !empty($criteria$folder) ? $criteria$folder : trim($search);
287
- $criteria$folder = ($current == 'ALL' ? '' : ($current . ' ')) . $value;
288
+ foreach ($tag'uids' as $folder => $uid_list) {
289
+ $search$folder = array_merge($search$folder ?? , $uid_list);
290
}
291
}
292
293
+ $search = array_map('array_unique', $search);
294
+ $criteria = ;
295
+
296
+ // modify search folders/criteria
297
+ $args'folder' = array_intersect($folders, array_keys($search));
298
+
299
+ foreach ($args'folder' as $folder) {
300
+ $criteria$folder = ($args'search' != 'ALL' ? trim($args'search') . ' ' : '')
301
+ . 'UID ' . rcube_imap_generic::compressMessageSet($search$folder);
302
+ }
303
+
304
if (!empty($args'folder')) {
305
$args'search' = $criteria;
306
} else {
307
308
empty_result:
309
310
if (count($folders) > 1) {
311
- $args'result' = new rcube_result_multifolder($folders);
312
- foreach ($folders as $folder) {
313
+ $args'result' = new rcube_result_multifolder($args'folder');
314
+ foreach ($args'folder' as $folder) {
315
$index = new rcube_result_index($folder, '* SORT');
316
$args'result'->add($index);
317
}
318
319
$class = 'rcube_result_' . ($args'threading' ? 'thread' : 'index');
320
$result = $args'threading' ? '* THREAD' : '* SORT';
321
322
- $args'result' = new $class(array_first($folders) ?: 'INBOX', $result);
323
+ $args'result' = new $class($args'folder' ?? 'INBOX', $result);
324
}
325
}
326
327
328
/**
329
* "Convert" tag object to simple array for use in javascript
330
*/
331
- private function parse_tag($tag)
332
+ private function parse_tag($tag, $list = false, $force = true)
333
{
334
- return
335
+ $result =
336
'uid' => $tag'uid',
337
'name' => $tag'name',
338
'color' => $tag'color' ?? null,
339
- 'immutableName' => !empty($this->backend->immutableName),
340
;
341
+
342
+ if ($list) {
343
+ $result'uids' = $this->get_tag_messages($tag, $force);
344
+ }
345
+
346
+ return $result;
347
+ }
348
+
349
+ /**
350
+ * Resolve members to folder/UID
351
+ *
352
+ * @param array $tag Tag object
353
+ *
354
+ * @return array Folder/UID list
355
+ */
356
+ protected function get_tag_messages(&$tag, $force = true)
357
+ {
358
+ return kolab_storage_config::resolve_members($tag, $force);
359
+ }
360
+
361
+ /**
362
+ * Build array of member URIs from set of messages
363
+ */
364
+ protected function build_members($folder, $messages)
365
+ {
366
+ return kolab_storage_config::build_members($folder, $messages);
367
+ }
368
+
369
+ /**
370
+ * Parses tag member string
371
+ *
372
+ * @param string $url Member URI
373
+ *
374
+ * @return array Message folder, UID, Search headers (Message-Id, Date)
375
+ */
376
+ protected function parse_member_url($url)
377
+ {
378
+ return kolab_storage_config::parse_member_url($url);
379
+ }
380
+
381
+ /**
382
+ * Builds member URI
383
+ *
384
+ * @param array $params Message folder, UID, Search headers (Message-Id, Date)
385
+ *
386
+ * @return string $url Member URI
387
+ */
388
+ protected function build_member_url($params)
389
+ {
390
+ return kolab_storage_config::build_member_url($params);
391
}
392
}
393
roundcubemail-1.6.tar.gz/plugins/kolab_tags/skins/elastic/templates/ui.html
Changed
12
1
2
<div id="tagmessagemenu" class="popupmenu" aria-hidden="true">
3
<ul class="menu iconized">
4
<li class="separator"><label><roundcube:label name="kolab_tags.tags" /></label></li>
5
- <roundcube:button type="link-menuitem" command="tag-add" label="kolab_tags.tagadd" classAct="tag add active" class="tag add disabled" innerclass="inner" aria-haspopup="true" />
6
- <roundcube:button type="link-menuitem" command="tag-remove" label="kolab_tags.tagremove" classAct="tag remove active" class="tag remove disabled" innerclass="inner" aria-haspopup="true" />
7
+ <roundcube:button type="link-menuitem" command="tag-add" label="kolab_tags.tagadd" classAct="tag add active" class="tag add disabled" />
8
+ <roundcube:button type="link-menuitem" command="tag-remove" label="kolab_tags.tagremove" classAct="tag remove active" class="tag remove disabled" />
9
<roundcube:button type="link-menuitem" command="tag-remove-all" label="kolab_tags.tagremoveall" classAct="tag remove all active" class="tag remove all disabled" />
10
</ul>
11
</div>
12
roundcubemail-1.6.tar.gz/plugins/libcalendaring/tests/VcalendarTest.php
Changed
9
1
2
$this->assertStringContainsString('UID:ac6b0aee-2519-4e5c-9a25-48c57064c9f0', $ics, "Event UID");
3
$this->assertStringContainsString('SEQUENCE:' . $event'sequence', $ics, "Export Sequence number");
4
$this->assertStringContainsString('DESCRIPTION:*Exported by', $ics, "Export Description");
5
- $this->assertStringContainsString('CATEGORIES:test1,test2', $ics, "VCALENDAR categories property");
6
$this->assertStringContainsString('ORGANIZER;CN=Rolf Test:mailto:rolf@', $ics, "Export organizer");
7
$this->assertMatchesRegularExpression('/ATTENDEE.*;ROLE=REQ-PARTICIPANT/', $ics, "Export Attendee ROLE");
8
$this->assertMatchesRegularExpression('/ATTENDEE.*;PARTSTAT=NEEDS-ACTION/', $ics, "Export Attendee Status");
9
roundcubemail-1.6.tar.gz/plugins/libcalendaring/tests/resources/itip.ics
Changed
9
1
2
UID:ac6b0aee-2519-4e5c-9a25-48c57064c9f0
3
LAST-MODIFIED:20130628T190032Z
4
SUMMARY:iTip Test
5
-CATEGORIES:test1,test2
6
ATTACH;VALUE=BINARY;FMTTYPE=text/html;ENCODING=BASE64;
7
X-LABEL=calendar.html:
8
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbm
9
roundcubemail-1.6.tar.gz/plugins/libkolab/lib/kolab_format_configuration.php
Changed
10
1
2
{
3
$words = ;
4
5
- foreach (($this->data'members' ?? ) as $url) {
6
+ foreach ((array)$this->data'members' as $url) {
7
$member = kolab_storage_config::parse_member_url($url);
8
9
if (empty($member)) {
10
roundcubemail-1.6.tar.gz/plugins/libkolab/lib/kolab_storage_cache.php
Changed
70
1
2
3
$sql_query = "SELECT " . ($fetchall ? '*' : "`msguid` AS `_msguid`, `uid`")
4
. " FROM `{$this->cache_table}` WHERE `folder_id` = ?"
5
- . static::sql_where($query)
6
+ . $this->_sql_where($query)
7
. (!empty($this->order_by) ? " ORDER BY " . $this->order_by : '');
8
9
$sql_result = $this->limit ?
10
11
12
$sql_result = $this->db->query(
13
"SELECT COUNT(*) AS `numrows` FROM `{$this->cache_table}` " .
14
- "WHERE `folder_id` = ?" . static::sql_where($query),
15
+ "WHERE `folder_id` = ?" . $this->_sql_where($query),
16
$this->folder_id
17
);
18
19
20
/**
21
* Helper method to compose a valid SQL query from pseudo filter triplets
22
*/
23
- public static function sql_where($query)
24
+ protected function _sql_where($query)
25
{
26
- $db = rcube::get_instance()->get_dbh();
27
$sql_where = '';
28
-
29
foreach ((array) $query as $param) {
30
if (is_array($param0)) {
31
$subq = ;
32
foreach ($param0 as $q) {
33
- $subq = preg_replace('/^\s*AND\s+/i', '', static::sql_where($q));
34
+ $subq = preg_replace('/^\s*AND\s+/i', '', $this->_sql_where($q));
35
}
36
if (!empty($subq)) {
37
$sql_where .= ' AND (' . implode($param1 == 'OR' ? ' OR ' : ' AND ', $subq) . ')';
38
}
39
continue;
40
} elseif ($param1 == '=' && is_array($param2)) {
41
- $qvalue = '(' . implode(',', array_map($db, 'quote', $param2)) . ')';
42
+ $qvalue = '(' . implode(',', array_map($this->db, 'quote', $param2)) . ')';
43
$param1 = 'IN';
44
} elseif ($param1 == '~' || $param1 == 'LIKE' || $param1 == '!~' || $param1 == '!LIKE') {
45
$not = ($param1 == '!~' || $param1 == '!LIKE') ? 'NOT ' : '';
46
$param1 = $not . 'LIKE';
47
- $qvalue = $db->quote('%' . preg_replace('/(^\^|\$$)/', ' ', $param2) . '%');
48
+ $qvalue = $this->db->quote('%' . preg_replace('/(^\^|\$$)/', ' ', $param2) . '%');
49
} elseif ($param1 == '~*' || $param1 == '!~*') {
50
$not = $param11 == '!' ? 'NOT ' : '';
51
$param1 = $not . 'LIKE';
52
- $qvalue = $db->quote(preg_replace('/(^\^|\$$)/', ' ', $param2) . '%');
53
+ $qvalue = $this->db->quote(preg_replace('/(^\^|\$$)/', ' ', $param2) . '%');
54
} elseif ($param0 == 'tags') {
55
$param1 = ($param1 == '!=' ? 'NOT ' : '') . 'LIKE';
56
- $qvalue = $db->quote('% ' . $param2 . ' %');
57
+ $qvalue = $this->db->quote('% ' . $param2 . ' %');
58
} else {
59
- $qvalue = $db->quote($param2);
60
+ $qvalue = $this->db->quote($param2);
61
}
62
63
$sql_where .= sprintf(
64
' AND %s %s %s',
65
- $db->quote_identifier($param0),
66
+ $this->db->quote_identifier($param0),
67
$param1,
68
$qvalue
69
);
70
roundcubemail-1.6.tar.gz/plugins/libkolab/lib/kolab_storage_cache_configuration.php
Changed
19
1
2
/**
3
* Helper method to compose a valid SQL query from pseudo filter triplets
4
*/
5
- public static function sql_where($query)
6
+ protected function _sql_where($query)
7
{
8
if (is_array($query)) {
9
foreach ($query as $idx => $param) {
10
11
}
12
}
13
14
- return parent::sql_where($query);
15
+ return parent::_sql_where($query);
16
}
17
18
/**
19
roundcubemail-1.6.tar.gz/plugins/libkolab/lib/kolab_storage_config.php
Changed
21
1
2
*
3
* @return array Folder/UIDs list
4
*/
5
- public static function resolve_members(&$tag, $force = true, $update = true)
6
+ public static function resolve_members(&$tag, $force = true)
7
{
8
$result = ;
9
10
11
12
// update tag object with new members list
13
$tag'members' = array_unique($tag'members');
14
- if ($update) {
15
- kolab_storage_config::get_instance()->save($tag, 'relation');
16
- }
17
+ kolab_storage_config::get_instance()->save($tag, 'relation');
18
}
19
20
return $result;
21
roundcubemail-1.6.tar.gz/plugins/libkolab/lib/kolab_storage_dav_cache.php
Changed
19
1
2
3
$sql_query = "SELECT " . ($uids ? "`uid`" : '*')
4
. " FROM `{$this->cache_table}` WHERE `folder_id` = ?"
5
- . self::sql_where($query)
6
+ . $this->_sql_where($query)
7
. (!empty($this->order_by) ? " ORDER BY " . $this->order_by : '');
8
9
$sql_result = $this->limit ?
10
11
12
$sql_result = $this->db->query(
13
"SELECT COUNT(*) AS `numrows` FROM `{$this->cache_table}` " .
14
- "WHERE `folder_id` = ?" . self::sql_where($query),
15
+ "WHERE `folder_id` = ?" . $this->_sql_where($query),
16
$this->folder_id
17
);
18
19
roundcubemail-1.6.tar.gz/plugins/libkolab/lib/kolab_storage_tags.php
Deleted
476
1
2
-<?php
3
-
4
-/**
5
- * Kolab storage class providing access to tags stored in IMAP (Kolab4-style)
6
- *
7
- * @author Aleksander Machniak <machniak@kolabsys.com>
8
- *
9
- * Copyright (C) 2024, Apheleia IT AG <contact@apheleia-it.ch>
10
- *
11
- * This program is free software: you can redistribute it and/or modify
12
- * it under the terms of the GNU Affero General Public License as
13
- * published by the Free Software Foundation, either version 3 of the
14
- * License, or (at your option) any later version.
15
- *
16
- * This program is distributed in the hope that it will be useful,
17
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- * GNU Affero General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU Affero General Public License
22
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
23
- */
24
-
25
-class kolab_storage_tags
26
-{
27
- public const ANNOTATE_KEY_PREFIX = '/vendor/kolab/tag/v1/';
28
- public const ANNOTATE_VALUE = '1';
29
- public const METADATA_ROOT = 'INBOX';
30
- public const METADATA_TAGS_KEY = '/private/vendor/kolab/tags/v1';
31
-
32
- protected $tag_props = 'name', 'color';
33
- protected $tags;
34
-
35
- /**
36
- * Class constructor
37
- */
38
- public function __construct()
39
- {
40
- // FETCH message annotations (tags) by default for better performance
41
- rcube::get_instance()->get_storage()->set_options(
42
- 'fetch_items' => 'ANNOTATION (' . self::ANNOTATE_KEY_PREFIX . '% (value.priv))',
43
- );
44
- }
45
-
46
- /**
47
- * Tags list
48
- *
49
- * @param array $filter Search filter
50
- *
51
- * @return array<array> List of tags
52
- */
53
- public function list($filter = )
54
- {
55
- $tags = $this->list_tags();
56
-
57
- if (empty($tags)) {
58
- return ;
59
- }
60
-
61
- // For now there's only one type of filter we support
62
- if (empty($filter) || empty($filter00) || $filter00 != 'uid' || $filter01 != '=') {
63
- return $tags;
64
- }
65
-
66
- $tags = array_filter(
67
- $tags,
68
- function ($tag) use ($filter) {
69
- return $filter00 == 'uid' && in_array($tag'uid', (array) $filter02);
70
- }
71
- );
72
-
73
- return array_values($tags);
74
- }
75
-
76
- /**
77
- * Create tag object
78
- *
79
- * @param array $props Tag properties
80
- *
81
- * @return false|string Tag identifier, or False on failure
82
- */
83
- public function create($props)
84
- {
85
- $tag = ;
86
- foreach ($this->tag_props as $prop) {
87
- if (isset($props$prop)) {
88
- $tag$prop = $props$prop;
89
- }
90
- }
91
-
92
- if (empty($tag'name')) {
93
- return false;
94
- }
95
-
96
- $uid = md5($tag'name');
97
- $tags = $this->list_tags();
98
-
99
- foreach ($tags as $existing_tag) {
100
- if ($existing_tag'uid' == $uid) {
101
- return false;
102
- }
103
- }
104
-
105
- $tags = $tag;
106
-
107
- if (!$this->save_tags($tags)) {
108
- return false;
109
- }
110
-
111
- return $uid;
112
- }
113
-
114
- /**
115
- * Update tag object
116
- *
117
- * @param array $props Tag properties
118
- *
119
- * @return bool True on success, False on failure
120
- */
121
- public function update($props)
122
- {
123
- $found = null;
124
- foreach ($this->list_tags() as $idx => $existing) {
125
- if ($existing'uid' == $props'uid') {
126
- $found = $idx;
127
- }
128
- }
129
-
130
- if ($found === null) {
131
- return false;
132
- }
133
-
134
- $tag = $this->tags$found;
135
-
136
- // Name is immutable
137
- if (isset($props'name') && $props'name' != $tag'name') {
138
- return false;
139
- }
140
-
141
- foreach ($this->tag_props as $col) {
142
- if (isset($props$col)) {
143
- $tag$col = $props$col;
144
- }
145
- }
146
-
147
- $tags = $this->tags;
148
- $tags$found = $tag;
149
-
150
- if (!$this->save_tags($tags)) {
151
- return false;
152
- }
153
-
154
- return true;
155
- }
156
-
157
- /**
158
- * Remove a tag
159
- *
160
- * @param string $uid Tag unique identifier
161
- *
162
- * @return bool True on success, False on failure
163
- */
164
- public function delete($uid)
165
- {
166
- $found = null;
167
- foreach ($this->list_tags() as $idx => $existing) {
168
- if ($existing'uid' == $uid) {
169
- $found = $idx;
170
- break;
171
- }
172
- }
173
-
174
- if ($found === null) {
175
- return false;
176
- }
177
-
178
- $tags = $this->tags;
179
- $tag_name = $tags$found'name';
180
- unset($tags$found);
181
-
182
- if (!$this->save_tags($tags)) {
183
- return false;
184
- }
185
-
186
- // Remove all message annotations for this tag from all folders
187
- /** @var rcube_imap $imap */
188
- $imap = rcube::get_instance()->get_storage();
189
- $search = self::imap_search_criteria($tag_name);
190
- $annotation = ;
191
- $annotationself::ANNOTATE_KEY_PREFIX . $tag_name = 'value.priv' => null;
192
-
193
- foreach ($imap->list_folders() as $folder) {
194
- $index = $imap->search_once($folder, $search);
195
- if ($uids = $index->get_compressed()) {
196
- $imap->annotate_message($annotation, $uids, $folder);
197
- }
198
- }
199
-
200
- return true;
201
- }
202
-
203
- /**
204
- * Returns tag assignments with multiple members
205
- *
206
- * @param array<rcube_message_header|rcube_message> $messages Mail messages
207
- * @param bool $return_names Return tag names instead of UIDs
208
- *
209
- * @return array<string, array> Assigned tag UIDs or names by message
210
- */
211
- public function members_tags($messages, $return_names = false)
212
- {
213
- // get tags list
214
- $tag_uids = ;
215
- foreach ($this->list_tags() as $tag) {
216
- $tag_uids$tag'name' = $tag'uid';
217
- }
218
-
219
- if (empty($tag_uids)) {
220
- return ;
221
- }
222
-
223
- $result = ;
224
- $uids = ;
225
- $msg_func = function ($msg) use (&$result, $tag_uids, $return_names) {
226
- if ($msg instanceof rcube_message) {
227
- $msg = $msg->headers;
228
- }
229
- /** @var rcube_message_header $msg */
230
- if (isset($msg->annotations)) {
231
- $tags = ;
232
- foreach ($msg->annotations as $name => $props) {
233
- if (strpos($name, self::ANNOTATE_KEY_PREFIX) === 0 && !empty($props'value.priv')) {
234
- $tag_name = substr($name, strlen(self::ANNOTATE_KEY_PREFIX));
235
- if (isset($tag_uids$tag_name)) {
236
- $tags = $return_names ? $tag_name : $tag_uids$tag_name;
237
- }
238
- }
239
- }
240
-
241
- $result$msg->uid . '-' . $msg->folder = $tags;
242
- return true;
243
- }
244
-
245
- return false;
246
- };
247
-
248
- // Check if the annotation is already FETCHED
249
- foreach ($messages as $msg) {
250
- if ($msg_func($msg)) {
251
- continue;
252
- }
253
-
254
- if (!isset($uids$msg->folder)) {
255
- $uids$msg->folder = ;
256
- }
257
-
258
- $uids$msg->folder = $msg->uid;
259
- }
260
-
261
- /** @var rcube_imap $imap */
262
- $imap = rcube::get_instance()->get_storage();
263
- $query_items = 'ANNOTATION (' . self::ANNOTATE_KEY_PREFIX . '% (value.priv))';
264
-
265
- foreach ($uids as $folder => $_uids) {
266
- $fetch = $imap->conn->fetch($folder, $_uids, true, $query_items);
267
-
268
- if ($fetch) {
269
- foreach ($fetch as $msg) {
270
- $msg_func($msg);
271
- }
272
- }
273
- }
274
-
275
- return $result;
276
- }
277
-
278
- /**
279
- * Assign a tag to mail messages
280
- */
281
- public function add_members(string $uid, string $folder, $uids)
282
- {
283
- if (($tag_name = $this->tag_name_by_uid($uid)) === null) {
284
- return false;
285
- }
286
-
287
- /** @var rcube_imap $imap */
288
- $imap = rcube::get_instance()->get_storage();
289
- $annotation = ;
290
- $annotationself::ANNOTATE_KEY_PREFIX . $tag_name = 'value.priv' => self::ANNOTATE_VALUE;
291
-
292
- return $imap->annotate_message($annotation, $uids, $folder);
293
- }
294
-
295
- /**
296
- * Delete a tag from mail messages
297
- */
298
- public function remove_members(string $uid, string $folder, $uids)
299
- {
300
- if (($tag_name = $this->tag_name_by_uid($uid)) === null) {
301
- return false;
302
- }
303
-
304
- /** @var rcube_imap $imap */
305
- $imap = rcube::get_instance()->get_storage();
306
- $annotation = ;
307
- $annotationself::ANNOTATE_KEY_PREFIX . $tag_name = 'value.priv' => null;
308
-
309
- return $imap->annotate_message($annotation, $uids, $folder);
310
- }
311
-
312
- /**
313
- * Update object's tags
314
- *
315
- * @param rcube_message|string $member Kolab object UID or mail message object
316
- * @param array $tags List of tag names
317
- */
318
- public function set_tags_for($member, $tags)
319
- {
320
- // Only mail for now
321
- if (!$member instanceof rcube_message && !$member instanceof rcube_message_header) {
322
- return ;
323
- }
324
-
325
- $members = $this->members_tags($member, true);
326
-
327
- $tags = array_unique($tags);
328
- $existing = (array) array_first($members);
329
- $add = array_diff($tags, $existing);
330
- $remove = array_diff($existing, $tags);
331
- $annotations = ;
332
-
333
- if (!empty($remove)) {
334
- foreach ($remove as $tag_name) {
335
- $annotationsself::ANNOTATE_KEY_PREFIX . $tag_name = 'value.priv' => null;
336
- }
337
- }
338
-
339
- if (!empty($add)) {
340
- $tags = $this->list_tags();
341
- $tag_names = array_column($tags, 'name');
342
- $new = false;
343
-
344
- foreach ($add as $tag_name) {
345
- if (!in_array($tag_name, $tag_names)) {
346
- $tags = 'name' => $tag_name;
347
- $new = true;
348
- }
349
-
350
- $annotationsself::ANNOTATE_KEY_PREFIX . $tag_name = 'value.priv' => self::ANNOTATE_VALUE;
351
- }
352
-
353
- if ($new) {
354
- if (!$this->save_tags($tags)) {
355
- return;
356
- }
357
- }
358
- }
359
-
360
- if (!empty($annotations)) {
361
- /** @var rcube_imap $imap */
362
- $imap = rcube::get_instance()->get_storage();
363
- $result = $imap->annotate_message($annotations, $member->uid, $member->folder);
364
-
365
- if (!$result) {
366
- rcube::raise_error("Failed to tag/untag a message ({$member->folder}/{$member->uid}. Error: "
367
- . $imap->get_error_str(), true, false);
368
- }
369
- }
370
- }
371
-
372
- /**
373
- * Get tags assigned to a specified object.
374
- *
375
- * @param rcube_message|string $member Kolab object UID or mail message object
376
- *
377
- * @return array<int, string> List of tag names
378
- */
379
- public function get_tags_for($member)
380
- {
381
- // Only mail for now
382
- if (!$member instanceof rcube_message && !$member instanceof rcube_message_header) {
383
- return ;
384
- }
385
-
386
- // Get message's tags
387
- $members = $this->members_tags($member, true);
388
-
389
- return (array) array_first($members);
390
- }
391
-
392
- /**
393
- * Returns IMAP SEARCH item to find messages with specific tag
394
- */
395
- public static function imap_search_criteria($tag_name)
396
- {
397
- return sprintf(
398
- 'ANNOTATION %s value.priv %s',
399
- rcube_imap_generic::escape(self::ANNOTATE_KEY_PREFIX . $tag_name),
400
- rcube_imap_generic::escape(self::ANNOTATE_VALUE, true)
401
- );
402
- }
403
-
404
- /**
405
- * Get tags list from the storage (IMAP METADATA on INBOX)
406
- */
407
- protected function list_tags()
408
- {
409
- if (!isset($this->tags)) {
410
- $imap = rcube::get_instance()->get_storage();
411
- if (!$imap->get_capability('METADATA')) {
412
- return ;
413
- }
414
-
415
- $this->tags = ;
416
- if ($meta = $imap->get_metadata(self::METADATA_ROOT, self::METADATA_TAGS_KEY)) {
417
- $this->tags = json_decode($metaself::METADATA_ROOTself::METADATA_TAGS_KEY, true);
418
- foreach ($this->tags as &$tag) {
419
- $tag'uid' = md5($tag'name');
420
- }
421
- }
422
- }
423
-
424
- return $this->tags;
425
- }
426
-
427
- /**
428
- * Get a tag name by uid
429
- */
430
- protected function tag_name_by_uid($uid)
431
- {
432
- foreach ($this->list_tags() as $tag) {
433
- if ($tag'uid' === $uid) {
434
- return $tag'name';
435
- }
436
- }
437
-
438
- return null;
439
- }
440
-
441
- /**
442
- * Store tags list in IMAP metadata
443
- */
444
- protected function save_tags($tags)
445
- {
446
- $imap = rcube::get_instance()->get_storage();
447
- if (!$imap->get_capability('METADATA')) {
448
- rcube::raise_error("Failed to store tags. Missing IMAP METADATA support", true, false);
449
- return false;
450
- }
451
-
452
- // Don't store UIDs
453
- foreach ($tags as &$tag) {
454
- unset($tag'uid');
455
- }
456
-
457
- $tags = array_values($tags);
458
-
459
- $metadata = json_encode($tags, JSON_INVALID_UTF8_IGNORE | JSON_UNESCAPED_UNICODE);
460
-
461
- if (!$imap->set_metadata(self::METADATA_ROOT, self::METADATA_TAGS_KEY => $metadata)) {
462
- rcube::raise_error("Failed to store tags in IMAP. Error: " . $imap->get_error_str(), true, false);
463
- return false;
464
- }
465
-
466
- // Add the uid back, and update cached list of tags
467
- foreach ($tags as &$tag) {
468
- $tag'uid' = md5($tag'name');
469
- }
470
-
471
- $this->tags = $tags;
472
-
473
- return true;
474
- }
475
-}
476
roundcubemail-1.6.tar.gz/plugins/libkolab/skins/elastic/include/kolab_tags.less
Changed
9
1
2
max-width: 4em;
3
padding: .1rem .4rem;
4
margin-right: .2rem;
5
+ font-weight: bold;
6
7
&:not(.tagedit-listelement) a {
8
color: inherit;
9
roundcubemail-1.6.tar.gz/plugins/libkolab/skins/elastic/libkolab.min.css
Changed
6
1
2
-#alarm-display .alarm-actions a:before,#alarm-display h3:before,#delegate-table td:before,#devices-table td:not(.selection):before,#event-status-badge span:before,#eventshow .event-partstat .changersvp:before,#kolabnoteslist td.title:before,#taglist li:before,#tagsform option:before,#tasklist .childtoggle:before,#tasklist .taskhead.flagged span.flagged:before,#tasklist .taskhead:not(.flagged):hover span.flagged:before,#taskshow.status-flagged h2:before,.attendee:before,.availability span:before,.calendar-scheduler .schedule-buttons .next-slot:after,.document-editor-header #collaborators a.button.add:before,.edit-attendees-table th.invite label:before,.editors-dialog table td.options a.delete:before,.fc .fc-time i:before,.fc button.next:before,.fc button.prev:before,.filelist tbody td.filename span:before,.filelist tr.session>td.name:after,.folderlist li.mailbox a.subscription.subscribed:before,.listing li.readonly:not(.virtual)>div a:first-child:after,.listing li>div span.subscribed:before,.listing li>div.calendar .calname:before,.listing li>div.folder .listname:before,.listing li>div.readonly a:first-child:after,.listing li>div.tasklist .listname:before,.resources-dialog .listing li.resource>a:before,.rsvp-status.accepted:before,.rsvp-status.declined:before,.rsvp-status.delegated:before,.rsvp-status.loading:before,.rsvp-status.needs-action:before,.rsvp-status.tentative:before,a.btn.fromcloud:before,a.button.filesaveall:before,a.button.saveas:before,fieldset.categories .input-group a.button.create:before,li>a.icon.saveas:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}@media screen and (min-width:1200px){.listing li>div>a{border-left:2px solid transparent}.listing li>div>a:focus{border-left:2px solid #9ddfff;outline:0}}.listing li>div{display:flex}.listing li>div>a:first-child{overflow:hidden;text-overflow:ellipsis;position:relative;flex-grow:1}.listing li>div>a:first-child+input{position:initial}.listing li>div .custom-switch{position:relative}.listing li>div.folder .listname:before{content:"\f249";margin-right:.5rem}.listing li>div span.actions{display:flex}input+.listing li>div span.actions{padding-right:2em}.listing li>div span.actions a{padding:0;margin:0;margin-right:.2rem;cursor:pointer}.listing li>div span.actions a:before{margin:0}.listing li>div span.actions a.remove{display:none}html.touch .listing li>div span.actions{padding-left:.2rem}html.touch .listing li>div span.actions a{margin-right:.5rem}.listing li>div a.quickview:before{content:"\f06e";opacity:.2;color:#00acff}.listing li>div a.quickview:after{display:none!important}.listing li>div.focusview a.quickview:before{content:"\f06e";opacity:1}.listing li>div .subscribed{cursor:pointer;padding:0!important;border-left:0;width:auto}.listing li>div .subscribed:before{content:"\f02e";font-weight:400;height:auto;color:#00acff;margin-right:.25rem}.listing li>div span.subscribed:before{content:"\f02e";font-weight:400}.listing li>div.subscribed .subscribed:before{content:"\f02e";font-weight:900}.listing li.selected>div>*{color:#2c363a;background-color:#ebf9ff}.listing li.readonly:not(.virtual)>div a:first-child:after,.listing li>div.readonly a:first-child:after{content:"\f023";position:absolute;left:2.25rem;top:17.5px;font-size:.9em!important;width:.9em;line-height:1;height:1em!important;background-color:#fff;border-radius:50% 50% 0 0;color:#2c363a;opacity:.9}html.touch .listing li.readonly:not(.virtual)>div a:first-child:after,html.touch .listing li>div.readonly a:first-child:after{top:23.5px;left:2.7rem}.listing li.other.user>div a:first-child:before,.listing li>div.other.user>.listname:before{content:"\f007";font-weight:900}.listing li.virtual.user>div a:first-child:after,.listing li>div.virtual.user>.listname:after{display:none}.listing li.virtual.shared>div a:first-child:before,.listing li>div.virtual.shared>.listname:before{content:"\f1e0";font-weight:900}.listing li.virtual.shared>div a:first-child:after,.listing li>div.virtual.shared>.listname:after{display:none}.listing li.virtual>div>a{opacity:.5}.listing.treelist:not(.notree)>li>div>a{padding-left:1.5em}.listing li.droptarget>div{background-color:#ffc}.listing li .count{position:absolute;top:0;right:0;min-width:2em;line-height:1.4rem;margin:7.7px;padding:0 .3em;border-radius:.4em;background:#737677;color:#fff;text-align:center;font-weight:700}html.touch .listing li .count{line-height:2rem;margin:9.5px}.treelist ul li a:first-child:after{margin-left:1.7em!important}.treelist ul li li a:first-child:after{margin-left:3.4em!important}.treelist ul li li li a:first-child:after{margin-left:5.1em!important}.treelist ul li li li li a:first-child:after{margin-left:6.8em!important}.treelist ul li li li li li a:first-child:after{margin-left:8.5em!important}.treelist ul li li li li li li a:first-child:after{margin-left:10.2em!important}.treelist.notree li a:first-child:after{left:1.3rem!important}.searchresults .boxtitle{line-height:2rem!important;font-size:80%;padding:0 .5rem;margin:0;color:#737677;background-color:#f1f3f4;text-align:center;border-bottom:1px solid #d4dbde}.folderlist li.mailbox.type-event>a:before{content:"\f133";font-weight:900}.folderlist li.mailbox.type-task>a:before{content:"\f274";font-weight:900}.folderlist li.mailbox.type-journal>a:before{content:"\f133";font-weight:400}.folderlist li.mailbox.type-contact>a:before{content:"\f2b9";font-weight:400}.folderlist li.mailbox.type-note>a:before{content:"\f249";font-weight:400}.folderlist li.mailbox.type-configuration>a:before{content:"\f013";font-weight:900}.folderlist li.mailbox.type-freebusy>a:before{content:"\f133";font-weight:400}.folderlist li.mailbox.type-file>a:before{content:"\f07b";font-weight:900}.menu li.search{padding:.25rem .5rem}.menu a.history:before{content:"\f1da"}button.btn.save.notify:before{content:"\f0e0"}button.btn.print:before{content:"\f02f"}.watermark{background:url("../../../../skins/elastic/images/logo.svg") center no-repeat #fff;background-size:30%;background-blend-mode:luminosity;width:100%;height:100%}.watermark>*{display:none}.watermark:before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,.85)}.watermark.formcontainer{background:0 0!important}.watermark.formcontainer:before{display:none}.watermark.formcontainer>*{display:block}html.layout-phone .watermark.formcontainer,html.layout-small .watermark.formcontainer{overflow-y:auto!important}.form-group>.datetime{display:flex;white-space:nowrap}.form-group>.datetime input{width:10em}.form-group>.datetime input:first-child{margin-right:.5rem;width:15em}.form-group>.datetime a{margin-left:1em;text-align:right;flex:1;line-height:2.4}.form-section.form-group.form-check{display:flex;padding:0}.form-section.form-group.form-check label{order:10}.formcontent.text-only .faded *{color:#737677}.linkslist{border:0!important;background:0 0!important}.linkslist li.link{padding:0}.linkslist li.link.message.eml:before{content:"\f0e0"}.linkslist li.link a.messagelink{overflow:hidden;text-overflow:ellipsis}.linkslist li.link a.delete .inner{display:none}.print-config{position:fixed;top:0;left:0;width:100%;z-index:10000;padding:.5em 1em;background-color:#f1f3f4}.print-config button.print{margin-right:1rem}.print-config .prop{line-height:2;margin-left:.5rem;display:inline-block;vertical-align:middle}.print-config .prop label{margin:0}@media print{.print-config{display:none}}.print-config+.print-content{position:relative;top:0;left:0;height:auto;margin:5em auto 0 auto;overflow:visible}.selection-dialog .ui-dialog-content{display:flex!important;overflow:hidden!important}.selection-dialog .selection-list{display:flex;flex-direction:column;border:1px solid #d4dbde;justify-content:center}.selection-dialog .ui-dialog-content .popupmenu{display:flex!important;width:100%}.selection-dialog .scroller{flex:1;overflow-y:auto}.selection-dialog .header{border-bottom:1px solid #d4dbde;display:flex;background-color:#f4f4f4;font-size:1rem;font-weight:700;line-height:58px;height:58px;min-height:58px;padding:0 .25em;position:relative;overflow:hidden;white-space:nowrap}.selection-dialog .header a.button{color:#2c363a;margin:0 .3rem}.selection-dialog .header a.button:before{margin:0}.selection-dialog .header-title{width:100%;text-align:center;margin:0 2em}.selection-dialog .selection-content{display:flex;flex-direction:column}.selection-dialog .tab-content{margin-top:1rem;height:100%;overflow-y:auto}.selection-dialog .form-addon{margin:0;padding:.5rem 0;width:100%;background-color:#f1f3f4;border-top:1px solid #d4dbde}.selection-dialog .listing ul{background-color:#fff}.selection-dialog .listing li.selected{color:#2c363a}@media screen and (max-width:768px){.selection-dialog .ui-dialog-content{padding:0!important}.selection-dialog .ui-dialog-titlebar{display:none;margin:0}.selection-dialog .selection-list{border:0}.selection-dialog .selection-content .header-title,.selection-dialog .selection-list .header-title{margin-left:0}.selection-dialog .header a:before{font-size:1.75rem}}@media screen and (max-height:750px) and (min-width:769px){#layout-menu,#layout-menu .popover-header img{width:42px}#taskmenu a{height:42px;width:42px;font-size:1.2rem!important}#taskmenu .special-buttons{width:42px}#taskmenu span.inner{display:none}}.menu a.calendarlink:before{content:"\f073"}.menu a.send:before{content:"\f1d8"}.listing.iconized li.resource>i:before{content:"\f1b2"}a.button.today:before{content:"\f133";font-weight:400}a.button.date:before{content:"\f073";font-weight:400}.listing li>div.calendar .calname:before{content:"\f073"}.listing li>div.calendar .actions{padding-right:.25rem}.listing li>div.calendar .actions :last-child{margin-right:0}.listing li>div.calendar.cal---invitation--declined .calname:before,.listing li>div.calendar.cal---invitation--pending .calname:before{content:"\f073";font-weight:400}.listing li>div.calendar.cal-__bdays__ .calname:before{content:"\f1fd"}.listing li>div.calendar.cal---invitation--declined,.listing li>div.calendar.cal---invitation--pending,.listing li>div.calendar.cal-__bdays__{font-style:italic}.listing li>div.calendar.cal---invitation--declined a.calname,.listing li>div.calendar.cal---invitation--pending a.calname,.listing li>div.calendar.cal-__bdays__ a.calname{padding-right:2.5em}.listing li>div.calendar.cal---invitation--declined .count,.listing li>div.calendar.cal---invitation--pending .count,.listing li>div.calendar.cal-__bdays__ .count{right:4.2em;font-style:normal}.listing li span.handle{display:none}#calendarcategories .input-group:not(:last-child){margin-bottom:.25rem}fieldset.categories .input-group .minicolors-input{border-radius:0}fieldset.categories .input-group .minicolors+.input-group-append{margin-left:0}fieldset.categories .input-group a.button.create:before{content:"\f067";line-height:1}.calendar-invitebox>i.icon:before{content:"\f133"!important}.calendar-agenda-preview{display:none;margin-top:.5rem;border-top:1px solid #ddd}.calendar-agenda-preview h3{margin-top:.5rem}.calendar-agenda-preview .event-row{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-agenda-preview .event-row.current{color:#333;font-weight:700}.calendar-agenda-preview .event-row.no-event{font-style:italic}.calendar-agenda-preview .event-row.fc-invitation-needs-action{color:#737677}.calendar-agenda-preview .event-row.fc-invitation-needs-action .event-title{font-style:italic}.calendar-agenda-preview .event-title{padding-left:.5rem}#calendar.content{overflow:hidden!important;position:relative}.calendar-datepicker .ui-datepicker{margin:0!important;border:0;border-radius:0;width:auto;min-width:auto!important;font-size:.9rem;background-color:#f1f3f4}.calendar-datepicker .ui-datepicker table{margin:0}.calendar-datepicker .ui-datepicker td a{font-size:.9rem!important}.calendar-datepicker .ui-datepicker-header{background-color:#f1f3f4;border-top:1px solid #d4dbde}.ui-dialog .calendar-datepicker .ui-datepicker{background:0 0}.ui-dialog .calendar-datepicker .ui-datepicker-header{background:0 0;border:0}.ui-dialog .calendar-datepicker td a{line-height:3em!important;font-size:1rem!important}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}body .fc{font-size:1em}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-default{background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-button-group{display:inline-block}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-popover .fc-header .fc-close{cursor:pointer}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc-bg{bottom:0}.fc-bg table{height:100%}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}adata-goto{cursor:pointer}adata-goto:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover{color:#fff;text-decoration:none}.fc-event.fc-draggable,.fc-eventhref{cursor:pointer}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4}.fc-event .fc-resizer{display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}.fc-icon{display:inline-block;height:1em;line-height:1em;font-size:1em;text-align:center;overflow:hidden;font-family:"Courier New",Courier,monospace;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\2039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\D7";font-size:200%;top:6%}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.ui-widget .fc-disabled-day{background-image:none}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.ui-widget .fc-event{color:#fff;text-decoration:none;font-weight:400}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-toolbar{text-align:center}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px 0}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number{text-align:center}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{position:relative;z-index:3}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight-container{position:relative}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event{overflow:hidden}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\A0-\A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt{float:right}.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title ahref:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee}body.quickview-active .fc .fc-scroller{background:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20576%20512%22%3E%3Cpath%20fill%3D%22%23f2f2f2%22%20d%3D%22M569.354%20231.631C512.969%20135.949%20407.81%2072%20288%2072%20168.14%2072%2063.004%20135.994%206.646%20231.631a47.999%2047.999%200%200%200%200%2048.739C63.031%20376.051%20168.19%20440%20288%20440c119.86%200%20224.996-63.994%20281.354-159.631a47.997%2047.997%200%200%200%200-48.738zM288%20392c-75.162%200-136-60.827-136-136%200-75.162%2060.826-136%20136-136%2075.162%200%20136%2060.826%20136%20136%200%2075.162-60.826%20136-136%20136zm104-136c0%2057.438-46.562%20104-104%20104s-104-46.562-104-104c0-17.708%204.431-34.379%2012.236-48.973l-.001.032c0%2023.651%2019.173%2042.823%2042.824%2042.823s42.824-19.173%2042.824-42.823c0-23.651-19.173-42.824-42.824-42.824l-.032.001C253.621%20156.431%20270.292%20152%20288%20152c57.438%200%20104%2046.562%20104%20104z%22%2F%3E%3C%2Fsvg%3E") center no-repeat;background-size:50%}.fc .fc-header-toolbar{display:flex;background-color:#f1f3f4;margin:0}.fc .fc-header-toolbar>*>*{float:none;margin:0}.fc .fc-left{order:1}.fc .fc-left .fc-button-group{display:none}.fc .fc-center{flex:1;order:2;text-align:center;padding:.25rem}.fc .fc-center h2{margin:0;color:#737677;white-space:nowrap;font-size:1.25rem;font-weight:700}.fc .fc-right{order:3;text-align:right}.fc .fc-right .fc-button{display:none}.fc button{height:unset;padding:.3rem .75rem}.fc button.prev:before{content:"\f104";margin:0!important;line-height:1}.fc button.next:before{content:"\f105";margin:0!important;line-height:1}.fc .btn-group{padding:.5rem;margin:0}.fc .fc-type-freebusy{opacity:.6}.fc .fc-type-freebusy .fc-title{position:absolute;top:-5000px}.fc .fc-type-freebusy td{color:#999}.fc .fc-event-dot{background-color:#c00}.fc a.fc-event,.fc a.fc-event:hover{color:#fff}.fc .fc-event{font-size:13px;background-color:#c00;border-color:#c00}.fc .fc-event .fc-title{font-weight:700}.fc .fc-event .fc-bg{opacity:.15;margin-top:1.1rem}.fc .fc-event.fc-invitation-declined,.fc .fc-event.fc-invitation-needs-action,.fc .fc-event.fc-invitation-tentative{border:1px dashed #999}.fc .fc-event.fc-event-ns-other.fc-invitation-declined{opacity:.7}.fc .fc-event.fc-event-ns-other.fc-invitation-declined .fc-title{text-decoration:line-through}.fc .fc-event.fc-invitation-tentative .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAOuJAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-event.fc-invitation-needs-action .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAFdXx////yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-event.fc-invitation-declined .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAMwAAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-list-view tr.fc-invitation-declined,.fc .fc-list-view tr.fc-invitation-needs-action,.fc .fc-list-view tr.fc-invitation-tentative{color:#888}.fc .fc-list-view tr.fc-invitation-declined .fc-event-dot,.fc .fc-list-view tr.fc-invitation-needs-action .fc-event-dot,.fc .fc-list-view tr.fc-invitation-tentative .fc-event-dot{background-color:#888}.fc .cal-event-status-cancelled,.fc .fc-declined,.fc .fc-needs-action{opacity:.6}.fc .fc-time i{display:inline-block;width:1em;height:1em;margin-left:.25rem}.fc .fc-time i:before{font-size:1em;line-height:1;margin-top:.1rem}.fc .fc-time i.fc-icon-recurring:before{content:"\f24d";font-weight:400}.fc .fc-time i.fc-icon-alarms:before{content:"\f0f3"}.fc .fc-event-temp{opacity:.4}.fc .fc-nonbusiness{background-color:rgba(115,118,119,.2)}.fc .fc-day.fc-today{background:rgba(255,212,82,.2)!important}.fc .fc-now-indicator{border-color:#41b849;border-width:1.5px}.fc .fc-list-item,.fc .fc-list-item:hover td{background:0 0}.fc .fc-list-item a,.fc .fc-list-item td{cursor:default}.fc .fc-list-item-title{font-weight:700}.fc .fc-list-table td{padding:.5rem}.fc .fc-list-heading td{background:rgba(115,118,119,.1)}.fc .fc-list-empty{display:none}.fc .fc-more{color:#00acff!important;white-space:nowrap}.fc .fc-axis,.fc .fc-day-header,.fc .fc-day-number,.fc .fc-week-header,.fc .fc-week-number{color:#737677;font-size:.95rem;padding:.15rem!important}.fc .fc-week-number{text-align:center}.fc .fc-popover{border-radius:.3rem}.fc .fc-popover .fc-header{color:#737677;font-size:.95rem;font-weight:700}.fc .fc-popover .fc-icon-x::after{top:3px}.fc .fc-view.fc-widget-content,.fc td.fc-head-container{border-left-width:0}.fc .fc-body .fc-bg .fc-widget-content,.fc .fc-body .fc-bg-sceleton .fc-widget-content,.fc .fc-body>tr>.fc-widget-content,.fc .fc-list-view{border-bottom-width:0}.print-content .fc .fc-header-toolbar{background-color:#fff}.print-content .fc .fc-center h2{color:#000;padding-bottom:.75rem;font-size:1.5rem!important}.print-content .fc .fc-day.fc-today{background:0 0!important}.print-content .fc a.fc-event{color:#000;background-color:#fff!important}.print-content .fc .fc-event-description{white-space:pre-wrap;font-size:90%}.print-content .fc .fc-event-location{width:20%}.print-content .fc .fc-event-row-secondary td{border:0;padding-top:0!important}.print-content .fc .fc-scroller{overflow:visible!important;height:auto!important}.print-content .fc .fc-view.fc-widget-content,.print-content .fc td.fc-head-container{border-left-width:1px}.print-content .fc .fc-agenda-view,.print-content .fc .fc-list-view,.print-content .fc .fc-month-view{border-bottom:1px solid #ddd}@media screen and (max-width:768px){.fc .fc-left{display:block;width:100%;padding:0}.fc .fc-left button{flex:1 1 auto;border-radius:0}.fc .fc-left .btn-group{padding:0;display:flex}.fc .fc-center,.fc .fc-list-table .fc-event-location,.fc .fc-right{display:none}}@media screen and (min-width:769px) and (max-width:920px){.fc .fc-center{overflow:hidden;text-overflow:ellipsis;flex:1}.fc .fc-center h2{font-size:1rem;line-height:1;padding-top:.45rem}.fc .fc-left .btn,.fc .fc-right .btn{padding-left:.5rem;padding-right:.5rem}}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar{-webkit-appearance:none}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar:vertical,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar:vertical,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar:vertical{width:.6rem}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar:horizontal,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar:horizontal,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar:horizontal{height:.6rem}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar-thumb,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar-thumb,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.4);border-radius:.3rem;border:2px solid #fff}body.task-calendar #print-layout #calendar-view-selector{float:right;padding-top:.25rem}body.task-calendar #print-layout #calendarlist{margin-top:1rem}body.task-calendar #print-layout #calendarlist,body.task-calendar #print-layout #calendarlist ul{list-style:none;padding:0}body.task-calendar #print-layout #calendarlist li{display:inline-block;white-space:nowrap}body.task-calendar #print-layout #calendarlist div,body.task-calendar #print-layout #calendarlist li,body.task-calendar #print-layout #calendarlist ul{float:left}body.task-calendar #print-layout #calendarlist div{margin-right:2rem}body.task-calendar #print-layout #calendarlist a{text-decoration:none;cursor:auto}body.task-calendar #print-layout #calendarlist input,body.task-calendar #print-layout #calendarlist span.actions,body.task-calendar #print-layout #calendarlist span.handle{display:none}@media screen and (min-width:769px){body.task-calendar #layout-sidebar{flex:2;max-width:400px;min-width:240px}}body.task-calendar .ui-datepicker td{width:12.5%}body.task-calendar .ui-datepicker .ui-datepicker-week-col{color:#d4dbde;text-align:center}body.task-calendar .ui-datepicker-inline .ui-datepicker-week-col{color:#00acff;cursor:pointer}body.task-calendar .ui-datepicker-inline .ui-datepicker-activerange{background-color:#ebf9ff}#timezone-display{font-size:.9rem;color:#737677}#agendaoptions{padding:0 .5rem .5rem .5rem;display:flex;background-color:#f1f3f4}#agendaoptions .input-group{padding-right:.5rem;flex-wrap:nowrap}#agendaoptions .input-group:last-child{padding-right:0}#agendaoptions select{min-width:7em}#agendaoptions .input-group-prepend{overflow:hidden;margin-bottom:0}#agendaoptions .input-group-prepend span{display:block;overflow:hidden;text-overflow:ellipsis}#eventshow{margin:0}#eventshow .event-title{font-size:1.5rem;font-weight:700}#eventshow .event-location{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#eventshow .event-description{margin:1rem 0}#eventshow .event-attendees{margin-bottom:1rem}#eventshow .event-attendees .attendee{margin-right:.25rem}#eventshow .event-partstat>span{display:flex}#eventshow .event-partstat .rsvp-status:before{display:inline;float:none}#eventshow .event-partstat .changersvp{cursor:pointer;font-size:1.2rem;margin-left:1em}#eventshow .event-partstat .changersvp:before{content:"\f14b";float:none;display:inline;line-height:1}#eventshow .event-partstat .inner{display:none}#eventedit .edit-attendees-table td{padding-top:.15rem}#eventedit .edit-attendees-table td.role{padding-left:0;width:9em}#fish-eye-view{padding:0}@media screen and (min-width:769px){#fish-eye-view{border-bottom:1px solid #d4dbde}}.availability span{margin-right:.5rem;color:#737677}.availability span:before{content:"\f0c8";display:inline;float:none}.availability span.legend:before{font-size:1em}.availability span.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";display:block;line-height:1}.availability span.unknown:before{color:#bbb}.availability span.free:before{color:#41b849}.availability span.busy:before{color:#ff5552}.availability span.tentative:before{color:#8383fc}.availability span.out-of-office:before{color:#fbaa68}.datetime .custom-switch{padding-left:.5rem}.datetime .custom-switch label{line-height:2;margin-top:.2rem}.datetime input{width:10em!important}@media screen and (max-width:420px){.datetime input{width:8em!important}.datetime input+input{width:6em!important}}.calendar-scheduler .nav{align-items:center}.calendar-scheduler .nav button:first-child{margin-right:.25rem}.calendar-scheduler .nav>div{white-space:nowrap}@media screen and (max-width:420px){.calendar-scheduler .nav button{padding-left:.5rem;padding-right:.5rem}}.calendar-scheduler .schedule-buttons .prev-slot:before{content:"\f053"}.calendar-scheduler .schedule-buttons .next-slot:after{content:"\f054";display:inline-block;float:none;margin-right:0}.calendar-scheduler .schedule-options{flex:1;margin-left:1rem}html.layout-phone .calendar-scheduler .schedule-options{order:100;margin-left:0}.calendar-scheduler .schedule-nav{flex:1;margin-left:.3rem;text-align:right}.calendar-scheduler .schedule-nav button{line-height:1.8}.calendar-scheduler .schedule-range{width:60%;margin-top:2rem}html.layout-phone .calendar-scheduler .schedule-range{margin:0}.calendar-scheduler .schedule-legend .attendee{margin-right:.5rem}.calendar-scheduler .attendees-list{position:relative}.calendar-scheduler .attendees-list a.attendee-role-toggle{position:absolute;left:0;display:inline-block;width:1em;cursor:pointer}.calendar-scheduler .attendees-list div.attendee{border-top:1px solid #f1f3f4;line-height:1.7rem;height:1.8rem}.calendar-scheduler .attendees-list .attendee{white-space:nowrap}.calendar-scheduler .attendees-list .attendee.spacer{height:10px}.calendar-scheduler .attendees-list .attendee.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";font-weight:900}.calendar-scheduler .attendees-list .attendee.total{font-weight:700}.calendar-scheduler .attendees-list .attendee.spacer:before,.calendar-scheduler .attendees-list .attendee.total:before{display:none}.calendar-scheduler .schedule-table{table-layout:fixed}.calendar-scheduler .schedule-table th{border-top:0}.calendar-scheduler .schedule-table td.attendees{width:25%;overflow:hidden;border-top:0}html.layout-phone .calendar-scheduler .schedule-table td.attendees{width:35%}.calendar-scheduler .schedule-table td.attendees .attendees-list{border-bottom:1px solid #d4dbde}.calendar-scheduler .schedule-table td.times{width:auto;border-top:0}.calendar-scheduler .schedule-table td.times table{margin:0}.calendar-scheduler .schedule-table td.times td{height:1.8rem;border-top:1px solid #f1f3f4;white-space:nowrap}.calendar-scheduler .schedule-table div.scroll{position:relative;overflow:auto}.calendar-scheduler .schedule-table .timesheader{height:1.4rem;border-top:1px solid #d4dbde}.calendar-scheduler .schedule-table .boxtitle{margin:0;padding:0;font-size:1rem;font-weight:700;padding-top:.5rem;line-height:2}.calendar-scheduler .schedule-table td{padding:4px}.calendar-scheduler .schedule-table tbody td{padding:0}.calendar-scheduler .schedule-table tbody td div{height:100%}.calendar-scheduler .schedule-table tr.spacer td{padding:0;height:10px}.calendar-scheduler .schedule-table tr.dates thcolspan="1"{min-width:48px;max-width:48px;text-align:center;font-size:.7rem;line-height:2.9}.calendar-scheduler .schedule-table tr.times td{cursor:pointer;min-width:48px;max-width:48px;font-size:.7rem;text-align:center;color:#00acff;height:1.4rem;padding:0 .1rem;vertical-align:middle;border-top:1px solid #d4dbde;border-left:1px solid #f1f3f4}.calendar-scheduler .schedule-table .fbcontent td{border-left:1px solid #f1f3f4}.calendar-scheduler .schedule-table .fbcontent:last-child td{border-bottom:1px solid #d4dbde}.calendar-scheduler .schedule-table div.unknown{background-color:#bbb}.calendar-scheduler .schedule-table div.free{background-color:#41b849}.calendar-scheduler .schedule-table div.busy{background-color:#ff5552}.calendar-scheduler .schedule-table div.tentative{background-color:#8383fc}.calendar-scheduler .schedule-table div.out-of-office{background-color:#fbaa68}.calendar-scheduler .schedule-table div.all-busy,.calendar-scheduler .schedule-table div.all-out-of-office,.calendar-scheduler .schedule-table div.all-tentative{overflow:hidden}.calendar-scheduler .schedule-table div.all-busy span,.calendar-scheduler .schedule-table div.all-out-of-office span,.calendar-scheduler .schedule-table div.all-tentative span{display:block;width:300%;height:300%;border:1px solid #fff;background:#ff231f;transform:rotate(42deg) translate(2%)}.calendar-scheduler .schedule-table div.all-busy.w10 span,.calendar-scheduler .schedule-table div.all-out-of-office.w10 span,.calendar-scheduler .schedule-table div.all-tentative.w10 span{display:none}.calendar-scheduler .schedule-table div.all-busy.w20 span,.calendar-scheduler .schedule-table div.all-busy.w25 span,.calendar-scheduler .schedule-table div.all-out-of-office.w20 span,.calendar-scheduler .schedule-table div.all-out-of-office.w25 span,.calendar-scheduler .schedule-table div.all-tentative.w20 span,.calendar-scheduler .schedule-table div.all-tentative.w25 span{transform:rotate(17deg) translate(-9%)}.calendar-scheduler .schedule-table div.all-busy.w30 span,.calendar-scheduler .schedule-table div.all-out-of-office.w30 span,.calendar-scheduler .schedule-table div.all-tentative.w30 span{transform:rotate(28deg) translate(-7%)}.calendar-scheduler .schedule-table div.all-busy.w33 span,.calendar-scheduler .schedule-table div.all-out-of-office.w33 span,.calendar-scheduler .schedule-table div.all-tentative.w33 span{transform:rotate(32deg) translate(-5%)}.calendar-scheduler .schedule-table div.all-busy.w40 span,.calendar-scheduler .schedule-table div.all-out-of-office.w40 span,.calendar-scheduler .schedule-table div.all-tentative.w40 span{transform:rotate(36deg) translate(-3%)}.calendar-scheduler .schedule-table div.all-busy.w60 span,.calendar-scheduler .schedule-table div.all-out-of-office.w60 span,.calendar-scheduler .schedule-table div.all-tentative.w60 span{transform:rotate(48deg) translate(6%)}.calendar-scheduler .schedule-table div.all-busy.w67 span,.calendar-scheduler .schedule-table div.all-out-of-office.w67 span,.calendar-scheduler .schedule-table div.all-tentative.w67 span{transform:rotate(52deg) translate(9%)}.calendar-scheduler .schedule-table div.all-busy.w70 span,.calendar-scheduler .schedule-table div.all-busy.w75 span,.calendar-scheduler .schedule-table div.all-out-of-office.w70 span,.calendar-scheduler .schedule-table div.all-out-of-office.w75 span,.calendar-scheduler .schedule-table div.all-tentative.w70 span,.calendar-scheduler .schedule-table div.all-tentative.w75 span{transform:rotate(55deg) translate(12%,30%)}.calendar-scheduler .schedule-table div.all-busy.w80 span,.calendar-scheduler .schedule-table div.all-out-of-office.w80 span,.calendar-scheduler .schedule-table div.all-tentative.w80 span{transform:rotate(56deg) translate(13%,30%)}.calendar-scheduler .schedule-table div.all-busy.w90 span,.calendar-scheduler .schedule-table div.all-out-of-office.w90 span,.calendar-scheduler .schedule-table div.all-tentative.w90 span{transform:rotate(59deg) translate(16%,30%)}.calendar-scheduler .schedule-table div.all-busy.w100 span,.calendar-scheduler .schedule-table div.all-out-of-office.w100 span,.calendar-scheduler .schedule-table div.all-tentative.w100 span{transform:rotate(62deg) translate(19%,30%)}.calendar-scheduler .schedule-table div.all-tentative span{background:#5151fb}.calendar-scheduler .schedule-table div.all-out-of-office span{background:#fa8e36}#schedule-event-time{position:absolute;border-radius:.3rem;cursor:move;border:2px solid #444;background-color:rgba(0,0,0,.3)}.resources-dialog .resource-selection{flex:4;min-width:300px}.resources-dialog .resource-content{flex:10;margin-left:1em}.resources-dialog .listing li.resource>a{color:#2c363a}.resources-dialog .listing li.resource>a:before{content:"\f1b2"}.resources-dialog .slot-nav{display:none}#resource-availability{height:100%}#resource-availability .fc{height:100%;overflow:hidden;position:relative;border-bottom:1px solid #ddd}#resource-availability .fc-view{border-left:1px solid #ddd}#resource-availability .fc-header-toolbar{height:0}.standalone-invitebox{margin:0 auto;max-width:500px;width:95%;display:flex;flex-direction:column;top:15vh;position:relative}.standalone-invitebox #logo{max-height:90px}.standalone-invitebox .invitebox{margin-top:3em!important}@media screen and (min-width:769px){.searchbar a.button.date{display:none}}#rcmfd_alarmvalue{max-width:80px}@media screen and (max-width:768px){#agendaoptions{padding-top:.5rem}.calendar-scheduler .schedule-range{width:100%}#layout-sidebar .calendar-datepicker{display:none}.resources-dialog .resource-content{display:none;margin:0}.resources-dialog .resource-content ul{margin:1em 1em 0 1em}#resource-availability{margin:0 1em}}body.task-calendar .header-title{position:relative}body.task-calendar .header-title .tz{position:absolute;bottom:0;left:0;width:100%;line-height:2;font-size:.8rem;font-weight:400;color:#737677}.listing.iconized li.activesync>a:before{content:"\f143"}#devices-table td:not(.selection){display:flex}#devices-table td:not(.selection):before{content:"\f143"}#devices-table td:not(.selection) span{overflow:hidden;text-overflow:ellipsis}#devices-table .devicealias{flex:1}#devices-table .devicetype{max-width:40%;font-style:italic;padding-left:.5em}.listing.iconized li.delegation>a:before{content:"\f21b"}#delegate-table td:before{content:"\f21b"}a.btn.fromcloud:before,a.button.filesaveall:before,a.button.saveas:before,li>a.icon.saveas:before{content:"\f07b"}.menu a.mount.storage:before{content:"\f1c0"}.menu a.open:before{content:"\f06e"}.menu a.cancel:before{content:"\f00d"}.menu a.share:before{content:"\f1e0"}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder{order:-1}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder:before{content:"\f067"}.folderlist li.collection a.name{padding-left:.5em}.folderlist li.collection.audio a.name:before{content:"\f028";font-weight:900}.folderlist li.collection.video a.name:before{content:"\f03d";font-weight:900}.folderlist li.collection.image a.name:before{content:"\f03e"}.folderlist li.collection.document a.name:before{content:"\f02d";font-weight:900}.folderlist li.collection.sessions a.name:before{content:"\f0c0";font-weight:900}.folderlist li.mailbox a.subscription{cursor:pointer;padding:0!important;border-left:0;width:auto}.folderlist li.mailbox a.subscription:before{content:"\f02e";font-weight:400;height:auto;color:#00acff;margin-right:.25rem}.folderlist li.mailbox a.subscription.subscribed:before{content:"\f02e";font-weight:900}#filelistcontainer{position:relative}#filesuploadform{position:absolute!important}#filelistbox{height:100%}#filelistbox.droptarget.active{box-shadow:0 0 2px 1px #b9b9b9 inset}#filelistbox.droptarget.hover{box-shadow:0 0 2px 1px #b9b9b9 inset;background-color:#ececec}.filelist thead{display:none}.filelist td.options{display:none}.filelist td.name{position:relative}.filelist td.mtime{width:11em}.filelist td.size{text-align:right;width:6em}.filelist tr.session>td.name{padding-right:2em}.filelist tr.session>td.name:after{content:"\f0c0";color:#d4dbde;position:absolute;right:.25em;top:0}.filelist tr.session.invited>td.name:after{color:#41b849}.filelist tr.session.owner>td.name:after{color:#161b1d}@media screen and (max-width:480px){.filelist td.mtime{display:none}}.filelist tbody td.filename span{background:0 0!important}.filelist tbody td.filename span:before{content:"\f15b";font-weight:400}.filelist tbody td.filename.application_pdf span:before,.filelist tbody td.filename.pdf span:before{content:"\f1c1"}.filelist tbody td.filename.application_msword span:before,.filelist tbody td.filename.application_vnd_ms_word span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_wordprocessingml_document span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_wordprocessingml_template span:before{content:"\f1c2"}.filelist tbody td.filename.application_vnd_ms_excel span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_spreadsheet span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_spreadsheet_template span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_spreadsheetml_sheet span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_spreadsheetml_template span:before{content:"\f1c3"}.filelist tbody td.filename.application_vnd_ms_powerpoint span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_presentation span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_slideshow span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_template span:before{content:"\f1c4"}.filelist tbody td.filename.application_vnd_oasis_opendocument_text span:before{content:"\f15c"}.filelist tbody td.filename.application_vnd_oasis_opendocument_presentation span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_presentation_template span:before{content:"\f1c4"}.filelist tbody td.filename.application_x_7z_compressed span:before,.filelist tbody td.filename.application_x_ace span:before,.filelist tbody td.filename.application_x_arc span:before,.filelist tbody td.filename.application_x_arj span:before,.filelist tbody td.filename.application_x_bzip_compressed_tar span:before,.filelist tbody td.filename.application_x_lha span:before,.filelist tbody td.filename.application_x_rar span:before,.filelist tbody td.filename.application_x_tarz span:before,.filelist tbody td.filename.application_x_tzo span:before,.filelist tbody td.filename.application_x_zip span:before,.filelist tbody td.filename.application_x_zoo span:before,.filelist tbody td.filename.application_zip span:before,.filelist tbody td.filename.tar span:before{content:"\f1c6"}.filelist tbody td.filename.application_vnd_stardivision_draw span:before,.filelist tbody td.filename.application_vnd_sun_xml_draw span:before,.filelist tbody td.filename.application_vnd_sun_xml_draw_template span:before,.filelist tbody td.filename.image span:before,.filelist tbody td.filename.image_jpeg span:before,.filelist tbody td.filename.image_jpeg2000 span:before,.filelist tbody td.filename.image_png span:before,.filelist tbody td.filename.image_svg_xml span:before,.filelist tbody td.filename.image_x_eps span:before{content:"\f1c5"}.filelist tbody td.filename.audio span:before{content:"\f1c7"}.filelist tbody td.filename.video span:before{content:"\f1c8"}.filelist tbody td.filename.ascii span:before,.filelist tbody td.filename.text_plain span:before{content:"\f15c"}.filelist tbody td.filename.text_html span:before{content:"\f1c9"}#folder-mount-form td.source{display:flex;align-items:flex-start;padding:.5rem}#folder-mount-form td.source.selected{background-color:#ebf9ff}#folder-mount-form td.source>input{height:32px;margin-right:.5rem}#folder-mount-form td.source>div{flex:1}#folder-mount-form td.source img{height:32px;margin-right:.5rem}#folder-mount-form td.source .name{font-weight:700}#folder-mount-form td.source .description{font-size:90%}#folder-mount-form td.source table{margin-top:.5rem}#folder-mount-form td.source .form-group{margin-bottom:0}#folder-mount-form .auth-options{margin-top:.5rem}#folder-mount-form .auth-options>label:before{line-height:1}.files-dialog .selection-list{flex:1;min-width:220px}.files-dialog .selection-content{flex:2}@media screen and (min-width:769px){.files-dialog .selection-content{border:1px solid #d4dbde;border-left:0}}.files-dialog a.subscription{display:none}@media screen and (max-width:768px){.files-dialog .selection-list{display:none}}.document-editor-header .toolbar{text-align:left!important;flex:1}.document-editor-header .toolbar a{text-align:center}.document-editor-header a.button.icon.members:before{content:"\f0c0"}.document-editor-header #collaborators{order:9;display:flex;margin-right:.5rem;margin-left:2rem}.document-editor-header #collaborators a.button.add:before{content:"\f067"}.document-editor-header #collaborators .inner{display:none}.document-editor-header #doc-title{flex:1;order:8}.document-editor-header #doc-title input{display:inline}.session-members img.photo{width:48px;height:48px;min-width:48px;overflow:hidden;background:url("../../../skins/elastic/images/contactpic.png") center center no-repeat #fff;background-size:cover;border-radius:50%;border:solid 3px #eee;margin-left:.5rem}.session-members ul{padding:0;margin:0;list-style-type:none}.session-members ul li{display:flex;align-items:center}.session-members ul img.photo{margin-left:0;margin-right:1em}.editors-dialog table th{border:0}.editors-dialog table tr:last-child td{border-bottom:1px solid #d4dbde}.editors-dialog table td.options{width:1%}.editors-dialog table td.options a.delete:before{content:"\f2ed";display:inline;line-height:1}.editors-dialog label{display:block}button.participant.add:before{content:"\f234"}.iframe-wrapper.file-type-audio,.iframe-wrapper.file-type-video{display:flex;align-items:center;justify-content:center}@media screen and (min-width:769px){.iframe-wrapper.file-type-audio,.iframe-wrapper.file-type-video{padding:1em}}#shareform table td,#shareform table th{padding-left:.15rem;max-width:10vw;overflow:hidden;text-overflow:ellipsis}#shareform table td:last-child,#shareform table th:last-child{padding-right:.15rem;width:1%;max-width:unset}#shareform table td{vertical-align:middle}#shareform table td.form input{margin-bottom:.25rem;width:100%}#shareform table tr+tr>td{border-top:0;padding-bottom:.25rem}#shareform table button{padding:.185rem .75rem;width:100%}.menu a.appendnote:before{content:"\f249"}#noteform iframe{min-height:10rem}#notereferences{margin-top:.5rem}#notereferences .attachmentslist a.delete{margin-left:.5rem}#notedetailstitle .dates{color:#737677}#print-layout #notetitle{font-size:1.5rem;line-height:2}#print-layout #notetags{margin-bottom:.5rem}#print-layout #notecreated{margin-right:2rem}#kolabnoteslist tr{display:flex}#kolabnoteslist td.title{overflow:hidden;text-overflow:ellipsis;flex:1}#kolabnoteslist td.title:before{content:"\f249";font-weight:400}#kolabnoteslist td.date{overflow:unset;color:#737677;font-style:italic}.kolabmessagenotes>i.icon:before{content:"\f249"!important;font-weight:400!important}.kolabmessagenotes>a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;text-decoration:none}.menu a.tags:before{content:"\f02c"}.menu a.tag.remove.all:before,.menu a.tag.remove:before,.menu a.tag:before{content:"\f02b"}#taglist li{padding:0 .5rem}#taglist li:before{content:"\f02b";margin:0 .5rem 0 .2rem}#tag-selector li a:before,#taglist li:before,#tagsform option:before{color:#009eea}#tag-selector li:hover a:before,#tagsform option:checked:before{color:#fff}#tagsform{min-height:15rem}#tagsform select{padding:0;margin-bottom:.5rem}#tagsform option{padding:.5rem;outline:0;border:0}#tagsform option:before{content:"\f02b";line-height:1}#tagsform .buttons{text-align:center}#tagsform .buttons button{margin:0 .25rem}.tagbox{color:#fff;background-color:#37beff!important;border:0!important;border-radius:.25rem;max-width:4em;padding:.1rem .4rem;margin-right:.2rem}.tagbox:not(.tagedit-listelement) a{color:inherit;padding-left:.5rem;text-decoration:none}h2>.tagbox{font-size:1.2rem}.tag-droppable.formcontainer.ui-droppable-active{background-color:#f1f3f4!important}.tag-droppable.formcontainer.ui-droppable-hover{background-color:#ffc!important}.invitebox>i.icon{position:absolute;top:0;padding-top:.5em}.invitebox>span{padding-left:2.5em}.invitebox td{padding:2px;vertical-align:top}.invitebox td.ititle{font-weight:700;padding-right:.5em}.invitebox td.label{color:#666;padding-right:1em}.invitebox td.recurrence-id{text-transform:uppercase;font-style:italic}.invitebox td.date.modified{font-weight:700;color:#ff5552}.invitebox td em{font-weight:700}.invitebox .itip-buttons{display:flex;flex-wrap:wrap}.invitebox .itip-buttons input.button{margin:0 .25rem .25rem 0}.invitebox .rsvp-buttons{width:100%;padding-top:.25rem}.invitebox .itip-reply-controls{margin-top:.25rem;width:100%;line-height:2}.invitebox .itip-reply-controls>label{display:inline}.invitebox .itip-reply-controls>label label{line-height:1;margin-right:.25rem}.invitebox .itip-reply-controls a{margin-left:1em;white-space:nowrap}.invitebox .rsvp-status{margin:.5rem 0;width:100%}.invitebox .rsvp-status.hint{color:#666;font-style:italic}.invitebox .folder-select{white-space:nowrap}.invitebox .folder-select select{display:initial;width:auto}.rsvp-status:before{line-height:1.1;color:#4d5f66;float:none;display:inline}.rsvp-status.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";line-height:1}.rsvp-status.declined:before{content:"\f05e";color:#ff5552}.rsvp-status.tentative:before{content:"\f058";color:#ffd452}.rsvp-status.accepted:before{content:"\f058";color:#41b849}.rsvp-status.delegated:before{content:"\f064"}.rsvp-status.needs-action:before{content:"\f059"}.attendee:before{content:"\f059";display:inline;float:none;font-size:1em;color:#737677}.attendee.req-participant:before{content:"\f007"}.attendee.opt-participant:before{content:"\f007";font-weight:400}.attendee.non-participant:before{content:"\f007";color:#ccc}.attendee.chair:before{content:"\f007";color:#ffd452}.attendee.accepted:before,.attendee.completed:before{content:"\f058";color:#41b849}.attendee.declined:before{content:"\f05e";color:#ff5552}.attendee.tentative:before{content:"\f058";color:#ffd452}.attendee.delegated:before{content:"\f064"}.attendee.organizer:before{content:"\f0b1"}.attendee.in-process:before{content:"\f013"}.attendees-comentbox label{display:inline}.edit-attendees-table{width:100%}.edit-attendees-table td,.edit-attendees-table th{width:1%;text-align:center}.edit-attendees-table td{border:0;padding:0 .3rem}.edit-attendees-table th{border-bottom:1px solid #eee!important}.edit-attendees-table td.name,.edit-attendees-table td.role,.edit-attendees-table th.name,.edit-attendees-table th.role{width:auto;text-align:left}.edit-attendees-table th.invite input{display:none}.edit-attendees-table th.invite label{cursor:pointer}.edit-attendees-table th.invite label:before{content:"\f0e0";display:inline;float:none;line-height:1}.edit-attendees-table td.invite .custom-switch{margin-top:.15rem}.edit-attendees-table td.name span{line-height:2.5;display:flex}.edit-attendees-table td.name span>:first-child{overflow:hidden;text-overflow:ellipsis;flex:1;width:1px;white-space:nowrap}.edit-attendees-table td.availability span,.edit-attendees-table td.confirmstate span{margin:0}.edit-attendees-table td.availability span:after,.edit-attendees-table td.availability span:before,.edit-attendees-table td.confirmstate span:after,.edit-attendees-table td.confirmstate span:before{line-height:2;margin:0;font-size:1.2em;height:2em;width:2em}.edit-attendees-table td.options a{display:inline-block;height:2em}.edit-attendees-table td.options a:before{line-height:1.8;margin:0}.edit-attendees-table a.expandlink:before{content:"\f0fe";line-height:2}.edit-attendees-table .inner{display:none}html.layout-phone .edit-attendees-table th.availability,html.layout-phone .edit-attendees-table th.confirmstate{text-indent:-5000px}html.layout-phone .edit-attendees-table td.role{max-width:7em}html.layout-phone .edit-attendees-table select{padding-left:.5rem}.form-searchbar{display:flex;margin-bottom:.5rem}.form-searchbar inputtype=text{flex:1}html.layout-phone .form-searchbar inputtype=text{max-width:50%}.form-searchbar inputtype=button{margin-left:.5em;overflow:hidden;text-overflow:ellipsis}.attachmentslist li.ics:before,.attachmentslist li.text.calendar:before,.messagelist tbody .attachment span.ical:before{content:"\f073";font-weight:400}.alarms-input .edit-alarm-item{display:flex}.alarms-input .edit-alarm-item+.edit-alarm-item{margin-top:.25rem}.alarms-input .edit-alarm-item.first .delete-alarm,.alarms-input .edit-alarm-item:not(.first) .add-alarm{display:none}.alarms-input .edit-alarm-buttons a{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.alarms-input .edit-alarm-buttons a:before{margin:0;width:1em}.alarms-input .edit-alarm-buttons a:focus{box-shadow:none}.alarms-input .edit-alarm-buttons a.add:before{content:"\f067"}.alarms-input .edit-alarm-buttons .inner{display:none}.alarms-input .edit-alarm-type{flex:1;border-top-right-radius:0;border-bottom-right-radius:0}.alarms-input .edit-alarm-type:focus{z-index:2}.alarms-input .edit-alarm-set{display:flex;flex:1}.alarms-input .edit-alarm-values{flex:5}.alarms-input .edit-alarm-values .form-control{border-radius:0}.alarms-input .edit-alarm-values :first-child{border-left:0}.alarms-input .edit-alarm-offset{flex:5}.alarms-input .edit-alarm-date,.alarms-input .edit-alarm-related,.alarms-input .edit-alarm-time{flex:3}.recurrence-form .recurrence-rdates{width:100%;padding:0;list-style-type:none}.recurrence-form .recurrence-rdates:empty{margin:0}.recurrence-form .recurrence-rdates a.delete{margin-left:2em}.recurrence-form .recurrence-rdates a.delete:before{display:inline-block;float:none}.recurrence-form .recurrence-rdates .inner{display:none}.recurrence-form .recurrence-onevery select{width:40%;display:inline}.recurrence-form .inputform{display:flex}.recurrence-form .inputform input.button{margin-left:.25rem}.recurrence-form div.line{width:100%;display:flex;margin-bottom:.25rem}.recurrence-form div.line label{margin-left:.5em;min-width:4em;line-height:2.5}.recurrence-form .month,.recurrence-form .monthday,.recurrence-form .weekday{display:inline-block;width:3.5em;margin-right:.5rem;white-space:nowrap}.recurrence-form .month input,.recurrence-form .monthday input,.recurrence-form .weekday input{margin-right:.25rem}.recurrence-form .monthday{width:2.75em}.recurrence-form .table td{border:0;padding:0}.recurrence-form .table td.label{white-space:nowrap}.recurrence-form .table td:first-child label{line-height:2.5}.recurrence-form .table td label.monthday:first-child{margin-top:.5rem}.recurrence-form .input-group-append,.recurrence-form .input-group-prepend{display:initial}#event-status-badge{width:7rem;height:7rem;position:absolute;top:0;right:0;overflow:hidden}#event-status-badge span{display:none;text-transform:uppercase;line-height:20px;position:absolute;left:-2.4rem;top:2.4rem;width:13.2rem;text-align:center;font-weight:700;font-size:.85rem;color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#event-status-badge span:before{display:inline;float:none}.status-cancelled #event-status-badge span{background-color:#ff231f;display:block}.status-cancelled #event-status-badge span:before{content:"\f057"}#alarm-display h3{font-size:1.2rem;margin-bottom:.25rem}#alarm-display h3:before{content:"\f073";font-weight:400;font-size:1em}#alarm-display h3.type-task:before{content:"\f274";font-weight:400}#alarm-display .event-section{font-size:.9rem;color:#737677;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#alarm-display .alarm-actions{text-align:right;margin-bottom:.25rem}#alarm-display .alarm-actions a:first-child{margin-right:1em}#alarm-display .alarm-actions a:before{display:inline;float:none}#alarm-display a.alarm-action-snooze:before{content:"\f1f6"}#alarm-display a.alarm-action-dismiss:before{content:"\f2ed"}#alarm-snooze-dropdown a:before{content:"\f017";font-weight:400}.dialog-message{margin:0;opacity:.95;width:100%;padding:.75em;margin-top:.25em;color:#2c363a;background-color:rgba(255,212,82,.2)}.dialog-message>label{margin:0;display:block}.dialog-message>label label:before{line-height:1.25;margin-right:.25rem}.dialog-message .message{display:flex}.dialog-message+.savemode{margin-top:1rem}.dialog-message+.savemode a.btn{margin-right:.5rem}.dialog-message>.savemode{margin-top:.5rem}.dialog-message>.savemode label{margin-right:1rem}.dialog-message>.savemode input{margin-right:.25rem}@media screen and (max-width:420px){.nav-link.nav-icon{width:3em;margin-right:5px;padding:.5rem .5rem .5rem .65rem}.nav-link.nav-icon:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin:0 1rem 0 0;width:1em;line-height:1.2}.nav-link.nav-icon.resources:before{content:"\f1b2";margin-left:.1rem}.nav-link.nav-icon.attachments:before{content:"\f0c6"}.nav-link.nav-icon.attendees:before{content:"\f0c0"}}.menu a.taskaddlink:before,.menu a.tasklist:before,.menu a.tasklistlink:before{content:"\f274"}.tasklist-invitebox>i.icon:before{content:"\f274"!important}.listing li>div.tasklist .listname:before{content:"\f274"}#tasklist li.taskitem{border-bottom:0}#tasklist li.taskitem div.taskhead{position:relative;display:block;height:3.8rem;padding-left:1.5em;outline:0}#tasklist li.taskitem div.taskhead.flagged{color:#ff5552!important}#tasklist li.taskitem div.taskhead.selected{background-color:#ebf9ff}#tasklist li.taskitem div.taskhead.droptarget{background-color:#ffc}#tasklist li.taskitem div.taskhead.complete span.title{color:rgba(44,54,58,.5)}#tasklist li.taskitem div.taskhead.complete .progressbar{display:none}#tasklist li.taskitem>div,#tasklist li.taskitem>span{border-bottom:1px solid #f1f3f4}#tasklist li.taskitem ul{padding:0;border:0}#tasklist li.taskitem ul li{padding-left:0}#tasklist li.taskitem ul li .taskhead,#tasklist li.taskitem ul li .title{padding-left:3.25em}#tasklist li.taskitem ul li .childtoggle{left:1.5em}#tasklist li.taskitem ul li li .taskhead,#tasklist li.taskitem ul li li .title{padding-left:4.75em}#tasklist li.taskitem ul li li .childtoggle{left:3em}#tasklist li.taskitem ul li li li .taskhead,#tasklist li.taskitem ul li li li .title{padding-left:6.25em}#tasklist li.taskitem ul li li li .childtoggle{left:4.5em}#tasklist li.taskitem ul li li li li .taskhead,#tasklist li.taskitem ul li li li li .title{padding-left:7.75em}#tasklist li.taskitem ul li li li li .childtoggle{left:6em}#tasklist li.taskitem ul li li li li li .taskhead,#tasklist li.taskitem ul li li li li li .title{padding-left:9.25em}#tasklist li.taskitem ul li li li li li .childtoggle{left:7.5em}#tasklist .childtoggle{position:absolute;left:0;top:0;width:1.5em;padding:0 0 0 .25rem;height:3.8rem;cursor:pointer;z-index:1}#tasklist .childtoggle .inner{display:none}#tasklist .childtoggle:before{content:"\f105";margin:0;width:1em;line-height:3.8rem}#tasklist .childtoggle.expanded:before{content:"\f107"}#tasklist .childtoggle.collapsed:before{content:"\f105"}#tasklist span.title{position:absolute;left:0;right:0;bottom:0;line-height:2em;padding:0 0 0 .2em;padding-left:1.75em;margin-right:2em;overflow:hidden;text-overflow:ellipsis}#tasklist span.tags{position:absolute;right:2em;top:0;line-height:2em;text-align:right}#tasklist span.date{position:absolute;padding-left:.2em;font-size:90%;line-height:2.5;color:#737677;cursor:pointer}#tasklist span.date input{line-height:1;padding:0;margin-top:-2px}#tasklist span.flagged{position:absolute;right:0;top:0;line-height:1.8em;cursor:pointer}#tasklist .taskhead:not(.flagged):hover span.flagged:before{content:"\f024";font-weight:400}#tasklist .taskhead.flagged span.flagged:before{content:"\f024"}#tasklist .progressbar{position:absolute;bottom:1px;left:.2em;right:.2em}#tasklist .progressbar .progressvalue{border-top:2px solid #ffd452}#tasklist .custom-switch{position:absolute;top:1.4rem;z-index:1;height:2.3em}#tasklist .actions{display:none}@media screen and (min-width:1200px){#tasklist .taskhead{border-left:2px solid transparent}#tasklist .taskhead.focused{border-left:2px solid #9ddfff;outline:0}}html.touch #tasklist li{font-size:1rem}html.touch #tasklist .custom-switch,html.touch #tasklist inputtype=checkbox,html.touch #tasklist span.flagged{display:none}html.touch #tasklist span.title{margin-right:.5rem}html.touch #tasklist span.tags{right:.5rem}#taskshow+.formbuttons button.disabled{display:none}#taskshow .task-parent-title{color:#737677;font-size:90%;margin-bottom:.5rem}#taskshow .task-title{font-size:1.5rem;font-weight:700}#taskshow .task-description{margin:1rem 0}#taskshow.status-completed h2{color:rgba(44,54,58,.5)}#taskshow.status-flagged h2:before{content:"\f024";color:#ff5552;font-size:.9em}#taskshow .attachmentslist li{margin-right:1em}#taskedit-attachment-form{position:absolute}.messagetasklinks>i.icon:before{content:"\f274"!important}.messagetasklinks .tasklist{list-style-type:none;margin:0;padding:0}.messagetasklinks .tasklist li{display:flex;align-items:center}.messagetasklinks input{height:auto!important}#print-layout #tasklist{padding:0}#print-layout #tasklist li{list-style-type:none}#print-layout #tasklist .description{display:block;white-space:pre-wrap}#print-layout #tasklist .title{position:relative;font-weight:700;padding:0;margin:0}#print-layout #tasklist .taskhead{height:auto}.taskitem-draghelper{overflow:hidden;text-overflow:ellipsis}@media screen and (max-height:750px) and (min-width:769px){html.dark-mode #taskmenu a{width:41px}}html.dark-mode .watermark{background-color:#21292c;background-blend-mode:soft-light}html.dark-mode .watermark:before{background:0 0}html.dark-mode #filelistcontainer,html.dark-mode .fc-scroller{scrollbar-width:thin}html.dark-mode .fc .fc-header-toolbar{background-color:#374549}html.dark-mode .fc #timezone-display,html.dark-mode .fc .fc-center h2{color:#c5d1d3}html.dark-mode .filelist tr.session.owner>td.name::after,html.dark-mode .resources-dialog .listing li.resource>a,html.dark-mode .rsvp-status:not(.accepted):not(.tentative):not(.declined)::before{color:#c5d1d3}html.dark-mode #tasklist li.taskitem>div,html.dark-mode #tasklist li.taskitem>span,html.dark-mode .fc-unthemed .fc-content,html.dark-mode .fc-unthemed .fc-divider,html.dark-mode .fc-unthemed .fc-list-heading td,html.dark-mode .fc-unthemed .fc-list-view,html.dark-mode .fc-unthemed .fc-popover,html.dark-mode .fc-unthemed .fc-row,html.dark-mode .fc-unthemed td,html.dark-mode .fc-unthemed th{border-color:#2c373a}html.dark-mode .calendar-scheduler .attendees-list div.attendee,html.dark-mode .calendar-scheduler .schedule-table .timesheader,html.dark-mode .calendar-scheduler .schedule-table td.attendees .attendees-list,html.dark-mode .calendar-scheduler .schedule-table td.times td,html.dark-mode .fc-unthemed td,html.dark-mode .fc-unthemed th,html.dark-mode .files-dialog .selection-content{border-color:#4d6066}html.dark-mode #resource-availability .fc,html.dark-mode #resource-availability .fc-view{border-color:#4d6066}html.dark-mode .edit-attendees-table th,html.dark-mode .selection-dialog .form-addon,html.dark-mode .selection-dialog .header,html.dark-mode .selection-dialog .selection-list{border-color:#4d6066!important}html.dark-mode .selection-dialog .form-addon,html.dark-mode .selection-dialog .header,html.dark-mode .selection-dialog .listing ul{background-color:transparent}html.dark-mode #tasklist li.taskitem div.taskhead.selected,html.dark-mode .fc-unthemed .fc-divider,html.dark-mode .fc-unthemed .fc-list-heading td,html.dark-mode .fc-unthemed .fc-popover .fc-header,html.dark-mode .listing li.selected>div>*,html.dark-mode body.task-calendar .ui-datepicker-inline .ui-datepicker-activerange{color:#37beff;background-color:#374549}html.dark-mode #folder-mount-form td.source.selected{background-color:#374549}html.dark-mode #tagsform option,html.dark-mode .tagedit-list li.tagedit-listelement-new input{color:#c5d1d3}html.dark-mode #kolabnoteslist td.date,html.dark-mode #notedetailstitle .dates,html.dark-mode #tasklist span.date,html.dark-mode .availability span,html.dark-mode .calendar-agenda-preview .event-row.current,html.dark-mode .fc .fc-axis,html.dark-mode .fc .fc-day-header,html.dark-mode .fc .fc-day-number,html.dark-mode .fc .fc-week-header,html.dark-mode .fc .fc-week-number,html.dark-mode .formcontent.text-only .faded *,html.dark-mode .invitebox .rsvp-status.hint,html.dark-mode .invitebox td.label{color:#8ba3a7}html.dark-mode .invitebox .folder-select select{background-color:#21292c}html.dark-mode .tagedit-listtabindex="-1"{border-color:#37beff;box-shadow:0 0 0 .2rem rgba(55,190,255,.25);background:#2c373b}html.dark-mode #tasklist .progressbar .progressvalue{border-color:#997f31}html.dark-mode .listing li.readonly:not(.virtual)>div a:first-child:after,html.dark-mode .listing li>div.readonly a:first-child:after{color:#c5d1d3;background-color:#21292c}html.dark-mode .dialog-message{opacity:1;color:#c5d1d3;background-color:#997f31}
3
\ No newline at end of file
4
+#alarm-display .alarm-actions a:before,#alarm-display h3:before,#delegate-table td:before,#devices-table td:not(.selection):before,#event-status-badge span:before,#eventshow .event-partstat .changersvp:before,#kolabnoteslist td.title:before,#taglist li:before,#tagsform option:before,#tasklist .childtoggle:before,#tasklist .taskhead.flagged span.flagged:before,#tasklist .taskhead:not(.flagged):hover span.flagged:before,#taskshow.status-flagged h2:before,.attendee:before,.availability span:before,.calendar-scheduler .schedule-buttons .next-slot:after,.document-editor-header #collaborators a.button.add:before,.edit-attendees-table th.invite label:before,.editors-dialog table td.options a.delete:before,.fc .fc-time i:before,.fc button.next:before,.fc button.prev:before,.filelist tbody td.filename span:before,.filelist tr.session>td.name:after,.folderlist li.mailbox a.subscription.subscribed:before,.listing li.readonly:not(.virtual)>div a:first-child:after,.listing li>div span.subscribed:before,.listing li>div.calendar .calname:before,.listing li>div.folder .listname:before,.listing li>div.readonly a:first-child:after,.listing li>div.tasklist .listname:before,.resources-dialog .listing li.resource>a:before,.rsvp-status.accepted:before,.rsvp-status.declined:before,.rsvp-status.delegated:before,.rsvp-status.loading:before,.rsvp-status.needs-action:before,.rsvp-status.tentative:before,a.btn.fromcloud:before,a.button.filesaveall:before,a.button.saveas:before,fieldset.categories .input-group a.button.create:before,li>a.icon.saveas:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}@media screen and (min-width:1200px){.listing li>div>a{border-left:2px solid transparent}.listing li>div>a:focus{border-left:2px solid #9ddfff;outline:0}}.listing li>div{display:flex}.listing li>div>a:first-child{overflow:hidden;text-overflow:ellipsis;position:relative;flex-grow:1}.listing li>div>a:first-child+input{position:initial}.listing li>div .custom-switch{position:relative}.listing li>div.folder .listname:before{content:"\f249";margin-right:.5rem}.listing li>div span.actions{display:flex}input+.listing li>div span.actions{padding-right:2em}.listing li>div span.actions a{padding:0;margin:0;margin-right:.2rem;cursor:pointer}.listing li>div span.actions a:before{margin:0}.listing li>div span.actions a.remove{display:none}html.touch .listing li>div span.actions{padding-left:.2rem}html.touch .listing li>div span.actions a{margin-right:.5rem}.listing li>div a.quickview:before{content:"\f06e";opacity:.2;color:#00acff}.listing li>div a.quickview:after{display:none!important}.listing li>div.focusview a.quickview:before{content:"\f06e";opacity:1}.listing li>div .subscribed{cursor:pointer;padding:0!important;border-left:0;width:auto}.listing li>div .subscribed:before{content:"\f02e";font-weight:400;height:auto;color:#00acff;margin-right:.25rem}.listing li>div span.subscribed:before{content:"\f02e";font-weight:400}.listing li>div.subscribed .subscribed:before{content:"\f02e";font-weight:900}.listing li.selected>div>*{color:#2c363a;background-color:#ebf9ff}.listing li.readonly:not(.virtual)>div a:first-child:after,.listing li>div.readonly a:first-child:after{content:"\f023";position:absolute;left:2.25rem;top:17.5px;font-size:.9em!important;width:.9em;line-height:1;height:1em!important;background-color:#fff;border-radius:50% 50% 0 0;color:#2c363a;opacity:.9}html.touch .listing li.readonly:not(.virtual)>div a:first-child:after,html.touch .listing li>div.readonly a:first-child:after{top:23.5px;left:2.7rem}.listing li.other.user>div a:first-child:before,.listing li>div.other.user>.listname:before{content:"\f007";font-weight:900}.listing li.virtual.user>div a:first-child:after,.listing li>div.virtual.user>.listname:after{display:none}.listing li.virtual.shared>div a:first-child:before,.listing li>div.virtual.shared>.listname:before{content:"\f1e0";font-weight:900}.listing li.virtual.shared>div a:first-child:after,.listing li>div.virtual.shared>.listname:after{display:none}.listing li.virtual>div>a{opacity:.5}.listing.treelist:not(.notree)>li>div>a{padding-left:1.5em}.listing li.droptarget>div{background-color:#ffc}.listing li .count{position:absolute;top:0;right:0;min-width:2em;line-height:1.4rem;margin:7.7px;padding:0 .3em;border-radius:.4em;background:#737677;color:#fff;text-align:center;font-weight:700}html.touch .listing li .count{line-height:2rem;margin:9.5px}.treelist ul li a:first-child:after{margin-left:1.7em!important}.treelist ul li li a:first-child:after{margin-left:3.4em!important}.treelist ul li li li a:first-child:after{margin-left:5.1em!important}.treelist ul li li li li a:first-child:after{margin-left:6.8em!important}.treelist ul li li li li li a:first-child:after{margin-left:8.5em!important}.treelist ul li li li li li li a:first-child:after{margin-left:10.2em!important}.treelist.notree li a:first-child:after{left:1.3rem!important}.searchresults .boxtitle{line-height:2rem!important;font-size:80%;padding:0 .5rem;margin:0;color:#737677;background-color:#f1f3f4;text-align:center;border-bottom:1px solid #d4dbde}.folderlist li.mailbox.type-event>a:before{content:"\f133";font-weight:900}.folderlist li.mailbox.type-task>a:before{content:"\f274";font-weight:900}.folderlist li.mailbox.type-journal>a:before{content:"\f133";font-weight:400}.folderlist li.mailbox.type-contact>a:before{content:"\f2b9";font-weight:400}.folderlist li.mailbox.type-note>a:before{content:"\f249";font-weight:400}.folderlist li.mailbox.type-configuration>a:before{content:"\f013";font-weight:900}.folderlist li.mailbox.type-freebusy>a:before{content:"\f133";font-weight:400}.folderlist li.mailbox.type-file>a:before{content:"\f07b";font-weight:900}.menu li.search{padding:.25rem .5rem}.menu a.history:before{content:"\f1da"}button.btn.save.notify:before{content:"\f0e0"}button.btn.print:before{content:"\f02f"}.watermark{background:url("../../../../skins/elastic/images/logo.svg") center no-repeat #fff;background-size:30%;background-blend-mode:luminosity;width:100%;height:100%}.watermark>*{display:none}.watermark:before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,.85)}.watermark.formcontainer{background:0 0!important}.watermark.formcontainer:before{display:none}.watermark.formcontainer>*{display:block}html.layout-phone .watermark.formcontainer,html.layout-small .watermark.formcontainer{overflow-y:auto!important}.form-group>.datetime{display:flex;white-space:nowrap}.form-group>.datetime input{width:10em}.form-group>.datetime input:first-child{margin-right:.5rem;width:15em}.form-group>.datetime a{margin-left:1em;text-align:right;flex:1;line-height:2.4}.form-section.form-group.form-check{display:flex;padding:0}.form-section.form-group.form-check label{order:10}.formcontent.text-only .faded *{color:#737677}.linkslist{border:0!important;background:0 0!important}.linkslist li.link{padding:0}.linkslist li.link.message.eml:before{content:"\f0e0"}.linkslist li.link a.messagelink{overflow:hidden;text-overflow:ellipsis}.linkslist li.link a.delete .inner{display:none}.print-config{position:fixed;top:0;left:0;width:100%;z-index:10000;padding:.5em 1em;background-color:#f1f3f4}.print-config button.print{margin-right:1rem}.print-config .prop{line-height:2;margin-left:.5rem;display:inline-block;vertical-align:middle}.print-config .prop label{margin:0}@media print{.print-config{display:none}}.print-config+.print-content{position:relative;top:0;left:0;height:auto;margin:5em auto 0 auto;overflow:visible}.selection-dialog .ui-dialog-content{display:flex!important;overflow:hidden!important}.selection-dialog .selection-list{display:flex;flex-direction:column;border:1px solid #d4dbde;justify-content:center}.selection-dialog .ui-dialog-content .popupmenu{display:flex!important;width:100%}.selection-dialog .scroller{flex:1;overflow-y:auto}.selection-dialog .header{border-bottom:1px solid #d4dbde;display:flex;background-color:#f4f4f4;font-size:1rem;font-weight:700;line-height:58px;height:58px;min-height:58px;padding:0 .25em;position:relative;overflow:hidden;white-space:nowrap}.selection-dialog .header a.button{color:#2c363a;margin:0 .3rem}.selection-dialog .header a.button:before{margin:0}.selection-dialog .header-title{width:100%;text-align:center;margin:0 2em}.selection-dialog .selection-content{display:flex;flex-direction:column}.selection-dialog .tab-content{margin-top:1rem;height:100%;overflow-y:auto}.selection-dialog .form-addon{margin:0;padding:.5rem 0;width:100%;background-color:#f1f3f4;border-top:1px solid #d4dbde}.selection-dialog .listing ul{background-color:#fff}.selection-dialog .listing li.selected{color:#2c363a}@media screen and (max-width:768px){.selection-dialog .ui-dialog-content{padding:0!important}.selection-dialog .ui-dialog-titlebar{display:none;margin:0}.selection-dialog .selection-list{border:0}.selection-dialog .selection-content .header-title,.selection-dialog .selection-list .header-title{margin-left:0}.selection-dialog .header a:before{font-size:1.75rem}}@media screen and (max-height:750px) and (min-width:769px){#layout-menu,#layout-menu .popover-header img{width:42px}#taskmenu a{height:42px;width:42px;font-size:1.2rem!important}#taskmenu .special-buttons{width:42px}#taskmenu span.inner{display:none}}.menu a.calendarlink:before{content:"\f073"}.menu a.send:before{content:"\f1d8"}.listing.iconized li.resource>i:before{content:"\f1b2"}a.button.today:before{content:"\f133";font-weight:400}a.button.date:before{content:"\f073";font-weight:400}.listing li>div.calendar .calname:before{content:"\f073"}.listing li>div.calendar .actions{padding-right:.25rem}.listing li>div.calendar .actions :last-child{margin-right:0}.listing li>div.calendar.cal---invitation--declined .calname:before,.listing li>div.calendar.cal---invitation--pending .calname:before{content:"\f073";font-weight:400}.listing li>div.calendar.cal-__bdays__ .calname:before{content:"\f1fd"}.listing li>div.calendar.cal---invitation--declined,.listing li>div.calendar.cal---invitation--pending,.listing li>div.calendar.cal-__bdays__{font-style:italic}.listing li>div.calendar.cal---invitation--declined a.calname,.listing li>div.calendar.cal---invitation--pending a.calname,.listing li>div.calendar.cal-__bdays__ a.calname{padding-right:2.5em}.listing li>div.calendar.cal---invitation--declined .count,.listing li>div.calendar.cal---invitation--pending .count,.listing li>div.calendar.cal-__bdays__ .count{right:4.2em;font-style:normal}.listing li span.handle{display:none}#calendarcategories .input-group:not(:last-child){margin-bottom:.25rem}fieldset.categories .input-group .minicolors-input{border-radius:0}fieldset.categories .input-group .minicolors+.input-group-append{margin-left:0}fieldset.categories .input-group a.button.create:before{content:"\f067";line-height:1}.calendar-invitebox>i.icon:before{content:"\f133"!important}.calendar-agenda-preview{display:none;margin-top:.5rem;border-top:1px solid #ddd}.calendar-agenda-preview h3{margin-top:.5rem}.calendar-agenda-preview .event-row{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-agenda-preview .event-row.current{color:#333;font-weight:700}.calendar-agenda-preview .event-row.no-event{font-style:italic}.calendar-agenda-preview .event-row.fc-invitation-needs-action{color:#737677}.calendar-agenda-preview .event-row.fc-invitation-needs-action .event-title{font-style:italic}.calendar-agenda-preview .event-title{padding-left:.5rem}#calendar.content{overflow:hidden!important;position:relative}.calendar-datepicker .ui-datepicker{margin:0!important;border:0;border-radius:0;width:auto;min-width:auto!important;font-size:.9rem;background-color:#f1f3f4}.calendar-datepicker .ui-datepicker table{margin:0}.calendar-datepicker .ui-datepicker td a{font-size:.9rem!important}.calendar-datepicker .ui-datepicker-header{background-color:#f1f3f4;border-top:1px solid #d4dbde}.ui-dialog .calendar-datepicker .ui-datepicker{background:0 0}.ui-dialog .calendar-datepicker .ui-datepicker-header{background:0 0;border:0}.ui-dialog .calendar-datepicker td a{line-height:3em!important;font-size:1rem!important}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}body .fc{font-size:1em}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-default{background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-button-group{display:inline-block}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-popover .fc-header .fc-close{cursor:pointer}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc-bg{bottom:0}.fc-bg table{height:100%}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}adata-goto{cursor:pointer}adata-goto:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover{color:#fff;text-decoration:none}.fc-event.fc-draggable,.fc-eventhref{cursor:pointer}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4}.fc-event .fc-resizer{display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}.fc-icon{display:inline-block;height:1em;line-height:1em;font-size:1em;text-align:center;overflow:hidden;font-family:"Courier New",Courier,monospace;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\2039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\D7";font-size:200%;top:6%}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.ui-widget .fc-disabled-day{background-image:none}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.ui-widget .fc-event{color:#fff;text-decoration:none;font-weight:400}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-toolbar{text-align:center}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px 0}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number{text-align:center}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{position:relative;z-index:3}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight-container{position:relative}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event{overflow:hidden}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\A0-\A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt{float:right}.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title ahref:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee}body.quickview-active .fc .fc-scroller{background:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20576%20512%22%3E%3Cpath%20fill%3D%22%23f2f2f2%22%20d%3D%22M569.354%20231.631C512.969%20135.949%20407.81%2072%20288%2072%20168.14%2072%2063.004%20135.994%206.646%20231.631a47.999%2047.999%200%200%200%200%2048.739C63.031%20376.051%20168.19%20440%20288%20440c119.86%200%20224.996-63.994%20281.354-159.631a47.997%2047.997%200%200%200%200-48.738zM288%20392c-75.162%200-136-60.827-136-136%200-75.162%2060.826-136%20136-136%2075.162%200%20136%2060.826%20136%20136%200%2075.162-60.826%20136-136%20136zm104-136c0%2057.438-46.562%20104-104%20104s-104-46.562-104-104c0-17.708%204.431-34.379%2012.236-48.973l-.001.032c0%2023.651%2019.173%2042.823%2042.824%2042.823s42.824-19.173%2042.824-42.823c0-23.651-19.173-42.824-42.824-42.824l-.032.001C253.621%20156.431%20270.292%20152%20288%20152c57.438%200%20104%2046.562%20104%20104z%22%2F%3E%3C%2Fsvg%3E") center no-repeat;background-size:50%}.fc .fc-header-toolbar{display:flex;background-color:#f1f3f4;margin:0}.fc .fc-header-toolbar>*>*{float:none;margin:0}.fc .fc-left{order:1}.fc .fc-left .fc-button-group{display:none}.fc .fc-center{flex:1;order:2;text-align:center;padding:.25rem}.fc .fc-center h2{margin:0;color:#737677;white-space:nowrap;font-size:1.25rem;font-weight:700}.fc .fc-right{order:3;text-align:right}.fc .fc-right .fc-button{display:none}.fc button{height:unset;padding:.3rem .75rem}.fc button.prev:before{content:"\f104";margin:0!important;line-height:1}.fc button.next:before{content:"\f105";margin:0!important;line-height:1}.fc .btn-group{padding:.5rem;margin:0}.fc .fc-type-freebusy{opacity:.6}.fc .fc-type-freebusy .fc-title{position:absolute;top:-5000px}.fc .fc-type-freebusy td{color:#999}.fc .fc-event-dot{background-color:#c00}.fc a.fc-event,.fc a.fc-event:hover{color:#fff}.fc .fc-event{font-size:13px;background-color:#c00;border-color:#c00}.fc .fc-event .fc-title{font-weight:700}.fc .fc-event .fc-bg{opacity:.15;margin-top:1.1rem}.fc .fc-event.fc-invitation-declined,.fc .fc-event.fc-invitation-needs-action,.fc .fc-event.fc-invitation-tentative{border:1px dashed #999}.fc .fc-event.fc-event-ns-other.fc-invitation-declined{opacity:.7}.fc .fc-event.fc-event-ns-other.fc-invitation-declined .fc-title{text-decoration:line-through}.fc .fc-event.fc-invitation-tentative .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAOuJAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-event.fc-invitation-needs-action .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAFdXx////yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-event.fc-invitation-declined .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAMwAAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-list-view tr.fc-invitation-declined,.fc .fc-list-view tr.fc-invitation-needs-action,.fc .fc-list-view tr.fc-invitation-tentative{color:#888}.fc .fc-list-view tr.fc-invitation-declined .fc-event-dot,.fc .fc-list-view tr.fc-invitation-needs-action .fc-event-dot,.fc .fc-list-view tr.fc-invitation-tentative .fc-event-dot{background-color:#888}.fc .cal-event-status-cancelled,.fc .fc-declined,.fc .fc-needs-action{opacity:.6}.fc .fc-time i{display:inline-block;width:1em;height:1em;margin-left:.25rem}.fc .fc-time i:before{font-size:1em;line-height:1;margin-top:.1rem}.fc .fc-time i.fc-icon-recurring:before{content:"\f24d";font-weight:400}.fc .fc-time i.fc-icon-alarms:before{content:"\f0f3"}.fc .fc-event-temp{opacity:.4}.fc .fc-nonbusiness{background-color:rgba(115,118,119,.2)}.fc .fc-day.fc-today{background:rgba(255,212,82,.2)!important}.fc .fc-now-indicator{border-color:#41b849;border-width:1.5px}.fc .fc-list-item,.fc .fc-list-item:hover td{background:0 0}.fc .fc-list-item a,.fc .fc-list-item td{cursor:default}.fc .fc-list-item-title{font-weight:700}.fc .fc-list-table td{padding:.5rem}.fc .fc-list-heading td{background:rgba(115,118,119,.1)}.fc .fc-list-empty{display:none}.fc .fc-more{color:#00acff!important;white-space:nowrap}.fc .fc-axis,.fc .fc-day-header,.fc .fc-day-number,.fc .fc-week-header,.fc .fc-week-number{color:#737677;font-size:.95rem;padding:.15rem!important}.fc .fc-week-number{text-align:center}.fc .fc-popover{border-radius:.3rem}.fc .fc-popover .fc-header{color:#737677;font-size:.95rem;font-weight:700}.fc .fc-popover .fc-icon-x::after{top:3px}.fc .fc-view.fc-widget-content,.fc td.fc-head-container{border-left-width:0}.fc .fc-body .fc-bg .fc-widget-content,.fc .fc-body .fc-bg-sceleton .fc-widget-content,.fc .fc-body>tr>.fc-widget-content,.fc .fc-list-view{border-bottom-width:0}.print-content .fc .fc-header-toolbar{background-color:#fff}.print-content .fc .fc-center h2{color:#000;padding-bottom:.75rem;font-size:1.5rem!important}.print-content .fc .fc-day.fc-today{background:0 0!important}.print-content .fc a.fc-event{color:#000;background-color:#fff!important}.print-content .fc .fc-event-description{white-space:pre-wrap;font-size:90%}.print-content .fc .fc-event-location{width:20%}.print-content .fc .fc-event-row-secondary td{border:0;padding-top:0!important}.print-content .fc .fc-scroller{overflow:visible!important;height:auto!important}.print-content .fc .fc-view.fc-widget-content,.print-content .fc td.fc-head-container{border-left-width:1px}.print-content .fc .fc-agenda-view,.print-content .fc .fc-list-view,.print-content .fc .fc-month-view{border-bottom:1px solid #ddd}@media screen and (max-width:768px){.fc .fc-left{display:block;width:100%;padding:0}.fc .fc-left button{flex:1 1 auto;border-radius:0}.fc .fc-left .btn-group{padding:0;display:flex}.fc .fc-center,.fc .fc-list-table .fc-event-location,.fc .fc-right{display:none}}@media screen and (min-width:769px) and (max-width:920px){.fc .fc-center{overflow:hidden;text-overflow:ellipsis;flex:1}.fc .fc-center h2{font-size:1rem;line-height:1;padding-top:.45rem}.fc .fc-left .btn,.fc .fc-right .btn{padding-left:.5rem;padding-right:.5rem}}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar{-webkit-appearance:none}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar:vertical,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar:vertical,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar:vertical{width:.6rem}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar:horizontal,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar:horizontal,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar:horizontal{height:.6rem}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar-thumb,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar-thumb,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.4);border-radius:.3rem;border:2px solid #fff}body.task-calendar #print-layout #calendar-view-selector{float:right;padding-top:.25rem}body.task-calendar #print-layout #calendarlist{margin-top:1rem}body.task-calendar #print-layout #calendarlist,body.task-calendar #print-layout #calendarlist ul{list-style:none;padding:0}body.task-calendar #print-layout #calendarlist li{display:inline-block;white-space:nowrap}body.task-calendar #print-layout #calendarlist div,body.task-calendar #print-layout #calendarlist li,body.task-calendar #print-layout #calendarlist ul{float:left}body.task-calendar #print-layout #calendarlist div{margin-right:2rem}body.task-calendar #print-layout #calendarlist a{text-decoration:none;cursor:auto}body.task-calendar #print-layout #calendarlist input,body.task-calendar #print-layout #calendarlist span.actions,body.task-calendar #print-layout #calendarlist span.handle{display:none}@media screen and (min-width:769px){body.task-calendar #layout-sidebar{flex:2;max-width:400px;min-width:240px}}body.task-calendar .ui-datepicker td{width:12.5%}body.task-calendar .ui-datepicker .ui-datepicker-week-col{color:#d4dbde;text-align:center}body.task-calendar .ui-datepicker-inline .ui-datepicker-week-col{color:#00acff;cursor:pointer}body.task-calendar .ui-datepicker-inline .ui-datepicker-activerange{background-color:#ebf9ff}#timezone-display{font-size:.9rem;color:#737677}#agendaoptions{padding:0 .5rem .5rem .5rem;display:flex;background-color:#f1f3f4}#agendaoptions .input-group{padding-right:.5rem;flex-wrap:nowrap}#agendaoptions .input-group:last-child{padding-right:0}#agendaoptions select{min-width:7em}#agendaoptions .input-group-prepend{overflow:hidden;margin-bottom:0}#agendaoptions .input-group-prepend span{display:block;overflow:hidden;text-overflow:ellipsis}#eventshow{margin:0}#eventshow .event-title{font-size:1.5rem;font-weight:700}#eventshow .event-location{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#eventshow .event-description{margin:1rem 0}#eventshow .event-attendees{margin-bottom:1rem}#eventshow .event-attendees .attendee{margin-right:.25rem}#eventshow .event-partstat>span{display:flex}#eventshow .event-partstat .rsvp-status:before{display:inline;float:none}#eventshow .event-partstat .changersvp{cursor:pointer;font-size:1.2rem;margin-left:1em}#eventshow .event-partstat .changersvp:before{content:"\f14b";float:none;display:inline;line-height:1}#eventshow .event-partstat .inner{display:none}#eventedit .edit-attendees-table td{padding-top:.15rem}#eventedit .edit-attendees-table td.role{padding-left:0;width:9em}#fish-eye-view{padding:0}@media screen and (min-width:769px){#fish-eye-view{border-bottom:1px solid #d4dbde}}.availability span{margin-right:.5rem;color:#737677}.availability span:before{content:"\f0c8";display:inline;float:none}.availability span.legend:before{font-size:1em}.availability span.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";display:block;line-height:1}.availability span.unknown:before{color:#bbb}.availability span.free:before{color:#41b849}.availability span.busy:before{color:#ff5552}.availability span.tentative:before{color:#8383fc}.availability span.out-of-office:before{color:#fbaa68}.datetime .custom-switch{padding-left:.5rem}.datetime .custom-switch label{line-height:2;margin-top:.2rem}.datetime input{width:10em!important}@media screen and (max-width:420px){.datetime input{width:8em!important}.datetime input+input{width:6em!important}}.calendar-scheduler .nav{align-items:center}.calendar-scheduler .nav button:first-child{margin-right:.25rem}.calendar-scheduler .nav>div{white-space:nowrap}@media screen and (max-width:420px){.calendar-scheduler .nav button{padding-left:.5rem;padding-right:.5rem}}.calendar-scheduler .schedule-buttons .prev-slot:before{content:"\f053"}.calendar-scheduler .schedule-buttons .next-slot:after{content:"\f054";display:inline-block;float:none;margin-right:0}.calendar-scheduler .schedule-options{flex:1;margin-left:1rem}html.layout-phone .calendar-scheduler .schedule-options{order:100;margin-left:0}.calendar-scheduler .schedule-nav{flex:1;margin-left:.3rem;text-align:right}.calendar-scheduler .schedule-nav button{line-height:1.8}.calendar-scheduler .schedule-range{width:60%;margin-top:2rem}html.layout-phone .calendar-scheduler .schedule-range{margin:0}.calendar-scheduler .schedule-legend .attendee{margin-right:.5rem}.calendar-scheduler .attendees-list{position:relative}.calendar-scheduler .attendees-list a.attendee-role-toggle{position:absolute;left:0;display:inline-block;width:1em;cursor:pointer}.calendar-scheduler .attendees-list div.attendee{border-top:1px solid #f1f3f4;line-height:1.7rem;height:1.8rem}.calendar-scheduler .attendees-list .attendee{white-space:nowrap}.calendar-scheduler .attendees-list .attendee.spacer{height:10px}.calendar-scheduler .attendees-list .attendee.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";font-weight:900}.calendar-scheduler .attendees-list .attendee.total{font-weight:700}.calendar-scheduler .attendees-list .attendee.spacer:before,.calendar-scheduler .attendees-list .attendee.total:before{display:none}.calendar-scheduler .schedule-table{table-layout:fixed}.calendar-scheduler .schedule-table th{border-top:0}.calendar-scheduler .schedule-table td.attendees{width:25%;overflow:hidden;border-top:0}html.layout-phone .calendar-scheduler .schedule-table td.attendees{width:35%}.calendar-scheduler .schedule-table td.attendees .attendees-list{border-bottom:1px solid #d4dbde}.calendar-scheduler .schedule-table td.times{width:auto;border-top:0}.calendar-scheduler .schedule-table td.times table{margin:0}.calendar-scheduler .schedule-table td.times td{height:1.8rem;border-top:1px solid #f1f3f4;white-space:nowrap}.calendar-scheduler .schedule-table div.scroll{position:relative;overflow:auto}.calendar-scheduler .schedule-table .timesheader{height:1.4rem;border-top:1px solid #d4dbde}.calendar-scheduler .schedule-table .boxtitle{margin:0;padding:0;font-size:1rem;font-weight:700;padding-top:.5rem;line-height:2}.calendar-scheduler .schedule-table td{padding:4px}.calendar-scheduler .schedule-table tbody td{padding:0}.calendar-scheduler .schedule-table tbody td div{height:100%}.calendar-scheduler .schedule-table tr.spacer td{padding:0;height:10px}.calendar-scheduler .schedule-table tr.dates thcolspan="1"{min-width:48px;max-width:48px;text-align:center;font-size:.7rem;line-height:2.9}.calendar-scheduler .schedule-table tr.times td{cursor:pointer;min-width:48px;max-width:48px;font-size:.7rem;text-align:center;color:#00acff;height:1.4rem;padding:0 .1rem;vertical-align:middle;border-top:1px solid #d4dbde;border-left:1px solid #f1f3f4}.calendar-scheduler .schedule-table .fbcontent td{border-left:1px solid #f1f3f4}.calendar-scheduler .schedule-table .fbcontent:last-child td{border-bottom:1px solid #d4dbde}.calendar-scheduler .schedule-table div.unknown{background-color:#bbb}.calendar-scheduler .schedule-table div.free{background-color:#41b849}.calendar-scheduler .schedule-table div.busy{background-color:#ff5552}.calendar-scheduler .schedule-table div.tentative{background-color:#8383fc}.calendar-scheduler .schedule-table div.out-of-office{background-color:#fbaa68}.calendar-scheduler .schedule-table div.all-busy,.calendar-scheduler .schedule-table div.all-out-of-office,.calendar-scheduler .schedule-table div.all-tentative{overflow:hidden}.calendar-scheduler .schedule-table div.all-busy span,.calendar-scheduler .schedule-table div.all-out-of-office span,.calendar-scheduler .schedule-table div.all-tentative span{display:block;width:300%;height:300%;border:1px solid #fff;background:#ff231f;transform:rotate(42deg) translate(2%)}.calendar-scheduler .schedule-table div.all-busy.w10 span,.calendar-scheduler .schedule-table div.all-out-of-office.w10 span,.calendar-scheduler .schedule-table div.all-tentative.w10 span{display:none}.calendar-scheduler .schedule-table div.all-busy.w20 span,.calendar-scheduler .schedule-table div.all-busy.w25 span,.calendar-scheduler .schedule-table div.all-out-of-office.w20 span,.calendar-scheduler .schedule-table div.all-out-of-office.w25 span,.calendar-scheduler .schedule-table div.all-tentative.w20 span,.calendar-scheduler .schedule-table div.all-tentative.w25 span{transform:rotate(17deg) translate(-9%)}.calendar-scheduler .schedule-table div.all-busy.w30 span,.calendar-scheduler .schedule-table div.all-out-of-office.w30 span,.calendar-scheduler .schedule-table div.all-tentative.w30 span{transform:rotate(28deg) translate(-7%)}.calendar-scheduler .schedule-table div.all-busy.w33 span,.calendar-scheduler .schedule-table div.all-out-of-office.w33 span,.calendar-scheduler .schedule-table div.all-tentative.w33 span{transform:rotate(32deg) translate(-5%)}.calendar-scheduler .schedule-table div.all-busy.w40 span,.calendar-scheduler .schedule-table div.all-out-of-office.w40 span,.calendar-scheduler .schedule-table div.all-tentative.w40 span{transform:rotate(36deg) translate(-3%)}.calendar-scheduler .schedule-table div.all-busy.w60 span,.calendar-scheduler .schedule-table div.all-out-of-office.w60 span,.calendar-scheduler .schedule-table div.all-tentative.w60 span{transform:rotate(48deg) translate(6%)}.calendar-scheduler .schedule-table div.all-busy.w67 span,.calendar-scheduler .schedule-table div.all-out-of-office.w67 span,.calendar-scheduler .schedule-table div.all-tentative.w67 span{transform:rotate(52deg) translate(9%)}.calendar-scheduler .schedule-table div.all-busy.w70 span,.calendar-scheduler .schedule-table div.all-busy.w75 span,.calendar-scheduler .schedule-table div.all-out-of-office.w70 span,.calendar-scheduler .schedule-table div.all-out-of-office.w75 span,.calendar-scheduler .schedule-table div.all-tentative.w70 span,.calendar-scheduler .schedule-table div.all-tentative.w75 span{transform:rotate(55deg) translate(12%,30%)}.calendar-scheduler .schedule-table div.all-busy.w80 span,.calendar-scheduler .schedule-table div.all-out-of-office.w80 span,.calendar-scheduler .schedule-table div.all-tentative.w80 span{transform:rotate(56deg) translate(13%,30%)}.calendar-scheduler .schedule-table div.all-busy.w90 span,.calendar-scheduler .schedule-table div.all-out-of-office.w90 span,.calendar-scheduler .schedule-table div.all-tentative.w90 span{transform:rotate(59deg) translate(16%,30%)}.calendar-scheduler .schedule-table div.all-busy.w100 span,.calendar-scheduler .schedule-table div.all-out-of-office.w100 span,.calendar-scheduler .schedule-table div.all-tentative.w100 span{transform:rotate(62deg) translate(19%,30%)}.calendar-scheduler .schedule-table div.all-tentative span{background:#5151fb}.calendar-scheduler .schedule-table div.all-out-of-office span{background:#fa8e36}#schedule-event-time{position:absolute;border-radius:.3rem;cursor:move;border:2px solid #444;background-color:rgba(0,0,0,.3)}.resources-dialog .resource-selection{flex:4;min-width:300px}.resources-dialog .resource-content{flex:10;margin-left:1em}.resources-dialog .listing li.resource>a{color:#2c363a}.resources-dialog .listing li.resource>a:before{content:"\f1b2"}.resources-dialog .slot-nav{display:none}#resource-availability{height:100%}#resource-availability .fc{height:100%;overflow:hidden;position:relative;border-bottom:1px solid #ddd}#resource-availability .fc-view{border-left:1px solid #ddd}#resource-availability .fc-header-toolbar{height:0}.standalone-invitebox{margin:0 auto;max-width:500px;width:95%;display:flex;flex-direction:column;top:15vh;position:relative}.standalone-invitebox #logo{max-height:90px}.standalone-invitebox .invitebox{margin-top:3em!important}@media screen and (min-width:769px){.searchbar a.button.date{display:none}}#rcmfd_alarmvalue{max-width:80px}@media screen and (max-width:768px){#agendaoptions{padding-top:.5rem}.calendar-scheduler .schedule-range{width:100%}#layout-sidebar .calendar-datepicker{display:none}.resources-dialog .resource-content{display:none;margin:0}.resources-dialog .resource-content ul{margin:1em 1em 0 1em}#resource-availability{margin:0 1em}}body.task-calendar .header-title{position:relative}body.task-calendar .header-title .tz{position:absolute;bottom:0;left:0;width:100%;line-height:2;font-size:.8rem;font-weight:400;color:#737677}.listing.iconized li.activesync>a:before{content:"\f143"}#devices-table td:not(.selection){display:flex}#devices-table td:not(.selection):before{content:"\f143"}#devices-table td:not(.selection) span{overflow:hidden;text-overflow:ellipsis}#devices-table .devicealias{flex:1}#devices-table .devicetype{max-width:40%;font-style:italic;padding-left:.5em}.listing.iconized li.delegation>a:before{content:"\f21b"}#delegate-table td:before{content:"\f21b"}a.btn.fromcloud:before,a.button.filesaveall:before,a.button.saveas:before,li>a.icon.saveas:before{content:"\f07b"}.menu a.mount.storage:before{content:"\f1c0"}.menu a.open:before{content:"\f06e"}.menu a.cancel:before{content:"\f00d"}.menu a.share:before{content:"\f1e0"}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder{order:-1}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder:before{content:"\f067"}.folderlist li.collection a.name{padding-left:.5em}.folderlist li.collection.audio a.name:before{content:"\f028";font-weight:900}.folderlist li.collection.video a.name:before{content:"\f03d";font-weight:900}.folderlist li.collection.image a.name:before{content:"\f03e"}.folderlist li.collection.document a.name:before{content:"\f02d";font-weight:900}.folderlist li.collection.sessions a.name:before{content:"\f0c0";font-weight:900}.folderlist li.mailbox a.subscription{cursor:pointer;padding:0!important;border-left:0;width:auto}.folderlist li.mailbox a.subscription:before{content:"\f02e";font-weight:400;height:auto;color:#00acff;margin-right:.25rem}.folderlist li.mailbox a.subscription.subscribed:before{content:"\f02e";font-weight:900}#filelistcontainer{position:relative}#filesuploadform{position:absolute!important}#filelistbox{height:100%}#filelistbox.droptarget.active{box-shadow:0 0 2px 1px #b9b9b9 inset}#filelistbox.droptarget.hover{box-shadow:0 0 2px 1px #b9b9b9 inset;background-color:#ececec}.filelist thead{display:none}.filelist td.options{display:none}.filelist td.name{position:relative}.filelist td.mtime{width:11em}.filelist td.size{text-align:right;width:6em}.filelist tr.session>td.name{padding-right:2em}.filelist tr.session>td.name:after{content:"\f0c0";color:#d4dbde;position:absolute;right:.25em;top:0}.filelist tr.session.invited>td.name:after{color:#41b849}.filelist tr.session.owner>td.name:after{color:#161b1d}@media screen and (max-width:480px){.filelist td.mtime{display:none}}.filelist tbody td.filename span{background:0 0!important}.filelist tbody td.filename span:before{content:"\f15b";font-weight:400}.filelist tbody td.filename.application_pdf span:before,.filelist tbody td.filename.pdf span:before{content:"\f1c1"}.filelist tbody td.filename.application_msword span:before,.filelist tbody td.filename.application_vnd_ms_word span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_wordprocessingml_document span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_wordprocessingml_template span:before{content:"\f1c2"}.filelist tbody td.filename.application_vnd_ms_excel span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_spreadsheet span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_spreadsheet_template span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_spreadsheetml_sheet span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_spreadsheetml_template span:before{content:"\f1c3"}.filelist tbody td.filename.application_vnd_ms_powerpoint span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_presentation span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_slideshow span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_template span:before{content:"\f1c4"}.filelist tbody td.filename.application_vnd_oasis_opendocument_text span:before{content:"\f15c"}.filelist tbody td.filename.application_vnd_oasis_opendocument_presentation span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_presentation_template span:before{content:"\f1c4"}.filelist tbody td.filename.application_x_7z_compressed span:before,.filelist tbody td.filename.application_x_ace span:before,.filelist tbody td.filename.application_x_arc span:before,.filelist tbody td.filename.application_x_arj span:before,.filelist tbody td.filename.application_x_bzip_compressed_tar span:before,.filelist tbody td.filename.application_x_lha span:before,.filelist tbody td.filename.application_x_rar span:before,.filelist tbody td.filename.application_x_tarz span:before,.filelist tbody td.filename.application_x_tzo span:before,.filelist tbody td.filename.application_x_zip span:before,.filelist tbody td.filename.application_x_zoo span:before,.filelist tbody td.filename.application_zip span:before,.filelist tbody td.filename.tar span:before{content:"\f1c6"}.filelist tbody td.filename.application_vnd_stardivision_draw span:before,.filelist tbody td.filename.application_vnd_sun_xml_draw span:before,.filelist tbody td.filename.application_vnd_sun_xml_draw_template span:before,.filelist tbody td.filename.image span:before,.filelist tbody td.filename.image_jpeg span:before,.filelist tbody td.filename.image_jpeg2000 span:before,.filelist tbody td.filename.image_png span:before,.filelist tbody td.filename.image_svg_xml span:before,.filelist tbody td.filename.image_x_eps span:before{content:"\f1c5"}.filelist tbody td.filename.audio span:before{content:"\f1c7"}.filelist tbody td.filename.video span:before{content:"\f1c8"}.filelist tbody td.filename.ascii span:before,.filelist tbody td.filename.text_plain span:before{content:"\f15c"}.filelist tbody td.filename.text_html span:before{content:"\f1c9"}#folder-mount-form td.source{display:flex;align-items:flex-start;padding:.5rem}#folder-mount-form td.source.selected{background-color:#ebf9ff}#folder-mount-form td.source>input{height:32px;margin-right:.5rem}#folder-mount-form td.source>div{flex:1}#folder-mount-form td.source img{height:32px;margin-right:.5rem}#folder-mount-form td.source .name{font-weight:700}#folder-mount-form td.source .description{font-size:90%}#folder-mount-form td.source table{margin-top:.5rem}#folder-mount-form td.source .form-group{margin-bottom:0}#folder-mount-form .auth-options{margin-top:.5rem}#folder-mount-form .auth-options>label:before{line-height:1}.files-dialog .selection-list{flex:1;min-width:220px}.files-dialog .selection-content{flex:2}@media screen and (min-width:769px){.files-dialog .selection-content{border:1px solid #d4dbde;border-left:0}}.files-dialog a.subscription{display:none}@media screen and (max-width:768px){.files-dialog .selection-list{display:none}}.document-editor-header .toolbar{text-align:left!important;flex:1}.document-editor-header .toolbar a{text-align:center}.document-editor-header a.button.icon.members:before{content:"\f0c0"}.document-editor-header #collaborators{order:9;display:flex;margin-right:.5rem;margin-left:2rem}.document-editor-header #collaborators a.button.add:before{content:"\f067"}.document-editor-header #collaborators .inner{display:none}.document-editor-header #doc-title{flex:1;order:8}.document-editor-header #doc-title input{display:inline}.session-members img.photo{width:48px;height:48px;min-width:48px;overflow:hidden;background:url("../../../skins/elastic/images/contactpic.png") center center no-repeat #fff;background-size:cover;border-radius:50%;border:solid 3px #eee;margin-left:.5rem}.session-members ul{padding:0;margin:0;list-style-type:none}.session-members ul li{display:flex;align-items:center}.session-members ul img.photo{margin-left:0;margin-right:1em}.editors-dialog table th{border:0}.editors-dialog table tr:last-child td{border-bottom:1px solid #d4dbde}.editors-dialog table td.options{width:1%}.editors-dialog table td.options a.delete:before{content:"\f2ed";display:inline;line-height:1}.editors-dialog label{display:block}button.participant.add:before{content:"\f234"}.iframe-wrapper.file-type-audio,.iframe-wrapper.file-type-video{display:flex;align-items:center;justify-content:center}@media screen and (min-width:769px){.iframe-wrapper.file-type-audio,.iframe-wrapper.file-type-video{padding:1em}}#shareform table td,#shareform table th{padding-left:.15rem;max-width:10vw;overflow:hidden;text-overflow:ellipsis}#shareform table td:last-child,#shareform table th:last-child{padding-right:.15rem;width:1%;max-width:unset}#shareform table td{vertical-align:middle}#shareform table td.form input{margin-bottom:.25rem;width:100%}#shareform table tr+tr>td{border-top:0;padding-bottom:.25rem}#shareform table button{padding:.185rem .75rem;width:100%}.menu a.appendnote:before{content:"\f249"}#noteform iframe{min-height:10rem}#notereferences{margin-top:.5rem}#notereferences .attachmentslist a.delete{margin-left:.5rem}#notedetailstitle .dates{color:#737677}#print-layout #notetitle{font-size:1.5rem;line-height:2}#print-layout #notetags{margin-bottom:.5rem}#print-layout #notecreated{margin-right:2rem}#kolabnoteslist tr{display:flex}#kolabnoteslist td.title{overflow:hidden;text-overflow:ellipsis;flex:1}#kolabnoteslist td.title:before{content:"\f249";font-weight:400}#kolabnoteslist td.date{overflow:unset;color:#737677;font-style:italic}.kolabmessagenotes>i.icon:before{content:"\f249"!important;font-weight:400!important}.kolabmessagenotes>a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;text-decoration:none}.menu a.tags:before{content:"\f02c"}.menu a.tag.remove.all:before,.menu a.tag.remove:before,.menu a.tag:before{content:"\f02b"}#taglist li{padding:0 .5rem}#taglist li:before{content:"\f02b";margin:0 .5rem 0 .2rem}#tag-selector li a:before,#taglist li:before,#tagsform option:before{color:#009eea}#tag-selector li:hover a:before,#tagsform option:checked:before{color:#fff}#tagsform{min-height:15rem}#tagsform select{padding:0;margin-bottom:.5rem}#tagsform option{padding:.5rem;outline:0;border:0}#tagsform option:before{content:"\f02b";line-height:1}#tagsform .buttons{text-align:center}#tagsform .buttons button{margin:0 .25rem}.tagbox{color:#fff;background-color:#37beff!important;border:0!important;border-radius:.25rem;max-width:4em;padding:.1rem .4rem;margin-right:.2rem;font-weight:700}.tagbox:not(.tagedit-listelement) a{color:inherit;padding-left:.5rem;text-decoration:none}h2>.tagbox{font-size:1.2rem}.tag-droppable.formcontainer.ui-droppable-active{background-color:#f1f3f4!important}.tag-droppable.formcontainer.ui-droppable-hover{background-color:#ffc!important}.invitebox>i.icon{position:absolute;top:0;padding-top:.5em}.invitebox>span{padding-left:2.5em}.invitebox td{padding:2px;vertical-align:top}.invitebox td.ititle{font-weight:700;padding-right:.5em}.invitebox td.label{color:#666;padding-right:1em}.invitebox td.recurrence-id{text-transform:uppercase;font-style:italic}.invitebox td.date.modified{font-weight:700;color:#ff5552}.invitebox td em{font-weight:700}.invitebox .itip-buttons{display:flex;flex-wrap:wrap}.invitebox .itip-buttons input.button{margin:0 .25rem .25rem 0}.invitebox .rsvp-buttons{width:100%;padding-top:.25rem}.invitebox .itip-reply-controls{margin-top:.25rem;width:100%;line-height:2}.invitebox .itip-reply-controls>label{display:inline}.invitebox .itip-reply-controls>label label{line-height:1;margin-right:.25rem}.invitebox .itip-reply-controls a{margin-left:1em;white-space:nowrap}.invitebox .rsvp-status{margin:.5rem 0;width:100%}.invitebox .rsvp-status.hint{color:#666;font-style:italic}.invitebox .folder-select{white-space:nowrap}.invitebox .folder-select select{display:initial;width:auto}.rsvp-status:before{line-height:1.1;color:#4d5f66;float:none;display:inline}.rsvp-status.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";line-height:1}.rsvp-status.declined:before{content:"\f05e";color:#ff5552}.rsvp-status.tentative:before{content:"\f058";color:#ffd452}.rsvp-status.accepted:before{content:"\f058";color:#41b849}.rsvp-status.delegated:before{content:"\f064"}.rsvp-status.needs-action:before{content:"\f059"}.attendee:before{content:"\f059";display:inline;float:none;font-size:1em;color:#737677}.attendee.req-participant:before{content:"\f007"}.attendee.opt-participant:before{content:"\f007";font-weight:400}.attendee.non-participant:before{content:"\f007";color:#ccc}.attendee.chair:before{content:"\f007";color:#ffd452}.attendee.accepted:before,.attendee.completed:before{content:"\f058";color:#41b849}.attendee.declined:before{content:"\f05e";color:#ff5552}.attendee.tentative:before{content:"\f058";color:#ffd452}.attendee.delegated:before{content:"\f064"}.attendee.organizer:before{content:"\f0b1"}.attendee.in-process:before{content:"\f013"}.attendees-comentbox label{display:inline}.edit-attendees-table{width:100%}.edit-attendees-table td,.edit-attendees-table th{width:1%;text-align:center}.edit-attendees-table td{border:0;padding:0 .3rem}.edit-attendees-table th{border-bottom:1px solid #eee!important}.edit-attendees-table td.name,.edit-attendees-table td.role,.edit-attendees-table th.name,.edit-attendees-table th.role{width:auto;text-align:left}.edit-attendees-table th.invite input{display:none}.edit-attendees-table th.invite label{cursor:pointer}.edit-attendees-table th.invite label:before{content:"\f0e0";display:inline;float:none;line-height:1}.edit-attendees-table td.invite .custom-switch{margin-top:.15rem}.edit-attendees-table td.name span{line-height:2.5;display:flex}.edit-attendees-table td.name span>:first-child{overflow:hidden;text-overflow:ellipsis;flex:1;width:1px;white-space:nowrap}.edit-attendees-table td.availability span,.edit-attendees-table td.confirmstate span{margin:0}.edit-attendees-table td.availability span:after,.edit-attendees-table td.availability span:before,.edit-attendees-table td.confirmstate span:after,.edit-attendees-table td.confirmstate span:before{line-height:2;margin:0;font-size:1.2em;height:2em;width:2em}.edit-attendees-table td.options a{display:inline-block;height:2em}.edit-attendees-table td.options a:before{line-height:1.8;margin:0}.edit-attendees-table a.expandlink:before{content:"\f0fe";line-height:2}.edit-attendees-table .inner{display:none}html.layout-phone .edit-attendees-table th.availability,html.layout-phone .edit-attendees-table th.confirmstate{text-indent:-5000px}html.layout-phone .edit-attendees-table td.role{max-width:7em}html.layout-phone .edit-attendees-table select{padding-left:.5rem}.form-searchbar{display:flex;margin-bottom:.5rem}.form-searchbar inputtype=text{flex:1}html.layout-phone .form-searchbar inputtype=text{max-width:50%}.form-searchbar inputtype=button{margin-left:.5em;overflow:hidden;text-overflow:ellipsis}.attachmentslist li.ics:before,.attachmentslist li.text.calendar:before,.messagelist tbody .attachment span.ical:before{content:"\f073";font-weight:400}.alarms-input .edit-alarm-item{display:flex}.alarms-input .edit-alarm-item+.edit-alarm-item{margin-top:.25rem}.alarms-input .edit-alarm-item.first .delete-alarm,.alarms-input .edit-alarm-item:not(.first) .add-alarm{display:none}.alarms-input .edit-alarm-buttons a{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.alarms-input .edit-alarm-buttons a:before{margin:0;width:1em}.alarms-input .edit-alarm-buttons a:focus{box-shadow:none}.alarms-input .edit-alarm-buttons a.add:before{content:"\f067"}.alarms-input .edit-alarm-buttons .inner{display:none}.alarms-input .edit-alarm-type{flex:1;border-top-right-radius:0;border-bottom-right-radius:0}.alarms-input .edit-alarm-type:focus{z-index:2}.alarms-input .edit-alarm-set{display:flex;flex:1}.alarms-input .edit-alarm-values{flex:5}.alarms-input .edit-alarm-values .form-control{border-radius:0}.alarms-input .edit-alarm-values :first-child{border-left:0}.alarms-input .edit-alarm-offset{flex:5}.alarms-input .edit-alarm-date,.alarms-input .edit-alarm-related,.alarms-input .edit-alarm-time{flex:3}.recurrence-form .recurrence-rdates{width:100%;padding:0;list-style-type:none}.recurrence-form .recurrence-rdates:empty{margin:0}.recurrence-form .recurrence-rdates a.delete{margin-left:2em}.recurrence-form .recurrence-rdates a.delete:before{display:inline-block;float:none}.recurrence-form .recurrence-rdates .inner{display:none}.recurrence-form .recurrence-onevery select{width:40%;display:inline}.recurrence-form .inputform{display:flex}.recurrence-form .inputform input.button{margin-left:.25rem}.recurrence-form div.line{width:100%;display:flex;margin-bottom:.25rem}.recurrence-form div.line label{margin-left:.5em;min-width:4em;line-height:2.5}.recurrence-form .month,.recurrence-form .monthday,.recurrence-form .weekday{display:inline-block;width:3.5em;margin-right:.5rem;white-space:nowrap}.recurrence-form .month input,.recurrence-form .monthday input,.recurrence-form .weekday input{margin-right:.25rem}.recurrence-form .monthday{width:2.75em}.recurrence-form .table td{border:0;padding:0}.recurrence-form .table td.label{white-space:nowrap}.recurrence-form .table td:first-child label{line-height:2.5}.recurrence-form .table td label.monthday:first-child{margin-top:.5rem}.recurrence-form .input-group-append,.recurrence-form .input-group-prepend{display:initial}#event-status-badge{width:7rem;height:7rem;position:absolute;top:0;right:0;overflow:hidden}#event-status-badge span{display:none;text-transform:uppercase;line-height:20px;position:absolute;left:-2.4rem;top:2.4rem;width:13.2rem;text-align:center;font-weight:700;font-size:.85rem;color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#event-status-badge span:before{display:inline;float:none}.status-cancelled #event-status-badge span{background-color:#ff231f;display:block}.status-cancelled #event-status-badge span:before{content:"\f057"}#alarm-display h3{font-size:1.2rem;margin-bottom:.25rem}#alarm-display h3:before{content:"\f073";font-weight:400;font-size:1em}#alarm-display h3.type-task:before{content:"\f274";font-weight:400}#alarm-display .event-section{font-size:.9rem;color:#737677;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#alarm-display .alarm-actions{text-align:right;margin-bottom:.25rem}#alarm-display .alarm-actions a:first-child{margin-right:1em}#alarm-display .alarm-actions a:before{display:inline;float:none}#alarm-display a.alarm-action-snooze:before{content:"\f1f6"}#alarm-display a.alarm-action-dismiss:before{content:"\f2ed"}#alarm-snooze-dropdown a:before{content:"\f017";font-weight:400}.dialog-message{margin:0;opacity:.95;width:100%;padding:.75em;margin-top:.25em;color:#2c363a;background-color:rgba(255,212,82,.2)}.dialog-message>label{margin:0;display:block}.dialog-message>label label:before{line-height:1.25;margin-right:.25rem}.dialog-message .message{display:flex}.dialog-message+.savemode{margin-top:1rem}.dialog-message+.savemode a.btn{margin-right:.5rem}.dialog-message>.savemode{margin-top:.5rem}.dialog-message>.savemode label{margin-right:1rem}.dialog-message>.savemode input{margin-right:.25rem}@media screen and (max-width:420px){.nav-link.nav-icon{width:3em;margin-right:5px;padding:.5rem .5rem .5rem .65rem}.nav-link.nav-icon:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin:0 1rem 0 0;width:1em;line-height:1.2}.nav-link.nav-icon.resources:before{content:"\f1b2";margin-left:.1rem}.nav-link.nav-icon.attachments:before{content:"\f0c6"}.nav-link.nav-icon.attendees:before{content:"\f0c0"}}.menu a.taskaddlink:before,.menu a.tasklist:before,.menu a.tasklistlink:before{content:"\f274"}.tasklist-invitebox>i.icon:before{content:"\f274"!important}.listing li>div.tasklist .listname:before{content:"\f274"}#tasklist li.taskitem{border-bottom:0}#tasklist li.taskitem div.taskhead{position:relative;display:block;height:3.8rem;padding-left:1.5em;outline:0}#tasklist li.taskitem div.taskhead.flagged{color:#ff5552!important}#tasklist li.taskitem div.taskhead.selected{background-color:#ebf9ff}#tasklist li.taskitem div.taskhead.droptarget{background-color:#ffc}#tasklist li.taskitem div.taskhead.complete span.title{color:rgba(44,54,58,.5)}#tasklist li.taskitem div.taskhead.complete .progressbar{display:none}#tasklist li.taskitem>div,#tasklist li.taskitem>span{border-bottom:1px solid #f1f3f4}#tasklist li.taskitem ul{padding:0;border:0}#tasklist li.taskitem ul li{padding-left:0}#tasklist li.taskitem ul li .taskhead,#tasklist li.taskitem ul li .title{padding-left:3.25em}#tasklist li.taskitem ul li .childtoggle{left:1.5em}#tasklist li.taskitem ul li li .taskhead,#tasklist li.taskitem ul li li .title{padding-left:4.75em}#tasklist li.taskitem ul li li .childtoggle{left:3em}#tasklist li.taskitem ul li li li .taskhead,#tasklist li.taskitem ul li li li .title{padding-left:6.25em}#tasklist li.taskitem ul li li li .childtoggle{left:4.5em}#tasklist li.taskitem ul li li li li .taskhead,#tasklist li.taskitem ul li li li li .title{padding-left:7.75em}#tasklist li.taskitem ul li li li li .childtoggle{left:6em}#tasklist li.taskitem ul li li li li li .taskhead,#tasklist li.taskitem ul li li li li li .title{padding-left:9.25em}#tasklist li.taskitem ul li li li li li .childtoggle{left:7.5em}#tasklist .childtoggle{position:absolute;left:0;top:0;width:1.5em;padding:0 0 0 .25rem;height:3.8rem;cursor:pointer;z-index:1}#tasklist .childtoggle .inner{display:none}#tasklist .childtoggle:before{content:"\f105";margin:0;width:1em;line-height:3.8rem}#tasklist .childtoggle.expanded:before{content:"\f107"}#tasklist .childtoggle.collapsed:before{content:"\f105"}#tasklist span.title{position:absolute;left:0;right:0;bottom:0;line-height:2em;padding:0 0 0 .2em;padding-left:1.75em;margin-right:2em;overflow:hidden;text-overflow:ellipsis}#tasklist span.tags{position:absolute;right:2em;top:0;line-height:2em;text-align:right}#tasklist span.date{position:absolute;padding-left:.2em;font-size:90%;line-height:2.5;color:#737677;cursor:pointer}#tasklist span.date input{line-height:1;padding:0;margin-top:-2px}#tasklist span.flagged{position:absolute;right:0;top:0;line-height:1.8em;cursor:pointer}#tasklist .taskhead:not(.flagged):hover span.flagged:before{content:"\f024";font-weight:400}#tasklist .taskhead.flagged span.flagged:before{content:"\f024"}#tasklist .progressbar{position:absolute;bottom:1px;left:.2em;right:.2em}#tasklist .progressbar .progressvalue{border-top:2px solid #ffd452}#tasklist .custom-switch{position:absolute;top:1.4rem;z-index:1;height:2.3em}#tasklist .actions{display:none}@media screen and (min-width:1200px){#tasklist .taskhead{border-left:2px solid transparent}#tasklist .taskhead.focused{border-left:2px solid #9ddfff;outline:0}}html.touch #tasklist li{font-size:1rem}html.touch #tasklist .custom-switch,html.touch #tasklist inputtype=checkbox,html.touch #tasklist span.flagged{display:none}html.touch #tasklist span.title{margin-right:.5rem}html.touch #tasklist span.tags{right:.5rem}#taskshow+.formbuttons button.disabled{display:none}#taskshow .task-parent-title{color:#737677;font-size:90%;margin-bottom:.5rem}#taskshow .task-title{font-size:1.5rem;font-weight:700}#taskshow .task-description{margin:1rem 0}#taskshow.status-completed h2{color:rgba(44,54,58,.5)}#taskshow.status-flagged h2:before{content:"\f024";color:#ff5552;font-size:.9em}#taskshow .attachmentslist li{margin-right:1em}#taskedit-attachment-form{position:absolute}.messagetasklinks>i.icon:before{content:"\f274"!important}.messagetasklinks .tasklist{list-style-type:none;margin:0;padding:0}.messagetasklinks .tasklist li{display:flex;align-items:center}.messagetasklinks input{height:auto!important}#print-layout #tasklist{padding:0}#print-layout #tasklist li{list-style-type:none}#print-layout #tasklist .description{display:block;white-space:pre-wrap}#print-layout #tasklist .title{position:relative;font-weight:700;padding:0;margin:0}#print-layout #tasklist .taskhead{height:auto}.taskitem-draghelper{overflow:hidden;text-overflow:ellipsis}@media screen and (max-height:750px) and (min-width:769px){html.dark-mode #taskmenu a{width:41px}}html.dark-mode .watermark{background-color:#21292c;background-blend-mode:soft-light}html.dark-mode .watermark:before{background:0 0}html.dark-mode #filelistcontainer,html.dark-mode .fc-scroller{scrollbar-width:thin}html.dark-mode .fc .fc-header-toolbar{background-color:#374549}html.dark-mode .fc #timezone-display,html.dark-mode .fc .fc-center h2{color:#c5d1d3}html.dark-mode .filelist tr.session.owner>td.name::after,html.dark-mode .resources-dialog .listing li.resource>a,html.dark-mode .rsvp-status:not(.accepted):not(.tentative):not(.declined)::before{color:#c5d1d3}html.dark-mode #tasklist li.taskitem>div,html.dark-mode #tasklist li.taskitem>span,html.dark-mode .fc-unthemed .fc-content,html.dark-mode .fc-unthemed .fc-divider,html.dark-mode .fc-unthemed .fc-list-heading td,html.dark-mode .fc-unthemed .fc-list-view,html.dark-mode .fc-unthemed .fc-popover,html.dark-mode .fc-unthemed .fc-row,html.dark-mode .fc-unthemed td,html.dark-mode .fc-unthemed th{border-color:#2c373a}html.dark-mode .calendar-scheduler .attendees-list div.attendee,html.dark-mode .calendar-scheduler .schedule-table .timesheader,html.dark-mode .calendar-scheduler .schedule-table td.attendees .attendees-list,html.dark-mode .calendar-scheduler .schedule-table td.times td,html.dark-mode .fc-unthemed td,html.dark-mode .fc-unthemed th,html.dark-mode .files-dialog .selection-content{border-color:#4d6066}html.dark-mode #resource-availability .fc,html.dark-mode #resource-availability .fc-view{border-color:#4d6066}html.dark-mode .edit-attendees-table th,html.dark-mode .selection-dialog .form-addon,html.dark-mode .selection-dialog .header,html.dark-mode .selection-dialog .selection-list{border-color:#4d6066!important}html.dark-mode .selection-dialog .form-addon,html.dark-mode .selection-dialog .header,html.dark-mode .selection-dialog .listing ul{background-color:transparent}html.dark-mode #tasklist li.taskitem div.taskhead.selected,html.dark-mode .fc-unthemed .fc-divider,html.dark-mode .fc-unthemed .fc-list-heading td,html.dark-mode .fc-unthemed .fc-popover .fc-header,html.dark-mode .listing li.selected>div>*,html.dark-mode body.task-calendar .ui-datepicker-inline .ui-datepicker-activerange{color:#37beff;background-color:#374549}html.dark-mode #folder-mount-form td.source.selected{background-color:#374549}html.dark-mode #tagsform option,html.dark-mode .tagedit-list li.tagedit-listelement-new input{color:#c5d1d3}html.dark-mode #kolabnoteslist td.date,html.dark-mode #notedetailstitle .dates,html.dark-mode #tasklist span.date,html.dark-mode .availability span,html.dark-mode .calendar-agenda-preview .event-row.current,html.dark-mode .fc .fc-axis,html.dark-mode .fc .fc-day-header,html.dark-mode .fc .fc-day-number,html.dark-mode .fc .fc-week-header,html.dark-mode .fc .fc-week-number,html.dark-mode .formcontent.text-only .faded *,html.dark-mode .invitebox .rsvp-status.hint,html.dark-mode .invitebox td.label{color:#8ba3a7}html.dark-mode .invitebox .folder-select select{background-color:#21292c}html.dark-mode .tagedit-listtabindex="-1"{border-color:#37beff;box-shadow:0 0 0 .2rem rgba(55,190,255,.25);background:#2c373b}html.dark-mode #tasklist .progressbar .progressvalue{border-color:#997f31}html.dark-mode .listing li.readonly:not(.virtual)>div a:first-child:after,html.dark-mode .listing li>div.readonly a:first-child:after{color:#c5d1d3;background-color:#21292c}html.dark-mode .dialog-message{opacity:1;color:#c5d1d3;background-color:#997f31}
5
\ No newline at end of file
6
roundcubemail-1.6.tar.gz/plugins/libkolab/skins/kolab/include/kolab_tags.less
Changed
9
1
2
max-width: 4em;
3
padding: .1rem .4rem;
4
margin-right: .2rem;
5
+ font-weight: bold;
6
7
&:not(.tagedit-listelement) a {
8
color: inherit;
9
roundcubemail-1.6.tar.gz/plugins/libkolab/skins/kolab/libkolab.min.css
Changed
6
1
2
-#alarm-display .alarm-actions a:before,#alarm-display h3:before,#delegate-table td:before,#devices-table td:not(.selection):before,#event-status-badge span:before,#eventshow .event-partstat .changersvp:before,#kolabnoteslist td.title:before,#taglist li:before,#tagsform option:before,#tasklist .childtoggle:before,#tasklist .taskhead.flagged span.flagged:before,#tasklist .taskhead:not(.flagged):hover span.flagged:before,#taskshow.status-flagged h2:before,.attendee:before,.availability span:before,.calendar-scheduler .schedule-buttons .next-slot:after,.document-editor-header #collaborators a.button.add:before,.edit-attendees-table th.invite label:before,.editors-dialog table td.options a.delete:before,.fc .fc-time i:before,.fc button.next:before,.fc button.prev:before,.filelist tbody td.filename span:before,.filelist tr.session>td.name:after,.folderlist li.mailbox a.subscription.subscribed:before,.listing li.readonly:not(.virtual)>div a:first-child:after,.listing li>div span.subscribed:before,.listing li>div.calendar .calname:before,.listing li>div.folder .listname:before,.listing li>div.readonly a:first-child:after,.listing li>div.tasklist .listname:before,.resources-dialog .listing li.resource>a:before,.rsvp-status.accepted:before,.rsvp-status.declined:before,.rsvp-status.delegated:before,.rsvp-status.loading:before,.rsvp-status.needs-action:before,.rsvp-status.tentative:before,a.btn.fromcloud:before,a.button.filesaveall:before,a.button.saveas:before,fieldset.categories .input-group a.button.create:before,li>a.icon.saveas:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}@media screen and (min-width:1200px){.listing li>div>a{border-left:2px solid transparent}.listing li>div>a:focus{border-left:2px solid #ffdd5b;outline:0}}.listing li>div{display:flex}.listing li>div>a:first-child{overflow:hidden;text-overflow:ellipsis;position:relative;flex-grow:1}.listing li>div>a:first-child+input{position:initial}.listing li>div .custom-switch{position:relative}.listing li>div.folder .listname:before{content:"\f249";margin-right:.5rem}.listing li>div span.actions{display:flex}input+.listing li>div span.actions{padding-right:2em}.listing li>div span.actions a{padding:0;margin:0;margin-right:.2rem;cursor:pointer}.listing li>div span.actions a:before{margin:0}.listing li>div span.actions a.remove{display:none}html.touch .listing li>div span.actions{padding-left:.2rem}html.touch .listing li>div span.actions a{margin-right:.5rem}.listing li>div a.quickview:before{content:"\f06e";opacity:.2;color:#f4c200}.listing li>div a.quickview:after{display:none!important}.listing li>div.focusview a.quickview:before{content:"\f06e";opacity:1}.listing li>div .subscribed{cursor:pointer;padding:0!important;border-left:0;width:auto}.listing li>div .subscribed:before{content:"\f02e";font-weight:400;height:auto;color:#f4c200;margin-right:.25rem}.listing li>div span.subscribed:before{content:"\f02e";font-weight:400}.listing li>div.subscribed .subscribed:before{content:"\f02e";font-weight:900}.listing li.selected>div>*{color:#4f4f4f;background-color:#fdf6d9}.listing li.readonly:not(.virtual)>div a:first-child:after,.listing li>div.readonly a:first-child:after{content:"\f023";position:absolute;left:2.25rem;top:17.5px;font-size:.9em!important;width:.9em;line-height:1;height:1em!important;background-color:#fff;border-radius:50% 50% 0 0;color:#4f4f4f;opacity:.9}html.touch .listing li.readonly:not(.virtual)>div a:first-child:after,html.touch .listing li>div.readonly a:first-child:after{top:23.5px;left:2.7rem}.listing li.other.user>div a:first-child:before,.listing li>div.other.user>.listname:before{content:"\f007";font-weight:900}.listing li.virtual.user>div a:first-child:after,.listing li>div.virtual.user>.listname:after{display:none}.listing li.virtual.shared>div a:first-child:before,.listing li>div.virtual.shared>.listname:before{content:"\f1e0";font-weight:900}.listing li.virtual.shared>div a:first-child:after,.listing li>div.virtual.shared>.listname:after{display:none}.listing li.virtual>div>a{opacity:.5}.listing.treelist:not(.notree)>li>div>a{padding-left:1.5em}.listing li.droptarget>div{background-color:#ffc}.listing li .count{position:absolute;top:0;right:0;min-width:2em;line-height:1.4rem;margin:7.7px;padding:0 .3em;border-radius:.4em;background:#7b7b77;color:#fff;text-align:center;font-weight:700}html.touch .listing li .count{line-height:2rem;margin:9.5px}.treelist ul li a:first-child:after{margin-left:1.7em!important}.treelist ul li li a:first-child:after{margin-left:3.4em!important}.treelist ul li li li a:first-child:after{margin-left:5.1em!important}.treelist ul li li li li a:first-child:after{margin-left:6.8em!important}.treelist ul li li li li li a:first-child:after{margin-left:8.5em!important}.treelist ul li li li li li li a:first-child:after{margin-left:10.2em!important}.treelist.notree li a:first-child:after{left:1.3rem!important}.searchresults .boxtitle{line-height:2rem!important;font-size:80%;padding:0 .5rem;margin:0;color:#7b7b77;background-color:#f8f7f4;text-align:center;border-bottom:1px solid #d4dbde}.folderlist li.mailbox.type-event>a:before{content:"\f133";font-weight:900}.folderlist li.mailbox.type-task>a:before{content:"\f274";font-weight:900}.folderlist li.mailbox.type-journal>a:before{content:"\f133";font-weight:400}.folderlist li.mailbox.type-contact>a:before{content:"\f2b9";font-weight:400}.folderlist li.mailbox.type-note>a:before{content:"\f249";font-weight:400}.folderlist li.mailbox.type-configuration>a:before{content:"\f013";font-weight:900}.folderlist li.mailbox.type-freebusy>a:before{content:"\f133";font-weight:400}.folderlist li.mailbox.type-file>a:before{content:"\f07b";font-weight:900}.menu li.search{padding:.25rem .5rem}.menu a.history:before{content:"\f1da"}button.btn.save.notify:before{content:"\f0e0"}button.btn.print:before{content:"\f02f"}.watermark{background:url("../../../../skins/kolab/images/logo.svg") center no-repeat #fff;background-size:30%;background-blend-mode:luminosity;width:100%;height:100%}.watermark>*{display:none}.watermark:before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,.85)}.watermark.formcontainer{background:0 0!important}.watermark.formcontainer:before{display:none}.watermark.formcontainer>*{display:block}html.layout-phone .watermark.formcontainer,html.layout-small .watermark.formcontainer{overflow-y:auto!important}.form-group>.datetime{display:flex;white-space:nowrap}.form-group>.datetime input{width:10em}.form-group>.datetime input:first-child{margin-right:.5rem;width:15em}.form-group>.datetime a{margin-left:1em;text-align:right;flex:1;line-height:2.4}.form-section.form-group.form-check{display:flex;padding:0}.form-section.form-group.form-check label{order:10}.formcontent.text-only .faded *{color:#7b7b77}.linkslist{border:0!important;background:0 0!important}.linkslist li.link{padding:0}.linkslist li.link.message.eml:before{content:"\f0e0"}.linkslist li.link a.messagelink{overflow:hidden;text-overflow:ellipsis}.linkslist li.link a.delete .inner{display:none}.print-config{position:fixed;top:0;left:0;width:100%;z-index:10000;padding:.5em 1em;background-color:#f8f7f4}.print-config button.print{margin-right:1rem}.print-config .prop{line-height:2;margin-left:.5rem;display:inline-block;vertical-align:middle}.print-config .prop label{margin:0}@media print{.print-config{display:none}}.print-config+.print-content{position:relative;top:0;left:0;height:auto;margin:5em auto 0 auto;overflow:visible}.selection-dialog .ui-dialog-content{display:flex!important;overflow:hidden!important}.selection-dialog .selection-list{display:flex;flex-direction:column;border:1px solid #d4dbde;justify-content:center}.selection-dialog .ui-dialog-content .popupmenu{display:flex!important;width:100%}.selection-dialog .scroller{flex:1;overflow-y:auto}.selection-dialog .header{border-bottom:1px solid #d4dbde;display:flex;background-color:#f1eeea;font-size:1rem;font-weight:700;line-height:58px;height:58px;min-height:58px;padding:0 .25em;position:relative;overflow:hidden;white-space:nowrap}.selection-dialog .header a.button{color:#7b7b77;margin:0 .3rem}.selection-dialog .header a.button:before{margin:0}.selection-dialog .header-title{width:100%;text-align:center;margin:0 2em}.selection-dialog .selection-content{display:flex;flex-direction:column}.selection-dialog .tab-content{margin-top:1rem;height:100%;overflow-y:auto}.selection-dialog .form-addon{margin:0;padding:.5rem 0;width:100%;background-color:#f8f7f4;border-top:1px solid #d4dbde}.selection-dialog .listing ul{background-color:#fff}.selection-dialog .listing li.selected{color:#4f4f4f}@media screen and (max-width:768px){.selection-dialog .ui-dialog-content{padding:0!important}.selection-dialog .ui-dialog-titlebar{display:none;margin:0}.selection-dialog .selection-list{border:0}.selection-dialog .selection-content .header-title,.selection-dialog .selection-list .header-title{margin-left:0}.selection-dialog .header a:before{font-size:1.75rem}}@media screen and (max-height:750px) and (min-width:769px){#layout-menu,#layout-menu .popover-header img{width:42px}#taskmenu a{height:42px;width:42px;font-size:1.2rem!important}#taskmenu .special-buttons{width:42px}#taskmenu span.inner{display:none}}.menu a.calendarlink:before{content:"\f073"}.menu a.send:before{content:"\f1d8"}.listing.iconized li.resource>i:before{content:"\f1b2"}a.button.today:before{content:"\f133";font-weight:400}a.button.date:before{content:"\f073";font-weight:400}.listing li>div.calendar .calname:before{content:"\f073"}.listing li>div.calendar .actions{padding-right:.25rem}.listing li>div.calendar .actions :last-child{margin-right:0}.listing li>div.calendar.cal---invitation--declined .calname:before,.listing li>div.calendar.cal---invitation--pending .calname:before{content:"\f073";font-weight:400}.listing li>div.calendar.cal-__bdays__ .calname:before{content:"\f1fd"}.listing li>div.calendar.cal---invitation--declined,.listing li>div.calendar.cal---invitation--pending,.listing li>div.calendar.cal-__bdays__{font-style:italic}.listing li>div.calendar.cal---invitation--declined a.calname,.listing li>div.calendar.cal---invitation--pending a.calname,.listing li>div.calendar.cal-__bdays__ a.calname{padding-right:2.5em}.listing li>div.calendar.cal---invitation--declined .count,.listing li>div.calendar.cal---invitation--pending .count,.listing li>div.calendar.cal-__bdays__ .count{right:4.2em;font-style:normal}.listing li span.handle{display:none}#calendarcategories .input-group:not(:last-child){margin-bottom:.25rem}fieldset.categories .input-group .minicolors-input{border-radius:0}fieldset.categories .input-group .minicolors+.input-group-append{margin-left:0}fieldset.categories .input-group a.button.create:before{content:"\f067";line-height:1}.calendar-invitebox>i.icon:before{content:"\f133"!important}.calendar-agenda-preview{display:none;margin-top:.5rem;border-top:1px solid #ddd}.calendar-agenda-preview h3{margin-top:.5rem}.calendar-agenda-preview .event-row{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-agenda-preview .event-row.current{color:#333;font-weight:700}.calendar-agenda-preview .event-row.no-event{font-style:italic}.calendar-agenda-preview .event-row.fc-invitation-needs-action{color:#7b7b77}.calendar-agenda-preview .event-row.fc-invitation-needs-action .event-title{font-style:italic}.calendar-agenda-preview .event-title{padding-left:.5rem}#calendar.content{overflow:hidden!important;position:relative}.calendar-datepicker .ui-datepicker{margin:0!important;border:0;border-radius:0;width:auto;min-width:auto!important;font-size:.9rem;background-color:#f8f7f4}.calendar-datepicker .ui-datepicker table{margin:0}.calendar-datepicker .ui-datepicker td a{font-size:.9rem!important}.calendar-datepicker .ui-datepicker-header{background-color:#f8f7f4;border-top:1px solid #d4dbde}.ui-dialog .calendar-datepicker .ui-datepicker{background:0 0}.ui-dialog .calendar-datepicker .ui-datepicker-header{background:0 0;border:0}.ui-dialog .calendar-datepicker td a{line-height:3em!important;font-size:1rem!important}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}body .fc{font-size:1em}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-default{background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-button-group{display:inline-block}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-popover .fc-header .fc-close{cursor:pointer}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc-bg{bottom:0}.fc-bg table{height:100%}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}adata-goto{cursor:pointer}adata-goto:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover{color:#fff;text-decoration:none}.fc-event.fc-draggable,.fc-eventhref{cursor:pointer}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4}.fc-event .fc-resizer{display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}.fc-icon{display:inline-block;height:1em;line-height:1em;font-size:1em;text-align:center;overflow:hidden;font-family:"Courier New",Courier,monospace;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\2039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\D7";font-size:200%;top:6%}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.ui-widget .fc-disabled-day{background-image:none}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.ui-widget .fc-event{color:#fff;text-decoration:none;font-weight:400}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-toolbar{text-align:center}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px 0}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number{text-align:center}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{position:relative;z-index:3}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight-container{position:relative}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event{overflow:hidden}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\A0-\A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt{float:right}.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title ahref:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee}body.quickview-active .fc .fc-scroller{background:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20576%20512%22%3E%3Cpath%20fill%3D%22%23f2f2f2%22%20d%3D%22M569.354%20231.631C512.969%20135.949%20407.81%2072%20288%2072%20168.14%2072%2063.004%20135.994%206.646%20231.631a47.999%2047.999%200%200%200%200%2048.739C63.031%20376.051%20168.19%20440%20288%20440c119.86%200%20224.996-63.994%20281.354-159.631a47.997%2047.997%200%200%200%200-48.738zM288%20392c-75.162%200-136-60.827-136-136%200-75.162%2060.826-136%20136-136%2075.162%200%20136%2060.826%20136%20136%200%2075.162-60.826%20136-136%20136zm104-136c0%2057.438-46.562%20104-104%20104s-104-46.562-104-104c0-17.708%204.431-34.379%2012.236-48.973l-.001.032c0%2023.651%2019.173%2042.823%2042.824%2042.823s42.824-19.173%2042.824-42.823c0-23.651-19.173-42.824-42.824-42.824l-.032.001C253.621%20156.431%20270.292%20152%20288%20152c57.438%200%20104%2046.562%20104%20104z%22%2F%3E%3C%2Fsvg%3E") center no-repeat;background-size:50%}.fc .fc-header-toolbar{display:flex;background-color:#f8f7f4;margin:0}.fc .fc-header-toolbar>*>*{float:none;margin:0}.fc .fc-left{order:1}.fc .fc-left .fc-button-group{display:none}.fc .fc-center{flex:1;order:2;text-align:center;padding:.25rem}.fc .fc-center h2{margin:0;color:#7b7b77;white-space:nowrap;font-size:1.25rem;font-weight:700}.fc .fc-right{order:3;text-align:right}.fc .fc-right .fc-button{display:none}.fc button{height:unset;padding:.3rem .75rem}.fc button.prev:before{content:"\f104";margin:0!important;line-height:1}.fc button.next:before{content:"\f105";margin:0!important;line-height:1}.fc .btn-group{padding:.5rem;margin:0}.fc .fc-type-freebusy{opacity:.6}.fc .fc-type-freebusy .fc-title{position:absolute;top:-5000px}.fc .fc-type-freebusy td{color:#999}.fc .fc-event-dot{background-color:#c00}.fc a.fc-event,.fc a.fc-event:hover{color:#fff}.fc .fc-event{font-size:13px;background-color:#c00;border-color:#c00}.fc .fc-event .fc-title{font-weight:700}.fc .fc-event .fc-bg{opacity:.15;margin-top:1.1rem}.fc .fc-event.fc-invitation-declined,.fc .fc-event.fc-invitation-needs-action,.fc .fc-event.fc-invitation-tentative{border:1px dashed #999}.fc .fc-event.fc-event-ns-other.fc-invitation-declined{opacity:.7}.fc .fc-event.fc-event-ns-other.fc-invitation-declined .fc-title{text-decoration:line-through}.fc .fc-event.fc-invitation-tentative .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAOuJAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-event.fc-invitation-needs-action .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAFdXx////yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-event.fc-invitation-declined .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAMwAAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-list-view tr.fc-invitation-declined,.fc .fc-list-view tr.fc-invitation-needs-action,.fc .fc-list-view tr.fc-invitation-tentative{color:#888}.fc .fc-list-view tr.fc-invitation-declined .fc-event-dot,.fc .fc-list-view tr.fc-invitation-needs-action .fc-event-dot,.fc .fc-list-view tr.fc-invitation-tentative .fc-event-dot{background-color:#888}.fc .cal-event-status-cancelled,.fc .fc-declined,.fc .fc-needs-action{opacity:.6}.fc .fc-time i{display:inline-block;width:1em;height:1em;margin-left:.25rem}.fc .fc-time i:before{font-size:1em;line-height:1;margin-top:.1rem}.fc .fc-time i.fc-icon-recurring:before{content:"\f24d";font-weight:400}.fc .fc-time i.fc-icon-alarms:before{content:"\f0f3"}.fc .fc-event-temp{opacity:.4}.fc .fc-nonbusiness{background-color:rgba(123,123,119,.2)}.fc .fc-day.fc-today{background:rgba(255,212,82,.2)!important}.fc .fc-now-indicator{border-color:#41b849;border-width:1.5px}.fc .fc-list-item,.fc .fc-list-item:hover td{background:0 0}.fc .fc-list-item a,.fc .fc-list-item td{cursor:default}.fc .fc-list-item-title{font-weight:700}.fc .fc-list-table td{padding:.5rem}.fc .fc-list-heading td{background:rgba(123,123,119,.1)}.fc .fc-list-empty{display:none}.fc .fc-more{color:#f4c200!important;white-space:nowrap}.fc .fc-axis,.fc .fc-day-header,.fc .fc-day-number,.fc .fc-week-header,.fc .fc-week-number{color:#7b7b77;font-size:.95rem;padding:.15rem!important}.fc .fc-week-number{text-align:center}.fc .fc-popover{border-radius:.3rem}.fc .fc-popover .fc-header{color:#7b7b77;font-size:.95rem;font-weight:700}.fc .fc-popover .fc-icon-x::after{top:3px}.fc .fc-view.fc-widget-content,.fc td.fc-head-container{border-left-width:0}.fc .fc-body .fc-bg .fc-widget-content,.fc .fc-body .fc-bg-sceleton .fc-widget-content,.fc .fc-body>tr>.fc-widget-content,.fc .fc-list-view{border-bottom-width:0}.print-content .fc .fc-header-toolbar{background-color:#fff}.print-content .fc .fc-center h2{color:#000;padding-bottom:.75rem;font-size:1.5rem!important}.print-content .fc .fc-day.fc-today{background:0 0!important}.print-content .fc a.fc-event{color:#000;background-color:#fff!important}.print-content .fc .fc-event-description{white-space:pre-wrap;font-size:90%}.print-content .fc .fc-event-location{width:20%}.print-content .fc .fc-event-row-secondary td{border:0;padding-top:0!important}.print-content .fc .fc-scroller{overflow:visible!important;height:auto!important}.print-content .fc .fc-view.fc-widget-content,.print-content .fc td.fc-head-container{border-left-width:1px}.print-content .fc .fc-agenda-view,.print-content .fc .fc-list-view,.print-content .fc .fc-month-view{border-bottom:1px solid #ddd}@media screen and (max-width:768px){.fc .fc-left{display:block;width:100%;padding:0}.fc .fc-left button{flex:1 1 auto;border-radius:0}.fc .fc-left .btn-group{padding:0;display:flex}.fc .fc-center,.fc .fc-list-table .fc-event-location,.fc .fc-right{display:none}}@media screen and (min-width:769px) and (max-width:920px){.fc .fc-center{overflow:hidden;text-overflow:ellipsis;flex:1}.fc .fc-center h2{font-size:1rem;line-height:1;padding-top:.45rem}.fc .fc-left .btn,.fc .fc-right .btn{padding-left:.5rem;padding-right:.5rem}}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar{-webkit-appearance:none}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar:vertical,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar:vertical,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar:vertical{width:.6rem}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar:horizontal,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar:horizontal,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar:horizontal{height:.6rem}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar-thumb,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar-thumb,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.4);border-radius:.3rem;border:2px solid #fff}body.task-calendar #print-layout #calendar-view-selector{float:right;padding-top:.25rem}body.task-calendar #print-layout #calendarlist{margin-top:1rem}body.task-calendar #print-layout #calendarlist,body.task-calendar #print-layout #calendarlist ul{list-style:none;padding:0}body.task-calendar #print-layout #calendarlist li{display:inline-block;white-space:nowrap}body.task-calendar #print-layout #calendarlist div,body.task-calendar #print-layout #calendarlist li,body.task-calendar #print-layout #calendarlist ul{float:left}body.task-calendar #print-layout #calendarlist div{margin-right:2rem}body.task-calendar #print-layout #calendarlist a{text-decoration:none;cursor:auto}body.task-calendar #print-layout #calendarlist input,body.task-calendar #print-layout #calendarlist span.actions,body.task-calendar #print-layout #calendarlist span.handle{display:none}@media screen and (min-width:769px){body.task-calendar #layout-sidebar{flex:2;max-width:400px;min-width:240px}}body.task-calendar .ui-datepicker td{width:12.5%}body.task-calendar .ui-datepicker .ui-datepicker-week-col{color:#d4dbde;text-align:center}body.task-calendar .ui-datepicker-inline .ui-datepicker-week-col{color:#f4c200;cursor:pointer}body.task-calendar .ui-datepicker-inline .ui-datepicker-activerange{background-color:#fdf6d9}#timezone-display{font-size:.9rem;color:#7b7b77}#agendaoptions{padding:0 .5rem .5rem .5rem;display:flex;background-color:#f8f7f4}#agendaoptions .input-group{padding-right:.5rem;flex-wrap:nowrap}#agendaoptions .input-group:last-child{padding-right:0}#agendaoptions select{min-width:7em}#agendaoptions .input-group-prepend{overflow:hidden;margin-bottom:0}#agendaoptions .input-group-prepend span{display:block;overflow:hidden;text-overflow:ellipsis}#eventshow{margin:0}#eventshow .event-title{font-size:1.5rem;font-weight:700}#eventshow .event-location{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#eventshow .event-description{margin:1rem 0}#eventshow .event-attendees{margin-bottom:1rem}#eventshow .event-attendees .attendee{margin-right:.25rem}#eventshow .event-partstat>span{display:flex}#eventshow .event-partstat .rsvp-status:before{display:inline;float:none}#eventshow .event-partstat .changersvp{cursor:pointer;font-size:1.2rem;margin-left:1em}#eventshow .event-partstat .changersvp:before{content:"\f14b";float:none;display:inline;line-height:1}#eventshow .event-partstat .inner{display:none}#eventedit .edit-attendees-table td{padding-top:.15rem}#eventedit .edit-attendees-table td.role{padding-left:0;width:9em}#fish-eye-view{padding:0}@media screen and (min-width:769px){#fish-eye-view{border-bottom:1px solid #d4dbde}}.availability span{margin-right:.5rem;color:#7b7b77}.availability span:before{content:"\f0c8";display:inline;float:none}.availability span.legend:before{font-size:1em}.availability span.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";display:block;line-height:1}.availability span.unknown:before{color:#bbb}.availability span.free:before{color:#41b849}.availability span.busy:before{color:#ff5552}.availability span.tentative:before{color:#8383fc}.availability span.out-of-office:before{color:#fbaa68}.datetime .custom-switch{padding-left:.5rem}.datetime .custom-switch label{line-height:2;margin-top:.2rem}.datetime input{width:10em!important}@media screen and (max-width:420px){.datetime input{width:8em!important}.datetime input+input{width:6em!important}}.calendar-scheduler .nav{align-items:center}.calendar-scheduler .nav button:first-child{margin-right:.25rem}.calendar-scheduler .nav>div{white-space:nowrap}@media screen and (max-width:420px){.calendar-scheduler .nav button{padding-left:.5rem;padding-right:.5rem}}.calendar-scheduler .schedule-buttons .prev-slot:before{content:"\f053"}.calendar-scheduler .schedule-buttons .next-slot:after{content:"\f054";display:inline-block;float:none;margin-right:0}.calendar-scheduler .schedule-options{flex:1;margin-left:1rem}html.layout-phone .calendar-scheduler .schedule-options{order:100;margin-left:0}.calendar-scheduler .schedule-nav{flex:1;margin-left:.3rem;text-align:right}.calendar-scheduler .schedule-nav button{line-height:1.8}.calendar-scheduler .schedule-range{width:60%;margin-top:2rem}html.layout-phone .calendar-scheduler .schedule-range{margin:0}.calendar-scheduler .schedule-legend .attendee{margin-right:.5rem}.calendar-scheduler .attendees-list{position:relative}.calendar-scheduler .attendees-list a.attendee-role-toggle{position:absolute;left:0;display:inline-block;width:1em;cursor:pointer}.calendar-scheduler .attendees-list div.attendee{border-top:1px solid #f8f7f4;line-height:1.7rem;height:1.8rem}.calendar-scheduler .attendees-list .attendee{white-space:nowrap}.calendar-scheduler .attendees-list .attendee.spacer{height:10px}.calendar-scheduler .attendees-list .attendee.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";font-weight:900}.calendar-scheduler .attendees-list .attendee.total{font-weight:700}.calendar-scheduler .attendees-list .attendee.spacer:before,.calendar-scheduler .attendees-list .attendee.total:before{display:none}.calendar-scheduler .schedule-table{table-layout:fixed}.calendar-scheduler .schedule-table th{border-top:0}.calendar-scheduler .schedule-table td.attendees{width:25%;overflow:hidden;border-top:0}html.layout-phone .calendar-scheduler .schedule-table td.attendees{width:35%}.calendar-scheduler .schedule-table td.attendees .attendees-list{border-bottom:1px solid #d4dbde}.calendar-scheduler .schedule-table td.times{width:auto;border-top:0}.calendar-scheduler .schedule-table td.times table{margin:0}.calendar-scheduler .schedule-table td.times td{height:1.8rem;border-top:1px solid #f8f7f4;white-space:nowrap}.calendar-scheduler .schedule-table div.scroll{position:relative;overflow:auto}.calendar-scheduler .schedule-table .timesheader{height:1.4rem;border-top:1px solid #d4dbde}.calendar-scheduler .schedule-table .boxtitle{margin:0;padding:0;font-size:1rem;font-weight:700;padding-top:.5rem;line-height:2}.calendar-scheduler .schedule-table td{padding:4px}.calendar-scheduler .schedule-table tbody td{padding:0}.calendar-scheduler .schedule-table tbody td div{height:100%}.calendar-scheduler .schedule-table tr.spacer td{padding:0;height:10px}.calendar-scheduler .schedule-table tr.dates thcolspan="1"{min-width:48px;max-width:48px;text-align:center;font-size:.7rem;line-height:2.9}.calendar-scheduler .schedule-table tr.times td{cursor:pointer;min-width:48px;max-width:48px;font-size:.7rem;text-align:center;color:#f4c200;height:1.4rem;padding:0 .1rem;vertical-align:middle;border-top:1px solid #d4dbde;border-left:1px solid #f8f7f4}.calendar-scheduler .schedule-table .fbcontent td{border-left:1px solid #f8f7f4}.calendar-scheduler .schedule-table .fbcontent:last-child td{border-bottom:1px solid #d4dbde}.calendar-scheduler .schedule-table div.unknown{background-color:#bbb}.calendar-scheduler .schedule-table div.free{background-color:#41b849}.calendar-scheduler .schedule-table div.busy{background-color:#ff5552}.calendar-scheduler .schedule-table div.tentative{background-color:#8383fc}.calendar-scheduler .schedule-table div.out-of-office{background-color:#fbaa68}.calendar-scheduler .schedule-table div.all-busy,.calendar-scheduler .schedule-table div.all-out-of-office,.calendar-scheduler .schedule-table div.all-tentative{overflow:hidden}.calendar-scheduler .schedule-table div.all-busy span,.calendar-scheduler .schedule-table div.all-out-of-office span,.calendar-scheduler .schedule-table div.all-tentative span{display:block;width:300%;height:300%;border:1px solid #fff;background:#ff231f;transform:rotate(42deg) translate(2%)}.calendar-scheduler .schedule-table div.all-busy.w10 span,.calendar-scheduler .schedule-table div.all-out-of-office.w10 span,.calendar-scheduler .schedule-table div.all-tentative.w10 span{display:none}.calendar-scheduler .schedule-table div.all-busy.w20 span,.calendar-scheduler .schedule-table div.all-busy.w25 span,.calendar-scheduler .schedule-table div.all-out-of-office.w20 span,.calendar-scheduler .schedule-table div.all-out-of-office.w25 span,.calendar-scheduler .schedule-table div.all-tentative.w20 span,.calendar-scheduler .schedule-table div.all-tentative.w25 span{transform:rotate(17deg) translate(-9%)}.calendar-scheduler .schedule-table div.all-busy.w30 span,.calendar-scheduler .schedule-table div.all-out-of-office.w30 span,.calendar-scheduler .schedule-table div.all-tentative.w30 span{transform:rotate(28deg) translate(-7%)}.calendar-scheduler .schedule-table div.all-busy.w33 span,.calendar-scheduler .schedule-table div.all-out-of-office.w33 span,.calendar-scheduler .schedule-table div.all-tentative.w33 span{transform:rotate(32deg) translate(-5%)}.calendar-scheduler .schedule-table div.all-busy.w40 span,.calendar-scheduler .schedule-table div.all-out-of-office.w40 span,.calendar-scheduler .schedule-table div.all-tentative.w40 span{transform:rotate(36deg) translate(-3%)}.calendar-scheduler .schedule-table div.all-busy.w60 span,.calendar-scheduler .schedule-table div.all-out-of-office.w60 span,.calendar-scheduler .schedule-table div.all-tentative.w60 span{transform:rotate(48deg) translate(6%)}.calendar-scheduler .schedule-table div.all-busy.w67 span,.calendar-scheduler .schedule-table div.all-out-of-office.w67 span,.calendar-scheduler .schedule-table div.all-tentative.w67 span{transform:rotate(52deg) translate(9%)}.calendar-scheduler .schedule-table div.all-busy.w70 span,.calendar-scheduler .schedule-table div.all-busy.w75 span,.calendar-scheduler .schedule-table div.all-out-of-office.w70 span,.calendar-scheduler .schedule-table div.all-out-of-office.w75 span,.calendar-scheduler .schedule-table div.all-tentative.w70 span,.calendar-scheduler .schedule-table div.all-tentative.w75 span{transform:rotate(55deg) translate(12%,30%)}.calendar-scheduler .schedule-table div.all-busy.w80 span,.calendar-scheduler .schedule-table div.all-out-of-office.w80 span,.calendar-scheduler .schedule-table div.all-tentative.w80 span{transform:rotate(56deg) translate(13%,30%)}.calendar-scheduler .schedule-table div.all-busy.w90 span,.calendar-scheduler .schedule-table div.all-out-of-office.w90 span,.calendar-scheduler .schedule-table div.all-tentative.w90 span{transform:rotate(59deg) translate(16%,30%)}.calendar-scheduler .schedule-table div.all-busy.w100 span,.calendar-scheduler .schedule-table div.all-out-of-office.w100 span,.calendar-scheduler .schedule-table div.all-tentative.w100 span{transform:rotate(62deg) translate(19%,30%)}.calendar-scheduler .schedule-table div.all-tentative span{background:#5151fb}.calendar-scheduler .schedule-table div.all-out-of-office span{background:#fa8e36}#schedule-event-time{position:absolute;border-radius:.3rem;cursor:move;border:2px solid #444;background-color:rgba(0,0,0,.3)}.resources-dialog .resource-selection{flex:4;min-width:300px}.resources-dialog .resource-content{flex:10;margin-left:1em}.resources-dialog .listing li.resource>a{color:#4f4f4f}.resources-dialog .listing li.resource>a:before{content:"\f1b2"}.resources-dialog .slot-nav{display:none}#resource-availability{height:100%}#resource-availability .fc{height:100%;overflow:hidden;position:relative;border-bottom:1px solid #ddd}#resource-availability .fc-view{border-left:1px solid #ddd}#resource-availability .fc-header-toolbar{height:0}.standalone-invitebox{margin:0 auto;max-width:500px;width:95%;display:flex;flex-direction:column;top:15vh;position:relative}.standalone-invitebox #logo{max-height:90px}.standalone-invitebox .invitebox{margin-top:3em!important}@media screen and (min-width:769px){.searchbar a.button.date{display:none}}#rcmfd_alarmvalue{max-width:80px}@media screen and (max-width:768px){#agendaoptions{padding-top:.5rem}.calendar-scheduler .schedule-range{width:100%}#layout-sidebar .calendar-datepicker{display:none}.resources-dialog .resource-content{display:none;margin:0}.resources-dialog .resource-content ul{margin:1em 1em 0 1em}#resource-availability{margin:0 1em}}body.task-calendar .header-title{position:relative}body.task-calendar .header-title .tz{position:absolute;bottom:0;left:0;width:100%;line-height:2;font-size:.8rem;font-weight:400;color:#7b7b77}.listing.iconized li.activesync>a:before{content:"\f143"}#devices-table td:not(.selection){display:flex}#devices-table td:not(.selection):before{content:"\f143"}#devices-table td:not(.selection) span{overflow:hidden;text-overflow:ellipsis}#devices-table .devicealias{flex:1}#devices-table .devicetype{max-width:40%;font-style:italic;padding-left:.5em}.listing.iconized li.delegation>a:before{content:"\f21b"}#delegate-table td:before{content:"\f21b"}a.btn.fromcloud:before,a.button.filesaveall:before,a.button.saveas:before,li>a.icon.saveas:before{content:"\f07b"}.menu a.mount.storage:before{content:"\f1c0"}.menu a.open:before{content:"\f06e"}.menu a.cancel:before{content:"\f00d"}.menu a.share:before{content:"\f1e0"}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder{order:-1}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder:before{content:"\f067"}.folderlist li.collection a.name{padding-left:.5em}.folderlist li.collection.audio a.name:before{content:"\f028";font-weight:900}.folderlist li.collection.video a.name:before{content:"\f03d";font-weight:900}.folderlist li.collection.image a.name:before{content:"\f03e"}.folderlist li.collection.document a.name:before{content:"\f02d";font-weight:900}.folderlist li.collection.sessions a.name:before{content:"\f0c0";font-weight:900}.folderlist li.mailbox a.subscription{cursor:pointer;padding:0!important;border-left:0;width:auto}.folderlist li.mailbox a.subscription:before{content:"\f02e";font-weight:400;height:auto;color:#f4c200;margin-right:.25rem}.folderlist li.mailbox a.subscription.subscribed:before{content:"\f02e";font-weight:900}#filelistcontainer{position:relative}#filesuploadform{position:absolute!important}#filelistbox{height:100%}#filelistbox.droptarget.active{box-shadow:0 0 2px 1px #cec3b5 inset}#filelistbox.droptarget.hover{box-shadow:0 0 2px 1px #cec3b5 inset;background-color:#f7f5f2}.filelist thead{display:none}.filelist td.options{display:none}.filelist td.name{position:relative}.filelist td.mtime{width:11em}.filelist td.size{text-align:right;width:6em}.filelist tr.session>td.name{padding-right:2em}.filelist tr.session>td.name:after{content:"\f0c0";color:#d4dbde;position:absolute;right:.25em;top:0}.filelist tr.session.invited>td.name:after{color:#41b849}.filelist tr.session.owner>td.name:after{color:#161b1d}@media screen and (max-width:480px){.filelist td.mtime{display:none}}.filelist tbody td.filename span{background:0 0!important}.filelist tbody td.filename span:before{content:"\f15b";font-weight:400}.filelist tbody td.filename.application_pdf span:before,.filelist tbody td.filename.pdf span:before{content:"\f1c1"}.filelist tbody td.filename.application_msword span:before,.filelist tbody td.filename.application_vnd_ms_word span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_wordprocessingml_document span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_wordprocessingml_template span:before{content:"\f1c2"}.filelist tbody td.filename.application_vnd_ms_excel span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_spreadsheet span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_spreadsheet_template span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_spreadsheetml_sheet span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_spreadsheetml_template span:before{content:"\f1c3"}.filelist tbody td.filename.application_vnd_ms_powerpoint span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_presentation span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_slideshow span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_template span:before{content:"\f1c4"}.filelist tbody td.filename.application_vnd_oasis_opendocument_text span:before{content:"\f15c"}.filelist tbody td.filename.application_vnd_oasis_opendocument_presentation span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_presentation_template span:before{content:"\f1c4"}.filelist tbody td.filename.application_x_7z_compressed span:before,.filelist tbody td.filename.application_x_ace span:before,.filelist tbody td.filename.application_x_arc span:before,.filelist tbody td.filename.application_x_arj span:before,.filelist tbody td.filename.application_x_bzip_compressed_tar span:before,.filelist tbody td.filename.application_x_lha span:before,.filelist tbody td.filename.application_x_rar span:before,.filelist tbody td.filename.application_x_tarz span:before,.filelist tbody td.filename.application_x_tzo span:before,.filelist tbody td.filename.application_x_zip span:before,.filelist tbody td.filename.application_x_zoo span:before,.filelist tbody td.filename.application_zip span:before,.filelist tbody td.filename.tar span:before{content:"\f1c6"}.filelist tbody td.filename.application_vnd_stardivision_draw span:before,.filelist tbody td.filename.application_vnd_sun_xml_draw span:before,.filelist tbody td.filename.application_vnd_sun_xml_draw_template span:before,.filelist tbody td.filename.image span:before,.filelist tbody td.filename.image_jpeg span:before,.filelist tbody td.filename.image_jpeg2000 span:before,.filelist tbody td.filename.image_png span:before,.filelist tbody td.filename.image_svg_xml span:before,.filelist tbody td.filename.image_x_eps span:before{content:"\f1c5"}.filelist tbody td.filename.audio span:before{content:"\f1c7"}.filelist tbody td.filename.video span:before{content:"\f1c8"}.filelist tbody td.filename.ascii span:before,.filelist tbody td.filename.text_plain span:before{content:"\f15c"}.filelist tbody td.filename.text_html span:before{content:"\f1c9"}#folder-mount-form td.source{display:flex;align-items:flex-start;padding:.5rem}#folder-mount-form td.source.selected{background-color:#fdf6d9}#folder-mount-form td.source>input{height:32px;margin-right:.5rem}#folder-mount-form td.source>div{flex:1}#folder-mount-form td.source img{height:32px;margin-right:.5rem}#folder-mount-form td.source .name{font-weight:700}#folder-mount-form td.source .description{font-size:90%}#folder-mount-form td.source table{margin-top:.5rem}#folder-mount-form td.source .form-group{margin-bottom:0}#folder-mount-form .auth-options{margin-top:.5rem}#folder-mount-form .auth-options>label:before{line-height:1}.files-dialog .selection-list{flex:1;min-width:220px}.files-dialog .selection-content{flex:2}@media screen and (min-width:769px){.files-dialog .selection-content{border:1px solid #d4dbde;border-left:0}}.files-dialog a.subscription{display:none}@media screen and (max-width:768px){.files-dialog .selection-list{display:none}}.document-editor-header .toolbar{text-align:left!important;flex:1}.document-editor-header .toolbar a{text-align:center}.document-editor-header a.button.icon.members:before{content:"\f0c0"}.document-editor-header #collaborators{order:9;display:flex;margin-right:.5rem;margin-left:2rem}.document-editor-header #collaborators a.button.add:before{content:"\f067"}.document-editor-header #collaborators .inner{display:none}.document-editor-header #doc-title{flex:1;order:8}.document-editor-header #doc-title input{display:inline}.session-members img.photo{width:48px;height:48px;min-width:48px;overflow:hidden;background:url("../../../skins/kolab/images/contactpic.png") center center no-repeat #fff;background-size:cover;border-radius:50%;border:solid 3px #eee;margin-left:.5rem}.session-members ul{padding:0;margin:0;list-style-type:none}.session-members ul li{display:flex;align-items:center}.session-members ul img.photo{margin-left:0;margin-right:1em}.editors-dialog table th{border:0}.editors-dialog table tr:last-child td{border-bottom:1px solid #d4dbde}.editors-dialog table td.options{width:1%}.editors-dialog table td.options a.delete:before{content:"\f2ed";display:inline;line-height:1}.editors-dialog label{display:block}button.participant.add:before{content:"\f234"}.iframe-wrapper.file-type-audio,.iframe-wrapper.file-type-video{display:flex;align-items:center;justify-content:center}@media screen and (min-width:769px){.iframe-wrapper.file-type-audio,.iframe-wrapper.file-type-video{padding:1em}}#shareform table td,#shareform table th{padding-left:.15rem;max-width:10vw;overflow:hidden;text-overflow:ellipsis}#shareform table td:last-child,#shareform table th:last-child{padding-right:.15rem;width:1%;max-width:unset}#shareform table td{vertical-align:middle}#shareform table td.form input{margin-bottom:.25rem;width:100%}#shareform table tr+tr>td{border-top:0;padding-bottom:.25rem}#shareform table button{padding:.185rem .75rem;width:100%}.menu a.appendnote:before{content:"\f249"}#noteform iframe{min-height:10rem}#notereferences{margin-top:.5rem}#notereferences .attachmentslist a.delete{margin-left:.5rem}#notedetailstitle .dates{color:#7b7b77}#print-layout #notetitle{font-size:1.5rem;line-height:2}#print-layout #notetags{margin-bottom:.5rem}#print-layout #notecreated{margin-right:2rem}#kolabnoteslist tr{display:flex}#kolabnoteslist td.title{overflow:hidden;text-overflow:ellipsis;flex:1}#kolabnoteslist td.title:before{content:"\f249";font-weight:400}#kolabnoteslist td.date{overflow:unset;color:#7b7b77;font-style:italic}.kolabmessagenotes>i.icon:before{content:"\f249"!important;font-weight:400!important}.kolabmessagenotes>a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;text-decoration:none}.menu a.tags:before{content:"\f02c"}.menu a.tag.remove.all:before,.menu a.tag.remove:before,.menu a.tag:before{content:"\f02b"}#taglist li{padding:0 .5rem}#taglist li:before{content:"\f02b";margin:0 .5rem 0 .2rem}#tag-selector li a:before,#taglist li:before,#tagsform option:before{color:#a88500}#tag-selector li:hover a:before,#tagsform option:checked:before{color:#fff}#tagsform{min-height:15rem}#tagsform select{padding:0;margin-bottom:.5rem}#tagsform option{padding:.5rem;outline:0;border:0}#tagsform option:before{content:"\f02b";line-height:1}#tagsform .buttons{text-align:center}#tagsform .buttons button{margin:0 .25rem}.tagbox{color:#fff;background-color:#f4c200!important;border:0!important;border-radius:.25rem;max-width:4em;padding:.1rem .4rem;margin-right:.2rem}.tagbox:not(.tagedit-listelement) a{color:inherit;padding-left:.5rem;text-decoration:none}h2>.tagbox{font-size:1.2rem}.tag-droppable.formcontainer.ui-droppable-active{background-color:#f8f7f4!important}.tag-droppable.formcontainer.ui-droppable-hover{background-color:#ffc!important}.invitebox>i.icon{position:absolute;top:0;padding-top:.5em}.invitebox>span{padding-left:2.5em}.invitebox td{padding:2px;vertical-align:top}.invitebox td.ititle{font-weight:700;padding-right:.5em}.invitebox td.label{color:#666;padding-right:1em}.invitebox td.recurrence-id{text-transform:uppercase;font-style:italic}.invitebox td.date.modified{font-weight:700;color:#ff5552}.invitebox td em{font-weight:700}.invitebox .itip-buttons{display:flex;flex-wrap:wrap}.invitebox .itip-buttons input.button{margin:0 .25rem .25rem 0}.invitebox .rsvp-buttons{width:100%;padding-top:.25rem}.invitebox .itip-reply-controls{margin-top:.25rem;width:100%;line-height:2}.invitebox .itip-reply-controls>label{display:inline}.invitebox .itip-reply-controls>label label{line-height:1;margin-right:.25rem}.invitebox .itip-reply-controls a{margin-left:1em;white-space:nowrap}.invitebox .rsvp-status{margin:.5rem 0;width:100%}.invitebox .rsvp-status.hint{color:#666;font-style:italic}.invitebox .folder-select{white-space:nowrap}.invitebox .folder-select select{display:initial;width:auto}.rsvp-status:before{line-height:1.1;color:#4d5f66;float:none;display:inline}.rsvp-status.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";line-height:1}.rsvp-status.declined:before{content:"\f05e";color:#ff5552}.rsvp-status.tentative:before{content:"\f058";color:#ffd452}.rsvp-status.accepted:before{content:"\f058";color:#41b849}.rsvp-status.delegated:before{content:"\f064"}.rsvp-status.needs-action:before{content:"\f059"}.attendee:before{content:"\f059";display:inline;float:none;font-size:1em;color:#7b7b77}.attendee.req-participant:before{content:"\f007"}.attendee.opt-participant:before{content:"\f007";font-weight:400}.attendee.non-participant:before{content:"\f007";color:#ccc}.attendee.chair:before{content:"\f007";color:#ffd452}.attendee.accepted:before,.attendee.completed:before{content:"\f058";color:#41b849}.attendee.declined:before{content:"\f05e";color:#ff5552}.attendee.tentative:before{content:"\f058";color:#ffd452}.attendee.delegated:before{content:"\f064"}.attendee.organizer:before{content:"\f0b1"}.attendee.in-process:before{content:"\f013"}.attendees-comentbox label{display:inline}.edit-attendees-table{width:100%}.edit-attendees-table td,.edit-attendees-table th{width:1%;text-align:center}.edit-attendees-table td{border:0;padding:0 .3rem}.edit-attendees-table th{border-bottom:1px solid #eee!important}.edit-attendees-table td.name,.edit-attendees-table td.role,.edit-attendees-table th.name,.edit-attendees-table th.role{width:auto;text-align:left}.edit-attendees-table th.invite input{display:none}.edit-attendees-table th.invite label{cursor:pointer}.edit-attendees-table th.invite label:before{content:"\f0e0";display:inline;float:none;line-height:1}.edit-attendees-table td.invite .custom-switch{margin-top:.15rem}.edit-attendees-table td.name span{line-height:2.5;display:flex}.edit-attendees-table td.name span>:first-child{overflow:hidden;text-overflow:ellipsis;flex:1;width:1px;white-space:nowrap}.edit-attendees-table td.availability span,.edit-attendees-table td.confirmstate span{margin:0}.edit-attendees-table td.availability span:after,.edit-attendees-table td.availability span:before,.edit-attendees-table td.confirmstate span:after,.edit-attendees-table td.confirmstate span:before{line-height:2;margin:0;font-size:1.2em;height:2em;width:2em}.edit-attendees-table td.options a{display:inline-block;height:2em}.edit-attendees-table td.options a:before{line-height:1.8;margin:0}.edit-attendees-table a.expandlink:before{content:"\f0fe";line-height:2}.edit-attendees-table .inner{display:none}html.layout-phone .edit-attendees-table th.availability,html.layout-phone .edit-attendees-table th.confirmstate{text-indent:-5000px}html.layout-phone .edit-attendees-table td.role{max-width:7em}html.layout-phone .edit-attendees-table select{padding-left:.5rem}.form-searchbar{display:flex;margin-bottom:.5rem}.form-searchbar inputtype=text{flex:1}html.layout-phone .form-searchbar inputtype=text{max-width:50%}.form-searchbar inputtype=button{margin-left:.5em;overflow:hidden;text-overflow:ellipsis}.attachmentslist li.ics:before,.attachmentslist li.text.calendar:before,.messagelist tbody .attachment span.ical:before{content:"\f073";font-weight:400}.alarms-input .edit-alarm-item{display:flex}.alarms-input .edit-alarm-item+.edit-alarm-item{margin-top:.25rem}.alarms-input .edit-alarm-item.first .delete-alarm,.alarms-input .edit-alarm-item:not(.first) .add-alarm{display:none}.alarms-input .edit-alarm-buttons a{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.alarms-input .edit-alarm-buttons a:before{margin:0;width:1em}.alarms-input .edit-alarm-buttons a:focus{box-shadow:none}.alarms-input .edit-alarm-buttons a.add:before{content:"\f067"}.alarms-input .edit-alarm-buttons .inner{display:none}.alarms-input .edit-alarm-type{flex:1;border-top-right-radius:0;border-bottom-right-radius:0}.alarms-input .edit-alarm-type:focus{z-index:2}.alarms-input .edit-alarm-set{display:flex;flex:1}.alarms-input .edit-alarm-values{flex:5}.alarms-input .edit-alarm-values .form-control{border-radius:0}.alarms-input .edit-alarm-values :first-child{border-left:0}.alarms-input .edit-alarm-offset{flex:5}.alarms-input .edit-alarm-date,.alarms-input .edit-alarm-related,.alarms-input .edit-alarm-time{flex:3}.recurrence-form .recurrence-rdates{width:100%;padding:0;list-style-type:none}.recurrence-form .recurrence-rdates:empty{margin:0}.recurrence-form .recurrence-rdates a.delete{margin-left:2em}.recurrence-form .recurrence-rdates a.delete:before{display:inline-block;float:none}.recurrence-form .recurrence-rdates .inner{display:none}.recurrence-form .recurrence-onevery select{width:40%;display:inline}.recurrence-form .inputform{display:flex}.recurrence-form .inputform input.button{margin-left:.25rem}.recurrence-form div.line{width:100%;display:flex;margin-bottom:.25rem}.recurrence-form div.line label{margin-left:.5em;min-width:4em;line-height:2.5}.recurrence-form .month,.recurrence-form .monthday,.recurrence-form .weekday{display:inline-block;width:3.5em;margin-right:.5rem;white-space:nowrap}.recurrence-form .month input,.recurrence-form .monthday input,.recurrence-form .weekday input{margin-right:.25rem}.recurrence-form .monthday{width:2.75em}.recurrence-form .table td{border:0;padding:0}.recurrence-form .table td.label{white-space:nowrap}.recurrence-form .table td:first-child label{line-height:2.5}.recurrence-form .table td label.monthday:first-child{margin-top:.5rem}.recurrence-form .input-group-append,.recurrence-form .input-group-prepend{display:initial}#event-status-badge{width:7rem;height:7rem;position:absolute;top:0;right:0;overflow:hidden}#event-status-badge span{display:none;text-transform:uppercase;line-height:20px;position:absolute;left:-2.4rem;top:2.4rem;width:13.2rem;text-align:center;font-weight:700;font-size:.85rem;color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#event-status-badge span:before{display:inline;float:none}.status-cancelled #event-status-badge span{background-color:#ff231f;display:block}.status-cancelled #event-status-badge span:before{content:"\f057"}#alarm-display h3{font-size:1.2rem;margin-bottom:.25rem}#alarm-display h3:before{content:"\f073";font-weight:400;font-size:1em}#alarm-display h3.type-task:before{content:"\f274";font-weight:400}#alarm-display .event-section{font-size:.9rem;color:#7b7b77;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#alarm-display .alarm-actions{text-align:right;margin-bottom:.25rem}#alarm-display .alarm-actions a:first-child{margin-right:1em}#alarm-display .alarm-actions a:before{display:inline;float:none}#alarm-display a.alarm-action-snooze:before{content:"\f1f6"}#alarm-display a.alarm-action-dismiss:before{content:"\f2ed"}#alarm-snooze-dropdown a:before{content:"\f017";font-weight:400}.dialog-message{margin:0;opacity:.95;width:100%;padding:.75em;margin-top:.25em;color:#4f4f4f;background-color:rgba(255,212,82,.2)}.dialog-message>label{margin:0;display:block}.dialog-message>label label:before{line-height:1.25;margin-right:.25rem}.dialog-message .message{display:flex}.dialog-message+.savemode{margin-top:1rem}.dialog-message+.savemode a.btn{margin-right:.5rem}.dialog-message>.savemode{margin-top:.5rem}.dialog-message>.savemode label{margin-right:1rem}.dialog-message>.savemode input{margin-right:.25rem}@media screen and (max-width:420px){.nav-link.nav-icon{width:3em;margin-right:5px;padding:.5rem .5rem .5rem .65rem}.nav-link.nav-icon:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin:0 1rem 0 0;width:1em;line-height:1.2}.nav-link.nav-icon.resources:before{content:"\f1b2";margin-left:.1rem}.nav-link.nav-icon.attachments:before{content:"\f0c6"}.nav-link.nav-icon.attendees:before{content:"\f0c0"}}.menu a.taskaddlink:before,.menu a.tasklist:before,.menu a.tasklistlink:before{content:"\f274"}.tasklist-invitebox>i.icon:before{content:"\f274"!important}.listing li>div.tasklist .listname:before{content:"\f274"}#tasklist li.taskitem{border-bottom:0}#tasklist li.taskitem div.taskhead{position:relative;display:block;height:3.8rem;padding-left:1.5em;outline:0}#tasklist li.taskitem div.taskhead.flagged{color:#ff5552!important}#tasklist li.taskitem div.taskhead.selected{background-color:#fdf6d9}#tasklist li.taskitem div.taskhead.droptarget{background-color:#ffc}#tasklist li.taskitem div.taskhead.complete span.title{color:rgba(79,79,79,.5)}#tasklist li.taskitem div.taskhead.complete .progressbar{display:none}#tasklist li.taskitem>div,#tasklist li.taskitem>span{border-bottom:1px solid #f8f7f4}#tasklist li.taskitem ul{padding:0;border:0}#tasklist li.taskitem ul li{padding-left:0}#tasklist li.taskitem ul li .taskhead,#tasklist li.taskitem ul li .title{padding-left:3.25em}#tasklist li.taskitem ul li .childtoggle{left:1.5em}#tasklist li.taskitem ul li li .taskhead,#tasklist li.taskitem ul li li .title{padding-left:4.75em}#tasklist li.taskitem ul li li .childtoggle{left:3em}#tasklist li.taskitem ul li li li .taskhead,#tasklist li.taskitem ul li li li .title{padding-left:6.25em}#tasklist li.taskitem ul li li li .childtoggle{left:4.5em}#tasklist li.taskitem ul li li li li .taskhead,#tasklist li.taskitem ul li li li li .title{padding-left:7.75em}#tasklist li.taskitem ul li li li li .childtoggle{left:6em}#tasklist li.taskitem ul li li li li li .taskhead,#tasklist li.taskitem ul li li li li li .title{padding-left:9.25em}#tasklist li.taskitem ul li li li li li .childtoggle{left:7.5em}#tasklist .childtoggle{position:absolute;left:0;top:0;width:1.5em;padding:0 0 0 .25rem;height:3.8rem;cursor:pointer;z-index:1}#tasklist .childtoggle .inner{display:none}#tasklist .childtoggle:before{content:"\f105";margin:0;width:1em;line-height:3.8rem}#tasklist .childtoggle.expanded:before{content:"\f107"}#tasklist .childtoggle.collapsed:before{content:"\f105"}#tasklist span.title{position:absolute;left:0;right:0;bottom:0;line-height:2em;padding:0 0 0 .2em;padding-left:1.75em;margin-right:2em;overflow:hidden;text-overflow:ellipsis}#tasklist span.tags{position:absolute;right:2em;top:0;line-height:2em;text-align:right}#tasklist span.date{position:absolute;padding-left:.2em;font-size:90%;line-height:2.5;color:#7b7b77;cursor:pointer}#tasklist span.date input{line-height:1;padding:0;margin-top:-2px}#tasklist span.flagged{position:absolute;right:0;top:0;line-height:1.8em;cursor:pointer}#tasklist .taskhead:not(.flagged):hover span.flagged:before{content:"\f024";font-weight:400}#tasklist .taskhead.flagged span.flagged:before{content:"\f024"}#tasklist .progressbar{position:absolute;bottom:1px;left:.2em;right:.2em}#tasklist .progressbar .progressvalue{border-top:2px solid #ffd452}#tasklist .custom-switch{position:absolute;top:1.4rem;z-index:1;height:2.3em}#tasklist .actions{display:none}@media screen and (min-width:1200px){#tasklist .taskhead{border-left:2px solid transparent}#tasklist .taskhead.focused{border-left:2px solid #ffdd5b;outline:0}}html.touch #tasklist li{font-size:1rem}html.touch #tasklist .custom-switch,html.touch #tasklist inputtype=checkbox,html.touch #tasklist span.flagged{display:none}html.touch #tasklist span.title{margin-right:.5rem}html.touch #tasklist span.tags{right:.5rem}#taskshow+.formbuttons button.disabled{display:none}#taskshow .task-parent-title{color:#7b7b77;font-size:90%;margin-bottom:.5rem}#taskshow .task-title{font-size:1.5rem;font-weight:700}#taskshow .task-description{margin:1rem 0}#taskshow.status-completed h2{color:rgba(79,79,79,.5)}#taskshow.status-flagged h2:before{content:"\f024";color:#ff5552;font-size:.9em}#taskshow .attachmentslist li{margin-right:1em}#taskedit-attachment-form{position:absolute}.messagetasklinks>i.icon:before{content:"\f274"!important}.messagetasklinks .tasklist{list-style-type:none;margin:0;padding:0}.messagetasklinks .tasklist li{display:flex;align-items:center}.messagetasklinks input{height:auto!important}#print-layout #tasklist{padding:0}#print-layout #tasklist li{list-style-type:none}#print-layout #tasklist .description{display:block;white-space:pre-wrap}#print-layout #tasklist .title{position:relative;font-weight:700;padding:0;margin:0}#print-layout #tasklist .taskhead{height:auto}.taskitem-draghelper{overflow:hidden;text-overflow:ellipsis}@media screen and (max-height:750px) and (min-width:769px){html.dark-mode #taskmenu a{width:41px}}html.dark-mode .watermark{background-color:#21292c;background-blend-mode:soft-light}html.dark-mode .watermark:before{background:0 0}html.dark-mode #filelistcontainer,html.dark-mode .fc-scroller{scrollbar-width:thin}html.dark-mode .fc .fc-header-toolbar{background-color:#374549}html.dark-mode .fc #timezone-display,html.dark-mode .fc .fc-center h2{color:#c5d1d3}html.dark-mode .filelist tr.session.owner>td.name::after,html.dark-mode .resources-dialog .listing li.resource>a,html.dark-mode .rsvp-status:not(.accepted):not(.tentative):not(.declined)::before{color:#c5d1d3}html.dark-mode #tasklist li.taskitem>div,html.dark-mode #tasklist li.taskitem>span,html.dark-mode .fc-unthemed .fc-content,html.dark-mode .fc-unthemed .fc-divider,html.dark-mode .fc-unthemed .fc-list-heading td,html.dark-mode .fc-unthemed .fc-list-view,html.dark-mode .fc-unthemed .fc-popover,html.dark-mode .fc-unthemed .fc-row,html.dark-mode .fc-unthemed td,html.dark-mode .fc-unthemed th{border-color:#2c373a}html.dark-mode .calendar-scheduler .attendees-list div.attendee,html.dark-mode .calendar-scheduler .schedule-table .timesheader,html.dark-mode .calendar-scheduler .schedule-table td.attendees .attendees-list,html.dark-mode .calendar-scheduler .schedule-table td.times td,html.dark-mode .fc-unthemed td,html.dark-mode .fc-unthemed th,html.dark-mode .files-dialog .selection-content{border-color:#4d6066}html.dark-mode #resource-availability .fc,html.dark-mode #resource-availability .fc-view{border-color:#4d6066}html.dark-mode .edit-attendees-table th,html.dark-mode .selection-dialog .form-addon,html.dark-mode .selection-dialog .header,html.dark-mode .selection-dialog .selection-list{border-color:#4d6066!important}html.dark-mode .selection-dialog .form-addon,html.dark-mode .selection-dialog .header,html.dark-mode .selection-dialog .listing ul{background-color:transparent}html.dark-mode #tasklist li.taskitem div.taskhead.selected,html.dark-mode .fc-unthemed .fc-divider,html.dark-mode .fc-unthemed .fc-list-heading td,html.dark-mode .fc-unthemed .fc-popover .fc-header,html.dark-mode .listing li.selected>div>*,html.dark-mode body.task-calendar .ui-datepicker-inline .ui-datepicker-activerange{color:#f4c200;background-color:#374549}html.dark-mode #folder-mount-form td.source.selected{background-color:#374549}html.dark-mode #tagsform option,html.dark-mode .tagedit-list li.tagedit-listelement-new input{color:#c5d1d3}html.dark-mode #kolabnoteslist td.date,html.dark-mode #notedetailstitle .dates,html.dark-mode #tasklist span.date,html.dark-mode .availability span,html.dark-mode .calendar-agenda-preview .event-row.current,html.dark-mode .fc .fc-axis,html.dark-mode .fc .fc-day-header,html.dark-mode .fc .fc-day-number,html.dark-mode .fc .fc-week-header,html.dark-mode .fc .fc-week-number,html.dark-mode .formcontent.text-only .faded *,html.dark-mode .invitebox .rsvp-status.hint,html.dark-mode .invitebox td.label{color:#8ba3a7}html.dark-mode .invitebox .folder-select select{background-color:#21292c}html.dark-mode .tagedit-listtabindex="-1"{border-color:#f4c200;box-shadow:0 0 0 .2rem rgba(244,194,0,.25);background:#2c373b}html.dark-mode #tasklist .progressbar .progressvalue{border-color:#997f31}html.dark-mode .listing li.readonly:not(.virtual)>div a:first-child:after,html.dark-mode .listing li>div.readonly a:first-child:after{color:#c5d1d3;background-color:#21292c}html.dark-mode .dialog-message{opacity:1;color:#c5d1d3;background-color:#997f31}
3
\ No newline at end of file
4
+#alarm-display .alarm-actions a:before,#alarm-display h3:before,#delegate-table td:before,#devices-table td:not(.selection):before,#event-status-badge span:before,#eventshow .event-partstat .changersvp:before,#kolabnoteslist td.title:before,#taglist li:before,#tagsform option:before,#tasklist .childtoggle:before,#tasklist .taskhead.flagged span.flagged:before,#tasklist .taskhead:not(.flagged):hover span.flagged:before,#taskshow.status-flagged h2:before,.attendee:before,.availability span:before,.calendar-scheduler .schedule-buttons .next-slot:after,.document-editor-header #collaborators a.button.add:before,.edit-attendees-table th.invite label:before,.editors-dialog table td.options a.delete:before,.fc .fc-time i:before,.fc button.next:before,.fc button.prev:before,.filelist tbody td.filename span:before,.filelist tr.session>td.name:after,.folderlist li.mailbox a.subscription.subscribed:before,.listing li.readonly:not(.virtual)>div a:first-child:after,.listing li>div span.subscribed:before,.listing li>div.calendar .calname:before,.listing li>div.folder .listname:before,.listing li>div.readonly a:first-child:after,.listing li>div.tasklist .listname:before,.resources-dialog .listing li.resource>a:before,.rsvp-status.accepted:before,.rsvp-status.declined:before,.rsvp-status.delegated:before,.rsvp-status.loading:before,.rsvp-status.needs-action:before,.rsvp-status.tentative:before,a.btn.fromcloud:before,a.button.filesaveall:before,a.button.saveas:before,fieldset.categories .input-group a.button.create:before,li>a.icon.saveas:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}@media screen and (min-width:1200px){.listing li>div>a{border-left:2px solid transparent}.listing li>div>a:focus{border-left:2px solid #ffdd5b;outline:0}}.listing li>div{display:flex}.listing li>div>a:first-child{overflow:hidden;text-overflow:ellipsis;position:relative;flex-grow:1}.listing li>div>a:first-child+input{position:initial}.listing li>div .custom-switch{position:relative}.listing li>div.folder .listname:before{content:"\f249";margin-right:.5rem}.listing li>div span.actions{display:flex}input+.listing li>div span.actions{padding-right:2em}.listing li>div span.actions a{padding:0;margin:0;margin-right:.2rem;cursor:pointer}.listing li>div span.actions a:before{margin:0}.listing li>div span.actions a.remove{display:none}html.touch .listing li>div span.actions{padding-left:.2rem}html.touch .listing li>div span.actions a{margin-right:.5rem}.listing li>div a.quickview:before{content:"\f06e";opacity:.2;color:#f4c200}.listing li>div a.quickview:after{display:none!important}.listing li>div.focusview a.quickview:before{content:"\f06e";opacity:1}.listing li>div .subscribed{cursor:pointer;padding:0!important;border-left:0;width:auto}.listing li>div .subscribed:before{content:"\f02e";font-weight:400;height:auto;color:#f4c200;margin-right:.25rem}.listing li>div span.subscribed:before{content:"\f02e";font-weight:400}.listing li>div.subscribed .subscribed:before{content:"\f02e";font-weight:900}.listing li.selected>div>*{color:#4f4f4f;background-color:#fdf6d9}.listing li.readonly:not(.virtual)>div a:first-child:after,.listing li>div.readonly a:first-child:after{content:"\f023";position:absolute;left:2.25rem;top:17.5px;font-size:.9em!important;width:.9em;line-height:1;height:1em!important;background-color:#fff;border-radius:50% 50% 0 0;color:#4f4f4f;opacity:.9}html.touch .listing li.readonly:not(.virtual)>div a:first-child:after,html.touch .listing li>div.readonly a:first-child:after{top:23.5px;left:2.7rem}.listing li.other.user>div a:first-child:before,.listing li>div.other.user>.listname:before{content:"\f007";font-weight:900}.listing li.virtual.user>div a:first-child:after,.listing li>div.virtual.user>.listname:after{display:none}.listing li.virtual.shared>div a:first-child:before,.listing li>div.virtual.shared>.listname:before{content:"\f1e0";font-weight:900}.listing li.virtual.shared>div a:first-child:after,.listing li>div.virtual.shared>.listname:after{display:none}.listing li.virtual>div>a{opacity:.5}.listing.treelist:not(.notree)>li>div>a{padding-left:1.5em}.listing li.droptarget>div{background-color:#ffc}.listing li .count{position:absolute;top:0;right:0;min-width:2em;line-height:1.4rem;margin:7.7px;padding:0 .3em;border-radius:.4em;background:#7b7b77;color:#fff;text-align:center;font-weight:700}html.touch .listing li .count{line-height:2rem;margin:9.5px}.treelist ul li a:first-child:after{margin-left:1.7em!important}.treelist ul li li a:first-child:after{margin-left:3.4em!important}.treelist ul li li li a:first-child:after{margin-left:5.1em!important}.treelist ul li li li li a:first-child:after{margin-left:6.8em!important}.treelist ul li li li li li a:first-child:after{margin-left:8.5em!important}.treelist ul li li li li li li a:first-child:after{margin-left:10.2em!important}.treelist.notree li a:first-child:after{left:1.3rem!important}.searchresults .boxtitle{line-height:2rem!important;font-size:80%;padding:0 .5rem;margin:0;color:#7b7b77;background-color:#f8f7f4;text-align:center;border-bottom:1px solid #d4dbde}.folderlist li.mailbox.type-event>a:before{content:"\f133";font-weight:900}.folderlist li.mailbox.type-task>a:before{content:"\f274";font-weight:900}.folderlist li.mailbox.type-journal>a:before{content:"\f133";font-weight:400}.folderlist li.mailbox.type-contact>a:before{content:"\f2b9";font-weight:400}.folderlist li.mailbox.type-note>a:before{content:"\f249";font-weight:400}.folderlist li.mailbox.type-configuration>a:before{content:"\f013";font-weight:900}.folderlist li.mailbox.type-freebusy>a:before{content:"\f133";font-weight:400}.folderlist li.mailbox.type-file>a:before{content:"\f07b";font-weight:900}.menu li.search{padding:.25rem .5rem}.menu a.history:before{content:"\f1da"}button.btn.save.notify:before{content:"\f0e0"}button.btn.print:before{content:"\f02f"}.watermark{background:url("../../../../skins/kolab/images/logo.svg") center no-repeat #fff;background-size:30%;background-blend-mode:luminosity;width:100%;height:100%}.watermark>*{display:none}.watermark:before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,.85)}.watermark.formcontainer{background:0 0!important}.watermark.formcontainer:before{display:none}.watermark.formcontainer>*{display:block}html.layout-phone .watermark.formcontainer,html.layout-small .watermark.formcontainer{overflow-y:auto!important}.form-group>.datetime{display:flex;white-space:nowrap}.form-group>.datetime input{width:10em}.form-group>.datetime input:first-child{margin-right:.5rem;width:15em}.form-group>.datetime a{margin-left:1em;text-align:right;flex:1;line-height:2.4}.form-section.form-group.form-check{display:flex;padding:0}.form-section.form-group.form-check label{order:10}.formcontent.text-only .faded *{color:#7b7b77}.linkslist{border:0!important;background:0 0!important}.linkslist li.link{padding:0}.linkslist li.link.message.eml:before{content:"\f0e0"}.linkslist li.link a.messagelink{overflow:hidden;text-overflow:ellipsis}.linkslist li.link a.delete .inner{display:none}.print-config{position:fixed;top:0;left:0;width:100%;z-index:10000;padding:.5em 1em;background-color:#f8f7f4}.print-config button.print{margin-right:1rem}.print-config .prop{line-height:2;margin-left:.5rem;display:inline-block;vertical-align:middle}.print-config .prop label{margin:0}@media print{.print-config{display:none}}.print-config+.print-content{position:relative;top:0;left:0;height:auto;margin:5em auto 0 auto;overflow:visible}.selection-dialog .ui-dialog-content{display:flex!important;overflow:hidden!important}.selection-dialog .selection-list{display:flex;flex-direction:column;border:1px solid #d4dbde;justify-content:center}.selection-dialog .ui-dialog-content .popupmenu{display:flex!important;width:100%}.selection-dialog .scroller{flex:1;overflow-y:auto}.selection-dialog .header{border-bottom:1px solid #d4dbde;display:flex;background-color:#f1eeea;font-size:1rem;font-weight:700;line-height:58px;height:58px;min-height:58px;padding:0 .25em;position:relative;overflow:hidden;white-space:nowrap}.selection-dialog .header a.button{color:#7b7b77;margin:0 .3rem}.selection-dialog .header a.button:before{margin:0}.selection-dialog .header-title{width:100%;text-align:center;margin:0 2em}.selection-dialog .selection-content{display:flex;flex-direction:column}.selection-dialog .tab-content{margin-top:1rem;height:100%;overflow-y:auto}.selection-dialog .form-addon{margin:0;padding:.5rem 0;width:100%;background-color:#f8f7f4;border-top:1px solid #d4dbde}.selection-dialog .listing ul{background-color:#fff}.selection-dialog .listing li.selected{color:#4f4f4f}@media screen and (max-width:768px){.selection-dialog .ui-dialog-content{padding:0!important}.selection-dialog .ui-dialog-titlebar{display:none;margin:0}.selection-dialog .selection-list{border:0}.selection-dialog .selection-content .header-title,.selection-dialog .selection-list .header-title{margin-left:0}.selection-dialog .header a:before{font-size:1.75rem}}@media screen and (max-height:750px) and (min-width:769px){#layout-menu,#layout-menu .popover-header img{width:42px}#taskmenu a{height:42px;width:42px;font-size:1.2rem!important}#taskmenu .special-buttons{width:42px}#taskmenu span.inner{display:none}}.menu a.calendarlink:before{content:"\f073"}.menu a.send:before{content:"\f1d8"}.listing.iconized li.resource>i:before{content:"\f1b2"}a.button.today:before{content:"\f133";font-weight:400}a.button.date:before{content:"\f073";font-weight:400}.listing li>div.calendar .calname:before{content:"\f073"}.listing li>div.calendar .actions{padding-right:.25rem}.listing li>div.calendar .actions :last-child{margin-right:0}.listing li>div.calendar.cal---invitation--declined .calname:before,.listing li>div.calendar.cal---invitation--pending .calname:before{content:"\f073";font-weight:400}.listing li>div.calendar.cal-__bdays__ .calname:before{content:"\f1fd"}.listing li>div.calendar.cal---invitation--declined,.listing li>div.calendar.cal---invitation--pending,.listing li>div.calendar.cal-__bdays__{font-style:italic}.listing li>div.calendar.cal---invitation--declined a.calname,.listing li>div.calendar.cal---invitation--pending a.calname,.listing li>div.calendar.cal-__bdays__ a.calname{padding-right:2.5em}.listing li>div.calendar.cal---invitation--declined .count,.listing li>div.calendar.cal---invitation--pending .count,.listing li>div.calendar.cal-__bdays__ .count{right:4.2em;font-style:normal}.listing li span.handle{display:none}#calendarcategories .input-group:not(:last-child){margin-bottom:.25rem}fieldset.categories .input-group .minicolors-input{border-radius:0}fieldset.categories .input-group .minicolors+.input-group-append{margin-left:0}fieldset.categories .input-group a.button.create:before{content:"\f067";line-height:1}.calendar-invitebox>i.icon:before{content:"\f133"!important}.calendar-agenda-preview{display:none;margin-top:.5rem;border-top:1px solid #ddd}.calendar-agenda-preview h3{margin-top:.5rem}.calendar-agenda-preview .event-row{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-agenda-preview .event-row.current{color:#333;font-weight:700}.calendar-agenda-preview .event-row.no-event{font-style:italic}.calendar-agenda-preview .event-row.fc-invitation-needs-action{color:#7b7b77}.calendar-agenda-preview .event-row.fc-invitation-needs-action .event-title{font-style:italic}.calendar-agenda-preview .event-title{padding-left:.5rem}#calendar.content{overflow:hidden!important;position:relative}.calendar-datepicker .ui-datepicker{margin:0!important;border:0;border-radius:0;width:auto;min-width:auto!important;font-size:.9rem;background-color:#f8f7f4}.calendar-datepicker .ui-datepicker table{margin:0}.calendar-datepicker .ui-datepicker td a{font-size:.9rem!important}.calendar-datepicker .ui-datepicker-header{background-color:#f8f7f4;border-top:1px solid #d4dbde}.ui-dialog .calendar-datepicker .ui-datepicker{background:0 0}.ui-dialog .calendar-datepicker .ui-datepicker-header{background:0 0;border:0}.ui-dialog .calendar-datepicker td a{line-height:3em!important;font-size:1rem!important}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}body .fc{font-size:1em}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-default{background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-button-group{display:inline-block}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-popover .fc-header .fc-close{cursor:pointer}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc-bg{bottom:0}.fc-bg table{height:100%}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}adata-goto{cursor:pointer}adata-goto:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover{color:#fff;text-decoration:none}.fc-event.fc-draggable,.fc-eventhref{cursor:pointer}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4}.fc-event .fc-resizer{display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}.fc-icon{display:inline-block;height:1em;line-height:1em;font-size:1em;text-align:center;overflow:hidden;font-family:"Courier New",Courier,monospace;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\2039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\D7";font-size:200%;top:6%}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.ui-widget .fc-disabled-day{background-image:none}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.ui-widget .fc-event{color:#fff;text-decoration:none;font-weight:400}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-toolbar{text-align:center}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px 0}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number{text-align:center}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{position:relative;z-index:3}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight-container{position:relative}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event{overflow:hidden}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\A0-\A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt{float:right}.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title ahref:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee}body.quickview-active .fc .fc-scroller{background:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20576%20512%22%3E%3Cpath%20fill%3D%22%23f2f2f2%22%20d%3D%22M569.354%20231.631C512.969%20135.949%20407.81%2072%20288%2072%20168.14%2072%2063.004%20135.994%206.646%20231.631a47.999%2047.999%200%200%200%200%2048.739C63.031%20376.051%20168.19%20440%20288%20440c119.86%200%20224.996-63.994%20281.354-159.631a47.997%2047.997%200%200%200%200-48.738zM288%20392c-75.162%200-136-60.827-136-136%200-75.162%2060.826-136%20136-136%2075.162%200%20136%2060.826%20136%20136%200%2075.162-60.826%20136-136%20136zm104-136c0%2057.438-46.562%20104-104%20104s-104-46.562-104-104c0-17.708%204.431-34.379%2012.236-48.973l-.001.032c0%2023.651%2019.173%2042.823%2042.824%2042.823s42.824-19.173%2042.824-42.823c0-23.651-19.173-42.824-42.824-42.824l-.032.001C253.621%20156.431%20270.292%20152%20288%20152c57.438%200%20104%2046.562%20104%20104z%22%2F%3E%3C%2Fsvg%3E") center no-repeat;background-size:50%}.fc .fc-header-toolbar{display:flex;background-color:#f8f7f4;margin:0}.fc .fc-header-toolbar>*>*{float:none;margin:0}.fc .fc-left{order:1}.fc .fc-left .fc-button-group{display:none}.fc .fc-center{flex:1;order:2;text-align:center;padding:.25rem}.fc .fc-center h2{margin:0;color:#7b7b77;white-space:nowrap;font-size:1.25rem;font-weight:700}.fc .fc-right{order:3;text-align:right}.fc .fc-right .fc-button{display:none}.fc button{height:unset;padding:.3rem .75rem}.fc button.prev:before{content:"\f104";margin:0!important;line-height:1}.fc button.next:before{content:"\f105";margin:0!important;line-height:1}.fc .btn-group{padding:.5rem;margin:0}.fc .fc-type-freebusy{opacity:.6}.fc .fc-type-freebusy .fc-title{position:absolute;top:-5000px}.fc .fc-type-freebusy td{color:#999}.fc .fc-event-dot{background-color:#c00}.fc a.fc-event,.fc a.fc-event:hover{color:#fff}.fc .fc-event{font-size:13px;background-color:#c00;border-color:#c00}.fc .fc-event .fc-title{font-weight:700}.fc .fc-event .fc-bg{opacity:.15;margin-top:1.1rem}.fc .fc-event.fc-invitation-declined,.fc .fc-event.fc-invitation-needs-action,.fc .fc-event.fc-invitation-tentative{border:1px dashed #999}.fc .fc-event.fc-event-ns-other.fc-invitation-declined{opacity:.7}.fc .fc-event.fc-event-ns-other.fc-invitation-declined .fc-title{text-decoration:line-through}.fc .fc-event.fc-invitation-tentative .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAOuJAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-event.fc-invitation-needs-action .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAFdXx////yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-event.fc-invitation-declined .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAMwAAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-list-view tr.fc-invitation-declined,.fc .fc-list-view tr.fc-invitation-needs-action,.fc .fc-list-view tr.fc-invitation-tentative{color:#888}.fc .fc-list-view tr.fc-invitation-declined .fc-event-dot,.fc .fc-list-view tr.fc-invitation-needs-action .fc-event-dot,.fc .fc-list-view tr.fc-invitation-tentative .fc-event-dot{background-color:#888}.fc .cal-event-status-cancelled,.fc .fc-declined,.fc .fc-needs-action{opacity:.6}.fc .fc-time i{display:inline-block;width:1em;height:1em;margin-left:.25rem}.fc .fc-time i:before{font-size:1em;line-height:1;margin-top:.1rem}.fc .fc-time i.fc-icon-recurring:before{content:"\f24d";font-weight:400}.fc .fc-time i.fc-icon-alarms:before{content:"\f0f3"}.fc .fc-event-temp{opacity:.4}.fc .fc-nonbusiness{background-color:rgba(123,123,119,.2)}.fc .fc-day.fc-today{background:rgba(255,212,82,.2)!important}.fc .fc-now-indicator{border-color:#41b849;border-width:1.5px}.fc .fc-list-item,.fc .fc-list-item:hover td{background:0 0}.fc .fc-list-item a,.fc .fc-list-item td{cursor:default}.fc .fc-list-item-title{font-weight:700}.fc .fc-list-table td{padding:.5rem}.fc .fc-list-heading td{background:rgba(123,123,119,.1)}.fc .fc-list-empty{display:none}.fc .fc-more{color:#f4c200!important;white-space:nowrap}.fc .fc-axis,.fc .fc-day-header,.fc .fc-day-number,.fc .fc-week-header,.fc .fc-week-number{color:#7b7b77;font-size:.95rem;padding:.15rem!important}.fc .fc-week-number{text-align:center}.fc .fc-popover{border-radius:.3rem}.fc .fc-popover .fc-header{color:#7b7b77;font-size:.95rem;font-weight:700}.fc .fc-popover .fc-icon-x::after{top:3px}.fc .fc-view.fc-widget-content,.fc td.fc-head-container{border-left-width:0}.fc .fc-body .fc-bg .fc-widget-content,.fc .fc-body .fc-bg-sceleton .fc-widget-content,.fc .fc-body>tr>.fc-widget-content,.fc .fc-list-view{border-bottom-width:0}.print-content .fc .fc-header-toolbar{background-color:#fff}.print-content .fc .fc-center h2{color:#000;padding-bottom:.75rem;font-size:1.5rem!important}.print-content .fc .fc-day.fc-today{background:0 0!important}.print-content .fc a.fc-event{color:#000;background-color:#fff!important}.print-content .fc .fc-event-description{white-space:pre-wrap;font-size:90%}.print-content .fc .fc-event-location{width:20%}.print-content .fc .fc-event-row-secondary td{border:0;padding-top:0!important}.print-content .fc .fc-scroller{overflow:visible!important;height:auto!important}.print-content .fc .fc-view.fc-widget-content,.print-content .fc td.fc-head-container{border-left-width:1px}.print-content .fc .fc-agenda-view,.print-content .fc .fc-list-view,.print-content .fc .fc-month-view{border-bottom:1px solid #ddd}@media screen and (max-width:768px){.fc .fc-left{display:block;width:100%;padding:0}.fc .fc-left button{flex:1 1 auto;border-radius:0}.fc .fc-left .btn-group{padding:0;display:flex}.fc .fc-center,.fc .fc-list-table .fc-event-location,.fc .fc-right{display:none}}@media screen and (min-width:769px) and (max-width:920px){.fc .fc-center{overflow:hidden;text-overflow:ellipsis;flex:1}.fc .fc-center h2{font-size:1rem;line-height:1;padding-top:.45rem}.fc .fc-left .btn,.fc .fc-right .btn{padding-left:.5rem;padding-right:.5rem}}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar{-webkit-appearance:none}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar:vertical,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar:vertical,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar:vertical{width:.6rem}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar:horizontal,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar:horizontal,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar:horizontal{height:.6rem}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar-thumb,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar-thumb,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.4);border-radius:.3rem;border:2px solid #fff}body.task-calendar #print-layout #calendar-view-selector{float:right;padding-top:.25rem}body.task-calendar #print-layout #calendarlist{margin-top:1rem}body.task-calendar #print-layout #calendarlist,body.task-calendar #print-layout #calendarlist ul{list-style:none;padding:0}body.task-calendar #print-layout #calendarlist li{display:inline-block;white-space:nowrap}body.task-calendar #print-layout #calendarlist div,body.task-calendar #print-layout #calendarlist li,body.task-calendar #print-layout #calendarlist ul{float:left}body.task-calendar #print-layout #calendarlist div{margin-right:2rem}body.task-calendar #print-layout #calendarlist a{text-decoration:none;cursor:auto}body.task-calendar #print-layout #calendarlist input,body.task-calendar #print-layout #calendarlist span.actions,body.task-calendar #print-layout #calendarlist span.handle{display:none}@media screen and (min-width:769px){body.task-calendar #layout-sidebar{flex:2;max-width:400px;min-width:240px}}body.task-calendar .ui-datepicker td{width:12.5%}body.task-calendar .ui-datepicker .ui-datepicker-week-col{color:#d4dbde;text-align:center}body.task-calendar .ui-datepicker-inline .ui-datepicker-week-col{color:#f4c200;cursor:pointer}body.task-calendar .ui-datepicker-inline .ui-datepicker-activerange{background-color:#fdf6d9}#timezone-display{font-size:.9rem;color:#7b7b77}#agendaoptions{padding:0 .5rem .5rem .5rem;display:flex;background-color:#f8f7f4}#agendaoptions .input-group{padding-right:.5rem;flex-wrap:nowrap}#agendaoptions .input-group:last-child{padding-right:0}#agendaoptions select{min-width:7em}#agendaoptions .input-group-prepend{overflow:hidden;margin-bottom:0}#agendaoptions .input-group-prepend span{display:block;overflow:hidden;text-overflow:ellipsis}#eventshow{margin:0}#eventshow .event-title{font-size:1.5rem;font-weight:700}#eventshow .event-location{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#eventshow .event-description{margin:1rem 0}#eventshow .event-attendees{margin-bottom:1rem}#eventshow .event-attendees .attendee{margin-right:.25rem}#eventshow .event-partstat>span{display:flex}#eventshow .event-partstat .rsvp-status:before{display:inline;float:none}#eventshow .event-partstat .changersvp{cursor:pointer;font-size:1.2rem;margin-left:1em}#eventshow .event-partstat .changersvp:before{content:"\f14b";float:none;display:inline;line-height:1}#eventshow .event-partstat .inner{display:none}#eventedit .edit-attendees-table td{padding-top:.15rem}#eventedit .edit-attendees-table td.role{padding-left:0;width:9em}#fish-eye-view{padding:0}@media screen and (min-width:769px){#fish-eye-view{border-bottom:1px solid #d4dbde}}.availability span{margin-right:.5rem;color:#7b7b77}.availability span:before{content:"\f0c8";display:inline;float:none}.availability span.legend:before{font-size:1em}.availability span.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";display:block;line-height:1}.availability span.unknown:before{color:#bbb}.availability span.free:before{color:#41b849}.availability span.busy:before{color:#ff5552}.availability span.tentative:before{color:#8383fc}.availability span.out-of-office:before{color:#fbaa68}.datetime .custom-switch{padding-left:.5rem}.datetime .custom-switch label{line-height:2;margin-top:.2rem}.datetime input{width:10em!important}@media screen and (max-width:420px){.datetime input{width:8em!important}.datetime input+input{width:6em!important}}.calendar-scheduler .nav{align-items:center}.calendar-scheduler .nav button:first-child{margin-right:.25rem}.calendar-scheduler .nav>div{white-space:nowrap}@media screen and (max-width:420px){.calendar-scheduler .nav button{padding-left:.5rem;padding-right:.5rem}}.calendar-scheduler .schedule-buttons .prev-slot:before{content:"\f053"}.calendar-scheduler .schedule-buttons .next-slot:after{content:"\f054";display:inline-block;float:none;margin-right:0}.calendar-scheduler .schedule-options{flex:1;margin-left:1rem}html.layout-phone .calendar-scheduler .schedule-options{order:100;margin-left:0}.calendar-scheduler .schedule-nav{flex:1;margin-left:.3rem;text-align:right}.calendar-scheduler .schedule-nav button{line-height:1.8}.calendar-scheduler .schedule-range{width:60%;margin-top:2rem}html.layout-phone .calendar-scheduler .schedule-range{margin:0}.calendar-scheduler .schedule-legend .attendee{margin-right:.5rem}.calendar-scheduler .attendees-list{position:relative}.calendar-scheduler .attendees-list a.attendee-role-toggle{position:absolute;left:0;display:inline-block;width:1em;cursor:pointer}.calendar-scheduler .attendees-list div.attendee{border-top:1px solid #f8f7f4;line-height:1.7rem;height:1.8rem}.calendar-scheduler .attendees-list .attendee{white-space:nowrap}.calendar-scheduler .attendees-list .attendee.spacer{height:10px}.calendar-scheduler .attendees-list .attendee.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";font-weight:900}.calendar-scheduler .attendees-list .attendee.total{font-weight:700}.calendar-scheduler .attendees-list .attendee.spacer:before,.calendar-scheduler .attendees-list .attendee.total:before{display:none}.calendar-scheduler .schedule-table{table-layout:fixed}.calendar-scheduler .schedule-table th{border-top:0}.calendar-scheduler .schedule-table td.attendees{width:25%;overflow:hidden;border-top:0}html.layout-phone .calendar-scheduler .schedule-table td.attendees{width:35%}.calendar-scheduler .schedule-table td.attendees .attendees-list{border-bottom:1px solid #d4dbde}.calendar-scheduler .schedule-table td.times{width:auto;border-top:0}.calendar-scheduler .schedule-table td.times table{margin:0}.calendar-scheduler .schedule-table td.times td{height:1.8rem;border-top:1px solid #f8f7f4;white-space:nowrap}.calendar-scheduler .schedule-table div.scroll{position:relative;overflow:auto}.calendar-scheduler .schedule-table .timesheader{height:1.4rem;border-top:1px solid #d4dbde}.calendar-scheduler .schedule-table .boxtitle{margin:0;padding:0;font-size:1rem;font-weight:700;padding-top:.5rem;line-height:2}.calendar-scheduler .schedule-table td{padding:4px}.calendar-scheduler .schedule-table tbody td{padding:0}.calendar-scheduler .schedule-table tbody td div{height:100%}.calendar-scheduler .schedule-table tr.spacer td{padding:0;height:10px}.calendar-scheduler .schedule-table tr.dates thcolspan="1"{min-width:48px;max-width:48px;text-align:center;font-size:.7rem;line-height:2.9}.calendar-scheduler .schedule-table tr.times td{cursor:pointer;min-width:48px;max-width:48px;font-size:.7rem;text-align:center;color:#f4c200;height:1.4rem;padding:0 .1rem;vertical-align:middle;border-top:1px solid #d4dbde;border-left:1px solid #f8f7f4}.calendar-scheduler .schedule-table .fbcontent td{border-left:1px solid #f8f7f4}.calendar-scheduler .schedule-table .fbcontent:last-child td{border-bottom:1px solid #d4dbde}.calendar-scheduler .schedule-table div.unknown{background-color:#bbb}.calendar-scheduler .schedule-table div.free{background-color:#41b849}.calendar-scheduler .schedule-table div.busy{background-color:#ff5552}.calendar-scheduler .schedule-table div.tentative{background-color:#8383fc}.calendar-scheduler .schedule-table div.out-of-office{background-color:#fbaa68}.calendar-scheduler .schedule-table div.all-busy,.calendar-scheduler .schedule-table div.all-out-of-office,.calendar-scheduler .schedule-table div.all-tentative{overflow:hidden}.calendar-scheduler .schedule-table div.all-busy span,.calendar-scheduler .schedule-table div.all-out-of-office span,.calendar-scheduler .schedule-table div.all-tentative span{display:block;width:300%;height:300%;border:1px solid #fff;background:#ff231f;transform:rotate(42deg) translate(2%)}.calendar-scheduler .schedule-table div.all-busy.w10 span,.calendar-scheduler .schedule-table div.all-out-of-office.w10 span,.calendar-scheduler .schedule-table div.all-tentative.w10 span{display:none}.calendar-scheduler .schedule-table div.all-busy.w20 span,.calendar-scheduler .schedule-table div.all-busy.w25 span,.calendar-scheduler .schedule-table div.all-out-of-office.w20 span,.calendar-scheduler .schedule-table div.all-out-of-office.w25 span,.calendar-scheduler .schedule-table div.all-tentative.w20 span,.calendar-scheduler .schedule-table div.all-tentative.w25 span{transform:rotate(17deg) translate(-9%)}.calendar-scheduler .schedule-table div.all-busy.w30 span,.calendar-scheduler .schedule-table div.all-out-of-office.w30 span,.calendar-scheduler .schedule-table div.all-tentative.w30 span{transform:rotate(28deg) translate(-7%)}.calendar-scheduler .schedule-table div.all-busy.w33 span,.calendar-scheduler .schedule-table div.all-out-of-office.w33 span,.calendar-scheduler .schedule-table div.all-tentative.w33 span{transform:rotate(32deg) translate(-5%)}.calendar-scheduler .schedule-table div.all-busy.w40 span,.calendar-scheduler .schedule-table div.all-out-of-office.w40 span,.calendar-scheduler .schedule-table div.all-tentative.w40 span{transform:rotate(36deg) translate(-3%)}.calendar-scheduler .schedule-table div.all-busy.w60 span,.calendar-scheduler .schedule-table div.all-out-of-office.w60 span,.calendar-scheduler .schedule-table div.all-tentative.w60 span{transform:rotate(48deg) translate(6%)}.calendar-scheduler .schedule-table div.all-busy.w67 span,.calendar-scheduler .schedule-table div.all-out-of-office.w67 span,.calendar-scheduler .schedule-table div.all-tentative.w67 span{transform:rotate(52deg) translate(9%)}.calendar-scheduler .schedule-table div.all-busy.w70 span,.calendar-scheduler .schedule-table div.all-busy.w75 span,.calendar-scheduler .schedule-table div.all-out-of-office.w70 span,.calendar-scheduler .schedule-table div.all-out-of-office.w75 span,.calendar-scheduler .schedule-table div.all-tentative.w70 span,.calendar-scheduler .schedule-table div.all-tentative.w75 span{transform:rotate(55deg) translate(12%,30%)}.calendar-scheduler .schedule-table div.all-busy.w80 span,.calendar-scheduler .schedule-table div.all-out-of-office.w80 span,.calendar-scheduler .schedule-table div.all-tentative.w80 span{transform:rotate(56deg) translate(13%,30%)}.calendar-scheduler .schedule-table div.all-busy.w90 span,.calendar-scheduler .schedule-table div.all-out-of-office.w90 span,.calendar-scheduler .schedule-table div.all-tentative.w90 span{transform:rotate(59deg) translate(16%,30%)}.calendar-scheduler .schedule-table div.all-busy.w100 span,.calendar-scheduler .schedule-table div.all-out-of-office.w100 span,.calendar-scheduler .schedule-table div.all-tentative.w100 span{transform:rotate(62deg) translate(19%,30%)}.calendar-scheduler .schedule-table div.all-tentative span{background:#5151fb}.calendar-scheduler .schedule-table div.all-out-of-office span{background:#fa8e36}#schedule-event-time{position:absolute;border-radius:.3rem;cursor:move;border:2px solid #444;background-color:rgba(0,0,0,.3)}.resources-dialog .resource-selection{flex:4;min-width:300px}.resources-dialog .resource-content{flex:10;margin-left:1em}.resources-dialog .listing li.resource>a{color:#4f4f4f}.resources-dialog .listing li.resource>a:before{content:"\f1b2"}.resources-dialog .slot-nav{display:none}#resource-availability{height:100%}#resource-availability .fc{height:100%;overflow:hidden;position:relative;border-bottom:1px solid #ddd}#resource-availability .fc-view{border-left:1px solid #ddd}#resource-availability .fc-header-toolbar{height:0}.standalone-invitebox{margin:0 auto;max-width:500px;width:95%;display:flex;flex-direction:column;top:15vh;position:relative}.standalone-invitebox #logo{max-height:90px}.standalone-invitebox .invitebox{margin-top:3em!important}@media screen and (min-width:769px){.searchbar a.button.date{display:none}}#rcmfd_alarmvalue{max-width:80px}@media screen and (max-width:768px){#agendaoptions{padding-top:.5rem}.calendar-scheduler .schedule-range{width:100%}#layout-sidebar .calendar-datepicker{display:none}.resources-dialog .resource-content{display:none;margin:0}.resources-dialog .resource-content ul{margin:1em 1em 0 1em}#resource-availability{margin:0 1em}}body.task-calendar .header-title{position:relative}body.task-calendar .header-title .tz{position:absolute;bottom:0;left:0;width:100%;line-height:2;font-size:.8rem;font-weight:400;color:#7b7b77}.listing.iconized li.activesync>a:before{content:"\f143"}#devices-table td:not(.selection){display:flex}#devices-table td:not(.selection):before{content:"\f143"}#devices-table td:not(.selection) span{overflow:hidden;text-overflow:ellipsis}#devices-table .devicealias{flex:1}#devices-table .devicetype{max-width:40%;font-style:italic;padding-left:.5em}.listing.iconized li.delegation>a:before{content:"\f21b"}#delegate-table td:before{content:"\f21b"}a.btn.fromcloud:before,a.button.filesaveall:before,a.button.saveas:before,li>a.icon.saveas:before{content:"\f07b"}.menu a.mount.storage:before{content:"\f1c0"}.menu a.open:before{content:"\f06e"}.menu a.cancel:before{content:"\f00d"}.menu a.share:before{content:"\f1e0"}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder{order:-1}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder:before{content:"\f067"}.folderlist li.collection a.name{padding-left:.5em}.folderlist li.collection.audio a.name:before{content:"\f028";font-weight:900}.folderlist li.collection.video a.name:before{content:"\f03d";font-weight:900}.folderlist li.collection.image a.name:before{content:"\f03e"}.folderlist li.collection.document a.name:before{content:"\f02d";font-weight:900}.folderlist li.collection.sessions a.name:before{content:"\f0c0";font-weight:900}.folderlist li.mailbox a.subscription{cursor:pointer;padding:0!important;border-left:0;width:auto}.folderlist li.mailbox a.subscription:before{content:"\f02e";font-weight:400;height:auto;color:#f4c200;margin-right:.25rem}.folderlist li.mailbox a.subscription.subscribed:before{content:"\f02e";font-weight:900}#filelistcontainer{position:relative}#filesuploadform{position:absolute!important}#filelistbox{height:100%}#filelistbox.droptarget.active{box-shadow:0 0 2px 1px #cec3b5 inset}#filelistbox.droptarget.hover{box-shadow:0 0 2px 1px #cec3b5 inset;background-color:#f7f5f2}.filelist thead{display:none}.filelist td.options{display:none}.filelist td.name{position:relative}.filelist td.mtime{width:11em}.filelist td.size{text-align:right;width:6em}.filelist tr.session>td.name{padding-right:2em}.filelist tr.session>td.name:after{content:"\f0c0";color:#d4dbde;position:absolute;right:.25em;top:0}.filelist tr.session.invited>td.name:after{color:#41b849}.filelist tr.session.owner>td.name:after{color:#161b1d}@media screen and (max-width:480px){.filelist td.mtime{display:none}}.filelist tbody td.filename span{background:0 0!important}.filelist tbody td.filename span:before{content:"\f15b";font-weight:400}.filelist tbody td.filename.application_pdf span:before,.filelist tbody td.filename.pdf span:before{content:"\f1c1"}.filelist tbody td.filename.application_msword span:before,.filelist tbody td.filename.application_vnd_ms_word span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_wordprocessingml_document span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_wordprocessingml_template span:before{content:"\f1c2"}.filelist tbody td.filename.application_vnd_ms_excel span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_spreadsheet span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_spreadsheet_template span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_spreadsheetml_sheet span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_spreadsheetml_template span:before{content:"\f1c3"}.filelist tbody td.filename.application_vnd_ms_powerpoint span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_presentation span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_slideshow span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_template span:before{content:"\f1c4"}.filelist tbody td.filename.application_vnd_oasis_opendocument_text span:before{content:"\f15c"}.filelist tbody td.filename.application_vnd_oasis_opendocument_presentation span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_presentation_template span:before{content:"\f1c4"}.filelist tbody td.filename.application_x_7z_compressed span:before,.filelist tbody td.filename.application_x_ace span:before,.filelist tbody td.filename.application_x_arc span:before,.filelist tbody td.filename.application_x_arj span:before,.filelist tbody td.filename.application_x_bzip_compressed_tar span:before,.filelist tbody td.filename.application_x_lha span:before,.filelist tbody td.filename.application_x_rar span:before,.filelist tbody td.filename.application_x_tarz span:before,.filelist tbody td.filename.application_x_tzo span:before,.filelist tbody td.filename.application_x_zip span:before,.filelist tbody td.filename.application_x_zoo span:before,.filelist tbody td.filename.application_zip span:before,.filelist tbody td.filename.tar span:before{content:"\f1c6"}.filelist tbody td.filename.application_vnd_stardivision_draw span:before,.filelist tbody td.filename.application_vnd_sun_xml_draw span:before,.filelist tbody td.filename.application_vnd_sun_xml_draw_template span:before,.filelist tbody td.filename.image span:before,.filelist tbody td.filename.image_jpeg span:before,.filelist tbody td.filename.image_jpeg2000 span:before,.filelist tbody td.filename.image_png span:before,.filelist tbody td.filename.image_svg_xml span:before,.filelist tbody td.filename.image_x_eps span:before{content:"\f1c5"}.filelist tbody td.filename.audio span:before{content:"\f1c7"}.filelist tbody td.filename.video span:before{content:"\f1c8"}.filelist tbody td.filename.ascii span:before,.filelist tbody td.filename.text_plain span:before{content:"\f15c"}.filelist tbody td.filename.text_html span:before{content:"\f1c9"}#folder-mount-form td.source{display:flex;align-items:flex-start;padding:.5rem}#folder-mount-form td.source.selected{background-color:#fdf6d9}#folder-mount-form td.source>input{height:32px;margin-right:.5rem}#folder-mount-form td.source>div{flex:1}#folder-mount-form td.source img{height:32px;margin-right:.5rem}#folder-mount-form td.source .name{font-weight:700}#folder-mount-form td.source .description{font-size:90%}#folder-mount-form td.source table{margin-top:.5rem}#folder-mount-form td.source .form-group{margin-bottom:0}#folder-mount-form .auth-options{margin-top:.5rem}#folder-mount-form .auth-options>label:before{line-height:1}.files-dialog .selection-list{flex:1;min-width:220px}.files-dialog .selection-content{flex:2}@media screen and (min-width:769px){.files-dialog .selection-content{border:1px solid #d4dbde;border-left:0}}.files-dialog a.subscription{display:none}@media screen and (max-width:768px){.files-dialog .selection-list{display:none}}.document-editor-header .toolbar{text-align:left!important;flex:1}.document-editor-header .toolbar a{text-align:center}.document-editor-header a.button.icon.members:before{content:"\f0c0"}.document-editor-header #collaborators{order:9;display:flex;margin-right:.5rem;margin-left:2rem}.document-editor-header #collaborators a.button.add:before{content:"\f067"}.document-editor-header #collaborators .inner{display:none}.document-editor-header #doc-title{flex:1;order:8}.document-editor-header #doc-title input{display:inline}.session-members img.photo{width:48px;height:48px;min-width:48px;overflow:hidden;background:url("../../../skins/kolab/images/contactpic.png") center center no-repeat #fff;background-size:cover;border-radius:50%;border:solid 3px #eee;margin-left:.5rem}.session-members ul{padding:0;margin:0;list-style-type:none}.session-members ul li{display:flex;align-items:center}.session-members ul img.photo{margin-left:0;margin-right:1em}.editors-dialog table th{border:0}.editors-dialog table tr:last-child td{border-bottom:1px solid #d4dbde}.editors-dialog table td.options{width:1%}.editors-dialog table td.options a.delete:before{content:"\f2ed";display:inline;line-height:1}.editors-dialog label{display:block}button.participant.add:before{content:"\f234"}.iframe-wrapper.file-type-audio,.iframe-wrapper.file-type-video{display:flex;align-items:center;justify-content:center}@media screen and (min-width:769px){.iframe-wrapper.file-type-audio,.iframe-wrapper.file-type-video{padding:1em}}#shareform table td,#shareform table th{padding-left:.15rem;max-width:10vw;overflow:hidden;text-overflow:ellipsis}#shareform table td:last-child,#shareform table th:last-child{padding-right:.15rem;width:1%;max-width:unset}#shareform table td{vertical-align:middle}#shareform table td.form input{margin-bottom:.25rem;width:100%}#shareform table tr+tr>td{border-top:0;padding-bottom:.25rem}#shareform table button{padding:.185rem .75rem;width:100%}.menu a.appendnote:before{content:"\f249"}#noteform iframe{min-height:10rem}#notereferences{margin-top:.5rem}#notereferences .attachmentslist a.delete{margin-left:.5rem}#notedetailstitle .dates{color:#7b7b77}#print-layout #notetitle{font-size:1.5rem;line-height:2}#print-layout #notetags{margin-bottom:.5rem}#print-layout #notecreated{margin-right:2rem}#kolabnoteslist tr{display:flex}#kolabnoteslist td.title{overflow:hidden;text-overflow:ellipsis;flex:1}#kolabnoteslist td.title:before{content:"\f249";font-weight:400}#kolabnoteslist td.date{overflow:unset;color:#7b7b77;font-style:italic}.kolabmessagenotes>i.icon:before{content:"\f249"!important;font-weight:400!important}.kolabmessagenotes>a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;text-decoration:none}.menu a.tags:before{content:"\f02c"}.menu a.tag.remove.all:before,.menu a.tag.remove:before,.menu a.tag:before{content:"\f02b"}#taglist li{padding:0 .5rem}#taglist li:before{content:"\f02b";margin:0 .5rem 0 .2rem}#tag-selector li a:before,#taglist li:before,#tagsform option:before{color:#a88500}#tag-selector li:hover a:before,#tagsform option:checked:before{color:#fff}#tagsform{min-height:15rem}#tagsform select{padding:0;margin-bottom:.5rem}#tagsform option{padding:.5rem;outline:0;border:0}#tagsform option:before{content:"\f02b";line-height:1}#tagsform .buttons{text-align:center}#tagsform .buttons button{margin:0 .25rem}.tagbox{color:#fff;background-color:#f4c200!important;border:0!important;border-radius:.25rem;max-width:4em;padding:.1rem .4rem;margin-right:.2rem;font-weight:700}.tagbox:not(.tagedit-listelement) a{color:inherit;padding-left:.5rem;text-decoration:none}h2>.tagbox{font-size:1.2rem}.tag-droppable.formcontainer.ui-droppable-active{background-color:#f8f7f4!important}.tag-droppable.formcontainer.ui-droppable-hover{background-color:#ffc!important}.invitebox>i.icon{position:absolute;top:0;padding-top:.5em}.invitebox>span{padding-left:2.5em}.invitebox td{padding:2px;vertical-align:top}.invitebox td.ititle{font-weight:700;padding-right:.5em}.invitebox td.label{color:#666;padding-right:1em}.invitebox td.recurrence-id{text-transform:uppercase;font-style:italic}.invitebox td.date.modified{font-weight:700;color:#ff5552}.invitebox td em{font-weight:700}.invitebox .itip-buttons{display:flex;flex-wrap:wrap}.invitebox .itip-buttons input.button{margin:0 .25rem .25rem 0}.invitebox .rsvp-buttons{width:100%;padding-top:.25rem}.invitebox .itip-reply-controls{margin-top:.25rem;width:100%;line-height:2}.invitebox .itip-reply-controls>label{display:inline}.invitebox .itip-reply-controls>label label{line-height:1;margin-right:.25rem}.invitebox .itip-reply-controls a{margin-left:1em;white-space:nowrap}.invitebox .rsvp-status{margin:.5rem 0;width:100%}.invitebox .rsvp-status.hint{color:#666;font-style:italic}.invitebox .folder-select{white-space:nowrap}.invitebox .folder-select select{display:initial;width:auto}.rsvp-status:before{line-height:1.1;color:#4d5f66;float:none;display:inline}.rsvp-status.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";line-height:1}.rsvp-status.declined:before{content:"\f05e";color:#ff5552}.rsvp-status.tentative:before{content:"\f058";color:#ffd452}.rsvp-status.accepted:before{content:"\f058";color:#41b849}.rsvp-status.delegated:before{content:"\f064"}.rsvp-status.needs-action:before{content:"\f059"}.attendee:before{content:"\f059";display:inline;float:none;font-size:1em;color:#7b7b77}.attendee.req-participant:before{content:"\f007"}.attendee.opt-participant:before{content:"\f007";font-weight:400}.attendee.non-participant:before{content:"\f007";color:#ccc}.attendee.chair:before{content:"\f007";color:#ffd452}.attendee.accepted:before,.attendee.completed:before{content:"\f058";color:#41b849}.attendee.declined:before{content:"\f05e";color:#ff5552}.attendee.tentative:before{content:"\f058";color:#ffd452}.attendee.delegated:before{content:"\f064"}.attendee.organizer:before{content:"\f0b1"}.attendee.in-process:before{content:"\f013"}.attendees-comentbox label{display:inline}.edit-attendees-table{width:100%}.edit-attendees-table td,.edit-attendees-table th{width:1%;text-align:center}.edit-attendees-table td{border:0;padding:0 .3rem}.edit-attendees-table th{border-bottom:1px solid #eee!important}.edit-attendees-table td.name,.edit-attendees-table td.role,.edit-attendees-table th.name,.edit-attendees-table th.role{width:auto;text-align:left}.edit-attendees-table th.invite input{display:none}.edit-attendees-table th.invite label{cursor:pointer}.edit-attendees-table th.invite label:before{content:"\f0e0";display:inline;float:none;line-height:1}.edit-attendees-table td.invite .custom-switch{margin-top:.15rem}.edit-attendees-table td.name span{line-height:2.5;display:flex}.edit-attendees-table td.name span>:first-child{overflow:hidden;text-overflow:ellipsis;flex:1;width:1px;white-space:nowrap}.edit-attendees-table td.availability span,.edit-attendees-table td.confirmstate span{margin:0}.edit-attendees-table td.availability span:after,.edit-attendees-table td.availability span:before,.edit-attendees-table td.confirmstate span:after,.edit-attendees-table td.confirmstate span:before{line-height:2;margin:0;font-size:1.2em;height:2em;width:2em}.edit-attendees-table td.options a{display:inline-block;height:2em}.edit-attendees-table td.options a:before{line-height:1.8;margin:0}.edit-attendees-table a.expandlink:before{content:"\f0fe";line-height:2}.edit-attendees-table .inner{display:none}html.layout-phone .edit-attendees-table th.availability,html.layout-phone .edit-attendees-table th.confirmstate{text-indent:-5000px}html.layout-phone .edit-attendees-table td.role{max-width:7em}html.layout-phone .edit-attendees-table select{padding-left:.5rem}.form-searchbar{display:flex;margin-bottom:.5rem}.form-searchbar inputtype=text{flex:1}html.layout-phone .form-searchbar inputtype=text{max-width:50%}.form-searchbar inputtype=button{margin-left:.5em;overflow:hidden;text-overflow:ellipsis}.attachmentslist li.ics:before,.attachmentslist li.text.calendar:before,.messagelist tbody .attachment span.ical:before{content:"\f073";font-weight:400}.alarms-input .edit-alarm-item{display:flex}.alarms-input .edit-alarm-item+.edit-alarm-item{margin-top:.25rem}.alarms-input .edit-alarm-item.first .delete-alarm,.alarms-input .edit-alarm-item:not(.first) .add-alarm{display:none}.alarms-input .edit-alarm-buttons a{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.alarms-input .edit-alarm-buttons a:before{margin:0;width:1em}.alarms-input .edit-alarm-buttons a:focus{box-shadow:none}.alarms-input .edit-alarm-buttons a.add:before{content:"\f067"}.alarms-input .edit-alarm-buttons .inner{display:none}.alarms-input .edit-alarm-type{flex:1;border-top-right-radius:0;border-bottom-right-radius:0}.alarms-input .edit-alarm-type:focus{z-index:2}.alarms-input .edit-alarm-set{display:flex;flex:1}.alarms-input .edit-alarm-values{flex:5}.alarms-input .edit-alarm-values .form-control{border-radius:0}.alarms-input .edit-alarm-values :first-child{border-left:0}.alarms-input .edit-alarm-offset{flex:5}.alarms-input .edit-alarm-date,.alarms-input .edit-alarm-related,.alarms-input .edit-alarm-time{flex:3}.recurrence-form .recurrence-rdates{width:100%;padding:0;list-style-type:none}.recurrence-form .recurrence-rdates:empty{margin:0}.recurrence-form .recurrence-rdates a.delete{margin-left:2em}.recurrence-form .recurrence-rdates a.delete:before{display:inline-block;float:none}.recurrence-form .recurrence-rdates .inner{display:none}.recurrence-form .recurrence-onevery select{width:40%;display:inline}.recurrence-form .inputform{display:flex}.recurrence-form .inputform input.button{margin-left:.25rem}.recurrence-form div.line{width:100%;display:flex;margin-bottom:.25rem}.recurrence-form div.line label{margin-left:.5em;min-width:4em;line-height:2.5}.recurrence-form .month,.recurrence-form .monthday,.recurrence-form .weekday{display:inline-block;width:3.5em;margin-right:.5rem;white-space:nowrap}.recurrence-form .month input,.recurrence-form .monthday input,.recurrence-form .weekday input{margin-right:.25rem}.recurrence-form .monthday{width:2.75em}.recurrence-form .table td{border:0;padding:0}.recurrence-form .table td.label{white-space:nowrap}.recurrence-form .table td:first-child label{line-height:2.5}.recurrence-form .table td label.monthday:first-child{margin-top:.5rem}.recurrence-form .input-group-append,.recurrence-form .input-group-prepend{display:initial}#event-status-badge{width:7rem;height:7rem;position:absolute;top:0;right:0;overflow:hidden}#event-status-badge span{display:none;text-transform:uppercase;line-height:20px;position:absolute;left:-2.4rem;top:2.4rem;width:13.2rem;text-align:center;font-weight:700;font-size:.85rem;color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#event-status-badge span:before{display:inline;float:none}.status-cancelled #event-status-badge span{background-color:#ff231f;display:block}.status-cancelled #event-status-badge span:before{content:"\f057"}#alarm-display h3{font-size:1.2rem;margin-bottom:.25rem}#alarm-display h3:before{content:"\f073";font-weight:400;font-size:1em}#alarm-display h3.type-task:before{content:"\f274";font-weight:400}#alarm-display .event-section{font-size:.9rem;color:#7b7b77;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#alarm-display .alarm-actions{text-align:right;margin-bottom:.25rem}#alarm-display .alarm-actions a:first-child{margin-right:1em}#alarm-display .alarm-actions a:before{display:inline;float:none}#alarm-display a.alarm-action-snooze:before{content:"\f1f6"}#alarm-display a.alarm-action-dismiss:before{content:"\f2ed"}#alarm-snooze-dropdown a:before{content:"\f017";font-weight:400}.dialog-message{margin:0;opacity:.95;width:100%;padding:.75em;margin-top:.25em;color:#4f4f4f;background-color:rgba(255,212,82,.2)}.dialog-message>label{margin:0;display:block}.dialog-message>label label:before{line-height:1.25;margin-right:.25rem}.dialog-message .message{display:flex}.dialog-message+.savemode{margin-top:1rem}.dialog-message+.savemode a.btn{margin-right:.5rem}.dialog-message>.savemode{margin-top:.5rem}.dialog-message>.savemode label{margin-right:1rem}.dialog-message>.savemode input{margin-right:.25rem}@media screen and (max-width:420px){.nav-link.nav-icon{width:3em;margin-right:5px;padding:.5rem .5rem .5rem .65rem}.nav-link.nav-icon:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin:0 1rem 0 0;width:1em;line-height:1.2}.nav-link.nav-icon.resources:before{content:"\f1b2";margin-left:.1rem}.nav-link.nav-icon.attachments:before{content:"\f0c6"}.nav-link.nav-icon.attendees:before{content:"\f0c0"}}.menu a.taskaddlink:before,.menu a.tasklist:before,.menu a.tasklistlink:before{content:"\f274"}.tasklist-invitebox>i.icon:before{content:"\f274"!important}.listing li>div.tasklist .listname:before{content:"\f274"}#tasklist li.taskitem{border-bottom:0}#tasklist li.taskitem div.taskhead{position:relative;display:block;height:3.8rem;padding-left:1.5em;outline:0}#tasklist li.taskitem div.taskhead.flagged{color:#ff5552!important}#tasklist li.taskitem div.taskhead.selected{background-color:#fdf6d9}#tasklist li.taskitem div.taskhead.droptarget{background-color:#ffc}#tasklist li.taskitem div.taskhead.complete span.title{color:rgba(79,79,79,.5)}#tasklist li.taskitem div.taskhead.complete .progressbar{display:none}#tasklist li.taskitem>div,#tasklist li.taskitem>span{border-bottom:1px solid #f8f7f4}#tasklist li.taskitem ul{padding:0;border:0}#tasklist li.taskitem ul li{padding-left:0}#tasklist li.taskitem ul li .taskhead,#tasklist li.taskitem ul li .title{padding-left:3.25em}#tasklist li.taskitem ul li .childtoggle{left:1.5em}#tasklist li.taskitem ul li li .taskhead,#tasklist li.taskitem ul li li .title{padding-left:4.75em}#tasklist li.taskitem ul li li .childtoggle{left:3em}#tasklist li.taskitem ul li li li .taskhead,#tasklist li.taskitem ul li li li .title{padding-left:6.25em}#tasklist li.taskitem ul li li li .childtoggle{left:4.5em}#tasklist li.taskitem ul li li li li .taskhead,#tasklist li.taskitem ul li li li li .title{padding-left:7.75em}#tasklist li.taskitem ul li li li li .childtoggle{left:6em}#tasklist li.taskitem ul li li li li li .taskhead,#tasklist li.taskitem ul li li li li li .title{padding-left:9.25em}#tasklist li.taskitem ul li li li li li .childtoggle{left:7.5em}#tasklist .childtoggle{position:absolute;left:0;top:0;width:1.5em;padding:0 0 0 .25rem;height:3.8rem;cursor:pointer;z-index:1}#tasklist .childtoggle .inner{display:none}#tasklist .childtoggle:before{content:"\f105";margin:0;width:1em;line-height:3.8rem}#tasklist .childtoggle.expanded:before{content:"\f107"}#tasklist .childtoggle.collapsed:before{content:"\f105"}#tasklist span.title{position:absolute;left:0;right:0;bottom:0;line-height:2em;padding:0 0 0 .2em;padding-left:1.75em;margin-right:2em;overflow:hidden;text-overflow:ellipsis}#tasklist span.tags{position:absolute;right:2em;top:0;line-height:2em;text-align:right}#tasklist span.date{position:absolute;padding-left:.2em;font-size:90%;line-height:2.5;color:#7b7b77;cursor:pointer}#tasklist span.date input{line-height:1;padding:0;margin-top:-2px}#tasklist span.flagged{position:absolute;right:0;top:0;line-height:1.8em;cursor:pointer}#tasklist .taskhead:not(.flagged):hover span.flagged:before{content:"\f024";font-weight:400}#tasklist .taskhead.flagged span.flagged:before{content:"\f024"}#tasklist .progressbar{position:absolute;bottom:1px;left:.2em;right:.2em}#tasklist .progressbar .progressvalue{border-top:2px solid #ffd452}#tasklist .custom-switch{position:absolute;top:1.4rem;z-index:1;height:2.3em}#tasklist .actions{display:none}@media screen and (min-width:1200px){#tasklist .taskhead{border-left:2px solid transparent}#tasklist .taskhead.focused{border-left:2px solid #ffdd5b;outline:0}}html.touch #tasklist li{font-size:1rem}html.touch #tasklist .custom-switch,html.touch #tasklist inputtype=checkbox,html.touch #tasklist span.flagged{display:none}html.touch #tasklist span.title{margin-right:.5rem}html.touch #tasklist span.tags{right:.5rem}#taskshow+.formbuttons button.disabled{display:none}#taskshow .task-parent-title{color:#7b7b77;font-size:90%;margin-bottom:.5rem}#taskshow .task-title{font-size:1.5rem;font-weight:700}#taskshow .task-description{margin:1rem 0}#taskshow.status-completed h2{color:rgba(79,79,79,.5)}#taskshow.status-flagged h2:before{content:"\f024";color:#ff5552;font-size:.9em}#taskshow .attachmentslist li{margin-right:1em}#taskedit-attachment-form{position:absolute}.messagetasklinks>i.icon:before{content:"\f274"!important}.messagetasklinks .tasklist{list-style-type:none;margin:0;padding:0}.messagetasklinks .tasklist li{display:flex;align-items:center}.messagetasklinks input{height:auto!important}#print-layout #tasklist{padding:0}#print-layout #tasklist li{list-style-type:none}#print-layout #tasklist .description{display:block;white-space:pre-wrap}#print-layout #tasklist .title{position:relative;font-weight:700;padding:0;margin:0}#print-layout #tasklist .taskhead{height:auto}.taskitem-draghelper{overflow:hidden;text-overflow:ellipsis}@media screen and (max-height:750px) and (min-width:769px){html.dark-mode #taskmenu a{width:41px}}html.dark-mode .watermark{background-color:#21292c;background-blend-mode:soft-light}html.dark-mode .watermark:before{background:0 0}html.dark-mode #filelistcontainer,html.dark-mode .fc-scroller{scrollbar-width:thin}html.dark-mode .fc .fc-header-toolbar{background-color:#374549}html.dark-mode .fc #timezone-display,html.dark-mode .fc .fc-center h2{color:#c5d1d3}html.dark-mode .filelist tr.session.owner>td.name::after,html.dark-mode .resources-dialog .listing li.resource>a,html.dark-mode .rsvp-status:not(.accepted):not(.tentative):not(.declined)::before{color:#c5d1d3}html.dark-mode #tasklist li.taskitem>div,html.dark-mode #tasklist li.taskitem>span,html.dark-mode .fc-unthemed .fc-content,html.dark-mode .fc-unthemed .fc-divider,html.dark-mode .fc-unthemed .fc-list-heading td,html.dark-mode .fc-unthemed .fc-list-view,html.dark-mode .fc-unthemed .fc-popover,html.dark-mode .fc-unthemed .fc-row,html.dark-mode .fc-unthemed td,html.dark-mode .fc-unthemed th{border-color:#2c373a}html.dark-mode .calendar-scheduler .attendees-list div.attendee,html.dark-mode .calendar-scheduler .schedule-table .timesheader,html.dark-mode .calendar-scheduler .schedule-table td.attendees .attendees-list,html.dark-mode .calendar-scheduler .schedule-table td.times td,html.dark-mode .fc-unthemed td,html.dark-mode .fc-unthemed th,html.dark-mode .files-dialog .selection-content{border-color:#4d6066}html.dark-mode #resource-availability .fc,html.dark-mode #resource-availability .fc-view{border-color:#4d6066}html.dark-mode .edit-attendees-table th,html.dark-mode .selection-dialog .form-addon,html.dark-mode .selection-dialog .header,html.dark-mode .selection-dialog .selection-list{border-color:#4d6066!important}html.dark-mode .selection-dialog .form-addon,html.dark-mode .selection-dialog .header,html.dark-mode .selection-dialog .listing ul{background-color:transparent}html.dark-mode #tasklist li.taskitem div.taskhead.selected,html.dark-mode .fc-unthemed .fc-divider,html.dark-mode .fc-unthemed .fc-list-heading td,html.dark-mode .fc-unthemed .fc-popover .fc-header,html.dark-mode .listing li.selected>div>*,html.dark-mode body.task-calendar .ui-datepicker-inline .ui-datepicker-activerange{color:#f4c200;background-color:#374549}html.dark-mode #folder-mount-form td.source.selected{background-color:#374549}html.dark-mode #tagsform option,html.dark-mode .tagedit-list li.tagedit-listelement-new input{color:#c5d1d3}html.dark-mode #kolabnoteslist td.date,html.dark-mode #notedetailstitle .dates,html.dark-mode #tasklist span.date,html.dark-mode .availability span,html.dark-mode .calendar-agenda-preview .event-row.current,html.dark-mode .fc .fc-axis,html.dark-mode .fc .fc-day-header,html.dark-mode .fc .fc-day-number,html.dark-mode .fc .fc-week-header,html.dark-mode .fc .fc-week-number,html.dark-mode .formcontent.text-only .faded *,html.dark-mode .invitebox .rsvp-status.hint,html.dark-mode .invitebox td.label{color:#8ba3a7}html.dark-mode .invitebox .folder-select select{background-color:#21292c}html.dark-mode .tagedit-listtabindex="-1"{border-color:#f4c200;box-shadow:0 0 0 .2rem rgba(244,194,0,.25);background:#2c373b}html.dark-mode #tasklist .progressbar .progressvalue{border-color:#997f31}html.dark-mode .listing li.readonly:not(.virtual)>div a:first-child:after,html.dark-mode .listing li>div.readonly a:first-child:after{color:#c5d1d3;background-color:#21292c}html.dark-mode .dialog-message{opacity:1;color:#c5d1d3;background-color:#997f31}
5
\ No newline at end of file
6
roundcubemail-1.6.tar.gz/plugins/libkolab/skins/plesk/include/kolab_tags.less
Changed
9
1
2
max-width: 4em;
3
padding: .1rem .4rem;
4
margin-right: .2rem;
5
+ font-weight: bold;
6
7
&:not(.tagedit-listelement) a {
8
color: inherit;
9
roundcubemail-1.6.tar.gz/plugins/libkolab/skins/plesk/libkolab.min.css
Changed
6
1
2
-#alarm-display .alarm-actions a:before,#alarm-display h3:before,#delegate-table td:before,#devices-table td:not(.selection):before,#event-status-badge span:before,#eventshow .event-partstat .changersvp:before,#kolabnoteslist td.title:before,#taglist li:before,#tagsform option:before,#tasklist .childtoggle:before,#tasklist .taskhead.flagged span.flagged:before,#tasklist .taskhead:not(.flagged):hover span.flagged:before,#taskshow.status-flagged h2:before,.attendee:before,.availability span:before,.calendar-scheduler .schedule-buttons .next-slot:after,.document-editor-header #collaborators a.button.add:before,.edit-attendees-table th.invite label:before,.editors-dialog table td.options a.delete:before,.fc .fc-time i:before,.fc button.next:before,.fc button.prev:before,.filelist tbody td.filename span:before,.filelist tr.session>td.name:after,.folderlist li.mailbox a.subscription.subscribed:before,.listing li.readonly:not(.virtual)>div a:first-child:after,.listing li>div span.subscribed:before,.listing li>div.calendar .calname:before,.listing li>div.folder .listname:before,.listing li>div.readonly a:first-child:after,.listing li>div.tasklist .listname:before,.resources-dialog .listing li.resource>a:before,.rsvp-status.accepted:before,.rsvp-status.declined:before,.rsvp-status.delegated:before,.rsvp-status.loading:before,.rsvp-status.needs-action:before,.rsvp-status.tentative:before,a.btn.fromcloud:before,a.button.filesaveall:before,a.button.saveas:before,fieldset.categories .input-group a.button.create:before,li>a.icon.saveas:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}@media screen and (min-width:1200px){.listing li>div>a{border-left:2px solid transparent}.listing li>div>a:focus{border-left:2px solid #acdff3;outline:0}}.listing li>div{display:flex}.listing li>div>a:first-child{overflow:hidden;text-overflow:ellipsis;position:relative;flex-grow:1}.listing li>div>a:first-child+input{position:initial}.listing li>div .custom-switch{position:relative}.listing li>div.folder .listname:before{content:"\f249";margin-right:.5rem}.listing li>div span.actions{display:flex}input+.listing li>div span.actions{padding-right:2em}.listing li>div span.actions a{padding:0;margin:0;margin-right:.2rem;cursor:pointer}.listing li>div span.actions a:before{margin:0}.listing li>div span.actions a.remove{display:none}html.touch .listing li>div span.actions{padding-left:.2rem}html.touch .listing li>div span.actions a{margin-right:.5rem}.listing li>div a.quickview:before{content:"\f06e";opacity:.2;color:#03ade4}.listing li>div a.quickview:after{display:none!important}.listing li>div.focusview a.quickview:before{content:"\f06e";opacity:1}.listing li>div .subscribed{cursor:pointer;padding:0!important;border-left:0;width:auto}.listing li>div .subscribed:before{content:"\f02e";font-weight:400;height:auto;color:#03ade4;margin-right:.25rem}.listing li>div span.subscribed:before{content:"\f02e";font-weight:400}.listing li>div.subscribed .subscribed:before{content:"\f02e";font-weight:900}.listing li.selected>div>*{color:#484e4e;background-color:#e5f7fc}.listing li.readonly:not(.virtual)>div a:first-child:after,.listing li>div.readonly a:first-child:after{content:"\f023";position:absolute;left:2.25rem;top:17.5px;font-size:.9em!important;width:.9em;line-height:1;height:1em!important;background-color:#fff;border-radius:50% 50% 0 0;color:#484e4e;opacity:.9}html.touch .listing li.readonly:not(.virtual)>div a:first-child:after,html.touch .listing li>div.readonly a:first-child:after{top:23.5px;left:2.7rem}.listing li.other.user>div a:first-child:before,.listing li>div.other.user>.listname:before{content:"\f007";font-weight:900}.listing li.virtual.user>div a:first-child:after,.listing li>div.virtual.user>.listname:after{display:none}.listing li.virtual.shared>div a:first-child:before,.listing li>div.virtual.shared>.listname:before{content:"\f1e0";font-weight:900}.listing li.virtual.shared>div a:first-child:after,.listing li>div.virtual.shared>.listname:after{display:none}.listing li.virtual>div>a{opacity:.5}.listing.treelist:not(.notree)>li>div>a{padding-left:1.5em}.listing li.droptarget>div{background-color:#ffc}.listing li .count{position:absolute;top:0;right:0;min-width:2em;line-height:1.4rem;margin:7.7px;padding:0 .3em;border-radius:.4em;background:#828481;color:#fff;text-align:center;font-weight:700}html.touch .listing li .count{line-height:2rem;margin:9.5px}.treelist ul li a:first-child:after{margin-left:1.7em!important}.treelist ul li li a:first-child:after{margin-left:3.4em!important}.treelist ul li li li a:first-child:after{margin-left:5.1em!important}.treelist ul li li li li a:first-child:after{margin-left:6.8em!important}.treelist ul li li li li li a:first-child:after{margin-left:8.5em!important}.treelist ul li li li li li li a:first-child:after{margin-left:10.2em!important}.treelist.notree li a:first-child:after{left:1.3rem!important}.searchresults .boxtitle{line-height:2rem!important;font-size:80%;padding:0 .5rem;margin:0;color:#828481;background-color:#f8f7f4;text-align:center;border-bottom:1px solid #d4dbde}.folderlist li.mailbox.type-event>a:before{content:"\f133";font-weight:900}.folderlist li.mailbox.type-task>a:before{content:"\f274";font-weight:900}.folderlist li.mailbox.type-journal>a:before{content:"\f133";font-weight:400}.folderlist li.mailbox.type-contact>a:before{content:"\f2b9";font-weight:400}.folderlist li.mailbox.type-note>a:before{content:"\f249";font-weight:400}.folderlist li.mailbox.type-configuration>a:before{content:"\f013";font-weight:900}.folderlist li.mailbox.type-freebusy>a:before{content:"\f133";font-weight:400}.folderlist li.mailbox.type-file>a:before{content:"\f07b";font-weight:900}.menu li.search{padding:.25rem .5rem}.menu a.history:before{content:"\f1da"}button.btn.save.notify:before{content:"\f0e0"}button.btn.print:before{content:"\f02f"}.watermark{background:url("../../../../skins/plesk/images/logo.svg") center no-repeat #fff;background-size:30%;background-blend-mode:luminosity;width:100%;height:100%}.watermark>*{display:none}.watermark:before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,.85)}.watermark.formcontainer{background:0 0!important}.watermark.formcontainer:before{display:none}.watermark.formcontainer>*{display:block}html.layout-phone .watermark.formcontainer,html.layout-small .watermark.formcontainer{overflow-y:auto!important}.form-group>.datetime{display:flex;white-space:nowrap}.form-group>.datetime input{width:10em}.form-group>.datetime input:first-child{margin-right:.5rem;width:15em}.form-group>.datetime a{margin-left:1em;text-align:right;flex:1;line-height:2.4}.form-section.form-group.form-check{display:flex;padding:0}.form-section.form-group.form-check label{order:10}.formcontent.text-only .faded *{color:#828481}.linkslist{border:0!important;background:0 0!important}.linkslist li.link{padding:0}.linkslist li.link.message.eml:before{content:"\f0e0"}.linkslist li.link a.messagelink{overflow:hidden;text-overflow:ellipsis}.linkslist li.link a.delete .inner{display:none}.print-config{position:fixed;top:0;left:0;width:100%;z-index:10000;padding:.5em 1em;background-color:#f8f7f4}.print-config button.print{margin-right:1rem}.print-config .prop{line-height:2;margin-left:.5rem;display:inline-block;vertical-align:middle}.print-config .prop label{margin:0}@media print{.print-config{display:none}}.print-config+.print-content{position:relative;top:0;left:0;height:auto;margin:5em auto 0 auto;overflow:visible}.selection-dialog .ui-dialog-content{display:flex!important;overflow:hidden!important}.selection-dialog .selection-list{display:flex;flex-direction:column;border:1px solid #d4dbde;justify-content:center}.selection-dialog .ui-dialog-content .popupmenu{display:flex!important;width:100%}.selection-dialog .scroller{flex:1;overflow-y:auto}.selection-dialog .header{border-bottom:1px solid #d4dbde;display:flex;background-color:#f2eeeb;font-size:1rem;font-weight:700;line-height:58px;height:58px;min-height:58px;padding:0 .25em;position:relative;overflow:hidden;white-space:nowrap}.selection-dialog .header a.button{color:#677;margin:0 .3rem}.selection-dialog .header a.button:before{margin:0}.selection-dialog .header-title{width:100%;text-align:center;margin:0 2em}.selection-dialog .selection-content{display:flex;flex-direction:column}.selection-dialog .tab-content{margin-top:1rem;height:100%;overflow-y:auto}.selection-dialog .form-addon{margin:0;padding:.5rem 0;width:100%;background-color:#f8f7f4;border-top:1px solid #d4dbde}.selection-dialog .listing ul{background-color:#fff}.selection-dialog .listing li.selected{color:#484e4e}@media screen and (max-width:768px){.selection-dialog .ui-dialog-content{padding:0!important}.selection-dialog .ui-dialog-titlebar{display:none;margin:0}.selection-dialog .selection-list{border:0}.selection-dialog .selection-content .header-title,.selection-dialog .selection-list .header-title{margin-left:0}.selection-dialog .header a:before{font-size:1.75rem}}@media screen and (max-height:750px) and (min-width:769px){#layout-menu,#layout-menu .popover-header img{width:42px}#taskmenu a{height:42px;width:42px;font-size:1.2rem!important}#taskmenu .special-buttons{width:42px}#taskmenu span.inner{display:none}}.menu a.calendarlink:before{content:"\f073"}.menu a.send:before{content:"\f1d8"}.listing.iconized li.resource>i:before{content:"\f1b2"}a.button.today:before{content:"\f133";font-weight:400}a.button.date:before{content:"\f073";font-weight:400}.listing li>div.calendar .calname:before{content:"\f073"}.listing li>div.calendar .actions{padding-right:.25rem}.listing li>div.calendar .actions :last-child{margin-right:0}.listing li>div.calendar.cal---invitation--declined .calname:before,.listing li>div.calendar.cal---invitation--pending .calname:before{content:"\f073";font-weight:400}.listing li>div.calendar.cal-__bdays__ .calname:before{content:"\f1fd"}.listing li>div.calendar.cal---invitation--declined,.listing li>div.calendar.cal---invitation--pending,.listing li>div.calendar.cal-__bdays__{font-style:italic}.listing li>div.calendar.cal---invitation--declined a.calname,.listing li>div.calendar.cal---invitation--pending a.calname,.listing li>div.calendar.cal-__bdays__ a.calname{padding-right:2.5em}.listing li>div.calendar.cal---invitation--declined .count,.listing li>div.calendar.cal---invitation--pending .count,.listing li>div.calendar.cal-__bdays__ .count{right:4.2em;font-style:normal}.listing li span.handle{display:none}#calendarcategories .input-group:not(:last-child){margin-bottom:.25rem}fieldset.categories .input-group .minicolors-input{border-radius:0}fieldset.categories .input-group .minicolors+.input-group-append{margin-left:0}fieldset.categories .input-group a.button.create:before{content:"\f067";line-height:1}.calendar-invitebox>i.icon:before{content:"\f133"!important}.calendar-agenda-preview{display:none;margin-top:.5rem;border-top:1px solid #ddd}.calendar-agenda-preview h3{margin-top:.5rem}.calendar-agenda-preview .event-row{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-agenda-preview .event-row.current{color:#333;font-weight:700}.calendar-agenda-preview .event-row.no-event{font-style:italic}.calendar-agenda-preview .event-row.fc-invitation-needs-action{color:#828481}.calendar-agenda-preview .event-row.fc-invitation-needs-action .event-title{font-style:italic}.calendar-agenda-preview .event-title{padding-left:.5rem}#calendar.content{overflow:hidden!important;position:relative}.calendar-datepicker .ui-datepicker{margin:0!important;border:0;border-radius:0;width:auto;min-width:auto!important;font-size:.9rem;background-color:#f8f7f4}.calendar-datepicker .ui-datepicker table{margin:0}.calendar-datepicker .ui-datepicker td a{font-size:.9rem!important}.calendar-datepicker .ui-datepicker-header{background-color:#f8f7f4;border-top:1px solid #d4dbde}.ui-dialog .calendar-datepicker .ui-datepicker{background:0 0}.ui-dialog .calendar-datepicker .ui-datepicker-header{background:0 0;border:0}.ui-dialog .calendar-datepicker td a{line-height:3em!important;font-size:1rem!important}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}body .fc{font-size:1em}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-default{background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-button-group{display:inline-block}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-popover .fc-header .fc-close{cursor:pointer}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc-bg{bottom:0}.fc-bg table{height:100%}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}adata-goto{cursor:pointer}adata-goto:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover{color:#fff;text-decoration:none}.fc-event.fc-draggable,.fc-eventhref{cursor:pointer}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4}.fc-event .fc-resizer{display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}.fc-icon{display:inline-block;height:1em;line-height:1em;font-size:1em;text-align:center;overflow:hidden;font-family:"Courier New",Courier,monospace;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\2039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\D7";font-size:200%;top:6%}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.ui-widget .fc-disabled-day{background-image:none}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.ui-widget .fc-event{color:#fff;text-decoration:none;font-weight:400}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-toolbar{text-align:center}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px 0}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number{text-align:center}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{position:relative;z-index:3}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight-container{position:relative}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event{overflow:hidden}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\A0-\A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt{float:right}.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title ahref:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee}body.quickview-active .fc .fc-scroller{background:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20576%20512%22%3E%3Cpath%20fill%3D%22%23f2f2f2%22%20d%3D%22M569.354%20231.631C512.969%20135.949%20407.81%2072%20288%2072%20168.14%2072%2063.004%20135.994%206.646%20231.631a47.999%2047.999%200%200%200%200%2048.739C63.031%20376.051%20168.19%20440%20288%20440c119.86%200%20224.996-63.994%20281.354-159.631a47.997%2047.997%200%200%200%200-48.738zM288%20392c-75.162%200-136-60.827-136-136%200-75.162%2060.826-136%20136-136%2075.162%200%20136%2060.826%20136%20136%200%2075.162-60.826%20136-136%20136zm104-136c0%2057.438-46.562%20104-104%20104s-104-46.562-104-104c0-17.708%204.431-34.379%2012.236-48.973l-.001.032c0%2023.651%2019.173%2042.823%2042.824%2042.823s42.824-19.173%2042.824-42.823c0-23.651-19.173-42.824-42.824-42.824l-.032.001C253.621%20156.431%20270.292%20152%20288%20152c57.438%200%20104%2046.562%20104%20104z%22%2F%3E%3C%2Fsvg%3E") center no-repeat;background-size:50%}.fc .fc-header-toolbar{display:flex;background-color:#f8f7f4;margin:0}.fc .fc-header-toolbar>*>*{float:none;margin:0}.fc .fc-left{order:1}.fc .fc-left .fc-button-group{display:none}.fc .fc-center{flex:1;order:2;text-align:center;padding:.25rem}.fc .fc-center h2{margin:0;color:#828481;white-space:nowrap;font-size:1.25rem;font-weight:700}.fc .fc-right{order:3;text-align:right}.fc .fc-right .fc-button{display:none}.fc button{height:unset;padding:.3rem .75rem}.fc button.prev:before{content:"\f104";margin:0!important;line-height:1}.fc button.next:before{content:"\f105";margin:0!important;line-height:1}.fc .btn-group{padding:.5rem;margin:0}.fc .fc-type-freebusy{opacity:.6}.fc .fc-type-freebusy .fc-title{position:absolute;top:-5000px}.fc .fc-type-freebusy td{color:#999}.fc .fc-event-dot{background-color:#c00}.fc a.fc-event,.fc a.fc-event:hover{color:#fff}.fc .fc-event{font-size:13px;background-color:#c00;border-color:#c00}.fc .fc-event .fc-title{font-weight:700}.fc .fc-event .fc-bg{opacity:.15;margin-top:1.1rem}.fc .fc-event.fc-invitation-declined,.fc .fc-event.fc-invitation-needs-action,.fc .fc-event.fc-invitation-tentative{border:1px dashed #999}.fc .fc-event.fc-event-ns-other.fc-invitation-declined{opacity:.7}.fc .fc-event.fc-event-ns-other.fc-invitation-declined .fc-title{text-decoration:line-through}.fc .fc-event.fc-invitation-tentative .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAOuJAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-event.fc-invitation-needs-action .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAFdXx////yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-event.fc-invitation-declined .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAMwAAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-list-view tr.fc-invitation-declined,.fc .fc-list-view tr.fc-invitation-needs-action,.fc .fc-list-view tr.fc-invitation-tentative{color:#888}.fc .fc-list-view tr.fc-invitation-declined .fc-event-dot,.fc .fc-list-view tr.fc-invitation-needs-action .fc-event-dot,.fc .fc-list-view tr.fc-invitation-tentative .fc-event-dot{background-color:#888}.fc .cal-event-status-cancelled,.fc .fc-declined,.fc .fc-needs-action{opacity:.6}.fc .fc-time i{display:inline-block;width:1em;height:1em;margin-left:.25rem}.fc .fc-time i:before{font-size:1em;line-height:1;margin-top:.1rem}.fc .fc-time i.fc-icon-recurring:before{content:"\f24d";font-weight:400}.fc .fc-time i.fc-icon-alarms:before{content:"\f0f3"}.fc .fc-event-temp{opacity:.4}.fc .fc-nonbusiness{background-color:rgba(130,132,129,.2)}.fc .fc-day.fc-today{background:rgba(255,212,82,.2)!important}.fc .fc-now-indicator{border-color:#95bb41;border-width:1.5px}.fc .fc-list-item,.fc .fc-list-item:hover td{background:0 0}.fc .fc-list-item a,.fc .fc-list-item td{cursor:default}.fc .fc-list-item-title{font-weight:700}.fc .fc-list-table td{padding:.5rem}.fc .fc-list-heading td{background:rgba(130,132,129,.1)}.fc .fc-list-empty{display:none}.fc .fc-more{color:#03ade4!important;white-space:nowrap}.fc .fc-axis,.fc .fc-day-header,.fc .fc-day-number,.fc .fc-week-header,.fc .fc-week-number{color:#828481;font-size:.95rem;padding:.15rem!important}.fc .fc-week-number{text-align:center}.fc .fc-popover{border-radius:.3rem}.fc .fc-popover .fc-header{color:#828481;font-size:.95rem;font-weight:700}.fc .fc-popover .fc-icon-x::after{top:3px}.fc .fc-view.fc-widget-content,.fc td.fc-head-container{border-left-width:0}.fc .fc-body .fc-bg .fc-widget-content,.fc .fc-body .fc-bg-sceleton .fc-widget-content,.fc .fc-body>tr>.fc-widget-content,.fc .fc-list-view{border-bottom-width:0}.print-content .fc .fc-header-toolbar{background-color:#fff}.print-content .fc .fc-center h2{color:#000;padding-bottom:.75rem;font-size:1.5rem!important}.print-content .fc .fc-day.fc-today{background:0 0!important}.print-content .fc a.fc-event{color:#000;background-color:#fff!important}.print-content .fc .fc-event-description{white-space:pre-wrap;font-size:90%}.print-content .fc .fc-event-location{width:20%}.print-content .fc .fc-event-row-secondary td{border:0;padding-top:0!important}.print-content .fc .fc-scroller{overflow:visible!important;height:auto!important}.print-content .fc .fc-view.fc-widget-content,.print-content .fc td.fc-head-container{border-left-width:1px}.print-content .fc .fc-agenda-view,.print-content .fc .fc-list-view,.print-content .fc .fc-month-view{border-bottom:1px solid #ddd}@media screen and (max-width:768px){.fc .fc-left{display:block;width:100%;padding:0}.fc .fc-left button{flex:1 1 auto;border-radius:0}.fc .fc-left .btn-group{padding:0;display:flex}.fc .fc-center,.fc .fc-list-table .fc-event-location,.fc .fc-right{display:none}}@media screen and (min-width:769px) and (max-width:920px){.fc .fc-center{overflow:hidden;text-overflow:ellipsis;flex:1}.fc .fc-center h2{font-size:1rem;line-height:1;padding-top:.45rem}.fc .fc-left .btn,.fc .fc-right .btn{padding-left:.5rem;padding-right:.5rem}}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar{-webkit-appearance:none}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar:vertical,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar:vertical,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar:vertical{width:.6rem}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar:horizontal,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar:horizontal,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar:horizontal{height:.6rem}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar-thumb,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar-thumb,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.4);border-radius:.3rem;border:2px solid #fff}body.task-calendar #print-layout #calendar-view-selector{float:right;padding-top:.25rem}body.task-calendar #print-layout #calendarlist{margin-top:1rem}body.task-calendar #print-layout #calendarlist,body.task-calendar #print-layout #calendarlist ul{list-style:none;padding:0}body.task-calendar #print-layout #calendarlist li{display:inline-block;white-space:nowrap}body.task-calendar #print-layout #calendarlist div,body.task-calendar #print-layout #calendarlist li,body.task-calendar #print-layout #calendarlist ul{float:left}body.task-calendar #print-layout #calendarlist div{margin-right:2rem}body.task-calendar #print-layout #calendarlist a{text-decoration:none;cursor:auto}body.task-calendar #print-layout #calendarlist input,body.task-calendar #print-layout #calendarlist span.actions,body.task-calendar #print-layout #calendarlist span.handle{display:none}@media screen and (min-width:769px){body.task-calendar #layout-sidebar{flex:2;max-width:400px;min-width:240px}}body.task-calendar .ui-datepicker td{width:12.5%}body.task-calendar .ui-datepicker .ui-datepicker-week-col{color:#d4dbde;text-align:center}body.task-calendar .ui-datepicker-inline .ui-datepicker-week-col{color:#03ade4;cursor:pointer}body.task-calendar .ui-datepicker-inline .ui-datepicker-activerange{background-color:#e5f7fc}#timezone-display{font-size:.9rem;color:#828481}#agendaoptions{padding:0 .5rem .5rem .5rem;display:flex;background-color:#f8f7f4}#agendaoptions .input-group{padding-right:.5rem;flex-wrap:nowrap}#agendaoptions .input-group:last-child{padding-right:0}#agendaoptions select{min-width:7em}#agendaoptions .input-group-prepend{overflow:hidden;margin-bottom:0}#agendaoptions .input-group-prepend span{display:block;overflow:hidden;text-overflow:ellipsis}#eventshow{margin:0}#eventshow .event-title{font-size:1.5rem;font-weight:700}#eventshow .event-location{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#eventshow .event-description{margin:1rem 0}#eventshow .event-attendees{margin-bottom:1rem}#eventshow .event-attendees .attendee{margin-right:.25rem}#eventshow .event-partstat>span{display:flex}#eventshow .event-partstat .rsvp-status:before{display:inline;float:none}#eventshow .event-partstat .changersvp{cursor:pointer;font-size:1.2rem;margin-left:1em}#eventshow .event-partstat .changersvp:before{content:"\f14b";float:none;display:inline;line-height:1}#eventshow .event-partstat .inner{display:none}#eventedit .edit-attendees-table td{padding-top:.15rem}#eventedit .edit-attendees-table td.role{padding-left:0;width:9em}#fish-eye-view{padding:0}@media screen and (min-width:769px){#fish-eye-view{border-bottom:1px solid #d4dbde}}.availability span{margin-right:.5rem;color:#828481}.availability span:before{content:"\f0c8";display:inline;float:none}.availability span.legend:before{font-size:1em}.availability span.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";display:block;line-height:1}.availability span.unknown:before{color:#bbb}.availability span.free:before{color:#95bb41}.availability span.busy:before{color:#ff5552}.availability span.tentative:before{color:#8383fc}.availability span.out-of-office:before{color:#fbaa68}.datetime .custom-switch{padding-left:.5rem}.datetime .custom-switch label{line-height:2;margin-top:.2rem}.datetime input{width:10em!important}@media screen and (max-width:420px){.datetime input{width:8em!important}.datetime input+input{width:6em!important}}.calendar-scheduler .nav{align-items:center}.calendar-scheduler .nav button:first-child{margin-right:.25rem}.calendar-scheduler .nav>div{white-space:nowrap}@media screen and (max-width:420px){.calendar-scheduler .nav button{padding-left:.5rem;padding-right:.5rem}}.calendar-scheduler .schedule-buttons .prev-slot:before{content:"\f053"}.calendar-scheduler .schedule-buttons .next-slot:after{content:"\f054";display:inline-block;float:none;margin-right:0}.calendar-scheduler .schedule-options{flex:1;margin-left:1rem}html.layout-phone .calendar-scheduler .schedule-options{order:100;margin-left:0}.calendar-scheduler .schedule-nav{flex:1;margin-left:.3rem;text-align:right}.calendar-scheduler .schedule-nav button{line-height:1.8}.calendar-scheduler .schedule-range{width:60%;margin-top:2rem}html.layout-phone .calendar-scheduler .schedule-range{margin:0}.calendar-scheduler .schedule-legend .attendee{margin-right:.5rem}.calendar-scheduler .attendees-list{position:relative}.calendar-scheduler .attendees-list a.attendee-role-toggle{position:absolute;left:0;display:inline-block;width:1em;cursor:pointer}.calendar-scheduler .attendees-list div.attendee{border-top:1px solid #f1f3f4;line-height:1.7rem;height:1.8rem}.calendar-scheduler .attendees-list .attendee{white-space:nowrap}.calendar-scheduler .attendees-list .attendee.spacer{height:10px}.calendar-scheduler .attendees-list .attendee.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";font-weight:900}.calendar-scheduler .attendees-list .attendee.total{font-weight:700}.calendar-scheduler .attendees-list .attendee.spacer:before,.calendar-scheduler .attendees-list .attendee.total:before{display:none}.calendar-scheduler .schedule-table{table-layout:fixed}.calendar-scheduler .schedule-table th{border-top:0}.calendar-scheduler .schedule-table td.attendees{width:25%;overflow:hidden;border-top:0}html.layout-phone .calendar-scheduler .schedule-table td.attendees{width:35%}.calendar-scheduler .schedule-table td.attendees .attendees-list{border-bottom:1px solid #d4dbde}.calendar-scheduler .schedule-table td.times{width:auto;border-top:0}.calendar-scheduler .schedule-table td.times table{margin:0}.calendar-scheduler .schedule-table td.times td{height:1.8rem;border-top:1px solid #f1f3f4;white-space:nowrap}.calendar-scheduler .schedule-table div.scroll{position:relative;overflow:auto}.calendar-scheduler .schedule-table .timesheader{height:1.4rem;border-top:1px solid #d4dbde}.calendar-scheduler .schedule-table .boxtitle{margin:0;padding:0;font-size:1rem;font-weight:700;padding-top:.5rem;line-height:2}.calendar-scheduler .schedule-table td{padding:4px}.calendar-scheduler .schedule-table tbody td{padding:0}.calendar-scheduler .schedule-table tbody td div{height:100%}.calendar-scheduler .schedule-table tr.spacer td{padding:0;height:10px}.calendar-scheduler .schedule-table tr.dates thcolspan="1"{min-width:48px;max-width:48px;text-align:center;font-size:.7rem;line-height:2.9}.calendar-scheduler .schedule-table tr.times td{cursor:pointer;min-width:48px;max-width:48px;font-size:.7rem;text-align:center;color:#03ade4;height:1.4rem;padding:0 .1rem;vertical-align:middle;border-top:1px solid #d4dbde;border-left:1px solid #f1f3f4}.calendar-scheduler .schedule-table .fbcontent td{border-left:1px solid #f1f3f4}.calendar-scheduler .schedule-table .fbcontent:last-child td{border-bottom:1px solid #d4dbde}.calendar-scheduler .schedule-table div.unknown{background-color:#bbb}.calendar-scheduler .schedule-table div.free{background-color:#95bb41}.calendar-scheduler .schedule-table div.busy{background-color:#ff5552}.calendar-scheduler .schedule-table div.tentative{background-color:#8383fc}.calendar-scheduler .schedule-table div.out-of-office{background-color:#fbaa68}.calendar-scheduler .schedule-table div.all-busy,.calendar-scheduler .schedule-table div.all-out-of-office,.calendar-scheduler .schedule-table div.all-tentative{overflow:hidden}.calendar-scheduler .schedule-table div.all-busy span,.calendar-scheduler .schedule-table div.all-out-of-office span,.calendar-scheduler .schedule-table div.all-tentative span{display:block;width:300%;height:300%;border:1px solid #fff;background:#ff231f;transform:rotate(42deg) translate(2%)}.calendar-scheduler .schedule-table div.all-busy.w10 span,.calendar-scheduler .schedule-table div.all-out-of-office.w10 span,.calendar-scheduler .schedule-table div.all-tentative.w10 span{display:none}.calendar-scheduler .schedule-table div.all-busy.w20 span,.calendar-scheduler .schedule-table div.all-busy.w25 span,.calendar-scheduler .schedule-table div.all-out-of-office.w20 span,.calendar-scheduler .schedule-table div.all-out-of-office.w25 span,.calendar-scheduler .schedule-table div.all-tentative.w20 span,.calendar-scheduler .schedule-table div.all-tentative.w25 span{transform:rotate(17deg) translate(-9%)}.calendar-scheduler .schedule-table div.all-busy.w30 span,.calendar-scheduler .schedule-table div.all-out-of-office.w30 span,.calendar-scheduler .schedule-table div.all-tentative.w30 span{transform:rotate(28deg) translate(-7%)}.calendar-scheduler .schedule-table div.all-busy.w33 span,.calendar-scheduler .schedule-table div.all-out-of-office.w33 span,.calendar-scheduler .schedule-table div.all-tentative.w33 span{transform:rotate(32deg) translate(-5%)}.calendar-scheduler .schedule-table div.all-busy.w40 span,.calendar-scheduler .schedule-table div.all-out-of-office.w40 span,.calendar-scheduler .schedule-table div.all-tentative.w40 span{transform:rotate(36deg) translate(-3%)}.calendar-scheduler .schedule-table div.all-busy.w60 span,.calendar-scheduler .schedule-table div.all-out-of-office.w60 span,.calendar-scheduler .schedule-table div.all-tentative.w60 span{transform:rotate(48deg) translate(6%)}.calendar-scheduler .schedule-table div.all-busy.w67 span,.calendar-scheduler .schedule-table div.all-out-of-office.w67 span,.calendar-scheduler .schedule-table div.all-tentative.w67 span{transform:rotate(52deg) translate(9%)}.calendar-scheduler .schedule-table div.all-busy.w70 span,.calendar-scheduler .schedule-table div.all-busy.w75 span,.calendar-scheduler .schedule-table div.all-out-of-office.w70 span,.calendar-scheduler .schedule-table div.all-out-of-office.w75 span,.calendar-scheduler .schedule-table div.all-tentative.w70 span,.calendar-scheduler .schedule-table div.all-tentative.w75 span{transform:rotate(55deg) translate(12%,30%)}.calendar-scheduler .schedule-table div.all-busy.w80 span,.calendar-scheduler .schedule-table div.all-out-of-office.w80 span,.calendar-scheduler .schedule-table div.all-tentative.w80 span{transform:rotate(56deg) translate(13%,30%)}.calendar-scheduler .schedule-table div.all-busy.w90 span,.calendar-scheduler .schedule-table div.all-out-of-office.w90 span,.calendar-scheduler .schedule-table div.all-tentative.w90 span{transform:rotate(59deg) translate(16%,30%)}.calendar-scheduler .schedule-table div.all-busy.w100 span,.calendar-scheduler .schedule-table div.all-out-of-office.w100 span,.calendar-scheduler .schedule-table div.all-tentative.w100 span{transform:rotate(62deg) translate(19%,30%)}.calendar-scheduler .schedule-table div.all-tentative span{background:#5151fb}.calendar-scheduler .schedule-table div.all-out-of-office span{background:#fa8e36}#schedule-event-time{position:absolute;border-radius:.3rem;cursor:move;border:2px solid #444;background-color:rgba(0,0,0,.3)}.resources-dialog .resource-selection{flex:4;min-width:300px}.resources-dialog .resource-content{flex:10;margin-left:1em}.resources-dialog .listing li.resource>a{color:#484e4e}.resources-dialog .listing li.resource>a:before{content:"\f1b2"}.resources-dialog .slot-nav{display:none}#resource-availability{height:100%}#resource-availability .fc{height:100%;overflow:hidden;position:relative;border-bottom:1px solid #ddd}#resource-availability .fc-view{border-left:1px solid #ddd}#resource-availability .fc-header-toolbar{height:0}.standalone-invitebox{margin:0 auto;max-width:500px;width:95%;display:flex;flex-direction:column;top:15vh;position:relative}.standalone-invitebox #logo{max-height:90px}.standalone-invitebox .invitebox{margin-top:3em!important}@media screen and (min-width:769px){.searchbar a.button.date{display:none}}#rcmfd_alarmvalue{max-width:80px}@media screen and (max-width:768px){#agendaoptions{padding-top:.5rem}.calendar-scheduler .schedule-range{width:100%}#layout-sidebar .calendar-datepicker{display:none}.resources-dialog .resource-content{display:none;margin:0}.resources-dialog .resource-content ul{margin:1em 1em 0 1em}#resource-availability{margin:0 1em}}body.task-calendar .header-title{position:relative}body.task-calendar .header-title .tz{position:absolute;bottom:0;left:0;width:100%;line-height:2;font-size:.8rem;font-weight:400;color:#828481}.listing.iconized li.activesync>a:before{content:"\f143"}#devices-table td:not(.selection){display:flex}#devices-table td:not(.selection):before{content:"\f143"}#devices-table td:not(.selection) span{overflow:hidden;text-overflow:ellipsis}#devices-table .devicealias{flex:1}#devices-table .devicetype{max-width:40%;font-style:italic;padding-left:.5em}.listing.iconized li.delegation>a:before{content:"\f21b"}#delegate-table td:before{content:"\f21b"}a.btn.fromcloud:before,a.button.filesaveall:before,a.button.saveas:before,li>a.icon.saveas:before{content:"\f07b"}.menu a.mount.storage:before{content:"\f1c0"}.menu a.open:before{content:"\f06e"}.menu a.cancel:before{content:"\f00d"}.menu a.share:before{content:"\f1e0"}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder{order:-1}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder:before{content:"\f067"}.folderlist li.collection a.name{padding-left:.5em}.folderlist li.collection.audio a.name:before{content:"\f028";font-weight:900}.folderlist li.collection.video a.name:before{content:"\f03d";font-weight:900}.folderlist li.collection.image a.name:before{content:"\f03e"}.folderlist li.collection.document a.name:before{content:"\f02d";font-weight:900}.folderlist li.collection.sessions a.name:before{content:"\f0c0";font-weight:900}.folderlist li.mailbox a.subscription{cursor:pointer;padding:0!important;border-left:0;width:auto}.folderlist li.mailbox a.subscription:before{content:"\f02e";font-weight:400;height:auto;color:#03ade4;margin-right:.25rem}.folderlist li.mailbox a.subscription.subscribed:before{content:"\f02e";font-weight:900}#filelistcontainer{position:relative}#filesuploadform{position:absolute!important}#filelistbox{height:100%}#filelistbox.droptarget.active{box-shadow:0 0 2px 1px #c2afa1 inset}#filelistbox.droptarget.hover{box-shadow:0 0 2px 1px #c2afa1 inset;background-color:#eae3df}.filelist thead{display:none}.filelist td.options{display:none}.filelist td.name{position:relative}.filelist td.mtime{width:11em}.filelist td.size{text-align:right;width:6em}.filelist tr.session>td.name{padding-right:2em}.filelist tr.session>td.name:after{content:"\f0c0";color:#d4dbde;position:absolute;right:.25em;top:0}.filelist tr.session.invited>td.name:after{color:#95bb41}.filelist tr.session.owner>td.name:after{color:#161b1d}@media screen and (max-width:480px){.filelist td.mtime{display:none}}.filelist tbody td.filename span{background:0 0!important}.filelist tbody td.filename span:before{content:"\f15b";font-weight:400}.filelist tbody td.filename.application_pdf span:before,.filelist tbody td.filename.pdf span:before{content:"\f1c1"}.filelist tbody td.filename.application_msword span:before,.filelist tbody td.filename.application_vnd_ms_word span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_wordprocessingml_document span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_wordprocessingml_template span:before{content:"\f1c2"}.filelist tbody td.filename.application_vnd_ms_excel span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_spreadsheet span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_spreadsheet_template span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_spreadsheetml_sheet span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_spreadsheetml_template span:before{content:"\f1c3"}.filelist tbody td.filename.application_vnd_ms_powerpoint span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_presentation span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_slideshow span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_template span:before{content:"\f1c4"}.filelist tbody td.filename.application_vnd_oasis_opendocument_text span:before{content:"\f15c"}.filelist tbody td.filename.application_vnd_oasis_opendocument_presentation span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_presentation_template span:before{content:"\f1c4"}.filelist tbody td.filename.application_x_7z_compressed span:before,.filelist tbody td.filename.application_x_ace span:before,.filelist tbody td.filename.application_x_arc span:before,.filelist tbody td.filename.application_x_arj span:before,.filelist tbody td.filename.application_x_bzip_compressed_tar span:before,.filelist tbody td.filename.application_x_lha span:before,.filelist tbody td.filename.application_x_rar span:before,.filelist tbody td.filename.application_x_tarz span:before,.filelist tbody td.filename.application_x_tzo span:before,.filelist tbody td.filename.application_x_zip span:before,.filelist tbody td.filename.application_x_zoo span:before,.filelist tbody td.filename.application_zip span:before,.filelist tbody td.filename.tar span:before{content:"\f1c6"}.filelist tbody td.filename.application_vnd_stardivision_draw span:before,.filelist tbody td.filename.application_vnd_sun_xml_draw span:before,.filelist tbody td.filename.application_vnd_sun_xml_draw_template span:before,.filelist tbody td.filename.image span:before,.filelist tbody td.filename.image_jpeg span:before,.filelist tbody td.filename.image_jpeg2000 span:before,.filelist tbody td.filename.image_png span:before,.filelist tbody td.filename.image_svg_xml span:before,.filelist tbody td.filename.image_x_eps span:before{content:"\f1c5"}.filelist tbody td.filename.audio span:before{content:"\f1c7"}.filelist tbody td.filename.video span:before{content:"\f1c8"}.filelist tbody td.filename.ascii span:before,.filelist tbody td.filename.text_plain span:before{content:"\f15c"}.filelist tbody td.filename.text_html span:before{content:"\f1c9"}#folder-mount-form td.source{display:flex;align-items:flex-start;padding:.5rem}#folder-mount-form td.source.selected{background-color:#e5f7fc}#folder-mount-form td.source>input{height:32px;margin-right:.5rem}#folder-mount-form td.source>div{flex:1}#folder-mount-form td.source img{height:32px;margin-right:.5rem}#folder-mount-form td.source .name{font-weight:700}#folder-mount-form td.source .description{font-size:90%}#folder-mount-form td.source table{margin-top:.5rem}#folder-mount-form td.source .form-group{margin-bottom:0}#folder-mount-form .auth-options{margin-top:.5rem}#folder-mount-form .auth-options>label:before{line-height:1}.files-dialog .selection-list{flex:1;min-width:220px}.files-dialog .selection-content{flex:2}@media screen and (min-width:769px){.files-dialog .selection-content{border:1px solid #d4dbde;border-left:0}}.files-dialog a.subscription{display:none}@media screen and (max-width:768px){.files-dialog .selection-list{display:none}}.document-editor-header .toolbar{text-align:left!important;flex:1}.document-editor-header .toolbar a{text-align:center}.document-editor-header a.button.icon.members:before{content:"\f0c0"}.document-editor-header #collaborators{order:9;display:flex;margin-right:.5rem;margin-left:2rem}.document-editor-header #collaborators a.button.add:before{content:"\f067"}.document-editor-header #collaborators .inner{display:none}.document-editor-header #doc-title{flex:1;order:8}.document-editor-header #doc-title input{display:inline}.session-members img.photo{width:48px;height:48px;min-width:48px;overflow:hidden;background:url("../../../skins/plesk/images/contactpic.png") center center no-repeat #fff;background-size:cover;border-radius:50%;border:solid 3px #eee;margin-left:.5rem}.session-members ul{padding:0;margin:0;list-style-type:none}.session-members ul li{display:flex;align-items:center}.session-members ul img.photo{margin-left:0;margin-right:1em}.editors-dialog table th{border:0}.editors-dialog table tr:last-child td{border-bottom:1px solid #d4dbde}.editors-dialog table td.options{width:1%}.editors-dialog table td.options a.delete:before{content:"\f2ed";display:inline;line-height:1}.editors-dialog label{display:block}button.participant.add:before{content:"\f234"}.iframe-wrapper.file-type-audio,.iframe-wrapper.file-type-video{display:flex;align-items:center;justify-content:center}@media screen and (min-width:769px){.iframe-wrapper.file-type-audio,.iframe-wrapper.file-type-video{padding:1em}}#shareform table td,#shareform table th{padding-left:.15rem;max-width:10vw;overflow:hidden;text-overflow:ellipsis}#shareform table td:last-child,#shareform table th:last-child{padding-right:.15rem;width:1%;max-width:unset}#shareform table td{vertical-align:middle}#shareform table td.form input{margin-bottom:.25rem;width:100%}#shareform table tr+tr>td{border-top:0;padding-bottom:.25rem}#shareform table button{padding:.185rem .75rem;width:100%}.menu a.appendnote:before{content:"\f249"}#noteform iframe{min-height:10rem}#notereferences{margin-top:.5rem}#notereferences .attachmentslist a.delete{margin-left:.5rem}#notedetailstitle .dates{color:#828481}#print-layout #notetitle{font-size:1.5rem;line-height:2}#print-layout #notetags{margin-bottom:.5rem}#print-layout #notecreated{margin-right:2rem}#kolabnoteslist tr{display:flex}#kolabnoteslist td.title{overflow:hidden;text-overflow:ellipsis;flex:1}#kolabnoteslist td.title:before{content:"\f249";font-weight:400}#kolabnoteslist td.date{overflow:unset;color:#828481;font-style:italic}.kolabmessagenotes>i.icon:before{content:"\f249"!important;font-weight:400!important}.kolabmessagenotes>a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;text-decoration:none}.menu a.tags:before{content:"\f02c"}.menu a.tag.remove.all:before,.menu a.tag.remove:before,.menu a.tag:before{content:"\f02b"}#taglist li{padding:0 .5rem}#taglist li:before{content:"\f02b";margin:0 .5rem 0 .2rem}#tag-selector li a:before,#taglist li:before,#tagsform option:before{color:#1e9cce}#tag-selector li:hover a:before,#tagsform option:checked:before{color:#fff}#tagsform{min-height:15rem}#tagsform select{padding:0;margin-bottom:.5rem}#tagsform option{padding:.5rem;outline:0;border:0}#tagsform option:before{content:"\f02b";line-height:1}#tagsform .buttons{text-align:center}#tagsform .buttons button{margin:0 .25rem}.tagbox{color:#fff;background-color:#53bce6!important;border:0!important;border-radius:.25rem;max-width:4em;padding:.1rem .4rem;margin-right:.2rem}.tagbox:not(.tagedit-listelement) a{color:inherit;padding-left:.5rem;text-decoration:none}h2>.tagbox{font-size:1.2rem}.tag-droppable.formcontainer.ui-droppable-active{background-color:#f8f7f4!important}.tag-droppable.formcontainer.ui-droppable-hover{background-color:#ffc!important}.invitebox>i.icon{position:absolute;top:0;padding-top:.5em}.invitebox>span{padding-left:2.5em}.invitebox td{padding:2px;vertical-align:top}.invitebox td.ititle{font-weight:700;padding-right:.5em}.invitebox td.label{color:#666;padding-right:1em}.invitebox td.recurrence-id{text-transform:uppercase;font-style:italic}.invitebox td.date.modified{font-weight:700;color:#ff5552}.invitebox td em{font-weight:700}.invitebox .itip-buttons{display:flex;flex-wrap:wrap}.invitebox .itip-buttons input.button{margin:0 .25rem .25rem 0}.invitebox .rsvp-buttons{width:100%;padding-top:.25rem}.invitebox .itip-reply-controls{margin-top:.25rem;width:100%;line-height:2}.invitebox .itip-reply-controls>label{display:inline}.invitebox .itip-reply-controls>label label{line-height:1;margin-right:.25rem}.invitebox .itip-reply-controls a{margin-left:1em;white-space:nowrap}.invitebox .rsvp-status{margin:.5rem 0;width:100%}.invitebox .rsvp-status.hint{color:#666;font-style:italic}.invitebox .folder-select{white-space:nowrap}.invitebox .folder-select select{display:initial;width:auto}.rsvp-status:before{line-height:1.1;color:#4d5f66;float:none;display:inline}.rsvp-status.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";line-height:1}.rsvp-status.declined:before{content:"\f05e";color:#ff5552}.rsvp-status.tentative:before{content:"\f058";color:#ffd452}.rsvp-status.accepted:before{content:"\f058";color:#95bb41}.rsvp-status.delegated:before{content:"\f064"}.rsvp-status.needs-action:before{content:"\f059"}.attendee:before{content:"\f059";display:inline;float:none;font-size:1em;color:#828481}.attendee.req-participant:before{content:"\f007"}.attendee.opt-participant:before{content:"\f007";font-weight:400}.attendee.non-participant:before{content:"\f007";color:#ccc}.attendee.chair:before{content:"\f007";color:#ffd452}.attendee.accepted:before,.attendee.completed:before{content:"\f058";color:#95bb41}.attendee.declined:before{content:"\f05e";color:#ff5552}.attendee.tentative:before{content:"\f058";color:#ffd452}.attendee.delegated:before{content:"\f064"}.attendee.organizer:before{content:"\f0b1"}.attendee.in-process:before{content:"\f013"}.attendees-comentbox label{display:inline}.edit-attendees-table{width:100%}.edit-attendees-table td,.edit-attendees-table th{width:1%;text-align:center}.edit-attendees-table td{border:0;padding:0 .3rem}.edit-attendees-table th{border-bottom:1px solid #eee!important}.edit-attendees-table td.name,.edit-attendees-table td.role,.edit-attendees-table th.name,.edit-attendees-table th.role{width:auto;text-align:left}.edit-attendees-table th.invite input{display:none}.edit-attendees-table th.invite label{cursor:pointer}.edit-attendees-table th.invite label:before{content:"\f0e0";display:inline;float:none;line-height:1}.edit-attendees-table td.invite .custom-switch{margin-top:.15rem}.edit-attendees-table td.name span{line-height:2.5;display:flex}.edit-attendees-table td.name span>:first-child{overflow:hidden;text-overflow:ellipsis;flex:1;width:1px;white-space:nowrap}.edit-attendees-table td.availability span,.edit-attendees-table td.confirmstate span{margin:0}.edit-attendees-table td.availability span:after,.edit-attendees-table td.availability span:before,.edit-attendees-table td.confirmstate span:after,.edit-attendees-table td.confirmstate span:before{line-height:2;margin:0;font-size:1.2em;height:2em;width:2em}.edit-attendees-table td.options a{display:inline-block;height:2em}.edit-attendees-table td.options a:before{line-height:1.8;margin:0}.edit-attendees-table a.expandlink:before{content:"\f0fe";line-height:2}.edit-attendees-table .inner{display:none}html.layout-phone .edit-attendees-table th.availability,html.layout-phone .edit-attendees-table th.confirmstate{text-indent:-5000px}html.layout-phone .edit-attendees-table td.role{max-width:7em}html.layout-phone .edit-attendees-table select{padding-left:.5rem}.form-searchbar{display:flex;margin-bottom:.5rem}.form-searchbar inputtype=text{flex:1}html.layout-phone .form-searchbar inputtype=text{max-width:50%}.form-searchbar inputtype=button{margin-left:.5em;overflow:hidden;text-overflow:ellipsis}.attachmentslist li.ics:before,.attachmentslist li.text.calendar:before,.messagelist tbody .attachment span.ical:before{content:"\f073";font-weight:400}.alarms-input .edit-alarm-item{display:flex}.alarms-input .edit-alarm-item+.edit-alarm-item{margin-top:.25rem}.alarms-input .edit-alarm-item.first .delete-alarm,.alarms-input .edit-alarm-item:not(.first) .add-alarm{display:none}.alarms-input .edit-alarm-buttons a{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.alarms-input .edit-alarm-buttons a:before{margin:0;width:1em}.alarms-input .edit-alarm-buttons a:focus{box-shadow:none}.alarms-input .edit-alarm-buttons a.add:before{content:"\f067"}.alarms-input .edit-alarm-buttons .inner{display:none}.alarms-input .edit-alarm-type{flex:1;border-top-right-radius:0;border-bottom-right-radius:0}.alarms-input .edit-alarm-type:focus{z-index:2}.alarms-input .edit-alarm-set{display:flex;flex:1}.alarms-input .edit-alarm-values{flex:5}.alarms-input .edit-alarm-values .form-control{border-radius:0}.alarms-input .edit-alarm-values :first-child{border-left:0}.alarms-input .edit-alarm-offset{flex:5}.alarms-input .edit-alarm-date,.alarms-input .edit-alarm-related,.alarms-input .edit-alarm-time{flex:3}.recurrence-form .recurrence-rdates{width:100%;padding:0;list-style-type:none}.recurrence-form .recurrence-rdates:empty{margin:0}.recurrence-form .recurrence-rdates a.delete{margin-left:2em}.recurrence-form .recurrence-rdates a.delete:before{display:inline-block;float:none}.recurrence-form .recurrence-rdates .inner{display:none}.recurrence-form .recurrence-onevery select{width:40%;display:inline}.recurrence-form .inputform{display:flex}.recurrence-form .inputform input.button{margin-left:.25rem}.recurrence-form div.line{width:100%;display:flex;margin-bottom:.25rem}.recurrence-form div.line label{margin-left:.5em;min-width:4em;line-height:2.5}.recurrence-form .month,.recurrence-form .monthday,.recurrence-form .weekday{display:inline-block;width:3.5em;margin-right:.5rem;white-space:nowrap}.recurrence-form .month input,.recurrence-form .monthday input,.recurrence-form .weekday input{margin-right:.25rem}.recurrence-form .monthday{width:2.75em}.recurrence-form .table td{border:0;padding:0}.recurrence-form .table td.label{white-space:nowrap}.recurrence-form .table td:first-child label{line-height:2.5}.recurrence-form .table td label.monthday:first-child{margin-top:.5rem}.recurrence-form .input-group-append,.recurrence-form .input-group-prepend{display:initial}#event-status-badge{width:7rem;height:7rem;position:absolute;top:0;right:0;overflow:hidden}#event-status-badge span{display:none;text-transform:uppercase;line-height:20px;position:absolute;left:-2.4rem;top:2.4rem;width:13.2rem;text-align:center;font-weight:700;font-size:.85rem;color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#event-status-badge span:before{display:inline;float:none}.status-cancelled #event-status-badge span{background-color:#ff231f;display:block}.status-cancelled #event-status-badge span:before{content:"\f057"}#alarm-display h3{font-size:1.2rem;margin-bottom:.25rem}#alarm-display h3:before{content:"\f073";font-weight:400;font-size:1em}#alarm-display h3.type-task:before{content:"\f274";font-weight:400}#alarm-display .event-section{font-size:.9rem;color:#828481;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#alarm-display .alarm-actions{text-align:right;margin-bottom:.25rem}#alarm-display .alarm-actions a:first-child{margin-right:1em}#alarm-display .alarm-actions a:before{display:inline;float:none}#alarm-display a.alarm-action-snooze:before{content:"\f1f6"}#alarm-display a.alarm-action-dismiss:before{content:"\f2ed"}#alarm-snooze-dropdown a:before{content:"\f017";font-weight:400}.dialog-message{margin:0;opacity:.95;width:100%;padding:.75em;margin-top:.25em;color:#484e4e;background-color:rgba(255,212,82,.2)}.dialog-message>label{margin:0;display:block}.dialog-message>label label:before{line-height:1.25;margin-right:.25rem}.dialog-message .message{display:flex}.dialog-message+.savemode{margin-top:1rem}.dialog-message+.savemode a.btn{margin-right:.5rem}.dialog-message>.savemode{margin-top:.5rem}.dialog-message>.savemode label{margin-right:1rem}.dialog-message>.savemode input{margin-right:.25rem}@media screen and (max-width:420px){.nav-link.nav-icon{width:3em;margin-right:5px;padding:.5rem .5rem .5rem .65rem}.nav-link.nav-icon:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin:0 1rem 0 0;width:1em;line-height:1.2}.nav-link.nav-icon.resources:before{content:"\f1b2";margin-left:.1rem}.nav-link.nav-icon.attachments:before{content:"\f0c6"}.nav-link.nav-icon.attendees:before{content:"\f0c0"}}.menu a.taskaddlink:before,.menu a.tasklist:before,.menu a.tasklistlink:before{content:"\f274"}.tasklist-invitebox>i.icon:before{content:"\f274"!important}.listing li>div.tasklist .listname:before{content:"\f274"}#tasklist li.taskitem{border-bottom:0}#tasklist li.taskitem div.taskhead{position:relative;display:block;height:3.8rem;padding-left:1.5em;outline:0}#tasklist li.taskitem div.taskhead.flagged{color:#ff5552!important}#tasklist li.taskitem div.taskhead.selected{background-color:#e5f7fc}#tasklist li.taskitem div.taskhead.droptarget{background-color:#ffc}#tasklist li.taskitem div.taskhead.complete span.title{color:rgba(72,78,78,.5)}#tasklist li.taskitem div.taskhead.complete .progressbar{display:none}#tasklist li.taskitem>div,#tasklist li.taskitem>span{border-bottom:1px solid #f1f3f4}#tasklist li.taskitem ul{padding:0;border:0}#tasklist li.taskitem ul li{padding-left:0}#tasklist li.taskitem ul li .taskhead,#tasklist li.taskitem ul li .title{padding-left:3.25em}#tasklist li.taskitem ul li .childtoggle{left:1.5em}#tasklist li.taskitem ul li li .taskhead,#tasklist li.taskitem ul li li .title{padding-left:4.75em}#tasklist li.taskitem ul li li .childtoggle{left:3em}#tasklist li.taskitem ul li li li .taskhead,#tasklist li.taskitem ul li li li .title{padding-left:6.25em}#tasklist li.taskitem ul li li li .childtoggle{left:4.5em}#tasklist li.taskitem ul li li li li .taskhead,#tasklist li.taskitem ul li li li li .title{padding-left:7.75em}#tasklist li.taskitem ul li li li li .childtoggle{left:6em}#tasklist li.taskitem ul li li li li li .taskhead,#tasklist li.taskitem ul li li li li li .title{padding-left:9.25em}#tasklist li.taskitem ul li li li li li .childtoggle{left:7.5em}#tasklist .childtoggle{position:absolute;left:0;top:0;width:1.5em;padding:0 0 0 .25rem;height:3.8rem;cursor:pointer;z-index:1}#tasklist .childtoggle .inner{display:none}#tasklist .childtoggle:before{content:"\f105";margin:0;width:1em;line-height:3.8rem}#tasklist .childtoggle.expanded:before{content:"\f107"}#tasklist .childtoggle.collapsed:before{content:"\f105"}#tasklist span.title{position:absolute;left:0;right:0;bottom:0;line-height:2em;padding:0 0 0 .2em;padding-left:1.75em;margin-right:2em;overflow:hidden;text-overflow:ellipsis}#tasklist span.tags{position:absolute;right:2em;top:0;line-height:2em;text-align:right}#tasklist span.date{position:absolute;padding-left:.2em;font-size:90%;line-height:2.5;color:#828481;cursor:pointer}#tasklist span.date input{line-height:1;padding:0;margin-top:-2px}#tasklist span.flagged{position:absolute;right:0;top:0;line-height:1.8em;cursor:pointer}#tasklist .taskhead:not(.flagged):hover span.flagged:before{content:"\f024";font-weight:400}#tasklist .taskhead.flagged span.flagged:before{content:"\f024"}#tasklist .progressbar{position:absolute;bottom:1px;left:.2em;right:.2em}#tasklist .progressbar .progressvalue{border-top:2px solid #ffd452}#tasklist .custom-switch{position:absolute;top:1.4rem;z-index:1;height:2.3em}#tasklist .actions{display:none}@media screen and (min-width:1200px){#tasklist .taskhead{border-left:2px solid transparent}#tasklist .taskhead.focused{border-left:2px solid #acdff3;outline:0}}html.touch #tasklist li{font-size:1rem}html.touch #tasklist .custom-switch,html.touch #tasklist inputtype=checkbox,html.touch #tasklist span.flagged{display:none}html.touch #tasklist span.title{margin-right:.5rem}html.touch #tasklist span.tags{right:.5rem}#taskshow+.formbuttons button.disabled{display:none}#taskshow .task-parent-title{color:#828481;font-size:90%;margin-bottom:.5rem}#taskshow .task-title{font-size:1.5rem;font-weight:700}#taskshow .task-description{margin:1rem 0}#taskshow.status-completed h2{color:rgba(72,78,78,.5)}#taskshow.status-flagged h2:before{content:"\f024";color:#ff5552;font-size:.9em}#taskshow .attachmentslist li{margin-right:1em}#taskedit-attachment-form{position:absolute}.messagetasklinks>i.icon:before{content:"\f274"!important}.messagetasklinks .tasklist{list-style-type:none;margin:0;padding:0}.messagetasklinks .tasklist li{display:flex;align-items:center}.messagetasklinks input{height:auto!important}#print-layout #tasklist{padding:0}#print-layout #tasklist li{list-style-type:none}#print-layout #tasklist .description{display:block;white-space:pre-wrap}#print-layout #tasklist .title{position:relative;font-weight:700;padding:0;margin:0}#print-layout #tasklist .taskhead{height:auto}.taskitem-draghelper{overflow:hidden;text-overflow:ellipsis}@media screen and (max-height:750px) and (min-width:769px){html.dark-mode #taskmenu a{width:41px}}html.dark-mode .watermark{background-color:#21292c;background-blend-mode:soft-light}html.dark-mode .watermark:before{background:0 0}html.dark-mode #filelistcontainer,html.dark-mode .fc-scroller{scrollbar-width:thin}html.dark-mode .fc .fc-header-toolbar{background-color:#374549}html.dark-mode .fc #timezone-display,html.dark-mode .fc .fc-center h2{color:#c5d1d3}html.dark-mode .filelist tr.session.owner>td.name::after,html.dark-mode .resources-dialog .listing li.resource>a,html.dark-mode .rsvp-status:not(.accepted):not(.tentative):not(.declined)::before{color:#c5d1d3}html.dark-mode #tasklist li.taskitem>div,html.dark-mode #tasklist li.taskitem>span,html.dark-mode .fc-unthemed .fc-content,html.dark-mode .fc-unthemed .fc-divider,html.dark-mode .fc-unthemed .fc-list-heading td,html.dark-mode .fc-unthemed .fc-list-view,html.dark-mode .fc-unthemed .fc-popover,html.dark-mode .fc-unthemed .fc-row,html.dark-mode .fc-unthemed td,html.dark-mode .fc-unthemed th{border-color:#2c373a}html.dark-mode .calendar-scheduler .attendees-list div.attendee,html.dark-mode .calendar-scheduler .schedule-table .timesheader,html.dark-mode .calendar-scheduler .schedule-table td.attendees .attendees-list,html.dark-mode .calendar-scheduler .schedule-table td.times td,html.dark-mode .fc-unthemed td,html.dark-mode .fc-unthemed th,html.dark-mode .files-dialog .selection-content{border-color:#4d6066}html.dark-mode #resource-availability .fc,html.dark-mode #resource-availability .fc-view{border-color:#4d6066}html.dark-mode .edit-attendees-table th,html.dark-mode .selection-dialog .form-addon,html.dark-mode .selection-dialog .header,html.dark-mode .selection-dialog .selection-list{border-color:#4d6066!important}html.dark-mode .selection-dialog .form-addon,html.dark-mode .selection-dialog .header,html.dark-mode .selection-dialog .listing ul{background-color:transparent}html.dark-mode #tasklist li.taskitem div.taskhead.selected,html.dark-mode .fc-unthemed .fc-divider,html.dark-mode .fc-unthemed .fc-list-heading td,html.dark-mode .fc-unthemed .fc-popover .fc-header,html.dark-mode .listing li.selected>div>*,html.dark-mode body.task-calendar .ui-datepicker-inline .ui-datepicker-activerange{color:#53bce6;background-color:#374549}html.dark-mode #folder-mount-form td.source.selected{background-color:#374549}html.dark-mode #tagsform option,html.dark-mode .tagedit-list li.tagedit-listelement-new input{color:#c5d1d3}html.dark-mode #kolabnoteslist td.date,html.dark-mode #notedetailstitle .dates,html.dark-mode #tasklist span.date,html.dark-mode .availability span,html.dark-mode .calendar-agenda-preview .event-row.current,html.dark-mode .fc .fc-axis,html.dark-mode .fc .fc-day-header,html.dark-mode .fc .fc-day-number,html.dark-mode .fc .fc-week-header,html.dark-mode .fc .fc-week-number,html.dark-mode .formcontent.text-only .faded *,html.dark-mode .invitebox .rsvp-status.hint,html.dark-mode .invitebox td.label{color:#8ba3a7}html.dark-mode .invitebox .folder-select select{background-color:#21292c}html.dark-mode .tagedit-listtabindex="-1"{border-color:#53bce6;box-shadow:0 0 0 .2rem rgba(83,188,230,.25);background:#2c373b}html.dark-mode #tasklist .progressbar .progressvalue{border-color:#997f31}html.dark-mode .listing li.readonly:not(.virtual)>div a:first-child:after,html.dark-mode .listing li>div.readonly a:first-child:after{color:#c5d1d3;background-color:#21292c}html.dark-mode .dialog-message{opacity:1;color:#c5d1d3;background-color:#997f31}
3
\ No newline at end of file
4
+#alarm-display .alarm-actions a:before,#alarm-display h3:before,#delegate-table td:before,#devices-table td:not(.selection):before,#event-status-badge span:before,#eventshow .event-partstat .changersvp:before,#kolabnoteslist td.title:before,#taglist li:before,#tagsform option:before,#tasklist .childtoggle:before,#tasklist .taskhead.flagged span.flagged:before,#tasklist .taskhead:not(.flagged):hover span.flagged:before,#taskshow.status-flagged h2:before,.attendee:before,.availability span:before,.calendar-scheduler .schedule-buttons .next-slot:after,.document-editor-header #collaborators a.button.add:before,.edit-attendees-table th.invite label:before,.editors-dialog table td.options a.delete:before,.fc .fc-time i:before,.fc button.next:before,.fc button.prev:before,.filelist tbody td.filename span:before,.filelist tr.session>td.name:after,.folderlist li.mailbox a.subscription.subscribed:before,.listing li.readonly:not(.virtual)>div a:first-child:after,.listing li>div span.subscribed:before,.listing li>div.calendar .calname:before,.listing li>div.folder .listname:before,.listing li>div.readonly a:first-child:after,.listing li>div.tasklist .listname:before,.resources-dialog .listing li.resource>a:before,.rsvp-status.accepted:before,.rsvp-status.declined:before,.rsvp-status.delegated:before,.rsvp-status.loading:before,.rsvp-status.needs-action:before,.rsvp-status.tentative:before,a.btn.fromcloud:before,a.button.filesaveall:before,a.button.saveas:before,fieldset.categories .input-group a.button.create:before,li>a.icon.saveas:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}@media screen and (min-width:1200px){.listing li>div>a{border-left:2px solid transparent}.listing li>div>a:focus{border-left:2px solid #acdff3;outline:0}}.listing li>div{display:flex}.listing li>div>a:first-child{overflow:hidden;text-overflow:ellipsis;position:relative;flex-grow:1}.listing li>div>a:first-child+input{position:initial}.listing li>div .custom-switch{position:relative}.listing li>div.folder .listname:before{content:"\f249";margin-right:.5rem}.listing li>div span.actions{display:flex}input+.listing li>div span.actions{padding-right:2em}.listing li>div span.actions a{padding:0;margin:0;margin-right:.2rem;cursor:pointer}.listing li>div span.actions a:before{margin:0}.listing li>div span.actions a.remove{display:none}html.touch .listing li>div span.actions{padding-left:.2rem}html.touch .listing li>div span.actions a{margin-right:.5rem}.listing li>div a.quickview:before{content:"\f06e";opacity:.2;color:#03ade4}.listing li>div a.quickview:after{display:none!important}.listing li>div.focusview a.quickview:before{content:"\f06e";opacity:1}.listing li>div .subscribed{cursor:pointer;padding:0!important;border-left:0;width:auto}.listing li>div .subscribed:before{content:"\f02e";font-weight:400;height:auto;color:#03ade4;margin-right:.25rem}.listing li>div span.subscribed:before{content:"\f02e";font-weight:400}.listing li>div.subscribed .subscribed:before{content:"\f02e";font-weight:900}.listing li.selected>div>*{color:#484e4e;background-color:#e5f7fc}.listing li.readonly:not(.virtual)>div a:first-child:after,.listing li>div.readonly a:first-child:after{content:"\f023";position:absolute;left:2.25rem;top:17.5px;font-size:.9em!important;width:.9em;line-height:1;height:1em!important;background-color:#fff;border-radius:50% 50% 0 0;color:#484e4e;opacity:.9}html.touch .listing li.readonly:not(.virtual)>div a:first-child:after,html.touch .listing li>div.readonly a:first-child:after{top:23.5px;left:2.7rem}.listing li.other.user>div a:first-child:before,.listing li>div.other.user>.listname:before{content:"\f007";font-weight:900}.listing li.virtual.user>div a:first-child:after,.listing li>div.virtual.user>.listname:after{display:none}.listing li.virtual.shared>div a:first-child:before,.listing li>div.virtual.shared>.listname:before{content:"\f1e0";font-weight:900}.listing li.virtual.shared>div a:first-child:after,.listing li>div.virtual.shared>.listname:after{display:none}.listing li.virtual>div>a{opacity:.5}.listing.treelist:not(.notree)>li>div>a{padding-left:1.5em}.listing li.droptarget>div{background-color:#ffc}.listing li .count{position:absolute;top:0;right:0;min-width:2em;line-height:1.4rem;margin:7.7px;padding:0 .3em;border-radius:.4em;background:#828481;color:#fff;text-align:center;font-weight:700}html.touch .listing li .count{line-height:2rem;margin:9.5px}.treelist ul li a:first-child:after{margin-left:1.7em!important}.treelist ul li li a:first-child:after{margin-left:3.4em!important}.treelist ul li li li a:first-child:after{margin-left:5.1em!important}.treelist ul li li li li a:first-child:after{margin-left:6.8em!important}.treelist ul li li li li li a:first-child:after{margin-left:8.5em!important}.treelist ul li li li li li li a:first-child:after{margin-left:10.2em!important}.treelist.notree li a:first-child:after{left:1.3rem!important}.searchresults .boxtitle{line-height:2rem!important;font-size:80%;padding:0 .5rem;margin:0;color:#828481;background-color:#f8f7f4;text-align:center;border-bottom:1px solid #d4dbde}.folderlist li.mailbox.type-event>a:before{content:"\f133";font-weight:900}.folderlist li.mailbox.type-task>a:before{content:"\f274";font-weight:900}.folderlist li.mailbox.type-journal>a:before{content:"\f133";font-weight:400}.folderlist li.mailbox.type-contact>a:before{content:"\f2b9";font-weight:400}.folderlist li.mailbox.type-note>a:before{content:"\f249";font-weight:400}.folderlist li.mailbox.type-configuration>a:before{content:"\f013";font-weight:900}.folderlist li.mailbox.type-freebusy>a:before{content:"\f133";font-weight:400}.folderlist li.mailbox.type-file>a:before{content:"\f07b";font-weight:900}.menu li.search{padding:.25rem .5rem}.menu a.history:before{content:"\f1da"}button.btn.save.notify:before{content:"\f0e0"}button.btn.print:before{content:"\f02f"}.watermark{background:url("../../../../skins/plesk/images/logo.svg") center no-repeat #fff;background-size:30%;background-blend-mode:luminosity;width:100%;height:100%}.watermark>*{display:none}.watermark:before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,.85)}.watermark.formcontainer{background:0 0!important}.watermark.formcontainer:before{display:none}.watermark.formcontainer>*{display:block}html.layout-phone .watermark.formcontainer,html.layout-small .watermark.formcontainer{overflow-y:auto!important}.form-group>.datetime{display:flex;white-space:nowrap}.form-group>.datetime input{width:10em}.form-group>.datetime input:first-child{margin-right:.5rem;width:15em}.form-group>.datetime a{margin-left:1em;text-align:right;flex:1;line-height:2.4}.form-section.form-group.form-check{display:flex;padding:0}.form-section.form-group.form-check label{order:10}.formcontent.text-only .faded *{color:#828481}.linkslist{border:0!important;background:0 0!important}.linkslist li.link{padding:0}.linkslist li.link.message.eml:before{content:"\f0e0"}.linkslist li.link a.messagelink{overflow:hidden;text-overflow:ellipsis}.linkslist li.link a.delete .inner{display:none}.print-config{position:fixed;top:0;left:0;width:100%;z-index:10000;padding:.5em 1em;background-color:#f8f7f4}.print-config button.print{margin-right:1rem}.print-config .prop{line-height:2;margin-left:.5rem;display:inline-block;vertical-align:middle}.print-config .prop label{margin:0}@media print{.print-config{display:none}}.print-config+.print-content{position:relative;top:0;left:0;height:auto;margin:5em auto 0 auto;overflow:visible}.selection-dialog .ui-dialog-content{display:flex!important;overflow:hidden!important}.selection-dialog .selection-list{display:flex;flex-direction:column;border:1px solid #d4dbde;justify-content:center}.selection-dialog .ui-dialog-content .popupmenu{display:flex!important;width:100%}.selection-dialog .scroller{flex:1;overflow-y:auto}.selection-dialog .header{border-bottom:1px solid #d4dbde;display:flex;background-color:#f2eeeb;font-size:1rem;font-weight:700;line-height:58px;height:58px;min-height:58px;padding:0 .25em;position:relative;overflow:hidden;white-space:nowrap}.selection-dialog .header a.button{color:#677;margin:0 .3rem}.selection-dialog .header a.button:before{margin:0}.selection-dialog .header-title{width:100%;text-align:center;margin:0 2em}.selection-dialog .selection-content{display:flex;flex-direction:column}.selection-dialog .tab-content{margin-top:1rem;height:100%;overflow-y:auto}.selection-dialog .form-addon{margin:0;padding:.5rem 0;width:100%;background-color:#f8f7f4;border-top:1px solid #d4dbde}.selection-dialog .listing ul{background-color:#fff}.selection-dialog .listing li.selected{color:#484e4e}@media screen and (max-width:768px){.selection-dialog .ui-dialog-content{padding:0!important}.selection-dialog .ui-dialog-titlebar{display:none;margin:0}.selection-dialog .selection-list{border:0}.selection-dialog .selection-content .header-title,.selection-dialog .selection-list .header-title{margin-left:0}.selection-dialog .header a:before{font-size:1.75rem}}@media screen and (max-height:750px) and (min-width:769px){#layout-menu,#layout-menu .popover-header img{width:42px}#taskmenu a{height:42px;width:42px;font-size:1.2rem!important}#taskmenu .special-buttons{width:42px}#taskmenu span.inner{display:none}}.menu a.calendarlink:before{content:"\f073"}.menu a.send:before{content:"\f1d8"}.listing.iconized li.resource>i:before{content:"\f1b2"}a.button.today:before{content:"\f133";font-weight:400}a.button.date:before{content:"\f073";font-weight:400}.listing li>div.calendar .calname:before{content:"\f073"}.listing li>div.calendar .actions{padding-right:.25rem}.listing li>div.calendar .actions :last-child{margin-right:0}.listing li>div.calendar.cal---invitation--declined .calname:before,.listing li>div.calendar.cal---invitation--pending .calname:before{content:"\f073";font-weight:400}.listing li>div.calendar.cal-__bdays__ .calname:before{content:"\f1fd"}.listing li>div.calendar.cal---invitation--declined,.listing li>div.calendar.cal---invitation--pending,.listing li>div.calendar.cal-__bdays__{font-style:italic}.listing li>div.calendar.cal---invitation--declined a.calname,.listing li>div.calendar.cal---invitation--pending a.calname,.listing li>div.calendar.cal-__bdays__ a.calname{padding-right:2.5em}.listing li>div.calendar.cal---invitation--declined .count,.listing li>div.calendar.cal---invitation--pending .count,.listing li>div.calendar.cal-__bdays__ .count{right:4.2em;font-style:normal}.listing li span.handle{display:none}#calendarcategories .input-group:not(:last-child){margin-bottom:.25rem}fieldset.categories .input-group .minicolors-input{border-radius:0}fieldset.categories .input-group .minicolors+.input-group-append{margin-left:0}fieldset.categories .input-group a.button.create:before{content:"\f067";line-height:1}.calendar-invitebox>i.icon:before{content:"\f133"!important}.calendar-agenda-preview{display:none;margin-top:.5rem;border-top:1px solid #ddd}.calendar-agenda-preview h3{margin-top:.5rem}.calendar-agenda-preview .event-row{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-agenda-preview .event-row.current{color:#333;font-weight:700}.calendar-agenda-preview .event-row.no-event{font-style:italic}.calendar-agenda-preview .event-row.fc-invitation-needs-action{color:#828481}.calendar-agenda-preview .event-row.fc-invitation-needs-action .event-title{font-style:italic}.calendar-agenda-preview .event-title{padding-left:.5rem}#calendar.content{overflow:hidden!important;position:relative}.calendar-datepicker .ui-datepicker{margin:0!important;border:0;border-radius:0;width:auto;min-width:auto!important;font-size:.9rem;background-color:#f8f7f4}.calendar-datepicker .ui-datepicker table{margin:0}.calendar-datepicker .ui-datepicker td a{font-size:.9rem!important}.calendar-datepicker .ui-datepicker-header{background-color:#f8f7f4;border-top:1px solid #d4dbde}.ui-dialog .calendar-datepicker .ui-datepicker{background:0 0}.ui-dialog .calendar-datepicker .ui-datepicker-header{background:0 0;border:0}.ui-dialog .calendar-datepicker td a{line-height:3em!important;font-size:1rem!important}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}body .fc{font-size:1em}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-default{background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-button-group{display:inline-block}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-popover .fc-header .fc-close{cursor:pointer}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc-bg{bottom:0}.fc-bg table{height:100%}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}adata-goto{cursor:pointer}adata-goto:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover{color:#fff;text-decoration:none}.fc-event.fc-draggable,.fc-eventhref{cursor:pointer}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4}.fc-event .fc-resizer{display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}.fc-icon{display:inline-block;height:1em;line-height:1em;font-size:1em;text-align:center;overflow:hidden;font-family:"Courier New",Courier,monospace;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\2039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\D7";font-size:200%;top:6%}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.ui-widget .fc-disabled-day{background-image:none}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.ui-widget .fc-event{color:#fff;text-decoration:none;font-weight:400}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-toolbar{text-align:center}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px 0}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number{text-align:center}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{position:relative;z-index:3}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight-container{position:relative}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event{overflow:hidden}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\A0-\A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt{float:right}.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title ahref:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee}body.quickview-active .fc .fc-scroller{background:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20576%20512%22%3E%3Cpath%20fill%3D%22%23f2f2f2%22%20d%3D%22M569.354%20231.631C512.969%20135.949%20407.81%2072%20288%2072%20168.14%2072%2063.004%20135.994%206.646%20231.631a47.999%2047.999%200%200%200%200%2048.739C63.031%20376.051%20168.19%20440%20288%20440c119.86%200%20224.996-63.994%20281.354-159.631a47.997%2047.997%200%200%200%200-48.738zM288%20392c-75.162%200-136-60.827-136-136%200-75.162%2060.826-136%20136-136%2075.162%200%20136%2060.826%20136%20136%200%2075.162-60.826%20136-136%20136zm104-136c0%2057.438-46.562%20104-104%20104s-104-46.562-104-104c0-17.708%204.431-34.379%2012.236-48.973l-.001.032c0%2023.651%2019.173%2042.823%2042.824%2042.823s42.824-19.173%2042.824-42.823c0-23.651-19.173-42.824-42.824-42.824l-.032.001C253.621%20156.431%20270.292%20152%20288%20152c57.438%200%20104%2046.562%20104%20104z%22%2F%3E%3C%2Fsvg%3E") center no-repeat;background-size:50%}.fc .fc-header-toolbar{display:flex;background-color:#f8f7f4;margin:0}.fc .fc-header-toolbar>*>*{float:none;margin:0}.fc .fc-left{order:1}.fc .fc-left .fc-button-group{display:none}.fc .fc-center{flex:1;order:2;text-align:center;padding:.25rem}.fc .fc-center h2{margin:0;color:#828481;white-space:nowrap;font-size:1.25rem;font-weight:700}.fc .fc-right{order:3;text-align:right}.fc .fc-right .fc-button{display:none}.fc button{height:unset;padding:.3rem .75rem}.fc button.prev:before{content:"\f104";margin:0!important;line-height:1}.fc button.next:before{content:"\f105";margin:0!important;line-height:1}.fc .btn-group{padding:.5rem;margin:0}.fc .fc-type-freebusy{opacity:.6}.fc .fc-type-freebusy .fc-title{position:absolute;top:-5000px}.fc .fc-type-freebusy td{color:#999}.fc .fc-event-dot{background-color:#c00}.fc a.fc-event,.fc a.fc-event:hover{color:#fff}.fc .fc-event{font-size:13px;background-color:#c00;border-color:#c00}.fc .fc-event .fc-title{font-weight:700}.fc .fc-event .fc-bg{opacity:.15;margin-top:1.1rem}.fc .fc-event.fc-invitation-declined,.fc .fc-event.fc-invitation-needs-action,.fc .fc-event.fc-invitation-tentative{border:1px dashed #999}.fc .fc-event.fc-event-ns-other.fc-invitation-declined{opacity:.7}.fc .fc-event.fc-event-ns-other.fc-invitation-declined .fc-title{text-decoration:line-through}.fc .fc-event.fc-invitation-tentative .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAOuJAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-event.fc-invitation-needs-action .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAFdXx////yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-event.fc-invitation-declined .fc-bg{background:url(data:image/gif;base64,R0lGODlhCAAIAPABAMwAAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff}.fc .fc-list-view tr.fc-invitation-declined,.fc .fc-list-view tr.fc-invitation-needs-action,.fc .fc-list-view tr.fc-invitation-tentative{color:#888}.fc .fc-list-view tr.fc-invitation-declined .fc-event-dot,.fc .fc-list-view tr.fc-invitation-needs-action .fc-event-dot,.fc .fc-list-view tr.fc-invitation-tentative .fc-event-dot{background-color:#888}.fc .cal-event-status-cancelled,.fc .fc-declined,.fc .fc-needs-action{opacity:.6}.fc .fc-time i{display:inline-block;width:1em;height:1em;margin-left:.25rem}.fc .fc-time i:before{font-size:1em;line-height:1;margin-top:.1rem}.fc .fc-time i.fc-icon-recurring:before{content:"\f24d";font-weight:400}.fc .fc-time i.fc-icon-alarms:before{content:"\f0f3"}.fc .fc-event-temp{opacity:.4}.fc .fc-nonbusiness{background-color:rgba(130,132,129,.2)}.fc .fc-day.fc-today{background:rgba(255,212,82,.2)!important}.fc .fc-now-indicator{border-color:#95bb41;border-width:1.5px}.fc .fc-list-item,.fc .fc-list-item:hover td{background:0 0}.fc .fc-list-item a,.fc .fc-list-item td{cursor:default}.fc .fc-list-item-title{font-weight:700}.fc .fc-list-table td{padding:.5rem}.fc .fc-list-heading td{background:rgba(130,132,129,.1)}.fc .fc-list-empty{display:none}.fc .fc-more{color:#03ade4!important;white-space:nowrap}.fc .fc-axis,.fc .fc-day-header,.fc .fc-day-number,.fc .fc-week-header,.fc .fc-week-number{color:#828481;font-size:.95rem;padding:.15rem!important}.fc .fc-week-number{text-align:center}.fc .fc-popover{border-radius:.3rem}.fc .fc-popover .fc-header{color:#828481;font-size:.95rem;font-weight:700}.fc .fc-popover .fc-icon-x::after{top:3px}.fc .fc-view.fc-widget-content,.fc td.fc-head-container{border-left-width:0}.fc .fc-body .fc-bg .fc-widget-content,.fc .fc-body .fc-bg-sceleton .fc-widget-content,.fc .fc-body>tr>.fc-widget-content,.fc .fc-list-view{border-bottom-width:0}.print-content .fc .fc-header-toolbar{background-color:#fff}.print-content .fc .fc-center h2{color:#000;padding-bottom:.75rem;font-size:1.5rem!important}.print-content .fc .fc-day.fc-today{background:0 0!important}.print-content .fc a.fc-event{color:#000;background-color:#fff!important}.print-content .fc .fc-event-description{white-space:pre-wrap;font-size:90%}.print-content .fc .fc-event-location{width:20%}.print-content .fc .fc-event-row-secondary td{border:0;padding-top:0!important}.print-content .fc .fc-scroller{overflow:visible!important;height:auto!important}.print-content .fc .fc-view.fc-widget-content,.print-content .fc td.fc-head-container{border-left-width:1px}.print-content .fc .fc-agenda-view,.print-content .fc .fc-list-view,.print-content .fc .fc-month-view{border-bottom:1px solid #ddd}@media screen and (max-width:768px){.fc .fc-left{display:block;width:100%;padding:0}.fc .fc-left button{flex:1 1 auto;border-radius:0}.fc .fc-left .btn-group{padding:0;display:flex}.fc .fc-center,.fc .fc-list-table .fc-event-location,.fc .fc-right{display:none}}@media screen and (min-width:769px) and (max-width:920px){.fc .fc-center{overflow:hidden;text-overflow:ellipsis;flex:1}.fc .fc-center h2{font-size:1rem;line-height:1;padding-top:.45rem}.fc .fc-left .btn,.fc .fc-right .btn{padding-left:.5rem;padding-right:.5rem}}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar{-webkit-appearance:none}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar:vertical,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar:vertical,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar:vertical{width:.6rem}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar:horizontal,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar:horizontal,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar:horizontal{height:.6rem}html:matches(.ipad,.iphone) #fish-eye-view::-webkit-scrollbar-thumb,html:matches(.ipad,.iphone) .fc-scroller::-webkit-scrollbar-thumb,html:matches(.ipad,.iphone) .ui-dialog-content:not(.iframe)::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.4);border-radius:.3rem;border:2px solid #fff}body.task-calendar #print-layout #calendar-view-selector{float:right;padding-top:.25rem}body.task-calendar #print-layout #calendarlist{margin-top:1rem}body.task-calendar #print-layout #calendarlist,body.task-calendar #print-layout #calendarlist ul{list-style:none;padding:0}body.task-calendar #print-layout #calendarlist li{display:inline-block;white-space:nowrap}body.task-calendar #print-layout #calendarlist div,body.task-calendar #print-layout #calendarlist li,body.task-calendar #print-layout #calendarlist ul{float:left}body.task-calendar #print-layout #calendarlist div{margin-right:2rem}body.task-calendar #print-layout #calendarlist a{text-decoration:none;cursor:auto}body.task-calendar #print-layout #calendarlist input,body.task-calendar #print-layout #calendarlist span.actions,body.task-calendar #print-layout #calendarlist span.handle{display:none}@media screen and (min-width:769px){body.task-calendar #layout-sidebar{flex:2;max-width:400px;min-width:240px}}body.task-calendar .ui-datepicker td{width:12.5%}body.task-calendar .ui-datepicker .ui-datepicker-week-col{color:#d4dbde;text-align:center}body.task-calendar .ui-datepicker-inline .ui-datepicker-week-col{color:#03ade4;cursor:pointer}body.task-calendar .ui-datepicker-inline .ui-datepicker-activerange{background-color:#e5f7fc}#timezone-display{font-size:.9rem;color:#828481}#agendaoptions{padding:0 .5rem .5rem .5rem;display:flex;background-color:#f8f7f4}#agendaoptions .input-group{padding-right:.5rem;flex-wrap:nowrap}#agendaoptions .input-group:last-child{padding-right:0}#agendaoptions select{min-width:7em}#agendaoptions .input-group-prepend{overflow:hidden;margin-bottom:0}#agendaoptions .input-group-prepend span{display:block;overflow:hidden;text-overflow:ellipsis}#eventshow{margin:0}#eventshow .event-title{font-size:1.5rem;font-weight:700}#eventshow .event-location{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#eventshow .event-description{margin:1rem 0}#eventshow .event-attendees{margin-bottom:1rem}#eventshow .event-attendees .attendee{margin-right:.25rem}#eventshow .event-partstat>span{display:flex}#eventshow .event-partstat .rsvp-status:before{display:inline;float:none}#eventshow .event-partstat .changersvp{cursor:pointer;font-size:1.2rem;margin-left:1em}#eventshow .event-partstat .changersvp:before{content:"\f14b";float:none;display:inline;line-height:1}#eventshow .event-partstat .inner{display:none}#eventedit .edit-attendees-table td{padding-top:.15rem}#eventedit .edit-attendees-table td.role{padding-left:0;width:9em}#fish-eye-view{padding:0}@media screen and (min-width:769px){#fish-eye-view{border-bottom:1px solid #d4dbde}}.availability span{margin-right:.5rem;color:#828481}.availability span:before{content:"\f0c8";display:inline;float:none}.availability span.legend:before{font-size:1em}.availability span.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";display:block;line-height:1}.availability span.unknown:before{color:#bbb}.availability span.free:before{color:#95bb41}.availability span.busy:before{color:#ff5552}.availability span.tentative:before{color:#8383fc}.availability span.out-of-office:before{color:#fbaa68}.datetime .custom-switch{padding-left:.5rem}.datetime .custom-switch label{line-height:2;margin-top:.2rem}.datetime input{width:10em!important}@media screen and (max-width:420px){.datetime input{width:8em!important}.datetime input+input{width:6em!important}}.calendar-scheduler .nav{align-items:center}.calendar-scheduler .nav button:first-child{margin-right:.25rem}.calendar-scheduler .nav>div{white-space:nowrap}@media screen and (max-width:420px){.calendar-scheduler .nav button{padding-left:.5rem;padding-right:.5rem}}.calendar-scheduler .schedule-buttons .prev-slot:before{content:"\f053"}.calendar-scheduler .schedule-buttons .next-slot:after{content:"\f054";display:inline-block;float:none;margin-right:0}.calendar-scheduler .schedule-options{flex:1;margin-left:1rem}html.layout-phone .calendar-scheduler .schedule-options{order:100;margin-left:0}.calendar-scheduler .schedule-nav{flex:1;margin-left:.3rem;text-align:right}.calendar-scheduler .schedule-nav button{line-height:1.8}.calendar-scheduler .schedule-range{width:60%;margin-top:2rem}html.layout-phone .calendar-scheduler .schedule-range{margin:0}.calendar-scheduler .schedule-legend .attendee{margin-right:.5rem}.calendar-scheduler .attendees-list{position:relative}.calendar-scheduler .attendees-list a.attendee-role-toggle{position:absolute;left:0;display:inline-block;width:1em;cursor:pointer}.calendar-scheduler .attendees-list div.attendee{border-top:1px solid #f1f3f4;line-height:1.7rem;height:1.8rem}.calendar-scheduler .attendees-list .attendee{white-space:nowrap}.calendar-scheduler .attendees-list .attendee.spacer{height:10px}.calendar-scheduler .attendees-list .attendee.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";font-weight:900}.calendar-scheduler .attendees-list .attendee.total{font-weight:700}.calendar-scheduler .attendees-list .attendee.spacer:before,.calendar-scheduler .attendees-list .attendee.total:before{display:none}.calendar-scheduler .schedule-table{table-layout:fixed}.calendar-scheduler .schedule-table th{border-top:0}.calendar-scheduler .schedule-table td.attendees{width:25%;overflow:hidden;border-top:0}html.layout-phone .calendar-scheduler .schedule-table td.attendees{width:35%}.calendar-scheduler .schedule-table td.attendees .attendees-list{border-bottom:1px solid #d4dbde}.calendar-scheduler .schedule-table td.times{width:auto;border-top:0}.calendar-scheduler .schedule-table td.times table{margin:0}.calendar-scheduler .schedule-table td.times td{height:1.8rem;border-top:1px solid #f1f3f4;white-space:nowrap}.calendar-scheduler .schedule-table div.scroll{position:relative;overflow:auto}.calendar-scheduler .schedule-table .timesheader{height:1.4rem;border-top:1px solid #d4dbde}.calendar-scheduler .schedule-table .boxtitle{margin:0;padding:0;font-size:1rem;font-weight:700;padding-top:.5rem;line-height:2}.calendar-scheduler .schedule-table td{padding:4px}.calendar-scheduler .schedule-table tbody td{padding:0}.calendar-scheduler .schedule-table tbody td div{height:100%}.calendar-scheduler .schedule-table tr.spacer td{padding:0;height:10px}.calendar-scheduler .schedule-table tr.dates thcolspan="1"{min-width:48px;max-width:48px;text-align:center;font-size:.7rem;line-height:2.9}.calendar-scheduler .schedule-table tr.times td{cursor:pointer;min-width:48px;max-width:48px;font-size:.7rem;text-align:center;color:#03ade4;height:1.4rem;padding:0 .1rem;vertical-align:middle;border-top:1px solid #d4dbde;border-left:1px solid #f1f3f4}.calendar-scheduler .schedule-table .fbcontent td{border-left:1px solid #f1f3f4}.calendar-scheduler .schedule-table .fbcontent:last-child td{border-bottom:1px solid #d4dbde}.calendar-scheduler .schedule-table div.unknown{background-color:#bbb}.calendar-scheduler .schedule-table div.free{background-color:#95bb41}.calendar-scheduler .schedule-table div.busy{background-color:#ff5552}.calendar-scheduler .schedule-table div.tentative{background-color:#8383fc}.calendar-scheduler .schedule-table div.out-of-office{background-color:#fbaa68}.calendar-scheduler .schedule-table div.all-busy,.calendar-scheduler .schedule-table div.all-out-of-office,.calendar-scheduler .schedule-table div.all-tentative{overflow:hidden}.calendar-scheduler .schedule-table div.all-busy span,.calendar-scheduler .schedule-table div.all-out-of-office span,.calendar-scheduler .schedule-table div.all-tentative span{display:block;width:300%;height:300%;border:1px solid #fff;background:#ff231f;transform:rotate(42deg) translate(2%)}.calendar-scheduler .schedule-table div.all-busy.w10 span,.calendar-scheduler .schedule-table div.all-out-of-office.w10 span,.calendar-scheduler .schedule-table div.all-tentative.w10 span{display:none}.calendar-scheduler .schedule-table div.all-busy.w20 span,.calendar-scheduler .schedule-table div.all-busy.w25 span,.calendar-scheduler .schedule-table div.all-out-of-office.w20 span,.calendar-scheduler .schedule-table div.all-out-of-office.w25 span,.calendar-scheduler .schedule-table div.all-tentative.w20 span,.calendar-scheduler .schedule-table div.all-tentative.w25 span{transform:rotate(17deg) translate(-9%)}.calendar-scheduler .schedule-table div.all-busy.w30 span,.calendar-scheduler .schedule-table div.all-out-of-office.w30 span,.calendar-scheduler .schedule-table div.all-tentative.w30 span{transform:rotate(28deg) translate(-7%)}.calendar-scheduler .schedule-table div.all-busy.w33 span,.calendar-scheduler .schedule-table div.all-out-of-office.w33 span,.calendar-scheduler .schedule-table div.all-tentative.w33 span{transform:rotate(32deg) translate(-5%)}.calendar-scheduler .schedule-table div.all-busy.w40 span,.calendar-scheduler .schedule-table div.all-out-of-office.w40 span,.calendar-scheduler .schedule-table div.all-tentative.w40 span{transform:rotate(36deg) translate(-3%)}.calendar-scheduler .schedule-table div.all-busy.w60 span,.calendar-scheduler .schedule-table div.all-out-of-office.w60 span,.calendar-scheduler .schedule-table div.all-tentative.w60 span{transform:rotate(48deg) translate(6%)}.calendar-scheduler .schedule-table div.all-busy.w67 span,.calendar-scheduler .schedule-table div.all-out-of-office.w67 span,.calendar-scheduler .schedule-table div.all-tentative.w67 span{transform:rotate(52deg) translate(9%)}.calendar-scheduler .schedule-table div.all-busy.w70 span,.calendar-scheduler .schedule-table div.all-busy.w75 span,.calendar-scheduler .schedule-table div.all-out-of-office.w70 span,.calendar-scheduler .schedule-table div.all-out-of-office.w75 span,.calendar-scheduler .schedule-table div.all-tentative.w70 span,.calendar-scheduler .schedule-table div.all-tentative.w75 span{transform:rotate(55deg) translate(12%,30%)}.calendar-scheduler .schedule-table div.all-busy.w80 span,.calendar-scheduler .schedule-table div.all-out-of-office.w80 span,.calendar-scheduler .schedule-table div.all-tentative.w80 span{transform:rotate(56deg) translate(13%,30%)}.calendar-scheduler .schedule-table div.all-busy.w90 span,.calendar-scheduler .schedule-table div.all-out-of-office.w90 span,.calendar-scheduler .schedule-table div.all-tentative.w90 span{transform:rotate(59deg) translate(16%,30%)}.calendar-scheduler .schedule-table div.all-busy.w100 span,.calendar-scheduler .schedule-table div.all-out-of-office.w100 span,.calendar-scheduler .schedule-table div.all-tentative.w100 span{transform:rotate(62deg) translate(19%,30%)}.calendar-scheduler .schedule-table div.all-tentative span{background:#5151fb}.calendar-scheduler .schedule-table div.all-out-of-office span{background:#fa8e36}#schedule-event-time{position:absolute;border-radius:.3rem;cursor:move;border:2px solid #444;background-color:rgba(0,0,0,.3)}.resources-dialog .resource-selection{flex:4;min-width:300px}.resources-dialog .resource-content{flex:10;margin-left:1em}.resources-dialog .listing li.resource>a{color:#484e4e}.resources-dialog .listing li.resource>a:before{content:"\f1b2"}.resources-dialog .slot-nav{display:none}#resource-availability{height:100%}#resource-availability .fc{height:100%;overflow:hidden;position:relative;border-bottom:1px solid #ddd}#resource-availability .fc-view{border-left:1px solid #ddd}#resource-availability .fc-header-toolbar{height:0}.standalone-invitebox{margin:0 auto;max-width:500px;width:95%;display:flex;flex-direction:column;top:15vh;position:relative}.standalone-invitebox #logo{max-height:90px}.standalone-invitebox .invitebox{margin-top:3em!important}@media screen and (min-width:769px){.searchbar a.button.date{display:none}}#rcmfd_alarmvalue{max-width:80px}@media screen and (max-width:768px){#agendaoptions{padding-top:.5rem}.calendar-scheduler .schedule-range{width:100%}#layout-sidebar .calendar-datepicker{display:none}.resources-dialog .resource-content{display:none;margin:0}.resources-dialog .resource-content ul{margin:1em 1em 0 1em}#resource-availability{margin:0 1em}}body.task-calendar .header-title{position:relative}body.task-calendar .header-title .tz{position:absolute;bottom:0;left:0;width:100%;line-height:2;font-size:.8rem;font-weight:400;color:#828481}.listing.iconized li.activesync>a:before{content:"\f143"}#devices-table td:not(.selection){display:flex}#devices-table td:not(.selection):before{content:"\f143"}#devices-table td:not(.selection) span{overflow:hidden;text-overflow:ellipsis}#devices-table .devicealias{flex:1}#devices-table .devicetype{max-width:40%;font-style:italic;padding-left:.5em}.listing.iconized li.delegation>a:before{content:"\f21b"}#delegate-table td:before{content:"\f21b"}a.btn.fromcloud:before,a.button.filesaveall:before,a.button.saveas:before,li>a.icon.saveas:before{content:"\f07b"}.menu a.mount.storage:before{content:"\f1c0"}.menu a.open:before{content:"\f06e"}.menu a.cancel:before{content:"\f00d"}.menu a.share:before{content:"\f1e0"}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder{order:-1}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder:before{content:"\f067"}.folderlist li.collection a.name{padding-left:.5em}.folderlist li.collection.audio a.name:before{content:"\f028";font-weight:900}.folderlist li.collection.video a.name:before{content:"\f03d";font-weight:900}.folderlist li.collection.image a.name:before{content:"\f03e"}.folderlist li.collection.document a.name:before{content:"\f02d";font-weight:900}.folderlist li.collection.sessions a.name:before{content:"\f0c0";font-weight:900}.folderlist li.mailbox a.subscription{cursor:pointer;padding:0!important;border-left:0;width:auto}.folderlist li.mailbox a.subscription:before{content:"\f02e";font-weight:400;height:auto;color:#03ade4;margin-right:.25rem}.folderlist li.mailbox a.subscription.subscribed:before{content:"\f02e";font-weight:900}#filelistcontainer{position:relative}#filesuploadform{position:absolute!important}#filelistbox{height:100%}#filelistbox.droptarget.active{box-shadow:0 0 2px 1px #c2afa1 inset}#filelistbox.droptarget.hover{box-shadow:0 0 2px 1px #c2afa1 inset;background-color:#eae3df}.filelist thead{display:none}.filelist td.options{display:none}.filelist td.name{position:relative}.filelist td.mtime{width:11em}.filelist td.size{text-align:right;width:6em}.filelist tr.session>td.name{padding-right:2em}.filelist tr.session>td.name:after{content:"\f0c0";color:#d4dbde;position:absolute;right:.25em;top:0}.filelist tr.session.invited>td.name:after{color:#95bb41}.filelist tr.session.owner>td.name:after{color:#161b1d}@media screen and (max-width:480px){.filelist td.mtime{display:none}}.filelist tbody td.filename span{background:0 0!important}.filelist tbody td.filename span:before{content:"\f15b";font-weight:400}.filelist tbody td.filename.application_pdf span:before,.filelist tbody td.filename.pdf span:before{content:"\f1c1"}.filelist tbody td.filename.application_msword span:before,.filelist tbody td.filename.application_vnd_ms_word span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_wordprocessingml_document span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_wordprocessingml_template span:before{content:"\f1c2"}.filelist tbody td.filename.application_vnd_ms_excel span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_spreadsheet span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_spreadsheet_template span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_spreadsheetml_sheet span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_spreadsheetml_template span:before{content:"\f1c3"}.filelist tbody td.filename.application_vnd_ms_powerpoint span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_presentation span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_slideshow span:before,.filelist tbody td.filename.application_vnd_openxmlformats_officedocument_presentationml_template span:before{content:"\f1c4"}.filelist tbody td.filename.application_vnd_oasis_opendocument_text span:before{content:"\f15c"}.filelist tbody td.filename.application_vnd_oasis_opendocument_presentation span:before,.filelist tbody td.filename.application_vnd_oasis_opendocument_presentation_template span:before{content:"\f1c4"}.filelist tbody td.filename.application_x_7z_compressed span:before,.filelist tbody td.filename.application_x_ace span:before,.filelist tbody td.filename.application_x_arc span:before,.filelist tbody td.filename.application_x_arj span:before,.filelist tbody td.filename.application_x_bzip_compressed_tar span:before,.filelist tbody td.filename.application_x_lha span:before,.filelist tbody td.filename.application_x_rar span:before,.filelist tbody td.filename.application_x_tarz span:before,.filelist tbody td.filename.application_x_tzo span:before,.filelist tbody td.filename.application_x_zip span:before,.filelist tbody td.filename.application_x_zoo span:before,.filelist tbody td.filename.application_zip span:before,.filelist tbody td.filename.tar span:before{content:"\f1c6"}.filelist tbody td.filename.application_vnd_stardivision_draw span:before,.filelist tbody td.filename.application_vnd_sun_xml_draw span:before,.filelist tbody td.filename.application_vnd_sun_xml_draw_template span:before,.filelist tbody td.filename.image span:before,.filelist tbody td.filename.image_jpeg span:before,.filelist tbody td.filename.image_jpeg2000 span:before,.filelist tbody td.filename.image_png span:before,.filelist tbody td.filename.image_svg_xml span:before,.filelist tbody td.filename.image_x_eps span:before{content:"\f1c5"}.filelist tbody td.filename.audio span:before{content:"\f1c7"}.filelist tbody td.filename.video span:before{content:"\f1c8"}.filelist tbody td.filename.ascii span:before,.filelist tbody td.filename.text_plain span:before{content:"\f15c"}.filelist tbody td.filename.text_html span:before{content:"\f1c9"}#folder-mount-form td.source{display:flex;align-items:flex-start;padding:.5rem}#folder-mount-form td.source.selected{background-color:#e5f7fc}#folder-mount-form td.source>input{height:32px;margin-right:.5rem}#folder-mount-form td.source>div{flex:1}#folder-mount-form td.source img{height:32px;margin-right:.5rem}#folder-mount-form td.source .name{font-weight:700}#folder-mount-form td.source .description{font-size:90%}#folder-mount-form td.source table{margin-top:.5rem}#folder-mount-form td.source .form-group{margin-bottom:0}#folder-mount-form .auth-options{margin-top:.5rem}#folder-mount-form .auth-options>label:before{line-height:1}.files-dialog .selection-list{flex:1;min-width:220px}.files-dialog .selection-content{flex:2}@media screen and (min-width:769px){.files-dialog .selection-content{border:1px solid #d4dbde;border-left:0}}.files-dialog a.subscription{display:none}@media screen and (max-width:768px){.files-dialog .selection-list{display:none}}.document-editor-header .toolbar{text-align:left!important;flex:1}.document-editor-header .toolbar a{text-align:center}.document-editor-header a.button.icon.members:before{content:"\f0c0"}.document-editor-header #collaborators{order:9;display:flex;margin-right:.5rem;margin-left:2rem}.document-editor-header #collaborators a.button.add:before{content:"\f067"}.document-editor-header #collaborators .inner{display:none}.document-editor-header #doc-title{flex:1;order:8}.document-editor-header #doc-title input{display:inline}.session-members img.photo{width:48px;height:48px;min-width:48px;overflow:hidden;background:url("../../../skins/plesk/images/contactpic.png") center center no-repeat #fff;background-size:cover;border-radius:50%;border:solid 3px #eee;margin-left:.5rem}.session-members ul{padding:0;margin:0;list-style-type:none}.session-members ul li{display:flex;align-items:center}.session-members ul img.photo{margin-left:0;margin-right:1em}.editors-dialog table th{border:0}.editors-dialog table tr:last-child td{border-bottom:1px solid #d4dbde}.editors-dialog table td.options{width:1%}.editors-dialog table td.options a.delete:before{content:"\f2ed";display:inline;line-height:1}.editors-dialog label{display:block}button.participant.add:before{content:"\f234"}.iframe-wrapper.file-type-audio,.iframe-wrapper.file-type-video{display:flex;align-items:center;justify-content:center}@media screen and (min-width:769px){.iframe-wrapper.file-type-audio,.iframe-wrapper.file-type-video{padding:1em}}#shareform table td,#shareform table th{padding-left:.15rem;max-width:10vw;overflow:hidden;text-overflow:ellipsis}#shareform table td:last-child,#shareform table th:last-child{padding-right:.15rem;width:1%;max-width:unset}#shareform table td{vertical-align:middle}#shareform table td.form input{margin-bottom:.25rem;width:100%}#shareform table tr+tr>td{border-top:0;padding-bottom:.25rem}#shareform table button{padding:.185rem .75rem;width:100%}.menu a.appendnote:before{content:"\f249"}#noteform iframe{min-height:10rem}#notereferences{margin-top:.5rem}#notereferences .attachmentslist a.delete{margin-left:.5rem}#notedetailstitle .dates{color:#828481}#print-layout #notetitle{font-size:1.5rem;line-height:2}#print-layout #notetags{margin-bottom:.5rem}#print-layout #notecreated{margin-right:2rem}#kolabnoteslist tr{display:flex}#kolabnoteslist td.title{overflow:hidden;text-overflow:ellipsis;flex:1}#kolabnoteslist td.title:before{content:"\f249";font-weight:400}#kolabnoteslist td.date{overflow:unset;color:#828481;font-style:italic}.kolabmessagenotes>i.icon:before{content:"\f249"!important;font-weight:400!important}.kolabmessagenotes>a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;text-decoration:none}.menu a.tags:before{content:"\f02c"}.menu a.tag.remove.all:before,.menu a.tag.remove:before,.menu a.tag:before{content:"\f02b"}#taglist li{padding:0 .5rem}#taglist li:before{content:"\f02b";margin:0 .5rem 0 .2rem}#tag-selector li a:before,#taglist li:before,#tagsform option:before{color:#1e9cce}#tag-selector li:hover a:before,#tagsform option:checked:before{color:#fff}#tagsform{min-height:15rem}#tagsform select{padding:0;margin-bottom:.5rem}#tagsform option{padding:.5rem;outline:0;border:0}#tagsform option:before{content:"\f02b";line-height:1}#tagsform .buttons{text-align:center}#tagsform .buttons button{margin:0 .25rem}.tagbox{color:#fff;background-color:#53bce6!important;border:0!important;border-radius:.25rem;max-width:4em;padding:.1rem .4rem;margin-right:.2rem;font-weight:700}.tagbox:not(.tagedit-listelement) a{color:inherit;padding-left:.5rem;text-decoration:none}h2>.tagbox{font-size:1.2rem}.tag-droppable.formcontainer.ui-droppable-active{background-color:#f8f7f4!important}.tag-droppable.formcontainer.ui-droppable-hover{background-color:#ffc!important}.invitebox>i.icon{position:absolute;top:0;padding-top:.5em}.invitebox>span{padding-left:2.5em}.invitebox td{padding:2px;vertical-align:top}.invitebox td.ititle{font-weight:700;padding-right:.5em}.invitebox td.label{color:#666;padding-right:1em}.invitebox td.recurrence-id{text-transform:uppercase;font-style:italic}.invitebox td.date.modified{font-weight:700;color:#ff5552}.invitebox td em{font-weight:700}.invitebox .itip-buttons{display:flex;flex-wrap:wrap}.invitebox .itip-buttons input.button{margin:0 .25rem .25rem 0}.invitebox .rsvp-buttons{width:100%;padding-top:.25rem}.invitebox .itip-reply-controls{margin-top:.25rem;width:100%;line-height:2}.invitebox .itip-reply-controls>label{display:inline}.invitebox .itip-reply-controls>label label{line-height:1;margin-right:.25rem}.invitebox .itip-reply-controls a{margin-left:1em;white-space:nowrap}.invitebox .rsvp-status{margin:.5rem 0;width:100%}.invitebox .rsvp-status.hint{color:#666;font-style:italic}.invitebox .folder-select{white-space:nowrap}.invitebox .folder-select select{display:initial;width:auto}.rsvp-status:before{line-height:1.1;color:#4d5f66;float:none;display:inline}.rsvp-status.loading:before{-webkit-animation:spinner-border 1.5s infinite linear;animation:spinner-border 1.5s infinite linear;content:"\f1ce";line-height:1}.rsvp-status.declined:before{content:"\f05e";color:#ff5552}.rsvp-status.tentative:before{content:"\f058";color:#ffd452}.rsvp-status.accepted:before{content:"\f058";color:#95bb41}.rsvp-status.delegated:before{content:"\f064"}.rsvp-status.needs-action:before{content:"\f059"}.attendee:before{content:"\f059";display:inline;float:none;font-size:1em;color:#828481}.attendee.req-participant:before{content:"\f007"}.attendee.opt-participant:before{content:"\f007";font-weight:400}.attendee.non-participant:before{content:"\f007";color:#ccc}.attendee.chair:before{content:"\f007";color:#ffd452}.attendee.accepted:before,.attendee.completed:before{content:"\f058";color:#95bb41}.attendee.declined:before{content:"\f05e";color:#ff5552}.attendee.tentative:before{content:"\f058";color:#ffd452}.attendee.delegated:before{content:"\f064"}.attendee.organizer:before{content:"\f0b1"}.attendee.in-process:before{content:"\f013"}.attendees-comentbox label{display:inline}.edit-attendees-table{width:100%}.edit-attendees-table td,.edit-attendees-table th{width:1%;text-align:center}.edit-attendees-table td{border:0;padding:0 .3rem}.edit-attendees-table th{border-bottom:1px solid #eee!important}.edit-attendees-table td.name,.edit-attendees-table td.role,.edit-attendees-table th.name,.edit-attendees-table th.role{width:auto;text-align:left}.edit-attendees-table th.invite input{display:none}.edit-attendees-table th.invite label{cursor:pointer}.edit-attendees-table th.invite label:before{content:"\f0e0";display:inline;float:none;line-height:1}.edit-attendees-table td.invite .custom-switch{margin-top:.15rem}.edit-attendees-table td.name span{line-height:2.5;display:flex}.edit-attendees-table td.name span>:first-child{overflow:hidden;text-overflow:ellipsis;flex:1;width:1px;white-space:nowrap}.edit-attendees-table td.availability span,.edit-attendees-table td.confirmstate span{margin:0}.edit-attendees-table td.availability span:after,.edit-attendees-table td.availability span:before,.edit-attendees-table td.confirmstate span:after,.edit-attendees-table td.confirmstate span:before{line-height:2;margin:0;font-size:1.2em;height:2em;width:2em}.edit-attendees-table td.options a{display:inline-block;height:2em}.edit-attendees-table td.options a:before{line-height:1.8;margin:0}.edit-attendees-table a.expandlink:before{content:"\f0fe";line-height:2}.edit-attendees-table .inner{display:none}html.layout-phone .edit-attendees-table th.availability,html.layout-phone .edit-attendees-table th.confirmstate{text-indent:-5000px}html.layout-phone .edit-attendees-table td.role{max-width:7em}html.layout-phone .edit-attendees-table select{padding-left:.5rem}.form-searchbar{display:flex;margin-bottom:.5rem}.form-searchbar inputtype=text{flex:1}html.layout-phone .form-searchbar inputtype=text{max-width:50%}.form-searchbar inputtype=button{margin-left:.5em;overflow:hidden;text-overflow:ellipsis}.attachmentslist li.ics:before,.attachmentslist li.text.calendar:before,.messagelist tbody .attachment span.ical:before{content:"\f073";font-weight:400}.alarms-input .edit-alarm-item{display:flex}.alarms-input .edit-alarm-item+.edit-alarm-item{margin-top:.25rem}.alarms-input .edit-alarm-item.first .delete-alarm,.alarms-input .edit-alarm-item:not(.first) .add-alarm{display:none}.alarms-input .edit-alarm-buttons a{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.alarms-input .edit-alarm-buttons a:before{margin:0;width:1em}.alarms-input .edit-alarm-buttons a:focus{box-shadow:none}.alarms-input .edit-alarm-buttons a.add:before{content:"\f067"}.alarms-input .edit-alarm-buttons .inner{display:none}.alarms-input .edit-alarm-type{flex:1;border-top-right-radius:0;border-bottom-right-radius:0}.alarms-input .edit-alarm-type:focus{z-index:2}.alarms-input .edit-alarm-set{display:flex;flex:1}.alarms-input .edit-alarm-values{flex:5}.alarms-input .edit-alarm-values .form-control{border-radius:0}.alarms-input .edit-alarm-values :first-child{border-left:0}.alarms-input .edit-alarm-offset{flex:5}.alarms-input .edit-alarm-date,.alarms-input .edit-alarm-related,.alarms-input .edit-alarm-time{flex:3}.recurrence-form .recurrence-rdates{width:100%;padding:0;list-style-type:none}.recurrence-form .recurrence-rdates:empty{margin:0}.recurrence-form .recurrence-rdates a.delete{margin-left:2em}.recurrence-form .recurrence-rdates a.delete:before{display:inline-block;float:none}.recurrence-form .recurrence-rdates .inner{display:none}.recurrence-form .recurrence-onevery select{width:40%;display:inline}.recurrence-form .inputform{display:flex}.recurrence-form .inputform input.button{margin-left:.25rem}.recurrence-form div.line{width:100%;display:flex;margin-bottom:.25rem}.recurrence-form div.line label{margin-left:.5em;min-width:4em;line-height:2.5}.recurrence-form .month,.recurrence-form .monthday,.recurrence-form .weekday{display:inline-block;width:3.5em;margin-right:.5rem;white-space:nowrap}.recurrence-form .month input,.recurrence-form .monthday input,.recurrence-form .weekday input{margin-right:.25rem}.recurrence-form .monthday{width:2.75em}.recurrence-form .table td{border:0;padding:0}.recurrence-form .table td.label{white-space:nowrap}.recurrence-form .table td:first-child label{line-height:2.5}.recurrence-form .table td label.monthday:first-child{margin-top:.5rem}.recurrence-form .input-group-append,.recurrence-form .input-group-prepend{display:initial}#event-status-badge{width:7rem;height:7rem;position:absolute;top:0;right:0;overflow:hidden}#event-status-badge span{display:none;text-transform:uppercase;line-height:20px;position:absolute;left:-2.4rem;top:2.4rem;width:13.2rem;text-align:center;font-weight:700;font-size:.85rem;color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#event-status-badge span:before{display:inline;float:none}.status-cancelled #event-status-badge span{background-color:#ff231f;display:block}.status-cancelled #event-status-badge span:before{content:"\f057"}#alarm-display h3{font-size:1.2rem;margin-bottom:.25rem}#alarm-display h3:before{content:"\f073";font-weight:400;font-size:1em}#alarm-display h3.type-task:before{content:"\f274";font-weight:400}#alarm-display .event-section{font-size:.9rem;color:#828481;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#alarm-display .alarm-actions{text-align:right;margin-bottom:.25rem}#alarm-display .alarm-actions a:first-child{margin-right:1em}#alarm-display .alarm-actions a:before{display:inline;float:none}#alarm-display a.alarm-action-snooze:before{content:"\f1f6"}#alarm-display a.alarm-action-dismiss:before{content:"\f2ed"}#alarm-snooze-dropdown a:before{content:"\f017";font-weight:400}.dialog-message{margin:0;opacity:.95;width:100%;padding:.75em;margin-top:.25em;color:#484e4e;background-color:rgba(255,212,82,.2)}.dialog-message>label{margin:0;display:block}.dialog-message>label label:before{line-height:1.25;margin-right:.25rem}.dialog-message .message{display:flex}.dialog-message+.savemode{margin-top:1rem}.dialog-message+.savemode a.btn{margin-right:.5rem}.dialog-message>.savemode{margin-top:.5rem}.dialog-message>.savemode label{margin-right:1rem}.dialog-message>.savemode input{margin-right:.25rem}@media screen and (max-width:420px){.nav-link.nav-icon{width:3em;margin-right:5px;padding:.5rem .5rem .5rem .65rem}.nav-link.nav-icon:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin:0 1rem 0 0;width:1em;line-height:1.2}.nav-link.nav-icon.resources:before{content:"\f1b2";margin-left:.1rem}.nav-link.nav-icon.attachments:before{content:"\f0c6"}.nav-link.nav-icon.attendees:before{content:"\f0c0"}}.menu a.taskaddlink:before,.menu a.tasklist:before,.menu a.tasklistlink:before{content:"\f274"}.tasklist-invitebox>i.icon:before{content:"\f274"!important}.listing li>div.tasklist .listname:before{content:"\f274"}#tasklist li.taskitem{border-bottom:0}#tasklist li.taskitem div.taskhead{position:relative;display:block;height:3.8rem;padding-left:1.5em;outline:0}#tasklist li.taskitem div.taskhead.flagged{color:#ff5552!important}#tasklist li.taskitem div.taskhead.selected{background-color:#e5f7fc}#tasklist li.taskitem div.taskhead.droptarget{background-color:#ffc}#tasklist li.taskitem div.taskhead.complete span.title{color:rgba(72,78,78,.5)}#tasklist li.taskitem div.taskhead.complete .progressbar{display:none}#tasklist li.taskitem>div,#tasklist li.taskitem>span{border-bottom:1px solid #f1f3f4}#tasklist li.taskitem ul{padding:0;border:0}#tasklist li.taskitem ul li{padding-left:0}#tasklist li.taskitem ul li .taskhead,#tasklist li.taskitem ul li .title{padding-left:3.25em}#tasklist li.taskitem ul li .childtoggle{left:1.5em}#tasklist li.taskitem ul li li .taskhead,#tasklist li.taskitem ul li li .title{padding-left:4.75em}#tasklist li.taskitem ul li li .childtoggle{left:3em}#tasklist li.taskitem ul li li li .taskhead,#tasklist li.taskitem ul li li li .title{padding-left:6.25em}#tasklist li.taskitem ul li li li .childtoggle{left:4.5em}#tasklist li.taskitem ul li li li li .taskhead,#tasklist li.taskitem ul li li li li .title{padding-left:7.75em}#tasklist li.taskitem ul li li li li .childtoggle{left:6em}#tasklist li.taskitem ul li li li li li .taskhead,#tasklist li.taskitem ul li li li li li .title{padding-left:9.25em}#tasklist li.taskitem ul li li li li li .childtoggle{left:7.5em}#tasklist .childtoggle{position:absolute;left:0;top:0;width:1.5em;padding:0 0 0 .25rem;height:3.8rem;cursor:pointer;z-index:1}#tasklist .childtoggle .inner{display:none}#tasklist .childtoggle:before{content:"\f105";margin:0;width:1em;line-height:3.8rem}#tasklist .childtoggle.expanded:before{content:"\f107"}#tasklist .childtoggle.collapsed:before{content:"\f105"}#tasklist span.title{position:absolute;left:0;right:0;bottom:0;line-height:2em;padding:0 0 0 .2em;padding-left:1.75em;margin-right:2em;overflow:hidden;text-overflow:ellipsis}#tasklist span.tags{position:absolute;right:2em;top:0;line-height:2em;text-align:right}#tasklist span.date{position:absolute;padding-left:.2em;font-size:90%;line-height:2.5;color:#828481;cursor:pointer}#tasklist span.date input{line-height:1;padding:0;margin-top:-2px}#tasklist span.flagged{position:absolute;right:0;top:0;line-height:1.8em;cursor:pointer}#tasklist .taskhead:not(.flagged):hover span.flagged:before{content:"\f024";font-weight:400}#tasklist .taskhead.flagged span.flagged:before{content:"\f024"}#tasklist .progressbar{position:absolute;bottom:1px;left:.2em;right:.2em}#tasklist .progressbar .progressvalue{border-top:2px solid #ffd452}#tasklist .custom-switch{position:absolute;top:1.4rem;z-index:1;height:2.3em}#tasklist .actions{display:none}@media screen and (min-width:1200px){#tasklist .taskhead{border-left:2px solid transparent}#tasklist .taskhead.focused{border-left:2px solid #acdff3;outline:0}}html.touch #tasklist li{font-size:1rem}html.touch #tasklist .custom-switch,html.touch #tasklist inputtype=checkbox,html.touch #tasklist span.flagged{display:none}html.touch #tasklist span.title{margin-right:.5rem}html.touch #tasklist span.tags{right:.5rem}#taskshow+.formbuttons button.disabled{display:none}#taskshow .task-parent-title{color:#828481;font-size:90%;margin-bottom:.5rem}#taskshow .task-title{font-size:1.5rem;font-weight:700}#taskshow .task-description{margin:1rem 0}#taskshow.status-completed h2{color:rgba(72,78,78,.5)}#taskshow.status-flagged h2:before{content:"\f024";color:#ff5552;font-size:.9em}#taskshow .attachmentslist li{margin-right:1em}#taskedit-attachment-form{position:absolute}.messagetasklinks>i.icon:before{content:"\f274"!important}.messagetasklinks .tasklist{list-style-type:none;margin:0;padding:0}.messagetasklinks .tasklist li{display:flex;align-items:center}.messagetasklinks input{height:auto!important}#print-layout #tasklist{padding:0}#print-layout #tasklist li{list-style-type:none}#print-layout #tasklist .description{display:block;white-space:pre-wrap}#print-layout #tasklist .title{position:relative;font-weight:700;padding:0;margin:0}#print-layout #tasklist .taskhead{height:auto}.taskitem-draghelper{overflow:hidden;text-overflow:ellipsis}@media screen and (max-height:750px) and (min-width:769px){html.dark-mode #taskmenu a{width:41px}}html.dark-mode .watermark{background-color:#21292c;background-blend-mode:soft-light}html.dark-mode .watermark:before{background:0 0}html.dark-mode #filelistcontainer,html.dark-mode .fc-scroller{scrollbar-width:thin}html.dark-mode .fc .fc-header-toolbar{background-color:#374549}html.dark-mode .fc #timezone-display,html.dark-mode .fc .fc-center h2{color:#c5d1d3}html.dark-mode .filelist tr.session.owner>td.name::after,html.dark-mode .resources-dialog .listing li.resource>a,html.dark-mode .rsvp-status:not(.accepted):not(.tentative):not(.declined)::before{color:#c5d1d3}html.dark-mode #tasklist li.taskitem>div,html.dark-mode #tasklist li.taskitem>span,html.dark-mode .fc-unthemed .fc-content,html.dark-mode .fc-unthemed .fc-divider,html.dark-mode .fc-unthemed .fc-list-heading td,html.dark-mode .fc-unthemed .fc-list-view,html.dark-mode .fc-unthemed .fc-popover,html.dark-mode .fc-unthemed .fc-row,html.dark-mode .fc-unthemed td,html.dark-mode .fc-unthemed th{border-color:#2c373a}html.dark-mode .calendar-scheduler .attendees-list div.attendee,html.dark-mode .calendar-scheduler .schedule-table .timesheader,html.dark-mode .calendar-scheduler .schedule-table td.attendees .attendees-list,html.dark-mode .calendar-scheduler .schedule-table td.times td,html.dark-mode .fc-unthemed td,html.dark-mode .fc-unthemed th,html.dark-mode .files-dialog .selection-content{border-color:#4d6066}html.dark-mode #resource-availability .fc,html.dark-mode #resource-availability .fc-view{border-color:#4d6066}html.dark-mode .edit-attendees-table th,html.dark-mode .selection-dialog .form-addon,html.dark-mode .selection-dialog .header,html.dark-mode .selection-dialog .selection-list{border-color:#4d6066!important}html.dark-mode .selection-dialog .form-addon,html.dark-mode .selection-dialog .header,html.dark-mode .selection-dialog .listing ul{background-color:transparent}html.dark-mode #tasklist li.taskitem div.taskhead.selected,html.dark-mode .fc-unthemed .fc-divider,html.dark-mode .fc-unthemed .fc-list-heading td,html.dark-mode .fc-unthemed .fc-popover .fc-header,html.dark-mode .listing li.selected>div>*,html.dark-mode body.task-calendar .ui-datepicker-inline .ui-datepicker-activerange{color:#53bce6;background-color:#374549}html.dark-mode #folder-mount-form td.source.selected{background-color:#374549}html.dark-mode #tagsform option,html.dark-mode .tagedit-list li.tagedit-listelement-new input{color:#c5d1d3}html.dark-mode #kolabnoteslist td.date,html.dark-mode #notedetailstitle .dates,html.dark-mode #tasklist span.date,html.dark-mode .availability span,html.dark-mode .calendar-agenda-preview .event-row.current,html.dark-mode .fc .fc-axis,html.dark-mode .fc .fc-day-header,html.dark-mode .fc .fc-day-number,html.dark-mode .fc .fc-week-header,html.dark-mode .fc .fc-week-number,html.dark-mode .formcontent.text-only .faded *,html.dark-mode .invitebox .rsvp-status.hint,html.dark-mode .invitebox td.label{color:#8ba3a7}html.dark-mode .invitebox .folder-select select{background-color:#21292c}html.dark-mode .tagedit-listtabindex="-1"{border-color:#53bce6;box-shadow:0 0 0 .2rem rgba(83,188,230,.25);background:#2c373b}html.dark-mode #tasklist .progressbar .progressvalue{border-color:#997f31}html.dark-mode .listing li.readonly:not(.virtual)>div a:first-child:after,html.dark-mode .listing li>div.readonly a:first-child:after{color:#c5d1d3;background-color:#21292c}html.dark-mode .dialog-message{opacity:1;color:#c5d1d3;background-color:#997f31}
5
\ No newline at end of file
6
roundcubemail-1.6.tar.gz/plugins/tasklist/drivers/caldav/tasklist_caldav_driver.php
Changed
77
1
2
private $lists;
3
private $folders = ;
4
private $tasks = ;
5
- private $tags = ;
6
private $bonnie_api = false;
7
8
9
10
*/
11
public function get_tags()
12
{
13
- return $this->tags;
14
+ return ;
15
}
16
17
/**
18
19
'sequence' => $record'sequence' ?? null,
20
'list' => $list_id,
21
'links' => , // $record'links',
22
+ 'tags' => , // $record'tags',
23
;
24
25
- $task'tags' = (array) ($record'categories' ?? );
26
- if (!empty($task'tags')) {
27
- $this->tags = array_merge($this->tags, $task'tags');
28
- }
29
-
30
// convert from DateTime to internal date format
31
if (isset($record'due') && $record'due' instanceof DateTimeInterface) {
32
$due = $this->plugin->lib->adjust_timezone($record'due');
33
34
$object'sequence' = $old'sequence';
35
}
36
37
- $object'categories' = (array) ($task'tags' ?? );
38
-
39
- unset($object'tempid', $object'raw', $object'list', $object'flagged', $object'created');
40
+ unset($object'tempid', $object'raw', $object'list', $object'flagged', $object'tags', $object'created');
41
42
return $object;
43
}
44
45
*/
46
public function get_message_reference($uri_or_headers, $folder = null)
47
{
48
+ /*
49
+ if (is_object($uri_or_headers)) {
50
+ $uri_or_headers = kolab_storage_config::get_message_uri($uri_or_headers, $folder);
51
+ }
52
+
53
+ if (is_string($uri_or_headers)) {
54
+ return kolab_storage_config::get_message_reference($uri_or_headers, 'task');
55
+ }
56
+ */
57
return false;
58
}
59
60
61
public function get_message_related_tasks($headers, $folder)
62
{
63
return ;
64
+ /*
65
+ $config = kolab_storage_config::get_instance();
66
+ $result = $config->get_message_relations($headers, $folder, 'task');
67
+
68
+ foreach ($result as $idx => $rec) {
69
+ $result$idx = $this->_to_rcube_task($rec, kolab_storage::folder_id($rec'_mailbox'));
70
+ }
71
+
72
+ return $result;
73
+ */
74
}
75
76
/**
77
roundcubemail-1.6.tar.gz/program/lib/Roundcube/rcube_imap.php
Changed
98
1
2
else {
3
// fetch requested headers from server
4
$headers = $this->conn->fetchHeaders(
5
- $folder, $msgs, true, false, $this->get_fetch_headers(), $this->get_fetch_items());
6
+ $folder, $msgs, true, false, $this->get_fetch_headers());
7
}
8
9
if (empty($headers)) {
10
11
}
12
else {
13
$headers = $this->conn->fetchHeader(
14
- $folder, $uid, true, true, $this->get_fetch_headers(), $this->get_fetch_items());
15
+ $folder, $uid, true, true, $this->get_fetch_headers());
16
17
if (is_object($headers)) {
18
$headers->folder = $folder;
19
20
$this->set_search_dirty($folder);
21
}
22
23
- unset($this->icache'message');
24
-
25
return $result;
26
}
27
28
29
$this->set_search_dirty($from_mbox);
30
$this->set_search_dirty($to_mbox);
31
32
- // unset internal cache
33
+ // unset threads internal cache
34
unset($this->icache'threads');
35
- unset($this->icache'message');
36
37
// remove message ids from search set
38
if ($this->search_set && $from_mbox == $this->folder) {
39
40
$this->expunge_message($uids, $folder, false);
41
$this->clear_messagecount($folder);
42
43
- // unset internal cache
44
+ // unset threads internal cache
45
unset($this->icache'threads');
46
- unset($this->icache'message');
47
48
$this->set_search_dirty($folder);
49
50
51
return $result;
52
}
53
54
- /**
55
- * Annotate a message.
56
- *
57
- * @param array $annotation Message annotation key-value array
58
- * @param mixed $uids Message UIDs as array or comma-separated string, or '*'
59
- * @param string $folder Folder name
60
- *
61
- * @return bool True on success, False on failure
62
- */
63
- public function annotate_message($annotation, $uids, $folder = null)
64
- {
65
- $uids = $this->parse_uids($uids);
66
-
67
- if (!is_string($folder) || !strlen($folder)) {
68
- $folder = $this->folder;
69
- }
70
-
71
- if (!$this->check_connection()) {
72
- return false;
73
- }
74
-
75
- unset($this->icache'message');
76
-
77
- return $this->conn->storeMessageAnnotation($folder, $uids, $annotation);
78
- }
79
80
/* --------------------------------
81
* folder management
82
83
return $headers;
84
}
85
86
- /**
87
- * Get additional FETCH items for rcube_imap_generic::fetchHeader(s)
88
- *
89
- * @return array List of items
90
- */
91
- protected function get_fetch_items()
92
- {
93
- return $this->options'fetch_items' ?? ;
94
- }
95
96
/* -----------------------------------------
97
* ACL and METADATA/ANNOTATEMORE methods
98
roundcubemail-1.6.tar.gz/program/lib/Roundcube/rcube_imap_generic.php
Changed
128
1
2
$result$id->id = $id;
3
$result$id->subject = '';
4
$result$id->messageID = 'mid:' . $id;
5
- $result$id->folder = $mailbox;
6
7
$headers = null;
8
$line = substr($line, strlen($m0) + 2);
9
10
}
11
}
12
}
13
- else if ($name == 'ANNOTATION') {
14
- $result$id->annotations = ;
15
- if (!empty($value) && is_array($value)) {
16
- $n = 0;
17
- while (!empty($value$n) && is_string($value$n)) {
18
- $name = $value$n++;
19
- $list = $value$n++;
20
- $result$id->annotations$name = ;
21
- $c = 0;
22
- while (!empty($list$c) && is_string($list$c)) {
23
- $result$id->annotations$name$list$c++ = $list$c++;
24
- }
25
- }
26
- }
27
- }
28
else if ($name == 'MODSEQ') {
29
$result$id->modseq = $value0;
30
}
31
32
* @param mixed $message_set Message(s) sequence identifier(s) or UID(s)
33
* @param bool $is_uid True if $message_set contains UIDs
34
* @param bool $bodystr Enable to add BODYSTRUCTURE data to the result
35
- * @param array $add_headers List of additional headers to fetch
36
- * @param array $query_items List of additional items to fetch
37
+ * @param array $add_headers List of additional headers
38
*
39
* @return bool|array List of rcube_message_header elements, False on error
40
*/
41
- public function fetchHeaders($mailbox, $message_set, $is_uid = false, $bodystr = false, $add_headers = , $query_items = )
42
+ public function fetchHeaders($mailbox, $message_set, $is_uid = false, $bodystr = false, $add_headers = )
43
{
44
- $query_items = array_unique(array_merge($query_items, 'UID', 'RFC822.SIZE', 'FLAGS', 'INTERNALDATE'));
45
- $headers = 'DATE', 'FROM', 'TO', 'SUBJECT', 'CONTENT-TYPE', 'CC', 'REPLY-TO',
46
+ $query_items = 'UID', 'RFC822.SIZE', 'FLAGS', 'INTERNALDATE';
47
+ $headers = 'DATE', 'FROM', 'TO', 'SUBJECT', 'CONTENT-TYPE', 'CC', 'REPLY-TO',
48
'LIST-POST', 'DISPOSITION-NOTIFICATION-TO', 'X-PRIORITY';
49
50
if (!empty($add_headers)) {
51
52
* @param bool $is_uid True if $id is an UID
53
* @param bool $bodystr Enable to add BODYSTRUCTURE data to the result
54
* @param array $add_headers List of additional headers
55
- * @param array $query_items List of additional items to fetch
56
*
57
* @return bool|rcube_message_header Message data, False on error
58
*/
59
- public function fetchHeader($mailbox, $id, $is_uid = false, $bodystr = false, $add_headers = , $query_items = )
60
+ public function fetchHeader($mailbox, $id, $is_uid = false, $bodystr = false, $add_headers = )
61
{
62
- $a = $this->fetchHeaders($mailbox, $id, $is_uid, $bodystr, $add_headers, $query_items);
63
+ $a = $this->fetchHeaders($mailbox, $id, $is_uid, $bodystr, $add_headers);
64
65
if (is_array($a)) {
66
return array_first($a);
67
68
}
69
70
/**
71
- * Send the STORE X ANNOTATION command (RFC5257)
72
- *
73
- * @param string $mailbox Mailbox name
74
- * @param array $entries
75
- *
76
- * @return bool True on success, False on failure
77
- *
78
- * @since 1.6.10
79
- */
80
- public function storeMessageAnnotation($mailbox, $uids, $entries)
81
- {
82
- if (!$this->hasCapability('ANNOTATE-EXPERIMENT-1')) {
83
- return false;
84
- }
85
-
86
- if (empty($entries) || empty($uids)) {
87
- $this->setError(self::ERROR_COMMAND, 'Wrong argument for STORE ANNOTATION command');
88
- return false;
89
- }
90
-
91
- if (!$this->select($mailbox)) {
92
- return false;
93
- }
94
-
95
- /* Example input compatible with rcube_message_header::$annotations:
96
- $entries =
97
- '/comment' =>
98
- 'value.priv' => 'test1',
99
- 'value.shared' => null,
100
- ,
101
- ;
102
- */
103
-
104
- $request = ;
105
- foreach ($entries as $name => $annotation) {
106
- if (!empty($annotation)) {
107
- foreach ($annotation as $key => $value) {
108
- $annotation$key = $this->escape($key) . ' ' . $this->escape($value, true);
109
- }
110
- $request = $this->escape($name);
111
- $request = $annotation;
112
- }
113
- }
114
-
115
- $result = $this->execute(
116
- 'UID STORE',
117
- $this->compressMessageSet($uids), 'ANNOTATION', $request,
118
- self::COMMAND_NORESPONSE
119
- );
120
-
121
- return $result == self::ERROR_OK;
122
- }
123
-
124
- /**
125
* Returns BODYSTRUCTURE for the specified message.
126
*
127
* @param string $mailbox Folder name
128
roundcubemail-1.6.tar.gz/program/lib/Roundcube/rcube_message_header.php
Changed
15
1
2
public $flags = ;
3
4
/**
5
- * Message annotations (RFC 5257)
6
- *
7
- * @var ?array
8
- */
9
- public $annotations;
10
-
11
- /**
12
* Extra flags (for the messages list)
13
*
14
* @var array
15
roundcubemail-1.6.tar.gz/skins/larry
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/README.md
Deleted
39
1
2
-ROUNDCUBE WEBMAIL SKIN "LARRY"
3
-==============================
4
-
5
-This skin package contains the "Larry" theme of the Roundcube Webmail
6
-software. It can be used, modified and redistributed according to
7
-the terms described in the LICENSE section.
8
-
9
-For information about building or modifying Roundcube skins please visit
10
-https://github.com/roundcube/roundcubemail/wiki/Skins
11
-
12
-Screendesign by FLINT / Büro für Gestaltung, Bern, Switzerland
13
-http://bueroflint.com
14
-
15
-
16
-INSTALLATION
17
-------------
18
-
19
-The skin can be installed by putting the content in a subfolder of the
20
-the Roundcube's `skins` folder or by using composer:
21
-```
22
-composer require "roundcube/larry:~1.6.0"
23
-```
24
-Note: make sure to use version of the skin that matches the Roundcube version.
25
-If it is not available use the closest lower version number. For example,
26
-if your Roundcube version is 1.6.5, use skin version 1.6.x (with max X that exists),
27
-if 1.6.x does not exist use 1.5.x and so on. Using 1.7.x and up might not work.
28
-
29
-
30
-LICENSE
31
--------
32
-
33
-The contents of this folder are subject to the Creative Commons
34
-Attribution-ShareAlike License. It is allowed to copy, distribute,
35
-transmit and to adapt the work by keeping credits to the original
36
-autors in the README.md file.
37
-
38
-See https://creativecommons.org/licenses/by-sa/3.0/ for details.
39
roundcubemail-1.6.tar.gz/skins/larry/addressbook.css
Deleted
446
1
2
-/**
3
- * Roundcube webmail styles for the Address Book section
4
- *
5
- * Copyright (c) The Roundcube Dev Team
6
- * Screendesign by FLINT / Büro für Gestaltung, bueroflint.com
7
- *
8
- * The contents are subject to the Creative Commons Attribution-ShareAlike
9
- * License. It is allowed to copy, distribute, transmit and to adapt the work
10
- * by keeping credits to the original autors in the README file.
11
- * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
12
- */
13
-
14
-#addressview-left {
15
- position: absolute;
16
- top: 0;
17
- left: 0;
18
- width: 200px;
19
- bottom: 0;
20
- z-index: 2;
21
-}
22
-
23
-#addressview-right {
24
- position: absolute;
25
- top: 0;
26
- left: 212px;
27
- right: 0;
28
- bottom: 0;
29
- z-index: 3;
30
-}
31
-
32
-#addressbooktoolbar {
33
- position: absolute;
34
- top: -6px;
35
- left: 0;
36
- height: 40px;
37
- white-space: nowrap;
38
- z-index: 10;
39
-}
40
-
41
-#directorylistbox {
42
- position: absolute;
43
- top: 0;
44
- left: 0;
45
- width: 100%;
46
- bottom: 0;
47
-}
48
-
49
-#addresslist {
50
- position: absolute;
51
- top: 0;
52
- left: 0;
53
- width: 260px;
54
- bottom: 0;
55
-}
56
-
57
-#contacts-box {
58
- position: absolute;
59
- top: 0;
60
- left: 272px;
61
- right: 0;
62
- bottom: 0;
63
-}
64
-
65
-#addressview-left #quicksearchbar input {
66
- width: 156px;
67
-}
68
-
69
-#directorylist li a,
70
-.treelist li.contactsearch a,
71
-#contacts-table .contact td.name {
72
- background-image: url(images/listicons.png);
73
- background-position: -100px 0;
74
- background-repeat: no-repeat;
75
- overflow: hidden;
76
- text-overflow: ellipsis;
77
-}
78
-
79
-#directorylist li.addressbook a {
80
- background-position: 6px -766px;
81
-}
82
-
83
-#directorylist ul li.addressbook a {
84
- background-position: 32px -766px;
85
-}
86
-
87
-#directorylist ul ul li.addressbook a {
88
- background-position: 58px -766px;
89
-}
90
-
91
-#directorylist li.addressbook.selected > a {
92
- background-position: 6px -791px;
93
-}
94
-
95
-#directorylist ul li.addressbook.selected > a {
96
- background-position: 32px -791px;
97
-}
98
-
99
-#directorylist ul ul li.addressbook.selected > a {
100
- background-position: 58px -791px;
101
-}
102
-
103
-#directorylist li.contactgroup a {
104
- background-position: 6px -1554px;
105
-}
106
-
107
-#directorylist ul li.contactgroup a {
108
- background-position: 32px -1554px;
109
-}
110
-
111
-#directorylist ul ul li.contactgroup a {
112
- background-position: 58px -1554px;
113
-}
114
-
115
-#directorylist ul ul ul li.contactgroup a {
116
- background-position: 84px -1554px;
117
-}
118
-
119
-#directorylist li.contactgroup.selected a {
120
- background-position: 32px -1578px;
121
-}
122
-
123
-#directorylist ul ul li.contactgroup.selected a {
124
- background-position: 58px -1578px;
125
-}
126
-
127
-#directorylist ul ul ul li.contactgroup.selected a {
128
- background-position: 84px -1578px;
129
-}
130
-
131
-.treelist li.contactsearch a {
132
- background-position: 6px -1651px;
133
-}
134
-
135
-.treelist li.contactsearch.selected a {
136
- background-position: 6px -1675px;
137
-}
138
-
139
-#directorylist li.addressbook div.collapsed,
140
-#directorylist li.addressbook div.expanded {
141
- top: 15px;
142
-}
143
-
144
-#contacts-table .contact.readonly td {
145
- font-style: italic;
146
-}
147
-
148
-#contacts-table td.name {
149
- width: 95%;
150
-}
151
-
152
-#contacts-table td.action {
153
- width: 24px;
154
- padding: 4px;
155
-}
156
-
157
-#contacts-table td.action a {
158
- display: block;
159
- width: 16px;
160
- height: 14px;
161
- text-indent: -5000px;
162
- overflow: hidden;
163
- background: url(images/listicons.png) -2px -1180px no-repeat;
164
-}
165
-
166
-#contacts-table .contact td.name {
167
- background-position: 4px -1601px;
168
-}
169
-
170
-#contacts-table .contact.selected td.name {
171
- background-position: 4px -1625px;
172
- font-weight: bold;
173
-}
174
-
175
-#contacts-table .group td.name {
176
- background-position: 4px -1555px;
177
-}
178
-
179
-#contacts-table .group.selected td.name {
180
- background-position: 4px -1578px;
181
- font-weight: bold;
182
-}
183
-
184
-#contacts-table.focus .group.selected.focused td.name {
185
- background-position: 4px -1578px;
186
-}
187
-
188
-#addresslist .boxtitle {
189
- padding-right: 95px;
190
- overflow: hidden;
191
- text-overflow: ellipsis;
192
-}
193
-
194
-#addresslist .boxtitle a.poplink {
195
- color: #004458;
196
- font-size: 14px;
197
- line-height: 12px;
198
- text-decoration: none;
199
-}
200
-
201
-#contact-frame {
202
- position: absolute;
203
- top: 0;
204
- left: 0;
205
- right: 0;
206
- bottom: 0px;
207
- border: 0;
208
- border-radius: 4px;
209
-}
210
-
211
-#headerbuttons {
212
- position: absolute;
213
- top: 48px;
214
- right: 10px;
215
- width: auto;
216
- z-index: 10;
217
-}
218
-
219
-#sourcename {
220
- color: #999;
221
- font-size: 10px;
222
- margin: -5px 0 8px 2px;
223
-}
224
-
225
-#contactphoto {
226
- float: left;
227
- margin: 0 18px 20px 0;
228
- width: 112px;
229
- border: 0;
230
- padding: 0;
231
-}
232
-
233
-#contactpic {
234
- width: 112px;
235
- min-height: 112px;
236
- background: white;
237
-}
238
-
239
-#contactpic img {
240
- max-width: 112px;
241
- visibility: inherit;
242
-}
243
-
244
-#contactpic.droptarget {
245
- background-image: url(images/filedrop.png);
246
- background-position: center;
247
- background-repeat: no-repeat;
248
-}
249
-
250
-#contactpic.droptarget.hover {
251
- background-color: #d9ecf4;
252
- box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
253
-}
254
-
255
-#contactpic.droptarget.active img {
256
- opacity: 0.15;
257
-}
258
-
259
-#contactpic.droptarget.hover img {
260
- opacity: 0.05;
261
-}
262
-
263
-#contactphoto .formlinks aaria-disabled='true' {
264
- visibility: hidden;
265
-}
266
-
267
-#contacthead {
268
- border: 0;
269
- margin: 0 16em 1em 0;
270
- padding: 0;
271
- line-height: 1.5em;
272
- font-size: 12px;
273
-}
274
-
275
-#contacthead > legend {
276
- display: none;
277
-}
278
-
279
-form #contacthead {
280
- margin-right: 0;
281
-}
282
-
283
-#contacthead .names span.namefield,
284
-#contacthead .names input {
285
- font-size: 140%;
286
- font-weight: bold;
287
-}
288
-
289
-#contacthead .displayname span.namefield {
290
- font-size: 120%;
291
- font-weight: bold;
292
-}
293
-
294
-#contacthead span.nickname:before,
295
-#contacthead span.nickname:after {
296
- content: '"';
297
-}
298
-
299
-#contacthead input {
300
- margin-right: 6px;
301
- margin-bottom: 0.2em;
302
-}
303
-
304
-#contacthead .names input,
305
-#contacthead .addnames input {
306
- width: 180px;
307
-}
308
-
309
-#contacthead input.ff_prefix,
310
-#contacthead input.ff_suffix {
311
- width: 90px;
312
-}
313
-
314
-.contactfieldgroup {
315
- border: 0;
316
- border-radius: 0;
317
- background: #f7f7f7;
318
- margin: 0 0 12px 0;
319
- padding: 8px;
320
-}
321
-
322
-.contactfieldgroup legend {
323
- display: block;
324
- margin: 0 -8px;
325
- width: 100%;
326
- font-weight: bold;
327
- padding: 8px 8px 6px 8px;
328
- background: #e9e9e9;
329
- border-bottom: 1px solid #dfdfdf;
330
- border-radius: 0;
331
-}
332
-
333
-.contactfieldgroup .row {
334
- position: relative;
335
- margin: 0.2em 0;
336
-}
337
-
338
-.contactfieldgroup .contactfieldlabel {
339
- position: absolute;
340
- top: 0;
341
- left: 2px;
342
- width: 110px;
343
- white-space: nowrap;
344
- overflow: hidden;
345
- text-overflow: ellipsis;
346
- color: #666;
347
- line-height: 18px;
348
-}
349
-
350
-.contactfieldgroup .contactfieldlabel select {
351
- width: 100%;
352
- color: #666;
353
-}
354
-
355
-.contactfieldgroup .contactfieldcontent {
356
- padding-left: 120px;
357
- min-height: 1em;
358
- line-height: 18px;
359
-}
360
-
361
-.contactfieldgroup .contactfield {
362
- line-height: 1.3em;
363
-}
364
-
365
-.contactcontrolleraddress .contactfieldcontent input {
366
- margin-bottom: 0.1em;
367
-}
368
-
369
-.contactfieldcontent.composite {
370
- padding-bottom: 8px;
371
-}
372
-
373
-.contactfieldcontent .contactfieldbutton {
374
- vertical-align: middle;
375
- margin-left: 0.5em;
376
-}
377
-
378
-.contactfield .ff_notes {
379
- width: 99%;
380
-}
381
-
382
-a.deletebutton {
383
- position: relative;
384
- left: 5px;
385
- top: -3px;
386
- display: inline-block;
387
- width: 24px;
388
- height: 18px;
389
- text-decoration: none;
390
- text-indent: -5000px;
391
- background: url(images/buttons.png) -7px -377px no-repeat;
392
-}
393
-
394
-#import-box {
395
- position: absolute;
396
- bottom: 0px;
397
- top: 34px;
398
- left: 0;
399
- right: 0;
400
- overflow: auto;
401
- padding: 10px;
402
-}
403
-
404
-#import-box p,
405
-#import-box .propform {
406
- max-width: 50em;
407
-}
408
-
409
-ul.toolbarmenu li span.qrcode {
410
- background-position: 0 -2408px;
411
-}
412
-
413
-ul.toolbarmenu li span.assigngroup {
414
- background-position: 0 -2358px;
415
-}
416
-
417
-ul.toolbarmenu li span.removegroup {
418
- background-position: 0 -2384px;
419
-}
420
-
421
-#addressbook-selector li a,
422
-#contactgroup-selector li a {
423
- padding-left: 2px;
424
-}
425
-
426
-#addressbook-selector li a span,
427
-#contactgroup-selector li a span {
428
- background: url(images/listicons.png) 4px 20px no-repeat;
429
- display: block;
430
- height: 17px;
431
- min-height: 14px;
432
- padding: 4px 4px 1px 28px;
433
- overflow: hidden;
434
- max-width: 120px;
435
- text-overflow: ellipsis;
436
-}
437
-
438
-#addressbook-selector li a.addressbook span {
439
- background-position: 4px -2222px;
440
-}
441
-
442
-#addressbook-selector li a.contactgroup span,
443
-#contactgroup-selector li a.contactgroup span {
444
- background-position: 4px -2245px;
445
-}
446
roundcubemail-1.6.tar.gz/skins/larry/addressbook.min.css
Deleted
4
1
2
-#addressview-left{position:absolute;top:0;left:0;width:200px;bottom:0;z-index:2}#addressview-right{position:absolute;top:0;left:212px;right:0;bottom:0;z-index:3}#addressbooktoolbar{position:absolute;top:-6px;left:0;height:40px;white-space:nowrap;z-index:10}#directorylistbox{position:absolute;top:0;left:0;width:100%;bottom:0}#addresslist{position:absolute;top:0;left:0;width:260px;bottom:0}#contacts-box{position:absolute;top:0;left:272px;right:0;bottom:0}#addressview-left #quicksearchbar input{width:156px}#directorylist li a,.treelist li.contactsearch a,#contacts-table .contact td.name{background-image:url(images/listicons.png?v=ce39.10766);background-position:-100px 0;background-repeat:no-repeat;overflow:hidden;text-overflow:ellipsis}#directorylist li.addressbook a{background-position:6px -766px}#directorylist ul li.addressbook a{background-position:32px -766px}#directorylist ul ul li.addressbook a{background-position:58px -766px}#directorylist li.addressbook.selected>a{background-position:6px -791px}#directorylist ul li.addressbook.selected>a{background-position:32px -791px}#directorylist ul ul li.addressbook.selected>a{background-position:58px -791px}#directorylist li.contactgroup a{background-position:6px -1554px}#directorylist ul li.contactgroup a{background-position:32px -1554px}#directorylist ul ul li.contactgroup a{background-position:58px -1554px}#directorylist ul ul ul li.contactgroup a{background-position:84px -1554px}#directorylist li.contactgroup.selected a{background-position:32px -1578px}#directorylist ul ul li.contactgroup.selected a{background-position:58px -1578px}#directorylist ul ul ul li.contactgroup.selected a{background-position:84px -1578px}.treelist li.contactsearch a{background-position:6px -1651px}.treelist li.contactsearch.selected a{background-position:6px -1675px}#directorylist li.addressbook div.collapsed,#directorylist li.addressbook div.expanded{top:15px}#contacts-table .contact.readonly td{font-style:italic}#contacts-table td.name{width:95%}#contacts-table td.action{width:24px;padding:4px}#contacts-table td.action a{display:block;width:16px;height:14px;text-indent:-5000px;overflow:hidden;background:url(images/listicons.png?v=ce39.10766) -2px -1180px no-repeat}#contacts-table .contact td.name{background-position:4px -1601px}#contacts-table .contact.selected td.name{background-position:4px -1625px;font-weight:700}#contacts-table .group td.name{background-position:4px -1555px}#contacts-table .group.selected td.name{background-position:4px -1578px;font-weight:700}#contacts-table.focus .group.selected.focused td.name{background-position:4px -1578px}#addresslist .boxtitle{padding-right:95px;overflow:hidden;text-overflow:ellipsis}#addresslist .boxtitle a.poplink{color:#004458;font-size:14px;line-height:12px;text-decoration:none}#contact-frame{position:absolute;top:0;left:0;right:0;bottom:0;border:0;border-radius:4px}#headerbuttons{position:absolute;top:48px;right:10px;width:auto;z-index:10}#sourcename{color:#999;font-size:10px;margin:-5px 0 8px 2px}#contactphoto{float:left;margin:0 18px 20px 0;width:112px;border:0;padding:0}#contactpic{width:112px;min-height:112px;background:#fff}#contactpic img{max-width:112px;visibility:inherit}#contactpic.droptarget{background-image:url(images/filedrop.png?v=be5d.415);background-position:center;background-repeat:no-repeat}#contactpic.droptarget.hover{background-color:#d9ecf4;box-shadow:0 0 5px 2px rgba(71,135,177,.9)}#contactpic.droptarget.active img{opacity:.15}#contactpic.droptarget.hover img{opacity:.05}#contactphoto .formlinks aaria-disabled=true{visibility:hidden}#contacthead{border:0;margin:0 16em 1em 0;padding:0;line-height:1.5em;font-size:12px}#contacthead>legend{display:none}form #contacthead{margin-right:0}#contacthead .names span.namefield,#contacthead .names input{font-size:140%;font-weight:700}#contacthead .displayname span.namefield{font-size:120%;font-weight:700}#contacthead span.nickname:before,#contacthead span.nickname:after{content:'"'}#contacthead input{margin-right:6px;margin-bottom:.2em}#contacthead .names input,#contacthead .addnames input{width:180px}#contacthead input.ff_prefix,#contacthead input.ff_suffix{width:90px}.contactfieldgroup{border:0;border-radius:0;background:#f7f7f7;margin:0 0 12px 0;padding:8px}.contactfieldgroup legend{display:block;margin:0 -8px;width:100%;font-weight:700;padding:8px 8px 6px 8px;background:#e9e9e9;border-bottom:1px solid #dfdfdf;border-radius:0}.contactfieldgroup .row{position:relative;margin:.2em 0}.contactfieldgroup .contactfieldlabel{position:absolute;top:0;left:2px;width:110px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#666;line-height:18px}.contactfieldgroup .contactfieldlabel select{width:100%;color:#666}.contactfieldgroup .contactfieldcontent{padding-left:120px;min-height:1em;line-height:18px}.contactfieldgroup .contactfield{line-height:1.3em}.contactcontrolleraddress .contactfieldcontent input{margin-bottom:.1em}.contactfieldcontent.composite{padding-bottom:8px}.contactfieldcontent .contactfieldbutton{vertical-align:middle;margin-left:.5em}.contactfield .ff_notes{width:99%}a.deletebutton{position:relative;left:5px;top:-3px;display:inline-block;width:24px;height:18px;text-decoration:none;text-indent:-5000px;background:url(images/buttons.png?v=2e08.13608) -7px -377px no-repeat}#import-box{position:absolute;bottom:0;top:34px;left:0;right:0;overflow:auto;padding:10px}#import-box p,#import-box .propform{max-width:50em}ul.toolbarmenu li span.qrcode{background-position:0 -2408px}ul.toolbarmenu li span.assigngroup{background-position:0 -2358px}ul.toolbarmenu li span.removegroup{background-position:0 -2384px}#addressbook-selector li a,#contactgroup-selector li a{padding-left:2px}#addressbook-selector li a span,#contactgroup-selector li a span{background:url(images/listicons.png?v=ce39.10766) 4px 20px no-repeat;display:block;height:17px;min-height:14px;padding:4px 4px 1px 28px;overflow:hidden;max-width:120px;text-overflow:ellipsis}#addressbook-selector li a.addressbook span{background-position:4px -2222px}#addressbook-selector li a.contactgroup span,#contactgroup-selector li a.contactgroup span{background-position:4px -2245px}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/bin
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/bin/build.sh
Deleted
9
1
2
-#!/bin/sh
3
-
4
-set -e
5
-
6
-PWD=`dirname "$0"`
7
-
8
-$PWD/jsshrink.sh && $PWD/cssshrink.sh && $PWD/cssimages.sh
9
roundcubemail-1.6.tar.gz/skins/larry/bin/cssimages.sh
Deleted
57
1
2
-#!/usr/bin/env php
3
-<?php
4
-
5
-foreach (get_files(__DIR__ . '/..') as $file) {
6
- print "Processing $file\n";
7
-
8
- $content = file_get_contents($file);
9
- $regexp = "#url\('\"?(a-zA-Z0-9_./-+)(\?v=a-f0-9-\.+)?'\"?\)#";
10
-
11
- if (preg_match_all($regexp, $content, $matches)) {
12
- $seen = ;
13
-
14
- foreach ($matches1 as $idx => $image) {
15
- if (!in_array($image, $seen) && preg_match('/\.(gif|ico|png|jpg|jpeg)$/', $image)) {
16
- $filepath = pathinfo($file, PATHINFO_DIRNAME) . "/$image";
17
-
18
- if (file_exists($filepath)) {
19
- $sum = substr(md5_file($filepath), 0, 4) . '.' . filesize($filepath);
20
- }
21
- else {
22
- print "ERROR: Missing image: $filepath\n";
23
- continue;
24
- }
25
-
26
- $content = str_replace($matches0$idx, "url($image?v=$sum)", $content);
27
- }
28
-
29
- $seen = $image;
30
- }
31
-
32
- file_put_contents($file, $content);
33
- }
34
-}
35
-
36
-
37
-function get_files($dir)
38
-{
39
- $files = ;
40
- $dh = opendir($dir);
41
-
42
- while ($file = readdir($dh)) {
43
- if (preg_match('/^(.+)\.min\.css$/', $file, $m)) {
44
- $files = "$dir/$file";
45
- }
46
- else if ($file0 != '.' && is_dir("$dir/$file")) {
47
- foreach (get_files("$dir/$file") as $f) {
48
- $files = $f;
49
- }
50
- }
51
- }
52
-
53
- closedir($dh);
54
-
55
- return $files;
56
-}
57
roundcubemail-1.6.tar.gz/skins/larry/bin/cssshrink.sh
Deleted
46
1
2
-#!/bin/sh
3
-
4
-set -e
5
-
6
-PWD=`dirname "$0"`
7
-
8
-do_shrink() {
9
- rm -f "$2"
10
- csso $1 -o $2 --no-restructure
11
-}
12
-
13
-if which csso > /dev/null 2>&1; then
14
- :
15
-else
16
- echo "csso not found. Please install e.g. 'npm install -g csso-cli'."
17
- exit 1
18
-fi
19
-
20
-# compress single file from argument
21
-if $# -gt 0 ; then
22
- CSS_FILE="$1"
23
-
24
- echo "Shrinking $CSS_FILE"
25
- minfile=`echo $CSS_FILE | sed -e 's/\.css$/\.min\.css/'`
26
- do_shrink "$CSS_FILE" "$minfile"
27
- exit
28
-fi
29
-
30
-DIRS="$PWD/.. $PWD/../plugins/*"
31
-# default: compress application scripts
32
-for dir in $DIRS; do
33
- for file in $dir/*.css; do
34
- if echo "$file" | grep -q -e '.min.css$'; then
35
- continue
36
- fi
37
- if ! -f "$file" ; then
38
- continue
39
- fi
40
-
41
- echo "Shrinking $file"
42
- minfile=`echo $file | sed -e 's/\.css$/\.min\.css/'`
43
- do_shrink "$file" "$minfile"
44
- done
45
-done
46
roundcubemail-1.6.tar.gz/skins/larry/bin/jsshrink.sh
Deleted
53
1
2
-#!/bin/sh
3
-
4
-set -e
5
-
6
-PWD=`dirname "$0"`
7
-LANG_IN='ECMASCRIPT5'
8
-
9
-do_shrink() {
10
- rm -f "$2"
11
- # copy the first comment block with license information for LibreJS
12
- grep -q '@lic' $1 && sed -n '/\/\*/,/\*\// { p; /\*\//q; }' $1 > $2
13
- uglifyjs --compress --mangle -- $1 >> $2
14
-}
15
-
16
-if which uglifyjs > /dev/null 2>&1; then
17
- :
18
-else
19
- echo "uglifyjs not found. Please install e.g. 'npm install -g uglify-js'."
20
- exit 1
21
-fi
22
-
23
-# compress single file from argument
24
-if $# -gt 0 ; then
25
- JS_FILE="$1"
26
-
27
- if $# -gt 1 ; then
28
- LANG_IN="$2"
29
- fi
30
-
31
- echo "Shrinking $JS_FILE"
32
- minfile=`echo $JS_FILE | sed -e 's/\.js$/\.min\.js/'`
33
- do_shrink "$JS_FILE" "$minfile" "$LANG_IN"
34
- exit
35
-fi
36
-
37
-DIRS="$PWD/.. $PWD/../plugins/*"
38
-# default: compress application scripts
39
-for dir in $DIRS; do
40
- for file in $dir/*.js; do
41
- if echo "$file" | grep -q -e '.min.js$'; then
42
- continue
43
- fi
44
- if ! -f "$file" ; then
45
- continue
46
- fi
47
-
48
- echo "Shrinking $file"
49
- minfile=`echo $file | sed -e 's/\.js$/\.min\.js/'`
50
- do_shrink "$file" "$minfile" "$LANG_IN"
51
- done
52
-done
53
roundcubemail-1.6.tar.gz/skins/larry/composer.json
Deleted
11
1
2
-{
3
- "name": "roundcube/larry",
4
- "description": "The Larry theme for Roundcube Webmail",
5
- "license": "CC-BY-SA-3.0",
6
- "type": "roundcube-skin",
7
- "require": {
8
- "roundcube/plugin-installer": ">=0.3.0"
9
- }
10
-}
11
roundcubemail-1.6.tar.gz/skins/larry/embed.css
Deleted
38
1
2
-/**
3
- * Roundcube webmail "embedded" stylesheets
4
- *
5
- * Copyright (c) The Roundcube Dev Team
6
- *
7
- * The contents are subject to the Creative Commons Attribution-ShareAlike
8
- * License. It is allowed to copy, distribute, transmit and to adapt the work
9
- * by keeping credits to the original autors in the README file.
10
- * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
11
- */
12
-
13
-.rcmail-inline-message {
14
- font-family: sans-serif;
15
- font-size: 11px;
16
- font-weight: bold;
17
- color: #996600;
18
- border: 1px solid #ffdf0e;
19
- background: url("images/messages.png") no-repeat scroll 5px -83px #fef893;
20
- padding: 6px 12px 4px 30px;
21
- margin-bottom: 0.8em;
22
-}
23
-
24
-.rcmail-inline-message em {
25
- font-size: 90%;
26
-}
27
-
28
-.rcmail-inline-buttons {
29
- margin-bottom: 0;
30
- display: inline;
31
-}
32
-
33
-.rcmail-inline-buttons > button {
34
- margin-left: 1em;
35
- vertical-align: baseline;
36
- line-height: 12px;
37
-}
38
roundcubemail-1.6.tar.gz/skins/larry/embed.min.css
Deleted
4
1
2
-.rcmail-inline-message{font-family:sans-serif;font-size:11px;font-weight:700;color:#960;border:1px solid #ffdf0e;background:url(images/messages.png?v=72e9.1264) no-repeat 5px -83px #fef893;padding:6px 12px 4px 30px;margin-bottom:.8em}.rcmail-inline-message em{font-size:90%}.rcmail-inline-buttons{margin-bottom:0;display:inline}.rcmail-inline-buttons>button{margin-left:1em;vertical-align:baseline;line-height:12px}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/googiespell.css
Deleted
110
1
2
-/***** modified styles for GoogieSpell *****/
3
-
4
-.googie_window {
5
- font-size: 11px;
6
- width: 185px;
7
- margin: 0;
8
- padding: 0;
9
-}
10
-
11
-.googie_edit_layer {
12
- padding: 4px;
13
- font-size: 9pt;
14
- font-family: monospace;
15
- background-color: #fff;
16
- border: 0;
17
-}
18
-
19
-.googie_edit_layer span {
20
- font-family: monospace;
21
-}
22
-
23
-.googie_list {
24
- width: 100%;
25
- margin: 0;
26
- padding: 0;
27
- border-spacing: 0;
28
-}
29
-
30
-.googie_list li {
31
- min-width: 80px;
32
- width: auto;
33
-}
34
-
35
-.googie_list li.googie_list_selected {
36
- background: #4db0d2;
37
-}
38
-
39
-.googie_list form {
40
- padding: 3px;
41
-}
42
-
43
-.googie_list_close {
44
- font-size: 11px;
45
- color: #b91414;
46
-}
47
-
48
-.googie_list_onhover .googie_list_close {
49
- color: #fff;
50
-}
51
-
52
-.googie_list_revert {
53
- font-size: 11px;
54
- color: #b91414;
55
-}
56
-
57
-.googie_list_revert:hover {
58
- color: #fff;
59
-}
60
-
61
-.googie_link {
62
- color: #b91414;
63
- text-decoration: underline;
64
- cursor: pointer;
65
- font-size: 9pt;
66
- font-family: monospace;
67
-}
68
-
69
-.googie_check_spelling_link {
70
- color: #0069A6;
71
- font-size: 11px;
72
- text-decoration: underline;
73
- cursor: pointer;
74
-}
75
-
76
-.googie_no_style {
77
- text-decoration: none;
78
-}
79
-
80
-.googie_check_spelling_ok,
81
-.googie_resume_editing {
82
- color: green;
83
- font-size: 11px;
84
- cursor: pointer;
85
- text-decoration: underline;
86
-}
87
-
88
-.googie_check_spelling_ok:hover,
89
-.googie_resume_editing:hover {
90
- text-decoration: underline;
91
-}
92
-
93
-.googie_lang_3d_click img,
94
-.googie_lang_3d_on img {
95
- vertical-align: middle;
96
- cursor: pointer;
97
- border: 0;
98
-}
99
-
100
-.googie_ok_button {
101
- background: url(images/googiespell/ok.gif) no-repeat center center transparent !important;
102
- width: 32px;
103
- height: 16px;
104
- cursor: pointer;
105
- margin: 0 5px;
106
- padding: 0;
107
- border: 0 !important;
108
- text-indent: -5000px;
109
-}
110
roundcubemail-1.6.tar.gz/skins/larry/googiespell.min.css
Deleted
4
1
2
-.googie_window{font-size:11px;width:185px;margin:0;padding:0}.googie_edit_layer{padding:4px;font-size:9pt;font-family:monospace;background-color:#fff;border:0}.googie_edit_layer span{font-family:monospace}.googie_list{width:100%;margin:0;padding:0;border-spacing:0}.googie_list li{min-width:80px;width:auto}.googie_list li.googie_list_selected{background:#4db0d2}.googie_list form{padding:3px}.googie_list_close{font-size:11px;color:#b91414}.googie_list_onhover .googie_list_close{color:#fff}.googie_list_revert{font-size:11px;color:#b91414}.googie_list_revert:hover{color:#fff}.googie_link{color:#b91414;text-decoration:underline;cursor:pointer;font-size:9pt;font-family:monospace}.googie_check_spelling_link{color:#0069a6;font-size:11px;text-decoration:underline;cursor:pointer}.googie_no_style{text-decoration:none}.googie_check_spelling_ok,.googie_resume_editing{color:green;font-size:11px;cursor:pointer;text-decoration:underline}.googie_check_spelling_ok:hover,.googie_resume_editing:hover{text-decoration:underline}.googie_lang_3d_click img,.googie_lang_3d_on img{vertical-align:middle;cursor:pointer;border:0}.googie_ok_button{background:url(images/googiespell/ok.gif?v=e1b6.160) no-repeat center center!important;width:32px;height:16px;cursor:pointer;margin:0 5px;padding:0;border:0!important;text-indent:-5000px}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/images
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/images/addcontact.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/ajaxloader.gif
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/ajaxloader_dark.gif
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/buttons.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/contactgroup.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/contactpic.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/contactpic_32px.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/contactpic_48px.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/favicon.ico
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/filedrop.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/filetypes.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/googiespell
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/images/googiespell/change_lang.gif
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/googiespell/indicator.gif
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/googiespell/ok.gif
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/googiespell/spellc.gif
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/google-icon.svg
Deleted
3
1
2
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path fill="#4285F4" d="M45.12 24.5c0-1.56-.14-3.06-.4-4.5H24v8.51h11.84c-.51 2.75-2.06 5.08-4.39 6.64v5.52h7.11c4.16-3.83 6.56-9.47 6.56-16.17z"></path><path fill="#34A853" d="M24 46c5.94 0 10.92-1.97 14.56-5.33l-7.11-5.52c-1.97 1.32-4.49 2.1-7.45 2.1-5.73 0-10.58-3.87-12.31-9.07H4.34v5.7C7.96 41.07 15.4 46 24 46z"></path><path fill="#FBBC05" d="M11.69 28.18C11.25 26.86 11 25.45 11 24s.25-2.86.69-4.18v-5.7H4.34C2.85 17.09 2 20.45 2 24c0 3.55.85 6.91 2.34 9.88l7.35-5.7z"></path><path fill="#EA4335" d="M24 10.75c3.23 0 6.13 1.11 8.41 3.29l6.31-6.31C34.91 4.18 29.93 2 24 2 15.4 2 7.96 6.93 4.34 14.12l7.35 5.7c1.73-5.2 6.58-9.07 12.31-9.07z"></path><path fill="none" d="M2 2h44v44H2z"></path></svg>
3
roundcubemail-1.6.tar.gz/skins/larry/images/listicons.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/messages.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/messages_dark.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/microsoft-icon.svg
Deleted
10
1
2
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
-<svg width="100%" height="100%" viewBox="0 0 116 116" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
5
-<g transform="matrix(1,0,0,1,-22.0613,-141.704)"><path d="M26.088,145.515L77.643,145.515L77.639,197.07L26.088,197.07L26.088,145.515Z" style="fill:rgb(246,83,20);"/></g>
6
-<g transform="matrix(1,0,0,1,-22.0613,-141.704)"><path d="M82.907,145.515L134.462,145.515C134.462,162.7 134.465,179.885 134.459,197.07C117.277,197.067 100.092,197.07 82.91,197.07C82.904,179.885 82.907,162.7 82.907,145.515Z" style="fill:rgb(127,187,65);"/></g>
7
-<g transform="matrix(1,0,0,1,-22.0613,-141.704)"><path d="M26.088,202.331C43.273,202.337 60.458,202.329 77.643,202.337C77.646,219.522 77.643,236.704 77.643,253.889L26.088,253.889L26.088,202.331Z" style="fill:rgb(0,161,241);"/></g>
8
-<g transform="matrix(1,0,0,1,-22.0613,-141.704)"><path d="M82.91,202.337C100.092,202.331 117.277,202.334 134.462,202.334L134.462,253.889L82.907,253.889C82.91,236.704 82.904,219.519 82.91,202.337Z" style="fill:rgb(255,187,0);"/></g>
9
-</svg>
10
roundcubemail-1.6.tar.gz/skins/larry/images/overflowshadow.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/quota.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/roundcube_logo.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/selector.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/splitter.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/images/watermark.jpg
Deleted
roundcubemail-1.6.tar.gz/skins/larry/includes
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/includes/footer.html
Deleted
7
1
2
-<roundcube:object name="message" id="messagestack" condition="env:task != 'login'" />
3
-
4
-<script>
5
-if (!window.UI) { var UI = new rcube_mail_ui(); }
6
-</script>
7
roundcubemail-1.6.tar.gz/skins/larry/includes/header.html
Deleted
46
1
2
-<script>
3
-var UI = new rcube_mail_ui();
4
-</script>
5
-
6
-<div id="header">
7
-<div id="topline" role="banner" aria-labelledby="aria-label-topnav">
8
- <h2 id="aria-label-topnav" class="voice"><roundcube:label name="arialabeltopnav" /></h2>
9
- <div class="topleft">
10
- <roundcube:container name="topline-left" id="topline-left" />
11
- <roundcube:if condition="template:name != 'error'" />
12
- <roundcube:button name="about" type="link" label="about" class="about-link" onclick="UI.show_about(this);return false" condition="!env:extwin" />
13
- <roundcube:endif />
14
- <roundcube:if condition="config:support_url" />
15
- <a href="<roundcube:var name='config:support_url' />" target="_blank" class="support-link" id="supportlink"><roundcube:label name="support" /></a>
16
- <roundcube:endif />
17
- </div>
18
- <roundcube:container name="topline-center" id="topline-center" />
19
- <div class="topright">
20
- <roundcube:container name="topline-right" id="topline-right" />
21
- <roundcube:if condition="!env:extwin && !env:framed" />
22
- <span class="username"><roundcube:object name="username" /></span>
23
- <roundcube:button command="logout" label="logout" type="link" class="button-logout" />
24
- <roundcube:elseif condition="env:extwin" />
25
- <roundcube:button name="close" type="link" label="close" class="closelink" onclick="self.close()" />
26
- <roundcube:endif />
27
- </div>
28
-</div>
29
-<roundcube:if condition="!env:extwin && !env:framed" />
30
-<div id="topnav">
31
- <h2 id="aria-label-tasknav" class="voice"><roundcube:label name="arialabeltasknav" /></h2>
32
- <div id="taskbar" class="topright" role="navigation" aria-labelledby="aria-label-tasknav">
33
- <roundcube:button command="mail" label="mail" type="link" class="button-mail" classSel="button-mail button-selected" innerClass="button-inner" />
34
- <roundcube:button command="addressbook" label="contacts" type="link" class="button-addressbook" classSel="button-addressbook button-selected" innerClass="button-inner" />
35
- <roundcube:container name="taskbar" id="taskbar" />
36
- <roundcube:button command="settings" label="settings" type="link" class="button-settings" classSel="button-settings button-selected" innerClass="button-inner" />
37
- <roundcube:button command="logout" label="logout" type="link" class="button-logout" classSel="button-logout" innerClass="button-inner" />
38
- <span class="minmodetoggle" role="presentation"></span>
39
- </div>
40
- <roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" alt="Logo" onclick="if(window.rcmail)rcmail.command('switch-task','mail')" />
41
-</div>
42
-<roundcube:endif />
43
-
44
-<br style="clear:both" />
45
-</div>
46
roundcubemail-1.6.tar.gz/skins/larry/includes/links.html
Deleted
13
1
2
-<meta name="viewport" content="" id="viewport" />
3
-<roundcube:object name="meta" />
4
-<roundcube:object name="links" />
5
-<link rel="stylesheet" type="text/css" href="/styles.css" />
6
-<roundcube:if condition="in_array(env:task, array('mail','addressbook','settings'))" />
7
-<link rel="stylesheet" type="text/css" href="/<roundcube:var name="env:task" />.css" />
8
-<roundcube:endif />
9
-<script src="/ui.js"></script>
10
-<roundcube:add_label name="errortitle" />
11
-<roundcube:add_label name="toggleadvancedoptions" />
12
-<roundcube:add_label name="options" />
13
roundcubemail-1.6.tar.gz/skins/larry/includes/mailtoolbar.html
Deleted
68
1
2
-<roundcube:button command="compose" type="link" class="button compose disabled" classAct="button compose" classSel="button compose pressed" label="compose" title="writenewmessage" />
3
-<span class="spacer"></span>
4
-<roundcube:button command="reply" type="link" class="button reply disabled" classAct="button reply" classSel="button reply pressed" label="reply" title="replytomessage" />
5
-<span class="dropbutton">
6
- <roundcube:button command="reply-all" type="link" class="button reply-all disabled" classAct="button reply-all" classSel="button reply-all pressed" label="replyall" title="replytoallmessage" />
7
- <a href="#reply-all" class="dropbuttontip" id="replyallmenulink" onclick="UI.toggle_popup('replyallmenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="replyallmenu-menu" tabindex="0"><roundcube:label name="arialabelreplyalloptions" /></a>
8
-</span>
9
-<span class="dropbutton">
10
- <roundcube:button command="forward" type="link" class="button forward disabled" classAct="button forward" classSel="button forward pressed" label="forward" title="forwardmessage" />
11
- <a href="#forward" class="dropbuttontip" id="forwardmenulink" onclick="UI.toggle_popup('forwardmenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="forwardmenu-menu" tabindex="0"><roundcube:label name="arialabelforwardingoptions" /></a>
12
-</span>
13
-<roundcube:button command="delete" type="link" class="button delete disabled" classAct="button delete" classSel="button delete pressed" label="delete" title="deletemessage" />
14
-<roundcube:if condition="template:name == 'message'" />
15
-<roundcube:button command="move" type="link" class="button move disabled" classAct="button move" classSel="button move pressed" label="move" title="moveto" data-menu-pos="bottom" />
16
-<roundcube:button command="print" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" title="printmessage" />
17
-<roundcube:endif />
18
-<roundcube:container name="toolbar" id="mailtoolbar" />
19
-<roundcube:button name="markmenulink" id="markmessagemenulink" type="link" class="button markmessage" label="mark" title="markmessages" onclick="UI.toggle_popup('markmessagemenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="markmessagemenu-menu" />
20
-<roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="button more" label="more" title="moreactions" onclick="UI.toggle_popup('messagemenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="messagemenu-menu" />
21
-
22
-<div id="forwardmenu" class="popupmenu" aria-hidden="true">
23
- <h3 id="aria-label-forwardmenu" class="voice"><roundcube:label name="arialabelforwardingoptions" /></h3>
24
- <ul id="forwardmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-forwardmenu">
25
- <roundcube:button type="link-menuitem" command="forward-inline" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" />
26
- <roundcube:button type="link-menuitem" command="forward-attachment" label="forwardattachment" prop="sub" classAct="forwardattachmentlink active" class="forwardattachmentlink" />
27
- <roundcube:button type="link-menuitem" command="bounce" label="bouncemsg" prop="sub" classAct="bouncelink active" class="bouncelink" />
28
- <roundcube:container name="forwardmenu" id="forwardmenu-menu" />
29
- </ul>
30
-</div>
31
-
32
-<div id="replyallmenu" class="popupmenu" aria-hidden="true">
33
- <h3 id="aria-label-replyallmenu" class="voice"><roundcube:label name="arialabelreplyalloptions" /></h3>
34
- <ul id="replyallmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-replyallmenu">
35
- <roundcube:button type="link-menuitem" command="reply-all" label="replyall" prop="sub" class="replyalllink" classAct="replyalllink active" />
36
- <roundcube:button type="link-menuitem" command="reply-list" label="replylist" prop="sub" class="replylistlink" classAct="replylistlink active" />
37
- <roundcube:container name="replyallmenu" id="replyallmenu-menu" />
38
- </ul>
39
-</div>
40
-
41
-<div id="messagemenu" class="popupmenu" aria-hidden="true">
42
- <h3 id="aria-label-messagemenu" class="voice"><roundcube:label name="arialabelmoremessageactions" /></h3>
43
- <ul id="messagemenu-menu" class="toolbarmenu iconized" role="menu" aria-labelledby="aria-label-messagemenu">
44
- <roundcube:button type="link-menuitem" command="print" label="printmessage" class="icon" classAct="icon active" innerclass="icon print" />
45
- <roundcube:button type="link-menuitem" command="download" label="emlsave" class="icon" classAct="icon active" innerclass="icon download" />
46
- <roundcube:button type="link-menuitem" command="edit" prop="new" label="editasnew" class="icon" classAct="icon active" innerclass="icon edit" />
47
- <roundcube:button type="link-menuitem" command="viewsource" label="viewsource" class="icon" classAct="icon active" innerclass="icon viewsource" />
48
- <roundcube:button type="link-menuitem" command="move" label="moveto" class="icon" classAct="icon active" innerclass="icon move folder-selector-link" />
49
- <roundcube:button type="link-menuitem" command="copy" label="copyto" class="icon" classAct="icon active" innerclass="icon copy folder-selector-link" />
50
- <roundcube:button type="link-menuitem" command="open" label="openinextwin" target="_blank" class="icon" classAct="icon active" innerclass="icon extwin" />
51
- <roundcube:container name="messagemenu" id="messagemenu-menu" />
52
- </ul>
53
-</div>
54
-
55
-<div id="markmessagemenu" class="popupmenu" aria-hidden="true">
56
- <h3 id="aria-label-markmessagemenu" class="voice"><roundcube:label name="arialabelmarkmessagesas" /></h3>
57
- <ul id="markmessagemenu-menu" class="toolbarmenu iconized" role="menu" aria-labelledby="aria-label-markmessagemenu">
58
- <roundcube:button type="link-menuitem" command="mark" prop="read" label="markread" classAct="icon active" class="icon" innerclass="icon read" />
59
- <roundcube:button type="link-menuitem" command="mark" prop="unread" label="markunread" classAct="icon active" class="icon" innerclass="icon unread" />
60
- <roundcube:button type="link-menuitem" command="mark" prop="flagged" label="markflagged" classAct="icon active" class="icon" innerclass="icon flagged" />
61
- <roundcube:button type="link-menuitem" command="mark" prop="unflagged" label="markunflagged" classAct="icon active" class="icon" innerclass="icon unflagged" />
62
- <roundcube:if condition="config:flag_for_deletion && !config:skip_deleted" />
63
- <roundcube:button type="link-menuitem" command="mark" prop="undelete" label="markundeleted" classAct="icon active" class="icon" innerclass="icon undeleted" />
64
- <roundcube:endif />
65
- <roundcube:container name="markmenu" id="markmessagemenu-menu" />
66
- </ul>
67
-</div>
68
roundcubemail-1.6.tar.gz/skins/larry/includes/settingstabs.html
Deleted
11
1
2
-<div id="settings-sections" class="uibox listbox" role="navigation" aria-labelledby="aria-label-settingstabs">
3
-<h2 class="boxtitle" id="aria-label-settingstabs"><roundcube:label name="settings" /></h2>
4
-<div id="settings-tabs" class="scroller">
5
- <ul class="listing iconized">
6
- <roundcube:object name="settingstabs" class="listitem" tagname="li" />
7
- </ul>
8
- <roundcube:container name="tabs" id="settings-tabs" />
9
-</div>
10
-</div>
11
roundcubemail-1.6.tar.gz/skins/larry/mail.css
Deleted
1559
1
2
-/**
3
- * Roundcube webmail styles for the Email section
4
- *
5
- * Copyright (c) The Roundcube Dev Team
6
- * Screendesign by FLINT / Büro für Gestaltung, bueroflint.com
7
- *
8
- * The contents are subject to the Creative Commons Attribution-ShareAlike
9
- * License. It is allowed to copy, distribute, transmit and to adapt the work
10
- * by keeping credits to the original autors in the README file.
11
- * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
12
- */
13
-
14
-#mailview-left {
15
- position: absolute;
16
- top: 0;
17
- left: 0;
18
- width: 200px;
19
- bottom: 0;
20
- z-index: 1; /* fixes scrolling in Edge (#5750) */
21
-}
22
-
23
-#mailview-right {
24
- position: absolute;
25
- top: 0;
26
- left: 212px;
27
- right: 0;
28
- bottom: 0;
29
-}
30
-
31
-#mailview-right.fullwidth {
32
- left: 0;
33
-}
34
-
35
-#mailview-top {
36
- position: absolute;
37
- top: 0;
38
- left: 0;
39
- right: 0;
40
- bottom: 0px;
41
-}
42
-
43
-html.ie #mailview-top {
44
- overflow: visible; /* fixes display issues of fixed list header in IE */
45
-}
46
-
47
-#mailview-bottom {
48
- display: none;
49
- position: absolute;
50
- left: 0;
51
- bottom: 0;
52
- right: 0;
53
- height: 0;
54
- border-radius: 4px;
55
-}
56
-
57
-#composeview-right #mailview-bottom {
58
- border-radius: 0 0 4px 4px;
59
-}
60
-
61
-#mailboxcontainer,
62
-#messagelistcontainer {
63
- position: absolute;
64
- top: 0;
65
- left: 0;
66
- width: 100%;
67
- bottom: 0;
68
- outline: none;
69
-}
70
-
71
-#messagelistcontainer {
72
- top: 0;
73
- bottom: 30px;
74
- overflow: auto;
75
-}
76
-
77
-/* Real browsers accept this (not IE) */
78
-html>/**/body #messagelist {
79
- overflow: auto;
80
- overflow-x: hidden;
81
-}
82
-
83
-#messagelistfooter {
84
- position: absolute;
85
- bottom: 0;
86
- left: 0;
87
- right: 0;
88
- height: 22px;
89
- padding: 5px 6px 3px;
90
- border-top: 1px solid #ddd;
91
- background: #eaeaea;
92
- border-radius: 0 0 4px 4px;
93
- white-space: nowrap;
94
-}
95
-
96
-#messagelistfooter.rightalign {
97
- text-align: right;
98
-}
99
-
100
-#messagelistfooter #countcontrols {
101
- display: inline-block;
102
-}
103
-
104
-#messagelistfooter #listcontrols,
105
-#messagelistfooter #listselectors {
106
- display: inline-block;
107
- margin-right: 2em;
108
- vertical-align: middle;
109
-}
110
-
111
-#messagelistfooter #listselectors .menuselector {
112
- margin-top: -2px;
113
-}
114
-
115
-a.iconbutton.listmode {
116
- width: 26px;
117
- height: 20px;
118
- background-position: 0 -477px;
119
-}
120
-
121
-a.iconbutton.threadmode {
122
- width: 26px;
123
- height: 20px;
124
- background-position: 0 -497px;
125
-}
126
-
127
-a.iconbutton.listmode.selected {
128
- background-position: -26px -477px;
129
-}
130
-
131
-a.iconbutton.threadmode.selected {
132
- background-position: -26px -497px;
133
-}
134
-
135
-#mailboxlist > li:first-child {
136
- border-top: 0;
137
-}
138
-
139
-.folderlist li.mailbox.unread > a {
140
- padding-right: 36px;
141
-}
142
-
143
-.folderlist li.unread {
144
- font-weight: bold;
145
-}
146
-
147
-.folderlist li.recent > a {
148
- color: #017cb4;
149
-}
150
-
151
-.folderlist li.mailbox .unreadcount {
152
- position: absolute;
153
- top: 3px;
154
- right: 6px;
155
- min-width: 1.8em;
156
- line-height: 15px;
157
- padding: 2px 4px;
158
- background: #6a939f;
159
- border-radius: 9px;
160
- color: #fff;
161
- text-align: center;
162
- font-weight: bold;
163
- text-shadow: none;
164
-}
165
-
166
-.folderlist li.mailbox.selected > a .unreadcount {
167
- background: #005d76;
168
-}
169
-
170
-.folderlist li.mailbox.recent > a .unreadcount {
171
- background: #006ca4;
172
-}
173
-
174
-#searchfilter {
175
- position: absolute;
176
- right: 256px;
177
- width: auto;
178
- top: 2px;
179
-}
180
-
181
-#searchfilter select {
182
- height: 26px;
183
-}
184
-
185
-#mailview-left select.mailboxlist {
186
- position: relative;
187
- top: 10px;
188
- width: 100%;
189
-}
190
-
191
-#messagetoolbar {
192
- position: absolute;
193
- top: -6px;
194
- left: 0;
195
- height: 40px;
196
- white-space: nowrap;
197
-}
198
-
199
-#messagetoolbar.fullwidth {
200
- right: 0;
201
-}
202
-
203
-#messagesearchtools {
204
- position: absolute;
205
- right: 0;
206
- top: 0;
207
-}
208
-
209
-#s_interval {
210
- margin: 3px 8px;
211
-}
212
-
213
-/*** message list ***/
214
-
215
-table.messagelist {
216
- z-index: 1;
217
-}
218
-
219
-table.messagelist.fixedcopy {
220
- z-index: 2;
221
-}
222
-
223
-.messagelist thead th:first-child {
224
- border-radius: 4px 0 0 0; /* for Chrome */
225
-}
226
-
227
-.messagelist tr > .attachment,
228
-.messagelist tr > .threads,
229
-.messagelist tr > .status,
230
-.messagelist tr > .flag,
231
-.messagelist tr > .priority {
232
- width: 20px;
233
- padding: 2px 3px !important;
234
-}
235
-
236
-.messagelist tr > .threads {
237
- width: 26px;
238
-}
239
-
240
-.messagelist tr > .threads + td,
241
-.messagelist tr > .threads + th {
242
- border-left: 0;
243
-}
244
-
245
-.messagelist tr > .size {
246
- width: 60px;
247
- text-align: right;
248
-}
249
-
250
-.messagelist thead tr th.size {
251
- text-align: left;
252
-}
253
-
254
-.messagelist tr > .fromto,
255
-.messagelist tr > .from,
256
-.messagelist tr > .to,
257
-.messagelist tr > .cc,
258
-.messagelist tr > .replyto {
259
- width: 200px;
260
-}
261
-
262
-.messagelist tr > .date {
263
- width: 155px;
264
-}
265
-
266
-.messagelist tr > .folder {
267
- width: 135px;
268
-}
269
-
270
-.messagelist tr > .hidden {
271
- display: none;
272
-}
273
-
274
-.messagelist tr.message {
275
-/* background-color: #fff; */
276
-}
277
-
278
-.messagelist tr.thread.expanded:not(.selected) td {
279
- background-color: #ededed;
280
-}
281
-
282
-.messagelist tr.unread {
283
- font-weight: bold;
284
-/* background-color: #fff; */
285
-}
286
-
287
-.messagelist tr.flagged th,
288
-.messagelist tr.flagged td,
289
-.messagelist tr.flagged td a {
290
- color: #f30;
291
-}
292
-
293
-.messagelist thead tr th.sortedASC a,
294
-.messagelist thead tr th.sortedDESC a {
295
- color: #004458;
296
- text-decoration: underline;
297
- background-image: url(images/listicons.png);
298
- background-repeat: no-repeat;
299
- background-position: right -912px;
300
-}
301
-
302
-.messagelist thead tr th.sortedASC a {
303
- background-position: right -944px;
304
-}
305
-
306
-.messagelist td img {
307
- vertical-align: middle;
308
- display: inline-block;
309
-}
310
-
311
-.messagelist tbody td a {
312
- color: #333;
313
- text-decoration: none;
314
- white-space: nowrap;
315
- cursor: default;
316
-}
317
-
318
-.messagelist tbody tr td.flag,
319
-.messagelist tbody tr td.status,
320
-.messagelist tbody tr td.subject span.status {
321
- cursor: pointer;
322
-}
323
-
324
-.messagelist tr > .flag span,
325
-.messagelist tr > .status span,
326
-.messagelist tr > .attachment span,
327
-.messagelist tr > .priority span {
328
- display: block;
329
- width: 20px;
330
- text-indent: -5000px;
331
- overflow: hidden;
332
-}
333
-
334
-.messagelist tr td div.collapsed,
335
-.messagelist tr td div.expanded,
336
-.messagelist tr > .threads .listmenu,
337
-.messagelist tr .attachment span.attachment,
338
-.messagelist tr .attachment span.report,
339
-.messagelist tr .attachment span.encrypted,
340
-.messagelist tr > .priority span.priority,
341
-.messagelist tr > .priority span.prio1,
342
-.messagelist tr > .priority span.prio2,
343
-.messagelist tr > .priority span.prio3,
344
-.messagelist tr > .priority span.prio4,
345
-.messagelist tr > .priority span.prio5,
346
-.messagelist tr .flag span.flagged,
347
-.messagelist tr .flag span.unflagged,
348
-.messagelist tr .flag span.unflagged:hover,
349
-.messagelist tr > .status span.status,
350
-.messagelist tr > .status span.msgicon,
351
-.messagelist tr > .status span.deleted,
352
-.messagelist tr > .status span.unread,
353
-.messagelist tr > .status span.unreadchildren,
354
-.messagelist tr > .subject span.msgicon,
355
-.messagelist tr > .subject span.deleted,
356
-.messagelist tr > .subject span.unread,
357
-.messagelist tr > .subject span.replied,
358
-.messagelist tr > .subject span.forwarded,
359
-.messagelist tr > .subject span.unreadchildren {
360
- display: inline-block;
361
- vertical-align: middle;
362
- height: 18px;
363
- width: 20px;
364
- padding: 0;
365
- background: url(images/listicons.png) -100px 0 no-repeat;
366
-}
367
-
368
-.messagelist tbody tr .attachment span.attachment {
369
- background-position: 0 -996px;
370
-}
371
-
372
-.messagelist thead tr .attachment span.attachment {
373
- background-position: -24px -996px;
374
-}
375
-
376
-.messagelist tbody tr .attachment span.report {
377
- background-position: -24px -1116px;
378
-}
379
-
380
-.messagelist tbody tr .attachment span.encrypted {
381
- background-position: 0 -2272px;
382
-}
383
-
384
-.messagelist thead tr th.priority span.priority {
385
- background-position: -25px -1845px;
386
-}
387
-
388
-.messagelist tr td.priority span.prio5 {
389
- background-position: -2px -1905px;
390
-}
391
-
392
-.messagelist tr td.priority span.prio4 {
393
- background-position: -2px -1885px;
394
-}
395
-
396
-.messagelist tr td.priority span.prio2 {
397
- background-position: -2px -1865px;
398
-}
399
-
400
-.messagelist tr td.priority span.prio1 {
401
- background-position: -2px -1845px;
402
-}
403
-
404
-/* thread parent message with flagged children */
405
-.messagelist tr.flaggedroot td.flag span.unflagged {
406
- background-position: -23px -1076px;
407
-}
408
-
409
-.messagelist tbody tr .flag span.flagged {
410
- background-position: 0 -1036px;
411
-}
412
-
413
-.messagelist thead tr th.flag span.flagged {
414
- background-position: -22px -1037px;
415
-}
416
-
417
-.messagelist tr:hover td.status span.msgicon {
418
- background-position: -23px -1057px;
419
-}
420
-
421
-.messagelist tr:hover .flag span.unflagged {
422
- background-position: -23px -1076px;
423
-}
424
-
425
-.messagelist tr td.subject span.msgicon,
426
-.messagelist tr td.subject span.unreadchildren {
427
- background-position: 0 -1056px;
428
- margin: 0 1px 0 0;
429
- width: 24px;
430
-}
431
-
432
-.messagelist tr td.subject span.replied {
433
- background-position: 0 -1076px;
434
-}
435
-
436
-.messagelist tr td.subject span.forwarded {
437
- background-position: 0 -1096px;
438
-}
439
-
440
-.messagelist tr td.subject span.replied.forwarded {
441
- background-position: 0 -1116px;
442
-}
443
-
444
-.messagelist tr td.status span.msgicon,
445
-.messagelist tr td.flag span.unflagged,
446
-.messagelist tr td.status span.unreadchildren {
447
- background-position: 0 1056px; /* no icon */
448
-}
449
-/*
450
-.messagelist tr td.status span.msgicon:hover {
451
- background-position: 0 -272px;
452
-}
453
-*/
454
-.messagelist tr td.status span.deleted,
455
-.messagelist tr:hover td.status span.deleted,
456
-.messagelist tr td.subject span.deleted {
457
- background-position: -21px -1096px;
458
-}
459
-
460
-.messagelist tr td.status span.status,
461
-.messagelist tr td.status span.unread,
462
-.messagelist tr td.subject span.unread,
463
-.messagelist tr td.status span.unread:hover {
464
- background-position: 0 -1017px !important;
465
-}
466
-
467
-.messagelist thead tr th.status span.status {
468
- background-position: -23px -1017px;
469
-}
470
-
471
-.messagelist tr td div.collapsed {
472
- background-position: 0 -1137px;
473
- cursor: pointer;
474
-}
475
-
476
-.messagelist tr td div.expanded {
477
- background-position: 0 -1157px;
478
- cursor: pointer;
479
-}
480
-
481
-.messagelist tr th.threads .listmenu {
482
- background-position: 4px -972px;
483
- cursor: pointer;
484
- width: 24px;
485
- height: 21px;
486
- overflow: hidden;
487
- text-indent: -5000px;
488
- margin: -3px -5px -2px -6px;
489
- padding: 3px 5px 2px 6px;
490
-}
491
-
492
-.messagelist tr th.threads .listmenu:focus {
493
- background-color: rgba(73,180,210,0.7);
494
- outline: none;
495
-}
496
-
497
-.messagelist thead tr th.subject,
498
-.messagelist tbody tr td.subject {
499
- width: 99%;
500
- white-space: nowrap;
501
-}
502
-
503
-.messagelist tbody tr td.subject a {
504
- cursor: default;
505
- vertical-align: middle; /* #1487091 */
506
-}
507
-
508
-/* thread parent message with unread children */
509
-.messagelist tbody tr.unroot td.subject a {
510
- text-decoration: underline;
511
-}
512
-
513
-/**** tree indicators ****/
514
-
515
-.messagelist tbody tr td span.branch div {
516
- display: inline-block;
517
-}
518
-
519
-.messagelist tbody tr td span.branch div.tree {
520
- width: 15px;
521
-}
522
-
523
-#listoptions ul.proplist {
524
- min-width: 16em;
525
-}
526
-
527
-/**** message view ****/
528
-
529
-#mailpreviewframe {
530
- display: none;
531
- position: absolute;
532
- top: 0;
533
- left: 0;
534
- width: 100%;
535
- bottom: 0px;
536
-}
537
-
538
-#messagecontframe {
539
- border: 0;
540
- border-radius: 4px;
541
-}
542
-
543
-#messagecontent {
544
- position: absolute;
545
- top: 110px;
546
- left: 0;
547
- width: 100%;
548
- bottom: 1px;
549
- overflow: auto;
550
- -webkit-overflow-scrolling: touch;
551
-}
552
-
553
-#messageheader,
554
-#composeheaders {
555
- position: relative;
556
- padding: 3px 0;
557
- background: #f9f9f9;
558
- border-bottom: 1px solid #dfdfdf;
559
-}
560
-
561
-#mailview-right #messageheader {
562
- border-radius: 4px 4px 0 0;
563
- padding-left: 78px;
564
- /* avoid headers eating up all the vertical space */
565
- max-height: 50%;
566
- overflow: auto;
567
-}
568
-
569
-h2.subject {
570
- font-size: 15px;
571
- margin: 0 15em 0 0;
572
- padding: 4px 8px 2px 8px;
573
- white-space: nowrap;
574
- overflow: hidden;
575
- text-overflow: ellipsis;
576
-}
577
-
578
-#mailview-right #messageheader h2.subject {
579
- margin-left: -56px;
580
-}
581
-
582
-h3.subject {
583
- font-size: 14px;
584
- margin: 0 15em 0 0;
585
- padding: 8px 8px 4px 8px;
586
- white-space: nowrap;
587
- overflow: hidden;
588
- text-overflow: ellipsis;
589
-}
590
-
591
-.headers-table td {
592
- color: #666;
593
- padding: 1px 8px;
594
-}
595
-
596
-.headers-table td.header,
597
-.ui-dialog-content.popup span.adr {
598
- font-weight: bold;
599
-}
600
-
601
-.headers-table td.header-title {
602
- white-space: nowrap;
603
-}
604
-
605
-.headers-table td.header a,
606
-.ui-dialog-content.popup span.adr a {
607
- color: #666;
608
- text-decoration: none;
609
-}
610
-
611
-.headers-table td.header a:hover,
612
-.ui-dialog-content.popup span.adr a:hover {
613
- text-decoration: underline;
614
-}
615
-
616
-.headers-table td.subject {
617
- color: #333;
618
- font-weight: bold;
619
-}
620
-
621
-.headers-table td.header span,
622
-.ui-dialog-content.popup span.adr {
623
- white-space: nowrap;
624
-}
625
-
626
-.headers-table td.header a.morelink {
627
- color: #0069a6;
628
- white-space: nowrap;
629
- font-weight: normal;
630
-}
631
-
632
-.rcmaddcontact {
633
- position: relative;
634
- top: 1px;
635
- margin-left: 0.5em;
636
-}
637
-
638
-.rcmaddcontact imp {
639
- width: 20px;
640
- height: 13px;
641
-}
642
-
643
-#preview-allheaders {
644
- display: none;
645
-}
646
-
647
-#preview-allheaders td.header-title,
648
-#preview-shortheaders td.header-title {
649
- padding-left: 0;
650
-}
651
-
652
-#preview-shortheaders td.header {
653
- padding-right: 18px;
654
-}
655
-
656
-.moreheaderstoggle {
657
- display: block;
658
- position: absolute;
659
- top: 0;
660
- left: 0;
661
- bottom: 0;
662
- width: 18px;
663
- padding: 0;
664
- outline: none;
665
- background: #e9e9e9;
666
- border-right: 1px solid #dfdfdf;
667
- border-radius: 3px 0 0 0; /* for Opera */
668
-}
669
-
670
-.moreheaderstoggle:focus {
671
- background: #66bcd9;
672
- border-right-color: #66bcd9;
673
-}
674
-
675
-.moreheaderstoggle .iconlink {
676
- display: inline-block;
677
- position: absolute;
678
- top: 8px;
679
- left: 0;
680
- width: 18px;
681
- height: 16px;
682
- background: url(images/buttons.png) -27px -242px no-repeat;
683
-}
684
-
685
-.moreheaderstoggle.remove .iconlink {
686
- top: auto;
687
- bottom: 5px;
688
- background-position: -5px -242px;
689
-}
690
-
691
-#full-headers {
692
- position: relative;
693
-}
694
-
695
-div.more-headers {
696
- position: absolute;
697
- top: -12px;
698
- right: 10px;
699
- width: 12px;
700
- height: 10px;
701
- cursor: pointer;
702
- background: url(images/buttons.png) center -1579px no-repeat;
703
-}
704
-
705
-div.hide-headers {
706
- background-position: center -1590px;
707
-}
708
-
709
-#all-headers {
710
- position: relative;
711
- margin: 4px 10px;
712
- padding: 0;
713
- height: 180px;
714
- border: 1px solid #ccc;
715
- border-radius: 4px;
716
- background: #fdfdfd;
717
-}
718
-
719
-#headers-source {
720
- display: none;
721
- position: absolute;
722
- top: 0;
723
- left: 0;
724
- right: 0;
725
- bottom: 0;
726
- padding: 3px 6px;
727
- overflow: auto;
728
- text-align: left;
729
- color: #333;
730
-}
731
-
732
-#messageheader.previewheader #all-headers {
733
- margin-left: 0;
734
-}
735
-
736
-#messageheader.previewheader {
737
- position: relative;
738
- height: auto;
739
- min-height: 52px;
740
- padding: 0 0 3px 72px;
741
-}
742
-
743
-#messageheader.previewheader h3.subject {
744
- padding: 8px 8px 2px 0;
745
-}
746
-
747
-#messageheader.previewheader #contactphoto {
748
- display: block;
749
- position: absolute;
750
- top: 11px;
751
- left: 30px;
752
- width: 32px;
753
- height: 32px;
754
- overflow: hidden;
755
- background: url(images/contactpic_32px.png) center center no-repeat #fff;
756
- border-radius: 3px;
757
-}
758
-
759
-#messageheader.previewheader #contactphoto img {
760
- width: 32px;
761
- height: auto;
762
- border-radius: 3px;
763
-}
764
-
765
-#messageheader .message-headers {
766
- min-height: 60px;
767
-}
768
-
769
-#messageheader #contactphoto {
770
- display: block;
771
- position: absolute;
772
- top: 34px;
773
- left: 30px;
774
- width: 48px;
775
- height: 48px;
776
- overflow: hidden;
777
- border-radius: 4px;
778
- border: 1px solid #e6e6e6;
779
- background: url(images/contactpic_48px.png) center center no-repeat #fff;
780
-}
781
-
782
-#messageheader #contactphoto img {
783
- width: 48px;
784
- height: auto;
785
- border-radius: 4px;
786
-}
787
-
788
-#messageheader #countcontrols,
789
-#messageheader #formatcontrols {
790
- position: absolute;
791
- top: 8px;
792
- right: 8px;
793
- text-align: right;
794
- white-space: nowrap;
795
-}
796
-
797
-#messageheader #formatcontrols {
798
- top: 38px;
799
- right: 8px;
800
-}
801
-
802
-#messageheader .pagenav .countdisplay {
803
- padding-right: 0.5em;
804
- white-space: nowrap;
805
-}
806
-
807
-#messagecontent .leftcol,
808
-#messagepreview .leftcol {
809
- margin-right: 252px;
810
-}
811
-
812
-#messagecontent .rightcol,
813
-#messagepreview .rightcol {
814
- position: absolute;
815
- right: 8px;
816
- width: 230px;
817
- min-height: 200px;
818
- background: #f0f0f0;
819
- padding: 8px;
820
- border-radius: 4px;
821
- z-index: 1;
822
-}
823
-
824
-#messagecontent .rightcol {
825
- margin-top: 8px;
826
-}
827
-
828
-#messagebody {
829
- position: relative;
830
- margin: 8px;
831
-}
832
-
833
-#messagebody.mailvelope {
834
- margin: 0;
835
-}
836
-
837
-#message-objects div,
838
-#messagebody span.part-notice {
839
- margin: 8px;
840
-}
841
-
842
-#message-objects div.notice {
843
- display: block;
844
- color: #960;
845
- border: 1px solid #ffdf0e;
846
- background-color: #fef893;
847
- background-position: 5px -87px;
848
- padding: 6px 12px 6px 30px;
849
- white-space: normal;
850
-}
851
-
852
-#message-objects div a.button,
853
-#messagebody span.part-notice a.button {
854
- margin-left: 10px;
855
- margin-top: -1px;
856
-}
857
-
858
-div.message-part,
859
-div.message-htmlpart,
860
-div.message-partheaders {
861
- padding: 10px 2px;
862
- border-top: 1px solid #ccc;
863
-}
864
-
865
-#messagebody div:first-child {
866
- padding-top: 0;
867
- border-top: 0;
868
-}
869
-
870
-div.message-part div.pre {
871
- margin: 0;
872
- padding: 0;
873
- font-family: monospace;
874
- font-size: 12px;
875
-}
876
-
877
-div.message-part span.sig {
878
- color: #666;
879
-}
880
-
881
-div.message-part blockquote {
882
- color: blue;
883
- border-left: 2px solid blue;
884
- border-right: 2px solid blue;
885
- background-color: #F6F6F6;
886
- margin: 2px 0;
887
- padding: 0 0.4em;
888
- overflow: hidden;
889
- text-overflow: ellipsis;
890
-}
891
-
892
-div.message-part blockquote blockquote {
893
- color: green;
894
- border-left: 2px solid green;
895
- border-right: 2px solid green;
896
-}
897
-
898
-div.message-part blockquote blockquote blockquote {
899
- color: #900;
900
- border-left: 2px solid #b00;
901
- border-right: 2px solid #b00;
902
-}
903
-
904
-div.message-partheaders {
905
- margin-top: 8px;
906
- padding: 8px 0;
907
-}
908
-
909
-div.message-partheaders .headers-table {
910
- width: 100%;
911
-}
912
-
913
-div.message-partheaders .headers-table td.header-title {
914
- width: 1%;
915
- padding-left: 0;
916
- vertical-align: top;
917
-}
918
-
919
-div.message-partheaders .headers-table td.header {
920
- width: 99%;
921
-}
922
-
923
-#messagebody > hr {
924
- color: #fff;
925
- background: #fff;
926
- border: 0;
927
- border-bottom: 2px solid #f0f0f0;
928
-}
929
-
930
-#messagebody fieldset.image-attachment {
931
- border: 0;
932
- border-top: 1px solid #ccc;
933
- margin-top: 1em;
934
-}
935
-
936
-#messagebody fieldset.image-attachment p > img {
937
- max-width: 80%;
938
-}
939
-
940
-#messagebody legend.image-filename {
941
- color: #999;
942
- font-size: 0.9em;
943
- margin: 0 1em;
944
-}
945
-
946
-#messagebody p.image-attachment {
947
- position: relative;
948
- padding: 1em;
949
- margin-bottom: 0;
950
- border-top: 1px solid #ccc;
951
-}
952
-
953
-#messagebody p.image-attachment a.image-link {
954
- float: left;
955
- display: block;
956
- margin-right: 2em;
957
- min-width: 160px;
958
- min-height: 60px;
959
- text-align: center;
960
-}
961
-
962
-#messagebody p.image-attachment .image-filename {
963
- display: block;
964
- font-weight: bold;
965
- line-height: 1.6em;
966
-}
967
-
968
-#messagebody p.image-attachment .image-filesize {
969
- padding-right: 1em;
970
- white-space: nowrap;
971
-}
972
-
973
-#messagebody p.image-attachment .attachment-links a {
974
- margin-right: 0.6em;
975
-}
976
-
977
-#messagepartcontainer {
978
- position: absolute;
979
- top: 0;
980
- left: 232px;
981
- right: 0;
982
- bottom: 0;
983
-}
984
-
985
-#messagepartframe {
986
- border: 0;
987
- width: 100%;
988
- height: 100%;
989
-}
990
-
991
-#messagepartheader {
992
- position: absolute;
993
- top: 0;
994
- left: 0;
995
- width: 220px;
996
- bottom: 0;
997
-}
998
-
999
-#messagepartheader table {
1000
- table-layout: fixed;
1001
- overflow: hidden;
1002
-}
1003
-
1004
-#messagepartheader table td {
1005
- text-overflow: ellipsis;
1006
- overflow: hidden;
1007
-}
1008
-
1009
-#messagepartheader table td.title {
1010
- width: 60px;
1011
- padding-right: 0;
1012
-}
1013
-
1014
-.subject .flag-icon {
1015
- display: none;
1016
-}
1017
-
1018
-body.status-flagged .flag-icon {
1019
- display: inline-block;
1020
- background: url(images/listicons.png) 0 -1038px no-repeat;
1021
- width: 20px;
1022
- height: 16px;
1023
- vertical-align: text-top;
1024
-}
1025
-
1026
-
1027
-/*** message composition ***/
1028
-
1029
-#composeview-left {
1030
- position: absolute;
1031
- top: 0;
1032
- left: 0;
1033
- width: 200px;
1034
- bottom: 0;
1035
-}
1036
-
1037
-#composeview-right {
1038
- position: absolute;
1039
- top: 0;
1040
- left: 212px;
1041
- right: 0;
1042
- bottom: 0;
1043
-}
1044
-
1045
-#compose-contacts {
1046
- position: absolute;
1047
- top: 0;
1048
- left: 0;
1049
- width: 100%;
1050
- bottom: 0;
1051
-}
1052
-
1053
-#compose-contacts .listsearchbox {
1054
- display: block;
1055
-}
1056
-
1057
-#compose-contacts #directorylist {
1058
- border-bottom: 4px solid #c7e3ef;
1059
-}
1060
-
1061
-#compose-contacts .scroller {
1062
- top: 65px;
1063
-}
1064
-
1065
-#contacts-table {
1066
- table-layout: fixed;
1067
-}
1068
-
1069
-#contacts-table td {
1070
- width: 100%;
1071
-}
1072
-
1073
-#contacts-table td span {
1074
- display: block;
1075
-}
1076
-
1077
-#contacts-table td span.email {
1078
- display: inline;
1079
- color: #69939e;
1080
- font-style: italic;
1081
- margin-left: 0.5em;
1082
-}
1083
-
1084
-#compose-contacts li a,
1085
-#contacts-table td {
1086
- background-image: url(images/listicons.png);
1087
- background-position: -100px 0;
1088
- background-repeat: no-repeat;
1089
- overflow: hidden;
1090
- text-overflow: ellipsis;
1091
-}
1092
-
1093
-#compose-contacts li a {
1094
- padding-left: 36px;
1095
-}
1096
-
1097
-#contacts-table td.contactgroup a {
1098
- color: #376572;
1099
- text-decoration: none;
1100
-}
1101
-
1102
-#contacts-table td.contactgroup a span {
1103
- display: inline-block;
1104
- font-size: 16px;
1105
- font-weight: bold;
1106
- line-height: 11px;
1107
- margin-left: 0.3em;
1108
-}
1109
-
1110
-#contacts-table tr:first-child td {
1111
- border-top: 0;
1112
-}
1113
-
1114
-#compose-contacts li.addressbook a {
1115
- background-position: 6px -766px;
1116
-}
1117
-
1118
-#compose-contacts li.addressbook a:focus,
1119
-#compose-contacts li.addressbook.selected a {
1120
- background-position: 6px -791px;
1121
-}
1122
-
1123
-#contacts-table td.contactgroup {
1124
- background-position: 6px -1553px;
1125
-}
1126
-
1127
-#contacts-table tr.selected td.contactgroup {
1128
- background-position: 6px -1577px;
1129
-}
1130
-
1131
-#contacts-table td.contact {
1132
- background-position: 6px -1601px;
1133
-}
1134
-
1135
-#contacts-table tr.selected td.contact {
1136
- background-position: 6px -1625px;
1137
-}
1138
-
1139
-#compose-content {
1140
- position: absolute;
1141
- top: 0;
1142
- left: 0;
1143
- right: 0;
1144
- bottom: 0px;
1145
- overflow: hidden;
1146
-}
1147
-
1148
-#composeheaders {
1149
- border-radius: 4px 4px 0 0;
1150
- padding-left: 19px;
1151
-}
1152
-
1153
-#composebuttons {
1154
- position: absolute;
1155
- top: 6px;
1156
- right: 6px;
1157
- width: auto;
1158
- white-space: nowrap;
1159
- z-index: 100;
1160
-}
1161
-
1162
-#composebuttons a.button.extwin {
1163
- padding: 2px 3px;
1164
-}
1165
-
1166
-.compose-headers {
1167
- width: 99%;
1168
- margin-bottom: 2px;
1169
-}
1170
-
1171
-.compose-headers td {
1172
- padding: 2px 4px;
1173
-}
1174
-
1175
-.compose-headers td.title {
1176
- width: 10%;
1177
- white-space: nowrap;
1178
- padding-left: 6px;
1179
- min-width: 60px;
1180
- line-height: 16px;
1181
-}
1182
-
1183
-.compose-headers td.top {
1184
- vertical-align: top;
1185
- padding-top: 5px;
1186
-}
1187
-
1188
-.compose-headers td.title label {
1189
- float: left;
1190
-}
1191
-
1192
-.compose-headers td.title a.iconbutton {
1193
- float: right;
1194
- position: relative;
1195
- top: -2px;
1196
- width: 15px;
1197
-}
1198
-
1199
-.compose-headers td.editfield {
1200
- width: 90%;
1201
- padding-left: 4px;
1202
-}
1203
-
1204
-.compose-headers td.editfield a.iconlink {
1205
- margin-left: 0.5em;
1206
-}
1207
-
1208
-.compose-headers td.formlinks {
1209
- padding: 0 4px;
1210
-}
1211
-
1212
-.compose-headers td textarea,
1213
-.compose-headers td input {
1214
- width: 100%;
1215
- resize: none;
1216
-}
1217
-
1218
-.compose-headers td.bounceopts {
1219
- padding-top: 20px;
1220
-}
1221
-
1222
-#compose-cc, #compose-bcc, #compose-replyto, #compose-followupto {
1223
- display: none;
1224
-}
1225
-
1226
-#composeoptions {
1227
- display: none;
1228
- padding: 0 0 0 8px;
1229
- white-space: normal;
1230
-}
1231
-
1232
-.composeoption {
1233
- color: #666;
1234
- padding-right: 22px;
1235
- white-space: nowrap;
1236
-}
1237
-
1238
-#composeoptions .composeoption {
1239
- display: inline-block;
1240
- padding: 4px 22px 4px 0;
1241
-}
1242
-
1243
-#composeoptions .composeoption:last-child {
1244
- padding-right: 4px;
1245
-}
1246
-
1247
-#composeview-bottom {
1248
- position: relative;
1249
- width: 100%;
1250
- height: 200px;
1251
-}
1252
-
1253
-#composebodycontainer {
1254
- position: absolute;
1255
- top: 0;
1256
- left: 0;
1257
- right: 260px;
1258
- bottom: 0;
1259
- border-radius: 0 0 0 4px;
1260
-}
1261
-
1262
-#composebodycontainer.buttons {
1263
- bottom: 42px;
1264
-}
1265
-
1266
-#composebodycontainer.mailvelope {
1267
- right: 0;
1268
- z-index: 10;
1269
-}
1270
-
1271
-#composebodycontainer.mailvelope > iframescrolling='no' {
1272
- position: relative;
1273
-}
1274
-
1275
-#composebody {
1276
- position: absolute;
1277
- top: 0;
1278
- left: 0;
1279
- bottom: 0;
1280
- width: 99%;
1281
- border: 0;
1282
- border-radius: 0 0 0 4px;
1283
- padding: 4px;
1284
- resize: none;
1285
- font-family: monospace;
1286
- font-size: 9pt;
1287
- outline: none;
1288
-}
1289
-
1290
-#composebody:active,
1291
-#composebody:focus {
1292
- box-shadow: inset 0 0 3px 2px rgba(71,135,177, 0.9);
1293
-}
1294
-
1295
-#compose-attachments {
1296
- position: absolute;
1297
- right: 0;
1298
- top: 1px;
1299
- bottom: 0;
1300
- width: 240px;
1301
- background: #f0f0f0;
1302
- border-style: solid;
1303
- border-color: #f0f0f0 #f0f0f0 #f0f0f0 #ddd;
1304
- border-width: 1px;
1305
- padding: 8px;
1306
- overflow: auto;
1307
-}
1308
-
1309
-#compose-attachments.droptarget {
1310
- background-image: url(images/filedrop.png);
1311
- background-position: center bottom;
1312
- background-repeat: no-repeat;
1313
-}
1314
-
1315
-#compose-attachments.droptarget.hover,
1316
-#compose-attachments.droptarget.active {
1317
- border-color: #017db4;
1318
- box-shadow: 0 0 3px 2px rgba(71,135,177, 0.5);
1319
-}
1320
-
1321
-#compose-attachments.droptarget.hover {
1322
- background-color: #d9ecf4;
1323
- box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
1324
-}
1325
-
1326
-#compose-attachments .attachment-size {
1327
- color: #888;
1328
-}
1329
-
1330
-#compose-attachments .hint {
1331
- color: #666;
1332
- margin: 0 0 8px;
1333
-}
1334
-
1335
-#composeview-bottom .formbuttons.floating {
1336
- position: absolute;
1337
- width: auto;
1338
- right: 260px;
1339
- z-index: 200;
1340
- padding-bottom: 8px;
1341
-}
1342
-
1343
-#composebodycontainer .tox-tinymce {
1344
- border: 0 !important;
1345
- margin-top: 1px;
1346
-}
1347
-
1348
-#uploadform a.iconlink {
1349
- margin-left: 1em;
1350
- text-indent: -5000px;
1351
-}
1352
-
1353
-#uploadform form div {
1354
- margin: 4px 0;
1355
-}
1356
-
1357
-
1358
-/**** Styles for widescreen (3-column) view ****/
1359
-
1360
-.widescreen #mailview-top {
1361
- bottom: 0;
1362
- width: 400px;
1363
- height: auto;
1364
-}
1365
-
1366
-.widescreen #mailview-bottom {
1367
- left: 412px;
1368
- top:0;
1369
- border: 1px solid #b2b8bf;
1370
-}
1371
-
1372
-#messagelistheader,
1373
-.widescreen #messagelistfooter #countcontrols,
1374
-.widescreen .messagelist > thead,
1375
-.widescreen .messagelist .branch,
1376
-.widescreen table.fixedcopy {
1377
- display: none;
1378
-}
1379
-
1380
-.widescreen #messagelistcontainer {
1381
- top: 34px;
1382
- overflow-x: hidden;
1383
-}
1384
-
1385
-.widescreen #messagelistheader {
1386
- display: block;
1387
- position: absolute;
1388
- top: 0;
1389
- left: 0;
1390
- right: 0;
1391
- height: 34px;
1392
- padding: 6px 6px;
1393
- background: #efefef;
1394
- border-radius: 4px 4px 0 0;
1395
- white-space: nowrap;
1396
- border-bottom: 1px solid #dfdfdf;
1397
- -webkit-box-sizing: border-box;
1398
- -moz-box-sizing: border-box;
1399
- box-sizing: border-box;
1400
-}
1401
-
1402
-.widescreen #messagelistheader .listmenu {
1403
- margin-right: 8px;
1404
- vertical-align: middle;
1405
- line-height: 24px;
1406
- width: 28px;
1407
- padding: 0;
1408
- text-indent: -5000px;
1409
- overflow: hidden;
1410
- display: inline-block;
1411
- background: url(images/listicons.png) 0 -2328px no-repeat;
1412
-}
1413
-
1414
-.widescreen #messagelistheader .listmenu:focus {
1415
- background-color: rgba(128,128,128,0.55);
1416
- outline: none;
1417
-}
1418
-
1419
-.widescreen #countcontrols {
1420
- line-height: 24px;
1421
- display: inline;
1422
- min-width: 0;
1423
-}
1424
-
1425
-.widescreen #countcontrols span {
1426
- padding: 0;
1427
-}
1428
-
1429
-.widescreen .pagenavbuttons {
1430
- position: absolute;
1431
- top: 4px;
1432
- right: 6px;
1433
-}
1434
-
1435
-.widescreen .pagenavbuttons a.button {
1436
- background: none;
1437
- border: 0;
1438
- padding: 2px;
1439
- margin: 0;
1440
- height: 20px;
1441
-}
1442
-
1443
-.widescreen .pagenavbuttons a.button.pressed {
1444
- background: inherit;
1445
-}
1446
-
1447
-.widescreen a.listmenu:focus,
1448
-.widescreen .pagenav a.button:focus {
1449
- border-color: #017db6;
1450
- outline: none;
1451
-}
1452
-
1453
-.widescreen .messagelist td {
1454
- border-left: 0;
1455
- vertical-align: top;
1456
- padding: 3px 2px !important;
1457
-}
1458
-
1459
-.widescreen .messagelist td.subject {
1460
- width: 99%;
1461
- position: relative; /* for span.date positioning in Firefox */
1462
-}
1463
-
1464
-.widescreen .messagelist td.threads {
1465
- width: 20px;
1466
- vertical-align: bottom;
1467
-}
1468
-
1469
-.widescreen .messagelist td.threads div {
1470
- padding-bottom: 1px;
1471
-}
1472
-
1473
-.widescreen .messagelist td.flags {
1474
- width: 22px;
1475
-}
1476
-
1477
-.widescreen .messagelist td.subject span {
1478
- line-height: 20px;
1479
-}
1480
-
1481
-.widescreen .messagelist td.subject span.date {
1482
- right: 2px;
1483
- top: 3px;
1484
- position: absolute;
1485
- color: #666;
1486
-}
1487
-
1488
-.widescreen .messagelist td.subject span.fromto {
1489
- padding-left: 22px;
1490
- display: block;
1491
- margin-right: 10em;
1492
- overflow: hidden;
1493
- text-overflow: ellipsis;
1494
- color: #666;
1495
-}
1496
-
1497
-.widescreen .messagelist td.subject span.size {
1498
- display: none;
1499
-}
1500
-
1501
-.widescreen .messagelist tr.flagged td.subject span.date,
1502
-.widescreen .messagelist tr.flagged td.subject span.fromto {
1503
- color: #ff5c33;
1504
-}
1505
-
1506
-.widescreen .messagelist tr.deleted td.subject span.date,
1507
-.widescreen .messagelist tr.deleted td.subject span.fromto {
1508
- color: #ccc;
1509
-}
1510
-
1511
-.widescreen .messagelist td.subject span.subject {
1512
- clear: both;
1513
- display: block;
1514
- font-size: 12px;
1515
- overflow: hidden;
1516
- text-overflow: ellipsis;
1517
-}
1518
-
1519
-.widescreen .messagelist td.flags span {
1520
- width: 20px;
1521
- height: 20px;
1522
- display: block;
1523
- margin-left: 1px;
1524
-}
1525
-
1526
-.widescreen .messagelist td.flags span.flag {
1527
- cursor: pointer;
1528
-}
1529
-
1530
-.widescreen .messagelist tr td.subject span.msgicon,
1531
-.widescreen .messagelist tr td.subject span.unreadchildren {
1532
- width: 20px;
1533
- height: 20px;
1534
-}
1535
-
1536
-/* move attachments list to the bottom on narrow mail preview page */
1537
-@media screen and (max-width: 800px) {
1538
- #messagepreview .leftcol {
1539
- margin-right: 0;
1540
- }
1541
- #messagepreview .rightcol {
1542
- min-height: 0;
1543
- width: auto;
1544
- right: 0;
1545
- position: relative;
1546
- border-radius: 0;
1547
- border-bottom: 1px solid #dfdfdf;
1548
- background-color: #f9f9f9;
1549
- padding: 5px;
1550
- }
1551
- ul.attachmentslist,
1552
- ul.attachmentslist > li,
1553
- div.rightcol > div > a.button {
1554
- vertical-align: middle;
1555
- display: inline-block;
1556
- margin-top: 0;
1557
- }
1558
-}
1559
roundcubemail-1.6.tar.gz/skins/larry/mail.min.css
Deleted
4
1
2
-#mailview-left{position:absolute;top:0;left:0;width:200px;bottom:0;z-index:1}#mailview-right{position:absolute;top:0;left:212px;right:0;bottom:0}#mailview-right.fullwidth{left:0}#mailview-top{position:absolute;top:0;left:0;right:0;bottom:0}html.ie #mailview-top{overflow:visible}#mailview-bottom{display:none;position:absolute;left:0;bottom:0;right:0;height:0;border-radius:4px}#composeview-right #mailview-bottom{border-radius:0 0 4px 4px}#mailboxcontainer,#messagelistcontainer{position:absolute;top:0;left:0;width:100%;bottom:0;outline:0}#messagelistcontainer{top:0;bottom:30px;overflow:auto}html>body #messagelist{overflow:auto;overflow-x:hidden}#messagelistfooter{position:absolute;bottom:0;left:0;right:0;height:22px;padding:5px 6px 3px;border-top:1px solid #ddd;background:#eaeaea;border-radius:0 0 4px 4px;white-space:nowrap}#messagelistfooter.rightalign{text-align:right}#messagelistfooter #countcontrols{display:inline-block}#messagelistfooter #listcontrols,#messagelistfooter #listselectors{display:inline-block;margin-right:2em;vertical-align:middle}#messagelistfooter #listselectors .menuselector{margin-top:-2px}a.iconbutton.listmode{width:26px;height:20px;background-position:0 -477px}a.iconbutton.threadmode{width:26px;height:20px;background-position:0 -497px}a.iconbutton.listmode.selected{background-position:-26px -477px}a.iconbutton.threadmode.selected{background-position:-26px -497px}#mailboxlist>li:first-child{border-top:0}.folderlist li.mailbox.unread>a{padding-right:36px}.folderlist li.unread{font-weight:700}.folderlist li.recent>a{color:#017cb4}.folderlist li.mailbox .unreadcount{position:absolute;top:3px;right:6px;min-width:1.8em;line-height:15px;padding:2px 4px;background:#6a939f;border-radius:9px;color:#fff;text-align:center;font-weight:700;text-shadow:none}.folderlist li.mailbox.selected>a .unreadcount{background:#005d76}.folderlist li.mailbox.recent>a .unreadcount{background:#006ca4}#searchfilter{position:absolute;right:256px;width:auto;top:2px}#searchfilter select{height:26px}#mailview-left select.mailboxlist{position:relative;top:10px;width:100%}#messagetoolbar{position:absolute;top:-6px;left:0;height:40px;white-space:nowrap}#messagetoolbar.fullwidth{right:0}#messagesearchtools{position:absolute;right:0;top:0}#s_interval{margin:3px 8px}table.messagelist{z-index:1}table.messagelist.fixedcopy{z-index:2}.messagelist thead th:first-child{border-radius:4px 0 0 0}.messagelist tr>.attachment,.messagelist tr>.threads,.messagelist tr>.status,.messagelist tr>.flag,.messagelist tr>.priority{width:20px;padding:2px 3px!important}.messagelist tr>.threads{width:26px}.messagelist tr>.threads+td,.messagelist tr>.threads+th{border-left:0}.messagelist tr>.size{width:60px;text-align:right}.messagelist thead tr th.size{text-align:left}.messagelist tr>.fromto,.messagelist tr>.from,.messagelist tr>.to,.messagelist tr>.cc,.messagelist tr>.replyto{width:200px}.messagelist tr>.date{width:155px}.messagelist tr>.folder{width:135px}.messagelist tr>.hidden{display:none}.messagelist tr.thread.expanded:not(.selected) td{background-color:#ededed}.messagelist tr.unread{font-weight:700}.messagelist tr.flagged th,.messagelist tr.flagged td,.messagelist tr.flagged td a{color:#f30}.messagelist thead tr th.sortedASC a,.messagelist thead tr th.sortedDESC a{color:#004458;text-decoration:underline;background-image:url(images/listicons.png?v=ce39.10766);background-repeat:no-repeat;background-position:right -912px}.messagelist thead tr th.sortedASC a{background-position:right -944px}.messagelist td img{vertical-align:middle;display:inline-block}.messagelist tbody td a{color:#333;text-decoration:none;white-space:nowrap;cursor:default}.messagelist tbody tr td.flag,.messagelist tbody tr td.status,.messagelist tbody tr td.subject span.status{cursor:pointer}.messagelist tr>.flag span,.messagelist tr>.status span,.messagelist tr>.attachment span,.messagelist tr>.priority span{display:block;width:20px;text-indent:-5000px;overflow:hidden}.messagelist tr td div.collapsed,.messagelist tr td div.expanded,.messagelist tr>.threads .listmenu,.messagelist tr .attachment span.attachment,.messagelist tr .attachment span.report,.messagelist tr .attachment span.encrypted,.messagelist tr>.priority span.priority,.messagelist tr>.priority span.prio1,.messagelist tr>.priority span.prio2,.messagelist tr>.priority span.prio3,.messagelist tr>.priority span.prio4,.messagelist tr>.priority span.prio5,.messagelist tr .flag span.flagged,.messagelist tr .flag span.unflagged,.messagelist tr .flag span.unflagged:hover,.messagelist tr>.status span.status,.messagelist tr>.status span.msgicon,.messagelist tr>.status span.deleted,.messagelist tr>.status span.unread,.messagelist tr>.status span.unreadchildren,.messagelist tr>.subject span.msgicon,.messagelist tr>.subject span.deleted,.messagelist tr>.subject span.unread,.messagelist tr>.subject span.replied,.messagelist tr>.subject span.forwarded,.messagelist tr>.subject span.unreadchildren{display:inline-block;vertical-align:middle;height:18px;width:20px;padding:0;background:url(images/listicons.png?v=ce39.10766) -100px 0 no-repeat}.messagelist tbody tr .attachment span.attachment{background-position:0 -996px}.messagelist thead tr .attachment span.attachment{background-position:-24px -996px}.messagelist tbody tr .attachment span.report{background-position:-24px -1116px}.messagelist tbody tr .attachment span.encrypted{background-position:0 -2272px}.messagelist thead tr th.priority span.priority{background-position:-25px -1845px}.messagelist tr td.priority span.prio5{background-position:-2px -1905px}.messagelist tr td.priority span.prio4{background-position:-2px -1885px}.messagelist tr td.priority span.prio2{background-position:-2px -1865px}.messagelist tr td.priority span.prio1{background-position:-2px -1845px}.messagelist tr.flaggedroot td.flag span.unflagged{background-position:-23px -1076px}.messagelist tbody tr .flag span.flagged{background-position:0 -1036px}.messagelist thead tr th.flag span.flagged{background-position:-22px -1037px}.messagelist tr:hover td.status span.msgicon{background-position:-23px -1057px}.messagelist tr:hover .flag span.unflagged{background-position:-23px -1076px}.messagelist tr td.subject span.msgicon,.messagelist tr td.subject span.unreadchildren{background-position:0 -1056px;margin:0 1px 0 0;width:24px}.messagelist tr td.subject span.replied{background-position:0 -1076px}.messagelist tr td.subject span.forwarded{background-position:0 -1096px}.messagelist tr td.subject span.replied.forwarded{background-position:0 -1116px}.messagelist tr td.status span.msgicon,.messagelist tr td.flag span.unflagged,.messagelist tr td.status span.unreadchildren{background-position:0 1056px}.messagelist tr td.status span.deleted,.messagelist tr:hover td.status span.deleted,.messagelist tr td.subject span.deleted{background-position:-21px -1096px}.messagelist tr td.status span.status,.messagelist tr td.status span.unread,.messagelist tr td.subject span.unread,.messagelist tr td.status span.unread:hover{background-position:0 -1017px!important}.messagelist thead tr th.status span.status{background-position:-23px -1017px}.messagelist tr td div.collapsed{background-position:0 -1137px;cursor:pointer}.messagelist tr td div.expanded{background-position:0 -1157px;cursor:pointer}.messagelist tr th.threads .listmenu{background-position:4px -972px;cursor:pointer;width:24px;height:21px;overflow:hidden;text-indent:-5000px;margin:-3px -5px -2px -6px;padding:3px 5px 2px 6px}.messagelist tr th.threads .listmenu:focus{background-color:rgba(73,180,210,.7);outline:0}.messagelist thead tr th.subject,.messagelist tbody tr td.subject{width:99%;white-space:nowrap}.messagelist tbody tr td.subject a{cursor:default;vertical-align:middle}.messagelist tbody tr.unroot td.subject a{text-decoration:underline}.messagelist tbody tr td span.branch div{display:inline-block}.messagelist tbody tr td span.branch div.tree{width:15px}#listoptions ul.proplist{min-width:16em}#mailpreviewframe{display:none;position:absolute;top:0;left:0;width:100%;bottom:0}#messagecontframe{border:0;border-radius:4px}#messagecontent{position:absolute;top:110px;left:0;width:100%;bottom:1px;overflow:auto;-webkit-overflow-scrolling:touch}#messageheader,#composeheaders{position:relative;padding:3px 0;background:#f9f9f9;border-bottom:1px solid #dfdfdf}#mailview-right #messageheader{border-radius:4px 4px 0 0;padding-left:78px;max-height:50%;overflow:auto}h2.subject{font-size:15px;margin:0 15em 0 0;padding:4px 8px 2px 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#mailview-right #messageheader h2.subject{margin-left:-56px}h3.subject{font-size:14px;margin:0 15em 0 0;padding:8px 8px 4px 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.headers-table td{color:#666;padding:1px 8px}.headers-table td.header,.ui-dialog-content.popup span.adr{font-weight:700}.headers-table td.header-title{white-space:nowrap}.headers-table td.header a,.ui-dialog-content.popup span.adr a{color:#666;text-decoration:none}.headers-table td.header a:hover,.ui-dialog-content.popup span.adr a:hover{text-decoration:underline}.headers-table td.subject{color:#333;font-weight:700}.headers-table td.header span,.ui-dialog-content.popup span.adr{white-space:nowrap}.headers-table td.header a.morelink{color:#0069a6;white-space:nowrap;font-weight:400}.rcmaddcontact{position:relative;top:1px;margin-left:.5em}.rcmaddcontact imp{width:20px;height:13px}#preview-allheaders{display:none}#preview-allheaders td.header-title,#preview-shortheaders td.header-title{padding-left:0}#preview-shortheaders td.header{padding-right:18px}.moreheaderstoggle{display:block;position:absolute;top:0;left:0;bottom:0;width:18px;padding:0;outline:0;background:#e9e9e9;border-right:1px solid #dfdfdf;border-radius:3px 0 0 0}.moreheaderstoggle:focus{background:#66bcd9;border-right-color:#66bcd9}.moreheaderstoggle .iconlink{display:inline-block;position:absolute;top:8px;left:0;width:18px;height:16px;background:url(images/buttons.png?v=2e08.13608) -27px -242px no-repeat}.moreheaderstoggle.remove .iconlink{top:auto;bottom:5px;background-position:-5px -242px}#full-headers{position:relative}div.more-headers{position:absolute;top:-12px;right:10px;width:12px;height:10px;cursor:pointer;background:url(images/buttons.png?v=2e08.13608) center -1579px no-repeat}div.hide-headers{background-position:center -1590px}#all-headers{position:relative;margin:4px 10px;padding:0;height:180px;border:1px solid #ccc;border-radius:4px;background:#fdfdfd}#headers-source{display:none;position:absolute;top:0;left:0;right:0;bottom:0;padding:3px 6px;overflow:auto;text-align:left;color:#333}#messageheader.previewheader #all-headers{margin-left:0}#messageheader.previewheader{position:relative;height:auto;min-height:52px;padding:0 0 3px 72px}#messageheader.previewheader h3.subject{padding:8px 8px 2px 0}#messageheader.previewheader #contactphoto{display:block;position:absolute;top:11px;left:30px;width:32px;height:32px;overflow:hidden;background:url(images/contactpic_32px.png?v=ee80.246) center center no-repeat #fff;border-radius:3px}#messageheader.previewheader #contactphoto img{width:32px;height:auto;border-radius:3px}#messageheader .message-headers{min-height:60px}#messageheader #contactphoto{display:block;position:absolute;top:34px;left:30px;width:48px;height:48px;overflow:hidden;border-radius:4px;border:1px solid #e6e6e6;background:url(images/contactpic_48px.png?v=1bc4.353) center center no-repeat #fff}#messageheader #contactphoto img{width:48px;height:auto;border-radius:4px}#messageheader #countcontrols,#messageheader #formatcontrols{position:absolute;top:8px;right:8px;text-align:right;white-space:nowrap}#messageheader #formatcontrols{top:38px;right:8px}#messageheader .pagenav .countdisplay{padding-right:.5em;white-space:nowrap}#messagecontent .leftcol,#messagepreview .leftcol{margin-right:252px}#messagecontent .rightcol,#messagepreview .rightcol{position:absolute;right:8px;width:230px;min-height:200px;background:#f0f0f0;padding:8px;border-radius:4px;z-index:1}#messagecontent .rightcol{margin-top:8px}#messagebody{position:relative;margin:8px}#messagebody.mailvelope{margin:0}#message-objects div,#messagebody span.part-notice{margin:8px}#message-objects div.notice{display:block;color:#960;border:1px solid #ffdf0e;background-color:#fef893;background-position:5px -87px;padding:6px 12px 6px 30px;white-space:normal}#message-objects div a.button,#messagebody span.part-notice a.button{margin-left:10px;margin-top:-1px}div.message-part,div.message-htmlpart,div.message-partheaders{padding:10px 2px;border-top:1px solid #ccc}#messagebody div:first-child{padding-top:0;border-top:0}div.message-part div.pre{margin:0;padding:0;font-family:monospace;font-size:12px}div.message-part span.sig{color:#666}div.message-part blockquote{color:#00f;border-left:2px solid #00f;border-right:2px solid #00f;background-color:#f6f6f6;margin:2px 0;padding:0 .4em;overflow:hidden;text-overflow:ellipsis}div.message-part blockquote blockquote{color:green;border-left:2px solid green;border-right:2px solid green}div.message-part blockquote blockquote blockquote{color:#900;border-left:2px solid #b00;border-right:2px solid #b00}div.message-partheaders{margin-top:8px;padding:8px 0}div.message-partheaders .headers-table{width:100%}div.message-partheaders .headers-table td.header-title{width:1%;padding-left:0;vertical-align:top}div.message-partheaders .headers-table td.header{width:99%}#messagebody>hr{color:#fff;background:#fff;border:0;border-bottom:2px solid #f0f0f0}#messagebody fieldset.image-attachment{border:0;border-top:1px solid #ccc;margin-top:1em}#messagebody fieldset.image-attachment p>img{max-width:80%}#messagebody legend.image-filename{color:#999;font-size:.9em;margin:0 1em}#messagebody p.image-attachment{position:relative;padding:1em;margin-bottom:0;border-top:1px solid #ccc}#messagebody p.image-attachment a.image-link{float:left;display:block;margin-right:2em;min-width:160px;min-height:60px;text-align:center}#messagebody p.image-attachment .image-filename{display:block;font-weight:700;line-height:1.6em}#messagebody p.image-attachment .image-filesize{padding-right:1em;white-space:nowrap}#messagebody p.image-attachment .attachment-links a{margin-right:.6em}#messagepartcontainer{position:absolute;top:0;left:232px;right:0;bottom:0}#messagepartframe{border:0;width:100%;height:100%}#messagepartheader{position:absolute;top:0;left:0;width:220px;bottom:0}#messagepartheader table{table-layout:fixed;overflow:hidden}#messagepartheader table td{text-overflow:ellipsis;overflow:hidden}#messagepartheader table td.title{width:60px;padding-right:0}.subject .flag-icon{display:none}body.status-flagged .flag-icon{display:inline-block;background:url(images/listicons.png?v=ce39.10766) 0 -1038px no-repeat;width:20px;height:16px;vertical-align:text-top}#composeview-left{position:absolute;top:0;left:0;width:200px;bottom:0}#composeview-right{position:absolute;top:0;left:212px;right:0;bottom:0}#compose-contacts{position:absolute;top:0;left:0;width:100%;bottom:0}#compose-contacts .listsearchbox{display:block}#compose-contacts #directorylist{border-bottom:4px solid #c7e3ef}#compose-contacts .scroller{top:65px}#contacts-table{table-layout:fixed}#contacts-table td{width:100%}#contacts-table td span{display:block}#contacts-table td span.email{display:inline;color:#69939e;font-style:italic;margin-left:.5em}#compose-contacts li a,#contacts-table td{background-image:url(images/listicons.png?v=ce39.10766);background-position:-100px 0;background-repeat:no-repeat;overflow:hidden;text-overflow:ellipsis}#compose-contacts li a{padding-left:36px}#contacts-table td.contactgroup a{color:#376572;text-decoration:none}#contacts-table td.contactgroup a span{display:inline-block;font-size:16px;font-weight:700;line-height:11px;margin-left:.3em}#contacts-table tr:first-child td{border-top:0}#compose-contacts li.addressbook a{background-position:6px -766px}#compose-contacts li.addressbook a:focus,#compose-contacts li.addressbook.selected a{background-position:6px -791px}#contacts-table td.contactgroup{background-position:6px -1553px}#contacts-table tr.selected td.contactgroup{background-position:6px -1577px}#contacts-table td.contact{background-position:6px -1601px}#contacts-table tr.selected td.contact{background-position:6px -1625px}#compose-content{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden}#composeheaders{border-radius:4px 4px 0 0;padding-left:19px}#composebuttons{position:absolute;top:6px;right:6px;width:auto;white-space:nowrap;z-index:100}#composebuttons a.button.extwin{padding:2px 3px}.compose-headers{width:99%;margin-bottom:2px}.compose-headers td{padding:2px 4px}.compose-headers td.title{width:10%;white-space:nowrap;padding-left:6px;min-width:60px;line-height:16px}.compose-headers td.top{vertical-align:top;padding-top:5px}.compose-headers td.title label{float:left}.compose-headers td.title a.iconbutton{float:right;position:relative;top:-2px;width:15px}.compose-headers td.editfield{width:90%;padding-left:4px}.compose-headers td.editfield a.iconlink{margin-left:.5em}.compose-headers td.formlinks{padding:0 4px}.compose-headers td textarea,.compose-headers td input{width:100%;resize:none}.compose-headers td.bounceopts{padding-top:20px}#compose-cc,#compose-bcc,#compose-replyto,#compose-followupto{display:none}#composeoptions{display:none;padding:0 0 0 8px;white-space:normal}.composeoption{color:#666;padding-right:22px;white-space:nowrap}#composeoptions .composeoption{display:inline-block;padding:4px 22px 4px 0}#composeoptions .composeoption:last-child{padding-right:4px}#composeview-bottom{position:relative;width:100%;height:200px}#composebodycontainer{position:absolute;top:0;left:0;right:260px;bottom:0;border-radius:0 0 0 4px}#composebodycontainer.buttons{bottom:42px}#composebodycontainer.mailvelope{right:0;z-index:10}#composebodycontainer.mailvelope>iframescrolling=no{position:relative}#composebody{position:absolute;top:0;left:0;bottom:0;width:99%;border:0;border-radius:0 0 0 4px;padding:4px;resize:none;font-family:monospace;font-size:9pt;outline:0}#composebody:active,#composebody:focus{box-shadow:inset 0 0 3px 2px rgba(71,135,177,.9)}#compose-attachments{position:absolute;right:0;top:1px;bottom:0;width:240px;background:#f0f0f0;border-style:solid;border-color:#f0f0f0 #f0f0f0 #f0f0f0 #ddd;border-width:1px;padding:8px;overflow:auto}#compose-attachments.droptarget{background-image:url(images/filedrop.png?v=be5d.415);background-position:center bottom;background-repeat:no-repeat}#compose-attachments.droptarget.hover,#compose-attachments.droptarget.active{border-color:#017db4;box-shadow:0 0 3px 2px rgba(71,135,177,.5)}#compose-attachments.droptarget.hover{background-color:#d9ecf4;box-shadow:0 0 5px 2px rgba(71,135,177,.9)}#compose-attachments .attachment-size{color:#888}#compose-attachments .hint{color:#666;margin:0 0 8px}#composeview-bottom .formbuttons.floating{position:absolute;width:auto;right:260px;z-index:200;padding-bottom:8px}#composebodycontainer .tox-tinymce{border:0!important;margin-top:1px}#uploadform a.iconlink{margin-left:1em;text-indent:-5000px}#uploadform form div{margin:4px 0}.widescreen #mailview-top{bottom:0;width:400px;height:auto}.widescreen #mailview-bottom{left:412px;top:0;border:1px solid #b2b8bf}#messagelistheader,.widescreen #messagelistfooter #countcontrols,.widescreen .messagelist>thead,.widescreen .messagelist .branch,.widescreen table.fixedcopy{display:none}.widescreen #messagelistcontainer{top:34px;overflow-x:hidden}.widescreen #messagelistheader{display:block;position:absolute;top:0;left:0;right:0;height:34px;padding:6px 6px;background:#efefef;border-radius:4px 4px 0 0;white-space:nowrap;border-bottom:1px solid #dfdfdf;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.widescreen #messagelistheader .listmenu{margin-right:8px;vertical-align:middle;line-height:24px;width:28px;padding:0;text-indent:-5000px;overflow:hidden;display:inline-block;background:url(images/listicons.png?v=ce39.10766) 0 -2328px no-repeat}.widescreen #messagelistheader .listmenu:focus{background-color:rgba(128,128,128,.55);outline:0}.widescreen #countcontrols{line-height:24px;display:inline;min-width:0}.widescreen #countcontrols span{padding:0}.widescreen .pagenavbuttons{position:absolute;top:4px;right:6px}.widescreen .pagenavbuttons a.button{background:0 0;border:0;padding:2px;margin:0;height:20px}.widescreen .pagenavbuttons a.button.pressed{background:inherit}.widescreen a.listmenu:focus,.widescreen .pagenav a.button:focus{border-color:#017db6;outline:0}.widescreen .messagelist td{border-left:0;vertical-align:top;padding:3px 2px!important}.widescreen .messagelist td.subject{width:99%;position:relative}.widescreen .messagelist td.threads{width:20px;vertical-align:bottom}.widescreen .messagelist td.threads div{padding-bottom:1px}.widescreen .messagelist td.flags{width:22px}.widescreen .messagelist td.subject span{line-height:20px}.widescreen .messagelist td.subject span.date{right:2px;top:3px;position:absolute;color:#666}.widescreen .messagelist td.subject span.fromto{padding-left:22px;display:block;margin-right:10em;overflow:hidden;text-overflow:ellipsis;color:#666}.widescreen .messagelist td.subject span.size{display:none}.widescreen .messagelist tr.flagged td.subject span.date,.widescreen .messagelist tr.flagged td.subject span.fromto{color:#ff5c33}.widescreen .messagelist tr.deleted td.subject span.date,.widescreen .messagelist tr.deleted td.subject span.fromto{color:#ccc}.widescreen .messagelist td.subject span.subject{clear:both;display:block;font-size:12px;overflow:hidden;text-overflow:ellipsis}.widescreen .messagelist td.flags span{width:20px;height:20px;display:block;margin-left:1px}.widescreen .messagelist td.flags span.flag{cursor:pointer}.widescreen .messagelist tr td.subject span.msgicon,.widescreen .messagelist tr td.subject span.unreadchildren{width:20px;height:20px}@media screen and (max-width:800px){#messagepreview .leftcol{margin-right:0}#messagepreview .rightcol{min-height:0;width:auto;right:0;position:relative;border-radius:0;border-bottom:1px solid #dfdfdf;background-color:#f9f9f9;padding:5px}ul.attachmentslist,ul.attachmentslist>li,div.rightcol>div>a.button{vertical-align:middle;display:inline-block;margin-top:0}}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/meta.json
Deleted
9
1
2
-{
3
- "name": "Larry",
4
- "author": "FLINT / Büro für Gestaltung, Switzerland",
5
- "license": "Creative Commons Attribution-ShareAlike",
6
- "license-url": "http://creativecommons.org/licenses/by-sa/3.0/"
7
-}
8
\ No newline at end of file
9
roundcubemail-1.6.tar.gz/skins/larry/plugins
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/acl
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/acl/acl.css
Deleted
126
1
2
-#aclcontainer
3
-{
4
- overflow-x: auto;
5
- border: 1px solid #CCDDE4;
6
- background-color: #D9ECF4;
7
- height: 272px;
8
- box-shadow: none;
9
-}
10
-
11
-#acllist-content
12
-{
13
- position: relative;
14
- height: 230px;
15
- background-color: white;
16
-}
17
-
18
-#acllist-footer
19
-{
20
- position: relative;
21
-}
22
-
23
-#acltable
24
-{
25
- width: 100%;
26
- border-collapse: collapse;
27
- border: none;
28
-}
29
-
30
-#acltable th,
31
-#acltable td
32
-{
33
- white-space: nowrap;
34
- text-align: center;
35
-}
36
-
37
-#acltable thead tr th
38
-{
39
- font-size: 11px;
40
- font-weight: bold;
41
-}
42
-
43
-#acltable tbody td
44
-{
45
- text-align: center;
46
- height: 16px;
47
- cursor: default;
48
-}
49
-
50
-#acltable thead tr > .user
51
-{
52
- width: 30%;
53
- border-left: none;
54
-}
55
-
56
-#acltable.advanced thead tr > .user {
57
- width: 25%;
58
-}
59
-
60
-#acltable tbody td.user
61
-{
62
- text-align: left;
63
-}
64
-
65
-#acltable tbody td.partial
66
-{
67
- background-image: url(images/partial.png);
68
- background-position: center;
69
- background-repeat: no-repeat;
70
-}
71
-
72
-#acltable tbody td.enabled
73
-{
74
- background-image: url(images/enabled.png);
75
- background-position: center;
76
- background-repeat: no-repeat;
77
-}
78
-
79
-#acltable tbody tr.selected td.partial
80
-{
81
- background-color: #019bc6;
82
- background-image: url(images/partial.png), -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
83
- background-image: url(images/partial.png), -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
84
- background-image: url(images/partial.png), -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
85
- background-image: url(images/partial.png), -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
86
- background-image: url(images/partial.png), linear-gradient(top, #019bc6 0%, #017cb4 100%);
87
-}
88
-
89
-#acltable tbody tr.selected td.enabled
90
-{
91
- background-color: #019bc6;
92
- background-image: url(images/enabled.png), -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
93
- background-image: url(images/enabled.png), -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
94
- background-image: url(images/enabled.png), -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
95
- background-image: url(images/enabled.png), -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
96
- background-image: url(images/enabled.png), linear-gradient(top, #019bc6 0%, #017cb4 100%);
97
-}
98
-
99
-#aclform
100
-{
101
- display: none;
102
-}
103
-
104
-#aclform div
105
-{
106
- padding: 0;
107
- text-align: center;
108
- clear: both;
109
-}
110
-
111
-#aclform ul
112
-{
113
- list-style: none;
114
- margin: 0.2em;
115
- padding: 0;
116
-}
117
-
118
-#aclform ul li label
119
-{
120
- margin-left: 0.5em;
121
-}
122
-
123
-ul.toolbarmenu li span.delete {
124
- background-position: 0 -1509px;
125
-}
126
roundcubemail-1.6.tar.gz/skins/larry/plugins/acl/acl.min.css
Deleted
4
1
2
-#aclcontainer{overflow-x:auto;border:1px solid #ccdde4;background-color:#d9ecf4;height:272px;box-shadow:none}#acllist-content{position:relative;height:230px;background-color:#fff}#acllist-footer{position:relative}#acltable{width:100%;border-collapse:collapse;border:0}#acltable th,#acltable td{white-space:nowrap;text-align:center}#acltable thead tr th{font-size:11px;font-weight:700}#acltable tbody td{text-align:center;height:16px;cursor:default}#acltable thead tr>.user{width:30%;border-left:none}#acltable.advanced thead tr>.user{width:25%}#acltable tbody td.user{text-align:left}#acltable tbody td.partial{background-image:url(images/partial.png?v=05d7.389);background-position:center;background-repeat:no-repeat}#acltable tbody td.enabled{background-image:url(images/enabled.png?v=9d9a.674);background-position:center;background-repeat:no-repeat}#acltable tbody tr.selected td.partial{background-color:#019bc6;background-image:url(images/partial.png?v=05d7.389),-moz-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/partial.png?v=05d7.389),-webkit-gradient(linear,left top,left bottom,color-stop(0%,#019bc6),color-stop(100%,#017cb4));background-image:url(images/partial.png?v=05d7.389),-o-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/partial.png?v=05d7.389),-ms-linear-gradient(top,#019bc6 0%,#017cb4 100%);background-image:url(images/partial.png?v=05d7.389),linear-gradient(top,#019bc6 0%,#017cb4 100%)}#acltable tbody tr.selected td.enabled{background-color:#019bc6;background-image:url(images/enabled.png?v=9d9a.674),-moz-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/enabled.png?v=9d9a.674),-webkit-gradient(linear,left top,left bottom,color-stop(0%,#019bc6),color-stop(100%,#017cb4));background-image:url(images/enabled.png?v=9d9a.674),-o-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/enabled.png?v=9d9a.674),-ms-linear-gradient(top,#019bc6 0%,#017cb4 100%);background-image:url(images/enabled.png?v=9d9a.674),linear-gradient(top,#019bc6 0%,#017cb4 100%)}#aclform{display:none}#aclform div{padding:0;text-align:center;clear:both}#aclform ul{list-style:none;margin:.2em;padding:0}#aclform ul li label{margin-left:.5em}ul.toolbarmenu li span.delete{background-position:0 -1509px}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/plugins/acl/images
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/acl/images/enabled.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/acl/images/partial.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/acl/templates
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/acl/templates/table.html
Deleted
32
1
2
-<div id="aclcontainer" class="uibox listbox">
3
-<div id="acllist-content" class="scroller withfooter">
4
- <h2 class="voice" id="aria-label-acltable"><roundcube:label name="acl.ariasummaryacltable" /></h2>
5
- <roundcube:object name="acltable" id="acltable" class="records-table" aria-labelledby="aria-label-acltable" role="listbox" />
6
-</div>
7
-<div id="acllist-footer" class="boxfooter">
8
- <roundcube:button command="acl-create" id="aclcreatelink" type="link" title="acl.newuser" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="aclmenulink" id="aclmenulink" type="link" title="acl.actions" class="listbutton groupactions" onclick="return UI.toggle_popup('aclmenu', event)" innerClass="inner" content="⚙" aria-haspopup="true" aria-expanded="false" aria-owns="aclmenu-menu" />
9
-</div>
10
-</div>
11
-
12
-<div id="aclmenu" class="popupmenu" aria-hidden="true" data-align="bottom">
13
- <h3 id="aria-label-aclactions" class="voice"><roundcube:label name="acl.arialabelaclactions" /></h3>
14
- <ul id="aclmenu-menu" class="toolbarmenu selectable iconized" role="menu" aria-labelledby="aria-label-aclactions">
15
- <li role="menuitem"><roundcube:button command="acl-edit" label="edit" type="link" class="icon" classAct="icon active" innerclass="icon edit" /></li>
16
- <li role="menuitem"><roundcube:button command="acl-delete" label="delete" type="link" class="icon" classAct="icon active" innerclass="icon delete" /></li>
17
- <roundcube:if condition="!in_array('acl_advanced_mode', (array)config:dont_override)" />
18
- <li role="menuitem"><roundcube:button name="acl-switch" type="link" id="acl-switch" label="acl.advanced" onclick="rcmail.command('acl-mode-switch');return false" class="active" /></li>
19
- <roundcube:endif />
20
- </ul>
21
-</div>
22
-
23
-<div id="aclform" class="propform" aria-labelledby="aria-label-aclform" role="form">
24
- <h3 id="aria-label-aclform" class="voice"><roundcube:label name="acl.arialabelaclform" /></h3>
25
- <fieldset class="thinbordered"><legend><roundcube:label name="acl.identifier" /></legend>
26
- <roundcube:object name="acluser" id="acluser" size="35" class="proplist" />
27
- </fieldset>
28
- <fieldset class="thinbordered"><legend><roundcube:label name="acl.myrights" /></legend>
29
- <roundcube:object name="aclrights" class="proplist" />
30
- </fieldset>
31
-</div>
32
roundcubemail-1.6.tar.gz/skins/larry/plugins/enigma
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/enigma/enigma.css
Deleted
190
1
2
-/*** Style for Enigma plugin ***/
3
-
4
-/***** Messages displaying *****/
5
-
6
-#enigma-message,
7
-#messagebody div #enigma-message
8
-{
9
- margin: 0;
10
- margin-bottom: 5px;
11
- padding: 6px 12px 6px 30px;
12
- font-weight: bold;
13
-}
14
-
15
-div.enigmaerror,
16
-#messagebody div.enigmaerror
17
-{
18
- background: url(enigma_icons.png) 3px -201px no-repeat #f2cccd;
19
- border: 1px solid #c00005;
20
- color: #c00005;
21
-}
22
-
23
-div.enigmanotice,
24
-#messagebody div.enigmanotice
25
-{
26
- background: url(enigma_icons.png) 3px -171px no-repeat #c9e6d3;
27
- border: 1px solid #008a2e;
28
- color: #008a2e;
29
-}
30
-
31
-div.enigmawarning,
32
-#messagebody div.enigmawarning
33
-{
34
- background: url(enigma_icons.png) 3px -231px no-repeat #fef893;
35
- border: 1px solid #ffdf0e;
36
- color: #960;
37
-}
38
-
39
-#enigma-message a
40
-{
41
- color: #666666;
42
- padding-left: 10px;
43
-}
44
-
45
-#enigma-message a:hover
46
-{
47
- color: #333333;
48
-}
49
-
50
-p.enigmaattachment {
51
- margin: 0.5em 1em;
52
- width: auto;
53
- background: #f9f9f9;
54
- border: 1px solid #d3d3d3;
55
- border-radius: 4px;
56
-}
57
-
58
-p.enigmaattachment span {
59
- display: inline-block;
60
- background: url(enigma_icons.png) 8px -78px no-repeat;
61
- padding: 1em 0.5em 1em 46px;
62
-}
63
-
64
-/***** E-mail Compose Page *****/
65
-
66
-#messagetoolbar a.button.enigma {
67
- background-image: url(enigma_icons.png);
68
- background-position: center -122px;
69
- background-repeat: no-repeat;
70
-}
71
-
72
-#enigmamenu {
73
- color: white;
74
- padding: 2px 5px;
75
-}
76
-
77
-#enigmamenu div.row {
78
- display: table-row;
79
-}
80
-
81
-#enigmamenu div.row > label {
82
- display: table-cell;
83
- padding: 3px;
84
-}
85
-
86
-#enigmamenu div.row > div {
87
- display: table-cell;
88
- padding: 3px;
89
-}
90
-
91
-/***** Keys/Certs Management *****/
92
-
93
-#settings-sections .enigma.keys a {
94
- background-image: url(enigma_icons.png);
95
- background-position: 7px -345px;
96
- background-repeat: no-repeat;
97
-}
98
-
99
-#settings-sections .enigma.keys.selected a {
100
- background-image: url(enigma_icons.png);
101
- background-position: 7px -368px;
102
- background-repeat: no-repeat;
103
-}
104
-
105
-#sections-table #rcmrowenigma .section {
106
- background-image: url(enigma_icons.png);
107
- background-position: 5px -297px;
108
- background-repeat: no-repeat;
109
-}
110
-
111
-#sections-table #rcmrowenigma.selected .section {
112
- background-image: url(enigma_icons.png);
113
- background-position: 5px -321px;
114
- background-repeat: no-repeat;
115
-}
116
-
117
-#mainscreen.enigma #settings-sections,
118
-#mainscreen.enigma #settings-right
119
-{
120
- top: 44px;
121
-}
122
-
123
-#enigmacontent-box
124
-{
125
- position: absolute;
126
- top: 0px;
127
- left: 272px;
128
- right: 0px;
129
- bottom: 0px;
130
-}
131
-
132
-#enigmakeyslist
133
-{
134
- position: absolute;
135
- top: 0;
136
- bottom: 0;
137
- left: 0;
138
- width: 260px;
139
-}
140
-
141
-#keylistcountbar
142
-{
143
- margin-top: 4px;
144
- margin-left: 4px;
145
-}
146
-
147
-#keys-table
148
-{
149
- width: 100%;
150
- table-layout: fixed;
151
-}
152
-
153
-#keys-table td
154
-{
155
- text-overflow: ellipsis;
156
-}
157
-
158
-#keyimportform fieldset div
159
-{
160
- background-color: #eee;
161
- padding: 10px;
162
-}
163
-
164
-#keycreateform td > label {
165
- display: block;
166
-}
167
-
168
-#keycreateform ul.proplist li {
169
- border: 0;
170
- padding: 2px 0;
171
-}
172
-
173
-#keystoolbar
174
-{
175
- position: absolute;
176
- top: -6px;
177
- left: 0;
178
- height: 40px;
179
- white-space: nowrap;
180
- z-index: 10;
181
-}
182
-
183
-#keystoolbar a.import {
184
- background: url(enigma_icons.png) center 0 no-repeat transparent;
185
-}
186
-
187
-#keystoolbar a.export {
188
- background: url(enigma_icons.png) center -40px no-repeat transparent;
189
-}
190
roundcubemail-1.6.tar.gz/skins/larry/plugins/enigma/enigma.min.css
Deleted
4
1
2
-#enigma-message,#messagebody div #enigma-message{margin:0;margin-bottom:5px;padding:6px 12px 6px 30px;font-weight:700}div.enigmaerror,#messagebody div.enigmaerror{background:url(enigma_icons.png?v=b64c.2520) 3px -201px no-repeat #f2cccd;border:1px solid #c00005;color:#c00005}div.enigmanotice,#messagebody div.enigmanotice{background:url(enigma_icons.png?v=b64c.2520) 3px -171px no-repeat #c9e6d3;border:1px solid #008a2e;color:#008a2e}div.enigmawarning,#messagebody div.enigmawarning{background:url(enigma_icons.png?v=b64c.2520) 3px -231px no-repeat #fef893;border:1px solid #ffdf0e;color:#960}#enigma-message a{color:#666;padding-left:10px}#enigma-message a:hover{color:#333}p.enigmaattachment{margin:.5em 1em;width:auto;background:#f9f9f9;border:1px solid #d3d3d3;border-radius:4px}p.enigmaattachment span{display:inline-block;background:url(enigma_icons.png?v=b64c.2520) 8px -78px no-repeat;padding:1em .5em 1em 46px}#messagetoolbar a.button.enigma{background-image:url(enigma_icons.png?v=b64c.2520);background-position:center -122px;background-repeat:no-repeat}#enigmamenu{color:#fff;padding:2px 5px}#enigmamenu div.row{display:table-row}#enigmamenu div.row>label{display:table-cell;padding:3px}#enigmamenu div.row>div{display:table-cell;padding:3px}#settings-sections .enigma.keys a{background-image:url(enigma_icons.png?v=b64c.2520);background-position:7px -345px;background-repeat:no-repeat}#settings-sections .enigma.keys.selected a{background-image:url(enigma_icons.png?v=b64c.2520);background-position:7px -368px;background-repeat:no-repeat}#sections-table #rcmrowenigma .section{background-image:url(enigma_icons.png?v=b64c.2520);background-position:5px -297px;background-repeat:no-repeat}#sections-table #rcmrowenigma.selected .section{background-image:url(enigma_icons.png?v=b64c.2520);background-position:5px -321px;background-repeat:no-repeat}#mainscreen.enigma #settings-sections,#mainscreen.enigma #settings-right{top:44px}#enigmacontent-box{position:absolute;top:0;left:272px;right:0;bottom:0}#enigmakeyslist{position:absolute;top:0;bottom:0;left:0;width:260px}#keylistcountbar{margin-top:4px;margin-left:4px}#keys-table{width:100%;table-layout:fixed}#keys-table td{text-overflow:ellipsis}#keyimportform fieldset div{background-color:#eee;padding:10px}#keycreateform td>label{display:block}#keycreateform ul.proplist li{border:0;padding:2px 0}#keystoolbar{position:absolute;top:-6px;left:0;height:40px;white-space:nowrap;z-index:10}#keystoolbar a.import{background:url(enigma_icons.png?v=b64c.2520) center 0 no-repeat}#keystoolbar a.export{background:url(enigma_icons.png?v=b64c.2520) center -40px no-repeat}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/plugins/enigma/enigma_icons.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/enigma/templates
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/enigma/templates/keycreate.html
Deleted
23
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe">
8
-
9
-<h1 class="boxtitle"><roundcube:label name="enigma.createkeys" /></h1>
10
-
11
-<div id="key-details" class="boxcontent">
12
- <roundcube:object name="keyform" id="keycreateform" class="propform" size="40" textareacols="40" textarearows="6" />
13
-</div>
14
-
15
-<div class="footerleft formbuttons">
16
- <roundcube:button command="plugin.enigma-key-save" type="input" class="button mainaction" label="save" />
17
-</div>
18
-
19
-<roundcube:include file="/includes/footer.html" />
20
-
21
-</body>
22
-</html>
23
roundcubemail-1.6.tar.gz/skins/larry/plugins/enigma/templates/keyimport.html
Deleted
19
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe fullheight">
8
-
9
-<h1 class="voice"><roundcube:label name="enigma.importkeys" /></h1>
10
-
11
-<div id="import-form" class="boxcontent">
12
- <roundcube:object name="importform" class="propform" id="keyimportform" part="import" />
13
-</div>
14
-
15
-<roundcube:include file="/includes/footer.html" />
16
-
17
-</body>
18
-</html>
19
roundcubemail-1.6.tar.gz/skins/larry/plugins/enigma/templates/keyinfo.html
Deleted
19
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe">
8
-
9
-<h1 class="boxtitle"><roundcube:object name="keyname" part="name" /></h1>
10
-
11
-<div id="key-details" class="boxcontent propform">
12
- <roundcube:object name="keydata" class="propform" />
13
-</div>
14
-
15
-<roundcube:include file="/includes/footer.html" />
16
-
17
-</body>
18
-</html>
19
roundcubemail-1.6.tar.gz/skins/larry/plugins/enigma/templates/keys.html
Deleted
93
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<div id="mainscreen" class="enigma">
12
- <h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="enigma.enigmakeys" /></h1>
13
-
14
- <!-- toolbar -->
15
- <h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
16
- <div id="keystoolbar" class="toolbar" role="toolbar" aria-labelledby="aria-label-toolbar">
17
- <roundcube:button command="plugin.enigma-key-import-search" type="link" class="button search disabled" classAct="button search" classSel="button search pressed" label="search" title="enigma.keyimportsearchlabel" />
18
- <roundcube:button command="plugin.enigma-key-import" type="link" class="button import disabled" classAct="button import" classSel="button import pressed" label="import" title="enigma.importkeys" />
19
- <span class="dropbutton">
20
- <roundcube:button command="plugin.enigma-key-export" type="link" class="button export disabled" classAct="button export" classSel="button export pressed" label="export" title="enigma.exportkeys" />
21
- <a href="#export" class="dropbuttontip" id="exportmenulink" onclick="return UI.toggle_popup('exportmenu',event)" aria-haspopup="true" aria-expanded="false" aria-owns="exportmenu-menu" tabindex="0"><roundcube:label name="enigma.arialabelkeyexportoptions" /></a>
22
- </span>
23
- </div>
24
-
25
- <div id="exportmenu" class="popupmenu" aria-hidden="true">
26
- <h3 id="aria-label-exportmenu" class="voice"><roundcube:label name="enigma.arialabelkeyexportoptions" /></h3>
27
- <ul id="exportmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-exportmenu">
28
- <roundcube:button type="link-menuitem" command="plugin.enigma-key-export" label="exportall" prop="sub" class="exportalllink" classAct="exportalllink active" />
29
- <roundcube:button type="link-menuitem" command="plugin.enigma-key-export-selected" label="exportsel" prop="sub" class="exportsellink" classAct="exportsellink active" />
30
- </ul>
31
- </div>
32
-
33
- <div id="quicksearchbar" class="searchbox" role="search" aria-labelledby="aria-label-searchform">
34
- <h2 id="aria-label-searchform" class="voice"><roundcube:label name="enigma.arialabelkeysearchform" /></h2>
35
- <label for="quicksearchbox" class="voice"><roundcube:label name="arialabelmailquicksearchbox" /></label>
36
- <roundcube:object name="searchform" id="quicksearchbox" />
37
- <a id="searchmenulink" class="iconbutton searchicon" > </a>
38
- <roundcube:button command="reset-search" id="searchreset" type="link" class="iconbutton reset" title="resetsearch" label="resetsearch" />
39
- </div>
40
-
41
- <roundcube:include file="/includes/settingstabs.html" />
42
-
43
- <div id="settings-right" role="main" aria-labelledby="aria-label-enigmakeyslist">
44
- <div id="enigmakeyslist" class="uibox listbox" role="navigation" aria-labelledby="enigmakeyslist-header">
45
- <div id="enigmakeyslist-header" class="boxtitle"><roundcube:label name="enigma.enigmakeys" /></div>
46
- <div class="scroller withfooter">
47
- <roundcube:object name="keyslist" id="keys-table" class="listing" role="listbox" cellspacing="0" noheader="true" />
48
- </div>
49
- <div class="boxpagenav">
50
- <roundcube:button command="firstpage" type="link" class="icon firstpage disabled" classAct="icon firstpage" title="firstpage" label="first" />
51
- <roundcube:button command="previouspage" type="link" class="icon prevpage disabled" classAct="icon prevpage" title="previouspage" label="previous" />
52
- <roundcube:button command="nextpage" type="link" class="icon nextpage disabled" classAct="icon nextpage" title="nextpage" label="next" />
53
- <roundcube:button command="lastpage" type="link" class="icon lastpage disabled" classAct="icon lastpage" title="lastpage" label="last" />
54
- </div>
55
- <div class="boxfooter">
56
- <roundcube:button command="plugin.enigma-key-create" type="link" title="enigma.createkeys" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="enigma.keyadd" /><roundcube:button name="moreactions" id="keyoptionslink" type="link" title="enigma.keyactions" class="listbutton groupactions" onclick="return UI.toggle_popup('keyoptions',event)" innerClass="inner" label="enigma.arialabelkeyoptions" aria-haspopup="true" aria-expanded="false" aria-owns="keyoptionsmenu" />
57
- <span class="countdisplay" aria-live="polite" aria-relevant="text">
58
- <span class="voice"><roundcube:label name="enigma.enigmakeys" /></span>
59
- <roundcube:object name="countdisplay" />
60
- </span>
61
- </div>
62
- </div>
63
-
64
- <div id="enigmacontent-box" class="uibox">
65
- <div class="iframebox">
66
- <roundcube:object name="contentframe" id="keyframe" width="100%" height="100%" frameborder="0" src="env:blankpage" />
67
- </div>
68
- </div>
69
- </div>
70
-</div>
71
-
72
-<div id="keyoptions" class="popupmenu">
73
- <ul class="toolbarmenu">
74
- <li><roundcube:button class="deletelink" type="link" command="plugin.enigma-key-delete" label="enigma.keyremove" target="_blank" classAct="deletelink active" /></li>
75
-<!--
76
- <li><roundcube:button class="disablelink" command="enigma.key-disable" label="enigma.keydisable" target="_blank" classAct="disablelink active" /></li>
77
- <li><roundcube:button class="revokelink" command="enigma.key-revoke" label="enigma.keyrevoke" classAct="revokelink active" /></li>
78
- <li class="separator_below"><roundcube:button class="sendlink" command="enigma.key-send" label="enigma.keysend" classAct="sendlink active" /></li>
79
- <li><roundcube:button class="chpasslink" command="enigma.key-chpass" label="enigma.keychpass" classAct="chpasslink active" /></li>
80
--->
81
- </ul>
82
-</div>
83
-
84
-<roundcube:include file="/includes/footer.html" />
85
-
86
-<script>
87
- new rcube_splitter({ id:'enigmakeyssplitter', p1:'#enigmakeyslist', p2:'#enigmacontent-box',
88
- orientation:'v', relative:true, start:266, min:180, size:12 }).init();
89
-</script>
90
-
91
-</body>
92
-</html>
93
roundcubemail-1.6.tar.gz/skins/larry/plugins/enigma/templates/keysearch.html
Deleted
19
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe fullheight">
8
-
9
-<h1 class="voice"><roundcube:label name="enigma.importkeys" /></h1>
10
-
11
-<div id="import-form" class="boxcontent">
12
- <roundcube:object name="importform" class="propform" id="keyimportform" part="search" />
13
-</div>
14
-
15
-<roundcube:include file="/includes/footer.html" />
16
-
17
-</body>
18
-</html>
19
roundcubemail-1.6.tar.gz/skins/larry/plugins/help
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/help/help.css
Deleted
42
1
2
-
3
-#helpcontentframe {
4
- border: 0;
5
- border-radius: 4px;
6
-}
7
-
8
-#mainscreen .readtext {
9
- margin: 20px;
10
-}
11
-
12
-#helptoolbar {
13
- position: absolute;
14
- top: -6px;
15
- left: 0;
16
- height: 40px;
17
- white-space: nowrap;
18
-}
19
-
20
-#taskbar a.button-help span.button-inner {
21
- background: url(help.png) 0 0 no-repeat;
22
- height: 19px;
23
-}
24
-
25
-#taskbar a.button-help:hover span.button-inner,
26
-#taskbar a.button-help.button-selected span.button-inner {
27
- background: url(help.png) 0 -24px no-repeat;
28
- height: 19px;
29
-}
30
-
31
-.toolbar a.button.help {
32
- background: url(help.png) center -51px no-repeat;
33
-}
34
-
35
-.toolbar a.button.about {
36
- background: url(help.png) center -89px no-repeat;
37
-}
38
-
39
-.toolbar a.button.license {
40
- background: url(help.png) center -130px no-repeat;
41
-}
42
roundcubemail-1.6.tar.gz/skins/larry/plugins/help/help.min.css
Deleted
4
1
2
-#helpcontentframe{border:0;border-radius:4px}#mainscreen .readtext{margin:20px}#helptoolbar{position:absolute;top:-6px;left:0;height:40px;white-space:nowrap}#taskbar a.button-help span.button-inner{background:url(help.png?v=59ac.1124) 0 0 no-repeat;height:19px}#taskbar a.button-help:hover span.button-inner,#taskbar a.button-help.button-selected span.button-inner{background:url(help.png?v=59ac.1124) 0 -24px no-repeat;height:19px}.toolbar a.button.help{background:url(help.png?v=59ac.1124) center -51px no-repeat}.toolbar a.button.about{background:url(help.png?v=59ac.1124) center -89px no-repeat}.toolbar a.button.license{background:url(help.png?v=59ac.1124) center -130px no-repeat}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/plugins/help/help.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/help/templates
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/help/templates/content.html
Deleted
17
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe fullheight">
8
-
9
-<div id="help-<roundcube:var name="env:action" />" class="boxcontent">
10
-<roundcube:object name="helpcontent" />
11
-</div>
12
-
13
-<roundcube:include file="/includes/footer.html" />
14
-
15
-</body>
16
-</html>
17
roundcubemail-1.6.tar.gz/skins/larry/plugins/help/templates/help.html
Deleted
32
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<roundcube:if condition="env:extwin" /><body class="extwin"><roundcube:else /><body><roundcube:endif />
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<div id="mainscreen">
12
-
13
-<div id="helptoolbar" class="toolbar">
14
-<roundcube:object name="tablink" action="index" type="link" label="help.help" title="help.help" class="button help" />
15
-<roundcube:object name="tablink" action="about" type="link" label="help.about" title="help.about" class="button about" />
16
-<roundcube:object name="tablink" action="license" type="link" label="help.license" title="help.license" class="button license" />
17
-<roundcube:container name="helptabs" id="helptabsbar" />
18
-</div>
19
-
20
-<div id="pluginbody" class="uibox offset">
21
- <div class="iframebox help_<roundcube:var name='env:action' />">
22
- <roundcube:object name="contentframe" id="helpcontentframe" style="width:100%; height:100%" frameborder="0" src="env:blankpage" />
23
- </div>
24
-</div>
25
-
26
-</div>
27
-
28
-<roundcube:include file="/includes/footer.html" />
29
-
30
-</body>
31
-</html>
32
roundcubemail-1.6.tar.gz/skins/larry/plugins/hide_blockquote
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/hide_blockquote/style.css
Deleted
34
1
2
-span.blockquote-link {
3
- font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
4
- top: 0;
5
- cursor: pointer;
6
- right: 5px;
7
- height: 14px;
8
- min-width: 40px;
9
- padding: 0 8px;
10
- font-size: 10px;
11
- font-weight: bold;
12
- color: #a8a8a8;
13
- line-height: 14px;
14
- text-decoration: none;
15
- text-shadow: 0px 1px 1px #fff;
16
- text-align: center;
17
- border: 1px solid #e8e8e8;
18
- border-top: none;
19
- border-bottom-right-radius: 6px;
20
- border-bottom-left-radius: 6px;
21
- background: #f8f8f8;
22
- background: -moz-linear-gradient(top, #f8f8f8 0%, #e8e8e8 100%);
23
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#e8e8e8));
24
- background: -o-linear-gradient(top, #f8f8f8 0%, #e8e8e8 100%);
25
- background: -ms-linear-gradient(top, #f8f8f8 0%, #e8e8e8 100%);
26
- background: linear-gradient(top, #f8f8f8 0%, #e8e8e8 100%);
27
-}
28
-
29
-blockquote.blockquote-header {
30
- text-overflow: ellipsis !important;
31
- padding-right: 60px !important;
32
-}
33
\ No newline at end of file
34
roundcubemail-1.6.tar.gz/skins/larry/plugins/hide_blockquote/style.min.css
Deleted
4
1
2
-span.blockquote-link{font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;top:0;cursor:pointer;right:5px;height:14px;min-width:40px;padding:0 8px;font-size:10px;font-weight:700;color:#a8a8a8;line-height:14px;text-decoration:none;text-shadow:0 1px 1px #fff;text-align:center;border:1px solid #e8e8e8;border-top:none;border-bottom-right-radius:6px;border-bottom-left-radius:6px;background:#f8f8f8;background:-moz-linear-gradient(top,#f8f8f8 0,#e8e8e8 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#f8f8f8),color-stop(100%,#e8e8e8));background:-o-linear-gradient(top,#f8f8f8 0,#e8e8e8 100%);background:-ms-linear-gradient(top,#f8f8f8 0%,#e8e8e8 100%);background:linear-gradient(top,#f8f8f8 0%,#e8e8e8 100%)}blockquote.blockquote-header{text-overflow:ellipsis!important;padding-right:60px!important}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/images
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/images/animated-overlay.gif
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/images/jquery.minicolors.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/images/ui-dialog-close.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/images/ui-icons-datepicker.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/images/ui-icons_444444_256x240.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/images/ui-icons_555555_256x240.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/images/ui-icons_777620_256x240.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/images/ui-icons_777777_256x240.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/images/ui-icons_cc0000_256x240.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/images/ui-icons_ffffff_256x240.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/jquery-ui.css
Deleted
1542
1
2
-/*! jQuery UI - v1.12.0 - 2016-08-01
3
-* http://jqueryui.com
4
-* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
5
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
6
-* Copyright jQuery Foundation and other contributors; Licensed MIT */
7
-
8
-.ui-draggable-handle {
9
- -ms-touch-action: none;
10
- touch-action: none;
11
-}
12
-/* Layout helpers
13
-----------------------------------*/
14
-.ui-helper-hidden {
15
- display: none;
16
-}
17
-.ui-helper-hidden-accessible {
18
- border: 0;
19
- clip: rect(0 0 0 0);
20
- height: 1px;
21
- margin: -1px;
22
- overflow: hidden;
23
- padding: 0;
24
- position: absolute;
25
- width: 1px;
26
-}
27
-.ui-helper-reset {
28
- margin: 0;
29
- padding: 0;
30
- border: 0;
31
- outline: 0;
32
- line-height: 1.3;
33
- text-decoration: none;
34
- font-size: 100%;
35
- list-style: none;
36
-}
37
-.ui-helper-clearfix:before,
38
-.ui-helper-clearfix:after {
39
- content: "";
40
- display: table;
41
- border-collapse: collapse;
42
-}
43
-.ui-helper-clearfix:after {
44
- clear: both;
45
-}
46
-.ui-helper-zfix {
47
- width: 100%;
48
- height: 100%;
49
- top: 0;
50
- left: 0;
51
- position: absolute;
52
- opacity: 0;
53
- filter:Alpha(Opacity=0); /* support: IE8 */
54
-}
55
-
56
-.ui-front {
57
- z-index: 100;
58
-}
59
-
60
-
61
-/* Interaction Cues
62
-----------------------------------*/
63
-.ui-state-disabled {
64
- cursor: default !important;
65
- pointer-events: none;
66
- background: #fafafa;
67
- color: #333333;
68
-}
69
-
70
-
71
-/* Icons
72
-----------------------------------*/
73
-.ui-icon {
74
- display: inline-block;
75
- vertical-align: middle;
76
- margin-top: -.25em;
77
- position: relative;
78
- text-indent: -99999px;
79
- overflow: hidden;
80
- background-repeat: no-repeat;
81
-}
82
-
83
-.ui-widget-icon-block {
84
- left: 50%;
85
- margin-left: -8px;
86
- display: block;
87
-}
88
-
89
-/* Misc visuals
90
-----------------------------------*/
91
-
92
-/* Overlays */
93
-.ui-widget-overlay {
94
- position: fixed;
95
- top: 0;
96
- left: 0;
97
- width: 100%;
98
- height: 100%;
99
-}
100
-.ui-resizable {
101
- position: relative;
102
-}
103
-.ui-resizable-handle {
104
- position: absolute;
105
- font-size: 0.1px;
106
- display: block;
107
- -ms-touch-action: none;
108
- touch-action: none;
109
-}
110
-.ui-resizable-disabled .ui-resizable-handle,
111
-.ui-resizable-autohide .ui-resizable-handle {
112
- display: none;
113
-}
114
-.ui-resizable-n {
115
- cursor: n-resize;
116
- height: 7px;
117
- width: 100%;
118
- top: -5px;
119
- left: 0;
120
-}
121
-.ui-resizable-s {
122
- cursor: s-resize;
123
- height: 7px;
124
- width: 100%;
125
- bottom: -5px;
126
- left: 0;
127
-}
128
-.ui-resizable-e {
129
- cursor: e-resize;
130
- width: 7px;
131
- right: -5px;
132
- top: 0;
133
- height: 100%;
134
-}
135
-.ui-resizable-w {
136
- cursor: w-resize;
137
- width: 7px;
138
- left: -5px;
139
- top: 0;
140
- height: 100%;
141
-}
142
-.ui-resizable-se {
143
- cursor: se-resize;
144
- width: 12px;
145
- height: 12px;
146
- right: 1px;
147
- bottom: 1px;
148
-}
149
-.ui-resizable-sw {
150
- cursor: sw-resize;
151
- width: 9px;
152
- height: 9px;
153
- left: -5px;
154
- bottom: -5px;
155
-}
156
-.ui-resizable-nw {
157
- cursor: nw-resize;
158
- width: 9px;
159
- height: 9px;
160
- left: -5px;
161
- top: -5px;
162
-}
163
-.ui-resizable-ne {
164
- cursor: ne-resize;
165
- width: 9px;
166
- height: 9px;
167
- right: -5px;
168
- top: -5px;
169
-}
170
-.ui-selectable {
171
- -ms-touch-action: none;
172
- touch-action: none;
173
-}
174
-.ui-selectable-helper {
175
- position: absolute;
176
- z-index: 100;
177
- border: 1px dotted black;
178
-}
179
-.ui-sortable-handle {
180
- -ms-touch-action: none;
181
- touch-action: none;
182
-}
183
-.ui-accordion .ui-accordion-header {
184
- display: block;
185
- cursor: pointer;
186
- position: relative;
187
- margin: 2px 0 0 0;
188
- padding: .5em .5em .5em .7em;
189
- font-size: 100%;
190
-}
191
-.ui-accordion .ui-accordion-content {
192
- padding: 1em 2.2em;
193
- border-top: 0;
194
- overflow: auto;
195
-}
196
-.ui-autocomplete {
197
- position: absolute;
198
- top: 0;
199
- left: 0;
200
- cursor: default;
201
-}
202
-.ui-menu.ui-widget,
203
-.ui-menu {
204
- list-style: none;
205
- padding: 0;
206
- margin: 0;
207
- display: block;
208
- outline: 0;
209
- background: #444;
210
- border: 1px solid #999;
211
- border-radius: 4px !important;
212
- box-shadow: 0 2px 6px 0 #333;
213
-}
214
-.ui-menu .ui-menu {
215
- position: absolute;
216
-}
217
-.ui-menu .ui-menu-item {
218
- margin: 0;
219
- cursor: pointer;
220
- /* support: IE10, see #8844 */
221
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
222
- color: #fff;
223
- white-space: nowrap;
224
- border-top: 1px solid #5a5a5a;
225
-}
226
-.ui-menu .ui-menu-item div,
227
-.ui-menu .ui-menu-item a {
228
- display: block;
229
- line-height: 1.5;
230
- padding: 6px 10px 4px;
231
- background-color: #444;
232
- border: 0;
233
- border-radius: 0;
234
- color: #fff;
235
-}
236
-.ui-menu .ui-menu-item:first-child {
237
- border-top: 0;
238
-}
239
-.ui-menu .ui-menu-item:last-child {
240
- border-bottom: 0;
241
-}
242
-.ui-menu .ui-menu-item-wrapper {
243
- position: relative;
244
- padding: 3px 1em 3px .4em;
245
-}
246
-.ui-menu .ui-menu-divider {
247
- margin: 5px 0;
248
- height: 0;
249
- font-size: 0;
250
- line-height: 0;
251
- border-width: 1px 0 0 0;
252
-}
253
-.ui-menu .ui-menu-item .ui-state-focus,
254
-.ui-menu .ui-menu-item .ui-state-active,
255
-.ui-menu .ui-state-focus,
256
-.ui-menu .ui-state-active {
257
- background: #0883d0;
258
-}
259
-
260
-/* icon support */
261
-.ui-menu-icons {
262
- position: relative;
263
-}
264
-.ui-menu-icons .ui-menu-item-wrapper {
265
- padding-left: 2em;
266
-}
267
-
268
-/* left-aligned */
269
-.ui-menu .ui-icon {
270
- position: absolute;
271
- top: 0;
272
- bottom: 0;
273
- left: .2em;
274
- margin: auto 0;
275
-}
276
-
277
-/* right-aligned */
278
-.ui-menu .ui-menu-icon {
279
- left: auto;
280
- right: 0;
281
-}
282
-.ui-button {
283
- padding: .4em 1em;
284
- display: inline-block;
285
- position: relative;
286
- line-height: normal;
287
- margin-right: .1em;
288
- cursor: pointer;
289
- vertical-align: middle;
290
- text-align: center;
291
- -webkit-user-select: none;
292
- -moz-user-select: none;
293
- -ms-user-select: none;
294
- user-select: none;
295
-
296
- /* Support: IE <= 11 */
297
- overflow: visible;
298
-}
299
-
300
-.ui-button,
301
-.ui-button:link,
302
-.ui-button:visited,
303
-.ui-button:hover,
304
-.ui-button:active {
305
- text-decoration: none;
306
-}
307
-
308
-/* to make room for the icon, a width needs to be set here */
309
-.ui-button-icon-only {
310
- width: 2em;
311
- box-sizing: border-box;
312
- text-indent: -9999px;
313
- white-space: nowrap;
314
-}
315
-
316
-/* no icon support for input elements */
317
-input.ui-button.ui-button-icon-only {
318
- text-indent: 0;
319
-}
320
-
321
-/* button icon element(s) */
322
-.ui-button-icon-only .ui-icon {
323
- position: absolute;
324
- top: 50%;
325
- left: 50%;
326
- margin-top: -8px;
327
- margin-left: -8px;
328
-}
329
-
330
-.ui-button.ui-icon-notext .ui-icon {
331
- padding: 0;
332
- width: 2.1em;
333
- height: 2.1em;
334
- text-indent: -9999px;
335
- white-space: nowrap;
336
-
337
-}
338
-
339
-input.ui-button.ui-icon-notext .ui-icon {
340
- width: auto;
341
- height: auto;
342
- text-indent: 0;
343
- white-space: normal;
344
- padding: .4em 1em;
345
-}
346
-
347
-/* workarounds */
348
-/* Support: Firefox 5 - 40 */
349
-input.ui-button::-moz-focus-inner,
350
-button.ui-button::-moz-focus-inner {
351
- border: 0;
352
- padding: 0;
353
-}
354
-.ui-controlgroup {
355
- vertical-align: middle;
356
- display: inline-block;
357
-}
358
-.ui-controlgroup > .ui-controlgroup-item {
359
- float: left;
360
- margin-left: 0;
361
- margin-right: 0;
362
-}
363
-.ui-controlgroup > .ui-controlgroup-item:focus,
364
-.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
365
- z-index: 9999;
366
-}
367
-.ui-controlgroup-vertical > .ui-controlgroup-item {
368
- display: block;
369
- float: none;
370
- width: 100%;
371
- margin-top: 0;
372
- margin-bottom: 0;
373
- text-align: left;
374
-}
375
-.ui-controlgroup-vertical .ui-controlgroup-item {
376
- box-sizing: border-box;
377
-}
378
-.ui-controlgroup .ui-controlgroup-label {
379
- padding: .4em 1em;
380
-}
381
-.ui-controlgroup .ui-controlgroup-label span {
382
- font-size: 80%;
383
-}
384
-.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
385
- border-left: none;
386
-}
387
-.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
388
- border-top: none;
389
-}
390
-.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
391
- border-right: none;
392
-}
393
-.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
394
- border-bottom: none;
395
-}
396
-
397
-/* Spinner specific style fixes */
398
-.ui-controlgroup-vertical .ui-spinner-input {
399
-
400
- /* Support: IE8 only, Android < 4.4 only */
401
- width: 75%;
402
- width: calc( 100% - 2.4em );
403
-}
404
-.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
405
- border-top-style: solid;
406
-}
407
-
408
-.ui-checkboxradio-label .ui-icon-background {
409
- box-shadow: inset 1px 1px 1px #ccc;
410
- border-radius: .12em;
411
- border: none;
412
-}
413
-.ui-checkboxradio-radio-label .ui-icon-background {
414
- width: 16px;
415
- height: 16px;
416
- border-radius: 1em;
417
- overflow: visible;
418
- border: none;
419
-}
420
-.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
421
-.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
422
- background-image: none;
423
- width: 8px;
424
- height: 8px;
425
- border-width: 4px;
426
- border-style: solid;
427
-}
428
-.ui-checkboxradio-disabled {
429
- pointer-events: none;
430
-}
431
-.ui-datepicker {
432
- width: 17em;
433
- padding: .2em .2em 0;
434
- display: none;
435
-}
436
-.ui-datepicker .ui-datepicker-header {
437
- position: relative;
438
- padding: .2em 0;
439
-}
440
-.ui-datepicker .ui-datepicker-prev,
441
-.ui-datepicker .ui-datepicker-next {
442
- position: absolute;
443
- top: 2px;
444
- width: 1.8em;
445
- height: 1.8em;
446
-}
447
-.ui-datepicker .ui-datepicker-prev-hover,
448
-.ui-datepicker .ui-datepicker-next-hover {
449
- top: 1px;
450
-}
451
-.ui-datepicker .ui-datepicker-prev {
452
- left: 2px;
453
-}
454
-.ui-datepicker .ui-datepicker-next {
455
- right: 2px;
456
-}
457
-.ui-datepicker .ui-datepicker-prev-hover {
458
- left: 1px;
459
-}
460
-.ui-datepicker .ui-datepicker-next-hover {
461
- right: 1px;
462
-}
463
-.ui-datepicker .ui-datepicker-prev span,
464
-.ui-datepicker .ui-datepicker-next span {
465
- display: block;
466
- position: absolute;
467
- left: 50%;
468
- margin-left: -8px;
469
- top: 50%;
470
- margin-top: -8px;
471
-}
472
-.ui-datepicker .ui-datepicker-title {
473
- margin: 0 2.3em;
474
- line-height: 1.8em;
475
- text-align: center;
476
-}
477
-.ui-datepicker .ui-datepicker-title select {
478
- font-size: 1em;
479
- margin: 1px 0;
480
-}
481
-.ui-datepicker select.ui-datepicker-month,
482
-.ui-datepicker select.ui-datepicker-year {
483
- width: 45%;
484
-}
485
-.ui-datepicker table {
486
- width: 100%;
487
- font-size: .9em;
488
- border-collapse: collapse;
489
- margin: 0 0 .4em;
490
-}
491
-.ui-datepicker th {
492
- padding: .7em .3em;
493
- text-align: center;
494
- font-weight: bold;
495
- border: 0;
496
-}
497
-.ui-datepicker td {
498
- border: 0;
499
- padding: 1px;
500
-}
501
-.ui-datepicker td span,
502
-.ui-datepicker td a {
503
- display: block;
504
- padding: .2em;
505
- text-align: right;
506
- text-decoration: none;
507
-}
508
-.ui-datepicker .ui-datepicker-buttonpane {
509
- background-image: none;
510
- margin: .7em 0 0 0;
511
- padding: 0 .2em;
512
- border-left: 0;
513
- border-right: 0;
514
- border-bottom: 0;
515
-}
516
-.ui-datepicker .ui-datepicker-buttonpane button {
517
- float: right;
518
- margin: .5em .2em .4em;
519
- cursor: pointer;
520
- padding: .2em .6em .3em .6em;
521
- width: auto;
522
- overflow: visible;
523
-}
524
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
525
- float: left;
526
-}
527
-
528
-/* with multiple calendars */
529
-.ui-datepicker.ui-datepicker-multi {
530
- width: auto;
531
-}
532
-.ui-datepicker-multi .ui-datepicker-group {
533
- float: left;
534
-}
535
-.ui-datepicker-multi .ui-datepicker-group table {
536
- width: 95%;
537
- margin: 0 auto .4em;
538
-}
539
-.ui-datepicker-multi-2 .ui-datepicker-group {
540
- width: 50%;
541
-}
542
-.ui-datepicker-multi-3 .ui-datepicker-group {
543
- width: 33.3%;
544
-}
545
-.ui-datepicker-multi-4 .ui-datepicker-group {
546
- width: 25%;
547
-}
548
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
549
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
550
- border-left-width: 0;
551
-}
552
-.ui-datepicker-multi .ui-datepicker-buttonpane {
553
- clear: left;
554
-}
555
-.ui-datepicker-row-break {
556
- clear: both;
557
- width: 100%;
558
- font-size: 0;
559
-}
560
-
561
-/* RTL support */
562
-.ui-datepicker-rtl {
563
- direction: rtl;
564
-}
565
-.ui-datepicker-rtl .ui-datepicker-prev {
566
- right: 2px;
567
- left: auto;
568
-}
569
-.ui-datepicker-rtl .ui-datepicker-next {
570
- left: 2px;
571
- right: auto;
572
-}
573
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
574
- right: 1px;
575
- left: auto;
576
-}
577
-.ui-datepicker-rtl .ui-datepicker-next:hover {
578
- left: 1px;
579
- right: auto;
580
-}
581
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
582
- clear: right;
583
-}
584
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
585
- float: left;
586
-}
587
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
588
-.ui-datepicker-rtl .ui-datepicker-group {
589
- float: right;
590
-}
591
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
592
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
593
- border-right-width: 0;
594
- border-left-width: 1px;
595
-}
596
-
597
-/* Icons */
598
-.ui-datepicker .ui-icon {
599
- display: block;
600
- text-indent: -99999px;
601
- overflow: hidden;
602
- background-repeat: no-repeat;
603
- left: .5em;
604
- top: .3em;
605
-}
606
-.ui-dialog {
607
- position: absolute;
608
- top: 0;
609
- left: 0;
610
- outline: 0;
611
- padding: 3px;
612
- background: #fff;
613
- border-radius: 6px !important;
614
- border: 0 !important;
615
- box-shadow: 1px 1px 18px #666;
616
-}
617
-.ui-dialog .ui-dialog-titlebar {
618
- padding: 15px 1em 8px 1em;
619
- position: relative;
620
- border: 0;
621
- border-radius: 5px 5px 0 0;
622
-}
623
-.ui-dialog .ui-dialog-title {
624
- float: left;
625
- margin: .1em 16px .1em 0;
626
- font-size: 1.3em;
627
- white-space: nowrap;
628
- width: 90%;
629
- overflow: hidden;
630
- text-overflow: ellipsis;
631
-}
632
-.ui-dialog .ui-dialog-titlebar-close {
633
- position: absolute;
634
- right: -15px;
635
- top: -15px;
636
- width: 30px;
637
- margin: 0;
638
- padding: 0;
639
- height: 30px;
640
- z-index: 99999;
641
- border-width: 0 !important;
642
- background: none !important;
643
- filter: none !important;
644
- box-shadow: none !important;
645
-}
646
-.ui-dialog .ui-dialog-titlebar-close.ui-state-focus {
647
- outline: 2px solid #4fadd5;
648
-}
649
-.ui-dialog .ui-dialog-titlebar-close .ui-icon-closethick {
650
- top: 0;
651
- left: 0;
652
- margin: 0;
653
- width: 30px;
654
- height: 30px;
655
- background: url("images/ui-dialog-close.png") 0 0 no-repeat;
656
-}
657
-.no-close .ui-dialog-titlebar-close {
658
- display: none !important;
659
-}
660
-.ui-dialog .ui-dialog-content {
661
- position: relative;
662
- border: 0;
663
- padding: 1.5em 1em 0.5em 1em;
664
- background: none;
665
- overflow: auto;
666
-}
667
-.ui-dialog .ui-widget-content {
668
- border: 0;
669
-}
670
-.ui-dialog .ui-dialog-buttonpane {
671
- text-align: left;
672
- border-width: 1px 0 0 0;
673
- background-image: none;
674
- border-color: #ddd;
675
- border-style: solid;
676
- margin: 0;
677
- padding: .3em 1em .5em .8em;
678
-}
679
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
680
- float: left;
681
-}
682
-.ui-dialog .ui-dialog-buttonpane button {
683
- margin: .5em .4em .5em 0;
684
- cursor: pointer;
685
-}
686
-.ui-dialog .ui-resizable-n {
687
- height: 2px;
688
- top: 0;
689
-}
690
-.ui-dialog .ui-resizable-e {
691
- width: 2px;
692
- right: 0;
693
-}
694
-.ui-dialog .ui-resizable-s {
695
- height: 2px;
696
- bottom: 0;
697
-}
698
-.ui-dialog .ui-resizable-w {
699
- width: 2px;
700
- left: 0;
701
-}
702
-.ui-dialog .ui-resizable-se,
703
-.ui-dialog .ui-resizable-sw,
704
-.ui-dialog .ui-resizable-ne,
705
-.ui-dialog .ui-resizable-nw {
706
- width: 7px;
707
- height: 7px;
708
-}
709
-.ui-dialog .ui-resizable-se {
710
- width: 14px;
711
- height: 14px;
712
- right: 3px;
713
- bottom: 3px;
714
- background-position: -80px -224px;
715
-}
716
-.ui-dialog .ui-resizable-sw {
717
- left: 0;
718
- bottom: 0;
719
-}
720
-.ui-dialog .ui-resizable-ne {
721
- right: 0;
722
- top: 0;
723
-}
724
-.ui-dialog .ui-resizable-nw {
725
- left: 0;
726
- top: 0;
727
-}
728
-.ui-draggable .ui-dialog-titlebar {
729
- cursor: move;
730
-}
731
-.ui-progressbar {
732
- height: 2em;
733
- text-align: left;
734
- overflow: hidden;
735
-}
736
-.ui-progressbar .ui-progressbar-value {
737
- margin: -1px;
738
- height: 100%;
739
-}
740
-.ui-progressbar .ui-progressbar-overlay {
741
- background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
742
- height: 100%;
743
- filter: alpha(opacity=25); /* support: IE8 */
744
- opacity: 0.25;
745
-}
746
-.ui-progressbar-indeterminate .ui-progressbar-value {
747
- background-image: none;
748
-}
749
-.ui-selectmenu-menu {
750
- padding: 0;
751
- margin: 0;
752
- position: absolute;
753
- top: 0;
754
- left: 0;
755
- display: none;
756
-}
757
-.ui-selectmenu-menu .ui-menu {
758
- overflow: auto;
759
- overflow-x: hidden;
760
- padding-bottom: 1px;
761
-}
762
-.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
763
- font-size: 1em;
764
- font-weight: bold;
765
- line-height: 1.5;
766
- padding: 2px 0.4em;
767
- margin: 0.5em 0 0 0;
768
- height: auto;
769
- border: 0;
770
-}
771
-.ui-selectmenu-open {
772
- display: block;
773
-}
774
-.ui-selectmenu-text {
775
- display: block;
776
- margin-right: 20px;
777
- overflow: hidden;
778
- text-overflow: ellipsis;
779
-}
780
-.ui-selectmenu-button.ui-button {
781
- text-align: left;
782
- white-space: nowrap;
783
- width: 14em;
784
-}
785
-.ui-selectmenu-icon.ui-icon {
786
- float: right;
787
- margin-top: 0;
788
-}
789
-.ui-slider {
790
- position: relative;
791
- text-align: left;
792
-}
793
-.ui-slider .ui-slider-handle {
794
- position: absolute;
795
- z-index: 2;
796
- width: 1.2em;
797
- height: 1.2em;
798
- cursor: default;
799
- -ms-touch-action: none;
800
- touch-action: none;
801
-}
802
-.ui-slider .ui-slider-range {
803
- position: absolute;
804
- z-index: 1;
805
- font-size: .7em;
806
- display: block;
807
- border: 0;
808
- background: #017cb4;
809
-}
810
-
811
-/* support: IE8 - See #6727 */
812
-.ui-slider.ui-state-disabled .ui-slider-handle,
813
-.ui-slider.ui-state-disabled .ui-slider-range {
814
- filter: inherit;
815
-}
816
-
817
-.ui-slider-horizontal {
818
- height: .8em;
819
-}
820
-.ui-slider-horizontal .ui-slider-handle {
821
- top: -.3em;
822
- margin-left: -.6em;
823
-}
824
-.ui-slider-horizontal .ui-slider-range {
825
- top: 0;
826
- height: 100%;
827
-}
828
-.ui-slider-horizontal .ui-slider-range-min {
829
- left: 0;
830
-}
831
-.ui-slider-horizontal .ui-slider-range-max {
832
- right: 0;
833
-}
834
-
835
-.ui-slider-vertical {
836
- width: .8em;
837
- height: 100px;
838
-}
839
-.ui-slider-vertical .ui-slider-handle {
840
- left: -.3em;
841
- margin-left: 0;
842
- margin-bottom: -.6em;
843
-}
844
-.ui-slider-vertical .ui-slider-range {
845
- left: 0;
846
- width: 100%;
847
-}
848
-.ui-slider-vertical .ui-slider-range-min {
849
- bottom: 0;
850
-}
851
-.ui-slider-vertical .ui-slider-range-max {
852
- top: 0;
853
-}
854
-.ui-spinner {
855
- position: relative;
856
- display: inline-block;
857
- overflow: hidden;
858
- padding: 0;
859
- vertical-align: middle;
860
-}
861
-.ui-spinner-input {
862
- border: none;
863
- background: none;
864
- color: inherit;
865
- padding: .222em 0;
866
- margin: .2em 0;
867
- vertical-align: middle;
868
- margin-left: .4em;
869
- margin-right: 2em;
870
-}
871
-.ui-spinner-button {
872
- width: 1.6em;
873
- height: 50%;
874
- font-size: .5em;
875
- padding: 0;
876
- margin: 0;
877
- text-align: center;
878
- position: absolute;
879
- cursor: default;
880
- display: block;
881
- overflow: hidden;
882
- right: 0;
883
-}
884
-/* more specificity required here to override default borders */
885
-.ui-spinner a.ui-spinner-button {
886
- border-top-style: none;
887
- border-bottom-style: none;
888
- border-right-style: none;
889
-}
890
-.ui-spinner-up {
891
- top: 0;
892
-}
893
-.ui-spinner-down {
894
- bottom: 0;
895
-}
896
-.ui-tabs {
897
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
898
- padding: .2em;
899
-}
900
-.ui-tabs .ui-tabs-nav {
901
- margin: 0; padding: 0;
902
- border: 0;
903
- background: transparent;
904
- filter: none;
905
- height: 44px;
906
-}
907
-.ui-tabs .ui-tabs-nav li {
908
- list-style: none;
909
- position: relative;
910
- display: inline-block;
911
- top: 0;
912
- margin: 0;
913
- border: 0 !important;
914
- padding: 0 1px 0 0;
915
- white-space: nowrap;
916
- background: #f8f8f8;
917
-}
918
-.ui-tabs .ui-tabs-nav li:last-child {
919
- background: none;
920
-}
921
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
922
- display: inline-block;
923
- padding: 15px;
924
- text-decoration: none;
925
- font-size: 12px;
926
- color: #999;
927
- background: #fafafa;
928
- border-right: 1px solid #fafafa;
929
-}
930
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
931
- margin-bottom: -1px;
932
- padding-bottom: 1px;
933
-}
934
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
935
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
936
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
937
- cursor: text;
938
-}
939
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
940
- outline: none;
941
- color: #004458;
942
- background: #efefef;
943
-}
944
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
945
- cursor: pointer;
946
-}
947
-.ui-tabs .ui-tabs-panel {
948
- display: block;
949
- border-width: 0;
950
- padding: 0.5em 1em;
951
- margin-top: 0.2em;
952
- background: #efefef;
953
-}
954
-.ui-tooltip {
955
- padding: 8px;
956
- position: absolute;
957
- z-index: 9999;
958
- max-width: 300px;
959
-}
960
-body .ui-tooltip {
961
- border-width: 2px;
962
-}
963
-
964
-/* Component containers
965
-----------------------------------*/
966
-.ui-widget {
967
- font-family: Arial,Helvetica,sans-serif;
968
- font-size: 1em;
969
-}
970
-.ui-widget .ui-widget {
971
- font-size: 1em;
972
-}
973
-.ui-widget input,
974
-.ui-widget select,
975
-.ui-widget textarea,
976
-.ui-widget button {
977
- font-family: Arial,Helvetica,sans-serif;
978
- font-size: 1em;
979
-}
980
-.ui-widget-content {
981
- border: 1px solid #dddddd;
982
- background: #ffffff;
983
- color: #333333;
984
-}
985
-.ui-widget-content a {
986
- color: #0186ba;
987
-}
988
-.ui-widget-header {
989
- border: 1px solid #dddddd;
990
- color: #333333;
991
- font-weight: bold;
992
- background: #e4e4e4;
993
-}
994
-.ui-widget-header a {
995
- color: #333333;
996
-}
997
-
998
-/* Interaction states
999
-----------------------------------*/
1000
-.ui-state-default,
1001
-.ui-widget-content .ui-state-default,
1002
-.ui-widget-header .ui-state-default,
1003
-.ui-button,
1004
-
1005
-/* We use html here because we need a greater specificity to make sure disabled
1006
-works properly when clicked or hovered */
1007
-html .ui-button.ui-state-disabled:hover,
1008
-html .ui-button.ui-state-disabled:active {
1009
- border: 1px solid #c5c5c5;
1010
- background: #f6f6f6;
1011
- font-weight: normal;
1012
- color: #454545;
1013
-}
1014
-.ui-state-default a,
1015
-.ui-state-default a:link,
1016
-.ui-state-default a:visited,
1017
-a.ui-button,
1018
-a:link.ui-button,
1019
-a:visited.ui-button,
1020
-.ui-button {
1021
- color: #454545;
1022
- text-decoration: none;
1023
-}
1024
-.ui-state-hover,
1025
-.ui-widget-content .ui-state-hover,
1026
-.ui-widget-header .ui-state-hover,
1027
-.ui-state-focus,
1028
-.ui-widget-content .ui-state-focus,
1029
-.ui-widget-header .ui-state-focus,
1030
-.ui-button:hover,
1031
-.ui-button:focus {
1032
- border: 1px solid #cccccc;
1033
- background: #ededed;
1034
- font-weight: normal;
1035
- color: #2b2b2b;
1036
-}
1037
-.ui-state-hover a,
1038
-.ui-state-hover a:hover,
1039
-.ui-state-hover a:link,
1040
-.ui-state-hover a:visited,
1041
-.ui-state-focus a,
1042
-.ui-state-focus a:hover,
1043
-.ui-state-focus a:link,
1044
-.ui-state-focus a:visited,
1045
-a.ui-button:hover,
1046
-a.ui-button:focus {
1047
- color: #2b2b2b;
1048
- text-decoration: none;
1049
-}
1050
-
1051
-.ui-visual-focus {
1052
- box-shadow: 0 0 3px 1px rgb(94, 158, 214);
1053
-}
1054
-.ui-state-active,
1055
-.ui-widget-content .ui-state-active,
1056
-.ui-widget-header .ui-state-active,
1057
-a.ui-button:active,
1058
-.ui-button:active,
1059
-.ui-button.ui-state-active:hover {
1060
- border: 1px solid #003eff;
1061
- background: #007fff;
1062
- font-weight: normal;
1063
- color: #ffffff;
1064
-}
1065
-.ui-icon-background,
1066
-.ui-state-active .ui-icon-background {
1067
- border: #003eff;
1068
- background-color: #ffffff;
1069
-}
1070
-.ui-state-active a,
1071
-.ui-state-active a:link,
1072
-.ui-state-active a:visited {
1073
- color: #ffffff;
1074
- text-decoration: none;
1075
-}
1076
-
1077
-/* Interaction Cues
1078
-----------------------------------*/
1079
-.ui-state-highlight,
1080
-.ui-widget-content .ui-state-highlight,
1081
-.ui-widget-header .ui-state-highlight {
1082
- border: 1px solid #dad55e;
1083
- background: #fffa90;
1084
- color: #777620;
1085
-}
1086
-.ui-state-checked {
1087
- border: 1px solid #dad55e;
1088
- background: #fffa90;
1089
-}
1090
-.ui-state-highlight a,
1091
-.ui-widget-content .ui-state-highlight a,
1092
-.ui-widget-header .ui-state-highlight a {
1093
- color: #777620;
1094
-}
1095
-.ui-state-error,
1096
-.ui-widget-content .ui-state-error,
1097
-.ui-widget-header .ui-state-error {
1098
- border: 1px solid #f1a899;
1099
- background: #fddfdf;
1100
- color: #5f3f3f;
1101
-}
1102
-.ui-state-error a,
1103
-.ui-widget-content .ui-state-error a,
1104
-.ui-widget-header .ui-state-error a {
1105
- color: #5f3f3f;
1106
-}
1107
-.ui-state-error-text,
1108
-.ui-widget-content .ui-state-error-text,
1109
-.ui-widget-header .ui-state-error-text {
1110
- color: #5f3f3f;
1111
-}
1112
-.ui-priority-primary,
1113
-.ui-widget-content .ui-priority-primary,
1114
-.ui-widget-header .ui-priority-primary {
1115
- font-weight: bold;
1116
-}
1117
-.ui-priority-secondary,
1118
-.ui-widget-content .ui-priority-secondary,
1119
-.ui-widget-header .ui-priority-secondary {
1120
- opacity: .7;
1121
- filter:Alpha(Opacity=70); /* support: IE8 */
1122
- font-weight: normal;
1123
-}
1124
-.ui-state-disabled,
1125
-.ui-widget-content .ui-state-disabled,
1126
-.ui-widget-header .ui-state-disabled {
1127
- opacity: .35;
1128
- filter:Alpha(Opacity=35); /* support: IE8 */
1129
- background-image: none;
1130
-}
1131
-.ui-state-disabled .ui-icon {
1132
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
1133
-}
1134
-
1135
-/* Icons
1136
-----------------------------------*/
1137
-
1138
-/* states and images */
1139
-.ui-icon {
1140
- width: 16px;
1141
- height: 16px;
1142
-}
1143
-.ui-icon,
1144
-.ui-widget-content .ui-icon {
1145
- background-image: url("images/ui-icons_444444_256x240.png");
1146
-}
1147
-.ui-widget-header .ui-icon {
1148
- background-image: url("images/ui-icons_444444_256x240.png");
1149
-}
1150
-.ui-button .ui-icon {
1151
- background-image: url("images/ui-icons_777777_256x240.png");
1152
-}
1153
-
1154
-.ui-icon-blank { background-position: 16px 16px; }
1155
-.ui-icon-caret-1-n { background-position: 0 0; }
1156
-.ui-icon-caret-1-ne { background-position: -16px 0; }
1157
-.ui-icon-caret-1-e { background-position: -32px 0; }
1158
-.ui-icon-caret-1-se { background-position: -48px 0; }
1159
-.ui-icon-caret-1-s { background-position: -65px 0; }
1160
-.ui-icon-caret-1-sw { background-position: -80px 0; }
1161
-.ui-icon-caret-1-w { background-position: -96px 0; }
1162
-.ui-icon-caret-1-nw { background-position: -112px 0; }
1163
-.ui-icon-caret-2-n-s { background-position: -128px 0; }
1164
-.ui-icon-caret-2-e-w { background-position: -144px 0; }
1165
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
1166
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
1167
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
1168
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
1169
-.ui-icon-triangle-1-s { background-position: -65px -16px; }
1170
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
1171
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
1172
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
1173
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
1174
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
1175
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
1176
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
1177
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
1178
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
1179
-.ui-icon-arrow-1-s { background-position: -65px -32px; }
1180
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
1181
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
1182
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
1183
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
1184
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
1185
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
1186
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
1187
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
1188
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
1189
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
1190
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
1191
-.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
1192
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
1193
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
1194
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
1195
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
1196
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
1197
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
1198
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
1199
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
1200
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
1201
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
1202
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
1203
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
1204
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
1205
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
1206
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
1207
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
1208
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
1209
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
1210
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
1211
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
1212
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
1213
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
1214
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
1215
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
1216
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
1217
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
1218
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
1219
-.ui-icon-arrow-4 { background-position: 0 -80px; }
1220
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
1221
-.ui-icon-extlink { background-position: -32px -80px; }
1222
-.ui-icon-newwin { background-position: -48px -80px; }
1223
-.ui-icon-refresh { background-position: -64px -80px; }
1224
-.ui-icon-shuffle { background-position: -80px -80px; }
1225
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
1226
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
1227
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
1228
-.ui-icon-folder-open { background-position: -16px -96px; }
1229
-.ui-icon-document { background-position: -32px -96px; }
1230
-.ui-icon-document-b { background-position: -48px -96px; }
1231
-.ui-icon-note { background-position: -64px -96px; }
1232
-.ui-icon-mail-closed { background-position: -80px -96px; }
1233
-.ui-icon-mail-open { background-position: -96px -96px; }
1234
-.ui-icon-suitcase { background-position: -112px -96px; }
1235
-.ui-icon-comment { background-position: -128px -96px; }
1236
-.ui-icon-person { background-position: -144px -96px; }
1237
-.ui-icon-print { background-position: -160px -96px; }
1238
-.ui-icon-trash { background-position: -176px -96px; }
1239
-.ui-icon-locked { background-position: -192px -96px; }
1240
-.ui-icon-unlocked { background-position: -208px -96px; }
1241
-.ui-icon-bookmark { background-position: -224px -96px; }
1242
-.ui-icon-tag { background-position: -240px -96px; }
1243
-.ui-icon-home { background-position: 0 -112px; }
1244
-.ui-icon-flag { background-position: -16px -112px; }
1245
-.ui-icon-calendar { background-position: -32px -112px; }
1246
-.ui-icon-cart { background-position: -48px -112px; }
1247
-.ui-icon-pencil { background-position: -64px -112px; }
1248
-.ui-icon-clock { background-position: -80px -112px; }
1249
-.ui-icon-disk { background-position: -96px -112px; }
1250
-.ui-icon-calculator { background-position: -112px -112px; }
1251
-.ui-icon-zoomin { background-position: -128px -112px; }
1252
-.ui-icon-zoomout { background-position: -144px -112px; }
1253
-.ui-icon-search { background-position: -160px -112px; }
1254
-.ui-icon-wrench { background-position: -176px -112px; }
1255
-.ui-icon-gear { background-position: -192px -112px; }
1256
-.ui-icon-heart { background-position: -208px -112px; }
1257
-.ui-icon-star { background-position: -224px -112px; }
1258
-.ui-icon-link { background-position: -240px -112px; }
1259
-.ui-icon-cancel { background-position: 0 -128px; }
1260
-.ui-icon-plus { background-position: -16px -128px; }
1261
-.ui-icon-plusthick { background-position: -32px -128px; }
1262
-.ui-icon-minus { background-position: -48px -128px; }
1263
-.ui-icon-minusthick { background-position: -64px -128px; }
1264
-.ui-icon-close { background-position: -80px -128px; }
1265
-.ui-icon-closethick { background-position: -96px -128px; }
1266
-.ui-icon-key { background-position: -112px -128px; }
1267
-.ui-icon-lightbulb { background-position: -128px -128px; }
1268
-.ui-icon-scissors { background-position: -144px -128px; }
1269
-.ui-icon-clipboard { background-position: -160px -128px; }
1270
-.ui-icon-copy { background-position: -176px -128px; }
1271
-.ui-icon-contact { background-position: -192px -128px; }
1272
-.ui-icon-image { background-position: -208px -128px; }
1273
-.ui-icon-video { background-position: -224px -128px; }
1274
-.ui-icon-script { background-position: -240px -128px; }
1275
-.ui-icon-alert { background-position: 0 -144px; }
1276
-.ui-icon-info { background-position: -16px -144px; }
1277
-.ui-icon-notice { background-position: -32px -144px; }
1278
-.ui-icon-help { background-position: -48px -144px; }
1279
-.ui-icon-check { background-position: -64px -144px; }
1280
-.ui-icon-bullet { background-position: -80px -144px; }
1281
-.ui-icon-radio-on { background-position: -96px -144px; }
1282
-.ui-icon-radio-off { background-position: -112px -144px; }
1283
-.ui-icon-pin-w { background-position: -128px -144px; }
1284
-.ui-icon-pin-s { background-position: -144px -144px; }
1285
-.ui-icon-play { background-position: 0 -160px; }
1286
-.ui-icon-pause { background-position: -16px -160px; }
1287
-.ui-icon-seek-next { background-position: -32px -160px; }
1288
-.ui-icon-seek-prev { background-position: -48px -160px; }
1289
-.ui-icon-seek-end { background-position: -64px -160px; }
1290
-.ui-icon-seek-start { background-position: -80px -160px; }
1291
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
1292
-.ui-icon-seek-first { background-position: -80px -160px; }
1293
-.ui-icon-stop { background-position: -96px -160px; }
1294
-.ui-icon-eject { background-position: -112px -160px; }
1295
-.ui-icon-volume-off { background-position: -128px -160px; }
1296
-.ui-icon-volume-on { background-position: -144px -160px; }
1297
-.ui-icon-power { background-position: 0 -176px; }
1298
-.ui-icon-signal-diag { background-position: -16px -176px; }
1299
-.ui-icon-signal { background-position: -32px -176px; }
1300
-.ui-icon-battery-0 { background-position: -48px -176px; }
1301
-.ui-icon-battery-1 { background-position: -64px -176px; }
1302
-.ui-icon-battery-2 { background-position: -80px -176px; }
1303
-.ui-icon-battery-3 { background-position: -96px -176px; }
1304
-.ui-icon-circle-plus { background-position: 0 -192px; }
1305
-.ui-icon-circle-minus { background-position: -16px -192px; }
1306
-.ui-icon-circle-close { background-position: -32px -192px; }
1307
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
1308
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
1309
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
1310
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
1311
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
1312
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
1313
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
1314
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
1315
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
1316
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
1317
-.ui-icon-circle-check { background-position: -208px -192px; }
1318
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
1319
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
1320
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
1321
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
1322
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
1323
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
1324
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
1325
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
1326
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
1327
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
1328
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
1329
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
1330
-
1331
-
1332
-/* Misc visuals
1333
-----------------------------------*/
1334
-
1335
-/* Corner radius */
1336
-.ui-corner-all,
1337
-.ui-corner-top,
1338
-.ui-corner-left,
1339
-.ui-corner-tl {
1340
- border-top-left-radius: 3px;
1341
-}
1342
-.ui-corner-all,
1343
-.ui-corner-top,
1344
-.ui-corner-right,
1345
-.ui-corner-tr {
1346
- border-top-right-radius: 3px;
1347
-}
1348
-.ui-corner-all,
1349
-.ui-corner-bottom,
1350
-.ui-corner-left,
1351
-.ui-corner-bl {
1352
- border-bottom-left-radius: 3px;
1353
-}
1354
-.ui-corner-all,
1355
-.ui-corner-bottom,
1356
-.ui-corner-right,
1357
-.ui-corner-br {
1358
- border-bottom-right-radius: 3px;
1359
-}
1360
-
1361
-/* Overlays */
1362
-.ui-widget-overlay {
1363
- background: #aaaaaa;
1364
- opacity: .3;
1365
- filter: Alpha(Opacity=30); /* support: IE8 */
1366
-}
1367
-.ui-widget-shadow {
1368
- -webkit-box-shadow: 0px 0px 5px #666666;
1369
- box-shadow: 0px 0px 5px #666666;
1370
-}
1371
-
1372
-/* Roundcube button styling */
1373
-.ui-button.ui-state-default {
1374
- display: inline-block;
1375
- margin: 0 2px;
1376
- padding: 1px 2px;
1377
- border: 1px solid #c0c0c0;
1378
- border-radius: 4px;
1379
- background: #f7f7f7;
1380
- color: #525252;
1381
- text-decoration: none;
1382
- outline: none;
1383
-}
1384
-
1385
-.ui-button.mainaction {
1386
- color: #ededed;
1387
- border-color: #1f262c;
1388
- background: #2c2f33;
1389
-}
1390
-
1391
-.ui-button.ui-state-focus {
1392
- color: #525252;
1393
- border-color: #4fadd5;
1394
- -moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
1395
- -webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
1396
- -o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
1397
- box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
1398
-}
1399
-
1400
-.ui-button.ui-state-active {
1401
- color: #525252;
1402
- border-color: #aaa;
1403
- background: #e6e6e6;
1404
-}
1405
-
1406
-.ui-button.ui-state-focus.mainaction,
1407
-.ui-button.ui-state-hover.mainaction {
1408
- color: #fff;
1409
-}
1410
-
1411
-.ui-button.ui-state-focus.mainaction {
1412
- border-color: #1f262c;
1413
- -moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
1414
- -webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
1415
- -o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
1416
- box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
1417
-}
1418
-
1419
-.ui-button.ui-state-active.mainaction {
1420
- color: #fff;
1421
- background: #515151;
1422
-}
1423
-
1424
-.ui-buttondisabled,
1425
-.ui-buttondisabled:hover,
1426
-.ui-button.mainactiondisabled {
1427
- color: #aaa !important;
1428
-}
1429
-
1430
-/* Roundcube's specific Datepicker style override */
1431
-.ui-datepicker {
1432
- min-width: 20em;
1433
- padding: 0;
1434
- display: none;
1435
- border: 0;
1436
- border-radius: 3px;
1437
- -webkit-box-shadow: #666 1px 1px 10px;
1438
- -moz-box-shadow: 1px 1px 10px #666;
1439
- box-shadow: 1px 1px 16px #666;
1440
-}
1441
-.ui-datepicker .ui-datepicker-header {
1442
- padding: .3em 0;
1443
- border-radius: 3px 3px 0 0;
1444
- border: 0;
1445
- background: #3a3a3a;
1446
- filter: none;
1447
- color: #fff;
1448
-}
1449
-.ui-datepicker .ui-datepicker-prev,
1450
-.ui-datepicker .ui-datepicker-next {
1451
- border: 0;
1452
- background: none;
1453
-}
1454
-.ui-datepicker .ui-datepicker-header .ui-icon {
1455
- background: url("images/ui-icons-datepicker.png") 0 0 no-repeat;
1456
-}
1457
-.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-w {
1458
- background-position: 0 2px;
1459
-}
1460
-.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-e {
1461
- background-position: -14px 2px;
1462
-}
1463
-.ui-datepicker .ui-datepicker-prev-hover,
1464
-.ui-datepicker .ui-datepicker-next-hover {
1465
- top: 2px;
1466
- border: 0;
1467
- background: none;
1468
-}
1469
-.ui-datepicker .ui-datepicker-prev,
1470
-.ui-datepicker .ui-datepicker-prev-hover {
1471
- left: 2px;
1472
-}
1473
-.ui-datepicker .ui-datepicker-next,
1474
-.ui-datepicker .ui-datepicker-next-hover {
1475
- right: 2px;
1476
-}
1477
-.ui-datepicker select.ui-datepicker-month,
1478
-.ui-datepicker select.ui-datepicker-year {
1479
- border: 0;
1480
- background: #3a3a3a;
1481
- outline: none;
1482
- color: #fff;
1483
- font-weight: bold;
1484
- width: auto;
1485
- margin-right: 4px;
1486
- padding-right: 4px;
1487
-}
1488
-.ui-datepicker .ui-datepicker-title select::-ms-expand {
1489
- display: none;
1490
-}
1491
-.ie10 .ui-datepicker .ui-datepicker-title select,
1492
-.webkit .ui-datepicker .ui-datepicker-title select,
1493
-.mozilla .ui-datepicker .ui-datepicker-title select {
1494
- background-image: url("images/ui-icons-datepicker.png");
1495
- background-position: right -18px;
1496
- background-repeat: no-repeat;
1497
- padding-right: 14px;
1498
- -webkit-appearance: none;
1499
- -moz-appearance: none;
1500
- appearance: none;
1501
-}
1502
-.ui-datepicker .ui-datepicker-month:focus,
1503
-.ui-datepicker .ui-datepicker-year:focus {
1504
- outline: 1px solid #4fadd5;
1505
-}
1506
-.ui-datepicker table {
1507
- margin: 0;
1508
- border-spacing: 0;
1509
-}
1510
-.ui-datepicker table:focus {
1511
- outline: 2px solid #4fadd5;
1512
- outline-offset: -2px;
1513
-}
1514
-.ui-datepicker td {
1515
- border: 1px solid #bbb;
1516
- padding: 0;
1517
-}
1518
-.ui-datepicker td span, .ui-datepicker td a {
1519
- border: 0;
1520
- padding: .5em;
1521
-}
1522
-.ui-datepicker td a.ui-state-default {
1523
- border: none;
1524
- background: #e6e6e6;
1525
-}
1526
-.ui-datepicker td a.ui-priority-secondary {
1527
- background: #eee;
1528
-}
1529
-.ui-datepicker td a.ui-state-active {
1530
- color: #fff;
1531
- border-color: #0883d0 !important;
1532
- background: #0883d0 !important;
1533
-}
1534
-.ui-datepicker .ui-state-highlight {
1535
- color: #0081c2;
1536
-}
1537
-.ui-datepicker td.ui-datepicker-days-cell-over a.ui-state-default {
1538
- color: #fff;
1539
- border-color: rgba(73,180,210,0.7);
1540
- background: rgba(73,180,210,0.7);
1541
-}
1542
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/jquery-ui.css.diff
Deleted
558
1
2
---- jquery-ui.css.orig 2016-09-08 12:47:27.000000000 +0200
3
-+++ jquery-ui.css 2016-09-08 12:47:53.333000000 +0200
4
-@@ -62,6 +62,8 @@
5
- .ui-state-disabled {
6
- cursor: default !important;
7
- pointer-events: none;
8
-+ background: #fafafa;
9
-+ color: #333333;
10
- }
11
-
12
-
13
-@@ -196,12 +198,17 @@
14
- left: 0;
15
- cursor: default;
16
- }
17
-+.ui-menu.ui-widget,
18
- .ui-menu {
19
- list-style: none;
20
- padding: 0;
21
- margin: 0;
22
- display: block;
23
- outline: 0;
24
-+ background: #444;
25
-+ border: 1px solid #999;
26
-+ border-radius: 4px !important;
27
-+ box-shadow: 0 2px 6px 0 #333;
28
- }
29
- .ui-menu .ui-menu {
30
- position: absolute;
31
-@@ -211,6 +218,26 @@
32
- cursor: pointer;
33
- /* support: IE10, see #8844 */
34
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
35
-+ color: #fff;
36
-+ white-space: nowrap;
37
-+ border-top: 1px solid #5a5a5a;
38
-+}
39
-+.ui-menu .ui-menu-item div,
40
-+.ui-menu .ui-menu-item a {
41
-+ display: block;
42
-+ line-height: 1.5;
43
-+ padding: 6px 10px 4px;
44
-+ text-shadow: 0 1px 1px #333;
45
-+ background-color: #444;
46
-+ border: 0;
47
-+ border-radius: 0;
48
-+ color: #fff;
49
-+}
50
-+.ui-menu .ui-menu-item:first-child {
51
-+ border-top: 0;
52
-+}
53
-+.ui-menu .ui-menu-item:last-child {
54
-+ border-bottom: 0;
55
- }
56
- .ui-menu .ui-menu-item-wrapper {
57
- position: relative;
58
-@@ -223,9 +250,16 @@
59
- line-height: 0;
60
- border-width: 1px 0 0 0;
61
- }
62
-+.ui-menu .ui-menu-item .ui-state-focus,
63
-+.ui-menu .ui-menu-item .ui-state-active,
64
- .ui-menu .ui-state-focus,
65
- .ui-menu .ui-state-active {
66
-- margin: -1px;
67
-+ background: #00aad6;
68
-+ background: -moz-linear-gradient(top, #00aad6 0%, #008fc9 100%);
69
-+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00aad6), color-stop(100%,#008fc9));
70
-+ background: -o-linear-gradient(top, #00aad6 0%, #008fc9 100%);
71
-+ background: -ms-linear-gradient(top, #00aad6 0%, #008fc9 100%);
72
-+ background: linear-gradient(top, #00aad6 0%, #008fc9 100%);
73
- }
74
-
75
- /* icon support */
76
-@@ -578,16 +612,24 @@
77
- position: absolute;
78
- top: 0;
79
- left: 0;
80
-- padding: .2em;
81
- outline: 0;
82
-+ padding: 3px;
83
-+ background: #fff;
84
-+ border-radius: 6px !important;
85
-+ border: 0 !important;
86
-+ box-shadow: 1px 1px 18px #666;
87
- }
88
- .ui-dialog .ui-dialog-titlebar {
89
-- padding: .4em 1em;
90
-+ padding: 15px 1em 8px 1em;
91
- position: relative;
92
-+ border: 0;
93
-+ border-radius: 5px 5px 0 0;
94
- }
95
- .ui-dialog .ui-dialog-title {
96
- float: left;
97
-- margin: .1em 0;
98
-+ margin: .1em 16px .1em 0;
99
-+ font-size: 1.3em;
100
-+ text-shadow: 1px 1px 1px #fff;
101
- white-space: nowrap;
102
- width: 90%;
103
- overflow: hidden;
104
-@@ -595,29 +637,53 @@
105
- }
106
- .ui-dialog .ui-dialog-titlebar-close {
107
- position: absolute;
108
-- right: .3em;
109
-- top: 50%;
110
-- width: 20px;
111
-- margin: -10px 0 0 0;
112
-- padding: 1px;
113
-- height: 20px;
114
-+ right: -15px;
115
-+ top: -15px;
116
-+ width: 30px;
117
-+ margin: 0;
118
-+ padding: 0;
119
-+ height: 30px;
120
-+ z-index: 99999;
121
-+ border-width: 0 !important;
122
-+ background: none !important;
123
-+ filter: none !important;
124
-+ box-shadow: none !important;
125
-+}
126
-+.ui-dialog .ui-dialog-titlebar-close.ui-state-focus {
127
-+ outline: 2px solid #4fadd5;
128
-+}
129
-+.ui-dialog .ui-dialog-titlebar-close .ui-icon-closethick {
130
-+ top: 0;
131
-+ left: 0;
132
-+ margin: 0;
133
-+ width: 30px;
134
-+ height: 30px;
135
-+ background: url("images/ui-dialog-close.png") 0 0 no-repeat;
136
-+}
137
-+.no-close .ui-dialog-titlebar-close {
138
-+ display: none !important;
139
- }
140
- .ui-dialog .ui-dialog-content {
141
- position: relative;
142
- border: 0;
143
-- padding: .5em 1em;
144
-+ padding: 1.5em 1em 0.5em 1em;
145
- background: none;
146
- overflow: auto;
147
- }
148
-+.ui-dialog .ui-widget-content {
149
-+ border: 0;
150
-+}
151
- .ui-dialog .ui-dialog-buttonpane {
152
- text-align: left;
153
- border-width: 1px 0 0 0;
154
- background-image: none;
155
-- margin-top: .5em;
156
-- padding: .3em 1em .5em .4em;
157
-+ border-color: #ddd;
158
-+ border-style: solid;
159
-+ margin: 0;
160
-+ padding: .3em 1em .5em .8em;
161
- }
162
- .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
163
-- float: right;
164
-+ float: left;
165
- }
166
- .ui-dialog .ui-dialog-buttonpane button {
167
- margin: .5em .4em .5em 0;
168
-@@ -647,8 +713,11 @@
169
- height: 7px;
170
- }
171
- .ui-dialog .ui-resizable-se {
172
-- right: 0;
173
-- bottom: 0;
174
-+ width: 14px;
175
-+ height: 14px;
176
-+ right: 3px;
177
-+ bottom: 3px;
178
-+ background-position: -80px -224px;
179
- }
180
- .ui-dialog .ui-resizable-sw {
181
- left: 0;
182
-@@ -742,7 +811,13 @@
183
- font-size: .7em;
184
- display: block;
185
- border: 0;
186
-- background-position: 0 0;
187
-+ background: #019bc6;
188
-+ background: -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
189
-+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
190
-+ background: -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
191
-+ background: -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
192
-+ background: linear-gradient(top, #019bc6 0%, #017cb4 100%);
193
-+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#019bc6', endColorstr='#017cb4', GradientType=0);
194
- }
195
-
196
- /* support: IE8 - See #6727 */
197
-@@ -835,23 +910,41 @@
198
- padding: .2em;
199
- }
200
- .ui-tabs .ui-tabs-nav {
201
-- margin: 0;
202
-- padding: .2em .2em 0;
203
-+ margin: 0; padding: 0;
204
-+ border: 0;
205
-+ background: transparent;
206
-+ filter: none;
207
-+ height: 44px;
208
- }
209
- .ui-tabs .ui-tabs-nav li {
210
- list-style: none;
211
-- float: left;
212
- position: relative;
213
-+ display: inline-block;
214
- top: 0;
215
-- margin: 1px .2em 0 0;
216
-- border-bottom-width: 0;
217
-- padding: 0;
218
-+ margin: 0;
219
-+ border: 0 !important;
220
-+ padding: 0 1px 0 0;
221
- white-space: nowrap;
222
-+ background: #f8f8f8;
223
-+ background: -moz-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
224
-+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(50%,#d3d3d3), color-stop(100%,#f8f8f8));
225
-+ background: -webkit-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
226
-+ background: -o-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
227
-+ background: -ms-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
228
-+ background: linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
229
-+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#d3d3d3', GradientType=0);
230
-+}
231
-+.ui-tabs .ui-tabs-nav li:last-child {
232
-+ background: none;
233
- }
234
- .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
235
-- float: left;
236
-- padding: .5em 1em;
237
-+ display: inline-block;
238
-+ padding: 15px;
239
- text-decoration: none;
240
-+ font-size: 12px;
241
-+ color: #999;
242
-+ background: #fafafa;
243
-+ border-right: 1px solid #fafafa;
244
- }
245
- .ui-tabs .ui-tabs-nav li.ui-tabs-active {
246
- margin-bottom: -1px;
247
-@@ -862,14 +955,26 @@
248
- .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
249
- cursor: text;
250
- }
251
-+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
252
-+ outline: none;
253
-+ color: #004458;
254
-+ background: #efefef;
255
-+ background: -moz-linear-gradient(top, #fafafa 40%, #e4e4e4 100%);
256
-+ background: -webkit-gradient(linear, left top, left bottom, color-stop(40%,#fff), color-stop(100%,#e4e4e4));
257
-+ background: -o-linear-gradient(top, #fafafa 40%, #e4e4e4 100%);
258
-+ background: -ms-linear-gradient(top, #fafafa 40%, #e4e4e4 100%);
259
-+ background: linear-gradient(top, #fafafa 40%, #e4e4e4 100%);
260
-+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa', endColorstr='#e4e4e4', GradientType=0);
261
-+}
262
- .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
263
- cursor: pointer;
264
- }
265
- .ui-tabs .ui-tabs-panel {
266
- display: block;
267
- border-width: 0;
268
-- padding: 1em 1.4em;
269
-- background: none;
270
-+ padding: 0.5em 1em;
271
-+ margin-top: 0.2em;
272
-+ background: #efefef;
273
- }
274
- .ui-tooltip {
275
- padding: 8px;
276
-@@ -897,22 +1002,25 @@
277
- font-family: Arial,Helvetica,sans-serif;
278
- font-size: 1em;
279
- }
280
--.ui-widget.ui-widget-content {
281
-- border: 1px solid #c5c5c5;
282
--}
283
- .ui-widget-content {
284
- border: 1px solid #dddddd;
285
- background: #ffffff;
286
- color: #333333;
287
- }
288
- .ui-widget-content a {
289
-- color: #333333;
290
-+ color: #0186ba;
291
- }
292
- .ui-widget-header {
293
- border: 1px solid #dddddd;
294
-- background: #e9e9e9;
295
- color: #333333;
296
- font-weight: bold;
297
-+ background: #e4e4e4;
298
-+ background: -moz-linear-gradient(top, #f2f2f2 0%, #e4e4e4 100%);
299
-+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f2f2f2), color-stop(100%,#e4e4e4));
300
-+ background: -o-linear-gradient(top, #f2f2f2 0%, #e4e4e4 100%);
301
-+ background: -ms-linear-gradient(top, #f2f2f2 0%, #e4e4e4 100%);
302
-+ background: linear-gradient(top, #f2f2f2 0%, #e4e4e4 100%);
303
-+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e4e4e4', GradientType=0);
304
- }
305
- .ui-widget-header a {
306
- color: #333333;
307
-@@ -1073,27 +1181,7 @@
308
- .ui-button .ui-icon {
309
- background-image: url("images/ui-icons_777777_256x240.png");
310
- }
311
--.ui-state-hover .ui-icon,
312
--.ui-state-focus .ui-icon,
313
--.ui-button:hover .ui-icon,
314
--.ui-button:focus .ui-icon,
315
--.ui-state-default .ui-icon {
316
-- background-image: url("images/ui-icons_555555_256x240.png");
317
--}
318
--.ui-state-active .ui-icon,
319
--.ui-button:active .ui-icon {
320
-- background-image: url("images/ui-icons_ffffff_256x240.png");
321
--}
322
--.ui-state-highlight .ui-icon,
323
--.ui-button .ui-state-highlight.ui-icon {
324
-- background-image: url("images/ui-icons_777620_256x240.png");
325
--}
326
--.ui-state-error .ui-icon,
327
--.ui-state-error-text .ui-icon {
328
-- background-image: url("images/ui-icons_cc0000_256x240.png");
329
--}
330
-
331
--/* positioning */
332
- .ui-icon-blank { background-position: 16px 16px; }
333
- .ui-icon-caret-1-n { background-position: 0 0; }
334
- .ui-icon-caret-1-ne { background-position: -16px 0; }
335
-@@ -1311,3 +1399,222 @@
336
- -webkit-box-shadow: 0px 0px 5px #666666;
337
- box-shadow: 0px 0px 5px #666666;
338
- }
339
-+
340
-+/* Roundcube button styling */
341
-+.ui-button.ui-state-default {
342
-+ display: inline-block;
343
-+ margin: 0 2px;
344
-+ padding: 1px 2px;
345
-+ text-shadow: 0px 1px 1px #fff;
346
-+ border: 1px solid #c6c6c6;
347
-+ border-radius: 4px;
348
-+ background: #f7f7f7;
349
-+ background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
350
-+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#e6e6e6));
351
-+ background: -o-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
352
-+ background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
353
-+ background: linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
354
-+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e6e6e6', GradientType=0);
355
-+ -webkit-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
356
-+ -moz-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
357
-+ -o-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
358
-+ box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
359
-+ text-decoration: none;
360
-+ outline: none;
361
-+}
362
-+
363
-+.ui-button.mainaction {
364
-+ color: #ededed;
365
-+ text-shadow: 0px 1px 1px #333;
366
-+ border-color: #1f262c;
367
-+ background: #505050;
368
-+ background: -moz-linear-gradient(top, #505050 0%, #2a2e31 100%);
369
-+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#505050), color-stop(100%,#2a2e31));
370
-+ background: -o-linear-gradient(top, #505050 0%, #2a2e31 100%);
371
-+ background: -ms-linear-gradient(top, #505050 0%, #2a2e31 100%);
372
-+ background: linear-gradient(top, #505050 0%, #2a2e31 100%);
373
-+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#505050', endColorstr='#2a2e31', GradientType=0);
374
-+ -moz-box-shadow: inset 0 1px 0 0 #777;
375
-+ -webkit-box-shadow: inset 0 1px 0 0 #777;
376
-+ -o-box-shadow: inset 0 1px 0 0 #777;
377
-+ box-shadow: inset 0 1px 0 0 #777;
378
-+}
379
-+
380
-+.ui-button.ui-state-focus {
381
-+ color: #525252;
382
-+ border-color: #4fadd5;
383
-+ -moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
384
-+ -webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
385
-+ -o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
386
-+ box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
387
-+}
388
-+
389
-+.ui-button.ui-state-active {
390
-+ color: #525252;
391
-+ border-color: #aaa;
392
-+ background: #e6e6e6;
393
-+ background: -moz-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
394
-+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e6e6e6), color-stop(100%,#f9f9f9));
395
-+ background: -o-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
396
-+ background: -ms-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
397
-+ background: linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
398
-+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e6e6e6', endColorstr='#f9f9f9', GradientType=0);
399
-+}
400
-+
401
-+.ui-button.ui-state-focus.mainaction,
402
-+.ui-button.ui-state-hover.mainaction {
403
-+ color: #fff;
404
-+}
405
-+
406
-+.ui-button.ui-state-focus.mainaction {
407
-+ border-color: #1f262c;
408
-+ -moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
409
-+ -webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
410
-+ -o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
411
-+ box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
412
-+}
413
-+
414
-+.ui-button.ui-state-active.mainaction {
415
-+ color: #fff;
416
-+ background: #515151;
417
-+ background: -moz-linear-gradient(top, #2a2e31 0%, #505050 100%);
418
-+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2a2e31), color-stop(100%,#505050));
419
-+ background: -o-linear-gradient(top, #2a2e31 0%, #505050 100%);
420
-+ background: -ms-linear-gradient(top, #2a2e31 0%, #505050 100%);
421
-+ background: linear-gradient(top, #2a2e31 0%, #505050 100%);
422
-+}
423
-+
424
-+.ui-buttondisabled,
425
-+.ui-buttondisabled:hover,
426
-+.ui-button.mainactiondisabled {
427
-+ color: #aaa !important;
428
-+}
429
-+
430
-+/* Roundcube's specific Datepicker style override */
431
-+.ui-datepicker {
432
-+ min-width: 20em;
433
-+ padding: 0;
434
-+ display: none;
435
-+ border: 0;
436
-+ border-radius: 3px;
437
-+ -webkit-box-shadow: #666 1px 1px 10px;
438
-+ -moz-box-shadow: 1px 1px 10px #666;
439
-+ box-shadow: 1px 1px 16px #666;
440
-+}
441
-+.ui-datepicker .ui-datepicker-header {
442
-+ padding: .3em 0;
443
-+ border-radius: 3px 3px 0 0;
444
-+ border: 0;
445
-+ background: #3a3a3a;
446
-+ filter: none;
447
-+ color: #fff;
448
-+ text-shadow: 0px 1px 1px #000;
449
-+}
450
-+.ui-datepicker .ui-datepicker-prev,
451
-+.ui-datepicker .ui-datepicker-next {
452
-+ border: 0;
453
-+ background: none;
454
-+}
455
-+.ui-datepicker .ui-datepicker-header .ui-icon {
456
-+ background: url("images/ui-icons-datepicker.png") 0 0 no-repeat;
457
-+}
458
-+.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-w {
459
-+ background-position: 0 2px;
460
-+}
461
-+.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-e {
462
-+ background-position: -14px 2px;
463
-+}
464
-+.ui-datepicker .ui-datepicker-prev-hover,
465
-+.ui-datepicker .ui-datepicker-next-hover {
466
-+ top: 2px;
467
-+ border: 0;
468
-+ background: none;
469
-+}
470
-+.ui-datepicker .ui-datepicker-prev,
471
-+.ui-datepicker .ui-datepicker-prev-hover {
472
-+ left: 2px;
473
-+}
474
-+.ui-datepicker .ui-datepicker-next,
475
-+.ui-datepicker .ui-datepicker-next-hover {
476
-+ right: 2px;
477
-+}
478
-+.ui-datepicker select.ui-datepicker-month,
479
-+.ui-datepicker select.ui-datepicker-year {
480
-+ border: 0;
481
-+ background: #3a3a3a;
482
-+ outline: none;
483
-+ color: #fff;
484
-+ font-weight: bold;
485
-+ width: auto;
486
-+ margin-right: 4px;
487
-+ padding-right: 4px;
488
-+}
489
-+.ui-datepicker .ui-datepicker-title select::-ms-expand {
490
-+ display: none;
491
-+}
492
-+.ie10 .ui-datepicker .ui-datepicker-title select,
493
-+.webkit .ui-datepicker .ui-datepicker-title select,
494
-+.mozilla .ui-datepicker .ui-datepicker-title select {
495
-+ background-image: url("images/ui-icons-datepicker.png");
496
-+ background-position: right -18px;
497
-+ background-repeat: no-repeat;
498
-+ padding-right: 14px;
499
-+ -webkit-appearance: none;
500
-+ -moz-appearance: none;
501
-+ appearance: none;
502
-+}
503
-+.ui-datepicker .ui-datepicker-month:focus,
504
-+.ui-datepicker .ui-datepicker-year:focus {
505
-+ outline: 1px solid #4fadd5;
506
-+}
507
-+.ui-datepicker table {
508
-+ margin: 0;
509
-+ border-spacing: 0;
510
-+}
511
-+.ui-datepicker table:focus {
512
-+ outline: 2px solid #4fadd5;
513
-+ outline-offset: -2px;
514
-+}
515
-+.ui-datepicker td {
516
-+ border: 1px solid #bbb;
517
-+ padding: 0;
518
-+}
519
-+.ui-datepicker td span, .ui-datepicker td a {
520
-+ border: 0;
521
-+ padding: .5em;
522
-+ text-shadow: 0px 1px 1px #fff;
523
-+}
524
-+.ui-datepicker td a.ui-state-default {
525
-+ border: 0px solid #fff;
526
-+ border-top-width: 1px;
527
-+ border-left-width: 1px;
528
-+ background: #e6e6e6;
529
-+ background: -moz-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%);
530
-+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e6e6e6), color-stop(100%,#d6d6d6));
531
-+ background: -o-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%);
532
-+ background: -ms-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%);
533
-+ background: linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%);
534
-+}
535
-+.ui-datepicker td a.ui-priority-secondary {
536
-+ background: #eee;
537
-+}
538
-+.ui-datepicker td a.ui-state-active {
539
-+ color: #fff;
540
-+ border-color: #0286ac !important;
541
-+ text-shadow: 0px 1px 1px #00516e !important;
542
-+ background: #00acd4 !important;
543
-+ background: -moz-linear-gradient(top, #00acd4 0%, #008fc7 100%);
544
-+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00acd4), color-stop(100%,#008fc7));
545
-+ background: -o-linear-gradient(top, #00acd4 0%, #008fc7 100%);
546
-+ background: -ms-linear-gradient(top, #00acd4 0%, #008fc7 100%);
547
-+ background: linear-gradient(top, #00acd4 0%, #008fc7 100%);
548
-+}
549
-+.ui-datepicker .ui-state-highlight {
550
-+ color: #0081c2;
551
-+}
552
-+.ui-datepicker td.ui-datepicker-days-cell-over a.ui-state-default {
553
-+ color: #fff;
554
-+ border-color: rgba(73,180,210,0.7);
555
-+ background: rgba(73,180,210,0.7);
556
-+ text-shadow: 0px 1px 1px #666;
557
-+}
558
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/jquery-ui.min.css
Deleted
9
1
2
-/*! jQuery UI - v1.12.0 - 2016-08-01
3
-* http://jqueryui.com
4
-* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
5
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
6
-* Copyright jQuery Foundation and other contributors; Licensed MIT */
7
-.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none;background:#fafafa;color:#333}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu.ui-widget,.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0;background:#444;border:1px solid #999;border-radius:4px!important;box-shadow:0 2px 6px 0 #333}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);color:#fff;white-space:nowrap;border-top:1px solid #5a5a5a}.ui-menu .ui-menu-item div,.ui-menu .ui-menu-item a{display:block;line-height:1.5;padding:6px 10px 4px;background-color:#444;border:0;border-radius:0;color:#fff}.ui-menu .ui-menu-item:first-child{border-top:0}.ui-menu .ui-menu-item:last-child{border-bottom:0}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item .ui-state-focus,.ui-menu .ui-menu-item .ui-state-active,.ui-menu .ui-state-focus,.ui-menu .ui-state-active{background:#0883d0}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup>.ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup>.ui-controlgroup-item:focus,.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical>.ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc(100% - 2.4em)}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:0}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:0}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;outline:0;padding:3px;background:#fff;border-radius:6px!important;border:0!important;box-shadow:1px 1px 18px #666}.ui-dialog .ui-dialog-titlebar{padding:15px 1em 8px 1em;position:relative;border:0;border-radius:5px 5px 0 0}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0;font-size:1.3em;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:-15px;top:-15px;width:30px;margin:0;padding:0;height:30px;z-index:99999;border-width:0!important;background:0 0!important;filter:none!important;box-shadow:none!important}.ui-dialog .ui-dialog-titlebar-close.ui-state-focus{outline:2px solid #4fadd5}.ui-dialog .ui-dialog-titlebar-close .ui-icon-closethick{top:0;left:0;margin:0;width:30px;height:30px;background:url(images/ui-dialog-close.png?v=c2dd.644) 0 0 no-repeat}.no-close .ui-dialog-titlebar-close{display:none!important}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:1.5em 1em .5em 1em;background:0 0;overflow:auto}.ui-dialog .ui-widget-content{border:0}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;border-color:#ddd;border-style:solid;margin:0;padding:.3em 1em .5em .8em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:left}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;background-position:-80px -224px}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:700;line-height:1.5;padding:2px .4em;margin:.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background:#017cb4}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0 0;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:0;border:0;background:0 0;filter:none;height:44px}.ui-tabs .ui-tabs-nav li{list-style:none;position:relative;display:inline-block;top:0;margin:0;border:0!important;padding:0 1px 0 0;white-space:nowrap;background:#f8f8f8}.ui-tabs .ui-tabs-nav li:last-child{background:0 0}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{display:inline-block;padding:15px;text-decoration:none;font-size:12px;color:#999;background:#fafafa;border-right:1px solid #fafafa}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{outline:0;color:#004458;background:#efefef}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:.5em 1em;margin-top:.2em;background:#efefef}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#0186ba}.ui-widget-header{border:1px solid #ddd;color:#333;font-weight:700;background:#e4e4e4}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:400;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:400;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px #5e9ed6}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:400;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_444444_256x240.png?v=f4eb.6992)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_444444_256x240.png?v=f4eb.6992)}.ui-button .ui-icon{background-image:url(images/ui-icons_777777_256x240.png?v=6d28.6999)}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666}.ui-button.ui-state-default{display:inline-block;margin:0 2px;padding:1px 2px;border:1px solid silver;border-radius:4px;background:#f7f7f7;color:#525252;text-decoration:none;outline:0}.ui-button.mainaction{color:#ededed;border-color:#1f262c;background:#2c2f33}.ui-button.ui-state-focus{color:#525252;border-color:#4fadd5;-moz-box-shadow:0 0 2px 1px rgba(71,135,177,.6);-webkit-box-shadow:0 0 2px 1px rgba(71,135,177,.6);-o-box-shadow:0 0 2px 1px rgba(71,135,177,.6);box-shadow:0 0 2px 1px rgba(71,135,177,.6)}.ui-button.ui-state-active{color:#525252;border-color:#aaa;background:#e6e6e6}.ui-button.ui-state-focus.mainaction,.ui-button.ui-state-hover.mainaction{color:#fff}.ui-button.ui-state-focus.mainaction{border-color:#1f262c;-moz-box-shadow:0 0 2px 1px rgba(71,135,177,.6),inset 0 1px 0 0 #777;-webkit-box-shadow:0 0 2px 1px rgba(71,135,177,.6),inset 0 1px 0 0 #777;-o-box-shadow:0 0 2px 1px rgba(71,135,177,.6),inset 0 1px 0 0 #777;box-shadow:0 0 2px 1px rgba(71,135,177,.6),inset 0 1px 0 0 #777}.ui-button.ui-state-active.mainaction{color:#fff;background:#515151}.ui-buttondisabled,.ui-buttondisabled:hover,.ui-button.mainactiondisabled{color:#aaa!important}.ui-datepicker{min-width:20em;padding:0;display:none;border:0;border-radius:3px;-webkit-box-shadow:#666 1px 1px 10px;-moz-box-shadow:1px 1px 10px #666;box-shadow:1px 1px 16px #666}.ui-datepicker .ui-datepicker-header{padding:.3em 0;border-radius:3px 3px 0 0;border:0;background:#3a3a3a;filter:none;color:#fff}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{border:0;background:0 0}.ui-datepicker .ui-datepicker-header .ui-icon{background:url(images/ui-icons-datepicker.png?v=46a1.323) 0 0 no-repeat}.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-w{background-position:0 2px}.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-e{background-position:-14px 2px}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:2px;border:0;background:0 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-prev-hover{left:2px}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-next-hover{right:2px}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{border:0;background:#3a3a3a;outline:0;color:#fff;font-weight:700;width:auto;margin-right:4px;padding-right:4px}.ui-datepicker .ui-datepicker-title select::-ms-expand{display:none}.ie10 .ui-datepicker .ui-datepicker-title select,.webkit .ui-datepicker .ui-datepicker-title select,.mozilla .ui-datepicker .ui-datepicker-title select{background-image:url(images/ui-icons-datepicker.png?v=46a1.323);background-position:right -18px;background-repeat:no-repeat;padding-right:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.ui-datepicker .ui-datepicker-month:focus,.ui-datepicker .ui-datepicker-year:focus{outline:1px solid #4fadd5}.ui-datepicker table{margin:0;border-spacing:0}.ui-datepicker table:focus{outline:2px solid #4fadd5;outline-offset:-2px}.ui-datepicker td{border:1px solid #bbb;padding:0}.ui-datepicker td span,.ui-datepicker td a{border:0;padding:.5em}.ui-datepicker td a.ui-state-default{border:0;background:#e6e6e6}.ui-datepicker td a.ui-priority-secondary{background:#eee}.ui-datepicker td a.ui-state-active{color:#fff;border-color:#0883d0!important;background:#0883d0!important}.ui-datepicker .ui-state-highlight{color:#0081c2}.ui-datepicker td.ui-datepicker-days-cell-over a.ui-state-default{color:#fff;border-color:rgba(73,180,210,.7);background:rgba(73,180,210,.7)}
8
\ No newline at end of file
9
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/jquery.minicolors.css
Deleted
434
1
2
-.minicolors {
3
- position: relative;
4
-}
5
-
6
-.minicolors-sprite {
7
- background-image: url(images/jquery.minicolors.png);
8
-}
9
-
10
-.minicolors-swatch {
11
- position: absolute;
12
- vertical-align: middle;
13
- background-position: -80px 0;
14
- border: solid 1px #ccc;
15
- cursor: text;
16
- padding: 0;
17
- margin: 0;
18
- display: inline-block;
19
-}
20
-
21
-.minicolors-swatch-color {
22
- position: absolute;
23
- top: 0;
24
- left: 0;
25
- right: 0;
26
- bottom: 0;
27
-}
28
-
29
-.minicolors inputtype=hidden + .minicolors-swatch {
30
- width: 28px;
31
- position: static;
32
- cursor: pointer;
33
-}
34
-
35
-.minicolors inputtype=hiddendisabled + .minicolors-swatch {
36
- cursor: default;
37
-}
38
-
39
-/* Panel */
40
-.minicolors-panel {
41
- position: absolute;
42
- width: 173px;
43
- background: white;
44
- border: solid 1px #CCC;
45
- box-shadow: 0 0 20px rgba(0, 0, 0, .2);
46
- z-index: 99999;
47
- box-sizing: content-box;
48
- display: none;
49
-}
50
-
51
-.minicolors-panel.minicolors-visible {
52
- display: block;
53
-}
54
-
55
-/* Panel positioning */
56
-.minicolors-position-top .minicolors-panel {
57
- top: -154px;
58
-}
59
-
60
-.minicolors-position-right .minicolors-panel {
61
- right: 0;
62
-}
63
-
64
-.minicolors-position-bottom .minicolors-panel {
65
- top: auto;
66
-}
67
-
68
-.minicolors-position-left .minicolors-panel {
69
- left: 0;
70
-}
71
-
72
-.minicolors-with-opacity .minicolors-panel {
73
- width: 194px;
74
-}
75
-
76
-.minicolors .minicolors-grid {
77
- position: relative;
78
- top: 1px;
79
- left: 1px; /* LTR */
80
- width: 150px;
81
- height: 150px;
82
- margin-bottom: 2px;
83
- background-position: -120px 0;
84
- cursor: crosshair;
85
-}
86
-dir=rtl .minicolors .minicolors-grid {
87
- right: 1px;
88
-}
89
-
90
-.minicolors .minicolors-grid-inner {
91
- position: absolute;
92
- top: 0;
93
- left: 0;
94
- width: 150px;
95
- height: 150px;
96
-}
97
-
98
-.minicolors-slider-saturation .minicolors-grid {
99
- background-position: -420px 0;
100
-}
101
-
102
-.minicolors-slider-saturation .minicolors-grid-inner {
103
- background-position: -270px 0;
104
- background-image: inherit;
105
-}
106
-
107
-.minicolors-slider-brightness .minicolors-grid {
108
- background-position: -570px 0;
109
-}
110
-
111
-.minicolors-slider-brightness .minicolors-grid-inner {
112
- background-color: black;
113
-}
114
-
115
-.minicolors-slider-wheel .minicolors-grid {
116
- background-position: -720px 0;
117
-}
118
-
119
-.minicolors-slider,
120
-.minicolors-opacity-slider {
121
- position: absolute;
122
- top: 1px;
123
- left: 152px; /* LTR */
124
- width: 20px;
125
- height: 150px;
126
- background-color: white;
127
- background-position: 0 0;
128
- cursor: row-resize;
129
-}
130
-dir=rtl .minicolors-slider,
131
-dir=rtl .minicolors-opacity-slider {
132
- right: 152px;
133
-}
134
-
135
-.minicolors-slider-saturation .minicolors-slider {
136
- background-position: -60px 0;
137
-}
138
-
139
-.minicolors-slider-brightness .minicolors-slider {
140
- background-position: -20px 0;
141
-}
142
-
143
-.minicolors-slider-wheel .minicolors-slider {
144
- background-position: -20px 0;
145
-}
146
-
147
-.minicolors-opacity-slider {
148
- left: 173px; /* LTR */
149
- background-position: -40px 0;
150
- display: none;
151
-}
152
-dir=rtl .minicolors-opacity-slider {
153
- right: 173px;
154
-}
155
-
156
-.minicolors-with-opacity .minicolors-opacity-slider {
157
- display: block;
158
-}
159
-
160
-/* Pickers */
161
-.minicolors-grid .minicolors-picker {
162
- position: absolute;
163
- top: 70px;
164
- left: 70px;
165
- width: 12px;
166
- height: 12px;
167
- border: solid 1px black;
168
- border-radius: 10px;
169
- margin-top: -6px;
170
- margin-left: -6px;
171
- background: none;
172
-}
173
-
174
-.minicolors-grid .minicolors-picker > div {
175
- position: absolute;
176
- top: 0;
177
- left: 0;
178
- width: 8px;
179
- height: 8px;
180
- border-radius: 8px;
181
- border: solid 2px white;
182
- box-sizing: content-box;
183
-}
184
-
185
-.minicolors-picker {
186
- position: absolute;
187
- top: 0;
188
- left: 0;
189
- width: 18px;
190
- height: 2px;
191
- background: white;
192
- border: solid 1px black;
193
- margin-top: -2px;
194
- box-sizing: content-box;
195
-}
196
-
197
-/* Swatches */
198
-.minicolors-swatches,
199
-.minicolors-swatches li {
200
- margin: 5px 0 3px 5px; /* LTR */
201
- padding: 0;
202
- list-style: none;
203
- overflow: hidden;
204
-}
205
-dir=rtl .minicolors-swatches,
206
-dir=rtl .minicolors-swatches li {
207
- margin: 5px 5px 3px 0;
208
-}
209
-
210
-.minicolors-swatches .minicolors-swatch {
211
- position: relative;
212
- float: left; /* LTR */
213
- cursor: pointer;
214
- margin:0 4px 0 0; /* LTR */
215
-}
216
-dir=rtl .minicolors-swatches .minicolors-swatch {
217
- float: right;
218
- margin:0 0 0 4px;
219
-}
220
-
221
-.minicolors-with-opacity .minicolors-swatches .minicolors-swatch {
222
- margin-right: 7px; /* LTR */
223
-}
224
-dir=rtl .minicolors-with-opacity .minicolors-swatches .minicolors-swatch {
225
- margin-right: 0;
226
- margin-left: 7px;
227
-}
228
-
229
-.minicolors-swatch.selected {
230
- border-color: #000;
231
-}
232
-
233
-/* Inline controls */
234
-.minicolors-inline {
235
- display: inline-block;
236
-}
237
-
238
-.minicolors-inline .minicolors-input {
239
- display: none !important;
240
-}
241
-
242
-.minicolors-inline .minicolors-panel {
243
- position: relative;
244
- top: auto;
245
- left: auto; /* LTR */
246
- box-shadow: none;
247
- z-index: auto;
248
- display: inline-block;
249
-}
250
-dir=rtl .minicolors-inline .minicolors-panel {
251
- right: auto;
252
-}
253
-
254
-/* Default theme */
255
-.minicolors-theme-default .minicolors-swatch {
256
- top: 5px;
257
- left: 5px; /* LTR */
258
- width: 18px;
259
- height: 18px;
260
-}
261
-dir=rtl .minicolors-theme-default .minicolors-swatch {
262
- right: 5px;
263
-}
264
-.minicolors-theme-default .minicolors-swatches .minicolors-swatch {
265
- margin-bottom: 2px;
266
- top: 0;
267
- left: 0; /* LTR */
268
- width: 18px;
269
- height: 18px;
270
-}
271
-dir=rtl .minicolors-theme-default .minicolors-swatches .minicolors-swatch {
272
- right: 0;
273
-}
274
-.minicolors-theme-default.minicolors-position-right .minicolors-swatch {
275
- left: auto; /* LTR */
276
- right: 5px; /* LTR */
277
-}
278
-dir=rtl .minicolors-theme-default.minicolors-position-left .minicolors-swatch {
279
- right: auto;
280
- left: 5px;
281
-}
282
-.minicolors-theme-default.minicolors {
283
- width: auto;
284
- display: inline-block;
285
-}
286
-.minicolors-theme-default .minicolors-input {
287
- height: 20px;
288
- width: auto;
289
- display: inline-block;
290
- padding-left: 26px; /* LTR */
291
-}
292
-dir=rtl .minicolors-theme-default .minicolors-input {
293
- text-align: right;
294
- unicode-bidi: plaintext;
295
- padding-left: 1px;
296
- padding-right: 26px;
297
-}
298
-.minicolors-theme-default.minicolors-position-right .minicolors-input {
299
- padding-right: 26px; /* LTR */
300
- padding-left: inherit; /* LTR */
301
-}
302
-dir=rtl .minicolors-theme-default.minicolors-position-left .minicolors-input {
303
- padding-right: inherit;
304
- padding-left: 26px;
305
-}
306
-
307
-/* Bootstrap theme */
308
-.minicolors-theme-bootstrap .minicolors-swatch {
309
- z-index: 2;
310
- top: 3px;
311
- left: 3px; /* LTR */
312
- width: 28px;
313
- height: 28px;
314
- border-radius: 3px;
315
-}
316
-dir=rtl .minicolors-theme-bootstrap .minicolors-swatch {
317
- right: 3px;
318
-}
319
-.minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch {
320
- margin-bottom: 2px;
321
- top: 0;
322
- left: 0; /* LTR */
323
- width: 20px;
324
- height: 20px;
325
-}
326
-dir=rtl .minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch {
327
- right: 0;
328
-}
329
-.minicolors-theme-bootstrap .minicolors-swatch-color {
330
- border-radius: inherit;
331
-}
332
-.minicolors-theme-bootstrap.minicolors-position-right > .minicolors-swatch {
333
- left: auto; /* LTR */
334
- right: 3px; /* LTR */
335
-}
336
-dir=rtl .minicolors-theme-bootstrap.minicolors-position-left > .minicolors-swatch {
337
- right: auto;
338
- left: 3px;
339
-}
340
-.minicolors-theme-bootstrap .minicolors-input {
341
- float: none;
342
- padding-left: 44px; /* LTR */
343
-}
344
-dir=rtl .minicolors-theme-bootstrap .minicolors-input {
345
- text-align: right;
346
- unicode-bidi: plaintext;
347
- padding-left: 12px;
348
- padding-right: 44px;
349
-}
350
-.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input {
351
- padding-right: 44px; /* LTR */
352
- padding-left: 12px; /* LTR */
353
-}
354
-dir=rtl .minicolors-theme-bootstrap.minicolors-position-left .minicolors-input {
355
- padding-right: 12px;
356
- padding-left: 44px;
357
-}
358
-.minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch {
359
- top: 4px;
360
- left: 4px; /* LTR */
361
- width: 37px;
362
- height: 37px;
363
- border-radius: 5px;
364
-}
365
-dir=rtl .minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch {
366
- right: 4px;
367
-}
368
-.minicolors-theme-bootstrap .minicolors-input.input-sm + .minicolors-swatch {
369
- width: 24px;
370
- height: 24px;
371
-}
372
-.minicolors-theme-bootstrap .minicolors-input.input-xs + .minicolors-swatch {
373
- width: 18px;
374
- height: 18px;
375
-}
376
-.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {
377
- border-top-left-radius: 0; /* LTR */
378
- border-bottom-left-radius: 0; /* LTR */
379
-}
380
-dir=rtl .input-group .minicolors-theme-bootstrap .minicolors-input {
381
- border-radius: 4px;
382
-}
383
-dir=rtl .input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {
384
- border-top-right-radius: 0;
385
- border-bottom-right-radius: 0;
386
-}
387
-dir=rtl .input-group .minicolors-theme-bootstrap:not(:last-child) .minicolors-input {
388
- border-top-left-radius: 0;
389
- border-bottom-left-radius: 0;
390
-}
391
-/* bootstrap input-group rtl override */
392
-dir=rtl .input-group .form-control,
393
-dir=rtl .input-group-addon,
394
-dir=rtl .input-group-btn > .btn,
395
-dir=rtl .input-group-btn > .btn-group > .btn,
396
-dir=rtl .input-group-btn > .dropdown-toggle {
397
- border: 1px solid #ccc;
398
- border-radius: 4px;
399
-}
400
-dir=rtl .input-group .form-control:first-child,
401
-dir=rtl .input-group-addon:first-child,
402
-dir=rtl .input-group-btn:first-child > .btn,
403
-dir=rtl .input-group-btn:first-child > .btn-group > .btn,
404
-dir=rtl .input-group-btn:first-child > .dropdown-toggle,
405
-dir=rtl .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
406
-dir=rtl .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
407
- border-top-left-radius: 0;
408
- border-bottom-left-radius: 0;
409
- border-left: 0;
410
-}
411
-dir=rtl .input-group .form-control:last-child,
412
-dir=rtl .input-group-addon:last-child,
413
-dir=rtl .input-group-btn:last-child > .btn,
414
-dir=rtl .input-group-btn:last-child > .btn-group > .btn,
415
-dir=rtl .input-group-btn:last-child > .dropdown-toggle,
416
-dir=rtl .input-group-btn:first-child > .btn:not(:first-child),
417
-dir=rtl .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
418
- border-top-right-radius: 0;
419
- border-bottom-right-radius: 0;
420
-}
421
-
422
-/* Semantic Ui theme */
423
-.minicolors-theme-semanticui .minicolors-swatch {
424
- top: 0;
425
- left: 0; /* LTR */
426
- padding: 18px;
427
-}
428
-dir=rtl .minicolors-theme-semanticui .minicolors-swatch {
429
- right: 0;
430
-}
431
-.minicolors-theme-semanticui input {
432
- text-indent: 30px;
433
-}
434
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/jquery.minicolors.min.css
Deleted
4
1
2
-.minicolors{position:relative}.minicolors-sprite{background-image:url(images/jquery.minicolors.png?v=44ae.68627)}.minicolors-swatch{position:absolute;vertical-align:middle;background-position:-80px 0;border:solid 1px #ccc;cursor:text;padding:0;margin:0;display:inline-block}.minicolors-swatch-color{position:absolute;top:0;left:0;right:0;bottom:0}.minicolors inputtype=hidden+.minicolors-swatch{width:28px;position:static;cursor:pointer}.minicolors inputtype=hiddendisabled+.minicolors-swatch{cursor:default}.minicolors-panel{position:absolute;width:173px;background:#fff;border:solid 1px #ccc;box-shadow:0 0 20px rgba(0,0,0,.2);z-index:99999;box-sizing:content-box;display:none}.minicolors-panel.minicolors-visible{display:block}.minicolors-position-top .minicolors-panel{top:-154px}.minicolors-position-right .minicolors-panel{right:0}.minicolors-position-bottom .minicolors-panel{top:auto}.minicolors-position-left .minicolors-panel{left:0}.minicolors-with-opacity .minicolors-panel{width:194px}.minicolors .minicolors-grid{position:relative;top:1px;left:1px;width:150px;height:150px;margin-bottom:2px;background-position:-120px 0;cursor:crosshair}dir=rtl .minicolors .minicolors-grid{right:1px}.minicolors .minicolors-grid-inner{position:absolute;top:0;left:0;width:150px;height:150px}.minicolors-slider-saturation .minicolors-grid{background-position:-420px 0}.minicolors-slider-saturation .minicolors-grid-inner{background-position:-270px 0;background-image:inherit}.minicolors-slider-brightness .minicolors-grid{background-position:-570px 0}.minicolors-slider-brightness .minicolors-grid-inner{background-color:#000}.minicolors-slider-wheel .minicolors-grid{background-position:-720px 0}.minicolors-slider,.minicolors-opacity-slider{position:absolute;top:1px;left:152px;width:20px;height:150px;background-color:#fff;background-position:0 0;cursor:row-resize}dir=rtl .minicolors-slider,dir=rtl .minicolors-opacity-slider{right:152px}.minicolors-slider-saturation .minicolors-slider{background-position:-60px 0}.minicolors-slider-brightness .minicolors-slider{background-position:-20px 0}.minicolors-slider-wheel .minicolors-slider{background-position:-20px 0}.minicolors-opacity-slider{left:173px;background-position:-40px 0;display:none}dir=rtl .minicolors-opacity-slider{right:173px}.minicolors-with-opacity .minicolors-opacity-slider{display:block}.minicolors-grid .minicolors-picker{position:absolute;top:70px;left:70px;width:12px;height:12px;border:solid 1px #000;border-radius:10px;margin-top:-6px;margin-left:-6px;background:0 0}.minicolors-grid .minicolors-picker>div{position:absolute;top:0;left:0;width:8px;height:8px;border-radius:8px;border:solid 2px #fff;box-sizing:content-box}.minicolors-picker{position:absolute;top:0;left:0;width:18px;height:2px;background:#fff;border:solid 1px #000;margin-top:-2px;box-sizing:content-box}.minicolors-swatches,.minicolors-swatches li{margin:5px 0 3px 5px;padding:0;list-style:none;overflow:hidden}dir=rtl .minicolors-swatches,dir=rtl .minicolors-swatches li{margin:5px 5px 3px 0}.minicolors-swatches .minicolors-swatch{position:relative;float:left;cursor:pointer;margin:0 4px 0 0}dir=rtl .minicolors-swatches .minicolors-swatch{float:right;margin:0 0 0 4px}.minicolors-with-opacity .minicolors-swatches .minicolors-swatch{margin-right:7px}dir=rtl .minicolors-with-opacity .minicolors-swatches .minicolors-swatch{margin-right:0;margin-left:7px}.minicolors-swatch.selected{border-color:#000}.minicolors-inline{display:inline-block}.minicolors-inline .minicolors-input{display:none!important}.minicolors-inline .minicolors-panel{position:relative;top:auto;left:auto;box-shadow:none;z-index:auto;display:inline-block}dir=rtl .minicolors-inline .minicolors-panel{right:auto}.minicolors-theme-default .minicolors-swatch{top:5px;left:5px;width:18px;height:18px}dir=rtl .minicolors-theme-default .minicolors-swatch{right:5px}.minicolors-theme-default .minicolors-swatches .minicolors-swatch{margin-bottom:2px;top:0;left:0;width:18px;height:18px}dir=rtl .minicolors-theme-default .minicolors-swatches .minicolors-swatch{right:0}.minicolors-theme-default.minicolors-position-right .minicolors-swatch{left:auto;right:5px}dir=rtl .minicolors-theme-default.minicolors-position-left .minicolors-swatch{right:auto;left:5px}.minicolors-theme-default.minicolors{width:auto;display:inline-block}.minicolors-theme-default .minicolors-input{height:20px;width:auto;display:inline-block;padding-left:26px}dir=rtl .minicolors-theme-default .minicolors-input{text-align:right;unicode-bidi:plaintext;padding-left:1px;padding-right:26px}.minicolors-theme-default.minicolors-position-right .minicolors-input{padding-right:26px;padding-left:inherit}dir=rtl .minicolors-theme-default.minicolors-position-left .minicolors-input{padding-right:inherit;padding-left:26px}.minicolors-theme-bootstrap .minicolors-swatch{z-index:2;top:3px;left:3px;width:28px;height:28px;border-radius:3px}dir=rtl .minicolors-theme-bootstrap .minicolors-swatch{right:3px}.minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch{margin-bottom:2px;top:0;left:0;width:20px;height:20px}dir=rtl .minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch{right:0}.minicolors-theme-bootstrap .minicolors-swatch-color{border-radius:inherit}.minicolors-theme-bootstrap.minicolors-position-right>.minicolors-swatch{left:auto;right:3px}dir=rtl .minicolors-theme-bootstrap.minicolors-position-left>.minicolors-swatch{right:auto;left:3px}.minicolors-theme-bootstrap .minicolors-input{float:none;padding-left:44px}dir=rtl .minicolors-theme-bootstrap .minicolors-input{text-align:right;unicode-bidi:plaintext;padding-left:12px;padding-right:44px}.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input{padding-right:44px;padding-left:12px}dir=rtl .minicolors-theme-bootstrap.minicolors-position-left .minicolors-input{padding-right:12px;padding-left:44px}.minicolors-theme-bootstrap .minicolors-input.input-lg+.minicolors-swatch{top:4px;left:4px;width:37px;height:37px;border-radius:5px}dir=rtl .minicolors-theme-bootstrap .minicolors-input.input-lg+.minicolors-swatch{right:4px}.minicolors-theme-bootstrap .minicolors-input.input-sm+.minicolors-swatch{width:24px;height:24px}.minicolors-theme-bootstrap .minicolors-input.input-xs+.minicolors-swatch{width:18px;height:18px}.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input{border-top-left-radius:0;border-bottom-left-radius:0}dir=rtl .input-group .minicolors-theme-bootstrap .minicolors-input{border-radius:4px}dir=rtl .input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input{border-top-right-radius:0;border-bottom-right-radius:0}dir=rtl .input-group .minicolors-theme-bootstrap:not(:last-child) .minicolors-input{border-top-left-radius:0;border-bottom-left-radius:0}dir=rtl .input-group .form-control,dir=rtl .input-group-addon,dir=rtl .input-group-btn>.btn,dir=rtl .input-group-btn>.btn-group>.btn,dir=rtl .input-group-btn>.dropdown-toggle{border:1px solid #ccc;border-radius:4px}dir=rtl .input-group .form-control:first-child,dir=rtl .input-group-addon:first-child,dir=rtl .input-group-btn:first-child>.btn,dir=rtl .input-group-btn:first-child>.btn-group>.btn,dir=rtl .input-group-btn:first-child>.dropdown-toggle,dir=rtl .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),dir=rtl .input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0}dir=rtl .input-group .form-control:last-child,dir=rtl .input-group-addon:last-child,dir=rtl .input-group-btn:last-child>.btn,dir=rtl .input-group-btn:last-child>.btn-group>.btn,dir=rtl .input-group-btn:last-child>.dropdown-toggle,dir=rtl .input-group-btn:first-child>.btn:not(:first-child),dir=rtl .input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.minicolors-theme-semanticui .minicolors-swatch{top:0;left:0;padding:18px}dir=rtl .minicolors-theme-semanticui .minicolors-swatch{right:0}.minicolors-theme-semanticui input{text-indent:30px}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/tagedit.css
Deleted
107
1
2
-/**
3
- * Styles of the tagedit inputsforms
4
- */
5
-.tagedit-list {
6
- width: 100%;
7
- margin: 0;
8
- padding: 4px 4px 0 5px;
9
- overflow: auto;
10
- min-height: 26px;
11
- background: #fff;
12
- border: 1px solid #b2b2b2;
13
- border-radius: 4px;
14
- box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
15
- -moz-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
16
- -webkit-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
17
- -o-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
18
-}
19
-.tagedit-list li.tagedit-listelement {
20
- list-style-type: none;
21
- float: left;
22
- margin: 0 4px 4px 0;
23
- padding: 0;
24
-}
25
-
26
-/* New Item input */
27
-.tagedit-list li.tagedit-listelement-new input {
28
- border: 0;
29
- height: 100%;
30
- padding: 4px 1px;
31
- width: 15px;
32
- background: #fff;
33
- border-radius: 0;
34
- box-shadow: none;
35
- -moz-box-shadow: none;
36
- -webkit-box-shadow: none;
37
- -o-box-shadow: none;
38
-}
39
-.tagedit-list li.tagedit-listelement-new input:focus {
40
- box-shadow: none;
41
- -moz-box-shadow: none;
42
- -webkit-box-shadow: none;
43
- -o-box-shadow: none;
44
- outline: none;
45
-}
46
-.tagedit-list li.tagedit-listelement-new input.tagedit-input-disabled {
47
- display: none;
48
-}
49
-
50
-/* Item that is put to the List */
51
-.tagedit span.tag-element,
52
-.tagedit-list li.tagedit-listelement-old {
53
- padding: 3px 6px 1px 6px;
54
- background: #ddeef5;
55
- background: -moz-linear-gradient(top, #edf6fa 0%, #d6e9f3 100%);
56
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#edf6fa), color-stop(100%,#d6e9f3));
57
- background: -o-linear-gradient(top, #edf6fa 0%, #d6e9f3 100%);
58
- background: -ms-linear-gradient(top, #edf6fa 0%, #d6e9f3 100%);
59
- background: linear-gradient(top, #edf6fa 0%, #d6e9f3 100%);
60
- border: 1px solid #c2dae5;
61
- -moz-border-radius: 4px;
62
- -webkit-border-radius: 4px;
63
- border-radius: 4px;
64
- color: #0d5165;
65
- line-height: 1.3em;
66
-}
67
-
68
-.tagedit-list li.tagedit-listelement-focus {
69
- border-color: #4787b1;
70
- -moz-box-shadow: 0 0 3px 1px rgba(71,135,177, 0.8);
71
- -webkit-box-shadow: 0 0 3px 1px rgba(71,135,177, 0.8);
72
- -o-box-shadow: 0 0 3px 1px rgba(71,135,177, 0.8);
73
- box-shadow: 0 0 3px 1px rgba(71,135,177, 0.8);
74
-}
75
-
76
-.tagedit span.tag-element {
77
- margin-right: 0.6em;
78
- padding: 2px 6px;
79
-/* cursor: pointer; */
80
-}
81
-
82
-.tagedit span.tag-element.inherit {
83
- color: #666;
84
- background: #f2f2f2;
85
- border-color: #ddd;
86
-}
87
-
88
-.tagedit-list li.tagedit-listelement-old a.tagedit-close,
89
-.tagedit-list li.tagedit-listelement-old a.tagedit-break,
90
-.tagedit-list li.tagedit-listelement-old a.tagedit-delete,
91
-.tagedit-list li.tagedit-listelement-old a.tagedit-save {
92
- text-indent: -2000px;
93
- display: inline-block;
94
- position: relative;
95
- top: -1px;
96
- width: 16px;
97
- height: 16px;
98
- margin: 0 -4px 0 6px;
99
- background: url('data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAOCAYAAAD0f5bSAAAAgUlEQVQoz2NgQAKzdxwWAOIEIG5AwiC+AAM2AJQIAOL3QPwfCwaJB6BrSMChGB0nwDQYwATP3nn4f+Ge4ygKQXyQOJKYAUjTepjAm09fwBimEUTDxJA0rWdANxWmaMXB0xiGwDADurthGkEAmwbqaCLFeWQFBOlBTlbkkp2MSE2wAA8R50rWvqeRAAAAAElFTkSuQmCC') left 1px no-repeat;
100
- cursor: pointer;
101
-}
102
-
103
-.tagedit-list li.tagedit-listelement-old span {
104
- display: inline-block;
105
- height: 15px;
106
-}
107
roundcubemail-1.6.tar.gz/skins/larry/plugins/jqueryui/tagedit.min.css
Deleted
4
1
2
-.tagedit-list{width:100%;margin:0;padding:4px 4px 0 5px;overflow:auto;min-height:26px;background:#fff;border:1px solid #b2b2b2;border-radius:4px;box-shadow:inset 0 0 2px 1px rgba(0,0,0,.1);-moz-box-shadow:inset 0 0 2px 1px rgba(0,0,0,.1);-webkit-box-shadow:inset 0 0 2px 1px rgba(0,0,0,.1);-o-box-shadow:inset 0 0 2px 1px rgba(0,0,0,.1)}.tagedit-list li.tagedit-listelement{list-style-type:none;float:left;margin:0 4px 4px 0;padding:0}.tagedit-list li.tagedit-listelement-new input{border:0;height:100%;padding:4px 1px;width:15px;background:#fff;border-radius:0;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;-o-box-shadow:none}.tagedit-list li.tagedit-listelement-new input:focus{box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;-o-box-shadow:none;outline:0}.tagedit-list li.tagedit-listelement-new input.tagedit-input-disabled{display:none}.tagedit span.tag-element,.tagedit-list li.tagedit-listelement-old{padding:3px 6px 1px 6px;background:#ddeef5;background:-moz-linear-gradient(top,#edf6fa 0,#d6e9f3 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#edf6fa),color-stop(100%,#d6e9f3));background:-o-linear-gradient(top,#edf6fa 0,#d6e9f3 100%);background:-ms-linear-gradient(top,#edf6fa 0%,#d6e9f3 100%);background:linear-gradient(top,#edf6fa 0%,#d6e9f3 100%);border:1px solid #c2dae5;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;color:#0d5165;line-height:1.3em}.tagedit-list li.tagedit-listelement-focus{border-color:#4787b1;-moz-box-shadow:0 0 3px 1px rgba(71,135,177,.8);-webkit-box-shadow:0 0 3px 1px rgba(71,135,177,.8);-o-box-shadow:0 0 3px 1px rgba(71,135,177,.8);box-shadow:0 0 3px 1px rgba(71,135,177,.8)}.tagedit span.tag-element{margin-right:.6em;padding:2px 6px}.tagedit span.tag-element.inherit{color:#666;background:#f2f2f2;border-color:#ddd}.tagedit-list li.tagedit-listelement-old a.tagedit-close,.tagedit-list li.tagedit-listelement-old a.tagedit-break,.tagedit-list li.tagedit-listelement-old a.tagedit-delete,.tagedit-list li.tagedit-listelement-old a.tagedit-save{text-indent:-2000px;display:inline-block;position:relative;top:-1px;width:16px;height:16px;margin:0 -4px 0 6px;background:url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAOCAYAAAD0f5bSAAAAgUlEQVQoz2NgQAKzdxwWAOIEIG5AwiC+AAM2AJQIAOL3QPwfCwaJB6BrSMChGB0nwDQYwATP3nn4f+Ge4ygKQXyQOJKYAUjTepjAm09fwBimEUTDxJA0rWdANxWmaMXB0xiGwDADurthGkEAmwbqaCLFeWQFBOlBTlbkkp2MSE2wAA8R50rWvqeRAAAAAElFTkSuQmCC) left 1px no-repeat;cursor:pointer}.tagedit-list li.tagedit-listelement-old span{display:inline-block;height:15px}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/images
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/images/add.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/images/del.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/images/down_small.gif
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/images/erase.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/images/up_small.gif
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/images/vacation_icons.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/managesieve.css
Deleted
546
1
2
-#filtersetslistbox
3
-{
4
- position: absolute;
5
- top: 0;
6
- bottom: 0;
7
- left: 0;
8
- width: 150px;
9
-}
10
-
11
-#filtersscreen
12
-{
13
- position: absolute;
14
- top: 0;
15
- right: 0;
16
- bottom: 0;
17
- left: 162px;
18
-}
19
-
20
-#filtersscreen.nosetlist
21
-{
22
- left: 0;
23
-}
24
-
25
-#filterslistbox
26
-{
27
- position: absolute;
28
- left: 0;
29
- top: 0;
30
- bottom: 0;
31
- width: 180px;
32
-}
33
-
34
-#filter-box
35
-{
36
- position: absolute;
37
- top: 0;
38
- right: 0;
39
- bottom: 0;
40
- left: 192px;
41
-}
42
-
43
-#filter-frame
44
-{
45
- border-radius: 4px;
46
-}
47
-
48
-#filterslist,
49
-#filtersetslist
50
-{
51
- width: 100%;
52
- table-layout: fixed;
53
-}
54
-
55
-#filterslist tbody td,
56
-#filtersetslist tbody td
57
-{
58
- width: 100%;
59
- overflow: hidden;
60
- text-overflow: ellipsis;
61
-}
62
-
63
-#filterslist tbody tr.disabled td,
64
-#filtersetslist tbody tr.disabled td
65
-{
66
- color: #87A3AA;
67
- text-decoration: line-through;
68
-}
69
-
70
-#filtersetslist tbody td
71
-{
72
- font-weight: bold;
73
-}
74
-
75
-#filterslist tbody tr.filtermoveup td
76
-{
77
- border-top: 2px dotted #555 !important;
78
- padding-top: 5px;
79
-}
80
-
81
-#filterslist tbody tr.filtermovedown td
82
-{
83
- border-bottom: 2px dotted #555 !important;
84
- padding-bottom: 4px;
85
-}
86
-
87
-body.iframe
88
-{
89
- min-width: 620px;
90
-}
91
-
92
-#filter-form
93
-{
94
- min-width: 550px;
95
- white-space: nowrap;
96
- padding: 20px 10px 10px 10px;
97
-}
98
-
99
-#filter-form legend,
100
-#filter-form label {
101
- color: #666666;
102
- vertical-align: middle;
103
-}
104
-
105
-#filter-form li {
106
- border: none;
107
-}
108
-
109
-#filter-form .col-sm-4,
110
-#filter-form .col-form-label {
111
- display: inline-block;
112
- min-width: 100px;
113
- line-height: 2.5;
114
-}
115
-
116
-#filter-form inputtype=checkbox {
117
- margin: 0;
118
-}
119
-
120
-#filter-form .col-form-label + div {
121
- display: inline;
122
-}
123
-
124
-#rules, #actions
125
-{
126
- margin-top: 5px;
127
- padding: 0;
128
- border-collapse: collapse;
129
-}
130
-
131
-div.rulerow, div.actionrow
132
-{
133
- width: auto;
134
- padding: 2px;
135
- white-space: nowrap;
136
- border: 1px solid white;
137
- background-color: #eee;
138
-}
139
-
140
-div.rulerow:hover, div.actionrow:hover
141
-{
142
- background-color: #D9ECF4;
143
- border: 1px solid #BBD3DA;
144
-}
145
-
146
-div.rulerow table, div.actionrow table
147
-{
148
- padding: 0px;
149
- min-width: 600px;
150
-}
151
-
152
-#filter-form td
153
-{
154
- vertical-align: top;
155
-}
156
-
157
-#filter-form div.flexbox {
158
- margin: 0;
159
-}
160
-
161
-td.advbutton
162
-{
163
- width: 1%;
164
- overflow: hidden;
165
-}
166
-
167
-td.advbutton a
168
-{
169
- display: block;
170
- padding-top: 16px;
171
- height: 6px;
172
- width: 12px;
173
- text-decoration: none;
174
-}
175
-
176
-td.advbutton a span
177
-{
178
- display: none;
179
-}
180
-
181
-td.advbutton a.show
182
-{
183
- background: url(images/down_small.gif) center no-repeat;
184
-}
185
-
186
-td.advbutton a.hide
187
-{
188
- background: url(images/up_small.gif) center no-repeat;
189
-}
190
-
191
-td.rowbuttons
192
-{
193
- text-align: right;
194
- white-space: nowrap;
195
- width: 1%;
196
- padding-top: 3px;
197
-}
198
-
199
-td.rowactions
200
-{
201
- white-space: nowrap;
202
- width: 1%;
203
- padding-top: 2px;
204
-}
205
-
206
-td.rowtargets
207
-{
208
- white-space: nowrap;
209
- width: 98%;
210
- padding-left: 3px;
211
- padding-top: 2px;
212
-}
213
-
214
-td.rowtargets > div
215
-{
216
- vertical-align: top;
217
- margin-top: 2px;
218
-}
219
-
220
-td.rowtargets div.adv
221
-{
222
- padding-top: 3px;
223
- font-size: 10px;
224
-}
225
-
226
-td.rowtargets div.adv span.label
227
-{
228
- display: inline-block;
229
- padding-right: 5px;
230
- min-width: 70px;
231
-}
232
-
233
-td.rowtargets div a {
234
- margin-left: 10px;
235
-}
236
-
237
-td.rowtargets div.adv input
238
-{
239
- margin-bottom: 1px;
240
-}
241
-
242
-input.disabled, input.disabled:hover
243
-{
244
- color: #999999;
245
-}
246
-
247
-input.error, textarea.error
248
-{
249
- background-color: #FFFFC4;
250
-}
251
-
252
-input.box,
253
-input.radio
254
-{
255
- border: 0;
256
- margin-top: 0;
257
-}
258
-
259
-input.radio
260
-{
261
- vertical-align: middle;
262
-}
263
-
264
-select.operator_selector
265
-{
266
- width: 200px;
267
- vertical-align: top;
268
-}
269
-
270
-td.rowtargets span,
271
-span.label
272
-{
273
- color: #666666;
274
- font-size: 10px;
275
- white-space: nowrap;
276
-}
277
-
278
-td.rowtargets label
279
-{
280
- color: black;
281
-}
282
-
283
-#footer
284
-{
285
- padding-top: 5px;
286
- width: 100%;
287
-}
288
-
289
-#footer .footerleft label
290
-{
291
- margin-left: 40px;
292
- white-space: nowrap;
293
-}
294
-
295
-.itemlist
296
-{
297
- line-height: 25px;
298
-}
299
-
300
-.itemlist input
301
-{
302
- vertical-align: middle;
303
-}
304
-
305
-span.sieve.error
306
-{
307
- color: red;
308
- white-space: nowrap;
309
-}
310
-
311
-#managesieve-tip
312
-{
313
- padding: 3px;
314
- background-color: #eee;
315
-}
316
-
317
-#filter-form a.button
318
-{
319
- margin: 0;
320
- padding: 0;
321
- border: 0;
322
- border-radius: 0;
323
-}
324
-
325
-#filter-form a.button span
326
-{
327
- display: none;
328
-}
329
-
330
-#filter-form a.button.add
331
-{
332
- background: url(images/add.png) no-repeat;
333
- width: 30px;
334
- height: 20px;
335
- margin-right: 4px;
336
- display: inline-block;
337
-}
338
-
339
-#filter-form a.button.del
340
-{
341
- background: url(images/del.png) no-repeat;
342
- width: 30px;
343
- height: 20px;
344
- display: inline-block;
345
-}
346
-
347
-#filter-form a.button.disabled
348
-{
349
- opacity: 0.35;
350
- filter: alpha(opacity=35);
351
- cursor: default;
352
-}
353
-
354
-#filter-form select,
355
-#filter-form input,
356
-#filter-form textarea
357
-{
358
- vertical-align: middle;
359
- max-width: 280px;
360
-}
361
-
362
-/* revert larry style button */
363
-#filter-form input.button
364
-{
365
- padding: 4px 12px;
366
-}
367
-
368
-fieldset
369
-{
370
- border: 0;
371
- padding: 0;
372
- margin-bottom: 20px;
373
-}
374
-
375
-fieldset > legend
376
-{
377
- display: block;
378
- font-size: 14px;
379
- font-weight: bold;
380
- padding-bottom: 10px;
381
- margin-bottom: 0;
382
-}
383
-
384
-/* smart multi-row input field */
385
-.listarea
386
-{
387
- border: 1px solid #B2B2B2;
388
- border-radius: 4px;
389
- box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
390
- -webkit-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
391
- margin: 0;
392
- padding: 2px;
393
- display: inline-block;
394
- max-height: 59px;
395
- overflow-y: auto;
396
- vertical-align: middle;
397
-}
398
-
399
-td.rowtargets > span.listarea
400
-{
401
- vertical-align: top;
402
- margin-top: 2px;
403
-}
404
-
405
-.listelement
406
-{
407
- display: block;
408
- white-space: nowrap;
409
- background-color: #fff;
410
- border-top: 1px solid #e2e2e2;
411
- height: 14px;
412
- padding: 0;
413
- margin: 0;
414
- overflow: hidden;
415
- line-height: 14px;
416
-}
417
-
418
-.listarea.error .listelement
419
-{
420
- background-color: #FFFFC4;
421
-}
422
-
423
-.listelement:first-child
424
-{
425
- border-top: none;
426
-}
427
-
428
-#vacationform .listelement input,
429
-#filter-form .listelement input
430
-{
431
- border: none;
432
- border-radius: 0;
433
- box-shadow: none;
434
- outline: none;
435
- vertical-align: top;
436
- height: 14px;
437
- padding-top: 0;
438
- padding-bottom: 0;
439
- line-height: 14px;
440
- background-color: transparent;
441
-}
442
-
443
-.listelement input:focus
444
-{
445
- box-shadow: none;
446
-}
447
-
448
-.listelement .reset
449
-{
450
- display: inline-block;
451
- width: 16px;
452
- height: 16px;
453
- background: url(images/erase.png) -1px -1px no-repeat #eee;
454
- cursor: pointer;
455
-}
456
-
457
-
458
-/* fixes for popup window */
459
-
460
-body.iframe.mail
461
-{
462
- margin: 0;
463
- padding: 0;
464
-}
465
-
466
-body.iframe.mail #filter-form
467
-{
468
- padding: 10px 5px 5px 5px;
469
-}
470
-
471
-
472
-/* vacation form */
473
-#settings-sections .vacation a {
474
- background-image: url(images/vacation_icons.png);
475
- background-repeat: no-repeat;
476
- background-position: 7px 1px;
477
-}
478
-
479
-#settings-sections .vacation.selected a {
480
- background-position: 7px -23px;
481
-}
482
-
483
-#managesieve-vacation, #managesieve-forward {
484
- position: absolute;
485
- top: 0;
486
- left: 212px;
487
- right: 0;
488
- bottom: 0;
489
- overflow: auto;
490
-}
491
-
492
-#vacationform .listarea {
493
- max-height: 91px;
494
-}
495
-
496
-#vacationform td.vacation {
497
- white-space: nowrap;
498
-}
499
-
500
-#vacationform input.button {
501
- margin-left: 10px;
502
-}
503
-
504
-/* RAW editor and CodeMirror overrides */
505
-
506
-.raweditor textarea {
507
- border: none;
508
- border-radius: 0;
509
- max-width: none !important;
510
- box-shadow: none;
511
- font-family: monospace;
512
- width: 99%;
513
- min-height: 300px;
514
-}
515
-
516
-.raweditor textarea,
517
-.raweditor .CodeMirror {
518
- position: absolute;
519
- top: 34px;
520
- bottom: 45px;
521
- right: 0;
522
- left: 0;
523
- height: auto;
524
- background-color: #fdfdfd;
525
- border-bottom: 1px solid #eee;
526
-}
527
-
528
-.raweditor .CodeMirror-linebackground.line-error {
529
- background-color: #f00;
530
- opacity: 0.4;
531
-}
532
-
533
-.raweditor .errorGutter {
534
- width: 0.8em;
535
-}
536
-
537
-.raweditor #footer {
538
- position: absolute;
539
- bottom: 5px;
540
-}
541
-
542
-body.iframe.raweditor {
543
- min-width: 100px;
544
- overflow: hidden;
545
-}
546
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/managesieve.min.css
Deleted
4
1
2
-#filtersetslistbox{position:absolute;top:0;bottom:0;left:0;width:150px}#filtersscreen{position:absolute;top:0;right:0;bottom:0;left:162px}#filtersscreen.nosetlist{left:0}#filterslistbox{position:absolute;left:0;top:0;bottom:0;width:180px}#filter-box{position:absolute;top:0;right:0;bottom:0;left:192px}#filter-frame{border-radius:4px}#filterslist,#filtersetslist{width:100%;table-layout:fixed}#filterslist tbody td,#filtersetslist tbody td{width:100%;overflow:hidden;text-overflow:ellipsis}#filterslist tbody tr.disabled td,#filtersetslist tbody tr.disabled td{color:#87a3aa;text-decoration:line-through}#filtersetslist tbody td{font-weight:700}#filterslist tbody tr.filtermoveup td{border-top:2px dotted #555!important;padding-top:5px}#filterslist tbody tr.filtermovedown td{border-bottom:2px dotted #555!important;padding-bottom:4px}body.iframe{min-width:620px}#filter-form{min-width:550px;white-space:nowrap;padding:20px 10px 10px 10px}#filter-form legend,#filter-form label{color:#666;vertical-align:middle}#filter-form li{border:0}#filter-form .col-sm-4,#filter-form .col-form-label{display:inline-block;min-width:100px;line-height:2.5}#filter-form inputtype=checkbox{margin:0}#filter-form .col-form-label+div{display:inline}#rules,#actions{margin-top:5px;padding:0;border-collapse:collapse}div.rulerow,div.actionrow{width:auto;padding:2px;white-space:nowrap;border:1px solid #fff;background-color:#eee}div.rulerow:hover,div.actionrow:hover{background-color:#d9ecf4;border:1px solid #bbd3da}div.rulerow table,div.actionrow table{padding:0;min-width:600px}#filter-form td{vertical-align:top}#filter-form div.flexbox{margin:0}td.advbutton{width:1%;overflow:hidden}td.advbutton a{display:block;padding-top:16px;height:6px;width:12px;text-decoration:none}td.advbutton a span{display:none}td.advbutton a.show{background:url(images/down_small.gif?v=8629.106) center no-repeat}td.advbutton a.hide{background:url(images/up_small.gif?v=c56c.106) center no-repeat}td.rowbuttons{text-align:right;white-space:nowrap;width:1%;padding-top:3px}td.rowactions{white-space:nowrap;width:1%;padding-top:2px}td.rowtargets{white-space:nowrap;width:98%;padding-left:3px;padding-top:2px}td.rowtargets>div{vertical-align:top;margin-top:2px}td.rowtargets div.adv{padding-top:3px;font-size:10px}td.rowtargets div.adv span.label{display:inline-block;padding-right:5px;min-width:70px}td.rowtargets div a{margin-left:10px}td.rowtargets div.adv input{margin-bottom:1px}input.disabled,input.disabled:hover{color:#999}input.error,textarea.error{background-color:#ffffc4}input.box,input.radio{border:0;margin-top:0}input.radio{vertical-align:middle}select.operator_selector{width:200px;vertical-align:top}td.rowtargets span,span.label{color:#666;font-size:10px;white-space:nowrap}td.rowtargets label{color:#000}#footer{padding-top:5px;width:100%}#footer .footerleft label{margin-left:40px;white-space:nowrap}.itemlist{line-height:25px}.itemlist input{vertical-align:middle}span.sieve.error{color:red;white-space:nowrap}#managesieve-tip{padding:3px;background-color:#eee}#filter-form a.button{margin:0;padding:0;border:0;border-radius:0}#filter-form a.button span{display:none}#filter-form a.button.add{background:url(images/add.png?v=a165.280) no-repeat;width:30px;height:20px;margin-right:4px;display:inline-block}#filter-form a.button.del{background:url(images/del.png?v=3c27.247) no-repeat;width:30px;height:20px;display:inline-block}#filter-form a.button.disabled{opacity:.35;filter:alpha(opacity=35);cursor:default}#filter-form select,#filter-form input,#filter-form textarea{vertical-align:middle;max-width:280px}#filter-form input.button{padding:4px 12px}fieldset{border:0;padding:0;margin-bottom:20px}fieldset>legend{display:block;font-size:14px;font-weight:700;padding-bottom:10px;margin-bottom:0}.listarea{border:1px solid #b2b2b2;border-radius:4px;box-shadow:inset 0 0 2px 1px rgba(0,0,0,.1);-webkit-box-shadow:inset 0 0 2px 1px rgba(0,0,0,.1);margin:0;padding:2px;display:inline-block;max-height:59px;overflow-y:auto;vertical-align:middle}td.rowtargets>span.listarea{vertical-align:top;margin-top:2px}.listelement{display:block;white-space:nowrap;background-color:#fff;border-top:1px solid #e2e2e2;height:14px;padding:0;margin:0;overflow:hidden;line-height:14px}.listarea.error .listelement{background-color:#ffffc4}.listelement:first-child{border-top:none}#vacationform .listelement input,#filter-form .listelement input{border:0;border-radius:0;box-shadow:none;outline:0;vertical-align:top;height:14px;padding-top:0;padding-bottom:0;line-height:14px;background-color:transparent}.listelement input:focus{box-shadow:none}.listelement .reset{display:inline-block;width:16px;height:16px;background:url(images/erase.png?v=3052.453) -1px -1px no-repeat #eee;cursor:pointer}body.iframe.mail{margin:0;padding:0}body.iframe.mail #filter-form{padding:10px 5px 5px 5px}#settings-sections .vacation a{background-image:url(images/vacation_icons.png?v=e738.767);background-repeat:no-repeat;background-position:7px 1px}#settings-sections .vacation.selected a{background-position:7px -23px}#managesieve-vacation,#managesieve-forward{position:absolute;top:0;left:212px;right:0;bottom:0;overflow:auto}#vacationform .listarea{max-height:91px}#vacationform td.vacation{white-space:nowrap}#vacationform input.button{margin-left:10px}.raweditor textarea{border:0;border-radius:0;max-width:none!important;box-shadow:none;font-family:monospace;width:99%;min-height:300px}.raweditor textarea,.raweditor .CodeMirror{position:absolute;top:34px;bottom:45px;right:0;left:0;height:auto;background-color:#fdfdfd;border-bottom:1px solid #eee}.raweditor .CodeMirror-linebackground.line-error{background-color:red;opacity:.4}.raweditor .errorGutter{width:.8em}.raweditor #footer{position:absolute;bottom:5px}body.iframe.raweditor{min-width:100px;overflow:hidden}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/managesieve_mail.css
Deleted
64
1
2
-ul.toolbarmenu li span.filterlink {
3
- background-position: 0 -2174px;
4
-}
5
-
6
-#sievefilterform {
7
- top: 0;
8
- bottom: 0;
9
- left: 0;
10
- right: 0;
11
- padding: 0;
12
- overflow: hidden;
13
-}
14
-
15
-#sievefilterform iframe {
16
- top: 0;
17
- bottom: 0;
18
- left: 0;
19
- right: 0;
20
- width: 100%;
21
- min-height: 100%; /* Chrome 14 bug */
22
- border: 0;
23
- padding: 0;
24
- margin: 0;
25
-}
26
-
27
-#sievefilterform ul {
28
- list-style: none;
29
- padding: 0;
30
- margin: 0;
31
- margin-top: 5px;
32
-}
33
-
34
-#sievefilterform fieldset {
35
- margin: 5px;
36
- border-radius: 4px;
37
-}
38
-
39
-#sievefilterform ul li {
40
- margin-bottom: 5px;
41
- white-space: nowrap;
42
-}
43
-
44
-#sievefilterform ul li input {
45
- margin-right: 5px;
46
-}
47
-
48
-#sievefilterform label {
49
- font-weight: bold;
50
-}
51
-
52
-#managesieve-tip
53
-{
54
- z-index: 100000;
55
- padding: 3px;
56
- background-color: #eee;
57
-}
58
-
59
-span.sieve.error
60
-{
61
- color: red;
62
- white-space: nowrap;
63
-}
64
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/managesieve_mail.min.css
Deleted
4
1
2
-ul.toolbarmenu li span.filterlink{background-position:0 -2174px}#sievefilterform{top:0;bottom:0;left:0;right:0;padding:0;overflow:hidden}#sievefilterform iframe{top:0;bottom:0;left:0;right:0;width:100%;min-height:100%;border:0;padding:0;margin:0}#sievefilterform ul{list-style:none;padding:0;margin:0;margin-top:5px}#sievefilterform fieldset{margin:5px;border-radius:4px}#sievefilterform ul li{margin-bottom:5px;white-space:nowrap}#sievefilterform ul li input{margin-right:5px}#sievefilterform label{font-weight:700}#managesieve-tip{z-index:100000;padding:3px;background-color:#eee}span.sieve.error{color:red;white-space:nowrap}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/templates
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/templates/filteredit.html
Deleted
31
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe<roundcube:exp expression="env:task != 'mail' ? ' floatingbuttons' : ' mail'" />">
8
-
9
-<roundcube:if condition="env:task != 'mail'" />
10
-<div id="filter-title" class="boxtitle"><roundcube:label name="managesieve.filterdef" /></div>
11
-<roundcube:endif />
12
-
13
-<div id="filter-form" class="boxcontent">
14
-<roundcube:object name="filterform" />
15
-
16
-<roundcube:if condition="env:task != 'mail'" />
17
-<div id="footer">
18
-<div class="footerleft formbuttons">
19
-<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
20
-</div>
21
-</div>
22
-<roundcube:endif />
23
-
24
-</form>
25
-</div>
26
-
27
-<roundcube:include file="/includes/footer.html" />
28
-
29
-</body>
30
-</html>
31
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/templates/forward.html
Deleted
33
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="noscroll">
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<div id="mainscreen" class="offset">
12
-
13
-<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="managesieve.forward" /></h1>
14
-
15
-<roundcube:include file="/includes/settingstabs.html" />
16
-
17
-<div id="managesieve-forward" class="uibox contentbox" role="main" aria-labelledby="aria-label-forwardform">
18
- <div>
19
- <h2 class="boxtitle" id="aria-label-forwardform"><roundcube:label name="managesieve.forward" /></h2>
20
- <roundcube:object name="forwardform" id="forwardform" class="propform boxcontent tabbed" />
21
- </div>
22
- <div class="footerleft formbuttons">
23
- <roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
24
- </div>
25
-</div>
26
-
27
-</div>
28
-
29
-<roundcube:include file="/includes/footer.html" />
30
-
31
-</body>
32
-</html>
33
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/templates/managesieve.html
Deleted
88
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="managesieve.filters" /></h1>
12
-
13
-<div id="mainscreen" class="offset">
14
-
15
-<roundcube:include file="/includes/settingstabs.html" />
16
-
17
-<div id="settings-right" role="main">
18
-<roundcube:if condition="!env:managesieve_no_set_list" />
19
-<div id="filtersetslistbox" class="uibox listbox" aria-labelledby="aria-label-filtersets">
20
-<h2 class="boxtitle" id="aria-label-filtersets"><roundcube:label name="managesieve.filtersets" /></h2>
21
-<div class="scroller withfooter">
22
- <roundcube:object name="filtersetslist" id="filtersetslist" class="listing" summary="managesieve.ariasummaryfiltersetslist" type="list" noheader="true" role="listbox" />
23
-</div>
24
-<div class="boxfooter">
25
- <roundcube:button command="plugin.managesieve-setadd" type="link" title="managesieve.filtersetadd" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="filtersetmenulink" id="filtersetmenulink" type="link" title="moreactions" class="listbutton groupactions" onclick="return UI.toggle_popup('filtersetmenu', event)" innerClass="inner" content="⚙" aria-haspopup="true" aria-expanded="false" aria-owns="filtersetmenu-menu" />
26
-</div>
27
-</div>
28
-<div id="filtersscreen">
29
-<roundcube:else />
30
-<div id="filtersscreen" class="nosetlist">
31
-<roundcube:endif />
32
-<div id="filterslistbox" class="uibox listbox" aria-labelledby="aria-label-filters">
33
-<h2 class="boxtitle" id="aria-label-filters"><roundcube:label name="managesieve.filters" /></h2>
34
-<div class="scroller withfooter">
35
- <roundcube:object name="filterslist" id="filterslist" class="listing" summary="managesieve.ariasummaryfilterslist" noheader="true" role="listbox" />
36
-</div>
37
-<div class="boxfooter">
38
- <roundcube:button command="plugin.managesieve-add" type="link" title="managesieve.filteradd" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="filtermenulink" id="filtermenulink" type="link" title="moreactions" class="listbutton groupactions" onclick="return UI.toggle_popup('filtermenu', event)" innerClass="inner" content="⚙" aria-haspopup="true" aria-expanded="false" aria-owns="filtermenu-menu" />
39
-</div>
40
-</div>
41
-
42
-<div id="filter-box" class="uibox contentbox">
43
- <div class="iframebox" role="complementary" aria-labelledby="aria-label-filterform">
44
- <h2 id="aria-label-filterframe" class="voice"><roundcube:label name="managesieve.arialabelfilterform" /></h2>
45
- <roundcube:object name="contentframe" id="filter-frame" style="width:100%; height:100%" frameborder="0" src="env:blankpage" title="managesieve.arialabelfilterform" />
46
- </div>
47
-</div>
48
-
49
-</div>
50
-</div>
51
-</div>
52
-
53
-<div id="filtersetmenu" class="popupmenu" aria-hidden="true">
54
- <h3 id="aria-label-setactions" class="voice"><roundcube:label name="managesieve.arialabelfiltersetactions" /></h3>
55
- <ul class="toolbarmenu" id="filtersetmenu-menu" role="menu" aria-labelledby="aria-label-setactions">
56
- <li role="menuitem"><roundcube:button type="link" command="plugin.managesieve-setact" label="managesieve.enable" classAct="active" /></li>
57
- <li role="menuitem"><roundcube:button type="link" command="plugin.managesieve-setdel" label="delete" classAct="active" /></li>
58
- <roundcube:if condition="env:raw_sieve_editor != false" />
59
- <li role="menuitem"><roundcube:button type="link" command="plugin.managesieve-seteditraw" label="managesieve.filterseteditraw" classAct="active" /></li>
60
- <roundcube:endif />
61
- <li role="menuitem" class="separator_above"><roundcube:button type="link" command="plugin.managesieve-setget" label="download" classAct="active" /></li>
62
- <roundcube:container name="filtersetoptions" id="filtersetmenu" />
63
- </ul>
64
-</div>
65
-
66
-<div id="filtermenu" class="popupmenu" aria-hidden="true">
67
- <h3 id="aria-label-filteractions" class="voice"><roundcube:label name="managesieve.arialabelfilteractions" /></h3>
68
- <ul class="toolbarmenu" id="filtermenu-menu" role="menu" aria-labelledby="aria-label-filteractions">
69
- <li role="menuitem"><roundcube:button type="link" command="plugin.managesieve-act" label="managesieve.enable" classAct="active" /></li>
70
- <li role="menuitem"><roundcube:button type="link" command="plugin.managesieve-del" label="delete" classAct="active" /></li>
71
- <roundcube:container name="filteroptions" id="filtermenu" />
72
- </ul>
73
-</div>
74
-
75
-<roundcube:include file="/includes/footer.html" />
76
-
77
-<script>
78
- <roundcube:if condition="!env:managesieve_no_set_list" />
79
- new rcube_splitter({ id:'managesievesplitter1', p1:'#filtersetslistbox', p2:'#filtersscreen',
80
- orientation:'v', relative:true, start:156, min:120, size:12 }).init();
81
- <roundcube:endif />
82
- new rcube_splitter({ id:'managesievesplitter2', p1:'#filterslistbox', p2:'#filter-box',
83
- orientation:'v', relative:true, start:186, min:120, size:12 }).init();
84
-</script>
85
-
86
-</body>
87
-</html>
88
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/templates/setedit.html
Deleted
25
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe floatingbuttons">
8
-
9
-<div id="filter-title" class="boxtitle"><roundcube:label name="managesieve.newfilterset" /></div>
10
-
11
-<div id="filter-form" class="boxcontent">
12
-<roundcube:object name="filtersetform" />
13
-
14
-<div id="footer">
15
-<div class="footerleft formbuttons floating">
16
-<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
17
-</div>
18
-</div>
19
-
20
-</form>
21
-</div>
22
-
23
-</body>
24
-</html>
25
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/templates/seteditraw.html
Deleted
25
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe raweditor">
8
-
9
-<div id="filtersetraw-title" class="boxtitle"><roundcube:label name="managesieve.filterseteditraw" /></div>
10
-
11
-<div id="filter-form" class="boxcontent">
12
-<roundcube:object name="filterseteditraw" />
13
-
14
-<div id="footer">
15
-<div class="footerleft formbuttons">
16
-<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
17
-</div>
18
-</div>
19
-
20
-</form>
21
-</div>
22
-
23
-</body>
24
-</html>
25
roundcubemail-1.6.tar.gz/skins/larry/plugins/managesieve/templates/vacation.html
Deleted
33
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="noscroll">
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<div id="mainscreen" class="offset">
12
-
13
-<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="managesieve.vacation" /></h1>
14
-
15
-<roundcube:include file="/includes/settingstabs.html" />
16
-
17
-<div id="managesieve-vacation" class="uibox contentbox" role="main" aria-labelledby="aria-label-vacationform">
18
- <div>
19
- <h2 class="boxtitle" id="aria-label-vacationform"><roundcube:label name="managesieve.vacation" /></h2>
20
- <roundcube:object name="vacationform" id="vacationform" class="propform boxcontent tabbed" />
21
- </div>
22
- <div class="footerleft formbuttons">
23
- <roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
24
- </div>
25
-</div>
26
-
27
-</div>
28
-
29
-<roundcube:include file="/includes/footer.html" />
30
-
31
-</body>
32
-</html>
33
roundcubemail-1.6.tar.gz/skins/larry/plugins/markasjunk
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/markasjunk/mail_toolbar.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/markasjunk/markasjunk.css
Deleted
34
1
2
-#messagetoolbar a.junk,
3
-#messagetoolbar a.notjunk
4
-{
5
- background-image: url(mail_toolbar.png);
6
-}
7
-
8
-#messagetoolbar a.junk
9
-{
10
- background-position: center -14px;
11
-}
12
-
13
-#messagetoolbar a.notjunk
14
-{
15
- background-position: center -61px;
16
-}
17
-
18
-ul.toolbarmenu li a.junk span.icon,
19
-ul.toolbarmenu li a.notjunk span.icon
20
-{
21
- background-image: url(messageactions.png) !important;
22
-}
23
-
24
-ul.toolbarmenu li a.junk span.icon
25
-{
26
- background-position: 1px -17px !important;
27
-}
28
-
29
-ul.toolbarmenu li a.notjunk span.icon
30
-{
31
- background-position: 1px 4px !important;
32
-}
33
\ No newline at end of file
34
roundcubemail-1.6.tar.gz/skins/larry/plugins/markasjunk/markasjunk.min.css
Deleted
4
1
2
-#messagetoolbar a.junk,#messagetoolbar a.notjunk{background-image:url(mail_toolbar.png?v=7cee.1014)}#messagetoolbar a.junk{background-position:center -14px}#messagetoolbar a.notjunk{background-position:center -61px}ul.toolbarmenu li a.junk span.icon,ul.toolbarmenu li a.notjunk span.icon{background-image:url(messageactions.png?v=b382.640)!important}ul.toolbarmenu li a.junk span.icon{background-position:1px -17px!important}ul.toolbarmenu li a.notjunk span.icon{background-position:1px 4px!important}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/plugins/markasjunk/messageactions.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/vcard_attachments
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/vcard_attachments/listicons.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/vcard_attachments/style.css
Deleted
39
1
2
-p.vcardattachment {
3
- margin: 8px;
4
- width: auto;
5
- background: #f9f9f9;
6
- border: 1px solid #d3d3d3;
7
- position: relative;
8
-}
9
-
10
-p.vcardattachment span {
11
- display: block;
12
- background: url(vcard_add_contact.png) 6px 2px no-repeat;
13
- line-height: 32px;
14
- padding: 0 60px 0 46px;
15
- white-space: nowrap;
16
- overflow: hidden;
17
- text-overflow: ellipsis;
18
-}
19
-
20
-p.vcardattachment button {
21
- position: absolute;
22
- right: 0;
23
- top: 0;
24
- margin: 5px;
25
-}
26
-
27
-a.listbutton.vcard .inner {
28
- background-position: center -2107px;
29
-}
30
-
31
-.messagelist tbody tr .attachment span.attachment.vcard {
32
- background: url(vcard.png) 0 center no-repeat;
33
-}
34
-
35
-ul.toolbarmenu li span.vcard {
36
- background: url(listicons.png) no-repeat 7px 0;
37
- background-position: 0 -3px;
38
-}
39
roundcubemail-1.6.tar.gz/skins/larry/plugins/vcard_attachments/style.min.css
Deleted
4
1
2
-p.vcardattachment{margin:8px;width:auto;background:#f9f9f9;border:1px solid #d3d3d3;position:relative}p.vcardattachment span{display:block;background:url(vcard_add_contact.png?v=3583.1859) 6px 2px no-repeat;line-height:32px;padding:0 60px 0 46px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}p.vcardattachment button{position:absolute;right:0;top:0;margin:5px}a.listbutton.vcard .inner{background-position:center -2107px}.messagelist tbody tr .attachment span.attachment.vcard{background:url(vcard.png?v=2f38.493) 0 center no-repeat}ul.toolbarmenu li span.vcard{background:url(listicons.png?v=df9a.432) no-repeat 7px 0;background-position:0 -3px}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/plugins/vcard_attachments/vcard.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/vcard_attachments/vcard_add_contact.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/plugins/zipdownload
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/plugins/zipdownload/zipdownload.css
Deleted
17
1
2
-/* Roundcube Zipdownload plugin styles for skin "Larry" */
3
-
4
-a.zipdownload {
5
- display: inline-block;
6
- margin-top: .5em;
7
- padding: 3px 5px 4px 5px;
8
-}
9
-
10
-@media screen and (max-width: 800px) {
11
- a.zipdownload {
12
- margin-top: .15em;
13
- margin-bottom: .2em;
14
- }
15
-}
16
\ No newline at end of file
17
roundcubemail-1.6.tar.gz/skins/larry/plugins/zipdownload/zipdownload.min.css
Deleted
4
1
2
-a.zipdownload{display:inline-block;margin-top:.5em;padding:3px 5px 4px 5px}@media screen and (max-width:800px){a.zipdownload{margin-top:.15em;margin-bottom:.2em}}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/print.css
Deleted
208
1
2
-/**
3
- * Roundcube webmail styles for message printing
4
- *
5
- * Copyright (c) The Roundcube Dev Team
6
- *
7
- * The contents are subject to the Creative Commons Attribution-ShareAlike
8
- * License. It is allowed to copy, distribute, transmit and to adapt the work
9
- * by keeping credits to the original autors in the README file.
10
- * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
11
- */
12
-body {
13
- font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
14
- background-color: #fff;
15
- color: #000;
16
- margin: 2mm;
17
-}
18
-
19
-body, td, th, div, p {
20
- font-size: 9pt;
21
- color: #000;
22
-}
23
-
24
-h3 {
25
- font-size: 18px;
26
- color: #000;
27
-}
28
-
29
-a, a:active, a:visited {
30
- color: #000;
31
-}
32
-
33
-#header {
34
- float: right;
35
- margin: 0 5mm 3mm 5mm;
36
-}
37
-
38
-table.headers-table {
39
- table-layout: fixed;
40
- margin-top: 14px;
41
-}
42
-
43
-table.headers-table tr td {
44
- font-size: 9pt;
45
- vertical-align: top;
46
-}
47
-
48
-table.headers-table td.header-title {
49
- color: #666;
50
- padding-right: 4mm;
51
- white-space: nowrap;
52
-}
53
-
54
-table.headers-table tr td.subject {
55
- font-weight: bold;
56
-}
57
-
58
-#attachment-list {
59
- margin-top: 2mm;
60
- padding-top: 2mm;
61
- border-top: 1pt solid #ccc;
62
-}
63
-
64
-#attachment-list li {
65
- font-size: 9pt;
66
-}
67
-
68
-#attachment-list li a {
69
- text-decoration: none;
70
-}
71
-
72
-#attachment-list li a:hover {
73
- text-decoration: underline;
74
-}
75
-
76
-#messagebody {
77
- position: relative;
78
- border-top: none;
79
-}
80
-
81
-div.message-part,
82
-div.message-htmlpart {
83
- padding: 2mm 1mm;
84
- margin-top: 2mm;
85
- margin-bottom: 5mm;
86
- border-top: 1pt solid #ccc;
87
-}
88
-
89
-div.message-part a {
90
- color: #00c;
91
-}
92
-
93
-div.message-part div.pre {
94
- margin: 0;
95
- padding: 0;
96
- font-family: monospace;
97
- font-size: 12px;
98
-}
99
-
100
-div.message-part blockquote {
101
- color: blue;
102
- border-left: 2px solid blue;
103
- border-right: 2px solid blue;
104
- background-color: #F6F6F6;
105
- margin: 2px 0;
106
- padding: 0 0.4em;
107
-}
108
-
109
-div.message-part blockquote blockquote {
110
- color: green;
111
- border-left: 2px solid green;
112
- border-right: 2px solid green;
113
-}
114
-
115
-div.message-part blockquote blockquote blockquote {
116
- color: #900;
117
- border-left: 2px solid #b00;
118
- border-right: 2px solid #b00;
119
-}
120
-
121
-p.image-attachment {
122
- position: relative;
123
- padding: 1em;
124
- border-top: 1px solid #ccc;
125
-}
126
-
127
-p.image-attachment a.image-link {
128
- float: left;
129
- display: block;
130
- margin-right: 2em;
131
- min-width: 160px;
132
- min-height: 60px;
133
- text-align: center;
134
-}
135
-
136
-p.image-attachment .image-filename {
137
- display: block;
138
- line-height: 1.6em;
139
-}
140
-
141
-p.image-attachment .attachment-links {
142
- display: none;
143
-}
144
-
145
-/* contact print */
146
-#contact-details fieldset {
147
- color: #666;
148
- border: 1px solid #999;
149
- margin-top: 5px;
150
-}
151
-
152
-#contact-details fieldset.contactfieldgroup {
153
- border: 0;
154
- padding: 0;
155
- margin: 0;
156
-}
157
-
158
-#contact-details div.row {
159
- padding: 2px 0;
160
-}
161
-
162
-#contact-details .contactfieldlabel {
163
- display: inline-block;
164
- vertical-align: top;
165
- width: 150px;
166
- overflow: hidden;
167
- text-overflow: ellipsis;
168
-}
169
-
170
-#contact-details .contactfieldcontent {
171
- display: inline-block;
172
- vertical-align: top;
173
- font-weight: bold;
174
-}
175
-
176
-#contact-details #contactphoto {
177
- float: left;
178
- margin: 5px 15px 5px 3px;
179
- width: 112px;
180
- border: 0;
181
- padding: 0;
182
-}
183
-
184
-#contact-details #contactpic {
185
- width: 112px;
186
- background: white;
187
-}
188
-
189
-#contact-details #contactpic img {
190
- max-width: 112px;
191
- visibility: inherit;
192
-}
193
-
194
-#contact-details #contacthead {
195
- border: 0;
196
- margin: 0 16em 0 0;
197
- padding: 0;
198
-}
199
-
200
-#contact-details #contacthead > legend {
201
- display: none;
202
-}
203
-
204
-#contact-details #contacthead .names span.namefield {
205
- font-size: 140%;
206
- font-weight: bold;
207
-}
208
roundcubemail-1.6.tar.gz/skins/larry/print.min.css
Deleted
4
1
2
-body{font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;background-color:#fff;color:#000;margin:2mm}body,td,th,div,p{font-size:9pt;color:#000}h3{font-size:18px;color:#000}a,a:active,a:visited{color:#000}#header{float:right;margin:0 5mm 3mm 5mm}table.headers-table{table-layout:fixed;margin-top:14px}table.headers-table tr td{font-size:9pt;vertical-align:top}table.headers-table td.header-title{color:#666;padding-right:4mm;white-space:nowrap}table.headers-table tr td.subject{font-weight:700}#attachment-list{margin-top:2mm;padding-top:2mm;border-top:1pt solid #ccc}#attachment-list li{font-size:9pt}#attachment-list li a{text-decoration:none}#attachment-list li a:hover{text-decoration:underline}#messagebody{position:relative;border-top:none}div.message-part,div.message-htmlpart{padding:2mm 1mm;margin-top:2mm;margin-bottom:5mm;border-top:1pt solid #ccc}div.message-part a{color:#00c}div.message-part div.pre{margin:0;padding:0;font-family:monospace;font-size:12px}div.message-part blockquote{color:#00f;border-left:2px solid #00f;border-right:2px solid #00f;background-color:#f6f6f6;margin:2px 0;padding:0 .4em}div.message-part blockquote blockquote{color:green;border-left:2px solid green;border-right:2px solid green}div.message-part blockquote blockquote blockquote{color:#900;border-left:2px solid #b00;border-right:2px solid #b00}p.image-attachment{position:relative;padding:1em;border-top:1px solid #ccc}p.image-attachment a.image-link{float:left;display:block;margin-right:2em;min-width:160px;min-height:60px;text-align:center}p.image-attachment .image-filename{display:block;line-height:1.6em}p.image-attachment .attachment-links{display:none}#contact-details fieldset{color:#666;border:1px solid #999;margin-top:5px}#contact-details fieldset.contactfieldgroup{border:0;padding:0;margin:0}#contact-details div.row{padding:2px 0}#contact-details .contactfieldlabel{display:inline-block;vertical-align:top;width:150px;overflow:hidden;text-overflow:ellipsis}#contact-details .contactfieldcontent{display:inline-block;vertical-align:top;font-weight:700}#contact-details #contactphoto{float:left;margin:5px 15px 5px 3px;width:112px;border:0;padding:0}#contact-details #contactpic{width:112px;background:#fff}#contact-details #contactpic img{max-width:112px;visibility:inherit}#contact-details #contacthead{border:0;margin:0 16em 0 0;padding:0}#contact-details #contacthead>legend{display:none}#contact-details #contacthead .names span.namefield{font-size:140%;font-weight:700}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/settings.css
Deleted
396
1
2
-/**
3
- * Roundcube webmail styles for the Settings section
4
- *
5
- * Copyright (c) The Roundcube Dev Team
6
- * Screendesign by FLINT / Büro für Gestaltung, bueroflint.com
7
- *
8
- * The contents are subject to the Creative Commons Attribution-ShareAlike
9
- * License. It is allowed to copy, distribute, transmit and to adapt the work
10
- * by keeping credits to the original autors in the README file.
11
- * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
12
- */
13
-
14
-#settings-sections {
15
- position: absolute;
16
- top: 0;
17
- left: 0;
18
- width: 200px;
19
- bottom: 0;
20
-}
21
-
22
-#pluginbody,
23
-#settings-right {
24
- position: absolute;
25
- top: 0;
26
- left: 212px;
27
- right: 0;
28
- bottom: 0;
29
-}
30
-
31
-#sectionslist {
32
- position: absolute;
33
- top: 0;
34
- left: 0;
35
- width: 260px;
36
- bottom: 0;
37
-}
38
-
39
-#preferences-box {
40
- position: absolute;
41
- top: 0;
42
- left: 272px;
43
- right: 0;
44
- bottom: 0;
45
-}
46
-
47
-#preferences-frame {
48
- border: 0;
49
- border-radius: 4px;
50
-}
51
-
52
-#preferences-details fieldset.advanced legend {
53
- position: relative;
54
- display: block;
55
- width: 100%;
56
- cursor: pointer;
57
-}
58
-
59
-#preferences-details fieldset.advanced .propform {
60
- display: none;
61
-}
62
-
63
-#preferences-details fieldset.advanced .advanced-toggle {
64
- position: absolute;
65
- display: block;
66
- top: 0px;
67
- right: 6px;
68
- text-decoration: none;
69
- color: #666;
70
- font-size: 11px;
71
- width: 20px;
72
- height: 18px;
73
- background: url('images/listicons.png') 0 -1157px no-repeat;
74
- text-indent: -5000px;
75
- overflow: hidden;
76
-}
77
-
78
-#preferences-details fieldset.advanced .collapsed .advanced-toggle {
79
- background-position: -24px -1137px;
80
-}
81
-
82
-#preferences-details .identity-encryption-block {
83
- background-color: #eee;
84
- padding: 8px 10px;
85
-}
86
-
87
-#preferences-details .identity-encryption-block ul.keylist {
88
- list-style: none;
89
- margin: 8px 0 12px 0;
90
-}
91
-
92
-#preferences-details .identity-encryption-block ul.keylist {
93
- display: block;
94
- padding: 4px 10px 4px 0;
95
-}
96
-
97
-#sections-table tbody td,
98
-#sections-table .listitem span,
99
-#settings-sections .listitem a,
100
-#settings-sections .tablink a {
101
- padding-left: 36px;
102
- background-image: url(images/listicons.png);
103
- background-position: -100px 0;
104
- background-repeat: no-repeat;
105
-}
106
-
107
-/* note: support span.tablink because this is used by plugins */
108
-#settings-sections .listitem a,
109
-#settings-sections .tablink a {
110
- background-position: 6px -862px;
111
-}
112
-
113
-#settings-sections .selected a,
114
-#settings-sections .tablink.selected a {
115
- background-position: 6px -887px;
116
-}
117
-
118
-#settings-sections .preferences a {
119
- background-position: 6px -431px;
120
-}
121
-
122
-#settings-sections .preferences.selected a {
123
- background-position: 6px -455px;
124
-}
125
-
126
-#settings-sections .folders a {
127
- background-position: 6px 2px;
128
-}
129
-
130
-#settings-sections .folders.selected a {
131
- background-position: 6px -22px;
132
-}
133
-
134
-#sections-table #rcmrowfolders .section {
135
- background-position: 4px 2px;
136
-}
137
-
138
-#sections-table #rcmrowfolders.selected .section {
139
- background-position: 4px -22px;
140
-}
141
-
142
-#settings-sections .identities a {
143
- background-position: 6px -478px;
144
-}
145
-
146
-#settings-sections .identities.selected a {
147
- background-position: 6px -502px;
148
-}
149
-
150
-#settings-sections .filter a {
151
- background-position: 6px -1746px;
152
-}
153
-
154
-#settings-sections .filter.selected a {
155
- background-position: 6px -1770px;
156
-}
157
-
158
-#settings-sections .password a {
159
- background-position: 6px -1795px;
160
-}
161
-
162
-#settings-sections .password.selected a {
163
- background-position: 6px -1819px;
164
-}
165
-
166
-#settings-sections .responses a {
167
- background-position: 6px -1972px;
168
-}
169
-
170
-#settings-sections .responses.selected a {
171
- background-position: 6px -1996px;
172
-}
173
-
174
-#sections-table #rcmrowgeneral .section {
175
- background-position: 4px -573px;
176
-}
177
-
178
-#sections-table #rcmrowgeneral.selected .section {
179
- background-position: 4px -598px;
180
-}
181
-
182
-#sections-table #rcmrowmailbox .section {
183
- background-position: 4px -621px;
184
-}
185
-
186
-#sections-table #rcmrowmailbox.selected .section {
187
- background-position: 4px -646px;
188
-}
189
-
190
-#sections-table #rcmrowcompose .section {
191
- background-position: 4px -670px;
192
-}
193
-
194
-#sections-table #rcmrowcompose.selected .section {
195
- background-position: 4px -695px;
196
-}
197
-
198
-#sections-table #rcmrowmailview .section {
199
- background-position: 4px -718px;
200
-}
201
-
202
-#sections-table #rcmrowmailview.selected .section {
203
- background-position: 4px -742px;
204
-}
205
-
206
-#sections-table #rcmrowaddressbook .section {
207
- background-position: 4px -766px;
208
-}
209
-
210
-#sections-table #rcmrowaddressbook.selected .section {
211
- background-position: 4px -791px;
212
-}
213
-
214
-#sections-table #rcmrowserver .section {
215
- background-position: 4px -814px;
216
-}
217
-
218
-#sections-table #rcmrowserver.selected .section {
219
- background-position: 4px -838px;
220
-}
221
-
222
-#sections-table #rcmrowcalendar .section {
223
- background-position: 4px -526px;
224
-}
225
-
226
-#sections-table #rcmrowcalendar.selected .section {
227
- background-position: 4px -550px;
228
-}
229
-
230
-#sections-table #rcmrowencryption .section {
231
- background-position: 7px -2437px;
232
-}
233
-
234
-#sections-table #rcmrowencryption.selected .section {
235
- background-position: 7px -2461px;
236
-}
237
-
238
-#folderslist .boxtitle a.iconbutton.search {
239
- background-position: -2px -317px;
240
- cursor: pointer;
241
- position: absolute;
242
- right: 8px;
243
- top: 8px;
244
- width: 16px;
245
-}
246
-
247
-#folderslist .listsearchbox + .scroller {
248
- top: 34px;
249
-}
250
-
251
-.listsearchbox select {
252
- width: 100%;
253
- margin: 0 0 4px 0;
254
-}
255
-
256
-#folderslist,
257
-#identitieslist,
258
-#responseslist {
259
- position: absolute;
260
- top: 0;
261
- left: 0;
262
- width: 260px;
263
- bottom: 0;
264
-}
265
-
266
-#identities-table,
267
-#responses-table {
268
- width: 100%;
269
- table-layout: fixed;
270
-}
271
-
272
-#identities-table tbody td.mail {
273
- width: 100%;
274
- overflow: hidden;
275
- text-overflow: ellipsis;
276
-}
277
-
278
-#identities-table tbody tr.readonly td {
279
- font-style: italic;
280
-}
281
-
282
-#folder-details,
283
-#identity-details,
284
-#response-details {
285
- position: absolute;
286
- top: 0;
287
- left: 272px;
288
- right: 0;
289
- bottom: 0;
290
-}
291
-
292
-#subscription-table li.root {
293
- font-size: 5%;
294
- line-height: 5px;
295
- height: 5px;
296
- padding: 2px;
297
-}
298
-
299
-#subscription-table li input {
300
- position: absolute;
301
- right: 8px;
302
- top: 4px;
303
- margin-right: 0;
304
-}
305
-
306
-#subscription-table li a {
307
- padding-right: 28px;
308
-}
309
-
310
-.skinselection {
311
- display: block;
312
-}
313
-
314
-.skinselection span {
315
- display: inline-block;
316
- vertical-align: middle;
317
- padding-right: 1em;
318
-}
319
-
320
-.skinselection .skinname {
321
- font-weight: bold;
322
-}
323
-
324
-.skinselection .skinlicense,
325
-.skinselection .skinlicense a {
326
- font-style: italic;
327
- color: #666;
328
- text-decoration: none;
329
-}
330
-
331
-.skinselection .skinlicense a:hover {
332
- text-decoration: underline;
333
-}
334
-
335
-img.skinthumbnail {
336
- width: 64px;
337
- height: 64px;
338
- border: 1px solid #ccc;
339
- background: #fff;
340
- border-radius: 4px;
341
-}
342
-
343
-#pluginlist td.version {
344
- width: 5em;
345
-}
346
-
347
-.webkit #pluginlist td.version {
348
- width: 6em;
349
-}
350
-
351
-#pluginlist td.license,
352
-#pluginlist td.source {
353
- width: 8em;
354
-}
355
-
356
-.webkit #pluginlist td.license,
357
-.webkit #pluginlist td.source {
358
- width: 9em;
359
-}
360
-
361
-#rcmfd_signature {
362
- width: 99%;
363
- min-width: 390px;
364
- font-family: monospace;
365
-}
366
-
367
-#rcmfd_signature_toolbar1 td,
368
-#rcmfd_signature_toolbar2 td {
369
- width: auto;
370
-}
371
-
372
-.mailtoprotohandler-status {
373
- padding-left: 1em;
374
- font-style: italic;
375
-}
376
-
377
-#pluginlist {
378
- table-layout: auto;
379
-}
380
-
381
-#pluginlist th.version {
382
- width: 1%;
383
-}
384
-
385
-.readtext {
386
- width: 45em;
387
- padding: 12px;
388
- font-size: 12px;
389
-}
390
-
391
-.readtext > h1,
392
-.readtext > h2,
393
-.readtext > h3 {
394
- margin-top: 0;
395
-}
396
roundcubemail-1.6.tar.gz/skins/larry/settings.min.css
Deleted
4
1
2
-#settings-sections{position:absolute;top:0;left:0;width:200px;bottom:0}#pluginbody,#settings-right{position:absolute;top:0;left:212px;right:0;bottom:0}#sectionslist{position:absolute;top:0;left:0;width:260px;bottom:0}#preferences-box{position:absolute;top:0;left:272px;right:0;bottom:0}#preferences-frame{border:0;border-radius:4px}#preferences-details fieldset.advanced legend{position:relative;display:block;width:100%;cursor:pointer}#preferences-details fieldset.advanced .propform{display:none}#preferences-details fieldset.advanced .advanced-toggle{position:absolute;display:block;top:0;right:6px;text-decoration:none;color:#666;font-size:11px;width:20px;height:18px;background:url(images/listicons.png?v=ce39.10766) 0 -1157px no-repeat;text-indent:-5000px;overflow:hidden}#preferences-details fieldset.advanced .collapsed .advanced-toggle{background-position:-24px -1137px}#preferences-details .identity-encryption-block{background-color:#eee;padding:8px 10px}#preferences-details .identity-encryption-block ul.keylist{list-style:none;margin:8px 0 12px 0}#preferences-details .identity-encryption-block ul.keylist{display:block;padding:4px 10px 4px 0}#sections-table tbody td,#sections-table .listitem span,#settings-sections .listitem a,#settings-sections .tablink a{padding-left:36px;background-image:url(images/listicons.png?v=ce39.10766);background-position:-100px 0;background-repeat:no-repeat}#settings-sections .listitem a,#settings-sections .tablink a{background-position:6px -862px}#settings-sections .selected a,#settings-sections .tablink.selected a{background-position:6px -887px}#settings-sections .preferences a{background-position:6px -431px}#settings-sections .preferences.selected a{background-position:6px -455px}#settings-sections .folders a{background-position:6px 2px}#settings-sections .folders.selected a{background-position:6px -22px}#sections-table #rcmrowfolders .section{background-position:4px 2px}#sections-table #rcmrowfolders.selected .section{background-position:4px -22px}#settings-sections .identities a{background-position:6px -478px}#settings-sections .identities.selected a{background-position:6px -502px}#settings-sections .filter a{background-position:6px -1746px}#settings-sections .filter.selected a{background-position:6px -1770px}#settings-sections .password a{background-position:6px -1795px}#settings-sections .password.selected a{background-position:6px -1819px}#settings-sections .responses a{background-position:6px -1972px}#settings-sections .responses.selected a{background-position:6px -1996px}#sections-table #rcmrowgeneral .section{background-position:4px -573px}#sections-table #rcmrowgeneral.selected .section{background-position:4px -598px}#sections-table #rcmrowmailbox .section{background-position:4px -621px}#sections-table #rcmrowmailbox.selected .section{background-position:4px -646px}#sections-table #rcmrowcompose .section{background-position:4px -670px}#sections-table #rcmrowcompose.selected .section{background-position:4px -695px}#sections-table #rcmrowmailview .section{background-position:4px -718px}#sections-table #rcmrowmailview.selected .section{background-position:4px -742px}#sections-table #rcmrowaddressbook .section{background-position:4px -766px}#sections-table #rcmrowaddressbook.selected .section{background-position:4px -791px}#sections-table #rcmrowserver .section{background-position:4px -814px}#sections-table #rcmrowserver.selected .section{background-position:4px -838px}#sections-table #rcmrowcalendar .section{background-position:4px -526px}#sections-table #rcmrowcalendar.selected .section{background-position:4px -550px}#sections-table #rcmrowencryption .section{background-position:7px -2437px}#sections-table #rcmrowencryption.selected .section{background-position:7px -2461px}#folderslist .boxtitle a.iconbutton.search{background-position:-2px -317px;cursor:pointer;position:absolute;right:8px;top:8px;width:16px}#folderslist .listsearchbox+.scroller{top:34px}.listsearchbox select{width:100%;margin:0 0 4px 0}#folderslist,#identitieslist,#responseslist{position:absolute;top:0;left:0;width:260px;bottom:0}#identities-table,#responses-table{width:100%;table-layout:fixed}#identities-table tbody td.mail{width:100%;overflow:hidden;text-overflow:ellipsis}#identities-table tbody tr.readonly td{font-style:italic}#folder-details,#identity-details,#response-details{position:absolute;top:0;left:272px;right:0;bottom:0}#subscription-table li.root{font-size:5%;line-height:5px;height:5px;padding:2px}#subscription-table li input{position:absolute;right:8px;top:4px;margin-right:0}#subscription-table li a{padding-right:28px}.skinselection{display:block}.skinselection span{display:inline-block;vertical-align:middle;padding-right:1em}.skinselection .skinname{font-weight:700}.skinselection .skinlicense,.skinselection .skinlicense a{font-style:italic;color:#666;text-decoration:none}.skinselection .skinlicense a:hover{text-decoration:underline}img.skinthumbnail{width:64px;height:64px;border:1px solid #ccc;background:#fff;border-radius:4px}#pluginlist td.version{width:5em}.webkit #pluginlist td.version{width:6em}#pluginlist td.license,#pluginlist td.source{width:8em}.webkit #pluginlist td.license,.webkit #pluginlist td.source{width:9em}#rcmfd_signature{width:99%;min-width:390px;font-family:monospace}#rcmfd_signature_toolbar1 td,#rcmfd_signature_toolbar2 td{width:auto}.mailtoprotohandler-status{padding-left:1em;font-style:italic}#pluginlist{table-layout:auto}#pluginlist th.version{width:1%}.readtext{width:45em;padding:12px;font-size:12px}.readtext>h1,.readtext>h2,.readtext>h3{margin-top:0}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/styles.css
Deleted
3202
1
2
-/**
3
- * Roundcube webmail styles for skin "Larry"
4
- *
5
- * Copyright (c) The Roundcube Dev Team
6
- * Screendesign by FLINT / Büro für Gestaltung, bueroflint.com
7
- *
8
- * The contents are subject to the Creative Commons Attribution-ShareAlike
9
- * License. It is allowed to copy, distribute, transmit and to adapt the work
10
- * by keeping credits to the original autors in the README file.
11
- * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
12
- */
13
-
14
-body {
15
- font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
16
- font-size: 11px;
17
- color: #333;
18
- background: #cad2d9;
19
- margin: 0;
20
-}
21
-
22
-body.noscroll {
23
- /* also avoids bounce effect in Chrome and Safari */
24
- overflow: hidden;
25
-}
26
-
27
-.iphone body.noscroll {
28
- /* revert on iPhone (#1490551) */
29
- overflow: auto;
30
-}
31
-
32
-a {
33
- color: #0069a6;
34
-}
35
-
36
-a:visited {
37
- color: #0186ba;
38
-}
39
-
40
-img {
41
- border: 0;
42
-}
43
-
44
-.voice {
45
- position: absolute;
46
- border: 0;
47
- clip: rect(0 0 0 0);
48
- width: 1px;
49
- height: 1px;
50
- margin: -1px;
51
- padding: 0;
52
- overflow: hidden;
53
-}
54
-
55
-input,
56
-textarea,
57
-select,
58
-button {
59
- font-family: inherit;
60
- font-size: inherit;
61
- vertical-align: middle;
62
-}
63
-
64
-inputtype="text",
65
-inputtype="email",
66
-inputtype="password",
67
-textarea {
68
- margin: 0; /* Safari by default adds a margin */
69
- padding: 4px;
70
- border: 1px solid #b2b2b2;
71
- border-radius: 4px;
72
-}
73
-
74
-inputtype="text":focus,
75
-inputtype="email":focus,
76
-inputtype="password":focus,
77
-button:focus,
78
-input.button:focus,
79
-textarea:focus {
80
- border-color: #4787b1;
81
- box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
82
- outline: none;
83
-}
84
-
85
-inputtype="text":required,
86
-inputtype="email":required,
87
-inputtype="password":required {
88
- border-color: #4787b1;
89
-}
90
-
91
-input.placeholder,
92
-textarea.placeholder {
93
- color: #aaa;
94
-}
95
-
96
-.bold {
97
- font-weight: bold;
98
-}
99
-
100
-/* fixes vertical alignment of checkboxes and labels */
101
-label input + span {
102
- vertical-align: middle;
103
-}
104
-
105
-.noselect {
106
- user-select: none;
107
- -moz-user-select: none;
108
- -khtml-user-select: none;
109
- -ms-user-select: none;
110
- -webkit-user-select: none;
111
-}
112
-
113
-li > .input-group {
114
- display: inline;
115
-}
116
-
117
-/*** buttons ***/
118
-
119
-button,
120
-input.button {
121
- display: inline-block;
122
- margin: 0 2px;
123
- padding: 4px 8px;
124
- color: #525252;
125
- border: 1px solid #c0c0c0;
126
- border-radius: 4px;
127
- background: #f7f7f7;
128
- text-decoration: none;
129
- outline: none;
130
-}
131
-
132
-.formbuttons button,
133
-.formbuttons input.button,
134
-.oauthlogin .button {
135
- color: #ddd;
136
- font-size: 110%;
137
- padding: 4px 12px;
138
- border-color: #465864;
139
- border-radius: 5px;
140
- background: #666666;
141
- box-shadow: 0 1px 1px 0 #ccc;
142
-}
143
-
144
-.formbuttons button:hover,
145
-.formbuttons button:focus,
146
-.formbuttons input.button:hover,
147
-.formbuttons input.button:focus,
148
-input.button.mainaction:hover,
149
-input.button.mainaction:focus {
150
- color: #f2f2f2;
151
- border-color: #465864;
152
- box-shadow: 0 0 5px 2px rgba(71,135,177, 0.6);
153
-}
154
-
155
-.formbuttons button:active,
156
-.formbuttons input.button:active {
157
- color: #fff;
158
- background: #5f5f5f;
159
-}
160
-
161
-button.mainaction,
162
-input.button.mainaction {
163
- color: #ededed;
164
- border-color: #1f262c;
165
- background: #2c2f33;
166
-}
167
-
168
-button.mainaction:active,
169
-input.button.mainaction:active {
170
- color: #fff;
171
- background: #515151;
172
- background: -moz-linear-gradient(top, #2a2e31 0%, #505050 100%);
173
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2a2e31), color-stop(100%,#505050));
174
- background: -ms-linear-gradient(top, #2a2e31 0%, #505050 100%);
175
- background: linear-gradient(to bottom, #2a2e31 0%, #505050 100%);
176
-}
177
-
178
-buttondisabled,
179
-buttondisabled:hover,
180
-input.buttondisabled,
181
-input.buttondisabled:hover,
182
-input.button.mainactiondisabled {
183
- color: #aaa !important;
184
-}
185
-
186
-button.mainaction,
187
-input.mainaction {
188
- font-weight: bold !important;
189
-}
190
-
191
-button:not(:disabled) {
192
- cursor: pointer;
193
-}
194
-
195
-form.smart-upload,
196
-input.smart-upload {
197
- visibility: hidden;
198
- width: 1px;
199
- height: 1px;
200
- opacity: 0;
201
-}
202
-
203
-/** link buttons **/
204
-
205
-a.button,
206
-.buttongroup {
207
- display: inline-block;
208
- margin: 0 2px;
209
- padding: 2px 5px;
210
- color: #525252;
211
- border: 1px solid #c6c6c6;
212
- border-radius: 4px;
213
- background: #e6e6e6;
214
- text-decoration: none;
215
-}
216
-
217
-.buttongroup {
218
- padding: 0;
219
- white-space: nowrap;
220
-}
221
-
222
-button:focus,
223
-a.button:focus,
224
-input.button:focus {
225
- border-color: #017db6;
226
- box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
227
- outline: none;
228
-}
229
-
230
-label.disabled,
231
-button.disabled,
232
-a.button.disabled {
233
- color: #999;
234
-}
235
-
236
-a.button.disabled,
237
-input.button.disabled,
238
-input.buttondisabled,
239
-button.disabled,
240
-buttondisabled,
241
-button.disabled:hover,
242
-buttondisabled:hover,
243
-a.button.disabled:hover,
244
-input.button.disabled:hover,
245
-input.buttondisabled:hover {
246
- border-color: #c6c6c6;
247
-}
248
-
249
-.buttongroup a.button {
250
- margin: 0;
251
- border-width: 0 1px 0 0;
252
- border-radius: 0;
253
- background: none;
254
-}
255
-
256
-.buttongroup a.button.first,
257
-.buttongroup a.button:first-child {
258
- border-radius: 4px 0 0 4px;
259
- border-left: 0;
260
-}
261
-
262
-.buttongroup a.button.last,
263
-.buttongroup a.button:last-child {
264
- border-radius: 0 4px 4px 0;
265
- border-right: 0;
266
-}
267
-
268
-a.button.pressed,
269
-a.button:active,
270
-button:active,
271
-input.button:active {
272
- background: #f7f7f7;
273
-}
274
-
275
-.pagenav.dark a.button {
276
- font-weight: bold;
277
- border: 0;
278
- background: transparent;
279
- margin: 0;
280
-}
281
-
282
-.pagenav.dark a.button.pressed {
283
- background: #d8d8d8;
284
-}
285
-
286
-.buttongroup a.button.selected,
287
-.buttongroup a.button.selected:hover {
288
- background: #8a8a8a;
289
- border-right-color: #8a8a8a;
290
- border-left-color: #555;
291
-}
292
-
293
-.buttongroup a.button:focus,
294
-.buttongroup a.button.selected:focus {
295
- background: #f2f2f2;
296
- background: -moz-linear-gradient(top, #49b3d2 0, #66bcd9 100%);
297
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0,#49b3d2), color-stop(100%,#66bcd9));
298
- background: -ms-linear-gradient(top, #49b3d2 0, #66bcd9 100%);
299
- background: linear-gradient(to bottom, #49b3d2 0, #66bcd9 100%);
300
-}
301
-
302
-.pagenav a.button {
303
- padding: 1px 3px;
304
- height: 16px;
305
- vertical-align: middle;
306
- margin-bottom: 1px;
307
-}
308
-
309
-.pagenav .buttongroup a.button,
310
-.pagenav .buttongroup a.button:hover {
311
- padding: 1px 5px;
312
- margin-bottom: 0;
313
-}
314
-
315
-a.button span.icon,
316
-.pagenav a.button span.inner {
317
- display: inline-block;
318
- width: 16px;
319
- height: 13px;
320
- text-indent: 1000px;
321
- overflow: hidden;
322
- background: url(images/buttons.png) -6px -211px no-repeat;
323
-}
324
-
325
-a.button.prevpage span.icon,
326
-.pagenav a.prevpage span.inner {
327
- background-position: -7px -226px;
328
-}
329
-
330
-a.button.nextpage span.icon,
331
-.pagenav a.nextpage span.inner {
332
- background-position: -28px -226px;
333
-}
334
-
335
-a.button.lastpage span.icon,
336
-.pagenav a.lastpage span.inner {
337
- background-position: -28px -211px;
338
-}
339
-
340
-a.button.pageup span.icon,
341
-.pagenav a.pageup span.inner {
342
- background-position: -7px -241px;
343
-}
344
-
345
-a.button.pagedown span.icon,
346
-.pagenav a.pagedown span.inner {
347
- background-position: -29px -241px;
348
-}
349
-
350
-a.button.reply span.icon,
351
-.pagenav a.reply span.inner {
352
- background-position: -7px -256px;
353
-}
354
-
355
-a.button.forward span.icon,
356
-.pagenav a.forward span.inner {
357
- background-position: -29px -256px;
358
-}
359
-
360
-a.button.replyall span.icon,
361
-.pagenav a.replyall span.inner {
362
- background-position: -7px -271px;
363
-}
364
-
365
-a.button.extwin span.icon,
366
-.pagenav a.extwin span.inner {
367
- background-position: -29px -271px;
368
-}
369
-
370
-a.button.changeformat.html span.icon,
371
-.pagenav a.changeformat.html span.inner {
372
- background-position: -7px -1859px;
373
-}
374
-a.button.changeformat.html.selected span.icon,
375
-.pagenav a.changeformat.html.selected span.inner {
376
- background-position: -29px -1859px;
377
-}
378
-
379
-a.button.changeformat.text span.icon,
380
-.pagenav a.changeformat.text span.inner {
381
- background-position: -7px -1874px;
382
-}
383
-a.button.changeformat.text.selected span.icon,
384
-.pagenav a.changeformat.text.selected span.inner {
385
- background-position: -29px -1874px;
386
-}
387
-
388
-a.button.add span.icon {
389
- background-position: -7px -2009px;
390
-}
391
-
392
-a.button.delete span.icon {
393
- background-position: -29px -2009px;
394
-}
395
-
396
-.pagenav .countdisplay {
397
- display: inline-block;
398
- padding: 3px 1em 0 1em;
399
- min-width: 16em;
400
-}
401
-
402
-.pagenavbuttons {
403
- position: relative;
404
- top: -2px;
405
-}
406
-
407
-.pagenav .pagejumper {
408
- text-align: center;
409
- padding: 3px 0;
410
- cursor: default;
411
-}
412
-
413
-a.iconbutton {
414
- display: inline-block;
415
- width: 20px;
416
- height: 18px;
417
- text-decoration: none;
418
- text-indent: -5000px;
419
- background: url(images/buttons.png) -1000px 0 no-repeat;
420
-}
421
-
422
-a.iconbutton.disabled {
423
- opacity: 0.4;
424
- cursor: default;
425
-}
426
-
427
-a.iconbutton.searchicon,
428
-a.iconbutton.searchoptions {
429
- width: 24px;
430
- background-position: -2px -317px;
431
-}
432
-
433
-a.iconbutton.searchicon {
434
- width: 15px;
435
-}
436
-
437
-a.iconbutton.reset {
438
- width: 24px;
439
- background-position: -25px -317px;
440
-}
441
-
442
-a.iconbutton.remove,
443
-a.iconbutton.cancel {
444
- background-position: -7px -378px;
445
-}
446
-
447
-a.iconbutton.delete {
448
- background-position: -7px -338px;
449
-}
450
-
451
-a.iconbutton.add {
452
- background-position: -7px -358px;
453
-}
454
-
455
-a.iconbutton.remove {
456
- background-position: -7px -379px;
457
-}
458
-
459
-a.iconbutton.cancel {
460
- background-position: -7px -398px;
461
-}
462
-
463
-a.iconbutton.edit {
464
- background-position: -7px -418px;
465
-}
466
-
467
-a.iconbutton.upload {
468
- background-position: -6px -438px;
469
-}
470
-
471
-
472
-a.iconlink {
473
- display: inline-block;
474
- color: #888;
475
- text-decoration: none;
476
- white-space: nowrap;
477
- padding: 2px 8px 2px 20px;
478
- background: url(images/buttons.png) -1000px 0 no-repeat;
479
-}
480
-
481
-a.iconlink:hover {
482
- text-decoration: underline;
483
-}
484
-
485
-a.iconlink.delete {
486
- background-position: -7px -337px;
487
-}
488
-
489
-a.iconlink.add {
490
- background-position: -7px -357px;
491
-}
492
-
493
-a.iconlink.remove {
494
- background-position: -7px -378px;
495
-}
496
-
497
-a.iconlink.cancel {
498
- background-position: -7px -397px;
499
-}
500
-
501
-a.iconlink.edit {
502
- background-position: -7px -417px;
503
-}
504
-
505
-a.iconlink.upload {
506
- background-position: -6px -437px;
507
-}
508
-
509
-
510
-/*** message bar ***/
511
-
512
-#message div.loading,
513
-#message div.uploading,
514
-#message div.warning,
515
-#message div.error,
516
-#message div.notice,
517
-#message div.confirmation,
518
-#message-objects div.notice {
519
- color: #555;
520
- font-weight: bold;
521
- padding: 6px 30px 6px 25px;
522
- display: inline-block;
523
- white-space: nowrap;
524
- background: url(images/messages.png) 0 5px no-repeat;
525
- cursor: default;
526
-}
527
-
528
-#message div.warning {
529
- color: #960;
530
- background-position: 0 -86px;
531
-}
532
-
533
-#message div.error {
534
- color: #cf2734;
535
- background-position: 0 -57px;
536
-}
537
-
538
-#message div.confirmation {
539
- color: #093;
540
- background-position: 0 -25px;
541
-}
542
-
543
-#message div.loading {
544
- background: url(images/ajaxloader.gif) 2px 6px no-repeat;
545
-}
546
-
547
-#message div a,
548
-#message div span {
549
- padding-right: 0.5em;
550
- text-decoration: none;
551
-}
552
-
553
-#message div a:hover {
554
- text-decoration: underline;
555
- cursor: pointer;
556
-}
557
-
558
-#message.statusbar {
559
- display: none;
560
- position: absolute;
561
- bottom: 0;
562
- left: 0;
563
- right: 0;
564
- height: 27px;
565
- padding-left: 8px;
566
- border-top: 1px solid #ddd;
567
- border-radius: 0 0 4px 4px;
568
- background: #eaeaea;
569
- background: -moz-linear-gradient(top, #eaeaea 0%, #c8c8c8 100%);
570
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eaeaea), color-stop(100%,#c8c8c8));
571
- background: -ms-linear-gradient(top, #eaeaea 0%, #c8c8c8 100%);
572
- background: linear-gradient(to bottom, #eaeaea 0%, #c8c8c8 100%);
573
- white-space: nowrap;
574
- overflow: hidden;
575
- text-overflow: ellipsis;
576
-}
577
-
578
-#messagestack {
579
- position: absolute;
580
- bottom: 20px;
581
- right: 12px;
582
- z-index: 50000;
583
- width: auto;
584
- height: auto;
585
- max-height: 85%;
586
- overflow-y: auto;
587
- padding: 2px;
588
-}
589
-
590
-#messagestack div {
591
- display: block;
592
- position: relative;
593
- width: 280px;
594
- height: auto;
595
- min-height: 16px;
596
- margin: 3px 2px 5px 2px;
597
- padding: 8px 10px 7px 30px;
598
- cursor: default;
599
- font-size: 12px;
600
- font-weight: bold;
601
- border-radius: 4px;
602
- border: 1px solid #444;
603
- color: #ebebeb;
604
-
605
- background: rgba(64,64,64,0.85);
606
- background: -moz-linear-gradient(top, rgba(64,64,64,0.85) 0%, rgba(48,48,48,0.9) 100%);
607
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(64,64,64,0.85)), color-stop(100%,rgba(48,48,48,0.9)));
608
- background: -webkit-linear-gradient(top, rgba(64,64,64,0.85) 0%, rgba(48,48,48,0.85) 100%);
609
- background: -ms-linear-gradient(top, rgba(64,64,64,0.85) 0%, rgba(48,48,48,0.85) 100%);
610
- background: linear-gradient(to bottom, rgba(64,64,64,0.85) 0%, rgba(48,48,48,0.85) 100%);
611
-}
612
-
613
-#messagestack div:after {
614
- content: "";
615
- position: absolute;
616
- display: block;
617
- top: 0;
618
- left: 4px;
619
- width: 20px;
620
- height: 24px;
621
- background: url(images/messages_dark.png) 0 7px no-repeat;
622
-}
623
-
624
-#messagestack div.error {
625
- color: #ff615d;
626
-}
627
-
628
-#messagestack div.error:after {
629
- background-position: 0 -55px;
630
-}
631
-
632
-#messagestack div.warning {
633
- color: #f4bf0e;
634
-}
635
-
636
-#messagestack div.warning:after {
637
- background-position: 0 -84px;
638
-}
639
-
640
-#messagestack div.confirmation {
641
- color: #00e05a;
642
-}
643
-
644
-#messagestack div.confirmation:after {
645
- background-position: 0 -25px;
646
-}
647
-
648
-#messagestack div.uploading,
649
-#messagestack div.loading {
650
- color: #ddd;
651
-}
652
-
653
-#messagestack div.uploading:after,
654
-#messagestack div.loading:after {
655
- top: 4px;
656
- left: 6px;
657
- background: url(images/ajaxloader_dark.gif) 0 4px no-repeat;
658
-}
659
-
660
-#messagestack div.voice {
661
- position: absolute;
662
- top: -1000px;
663
-}
664
-
665
-#messagestack div a {
666
- color: #94c0da;
667
-}
668
-
669
-#messagestack div a:hover {
670
- text-decoration: underline;
671
- cursor: pointer;
672
-}
673
-
674
-.ui-dialog.error .ui-dialog-title,
675
-.ui-dialog.warning .ui-dialog-title,
676
-.ui-dialog.confirmation .ui-dialog-title {
677
- padding-left: 25px;
678
- background: url(images/messages.png) 0 5px no-repeat;
679
-}
680
-
681
-.ui-dialog.warning .ui-dialog-title {
682
- color: #960;
683
- background-position: 0 -91px;
684
-}
685
-
686
-.ui-dialog.error .ui-dialog-title {
687
- color: #cf2734;
688
- background-position: 0 -62px;
689
-}
690
-
691
-.ui-dialog.confirmation .ui-dialog-title {
692
- color: #093;
693
- background-position: 0 -32px;
694
-}
695
-
696
-.ui-autocomplete {
697
- max-height: 160px;
698
- overflow-x: hidden;
699
- overflow-y: auto;
700
-}
701
-
702
-
703
-/*** basic page layout ***/
704
-
705
-#header {
706
- overflow-x: hidden; /* Chrome bug #1488851 */
707
-}
708
-
709
-#topline {
710
- height: 18px;
711
- background-color: #333333;
712
- border-bottom: 1px solid #383838;
713
- padding: 2px 0 2px 10px;
714
- color: #aaa;
715
- text-align: center;
716
-}
717
-
718
-#topnav {
719
- position: relative;
720
- height: 46px;
721
- margin-bottom: 10px;
722
- padding: 0 0 0 10px;
723
- background: #1c1c1c;
724
-}
725
-
726
-#topline a,
727
-#topnav a {
728
- color: #eee;
729
- text-decoration: none;
730
-}
731
-
732
-#topline a:hover {
733
- text-decoration: underline;
734
-}
735
-
736
-#toplogo {
737
- padding-top: 2px;
738
- cursor: pointer;
739
- border: none;
740
-}
741
-
742
-.topleft {
743
- float: left;
744
-}
745
-
746
-.topright {
747
- float: right;
748
-}
749
-
750
-.closelink {
751
- display: inline-block;
752
- padding: 2px 10px 2px 20px;
753
-}
754
-
755
-#topline span.username {
756
- padding-right: 1em;
757
-}
758
-
759
-#topline .topleft a {
760
- display: inline-block;
761
- padding: 2px 0.8em 0 0;
762
- color: #aaa;
763
-}
764
-
765
-#topline a.button-logout {
766
- display: inline-block;
767
- padding: 2px 10px 2px 20px;
768
- background: url(images/buttons.png) -6px -193px no-repeat;
769
- color: #fff;
770
-}
771
-
772
-#taskbar .button-logout {
773
- display: none;
774
-}
775
-
776
-#taskbar a.button-logout span.button-inner {
777
- background-position: -2px -1791px;
778
-}
779
-
780
-#taskbar a.button-logout:hover span.button-inner {
781
- background-position: -2px -1829px;
782
-}
783
-
784
-
785
-/*** minimal version of the page header ***/
786
-
787
-.minimal #topline {
788
- position: fixed;
789
- top: -18px;
790
- background: #444;
791
- z-index: 5000;
792
- width: 100%;
793
- height: 22px;
794
- -moz-box-sizing: border-box;
795
- box-sizing: border-box;
796
-}
797
-
798
-.minimal #topline:hover {
799
- top: 0px;
800
- opacity: 0.94;
801
- -webkit-transition: top 0.3s ease-in-out;
802
- -moz-transition: top 0.3s ease-in-out;
803
- transition: top 0.3s ease-in-out;
804
-}
805
-
806
-.extwin #topline,
807
-.extwin #topline:hover {
808
- position: static;
809
- top: 0px;
810
- height: 18px;
811
- width: auto;
812
- -moz-box-sizing: content-box;
813
- box-sizing: content-box;
814
- opacity: 0.999;
815
-}
816
-
817
-.minimal #topline a.button-logout {
818
- display: none;
819
-}
820
-
821
-.minimal #topline span.username {
822
- display: inline-block;
823
- padding-top: 2px;
824
-}
825
-
826
-.minimal #topnav {
827
- position: relative;
828
- top: 4px;
829
- height: 42px;
830
-}
831
-
832
-.minimal #taskbar a {
833
- position: relative;
834
- padding: 10px 10px 0 6px;
835
- height: 32px;
836
-}
837
-
838
-.minimal #taskbar .button-logout {
839
- display: inline-block;
840
-}
841
-
842
-.minimal #taskbar .button-inner {
843
- top: -4px;
844
- padding: 0;
845
- height: 24px !important;
846
- width: 27px;
847
- text-indent: -5000px;
848
-}
849
-
850
-#taskbar .tooltip {
851
- display: none;
852
-}
853
-
854
-.minimal #taskbar .tooltip {
855
- position: absolute;
856
- top: -500px;
857
- right: 2px;
858
- display: inline-block;
859
- padding: 2px 8px 3px 8px;
860
- background: #444;
861
- color: #eee;
862
- font-weight: bold;
863
- white-space: nowrap;
864
- box-shadow: 0 1px 4px 0 #333;
865
- z-index: 200;
866
- white-space: nowrap;
867
-}
868
-
869
-.minimal #taskbar .tooltip:after {
870
- content: "";
871
- position: absolute;
872
- top: -4px;
873
- right: 15px;
874
- border-style: solid;
875
- border-width: 0 4px 4px;
876
- border-color: #444 transparent;
877
- /* reduce the damage in FF3.0 */
878
- display: block;
879
- width: 0;
880
- z-index: 251;
881
-}
882
-
883
-.minimal #taskbar a:hover .tooltip {
884
- display: block;
885
- top: 39px;
886
-}
887
-
888
-
889
-/*** taskbar ***/
890
-
891
-#taskbar {
892
- position: relative;
893
- padding-right: 18px;
894
-}
895
-
896
-#taskbar a {
897
- display: inline-block;
898
- height: 34px;
899
- padding: 12px 10px 0 6px;
900
-}
901
-
902
-#taskbar a span.button-inner {
903
- display: inline-block;
904
- font-size: 110%;
905
- font-weight: normal;
906
- padding: 5px 0 0 34px;
907
- height: 19px;
908
- background: url(images/buttons.png) -1000px 0 no-repeat;
909
-}
910
-
911
-#taskbar a:focus {
912
- color: #fff;
913
- background-color: rgba(73,180,210,0.7);
914
- outline: none;
915
-}
916
-
917
-#taskbar a.button-selected {
918
- color: #20a6fb;
919
- background-color: #2c2c2c;
920
-}
921
-
922
-#taskbar a.button-mail span.button-inner {
923
- background-position: 0 2px;
924
-}
925
-
926
-#taskbar a.button-mail:hover span.button-inner,
927
-#taskbar a.button-mail.button-selected span.button-inner {
928
- background-position: 0 -22px;
929
-}
930
-
931
-#taskbar a.button-addressbook span.button-inner {
932
- background-position: 0 -48px;
933
-}
934
-
935
-#taskbar a.button-addressbook:hover span.button-inner,
936
-#taskbar a.button-addressbook.button-selected span.button-inner {
937
- background-position: 0 -72px;
938
-}
939
-
940
-#taskbar a.button-settings span.button-inner {
941
- background-position: 0 -96px;
942
-}
943
-
944
-#taskbar a.button-settings:hover span.button-inner,
945
-#taskbar a.button-settings.button-selected span.button-inner {
946
- background-position: 0 -120px;
947
-}
948
-
949
-#taskbar a.button-calendar span.button-inner {
950
- background-position: 0 -144px;
951
-}
952
-
953
-#taskbar a.button-calendar:hover span.button-inner,
954
-#taskbar a.button-calendar.button-selected span.button-inner {
955
- background-position: 0 -168px;
956
-}
957
-
958
-#taskbar .minmodetoggle {
959
- position: absolute;
960
- top: 0;
961
- right: 0;
962
- display: block;
963
- width: 19px;
964
- height: 46px;
965
- cursor: pointer;
966
- background: url(images/buttons.png) -35px -1778px no-repeat;
967
-}
968
-
969
-.minimal #taskbar .minmodetoggle {
970
- height: 42px;
971
- background-position: -35px -1820px;
972
-}
973
-
974
-#mainscreen {
975
- position: absolute;
976
- top: 88px;
977
- left: 10px;
978
- right: 10px;
979
- bottom: 20px;
980
-}
981
-
982
-#mainscreencontent {
983
- position: absolute;
984
- top: 42px;
985
- left: 0;
986
- right: 0;
987
- bottom: 0;
988
-}
989
-
990
-#mainscreen.offset {
991
- top: 132px;
992
-}
993
-
994
-#mainscreen .offset {
995
- top: 42px;
996
-}
997
-
998
-.minimal #mainscreen {
999
- top: 62px;
1000
-}
1001
-
1002
-.minimal #mainscreen.offset {
1003
- top: 102px;
1004
-}
1005
-
1006
-.extwin #mainscreen {
1007
- top: 40px;
1008
-}
1009
-
1010
-.extwin #mainscreen.offset {
1011
- top: 86px;
1012
-}
1013
-
1014
-.uibox {
1015
- border: 1px solid #b2b8bf;
1016
- border-radius: 4px;
1017
- overflow: hidden;
1018
- background: #fff;
1019
-}
1020
-
1021
-.minwidth {
1022
- min-width: 1024px;
1023
-}
1024
-
1025
-.scroller {
1026
- overflow: auto;
1027
-}
1028
-
1029
-.watermark {
1030
- background-image: url(images/watermark.jpg);
1031
- background-position: center;
1032
- background-repeat: no-repeat;
1033
-}
1034
-
1035
-/* fix scrolling within iframes in webkit browsers on touch devices */
1036
-@media screen and (-webkit-min-device-pixel-ratio:0) and (max-device-width:1024px) {
1037
- .iframebox {
1038
- overflow: auto;
1039
- -webkit-overflow-scrolling: touch;
1040
- }
1041
-}
1042
-
1043
-
1044
-/*** lists ***/
1045
-
1046
-.listbox {
1047
- background: #d9ecf4;
1048
- overflow: hidden;
1049
-}
1050
-
1051
-.listbox .scroller {
1052
- position: absolute;
1053
- top: 0;
1054
- left: 0;
1055
- width: 100%;
1056
- bottom: 0;
1057
- overflow-x: hidden;
1058
- overflow-y: auto;
1059
-}
1060
-
1061
-.listbox .scroller.withfooter {
1062
- bottom: 42px;
1063
-}
1064
-
1065
-.listbox .boxtitle + .scroller {
1066
- top: 34px;
1067
-}
1068
-
1069
-.boxtitle,
1070
-.uibox .listing thead th,
1071
-.uibox .listing thead td {
1072
- font-size: 12px;
1073
- font-weight: bold;
1074
- padding: 7px 8px 6px 8px;
1075
- line-height: 20px;
1076
- margin: 0;
1077
- border-bottom: 1px solid #bbd3da;
1078
- white-space: nowrap;
1079
-}
1080
-
1081
-.uibox .listing thead th,
1082
-.uibox .listing thead td {
1083
- padding-bottom: 8px;
1084
- height: auto;
1085
-}
1086
-
1087
-.uibox .boxtitle,
1088
-.uibox .listing thead th,
1089
-.uibox .listing thead td {
1090
- background: #b0ccd7;
1091
- color: #004458;
1092
-}
1093
-
1094
-.listbox .listitem,
1095
-.listbox .tablink,
1096
-.listing tbody td,
1097
-.listing li {
1098
- display: block;
1099
- border-bottom: 1px solid #bbd3da;
1100
- cursor: default;
1101
- font-weight: normal;
1102
-}
1103
-
1104
-.listbox .listitem a,
1105
-.listbox .listitem span,
1106
-.listbox .tablink a,
1107
-.listing tbody td,
1108
-.listing li a {
1109
- display: block;
1110
- color: #376572;
1111
- text-decoration: none;
1112
- cursor: default;
1113
- padding: 5px 8px;
1114
- line-height: 17px;
1115
- height: 17px;
1116
- white-space: nowrap;
1117
-}
1118
-
1119
-.listing tbody td {
1120
- display: table-cell;
1121
- min-height: 14px;
1122
- outline: none;
1123
-}
1124
-
1125
-.listing tbody td a {
1126
- color: #376572;
1127
- text-decoration: none;
1128
-}
1129
-
1130
-.webkit .listing tbody td {
1131
- height: 14px;
1132
-}
1133
-
1134
-/* This padding-left minus the focused padding left should be half of the focused border-left */
1135
-.listing thead tr td:first-child,
1136
-.listing tbody tr td:first-child {
1137
- border-left: 2px solid transparent;
1138
- padding-left: 6px;
1139
-}
1140
-
1141
-.listing.iconized thead tr td:first-child,
1142
-.listing.iconized tbody tr td:first-child {
1143
- padding-left: 34px;
1144
-}
1145
-
1146
-/* because of border-collapse, we make the left border twice what we want it to be - half will be hidden to the left */
1147
-.listing.focus tbody tr.focused > td:first-child {
1148
- border-left: 2px solid #739da8;
1149
-}
1150
-
1151
-.listbox .listitem.selected,
1152
-.listbox .tablink.selected,
1153
-.listbox .listitem.selected > a,
1154
-.listbox .tablink.selected > a,
1155
-.listing tbody tr.selected td,
1156
-.listing li.selected,
1157
-.listing li.selected > a {
1158
- color: #004458;
1159
- font-weight: bold;
1160
- background-color: #c7e3ef;
1161
-}
1162
-
1163
-ul.listing {
1164
- display: block;
1165
- list-style: none;
1166
- margin: 0;
1167
- padding: 0;
1168
-}
1169
-
1170
-ul.listing li {
1171
- background-color: #d9ecf4;
1172
- overflow: hidden;
1173
- text-overflow: ellipsis;
1174
- white-space: nowrap;
1175
-}
1176
-
1177
-ul.listing li ul {
1178
- border-top: 1px solid #bbd3da;
1179
-}
1180
-
1181
-ul.listing li.droptarget,
1182
-table.listing tr.droptarget td {
1183
- background-color: #e8e798;
1184
-}
1185
-
1186
-.listbox table.listing {
1187
- background-color: #d9ecf4;
1188
-}
1189
-
1190
-table.listing,
1191
-table.layout {
1192
- border: 0;
1193
- width: 100%;
1194
- border-spacing: 0;
1195
-}
1196
-
1197
-table.layout td {
1198
- vertical-align: top;
1199
-}
1200
-
1201
-ul.treelist li {
1202
- position: relative;
1203
-}
1204
-
1205
-ul.treelist li ul {
1206
- margin: 0;
1207
- padding: 0;
1208
-}
1209
-
1210
-ul.treelist li ul li:last-child {
1211
- border-bottom: 0;
1212
-}
1213
-
1214
-ul.treelist li a {
1215
- display: block;
1216
- padding-left: 20px;
1217
- overflow: hidden;
1218
- text-overflow: ellipsis;
1219
-}
1220
-
1221
-ul.treelist li a:focus,
1222
-ul.listing .listitem a:focus,
1223
-ul.listing .listitem span:focus,
1224
-ul.listing.focus .listitem.focused span {
1225
- color: #fff !important;
1226
- background-color: rgba(73,180,210,0.6);
1227
- outline: none;
1228
-}
1229
-
1230
-ul.treelist ul li a {
1231
- padding-left: 38px;
1232
-}
1233
-
1234
-ul.treelist ul ul li a {
1235
- padding-left: 54px;
1236
-}
1237
-
1238
-ul.treelist.iconized li a {
1239
- padding-left: 36px;
1240
-}
1241
-
1242
-ul.treelist.iconized ul li a {
1243
- padding-left: 62px;
1244
-}
1245
-
1246
-ul.treelist.iconized ul ul li a {
1247
- padding-left: 88px;
1248
-}
1249
-
1250
-ul.treelist.iconized ul ul ul li a {
1251
- padding-left: 114px;
1252
-}
1253
-
1254
-ul.treelist li div.treetoggle {
1255
- position: absolute;
1256
- top: 7px;
1257
- left: 4px;
1258
- width: 13px;
1259
- height: 13px;
1260
- background: url(images/listicons.png) -3px -144px no-repeat;
1261
- cursor: pointer;
1262
-}
1263
-
1264
-ul.treelist li ul li div.treetoggle {
1265
- left: 22px;
1266
-}
1267
-
1268
-ul.treelist.iconized li div.treetoggle {
1269
- top: 13px;
1270
- left: 19px;
1271
-}
1272
-
1273
-ul.treelist.iconized ul li div.treetoggle {
1274
- left: 45px;
1275
-}
1276
-
1277
-ul.treelist.iconized ul ul li div.treetoggle {
1278
- left: 71px;
1279
-}
1280
-
1281
-ul.treelist li div.treetoggle.expanded {
1282
- background-position: -3px -168px;
1283
-}
1284
-
1285
-ul.treelist li.selected > div.collapsed {
1286
- background-position: -23px -144px;
1287
-}
1288
-
1289
-ul.treelist li.selected > div.expanded {
1290
- background-position: -23px -168px;
1291
-}
1292
-
1293
-.listbox .boxfooter {
1294
- position: absolute;
1295
- bottom: 0;
1296
- left: 0;
1297
- width: 100%;
1298
- height: 42px;
1299
- border-top: 1px solid #bbd3da;
1300
- background: #d9ecf4;
1301
- white-space: nowrap;
1302
- overflow: hidden;
1303
-}
1304
-
1305
-.uibox .boxfooter {
1306
- border-radius: 0 0 4px 4px;
1307
-}
1308
-
1309
-.boxfooter .listbutton {
1310
- display: inline-block;
1311
- text-decoration: none;
1312
- width: 48px;
1313
- border-right: 1px solid #fff;
1314
- background: #c7e3ef;
1315
- padding: 3px 0;
1316
- margin-top: 1px;
1317
-}
1318
-
1319
-.boxfooter a.listbutton:focus {
1320
- color: #fff;
1321
- background-color: rgba(73,180,210,0.6);
1322
- outline: none;
1323
-}
1324
-
1325
-.uibox .boxfooter .listbutton:first-child {
1326
- border-radius: 0 0 0 4px;
1327
-}
1328
-
1329
-.boxfooter .listbutton .inner {
1330
- display: inline-block;
1331
- width: 48px;
1332
- height: 35px;
1333
- text-indent: -5000px;
1334
- background-image: url(images/buttons.png);
1335
- background-position: -1000px 0;
1336
- background-repeat: no-repeat;
1337
-}
1338
-
1339
-.boxfooter .listbutton.add .inner {
1340
- background-position: 10px -1301px;
1341
-}
1342
-
1343
-.boxfooter .listbutton.delete .inner {
1344
- background-position: 10px -1342px;
1345
-}
1346
-
1347
-.boxfooter .listbutton.groupactions .inner {
1348
- background-position: 5px -1382px;
1349
-}
1350
-
1351
-.boxfooter .listbutton.addto .inner {
1352
- background-position: 5px -1422px;
1353
-}
1354
-
1355
-.boxfooter .listbutton.addcc .inner {
1356
- background-position: 5px -1462px;
1357
-}
1358
-
1359
-.boxfooter .listbutton.addbcc {
1360
- width: 54px;
1361
-}
1362
-
1363
-.boxfooter .listbutton.addbcc .inner {
1364
- width: 54px;
1365
- background-position: 2px -1502px;
1366
-}
1367
-
1368
-.boxfooter .listbutton.removegroup .inner {
1369
- background-position: 5px -1540px;
1370
-}
1371
-
1372
-.boxfooter .listbutton.disabled .inner {
1373
- opacity: 0.4;
1374
-}
1375
-
1376
-.boxfooter .countdisplay {
1377
- display: inline-block;
1378
- position: relative;
1379
- top: 10px;
1380
- color: #69929e;
1381
- padding: 3px 6px;
1382
-}
1383
-
1384
-.boxpagenav {
1385
- position: absolute;
1386
- top: 10px;
1387
- right: 6px;
1388
- width: auto;
1389
-}
1390
-
1391
-.boxpagenav a.icon {
1392
- display: inline-block;
1393
- padding: 1px 3px;
1394
- height: 13px;
1395
- width: 14px;
1396
- text-indent: 1000px;
1397
- vertical-align: bottom;
1398
- overflow: hidden;
1399
- background: url(images/buttons.png) -4px -286px no-repeat;
1400
-}
1401
-
1402
-.boxpagenav a.icon.prevpage {
1403
- background-position: -4px -301px;
1404
-}
1405
-
1406
-.boxpagenav a.icon.nextpage {
1407
- background-position: -28px -301px;
1408
-}
1409
-
1410
-.boxpagenav a.icon.lastpage {
1411
- background-position: -28px -286px;
1412
-}
1413
-
1414
-.boxpagenav a.icon.disabled {
1415
- opacity: 0.4;
1416
-}
1417
-
1418
-.centerbox {
1419
- width: 40em;
1420
- margin: 16px auto;
1421
-}
1422
-
1423
-.errorbox {
1424
- width: 40em;
1425
- padding: 20px;
1426
-}
1427
-
1428
-.errorbox h3 {
1429
- font-size: 16px;
1430
- margin-top: 0;
1431
-}
1432
-
1433
-
1434
-/*** Records table ***/
1435
-
1436
-table.records-table {
1437
- display: table;
1438
- width: 100%;
1439
- table-layout: fixed;
1440
- border-spacing: 0;
1441
- border: 1px solid #bbd3da;
1442
-}
1443
-
1444
-.boxlistcontent .records-table {
1445
- border: 0;
1446
-}
1447
-
1448
-.records-table thead th,
1449
-.records-table thead td {
1450
- color: #69939e;
1451
- font-size: 11px;
1452
- font-weight: bold;
1453
- background: #d6eaf3;
1454
- border-left: 1px solid #bbd3da;
1455
- padding: 8px 7px;
1456
- overflow: hidden;
1457
- text-overflow: ellipsis;
1458
- text-align: left;
1459
-}
1460
-
1461
-.records-table.sortheader thead th,
1462
-.records-table.sortheader thead td {
1463
- padding: 0;
1464
-}
1465
-
1466
-.records-table thead th a,
1467
-.records-table thead td a,
1468
-.records-table thead th span,
1469
-.records-table thead td span {
1470
- display: block;
1471
- padding: 7px 7px;
1472
- color: #69939e;
1473
- text-decoration: none;
1474
- overflow: hidden;
1475
- text-overflow: ellipsis;
1476
-}
1477
-
1478
-.records-table thead th a:focus,
1479
-.records-table thead td a:focus {
1480
- color: #fff;
1481
- background-color: rgba(73,180,210,0.7);
1482
- outline: none;
1483
-}
1484
-
1485
-.records-table tbody td {
1486
- padding: 2px 7px;
1487
- border-bottom: 1px solid #ddd;
1488
- border-left: 1px dotted #bbd3da;
1489
- white-space: nowrap;
1490
- cursor: default;
1491
- overflow: hidden;
1492
- text-overflow: ellipsis;
1493
- background-color: #fff;
1494
- outline: none;
1495
-}
1496
-
1497
-/* This padding-left minus the focused padding left should be half of the focused border-left */
1498
-.records-table thead tr th:first-child,
1499
-.records-table thead tr td:first-child,
1500
-.records-table tbody tr td:first-child {
1501
- border-left: 2px solid transparent;
1502
- padding-left: 4px;
1503
-}
1504
-
1505
-/* because of border-collapse, we make the left border twice what we want it to be - half will be hidden to the left */
1506
-.records-table.focus tbody tr.focused > td:first-child {
1507
- border-left: 2px solid #49b3d2;
1508
-}
1509
-
1510
-.records-table tr.selected td {
1511
- color: #fff !important;
1512
- background-color: #4db0d2;
1513
-}
1514
-
1515
-.records-table.focus tr.selected td {
1516
- background-color: #017db6 !important;
1517
-}
1518
-
1519
-.records-table tr.selected td a,
1520
-.records-table tr.selected td span {
1521
- color: #fff !important;
1522
-}
1523
-
1524
-.records-table tr.deleted td,
1525
-.records-table tr.deleted td a {
1526
- color: #ccc !important;
1527
-}
1528
-
1529
-/*** iFrames ***/
1530
-
1531
-#aboutframe {
1532
- width: 97%;
1533
- height: 100%;
1534
- border: 0;
1535
- padding: 0;
1536
-}
1537
-
1538
-body.iframe {
1539
- background: #fff;
1540
- margin: 38px 0 10px 0;
1541
-}
1542
-
1543
-body.iframe.error {
1544
- background: #ededed;
1545
-}
1546
-
1547
-body.iframe.floatingbuttons {
1548
- margin-bottom: 40px;
1549
-}
1550
-
1551
-body.iframe.fullheight {
1552
- margin: 0;
1553
-}
1554
-
1555
-.contentbox .boxtitle,
1556
-body.iframe .boxtitle {
1557
- color: #777;
1558
- background: #efefef;
1559
- border-bottom: 1px solid #d0d0d0;
1560
-}
1561
-
1562
-body.iframe .boxtitle {
1563
- position: fixed;
1564
- top: 0;
1565
- left: 0;
1566
- width: 100%;
1567
- z-index: 100;
1568
-}
1569
-
1570
-body.iframe .footerleft.floating,
1571
-#composeview-bottom .formbuttons.floating {
1572
- position: fixed;
1573
- left: 0;
1574
- bottom: 0;
1575
- width: 100%;
1576
- z-index: 110;
1577
- background: #fff;
1578
- padding-top: 8px;
1579
- padding-bottom: 12px;
1580
-}
1581
-
1582
-body.iframe .footerleft.floating:before,
1583
-#composeview-bottom .formbuttons.floating:before {
1584
- content: " ";
1585
- position: absolute;
1586
- top: -6px;
1587
- left: 0;
1588
- width: 100%;
1589
- height: 6px;
1590
- background: url(images/overflowshadow.png) top center no-repeat;
1591
-}
1592
-
1593
-.boxcontent {
1594
- padding: 10px;
1595
-}
1596
-
1597
-.boxcontent .boxwarning {
1598
- margin: 0 0 10px;
1599
- display: block;
1600
- color: #960;
1601
- border: 1px solid #ffdf0e;
1602
- background: url(images/messages.png) #fef893 5px -85px no-repeat;
1603
- padding: 6px 12px 6px 30px;
1604
-}
1605
-
1606
-.boxcontent .boxinformation {
1607
- margin: 0 0 10px;
1608
- display: block;
1609
- color: #444;
1610
- border: 1px solid #888;
1611
- background: url(images/messages.png) #ddd 5px 4px no-repeat;
1612
- padding: 6px 12px 6px 30px;
1613
-}
1614
-
1615
-.contentbox .scroller {
1616
- position: absolute;
1617
- top: 34px;
1618
- left: 0;
1619
- right: 0;
1620
- bottom: 0px;
1621
- overflow: auto;
1622
-}
1623
-
1624
-.iframebox {
1625
- position: absolute;
1626
- top: 0;
1627
- left: 0;
1628
- right: 0;
1629
- bottom: 0px;
1630
-}
1631
-
1632
-.footerleft {
1633
- padding: 0 12px 4px 12px;
1634
-}
1635
-
1636
-.propform fieldset {
1637
- margin-bottom: 20px;
1638
- border: 0;
1639
- padding: 0;
1640
-}
1641
-
1642
-.propform fieldset legend {
1643
- display: block;
1644
- font-size: 14px;
1645
- font-weight: bold;
1646
- padding-bottom: 10px;
1647
- margin-bottom: 0;
1648
-}
1649
-
1650
-.propform fieldset fieldset legend {
1651
- color: #666;
1652
- font-size: 12px;
1653
-}
1654
-
1655
-.propform div.prop {
1656
- margin-bottom: 0.5em;
1657
-}
1658
-
1659
-.propform div.prop.block label {
1660
- display: block;
1661
- margin-bottom: 0.3em;
1662
-}
1663
-
1664
-.propform div.prop.block input,
1665
-.propform div.prop.block textarea {
1666
- width: 95%;
1667
-}
1668
-
1669
-.propform a.disabled {
1670
- color: #999;
1671
- text-decoration: none;
1672
- cursor: default;
1673
-}
1674
-
1675
-fieldset.floating {
1676
- float: left;
1677
- margin-right: 10px;
1678
- margin-bottom: 10px;
1679
-}
1680
-
1681
-table.propform {
1682
- width: 100%;
1683
- border-spacing: 0;
1684
- border-collapse: collapse;
1685
-}
1686
-
1687
-ul.proplist li,
1688
-table.propform td {
1689
- width: 80%;
1690
- padding: 4px 10px;
1691
- background: #eee;
1692
- border-bottom: 2px solid #fff;
1693
-}
1694
-
1695
-table.propform td.title {
1696
- width: 20%;
1697
- color: #333;
1698
- padding-right: 20px;
1699
- white-space: nowrap;
1700
-}
1701
-
1702
-ul.proplist {
1703
- list-style: none;
1704
- margin: 0;
1705
- padding: 0;
1706
-}
1707
-
1708
-ul.proplist li {
1709
- width: auto;
1710
-}
1711
-
1712
-ul.proplist.simplelist li {
1713
- border: 0;
1714
- background: transparent;
1715
-}
1716
-
1717
-#pluginbody {
1718
- position: absolute;
1719
- top: 0;
1720
- left: 0;
1721
- right: 0;
1722
- bottom: 0;
1723
-}
1724
-
1725
-.formcontent input,
1726
-.formcontent textarea {
1727
- width: 95%;
1728
-}
1729
-
1730
-.formcontent .hint {
1731
- font-style: italic;
1732
- margin-bottom: 1em;
1733
-}
1734
-
1735
-/*** Login form ***/
1736
-
1737
-#login-form {
1738
- position: relative;
1739
- width: 580px;
1740
- margin: 20ex auto 2ex auto;
1741
-}
1742
-
1743
-#login-form .box-inner {
1744
- width: 430px;
1745
- background: #404040;
1746
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #404040), color-stop(100%, #2e2e2e));
1747
- background: -ms-linear-gradient(top, #404040 0%, #2e2e2e 100%);
1748
- background: linear-gradient(to bottom, #404040 0%, #2e2e2e 100%);
1749
- margin: 0 50px;
1750
- padding: 10px 24px 24px 24px;
1751
- border-radius: 6px;
1752
-}
1753
-
1754
-#login-form .box-bottom {
1755
- margin-top: -3px;
1756
- padding-top: 10px;
1757
-}
1758
-
1759
-#login-form .noscriptwarning {
1760
- margin: 0 auto;
1761
- width: 430px;
1762
- color: #cf2734;
1763
- font-size: 110%;
1764
- font-weight: bold;
1765
-}
1766
-
1767
-#login-form td.input {
1768
- width: 80%;
1769
- padding: 8px;
1770
-}
1771
-
1772
-#login-form inputtype="text",
1773
-#login-form inputtype="email",
1774
-#login-form inputtype="password" {
1775
- width: 100%;
1776
- border-color: #666;
1777
-}
1778
-
1779
-#login-form .button {
1780
- color: #444;
1781
- border-color: #f9f9f9;
1782
- background-color: #f9f9f9;
1783
-}
1784
-
1785
-#login-form .button:active {
1786
- color: #333;
1787
- background-color: #dcdcdc;
1788
-}
1789
-
1790
-#login-form form table {
1791
- width: 98%;
1792
-}
1793
-
1794
-#login-form td.title {
1795
- width: 20%;
1796
- white-space: nowrap;
1797
- color: #cecece;
1798
- text-align: right;
1799
- padding-right: 1em;
1800
-}
1801
-
1802
-#login-form p.formbuttons {
1803
- margin-top: 2em;
1804
- text-align: center;
1805
-}
1806
-
1807
-#login-form p.oauthlogin {
1808
- margin-top: 1.5em;
1809
- padding-top: 1.5em;
1810
- text-align: center;
1811
-}
1812
-
1813
-#login-form p.formbuttons + p.oauthlogin {
1814
- border-top: 1px solid #666;
1815
-}
1816
-
1817
-#login-form p.oauthlogin .button.oauth.google,
1818
-#login-form p.oauthlogin .button.oauth.outlook {
1819
- line-height: 1.5;
1820
-}
1821
-
1822
-#login-form p.oauthlogin .button.oauth.google:before,
1823
-#login-form p.oauthlogin .button.oauth.outlook:before {
1824
- content: " ";
1825
- display: inline-block !important;
1826
- height: 1.6em;
1827
- width: 1.4em;
1828
- margin-right: .5em !important;
1829
- background-size: 100% auto;
1830
- vertical-align: middle;
1831
-}
1832
-
1833
-#login-form p.oauthlogin .button.oauth.google:before {
1834
- background: url('./images/google-icon.svg') top left no-repeat;
1835
-}
1836
-
1837
-#login-form p.oauthlogin .button.oauth.outlook:before {
1838
- background: url('./images/microsoft-icon.svg') top left no-repeat;
1839
-}
1840
-
1841
-
1842
-#login-form #logo {
1843
- margin-bottom: 20px;
1844
- border: none;
1845
-}
1846
-
1847
-#login-form #message {
1848
- min-height: 40px;
1849
- padding: 5px 25px;
1850
- text-align: center;
1851
- font-size: 1.1em;
1852
-}
1853
-
1854
-#login-form #message div {
1855
- display: inline-block;
1856
- padding-right: 0;
1857
- font-size: 12px;
1858
-}
1859
-
1860
-#bottomline {
1861
- font-size: 90%;
1862
- text-align: center;
1863
- margin-top: 2em;
1864
-}
1865
-
1866
-
1867
-
1868
-/*** quicksearch **/
1869
-
1870
-.searchbox {
1871
- position: relative;
1872
-}
1873
-
1874
-#quicksearchbar {
1875
- position: absolute;
1876
- right: 2px;
1877
- top: 2px;
1878
- width: 240px;
1879
-}
1880
-
1881
-.searchbox input,
1882
-#quicksearchbar input {
1883
- width: 176px;
1884
- margin: 0;
1885
- padding: 3px 30px 3px 34px;
1886
- height: 18px;
1887
- background: #f1f1f1;
1888
- border-color: #ababab;
1889
- font-weight: bold;
1890
- font-size: 11px;
1891
-}
1892
-
1893
-.searchbox .searchicon,
1894
-.searchbox #searchmenulink,
1895
-#quicksearchbar #searchmenulink {
1896
- position: absolute;
1897
- top: 5px;
1898
- left: 6px;
1899
-}
1900
-
1901
-.searchbox #searchreset,
1902
-.searchbox .iconbutton.reset,
1903
-#quicksearchbar #searchreset {
1904
- position: absolute;
1905
- top: 4px;
1906
- right: 1px;
1907
-}
1908
-
1909
-.listsearchbox {
1910
- padding: 4px;
1911
- background: #c7e3ef;
1912
- display: none;
1913
-}
1914
-
1915
-.listsearchbox input {
1916
- width: 100%;
1917
- height: 26px;
1918
- -moz-box-sizing: border-box;
1919
- box-sizing: border-box;
1920
-}
1921
-
1922
-/*** toolbar ***/
1923
-
1924
-.toolbar .spacer {
1925
- display: inline-block;
1926
- width: 24px;
1927
- height: 40px;
1928
- padding: 0;
1929
-}
1930
-
1931
-.toolbar a.button {
1932
- text-align: center;
1933
- font-size: 10px;
1934
- color: #555;
1935
- min-width: 50px;
1936
- max-width: 70px;
1937
- height: 13px;
1938
- overflow: hidden;
1939
- text-overflow: ellipsis;
1940
- white-space: nowrap;
1941
- padding: 28px 2px 0 2px;
1942
- background: url(images/buttons.png) -100px 0 no-repeat transparent;
1943
- border: 0;
1944
- border-radius: 0;
1945
-}
1946
-
1947
-.dropbutton .dropbuttontip:focus,
1948
-.toolbar a.button:focus {
1949
- color: #fff;
1950
- background-color: rgba(30,150,192, 0.5);
1951
- border-radius: 3px;
1952
-}
1953
-
1954
-.toolbar a.button.disabled {
1955
- opacity: 0.4;
1956
-}
1957
-
1958
-.toolbar a.button.selected {
1959
- color: #1978a1;
1960
-}
1961
-
1962
-.toolbar a.button.selected:focus {
1963
- color: #fff;
1964
-}
1965
-
1966
-.toolbar a.button.hidden {
1967
- display: none;
1968
-}
1969
-
1970
-.dropbutton {
1971
- display: inline-block;
1972
- position: relative;
1973
-}
1974
-
1975
-.dropbutton .dropbuttontip {
1976
- display: block;
1977
- position: absolute;
1978
- right: 0;
1979
- top: 0;
1980
- height: 41px;
1981
- width: 18px;
1982
- overflow: hidden;
1983
- text-indent: -5000px;
1984
- background: url(images/buttons.png) 0 -1255px no-repeat;
1985
- cursor: pointer;
1986
- outline: none;
1987
-}
1988
-
1989
-.dropbutton .dropbuttontip:focus,
1990
-.dropbutton .dropbuttontip:hover {
1991
- background-position: -26px -1255px;
1992
-}
1993
-
1994
-.dropbutton a.button.disabled + .dropbuttontip {
1995
- opacity: 0.5;
1996
-}
1997
-
1998
-.dropbutton a.button.disabled + .dropbuttontip:hover {
1999
- background-position: 0 -1255px;
2000
-}
2001
-
2002
-.dropbutton a.button {
2003
- margin-left: 0;
2004
- padding-left: 0;
2005
- margin-right: 0;
2006
- padding-right: 0;
2007
-}
2008
-
2009
-.toolbar a.button.back {
2010
- background-position: 0 -1216px;
2011
-}
2012
-
2013
-.toolbar a.button.checkmail {
2014
- background-position: center -1176px;
2015
-}
2016
-
2017
-.toolbar a.button.compose {
2018
- background-position: center -530px;
2019
-}
2020
-
2021
-.toolbar a.button.reply {
2022
- background-position: center -570px;
2023
-}
2024
-
2025
-.toolbar a.button.reply-all {
2026
- min-width: 64px;
2027
- background-position: 0 -610px;
2028
-}
2029
-
2030
-.toolbar a.button.forward {
2031
- min-width: 64px;
2032
- background-position: 0 -650px;
2033
-}
2034
-
2035
-.toolbar a.button.delete {
2036
- background-position: center -690px;
2037
-}
2038
-
2039
-.toolbar a.button.archive {
2040
- background-position: center -730px;
2041
-}
2042
-
2043
-.toolbar a.button.junk {
2044
- background-position: center -770px;
2045
-}
2046
-
2047
-.toolbar a.button.print {
2048
- background-position: center -810px;
2049
-}
2050
-
2051
-.toolbar a.button.markmessage {
2052
- background-position: center -1094px;
2053
-}
2054
-
2055
-.toolbar a.button.move {
2056
- background-position: center -1971px;
2057
-}
2058
-
2059
-.toolbar a.button.more {
2060
- background-position: center -850px;
2061
-}
2062
-
2063
-.toolbar a.button.attach {
2064
- background-position: center -890px;
2065
-}
2066
-
2067
-.toolbar a.button.spellcheck {
2068
- min-width: 64px;
2069
- background-position: 0 -930px;
2070
-}
2071
-
2072
-.toolbar a.button.spellcheck.selected {
2073
- background-position: 0 -1620px;
2074
- color: #1978a1;
2075
-}
2076
-
2077
-.toolbar a.button.insertsig {
2078
- background-position: center -1135px;
2079
-}
2080
-
2081
-.toolbar a.button.search {
2082
- background-position: center -970px;
2083
-}
2084
-
2085
-.toolbar a.button.import {
2086
- background-position: center -1012px;
2087
-}
2088
-
2089
-.toolbar a.button.export {
2090
- min-width: 64px;
2091
- background-position: 0 -1054px;
2092
-}
2093
-
2094
-.toolbar a.button.send {
2095
- background-position: center -1660px;
2096
-}
2097
-
2098
-.toolbar a.button.savedraft {
2099
- background-position: center -1700px;
2100
-}
2101
-
2102
-.toolbar a.button.close {
2103
- background-position: 0 -1745px;
2104
-}
2105
-
2106
-.toolbar a.button.download {
2107
- background-position: center -1892px;
2108
-}
2109
-
2110
-.toolbar a.button.responses {
2111
- background-position: center -1932px;
2112
-}
2113
-
2114
-.toolbar a.button.encrypt {
2115
- min-width: 66px;
2116
- background-position: center -2025px;
2117
-}
2118
-
2119
-.toolbar a.button.encrypt.selected {
2120
- background-position: center -2065px;
2121
-}
2122
-
2123
-.toolbar a.button.rotate {
2124
- background-position: center -2148px;
2125
-}
2126
-
2127
-.toolbar a.button.zoomin {
2128
- background-position: center -2190px;
2129
-}
2130
-
2131
-.toolbar a.button.zoomout {
2132
- background-position: center -2230px;
2133
-}
2134
-
2135
-a.menuselector {
2136
- display: inline-block;
2137
- border: 1px solid #ababab;
2138
- border-radius: 4px;
2139
- background: #f1f1f1;
2140
- text-decoration: none;
2141
- color: #333;
2142
- cursor: pointer;
2143
- white-space: nowrap;
2144
-}
2145
-
2146
-a.menuselector .handle {
2147
- display: inline-block;
2148
- padding: 0 32px 0 6px;
2149
- height: 20px;
2150
- line-height: 19px;
2151
- background: url(images/selector.png) right center no-repeat;
2152
- border-radius: 4px;
2153
-}
2154
-
2155
-a.menuselector:active {
2156
- background: #dddddd;
2157
- background: -moz-linear-gradient(top, #dddddd 0%, #f8f8f8 100%);
2158
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#dddddd), color-stop(100%,#f8f8f8));
2159
- background: -ms-linear-gradient(top, #dddddd 0%, #f8f8f8 100%);
2160
- background: linear-gradient(to bottom, #dddddd 0%, #f8f8f8 100%);
2161
- text-decoration: none;
2162
-}
2163
-
2164
-select.decorated {
2165
- position: relative;
2166
- z-index: 10;
2167
- opacity: 0;
2168
- height: 22px;
2169
- cursor: pointer;
2170
- -khtml-appearance: none;
2171
- -webkit-appearance: none;
2172
- border: 0;
2173
-}
2174
-
2175
-html.opera select.decorated {
2176
- opacity: 1;
2177
-}
2178
-
2179
-select.decorated option {
2180
- color: #fff;
2181
- background: #444;
2182
- border: 0;
2183
- border-top: 1px solid #5a5a5a;
2184
- border-bottom: 1px solid #333;
2185
- padding: 4px 6px;
2186
- outline: none;
2187
- cursor: default;
2188
-}
2189
-
2190
-
2191
-a.menuselector:focus,
2192
-a.menuselector.focus,
2193
-a.iconbutton:focus,
2194
-.pagenav a.button:focus {
2195
- border-color: #0883d0;
2196
- box-shadow: 0 0 4px 2px rgba(71,135,177, 0.8);
2197
- outline: none;
2198
-}
2199
-
2200
-
2201
-/*** quota indicator ***/
2202
-
2203
-#quotadisplay {
2204
- left: 6px;
2205
- height: 18px;
2206
- font-size: 12px;
2207
- font-weight: bold;
2208
- padding-left: 30px;
2209
- background: url(images/quota.png) -100px 0 no-repeat;
2210
-}
2211
-
2212
-#quotadisplay.p90,
2213
-#quotadisplay.p100 {
2214
- color: #e03221;
2215
-}
2216
-
2217
-table.quota-info {
2218
- border-spacing: 0;
2219
- border-collapse: collapse;
2220
- table-layout: fixed;
2221
- margin: 5px;
2222
-}
2223
-
2224
-table.quota-info td,
2225
-table.quota-info th {
2226
- color: white;
2227
- border: 1px solid lightgrey;
2228
- padding: 2px 3px;
2229
- text-align: center;
2230
- min-width: 80px;
2231
-}
2232
-
2233
-table.quota-info td.name {
2234
- text-align: left;
2235
-}
2236
-
2237
-table.quota-info td.root {
2238
- font-style: italic;
2239
-}
2240
-
2241
-/*** popup menus ***/
2242
-
2243
-.popupmenu,
2244
-#rcmKSearchpane {
2245
- display: none;
2246
- position: absolute;
2247
- top: 32px;
2248
- left: 90px;
2249
- width: auto;
2250
- max-height: 70%;
2251
- overflow: -moz-scrollbars-vertical;
2252
- overflow-y: auto;
2253
- background: #444;
2254
- z-index: 240;
2255
- border-radius: 4px;
2256
- box-shadow: 0 2px 6px 0 #333;
2257
-}
2258
-
2259
-.popupmenu.dropdown {
2260
- border-radius: 0 0 4px 4px;
2261
- border-top: 0;
2262
-}
2263
-
2264
-.popupmenu > .buttons {
2265
- border-top: 1px solid #5a5a5a;
2266
- height: 25px;
2267
- padding-top: 5px;
2268
- text-align: center;
2269
-}
2270
-
2271
-ul.toolbarmenu,
2272
-ul.toolbarmenu ul,
2273
-#rcmKSearchpane ul {
2274
- margin: 0;
2275
- padding: 0;
2276
- list-style: none;
2277
-}
2278
-
2279
-.googie_list td,
2280
-ul.toolbarmenu li,
2281
-#rcmKSearchpane ul li {
2282
- color: #fff;
2283
- white-space: nowrap;
2284
- min-width: 130px;
2285
- margin: 0;
2286
- border-top: 1px solid #5a5a5a;
2287
-}
2288
-
2289
-.googie_list tr:first-child td,
2290
-ul.toolbarmenu > li:first-child,
2291
-select.decorated option:first-child {
2292
- border-top: 0;
2293
-}
2294
-
2295
-.googie_list tr:last-child td,
2296
-ul.toolbarmenu > li:last-child,
2297
-select.decorated option:last-child {
2298
- border-bottom: 0;
2299
-}
2300
-
2301
-.googie_list td span,
2302
-ul.toolbarmenu li a {
2303
- display: block;
2304
- color: #666;
2305
- text-decoration: none;
2306
- min-height: 14px;
2307
- padding: 6px 16px 6px 10px;
2308
-}
2309
-
2310
-.googie_list td span {
2311
- padding: 3px 10px;
2312
-}
2313
-
2314
-.googie_list td span,
2315
-ul.toolbarmenu li a.active {
2316
- color: #fff;
2317
- cursor: default;
2318
-}
2319
-
2320
-.googie_list td.googie_list_onhover,
2321
-ul.toolbarmenu li a.active:hover,
2322
-ul.toolbarmenu li a.active:focus,
2323
-#rcmKSearchpane ul li.selected,
2324
-#pagejump-selector ul li.selected,
2325
-select.decorated option:hover,
2326
-select.decorated optionselected='selected' {
2327
- background-color: #0883d0;
2328
- outline: none;
2329
-}
2330
-
2331
-ul.toolbarmenu.iconized li a,
2332
-ul.toolbarmenu.selectable li a {
2333
- padding-left: 30px;
2334
-}
2335
-
2336
-ul.toolbarmenu.selectable li a.selected {
2337
- background: url(images/messages.png) 4px -27px no-repeat;
2338
-}
2339
-
2340
-ul.toolbarmenu li label {
2341
- display: block;
2342
- color: #fff;
2343
- padding: 4px 8px;
2344
-}
2345
-
2346
-ul.toolbarmenu li.separator label {
2347
- color: #bbb;
2348
- font-style: italic;
2349
- padding: 0 8px;
2350
- line-height: 17px;
2351
-}
2352
-
2353
-ul.toolbarmenu li input {
2354
- margin: 0;
2355
-}
2356
-
2357
-ul.toolbarmenu li a.icon {
2358
- color: #eee;
2359
- padding: 2px 6px;
2360
-}
2361
-
2362
-ul.toolbarmenu li span.icon,
2363
-#rcmKSearchpane ul li i.icon {
2364
- display: block;
2365
- min-height: 14px;
2366
- padding: 4px 4px 1px 24px;
2367
- height: 17px;
2368
- background-image: url(images/listicons.png);
2369
- background-position: -100px 0;
2370
- background-repeat: no-repeat;
2371
- opacity: 0.2;
2372
-}
2373
-
2374
-ul.toolbarmenu li a.active span.icon {
2375
- opacity: 0.99;
2376
-}
2377
-
2378
-ul.toolbarmenu li span.read {
2379
- background-position: 0 -1220px;
2380
-}
2381
-
2382
-ul.toolbarmenu li span.unread {
2383
- background-position: 0 -1196px;
2384
-}
2385
-
2386
-ul.toolbarmenu li span.flagged {
2387
- background-position: 0 -1244px;
2388
-}
2389
-
2390
-ul.toolbarmenu li span.unflagged {
2391
- background-position: 0 -1268px;
2392
-}
2393
-
2394
-ul.toolbarmenu li span.mail {
2395
- background-position: 0 -1293px;
2396
-}
2397
-
2398
-ul.toolbarmenu li span.list {
2399
- background-position: 0 -1317px;
2400
-}
2401
-
2402
-ul.toolbarmenu li span.invert {
2403
- background-position: 0 -1340px;
2404
-}
2405
-
2406
-ul.toolbarmenu li span.cross {
2407
- background-position: 0 -1365px;
2408
-}
2409
-
2410
-ul.toolbarmenu li span.print {
2411
- background-position: 0 -1436px;
2412
-}
2413
-
2414
-ul.toolbarmenu li span.download {
2415
- background-position: 0 -1412px;
2416
-}
2417
-
2418
-ul.toolbarmenu li span.rename {
2419
- background-position: 0 -2295px;
2420
-}
2421
-
2422
-ul.toolbarmenu li span.edit {
2423
- background-position: 0 -1388px;
2424
-}
2425
-
2426
-ul.toolbarmenu li span.viewsource {
2427
- background-position: 0 -1460px;
2428
-}
2429
-
2430
-ul.toolbarmenu li span.extwin {
2431
- background-position: 0 -1484px;
2432
-}
2433
-
2434
-ul.toolbarmenu li span.conversation {
2435
- background-position: 0 -1532px;
2436
-}
2437
-
2438
-ul.toolbarmenu li span.move {
2439
- background-position: 0 -2126px;
2440
-}
2441
-
2442
-ul.toolbarmenu li span.copy {
2443
- background-position: 0 -2150px;
2444
-}
2445
-
2446
-#pagejump-selector {
2447
- max-height: 250px;
2448
- overflow-x: hidden;
2449
-}
2450
-
2451
-#pagejump-selector ul li {
2452
- min-width: 45px;
2453
- padding: 4px 6px;
2454
- cursor: default;
2455
-}
2456
-
2457
-#snippetslist {
2458
- max-width: 200px;
2459
-}
2460
-
2461
-#snippetslist li a {
2462
- overflow: hidden;
2463
- text-overflow: ellipsis;
2464
-}
2465
-
2466
-#rcmKSearchpane {
2467
- border-radius: 0 0 4px 4px;
2468
- border-top: 0;
2469
-}
2470
-
2471
-#rcmKSearchpane ul li {
2472
- text-decoration: none;
2473
- min-height: 14px;
2474
- padding: 6px 10px 6px 28px;
2475
- border: 0;
2476
- cursor: default;
2477
- position: relative;
2478
- overflow: hidden;
2479
- text-overflow: ellipsis;
2480
-}
2481
-
2482
-#rcmKSearchpane ul li i.icon {
2483
- opacity: 0.99;
2484
- position: absolute;
2485
- top: 4px;
2486
- left: 5px;
2487
- width: 18px;
2488
- height: 18px;
2489
- padding: 0;
2490
- background-position: -1px -2223px;
2491
-}
2492
-
2493
-#rcmKSearchpane ul li.group i.icon {
2494
- background-position: -1px -2247px;
2495
-}
2496
-
2497
-.popupdialog {
2498
- display: none;
2499
- padding: 10px;
2500
-}
2501
-
2502
-.popupdialog .formbuttons {
2503
- margin: 20px 0 4px 0;
2504
-}
2505
-
2506
-.ui-dialog .prompt input {
2507
- display: block;
2508
- margin: 8px 0;
2509
-}
2510
-
2511
-.ui-dialog iframe {
2512
- width: 100%;
2513
- height: 100%;
2514
- border: 0;
2515
-}
2516
-
2517
-.ui-dialog-content.iframe {
2518
- padding: 0 !important;
2519
- overflow: hidden !important;
2520
-}
2521
-
2522
-.hint {
2523
- margin: 4px 0;
2524
- color: #999;
2525
-}
2526
-
2527
-.splitter {
2528
- user-select: none;
2529
- -moz-user-select: none;
2530
- -khtml-user-select: none;
2531
- position: absolute;
2532
- background: url(images/splitter.png) center no-repeat;
2533
-}
2534
-
2535
-.splitter-h {
2536
- height: 10px;
2537
- width: 100%;
2538
- cursor: n-resize;
2539
- cursor: row-resize;
2540
- background-position: center 0;
2541
-}
2542
-
2543
-.splitter-v {
2544
- width: 10px;
2545
- height: 100%;
2546
- cursor: e-resize;
2547
- cursor: col-resize;
2548
- background-position: 0 center;
2549
-}
2550
-
2551
-#rcmdraglayer {
2552
- min-width: 260px;
2553
- width: auto !important;
2554
- width: 260px;
2555
- padding: 6px 8px;
2556
- background: #444;
2557
- border: 1px solid #555;
2558
- border-radius: 4px;
2559
- box-shadow: 0 2px 6px 0 #333;
2560
- z-index: 250;
2561
- color: #ccc;
2562
- white-space: nowrap;
2563
- opacity: 0.92;
2564
-}
2565
-
2566
-#rcmdraglayer:after {
2567
- content: "";
2568
- position: absolute;
2569
- top: 6px;
2570
- left: -6px;
2571
- border-style: solid;
2572
- border-width: 6px 6px 6px 0;
2573
- border-color: transparent #444;
2574
- /* reduce the damage in FF3.0 */
2575
- display: block;
2576
- width: 0;
2577
- z-index: 251;
2578
-}
2579
-
2580
-.draglayercopy:before {
2581
- position: absolute;
2582
- bottom: -6px;
2583
- left: -6px;
2584
- content: " ";
2585
- width: 16px;
2586
- height: 16px;
2587
- background: url(images/buttons.png) -7px -358px no-repeat;
2588
- z-index: 255;
2589
-}
2590
-
2591
-.popup label > input {
2592
- margin-left: 10px;
2593
-}
2594
-
2595
-/*** folder selector ***/
2596
-
2597
-#folder-selector {
2598
- z-index: 1000;
2599
-}
2600
-
2601
-#folder-selector li a span {
2602
- background: url("images/listicons.png") 4px -2021px no-repeat;
2603
- display: block;
2604
- height: 17px;
2605
- min-height: 14px;
2606
- padding: 4px 4px 1px 28px;
2607
- overflow: hidden;
2608
- max-width: 120px;
2609
- text-overflow: ellipsis;
2610
-}
2611
-
2612
-#folder-selector li a.virtual span {
2613
- opacity: .2;
2614
-}
2615
-
2616
-#folder-selector li.inbox span {
2617
- background-position: 4px -2049px;
2618
-}
2619
-#folder-selector li.drafts span {
2620
- background-position: 4px -1388px;
2621
-}
2622
-#folder-selector li.sent span {
2623
- background-position: 4px -2074px;
2624
-}
2625
-#folder-selector li.trash span {
2626
- background-position: 4px -1508px;
2627
-}
2628
-#folder-selector li.junk span {
2629
- background-position: 4px -2100px;
2630
-}
2631
-
2632
-/*** folders list ***/
2633
-
2634
-.folderlist li.mailbox a {
2635
- padding-left: 36px;
2636
- white-space: nowrap;
2637
- overflow: hidden;
2638
- text-overflow: ellipsis;
2639
- background-image: url(images/listicons.png);
2640
- background-repeat: no-repeat;
2641
- background-position: 6px 3px;
2642
-}
2643
-
2644
-.folderlist li.mailbox.unread > a {
2645
- padding-right: 36px;
2646
-}
2647
-
2648
-.folderlist li.mailbox > a:focus,
2649
-.folderlist li.mailbox.selected > a {
2650
- background-position: 6px -21px;
2651
-}
2652
-
2653
-.folderlist li.mailbox.inbox > a {
2654
- background-position: 6px -189px;
2655
-}
2656
-
2657
-.folderlist li.mailbox.inbox > a:focus,
2658
-.folderlist li.mailbox.inbox.selected > a {
2659
- background-position: 6px -213px;
2660
-}
2661
-
2662
-.folderlist li.mailbox.drafts > a {
2663
- background-position: 6px -238px;
2664
-}
2665
-
2666
-.folderlist li.mailbox.drafts > a:focus,
2667
-.folderlist li.mailbox.drafts.selected > a {
2668
- background-position: 6px -262px;
2669
-}
2670
-
2671
-.folderlist li.mailbox.sent > a {
2672
- background-position: 6px -286px;
2673
-}
2674
-
2675
-.folderlist li.mailbox.sent > a:focus,
2676
-.folderlist li.mailbox.sent.selected > a {
2677
- background-position: 6px -310px;
2678
-}
2679
-
2680
-.folderlist li.mailbox.junk > a {
2681
- background-position: 6px -334px;
2682
-}
2683
-
2684
-.folderlist li.mailbox.junk > a:focus,
2685
-.folderlist li.mailbox.junk.selected > a {
2686
- background-position: 6px -358px;
2687
-}
2688
-
2689
-.folderlist li.mailbox.trash > a {
2690
- background-position: 6px -382px;
2691
-}
2692
-
2693
-.folderlist li.mailbox.trash > a:focus,
2694
-.folderlist li.mailbox.trash.selected > a {
2695
- background-position: 6px -406px;
2696
-}
2697
-
2698
-.folderlist li.mailbox.trash.empty > a {
2699
- background-position: 6px -1924px;
2700
-}
2701
-
2702
-.folderlist li.mailbox.trash.empty > a:focus,
2703
-.folderlist li.mailbox.trash.empty.selected > a {
2704
- background-position: 6px -1948px;
2705
-}
2706
-
2707
-.folderlist li.mailbox.archive > a {
2708
- background-position: 6px -1699px;
2709
-}
2710
-
2711
-.folderlist li.mailbox.archive > a:focus,
2712
-.folderlist li.mailbox.archive.selected > a {
2713
- background-position: 6px -1723px;
2714
-}
2715
-
2716
-.folderlist li.mailbox ul li.drafts > a {
2717
- background-position: 23px -238px;
2718
-}
2719
-
2720
-.folderlist li.mailbox ul li.drafts > a:focus,
2721
-.folderlist li.mailbox ul li.drafts.selected > a {
2722
- background-position: 23px -262px;
2723
-}
2724
-
2725
-.folderlist li.mailbox ul li.sent > a {
2726
- background-position: 23px -286px;
2727
-}
2728
-
2729
-.folderlist li.mailbox ul li.sent > a:focus,
2730
-.folderlist li.mailbox ul li.sent.selected > a {
2731
- background-position: 23px -310px;
2732
-}
2733
-
2734
-.folderlist li.mailbox ul li.junk > a {
2735
- background-position: 23px -334px;
2736
-}
2737
-
2738
-.folderlist li.mailbox ul li.junk > a:focus,
2739
-.folderlist li.mailbox ul li.junk.selected > a {
2740
- background-position: 23px -358px;
2741
-}
2742
-
2743
-.folderlist li.mailbox ul li.trash > a {
2744
- background-position: 23px -382px;
2745
-}
2746
-
2747
-.folderlist li.mailbox ul li.trash > a:focus,
2748
-.folderlist li.mailbox ul li.trash.selected > a {
2749
- background-position: 23px -406px;
2750
-}
2751
-
2752
-.folderlist li.mailbox ul li.trash.empty > a {
2753
- background-position: 23px -1924px;
2754
-}
2755
-
2756
-.folderlist li.mailbox ul li.trash.empty > a:focus,
2757
-.folderlist li.mailbox ul li.trash.empty.selected > a {
2758
- background-position: 23px -1948px;
2759
-}
2760
-
2761
-.folderlist li.mailbox ul li.archive > a {
2762
- background-position: 23px -1699px;
2763
-}
2764
-
2765
-.folderlist li.mailbox ul li.archive > a:focus,
2766
-.folderlist li.mailbox ul li.archive.selected > a {
2767
- background-position: 23px -1723px;
2768
-}
2769
-
2770
-.folderlist li.virtual > a {
2771
- color: #aaa;
2772
-}
2773
-
2774
-.folderlist li.mailbox div.treetoggle {
2775
- top: 13px;
2776
- left: 19px;
2777
-}
2778
-
2779
-.folderlist li.mailbox ul li:last-child {
2780
- border-bottom: 0;
2781
-}
2782
-
2783
-/* nested mailboxes */
2784
-
2785
-.folderlist li.mailbox ul {
2786
- list-style: none;
2787
- margin: 0;
2788
- padding: 0;
2789
- border-top: 1px solid #bbd3da;
2790
-}
2791
-
2792
-.folderlist li.mailbox ul li a {
2793
- padding-left: 52px; /* 36 + 1 x 16 */
2794
- background-position: 22px -93px; /* 6 + 1 x 16 */
2795
-}
2796
-.folderlist li.mailbox ul li > a:focus,
2797
-.folderlist li.mailbox ul li.selected > a {
2798
- background-position: 22px -117px;
2799
-}
2800
-.folderlist li.mailbox ul li div.treetoggle {
2801
- left: 33px;
2802
- top: 14px;
2803
-}
2804
-
2805
-.folderlist li.mailbox ul ul li.mailbox a {
2806
- padding-left: 68px; /* 2x */
2807
- background-position: 38px -93px;
2808
-}
2809
-.folderlist li.mailbox ul ul li > a:focus,
2810
-.folderlist li.mailbox ul ul li.selected > a {
2811
- background-position: 38px -117px;
2812
-}
2813
-.folderlist li.mailbox ul ul li div.treetoggle {
2814
- left: 48px;
2815
-}
2816
-
2817
-.folderlist li.mailbox ul ul ul li.mailbox a {
2818
- padding-left: 84px; /* 3x */
2819
- background-position: 54px -93px;
2820
-}
2821
-.folderlist li.mailbox ul ul ul li > a:focus,
2822
-.folderlist li.mailbox ul ul ul li.selected > a {
2823
- background-position: 54px -117px;
2824
-}
2825
-.folderlist li.mailbox ul ul ul li div.treetoggle {
2826
- left: 64px;
2827
-}
2828
-
2829
-.folderlist li.mailbox ul ul ul ul li.mailbox a {
2830
- padding-left: 100px; /* 4x */
2831
- background-position: 70px -93px;
2832
-}
2833
-.folderlist li.mailbox ul ul ul ul li > a:focus,
2834
-.folderlist li.mailbox ul ul ul ul li.selected > a {
2835
- background-position: 70px -117px;
2836
-}
2837
-.folderlist li.mailbox ul ul ul ul li div.treetoggle {
2838
- left: 80px;
2839
-}
2840
-
2841
-/* indent folders on levels > 4 */
2842
-.folderlist li.mailbox ul ul ul ul ul li {
2843
- padding-left: 16px;
2844
-}
2845
-.folderlist li.mailbox ul ul ul ul ul li div.treetoggle {
2846
- left: 96px;
2847
-}
2848
-
2849
-
2850
-/*** attachment list ***/
2851
-
2852
-.attachmentslist {
2853
- list-style: none;
2854
- margin: 0;
2855
- padding: 0;
2856
- overflow: hidden;
2857
- text-overflow: ellipsis;
2858
-}
2859
-
2860
-.attachmentslist li {
2861
- display: block;
2862
- position: relative;
2863
- background: url(images/filetypes.png) 0 0 no-repeat;
2864
- margin-bottom: 1px;
2865
- line-height: 24px;
2866
-}
2867
-
2868
-.attachmentslist li.txt,
2869
-.attachmentslist li.text {
2870
- background-position: 0 -416px;
2871
-}
2872
-
2873
-.attachmentslist li.pdf {
2874
- background-position: 0 -26px;
2875
-}
2876
-
2877
-.attachmentslist li.doc,
2878
-.attachmentslist li.docx,
2879
-.attachmentslist li.msword {
2880
- background-position: 0 -52px;
2881
-}
2882
-
2883
-.attachmentslist li.odt {
2884
- background-position: 0 -78px;
2885
-}
2886
-
2887
-.attachmentslist li.xls,
2888
-.attachmentslist li.xlsx,
2889
-.attachmentslist li.msexcel {
2890
- background-position: 0 -104px;
2891
-}
2892
-
2893
-.attachmentslist li.ods {
2894
- background-position: 0 -130px;
2895
-}
2896
-
2897
-.attachmentslist li.zip,
2898
-.attachmentslist li.gz {
2899
- background-position: 0 -156px;
2900
-}
2901
-
2902
-.attachmentslist li.rar {
2903
- background-position: 0 -182px;
2904
-}
2905
-
2906
-.attachmentslist li.image {
2907
- background-position: 0 -208px;
2908
-}
2909
-
2910
-.attachmentslist li.jpg,
2911
-.attachmentslist li.jpeg {
2912
- background-position: 0 -234px;
2913
-}
2914
-
2915
-.attachmentslist li.png {
2916
- background-position: 0 -260px;
2917
-}
2918
-
2919
-.attachmentslist li.m4p {
2920
- background-position: 0 -286px;
2921
-}
2922
-
2923
-.attachmentslist li.mp3,
2924
-.attachmentslist li.audio {
2925
- background-position: 0 -312px;
2926
-}
2927
-
2928
-.attachmentslist li.video {
2929
- background-position: 0 -338px;
2930
-}
2931
-
2932
-.attachmentslist li.ics,
2933
-.attachmentslist li.calendar {
2934
- background-position: 0 -364px;
2935
-}
2936
-
2937
-.attachmentslist li.vcard {
2938
- background-position: 0 -390px;
2939
-}
2940
-
2941
-.attachmentslist li.sig,
2942
-.attachmentslist li.pgp-signature,
2943
-.attachmentslist li.pkcs7-signature {
2944
- background-position: 0 -442px;
2945
-}
2946
-
2947
-.attachmentslist li.html {
2948
- background-position: 0 -468px;
2949
-}
2950
-
2951
-.attachmentslist li.eml,
2952
-.attachmentslist li.rfc822 {
2953
- background-position: 0 -494px;
2954
-}
2955
-
2956
-.attachmentslist li.ppt,
2957
-.attachmentslist li.pptx,
2958
-.attachmentslist li.ppsx,
2959
-.attachmentslist li.vnd.mspowerpoint {
2960
- background-position: 0 -520px;
2961
-}
2962
-
2963
-.attachmentslist li.odp,
2964
-.attachmentslist li.otp {
2965
- background-position: 0 -546px;
2966
-}
2967
-
2968
-.attachmentslist li.application.asc {
2969
- background-position: 0 -598px;
2970
-}
2971
-
2972
-.attachmentslist li.application.pgp-keys {
2973
- background-position: 0 -572px;
2974
-}
2975
-
2976
-
2977
-.attachmentslist li a {
2978
- display: block;
2979
- color: #333;
2980
- font-weight: bold;
2981
- padding: 3px 15px 3px 30px;
2982
- text-decoration: none;
2983
- white-space: nowrap;
2984
- overflow: hidden;
2985
- text-overflow: ellipsis;
2986
- line-height: 20px;
2987
- outline: none;
2988
-}
2989
-
2990
-.attachmentslist li a.drop {
2991
- background: url(images/buttons.png) no-repeat scroll center -1570px;
2992
- width: 14px;
2993
- height: 20px;
2994
- cursor: pointer;
2995
- position: absolute;
2996
- right: 0;
2997
- top: 0;
2998
- padding: 0;
2999
- overflow: hidden;
3000
- text-indent: -5000px;
3001
- outline: none;
3002
-}
3003
-
3004
-#compose-attachments .attachmentslist li a.drop {
3005
- right: 24px;
3006
-}
3007
-
3008
-.attachmentslist li a:focus,
3009
-.attachmentslist li a.drop:focus {
3010
- background-color: rgba(30,150,192, 0.5);
3011
- border-radius: 2px;
3012
-}
3013
-
3014
-#compose-attachments ul li {
3015
- padding-right: 24px;
3016
-}
3017
-
3018
-.attachmentslist li a:hover {
3019
- text-decoration: underline;
3020
-}
3021
-
3022
-.attachmentslist li.uploading {
3023
- background: url(images/ajaxloader.gif) 4px 4px no-repeat;
3024
- padding-left: 30px;
3025
-}
3026
-
3027
-.attachmentslist li a.delete,
3028
-.attachmentslist li a.cancelupload {
3029
- position: absolute;
3030
- top: 4px;
3031
- right: 0;
3032
- width: 20px;
3033
- height: 18px;
3034
- padding: 0;
3035
- text-decoration: none;
3036
- text-indent: -5000px;
3037
- background-image: url(images/buttons.png);
3038
- background-position: -6px -338px;
3039
- background-repeat: no-repeat;
3040
-}
3041
-
3042
-.attachmentslist li a.cancelupload {
3043
- background-position: -6px -378px;
3044
-}
3045
-
3046
-.attachmentslist li a.filename {
3047
- display: flex;
3048
- overflow: hidden;
3049
-}
3050
-.attachmentslist li .attachment-name {
3051
- overflow: hidden;
3052
- text-overflow: ellipsis;
3053
-}
3054
-
3055
-.attachmentslist li .attachment-size {
3056
- padding: 0 .25em;
3057
-}
3058
-
3059
-
3060
-/*** fieldset tabs ***/
3061
-
3062
-.tabbed.ui-tabs {
3063
- padding: 0;
3064
- border: 0 !important;
3065
- background: none;
3066
-}
3067
-
3068
-.ui-dialog .tabbed.ui-tabs {
3069
- margin: -12px -8px 0 -8px;
3070
-}
3071
-
3072
-.boxcontent.tabbed.ui-tabs {
3073
- padding: 10px;
3074
-}
3075
-
3076
-.ui-tabs .tabsbar.ui-tabs-nav {
3077
- margin-bottom: 4px;
3078
-}
3079
-
3080
-.ui-dialog-content .ui-tabs .tabsbar.ui-tabs-nav {
3081
- margin-bottom: 0;
3082
-}
3083
-
3084
-.tabsbar .tablink:last-child {
3085
- background: none;
3086
-}
3087
-
3088
-.tabsbar .tablink:last-child a {
3089
- border-right: 0;
3090
-}
3091
-
3092
-.ui-tabs .ui-tabs-nav li.tablink a {
3093
- background: #fff;
3094
-}
3095
-
3096
-.ui-tabs fieldset.ui-tabs-panel {
3097
- border: 0;
3098
- padding: 0;
3099
- margin-left: 0;
3100
- background: none;
3101
-}
3102
-
3103
-.ui-dialog .propform .ui-tabs-panel {
3104
- display: block;
3105
- background: #efefef;
3106
- padding: 0.5em 1em;
3107
-}
3108
-
3109
-/** Common TinyMCE fixes **/
3110
-
3111
-#image-selector.droptarget {
3112
- background: url(images/filedrop.png) center bottom no-repeat;
3113
-}
3114
-
3115
-div.tox .tox-toolbar,
3116
-div.tox .tox-toolbar__overflow,
3117
-div.tox .tox-toolbar__primary {
3118
- background-color: #f0f0f0;
3119
-}
3120
-
3121
-div.tox .tox-toolbar__primary {
3122
- border: 0;
3123
-}
3124
-
3125
-div.tox div.tox-dialog-wrap__backdrop {
3126
- background: #aaa;
3127
- opacity: .3;
3128
-}
3129
-
3130
-div.tox div.tox-dialog {
3131
- box-shadow: 1px 1px 18px #666;
3132
- border-width: 0;
3133
-}
3134
-
3135
-
3136
-.mce-menu {
3137
- z-index: 65537 !important;
3138
-}
3139
-
3140
-.mce-tinymce.mce-container {
3141
- box-shadow: none;
3142
-}
3143
-
3144
-.mce-toolbar.mce-container {
3145
- background: #f0f0f0;
3146
-}
3147
-
3148
-
3149
-/** PGP Key import dialog **/
3150
-.pgpkeyimport div.key {
3151
- position: relative;
3152
- margin-bottom: 2px;
3153
- padding: 1em;
3154
- background-color: #ebebeb;
3155
-}
3156
-
3157
-.pgpkeyimport div.key.revoked,
3158
-.pgpkeyimport div.key.disabled {
3159
- color: #a0a0a0;
3160
-}
3161
-
3162
-.pgpkeyimport div.key label {
3163
- display: inline-block;
3164
- margin-right: 0.5em;
3165
-}
3166
-
3167
-.pgpkeyimport div.key label:after {
3168
- content: ":";
3169
-}
3170
-
3171
-.pgpkeyimport div.key label + a,
3172
-.pgpkeyimport div.key label + span {
3173
- display: inline-block;
3174
- margin-right: 2em;
3175
- white-space: nowrap;
3176
-}
3177
-
3178
-.pgpkeyimport div.key label + a {
3179
- font-weight: bold;
3180
-}
3181
-
3182
-.pgpkeyimport ul.uids {
3183
- margin: 1em 0 0 0;
3184
- padding: 0;
3185
-}
3186
-
3187
-.pgpkeyimport li.uid {
3188
- border: 0;
3189
- padding: 0.3em;
3190
-}
3191
-
3192
-.pgpkeyimport div.key button.importkey {
3193
- position: absolute;
3194
- top: 0.8em;
3195
- right: 0.8em;
3196
- padding: 4px 6px;
3197
-}
3198
-
3199
-.pgpkeyimport div.key buttondisabled {
3200
- display: none;
3201
-}
3202
roundcubemail-1.6.tar.gz/skins/larry/styles.min.css
Deleted
4
1
2
-body{font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;font-size:11px;color:#333;background:#cad2d9;margin:0}body.noscroll{overflow:hidden}.iphone body.noscroll{overflow:auto}a{color:#0069a6}a:visited{color:#0186ba}img{border:0}.voice{position:absolute;border:0;clip:rect(0 0 0 0);width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}input,textarea,select,button{font-family:inherit;font-size:inherit;vertical-align:middle}inputtype=text,inputtype=email,inputtype=password,textarea{margin:0;padding:4px;border:1px solid #b2b2b2;border-radius:4px}inputtype=text:focus,inputtype=email:focus,inputtype=password:focus,button:focus,input.button:focus,textarea:focus{border-color:#4787b1;box-shadow:0 0 5px 2px rgba(71,135,177,.9);outline:0}inputtype=text:required,inputtype=email:required,inputtype=password:required{border-color:#4787b1}input.placeholder,textarea.placeholder{color:#aaa}.bold{font-weight:700}label input+span{vertical-align:middle}.noselect{user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none;-webkit-user-select:none}li>.input-group{display:inline}button,input.button{display:inline-block;margin:0 2px;padding:4px 8px;color:#525252;border:1px solid silver;border-radius:4px;background:#f7f7f7;text-decoration:none;outline:0}.formbuttons button,.formbuttons input.button,.oauthlogin .button{color:#ddd;font-size:110%;padding:4px 12px;border-color:#465864;border-radius:5px;background:#666;box-shadow:0 1px 1px 0 #ccc}.formbuttons button:hover,.formbuttons button:focus,.formbuttons input.button:hover,.formbuttons input.button:focus,input.button.mainaction:hover,input.button.mainaction:focus{color:#f2f2f2;border-color:#465864;box-shadow:0 0 5px 2px rgba(71,135,177,.6)}.formbuttons button:active,.formbuttons input.button:active{color:#fff;background:#5f5f5f}button.mainaction,input.button.mainaction{color:#ededed;border-color:#1f262c;background:#2c2f33}button.mainaction:active,input.button.mainaction:active{color:#fff;background:#515151;background:-moz-linear-gradient(top,#2a2e31 0,#505050 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#2a2e31),color-stop(100%,#505050));background:-ms-linear-gradient(top,#2a2e31 0%,#505050 100%);background:linear-gradient(to bottom,#2a2e31 0,#505050 100%)}buttondisabled,buttondisabled:hover,input.buttondisabled,input.buttondisabled:hover,input.button.mainactiondisabled{color:#aaa!important}button.mainaction,input.mainaction{font-weight:700!important}button:not(:disabled){cursor:pointer}form.smart-upload,input.smart-upload{visibility:hidden;width:1px;height:1px;opacity:0}a.button,.buttongroup{display:inline-block;margin:0 2px;padding:2px 5px;color:#525252;border:1px solid #c6c6c6;border-radius:4px;background:#e6e6e6;text-decoration:none}.buttongroup{padding:0;white-space:nowrap}button:focus,a.button:focus,input.button:focus{border-color:#017db6;box-shadow:0 0 2px 1px rgba(71,135,177,.6);outline:0}label.disabled,button.disabled,a.button.disabled{color:#999}a.button.disabled,input.button.disabled,input.buttondisabled,button.disabled,buttondisabled,button.disabled:hover,buttondisabled:hover,a.button.disabled:hover,input.button.disabled:hover,input.buttondisabled:hover{border-color:#c6c6c6}.buttongroup a.button{margin:0;border-width:0 1px 0 0;border-radius:0;background:0 0}.buttongroup a.button.first,.buttongroup a.button:first-child{border-radius:4px 0 0 4px;border-left:0}.buttongroup a.button.last,.buttongroup a.button:last-child{border-radius:0 4px 4px 0;border-right:0}a.button.pressed,a.button:active,button:active,input.button:active{background:#f7f7f7}.pagenav.dark a.button{font-weight:700;border:0;background:0 0;margin:0}.pagenav.dark a.button.pressed{background:#d8d8d8}.buttongroup a.button.selected,.buttongroup a.button.selected:hover{background:#8a8a8a;border-right-color:#8a8a8a;border-left-color:#555}.buttongroup a.button:focus,.buttongroup a.button.selected:focus{background:#f2f2f2;background:-moz-linear-gradient(top,#49b3d2 0,#66bcd9 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#49b3d2),color-stop(100%,#66bcd9));background:-ms-linear-gradient(top,#49b3d2 0,#66bcd9 100%);background:linear-gradient(to bottom,#49b3d2 0,#66bcd9 100%)}.pagenav a.button{padding:1px 3px;height:16px;vertical-align:middle;margin-bottom:1px}.pagenav .buttongroup a.button,.pagenav .buttongroup a.button:hover{padding:1px 5px;margin-bottom:0}a.button span.icon,.pagenav a.button span.inner{display:inline-block;width:16px;height:13px;text-indent:1000px;overflow:hidden;background:url(images/buttons.png?v=2e08.13608) -6px -211px no-repeat}a.button.prevpage span.icon,.pagenav a.prevpage span.inner{background-position:-7px -226px}a.button.nextpage span.icon,.pagenav a.nextpage span.inner{background-position:-28px -226px}a.button.lastpage span.icon,.pagenav a.lastpage span.inner{background-position:-28px -211px}a.button.pageup span.icon,.pagenav a.pageup span.inner{background-position:-7px -241px}a.button.pagedown span.icon,.pagenav a.pagedown span.inner{background-position:-29px -241px}a.button.reply span.icon,.pagenav a.reply span.inner{background-position:-7px -256px}a.button.forward span.icon,.pagenav a.forward span.inner{background-position:-29px -256px}a.button.replyall span.icon,.pagenav a.replyall span.inner{background-position:-7px -271px}a.button.extwin span.icon,.pagenav a.extwin span.inner{background-position:-29px -271px}a.button.changeformat.html span.icon,.pagenav a.changeformat.html span.inner{background-position:-7px -1859px}a.button.changeformat.html.selected span.icon,.pagenav a.changeformat.html.selected span.inner{background-position:-29px -1859px}a.button.changeformat.text span.icon,.pagenav a.changeformat.text span.inner{background-position:-7px -1874px}a.button.changeformat.text.selected span.icon,.pagenav a.changeformat.text.selected span.inner{background-position:-29px -1874px}a.button.add span.icon{background-position:-7px -2009px}a.button.delete span.icon{background-position:-29px -2009px}.pagenav .countdisplay{display:inline-block;padding:3px 1em 0 1em;min-width:16em}.pagenavbuttons{position:relative;top:-2px}.pagenav .pagejumper{text-align:center;padding:3px 0;cursor:default}a.iconbutton{display:inline-block;width:20px;height:18px;text-decoration:none;text-indent:-5000px;background:url(images/buttons.png?v=2e08.13608) -1000px 0 no-repeat}a.iconbutton.disabled{opacity:.4;cursor:default}a.iconbutton.searchicon,a.iconbutton.searchoptions{width:24px;background-position:-2px -317px}a.iconbutton.searchicon{width:15px}a.iconbutton.reset{width:24px;background-position:-25px -317px}a.iconbutton.remove,a.iconbutton.cancel{background-position:-7px -378px}a.iconbutton.delete{background-position:-7px -338px}a.iconbutton.add{background-position:-7px -358px}a.iconbutton.remove{background-position:-7px -379px}a.iconbutton.cancel{background-position:-7px -398px}a.iconbutton.edit{background-position:-7px -418px}a.iconbutton.upload{background-position:-6px -438px}a.iconlink{display:inline-block;color:#888;text-decoration:none;white-space:nowrap;padding:2px 8px 2px 20px;background:url(images/buttons.png?v=2e08.13608) -1000px 0 no-repeat}a.iconlink:hover{text-decoration:underline}a.iconlink.delete{background-position:-7px -337px}a.iconlink.add{background-position:-7px -357px}a.iconlink.remove{background-position:-7px -378px}a.iconlink.cancel{background-position:-7px -397px}a.iconlink.edit{background-position:-7px -417px}a.iconlink.upload{background-position:-6px -437px}#message div.loading,#message div.uploading,#message div.warning,#message div.error,#message div.notice,#message div.confirmation,#message-objects div.notice{color:#555;font-weight:700;padding:6px 30px 6px 25px;display:inline-block;white-space:nowrap;background:url(images/messages.png?v=72e9.1264) 0 5px no-repeat;cursor:default}#message div.warning{color:#960;background-position:0 -86px}#message div.error{color:#cf2734;background-position:0 -57px}#message div.confirmation{color:#093;background-position:0 -25px}#message div.loading{background:url(images/ajaxloader.gif?v=c252.1434) 2px 6px no-repeat}#message div a,#message div span{padding-right:.5em;text-decoration:none}#message div a:hover{text-decoration:underline;cursor:pointer}#message.statusbar{display:none;position:absolute;bottom:0;left:0;right:0;height:27px;padding-left:8px;border-top:1px solid #ddd;border-radius:0 0 4px 4px;background:#eaeaea;background:-moz-linear-gradient(top,#eaeaea 0,#c8c8c8 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#eaeaea),color-stop(100%,#c8c8c8));background:-ms-linear-gradient(top,#eaeaea 0%,#c8c8c8 100%);background:linear-gradient(to bottom,#eaeaea 0,#c8c8c8 100%);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#messagestack{position:absolute;bottom:20px;right:12px;z-index:50000;width:auto;height:auto;max-height:85%;overflow-y:auto;padding:2px}#messagestack div{display:block;position:relative;width:280px;height:auto;min-height:16px;margin:3px 2px 5px 2px;padding:8px 10px 7px 30px;cursor:default;font-size:12px;font-weight:700;border-radius:4px;border:1px solid #444;color:#ebebeb;background:rgba(64,64,64,.85);background:-moz-linear-gradient(top,rgba(64,64,64,.85) 0,rgba(48,48,48,.9) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,rgba(64,64,64,.85)),color-stop(100%,rgba(48,48,48,.9)));background:-webkit-linear-gradient(top,rgba(64,64,64,.85) 0,rgba(48,48,48,.85) 100%);background:-ms-linear-gradient(top,rgba(64,64,64,.85) 0%,rgba(48,48,48,.85) 100%);background:linear-gradient(to bottom,rgba(64,64,64,.85) 0,rgba(48,48,48,.85) 100%)}#messagestack div:after{content:"";position:absolute;display:block;top:0;left:4px;width:20px;height:24px;background:url(images/messages_dark.png?v=8e53.601) 0 7px no-repeat}#messagestack div.error{color:#ff615d}#messagestack div.error:after{background-position:0 -55px}#messagestack div.warning{color:#f4bf0e}#messagestack div.warning:after{background-position:0 -84px}#messagestack div.confirmation{color:#00e05a}#messagestack div.confirmation:after{background-position:0 -25px}#messagestack div.uploading,#messagestack div.loading{color:#ddd}#messagestack div.uploading:after,#messagestack div.loading:after{top:4px;left:6px;background:url(images/ajaxloader_dark.gif?v=cf1b.1849) 0 4px no-repeat}#messagestack div.voice{position:absolute;top:-1000px}#messagestack div a{color:#94c0da}#messagestack div a:hover{text-decoration:underline;cursor:pointer}.ui-dialog.error .ui-dialog-title,.ui-dialog.warning .ui-dialog-title,.ui-dialog.confirmation .ui-dialog-title{padding-left:25px;background:url(images/messages.png?v=72e9.1264) 0 5px no-repeat}.ui-dialog.warning .ui-dialog-title{color:#960;background-position:0 -91px}.ui-dialog.error .ui-dialog-title{color:#cf2734;background-position:0 -62px}.ui-dialog.confirmation .ui-dialog-title{color:#093;background-position:0 -32px}.ui-autocomplete{max-height:160px;overflow-x:hidden;overflow-y:auto}#header{overflow-x:hidden}#topline{height:18px;background-color:#333;border-bottom:1px solid #383838;padding:2px 0 2px 10px;color:#aaa;text-align:center}#topnav{position:relative;height:46px;margin-bottom:10px;padding:0 0 0 10px;background:#1c1c1c}#topline a,#topnav a{color:#eee;text-decoration:none}#topline a:hover{text-decoration:underline}#toplogo{padding-top:2px;cursor:pointer;border:0}.topleft{float:left}.topright{float:right}.closelink{display:inline-block;padding:2px 10px 2px 20px}#topline span.username{padding-right:1em}#topline .topleft a{display:inline-block;padding:2px .8em 0 0;color:#aaa}#topline a.button-logout{display:inline-block;padding:2px 10px 2px 20px;background:url(images/buttons.png?v=2e08.13608) -6px -193px no-repeat;color:#fff}#taskbar .button-logout{display:none}#taskbar a.button-logout span.button-inner{background-position:-2px -1791px}#taskbar a.button-logout:hover span.button-inner{background-position:-2px -1829px}.minimal #topline{position:fixed;top:-18px;background:#444;z-index:5000;width:100%;height:22px;-moz-box-sizing:border-box;box-sizing:border-box}.minimal #topline:hover{top:0;opacity:.94;-webkit-transition:top .3s ease-in-out;-moz-transition:top .3s ease-in-out;transition:top .3s ease-in-out}.extwin #topline,.extwin #topline:hover{position:static;top:0;height:18px;width:auto;-moz-box-sizing:content-box;box-sizing:content-box;opacity:.999}.minimal #topline a.button-logout{display:none}.minimal #topline span.username{display:inline-block;padding-top:2px}.minimal #topnav{position:relative;top:4px;height:42px}.minimal #taskbar a{position:relative;padding:10px 10px 0 6px;height:32px}.minimal #taskbar .button-logout{display:inline-block}.minimal #taskbar .button-inner{top:-4px;padding:0;height:24px!important;width:27px;text-indent:-5000px}#taskbar .tooltip{display:none}.minimal #taskbar .tooltip{position:absolute;top:-500px;right:2px;display:inline-block;padding:2px 8px 3px 8px;background:#444;color:#eee;font-weight:700;white-space:nowrap;box-shadow:0 1px 4px 0 #333;z-index:200;white-space:nowrap}.minimal #taskbar .tooltip:after{content:"";position:absolute;top:-4px;right:15px;border-style:solid;border-width:0 4px 4px;border-color:#444 transparent;display:block;width:0;z-index:251}.minimal #taskbar a:hover .tooltip{display:block;top:39px}#taskbar{position:relative;padding-right:18px}#taskbar a{display:inline-block;height:34px;padding:12px 10px 0 6px}#taskbar a span.button-inner{display:inline-block;font-size:110%;font-weight:400;padding:5px 0 0 34px;height:19px;background:url(images/buttons.png?v=2e08.13608) -1000px 0 no-repeat}#taskbar a:focus{color:#fff;background-color:rgba(73,180,210,.7);outline:0}#taskbar a.button-selected{color:#20a6fb;background-color:#2c2c2c}#taskbar a.button-mail span.button-inner{background-position:0 2px}#taskbar a.button-mail:hover span.button-inner,#taskbar a.button-mail.button-selected span.button-inner{background-position:0 -22px}#taskbar a.button-addressbook span.button-inner{background-position:0 -48px}#taskbar a.button-addressbook:hover span.button-inner,#taskbar a.button-addressbook.button-selected span.button-inner{background-position:0 -72px}#taskbar a.button-settings span.button-inner{background-position:0 -96px}#taskbar a.button-settings:hover span.button-inner,#taskbar a.button-settings.button-selected span.button-inner{background-position:0 -120px}#taskbar a.button-calendar span.button-inner{background-position:0 -144px}#taskbar a.button-calendar:hover span.button-inner,#taskbar a.button-calendar.button-selected span.button-inner{background-position:0 -168px}#taskbar .minmodetoggle{position:absolute;top:0;right:0;display:block;width:19px;height:46px;cursor:pointer;background:url(images/buttons.png?v=2e08.13608) -35px -1778px no-repeat}.minimal #taskbar .minmodetoggle{height:42px;background-position:-35px -1820px}#mainscreen{position:absolute;top:88px;left:10px;right:10px;bottom:20px}#mainscreencontent{position:absolute;top:42px;left:0;right:0;bottom:0}#mainscreen.offset{top:132px}#mainscreen .offset{top:42px}.minimal #mainscreen{top:62px}.minimal #mainscreen.offset{top:102px}.extwin #mainscreen{top:40px}.extwin #mainscreen.offset{top:86px}.uibox{border:1px solid #b2b8bf;border-radius:4px;overflow:hidden;background:#fff}.minwidth{min-width:1024px}.scroller{overflow:auto}.watermark{background-image:url(images/watermark.jpg?v=e784.5000);background-position:center;background-repeat:no-repeat}@media screen and (-webkit-min-device-pixel-ratio:0) and (max-device-width:1024px){.iframebox{overflow:auto;-webkit-overflow-scrolling:touch}}.listbox{background:#d9ecf4;overflow:hidden}.listbox .scroller{position:absolute;top:0;left:0;width:100%;bottom:0;overflow-x:hidden;overflow-y:auto}.listbox .scroller.withfooter{bottom:42px}.listbox .boxtitle+.scroller{top:34px}.boxtitle,.uibox .listing thead th,.uibox .listing thead td{font-size:12px;font-weight:700;padding:7px 8px 6px 8px;line-height:20px;margin:0;border-bottom:1px solid #bbd3da;white-space:nowrap}.uibox .listing thead th,.uibox .listing thead td{padding-bottom:8px;height:auto}.uibox .boxtitle,.uibox .listing thead th,.uibox .listing thead td{background:#b0ccd7;color:#004458}.listbox .listitem,.listbox .tablink,.listing tbody td,.listing li{display:block;border-bottom:1px solid #bbd3da;cursor:default;font-weight:400}.listbox .listitem a,.listbox .listitem span,.listbox .tablink a,.listing tbody td,.listing li a{display:block;color:#376572;text-decoration:none;cursor:default;padding:5px 8px;line-height:17px;height:17px;white-space:nowrap}.listing tbody td{display:table-cell;min-height:14px;outline:0}.listing tbody td a{color:#376572;text-decoration:none}.webkit .listing tbody td{height:14px}.listing thead tr td:first-child,.listing tbody tr td:first-child{border-left:2px solid transparent;padding-left:6px}.listing.iconized thead tr td:first-child,.listing.iconized tbody tr td:first-child{padding-left:34px}.listing.focus tbody tr.focused>td:first-child{border-left:2px solid #739da8}.listbox .listitem.selected,.listbox .tablink.selected,.listbox .listitem.selected>a,.listbox .tablink.selected>a,.listing tbody tr.selected td,.listing li.selected,.listing li.selected>a{color:#004458;font-weight:700;background-color:#c7e3ef}ul.listing{display:block;list-style:none;margin:0;padding:0}ul.listing li{background-color:#d9ecf4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ul.listing li ul{border-top:1px solid #bbd3da}ul.listing li.droptarget,table.listing tr.droptarget td{background-color:#e8e798}.listbox table.listing{background-color:#d9ecf4}table.listing,table.layout{border:0;width:100%;border-spacing:0}table.layout td{vertical-align:top}ul.treelist li{position:relative}ul.treelist li ul{margin:0;padding:0}ul.treelist li ul li:last-child{border-bottom:0}ul.treelist li a{display:block;padding-left:20px;overflow:hidden;text-overflow:ellipsis}ul.treelist li a:focus,ul.listing .listitem a:focus,ul.listing .listitem span:focus,ul.listing.focus .listitem.focused span{color:#fff!important;background-color:rgba(73,180,210,.6);outline:0}ul.treelist ul li a{padding-left:38px}ul.treelist ul ul li a{padding-left:54px}ul.treelist.iconized li a{padding-left:36px}ul.treelist.iconized ul li a{padding-left:62px}ul.treelist.iconized ul ul li a{padding-left:88px}ul.treelist.iconized ul ul ul li a{padding-left:114px}ul.treelist li div.treetoggle{position:absolute;top:7px;left:4px;width:13px;height:13px;background:url(images/listicons.png?v=ce39.10766) -3px -144px no-repeat;cursor:pointer}ul.treelist li ul li div.treetoggle{left:22px}ul.treelist.iconized li div.treetoggle{top:13px;left:19px}ul.treelist.iconized ul li div.treetoggle{left:45px}ul.treelist.iconized ul ul li div.treetoggle{left:71px}ul.treelist li div.treetoggle.expanded{background-position:-3px -168px}ul.treelist li.selected>div.collapsed{background-position:-23px -144px}ul.treelist li.selected>div.expanded{background-position:-23px -168px}.listbox .boxfooter{position:absolute;bottom:0;left:0;width:100%;height:42px;border-top:1px solid #bbd3da;background:#d9ecf4;white-space:nowrap;overflow:hidden}.uibox .boxfooter{border-radius:0 0 4px 4px}.boxfooter .listbutton{display:inline-block;text-decoration:none;width:48px;border-right:1px solid #fff;background:#c7e3ef;padding:3px 0;margin-top:1px}.boxfooter a.listbutton:focus{color:#fff;background-color:rgba(73,180,210,.6);outline:0}.uibox .boxfooter .listbutton:first-child{border-radius:0 0 0 4px}.boxfooter .listbutton .inner{display:inline-block;width:48px;height:35px;text-indent:-5000px;background-image:url(images/buttons.png?v=2e08.13608);background-position:-1000px 0;background-repeat:no-repeat}.boxfooter .listbutton.add .inner{background-position:10px -1301px}.boxfooter .listbutton.delete .inner{background-position:10px -1342px}.boxfooter .listbutton.groupactions .inner{background-position:5px -1382px}.boxfooter .listbutton.addto .inner{background-position:5px -1422px}.boxfooter .listbutton.addcc .inner{background-position:5px -1462px}.boxfooter .listbutton.addbcc{width:54px}.boxfooter .listbutton.addbcc .inner{width:54px;background-position:2px -1502px}.boxfooter .listbutton.removegroup .inner{background-position:5px -1540px}.boxfooter .listbutton.disabled .inner{opacity:.4}.boxfooter .countdisplay{display:inline-block;position:relative;top:10px;color:#69929e;padding:3px 6px}.boxpagenav{position:absolute;top:10px;right:6px;width:auto}.boxpagenav a.icon{display:inline-block;padding:1px 3px;height:13px;width:14px;text-indent:1000px;vertical-align:bottom;overflow:hidden;background:url(images/buttons.png?v=2e08.13608) -4px -286px no-repeat}.boxpagenav a.icon.prevpage{background-position:-4px -301px}.boxpagenav a.icon.nextpage{background-position:-28px -301px}.boxpagenav a.icon.lastpage{background-position:-28px -286px}.boxpagenav a.icon.disabled{opacity:.4}.centerbox{width:40em;margin:16px auto}.errorbox{width:40em;padding:20px}.errorbox h3{font-size:16px;margin-top:0}table.records-table{display:table;width:100%;table-layout:fixed;border-spacing:0;border:1px solid #bbd3da}.boxlistcontent .records-table{border:0}.records-table thead th,.records-table thead td{color:#69939e;font-size:11px;font-weight:700;background:#d6eaf3;border-left:1px solid #bbd3da;padding:8px 7px;overflow:hidden;text-overflow:ellipsis;text-align:left}.records-table.sortheader thead th,.records-table.sortheader thead td{padding:0}.records-table thead th a,.records-table thead td a,.records-table thead th span,.records-table thead td span{display:block;padding:7px 7px;color:#69939e;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.records-table thead th a:focus,.records-table thead td a:focus{color:#fff;background-color:rgba(73,180,210,.7);outline:0}.records-table tbody td{padding:2px 7px;border-bottom:1px solid #ddd;border-left:1px dotted #bbd3da;white-space:nowrap;cursor:default;overflow:hidden;text-overflow:ellipsis;background-color:#fff;outline:0}.records-table thead tr th:first-child,.records-table thead tr td:first-child,.records-table tbody tr td:first-child{border-left:2px solid transparent;padding-left:4px}.records-table.focus tbody tr.focused>td:first-child{border-left:2px solid #49b3d2}.records-table tr.selected td{color:#fff!important;background-color:#4db0d2}.records-table.focus tr.selected td{background-color:#017db6!important}.records-table tr.selected td a,.records-table tr.selected td span{color:#fff!important}.records-table tr.deleted td,.records-table tr.deleted td a{color:#ccc!important}#aboutframe{width:97%;height:100%;border:0;padding:0}body.iframe{background:#fff;margin:38px 0 10px 0}body.iframe.error{background:#ededed}body.iframe.floatingbuttons{margin-bottom:40px}body.iframe.fullheight{margin:0}.contentbox .boxtitle,body.iframe .boxtitle{color:#777;background:#efefef;border-bottom:1px solid #d0d0d0}body.iframe .boxtitle{position:fixed;top:0;left:0;width:100%;z-index:100}body.iframe .footerleft.floating,#composeview-bottom .formbuttons.floating{position:fixed;left:0;bottom:0;width:100%;z-index:110;background:#fff;padding-top:8px;padding-bottom:12px}body.iframe .footerleft.floating:before,#composeview-bottom .formbuttons.floating:before{content:" ";position:absolute;top:-6px;left:0;width:100%;height:6px;background:url(images/overflowshadow.png?v=ac21.201) top center no-repeat}.boxcontent{padding:10px}.boxcontent .boxwarning{margin:0 0 10px;display:block;color:#960;border:1px solid #ffdf0e;background:url(images/messages.png?v=72e9.1264) #fef893 5px -85px no-repeat;padding:6px 12px 6px 30px}.boxcontent .boxinformation{margin:0 0 10px;display:block;color:#444;border:1px solid #888;background:url(images/messages.png?v=72e9.1264) #ddd 5px 4px no-repeat;padding:6px 12px 6px 30px}.contentbox .scroller{position:absolute;top:34px;left:0;right:0;bottom:0;overflow:auto}.iframebox{position:absolute;top:0;left:0;right:0;bottom:0}.footerleft{padding:0 12px 4px 12px}.propform fieldset{margin-bottom:20px;border:0;padding:0}.propform fieldset legend{display:block;font-size:14px;font-weight:700;padding-bottom:10px;margin-bottom:0}.propform fieldset fieldset legend{color:#666;font-size:12px}.propform div.prop{margin-bottom:.5em}.propform div.prop.block label{display:block;margin-bottom:.3em}.propform div.prop.block input,.propform div.prop.block textarea{width:95%}.propform a.disabled{color:#999;text-decoration:none;cursor:default}fieldset.floating{float:left;margin-right:10px;margin-bottom:10px}table.propform{width:100%;border-spacing:0;border-collapse:collapse}ul.proplist li,table.propform td{width:80%;padding:4px 10px;background:#eee;border-bottom:2px solid #fff}table.propform td.title{width:20%;color:#333;padding-right:20px;white-space:nowrap}ul.proplist{list-style:none;margin:0;padding:0}ul.proplist li{width:auto}ul.proplist.simplelist li{border:0;background:0 0}#pluginbody{position:absolute;top:0;left:0;right:0;bottom:0}.formcontent input,.formcontent textarea{width:95%}.formcontent .hint{font-style:italic;margin-bottom:1em}#login-form{position:relative;width:580px;margin:20ex auto 2ex auto}#login-form .box-inner{width:430px;background:#404040;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#404040),color-stop(100%,#2e2e2e));background:-ms-linear-gradient(top,#404040 0%,#2e2e2e 100%);background:linear-gradient(to bottom,#404040 0,#2e2e2e 100%);margin:0 50px;padding:10px 24px 24px 24px;border-radius:6px}#login-form .box-bottom{margin-top:-3px;padding-top:10px}#login-form .noscriptwarning{margin:0 auto;width:430px;color:#cf2734;font-size:110%;font-weight:700}#login-form td.input{width:80%;padding:8px}#login-form inputtype=text,#login-form inputtype=email,#login-form inputtype=password{width:100%;border-color:#666}#login-form .button{color:#444;border-color:#f9f9f9;background-color:#f9f9f9}#login-form .button:active{color:#333;background-color:#dcdcdc}#login-form form table{width:98%}#login-form td.title{width:20%;white-space:nowrap;color:#cecece;text-align:right;padding-right:1em}#login-form p.formbuttons{margin-top:2em;text-align:center}#login-form p.oauthlogin{margin-top:1.5em;padding-top:1.5em;text-align:center}#login-form p.formbuttons+p.oauthlogin{border-top:1px solid #666}#login-form p.oauthlogin .button.oauth.google,#login-form p.oauthlogin .button.oauth.outlook{line-height:1.5}#login-form p.oauthlogin .button.oauth.google:before,#login-form p.oauthlogin .button.oauth.outlook:before{content:" ";display:inline-block!important;height:1.6em;width:1.4em;margin-right:.5em!important;background-size:100% auto;vertical-align:middle}#login-form p.oauthlogin .button.oauth.google:before{background:url(./images/google-icon.svg) top left no-repeat}#login-form p.oauthlogin .button.oauth.outlook:before{background:url(./images/microsoft-icon.svg) top left no-repeat}#login-form #logo{margin-bottom:20px;border:0}#login-form #message{min-height:40px;padding:5px 25px;text-align:center;font-size:1.1em}#login-form #message div{display:inline-block;padding-right:0;font-size:12px}#bottomline{font-size:90%;text-align:center;margin-top:2em}.searchbox{position:relative}#quicksearchbar{position:absolute;right:2px;top:2px;width:240px}.searchbox input,#quicksearchbar input{width:176px;margin:0;padding:3px 30px 3px 34px;height:18px;background:#f1f1f1;border-color:#ababab;font-weight:700;font-size:11px}.searchbox .searchicon,.searchbox #searchmenulink,#quicksearchbar #searchmenulink{position:absolute;top:5px;left:6px}.searchbox #searchreset,.searchbox .iconbutton.reset,#quicksearchbar #searchreset{position:absolute;top:4px;right:1px}.listsearchbox{padding:4px;background:#c7e3ef;display:none}.listsearchbox input{width:100%;height:26px;-moz-box-sizing:border-box;box-sizing:border-box}.toolbar .spacer{display:inline-block;width:24px;height:40px;padding:0}.toolbar a.button{text-align:center;font-size:10px;color:#555;min-width:50px;max-width:70px;height:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:28px 2px 0 2px;background:url(images/buttons.png?v=2e08.13608) -100px 0 no-repeat;border:0;border-radius:0}.dropbutton .dropbuttontip:focus,.toolbar a.button:focus{color:#fff;background-color:rgba(30,150,192,.5);border-radius:3px}.toolbar a.button.disabled{opacity:.4}.toolbar a.button.selected{color:#1978a1}.toolbar a.button.selected:focus{color:#fff}.toolbar a.button.hidden{display:none}.dropbutton{display:inline-block;position:relative}.dropbutton .dropbuttontip{display:block;position:absolute;right:0;top:0;height:41px;width:18px;overflow:hidden;text-indent:-5000px;background:url(images/buttons.png?v=2e08.13608) 0 -1255px no-repeat;cursor:pointer;outline:0}.dropbutton .dropbuttontip:focus,.dropbutton .dropbuttontip:hover{background-position:-26px -1255px}.dropbutton a.button.disabled+.dropbuttontip{opacity:.5}.dropbutton a.button.disabled+.dropbuttontip:hover{background-position:0 -1255px}.dropbutton a.button{margin-left:0;padding-left:0;margin-right:0;padding-right:0}.toolbar a.button.back{background-position:0 -1216px}.toolbar a.button.checkmail{background-position:center -1176px}.toolbar a.button.compose{background-position:center -530px}.toolbar a.button.reply{background-position:center -570px}.toolbar a.button.reply-all{min-width:64px;background-position:0 -610px}.toolbar a.button.forward{min-width:64px;background-position:0 -650px}.toolbar a.button.delete{background-position:center -690px}.toolbar a.button.archive{background-position:center -730px}.toolbar a.button.junk{background-position:center -770px}.toolbar a.button.print{background-position:center -810px}.toolbar a.button.markmessage{background-position:center -1094px}.toolbar a.button.move{background-position:center -1971px}.toolbar a.button.more{background-position:center -850px}.toolbar a.button.attach{background-position:center -890px}.toolbar a.button.spellcheck{min-width:64px;background-position:0 -930px}.toolbar a.button.spellcheck.selected{background-position:0 -1620px;color:#1978a1}.toolbar a.button.insertsig{background-position:center -1135px}.toolbar a.button.search{background-position:center -970px}.toolbar a.button.import{background-position:center -1012px}.toolbar a.button.export{min-width:64px;background-position:0 -1054px}.toolbar a.button.send{background-position:center -1660px}.toolbar a.button.savedraft{background-position:center -1700px}.toolbar a.button.close{background-position:0 -1745px}.toolbar a.button.download{background-position:center -1892px}.toolbar a.button.responses{background-position:center -1932px}.toolbar a.button.encrypt{min-width:66px;background-position:center -2025px}.toolbar a.button.encrypt.selected{background-position:center -2065px}.toolbar a.button.rotate{background-position:center -2148px}.toolbar a.button.zoomin{background-position:center -2190px}.toolbar a.button.zoomout{background-position:center -2230px}a.menuselector{display:inline-block;border:1px solid #ababab;border-radius:4px;background:#f1f1f1;text-decoration:none;color:#333;cursor:pointer;white-space:nowrap}a.menuselector .handle{display:inline-block;padding:0 32px 0 6px;height:20px;line-height:19px;background:url(images/selector.png?v=0d5b.118) right center no-repeat;border-radius:4px}a.menuselector:active{background:#ddd;background:-moz-linear-gradient(top,#ddd 0,#f8f8f8 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ddd),color-stop(100%,#f8f8f8));background:-ms-linear-gradient(top,#ddd 0%,#f8f8f8 100%);background:linear-gradient(to bottom,#ddd 0,#f8f8f8 100%);text-decoration:none}select.decorated{position:relative;z-index:10;opacity:0;height:22px;cursor:pointer;-khtml-appearance:none;-webkit-appearance:none;border:0}html.opera select.decorated{opacity:1}select.decorated option{color:#fff;background:#444;border:0;border-top:1px solid #5a5a5a;border-bottom:1px solid #333;padding:4px 6px;outline:0;cursor:default}a.menuselector:focus,a.menuselector.focus,a.iconbutton:focus,.pagenav a.button:focus{border-color:#0883d0;box-shadow:0 0 4px 2px rgba(71,135,177,.8);outline:0}#quotadisplay{left:6px;height:18px;font-size:12px;font-weight:700;padding-left:30px;background:url(images/quota.png?v=aaa4.1389) -100px 0 no-repeat}#quotadisplay.p90,#quotadisplay.p100{color:#e03221}table.quota-info{border-spacing:0;border-collapse:collapse;table-layout:fixed;margin:5px}table.quota-info td,table.quota-info th{color:#fff;border:1px solid #d3d3d3;padding:2px 3px;text-align:center;min-width:80px}table.quota-info td.name{text-align:left}table.quota-info td.root{font-style:italic}.popupmenu,#rcmKSearchpane{display:none;position:absolute;top:32px;left:90px;width:auto;max-height:70%;overflow:-moz-scrollbars-vertical;overflow-y:auto;background:#444;z-index:240;border-radius:4px;box-shadow:0 2px 6px 0 #333}.popupmenu.dropdown{border-radius:0 0 4px 4px;border-top:0}.popupmenu>.buttons{border-top:1px solid #5a5a5a;height:25px;padding-top:5px;text-align:center}ul.toolbarmenu,ul.toolbarmenu ul,#rcmKSearchpane ul{margin:0;padding:0;list-style:none}.googie_list td,ul.toolbarmenu li,#rcmKSearchpane ul li{color:#fff;white-space:nowrap;min-width:130px;margin:0;border-top:1px solid #5a5a5a}.googie_list tr:first-child td,ul.toolbarmenu>li:first-child,select.decorated option:first-child{border-top:0}.googie_list tr:last-child td,ul.toolbarmenu>li:last-child,select.decorated option:last-child{border-bottom:0}.googie_list td span,ul.toolbarmenu li a{display:block;color:#666;text-decoration:none;min-height:14px;padding:6px 16px 6px 10px}.googie_list td span{padding:3px 10px}.googie_list td span,ul.toolbarmenu li a.active{color:#fff;cursor:default}.googie_list td.googie_list_onhover,ul.toolbarmenu li a.active:hover,ul.toolbarmenu li a.active:focus,#rcmKSearchpane ul li.selected,#pagejump-selector ul li.selected,select.decorated option:hover,select.decorated optionselected=selected{background-color:#0883d0;outline:0}ul.toolbarmenu.iconized li a,ul.toolbarmenu.selectable li a{padding-left:30px}ul.toolbarmenu.selectable li a.selected{background:url(images/messages.png?v=72e9.1264) 4px -27px no-repeat}ul.toolbarmenu li label{display:block;color:#fff;padding:4px 8px}ul.toolbarmenu li.separator label{color:#bbb;font-style:italic;padding:0 8px;line-height:17px}ul.toolbarmenu li input{margin:0}ul.toolbarmenu li a.icon{color:#eee;padding:2px 6px}ul.toolbarmenu li span.icon,#rcmKSearchpane ul li i.icon{display:block;min-height:14px;padding:4px 4px 1px 24px;height:17px;background-image:url(images/listicons.png?v=ce39.10766);background-position:-100px 0;background-repeat:no-repeat;opacity:.2}ul.toolbarmenu li a.active span.icon{opacity:.99}ul.toolbarmenu li span.read{background-position:0 -1220px}ul.toolbarmenu li span.unread{background-position:0 -1196px}ul.toolbarmenu li span.flagged{background-position:0 -1244px}ul.toolbarmenu li span.unflagged{background-position:0 -1268px}ul.toolbarmenu li span.mail{background-position:0 -1293px}ul.toolbarmenu li span.list{background-position:0 -1317px}ul.toolbarmenu li span.invert{background-position:0 -1340px}ul.toolbarmenu li span.cross{background-position:0 -1365px}ul.toolbarmenu li span.print{background-position:0 -1436px}ul.toolbarmenu li span.download{background-position:0 -1412px}ul.toolbarmenu li span.rename{background-position:0 -2295px}ul.toolbarmenu li span.edit{background-position:0 -1388px}ul.toolbarmenu li span.viewsource{background-position:0 -1460px}ul.toolbarmenu li span.extwin{background-position:0 -1484px}ul.toolbarmenu li span.conversation{background-position:0 -1532px}ul.toolbarmenu li span.move{background-position:0 -2126px}ul.toolbarmenu li span.copy{background-position:0 -2150px}#pagejump-selector{max-height:250px;overflow-x:hidden}#pagejump-selector ul li{min-width:45px;padding:4px 6px;cursor:default}#snippetslist{max-width:200px}#snippetslist li a{overflow:hidden;text-overflow:ellipsis}#rcmKSearchpane{border-radius:0 0 4px 4px;border-top:0}#rcmKSearchpane ul li{text-decoration:none;min-height:14px;padding:6px 10px 6px 28px;border:0;cursor:default;position:relative;overflow:hidden;text-overflow:ellipsis}#rcmKSearchpane ul li i.icon{opacity:.99;position:absolute;top:4px;left:5px;width:18px;height:18px;padding:0;background-position:-1px -2223px}#rcmKSearchpane ul li.group i.icon{background-position:-1px -2247px}.popupdialog{display:none;padding:10px}.popupdialog .formbuttons{margin:20px 0 4px 0}.ui-dialog .prompt input{display:block;margin:8px 0}.ui-dialog iframe{width:100%;height:100%;border:0}.ui-dialog-content.iframe{padding:0!important;overflow:hidden!important}.hint{margin:4px 0;color:#999}.splitter{user-select:none;-moz-user-select:none;-khtml-user-select:none;position:absolute;background:url(images/splitter.png?v=6d32.134) center no-repeat}.splitter-h{height:10px;width:100%;cursor:n-resize;cursor:row-resize;background-position:center 0}.splitter-v{width:10px;height:100%;cursor:e-resize;cursor:col-resize;background-position:0 center}#rcmdraglayer{min-width:260px;width:auto!important;width:260px;padding:6px 8px;background:#444;border:1px solid #555;border-radius:4px;box-shadow:0 2px 6px 0 #333;z-index:250;color:#ccc;white-space:nowrap;opacity:.92}#rcmdraglayer:after{content:"";position:absolute;top:6px;left:-6px;border-style:solid;border-width:6px 6px 6px 0;border-color:transparent #444;display:block;width:0;z-index:251}.draglayercopy:before{position:absolute;bottom:-6px;left:-6px;content:" ";width:16px;height:16px;background:url(images/buttons.png?v=2e08.13608) -7px -358px no-repeat;z-index:255}.popup label>input{margin-left:10px}#folder-selector{z-index:1000}#folder-selector li a span{background:url(images/listicons.png?v=ce39.10766) 4px -2021px no-repeat;display:block;height:17px;min-height:14px;padding:4px 4px 1px 28px;overflow:hidden;max-width:120px;text-overflow:ellipsis}#folder-selector li a.virtual span{opacity:.2}#folder-selector li.inbox span{background-position:4px -2049px}#folder-selector li.drafts span{background-position:4px -1388px}#folder-selector li.sent span{background-position:4px -2074px}#folder-selector li.trash span{background-position:4px -1508px}#folder-selector li.junk span{background-position:4px -2100px}.folderlist li.mailbox a{padding-left:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background-image:url(images/listicons.png?v=ce39.10766);background-repeat:no-repeat;background-position:6px 3px}.folderlist li.mailbox.unread>a{padding-right:36px}.folderlist li.mailbox>a:focus,.folderlist li.mailbox.selected>a{background-position:6px -21px}.folderlist li.mailbox.inbox>a{background-position:6px -189px}.folderlist li.mailbox.inbox>a:focus,.folderlist li.mailbox.inbox.selected>a{background-position:6px -213px}.folderlist li.mailbox.drafts>a{background-position:6px -238px}.folderlist li.mailbox.drafts>a:focus,.folderlist li.mailbox.drafts.selected>a{background-position:6px -262px}.folderlist li.mailbox.sent>a{background-position:6px -286px}.folderlist li.mailbox.sent>a:focus,.folderlist li.mailbox.sent.selected>a{background-position:6px -310px}.folderlist li.mailbox.junk>a{background-position:6px -334px}.folderlist li.mailbox.junk>a:focus,.folderlist li.mailbox.junk.selected>a{background-position:6px -358px}.folderlist li.mailbox.trash>a{background-position:6px -382px}.folderlist li.mailbox.trash>a:focus,.folderlist li.mailbox.trash.selected>a{background-position:6px -406px}.folderlist li.mailbox.trash.empty>a{background-position:6px -1924px}.folderlist li.mailbox.trash.empty>a:focus,.folderlist li.mailbox.trash.empty.selected>a{background-position:6px -1948px}.folderlist li.mailbox.archive>a{background-position:6px -1699px}.folderlist li.mailbox.archive>a:focus,.folderlist li.mailbox.archive.selected>a{background-position:6px -1723px}.folderlist li.mailbox ul li.drafts>a{background-position:23px -238px}.folderlist li.mailbox ul li.drafts>a:focus,.folderlist li.mailbox ul li.drafts.selected>a{background-position:23px -262px}.folderlist li.mailbox ul li.sent>a{background-position:23px -286px}.folderlist li.mailbox ul li.sent>a:focus,.folderlist li.mailbox ul li.sent.selected>a{background-position:23px -310px}.folderlist li.mailbox ul li.junk>a{background-position:23px -334px}.folderlist li.mailbox ul li.junk>a:focus,.folderlist li.mailbox ul li.junk.selected>a{background-position:23px -358px}.folderlist li.mailbox ul li.trash>a{background-position:23px -382px}.folderlist li.mailbox ul li.trash>a:focus,.folderlist li.mailbox ul li.trash.selected>a{background-position:23px -406px}.folderlist li.mailbox ul li.trash.empty>a{background-position:23px -1924px}.folderlist li.mailbox ul li.trash.empty>a:focus,.folderlist li.mailbox ul li.trash.empty.selected>a{background-position:23px -1948px}.folderlist li.mailbox ul li.archive>a{background-position:23px -1699px}.folderlist li.mailbox ul li.archive>a:focus,.folderlist li.mailbox ul li.archive.selected>a{background-position:23px -1723px}.folderlist li.virtual>a{color:#aaa}.folderlist li.mailbox div.treetoggle{top:13px;left:19px}.folderlist li.mailbox ul li:last-child{border-bottom:0}.folderlist li.mailbox ul{list-style:none;margin:0;padding:0;border-top:1px solid #bbd3da}.folderlist li.mailbox ul li a{padding-left:52px;background-position:22px -93px}.folderlist li.mailbox ul li>a:focus,.folderlist li.mailbox ul li.selected>a{background-position:22px -117px}.folderlist li.mailbox ul li div.treetoggle{left:33px;top:14px}.folderlist li.mailbox ul ul li.mailbox a{padding-left:68px;background-position:38px -93px}.folderlist li.mailbox ul ul li>a:focus,.folderlist li.mailbox ul ul li.selected>a{background-position:38px -117px}.folderlist li.mailbox ul ul li div.treetoggle{left:48px}.folderlist li.mailbox ul ul ul li.mailbox a{padding-left:84px;background-position:54px -93px}.folderlist li.mailbox ul ul ul li>a:focus,.folderlist li.mailbox ul ul ul li.selected>a{background-position:54px -117px}.folderlist li.mailbox ul ul ul li div.treetoggle{left:64px}.folderlist li.mailbox ul ul ul ul li.mailbox a{padding-left:100px;background-position:70px -93px}.folderlist li.mailbox ul ul ul ul li>a:focus,.folderlist li.mailbox ul ul ul ul li.selected>a{background-position:70px -117px}.folderlist li.mailbox ul ul ul ul li div.treetoggle{left:80px}.folderlist li.mailbox ul ul ul ul ul li{padding-left:16px}.folderlist li.mailbox ul ul ul ul ul li div.treetoggle{left:96px}.attachmentslist{list-style:none;margin:0;padding:0;overflow:hidden;text-overflow:ellipsis}.attachmentslist li{display:block;position:relative;background:url(images/filetypes.png?v=a0f5.4718) 0 0 no-repeat;margin-bottom:1px;line-height:24px}.attachmentslist li.txt,.attachmentslist li.text{background-position:0 -416px}.attachmentslist li.pdf{background-position:0 -26px}.attachmentslist li.doc,.attachmentslist li.docx,.attachmentslist li.msword{background-position:0 -52px}.attachmentslist li.odt{background-position:0 -78px}.attachmentslist li.xls,.attachmentslist li.xlsx,.attachmentslist li.msexcel{background-position:0 -104px}.attachmentslist li.ods{background-position:0 -130px}.attachmentslist li.zip,.attachmentslist li.gz{background-position:0 -156px}.attachmentslist li.rar{background-position:0 -182px}.attachmentslist li.image{background-position:0 -208px}.attachmentslist li.jpg,.attachmentslist li.jpeg{background-position:0 -234px}.attachmentslist li.png{background-position:0 -260px}.attachmentslist li.m4p{background-position:0 -286px}.attachmentslist li.mp3,.attachmentslist li.audio{background-position:0 -312px}.attachmentslist li.video{background-position:0 -338px}.attachmentslist li.ics,.attachmentslist li.calendar{background-position:0 -364px}.attachmentslist li.vcard{background-position:0 -390px}.attachmentslist li.sig,.attachmentslist li.pgp-signature,.attachmentslist li.pkcs7-signature{background-position:0 -442px}.attachmentslist li.html{background-position:0 -468px}.attachmentslist li.eml,.attachmentslist li.rfc822{background-position:0 -494px}.attachmentslist li.ppt,.attachmentslist li.pptx,.attachmentslist li.ppsx,.attachmentslist li.vnd.mspowerpoint{background-position:0 -520px}.attachmentslist li.odp,.attachmentslist li.otp{background-position:0 -546px}.attachmentslist li.application.asc{background-position:0 -598px}.attachmentslist li.application.pgp-keys{background-position:0 -572px}.attachmentslist li a{display:block;color:#333;font-weight:700;padding:3px 15px 3px 30px;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px;outline:0}.attachmentslist li a.drop{background:url(images/buttons.png?v=2e08.13608) no-repeat center -1570px;width:14px;height:20px;cursor:pointer;position:absolute;right:0;top:0;padding:0;overflow:hidden;text-indent:-5000px;outline:0}#compose-attachments .attachmentslist li a.drop{right:24px}.attachmentslist li a:focus,.attachmentslist li a.drop:focus{background-color:rgba(30,150,192,.5);border-radius:2px}#compose-attachments ul li{padding-right:24px}.attachmentslist li a:hover{text-decoration:underline}.attachmentslist li.uploading{background:url(images/ajaxloader.gif?v=c252.1434) 4px 4px no-repeat;padding-left:30px}.attachmentslist li a.delete,.attachmentslist li a.cancelupload{position:absolute;top:4px;right:0;width:20px;height:18px;padding:0;text-decoration:none;text-indent:-5000px;background-image:url(images/buttons.png?v=2e08.13608);background-position:-6px -338px;background-repeat:no-repeat}.attachmentslist li a.cancelupload{background-position:-6px -378px}.attachmentslist li a.filename{display:flex;overflow:hidden}.attachmentslist li .attachment-name{overflow:hidden;text-overflow:ellipsis}.attachmentslist li .attachment-size{padding:0 .25em}.tabbed.ui-tabs{padding:0;border:0!important;background:0 0}.ui-dialog .tabbed.ui-tabs{margin:-12px -8px 0 -8px}.boxcontent.tabbed.ui-tabs{padding:10px}.ui-tabs .tabsbar.ui-tabs-nav{margin-bottom:4px}.ui-dialog-content .ui-tabs .tabsbar.ui-tabs-nav{margin-bottom:0}.tabsbar .tablink:last-child{background:0 0}.tabsbar .tablink:last-child a{border-right:0}.ui-tabs .ui-tabs-nav li.tablink a{background:#fff}.ui-tabs fieldset.ui-tabs-panel{border:0;padding:0;margin-left:0;background:0 0}.ui-dialog .propform .ui-tabs-panel{display:block;background:#efefef;padding:.5em 1em}#image-selector.droptarget{background:url(images/filedrop.png?v=be5d.415) center bottom no-repeat}div.tox .tox-toolbar,div.tox .tox-toolbar__overflow,div.tox .tox-toolbar__primary{background-color:#f0f0f0}div.tox .tox-toolbar__primary{border:0}div.tox div.tox-dialog-wrap__backdrop{background:#aaa;opacity:.3}div.tox div.tox-dialog{box-shadow:1px 1px 18px #666;border-width:0}.mce-menu{z-index:65537!important}.mce-tinymce.mce-container{box-shadow:none}.mce-toolbar.mce-container{background:#f0f0f0}.pgpkeyimport div.key{position:relative;margin-bottom:2px;padding:1em;background-color:#ebebeb}.pgpkeyimport div.key.revoked,.pgpkeyimport div.key.disabled{color:#a0a0a0}.pgpkeyimport div.key label{display:inline-block;margin-right:.5em}.pgpkeyimport div.key label:after{content:":"}.pgpkeyimport div.key label+a,.pgpkeyimport div.key label+span{display:inline-block;margin-right:2em;white-space:nowrap}.pgpkeyimport div.key label+a{font-weight:700}.pgpkeyimport ul.uids{margin:1em 0 0 0;padding:0}.pgpkeyimport li.uid{border:0;padding:.3em}.pgpkeyimport div.key button.importkey{position:absolute;top:.8em;right:.8em;padding:4px 6px}.pgpkeyimport div.key buttondisabled{display:none}
3
\ No newline at end of file
4
roundcubemail-1.6.tar.gz/skins/larry/templates
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/skins/larry/templates/about.html
Deleted
23
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe fullheight">
8
-
9
-<div class="readtext">
10
-<roundcube:object name="aboutcontent" />
11
-<h2 class="sysname">Roundcube Webmail <roundcube:object name="version" /></h2>
12
-<p class="copyright"><roundcube:object name="copyright" /></p>
13
-<p class="license"><roundcube:object name="license" /></p>
14
-</div>
15
-
16
-<div class="readtext">
17
-<h3><roundcube:label name="installedplugins" /></h3>
18
-<roundcube:object name="pluginlist" id="pluginlist" class="records-table" />
19
-</div>
20
-
21
-</body>
22
-</html>
23
roundcubemail-1.6.tar.gz/skins/larry/templates/addressbook.html
Deleted
164
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<div id="mainscreen">
12
-
13
-<h1 class="voice"><roundcube:label name="addressbook" /></h1>
14
-
15
-<!-- toolbar -->
16
-<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
17
-<div id="addressbooktoolbar" class="toolbar" role="toolbar" aria-labelledby="aria-label-toolbar">
18
- <roundcube:button command="import" type="link" class="button import disabled" classAct="button import" classSel="button import pressed" label="import" title="importcontacts" />
19
- <span class="dropbutton">
20
- <roundcube:button command="export" type="link" class="button export disabled" classAct="button export" classSel="button export pressed" label="export" title="exportvcards" />
21
- <a href="#export" class="dropbuttontip" id="exportmenulink" onclick="return UI.toggle_popup('exportmenu',event)" aria-haspopup="true" aria-expanded="false" aria-owns="exportmenu-menu" tabindex="0"><roundcube:label name="arialabelcontactexportoptions" /></a>
22
- </span>
23
-
24
- <span class="spacer"></span>
25
- <roundcube:button command="compose" type="link" class="button compose disabled" classAct="button compose" classSel="button compose pressed" label="compose" title="writenewmessage" />
26
- <roundcube:button command="print" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" title="printcontact" />
27
- <roundcube:button command="advanced-search" type="link" class="button search disabled" classAct="button search" classSel="button search pressed" label="advanced" title="advsearch" />
28
- <roundcube:container name="toolbar" id="addressbooktoolbar" />
29
- <roundcube:button name="contactmenulink" id="contactmenulink" type="link" class="button more" label="more" title="moreactions" onclick="UI.toggle_popup('contactmenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="contactmenu-menu" />
30
-
31
- <div id="exportmenu" class="popupmenu" aria-hidden="true">
32
- <h3 id="aria-label-exportmenu" class="voice"><roundcube:label name="arialabelcontactexportoptions" /></h3>
33
- <ul id="exportmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-exportmenu">
34
- <roundcube:button type="link-menuitem" command="export" label="exportall" prop="sub" class="exportalllink" classAct="exportalllink active" />
35
- <roundcube:button type="link-menuitem" command="export-selected" label="exportsel" prop="sub" class="exportsellink" classAct="exportsellink active" />
36
- </ul>
37
- </div>
38
-</div>
39
-
40
-<!-- search box -->
41
-<div id="quicksearchbar" class="searchbox" role="search" aria-labelledby="aria-label-searchform">
42
-<h2 id="aria-label-searchform" class="voice"><roundcube:label name="arialabelcontactsearchform" /></h2>
43
-<label for="quicksearchbox" class="voice"><roundcube:label name="arialabelquicksearchbox" /></label>
44
-<roundcube:button command="menu-open" type="link" prop="searchmenu" id="searchmenulink" class="iconbutton searchoptions" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="searchmenu-menu" />
45
-<roundcube:object name="searchform" id="quicksearchbox" />
46
-<roundcube:button command="reset-search" type="link" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" />
47
-
48
-<div id="searchmenu" class="popupmenu" data-editable="true">
49
- <h3 id="aria-label-searchmenu" class="voice"><roundcube:label name="searchmod" /></h3>
50
- <ul class="toolbarmenu" id="searchmenu-menu" role="menu" aria-labelledby="aria-label-searchmenu">
51
- <li role="menuitem"><label><input type="checkbox" name="s_mods" value="name" id="s_mod_name" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="name" /></span></label></li>
52
- <li role="menuitem"><label><input type="checkbox" name="s_mods" value="firstname" id="s_mod_firstname" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="firstname" /></span></label></li>
53
- <li role="menuitem"><label><input type="checkbox" name="s_mods" value="surname" id="s_mod_surname" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="surname" /></span></label></li>
54
- <li role="menuitem"><label><input type="checkbox" name="s_mods" value="email" id="s_mod_email" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="email" /></span></label></li>
55
- <li role="menuitem"><label><input type="checkbox" name="s_mods" value="*" id="s_mod_all" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="allfields" /></span></label></li>
56
- </ul>
57
- <div class="buttons"><a class="button" href="#" onclick="if (rcmail.command('search')) UI.show_popup('searchmenu',false)"><roundcube:label name="search" /></a></div>
58
-</div>
59
-</div>
60
-
61
-<div id="mainscreencontent">
62
-
63
-<div id="addressview-left">
64
-
65
-<!-- sources/groups list -->
66
-<div id="directorylistbox" class="uibox listbox" role="navigation" aria-labelledby="directorylist-header">
67
-<h2 id="directorylist-header" class="boxtitle"><roundcube:label name="groups" /></h2>
68
-<div id="directorylist-content" class="scroller withfooter">
69
- <roundcube:object name="directorylist" id="directorylist" class="treelist listing iconized" />
70
- <h3 class="boxtitle voice"><roundcube:label name="savedsearches" /></h3>
71
- <roundcube:object name="savedsearchlist" id="savedsearchlist" class="treelist listing iconized" />
72
-</div>
73
-<div id="directorylist-footer" class="boxfooter">
74
- <roundcube:button command="group-create" type="link" title="newgroup" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="addgroup" /><roundcube:button name="groupoptions" id="groupoptionslink" type="link" title="moreactions" class="listbutton groupactions" onclick="return UI.toggle_popup('groupoptions',event)" innerClass="inner" label="arialabelabookgroupoptions" aria-haspopup="true" aria-expanded="false" aria-owns="groupoptionsmenu" />
75
-</div>
76
-</div>
77
-
78
-<div id="groupoptions" class="popupmenu" aria-hidden="true">
79
- <h3 id="aria-label-groupoptions" class="voice"><roundcube:label name="arialabelabookgroupoptions" /></h3>
80
- <ul id="groupoptionsmenu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-groupoptions">
81
- <roundcube:button type="link-menuitem" command="group-rename" label="grouprename" classAct="active" />
82
- <roundcube:button type="link-menuitem" command="group-delete" label="groupdelete" classAct="active" />
83
- <roundcube:button type="link-menuitem" command="search-create" label="searchsave" classAct="active" />
84
- <roundcube:button type="link-menuitem" command="search-delete" label="searchdelete" classAct="active" />
85
- <roundcube:container name="groupoptions" id="groupoptionsmenu" />
86
- </ul>
87
-</div>
88
-
89
-</div><!-- end addressview-left -->
90
-
91
-<div id="addressview-right" role="main" aria-labelledby="aria-label-contactslist">
92
-
93
-<!-- contacts list -->
94
-<div id="addresslist" class="uibox listbox">
95
-<roundcube:object name="addresslisttitle" label="contacts" tag="h2" class="boxtitle" id="aria-label-contactslist" />
96
-<div class="scroller withfooter">
97
-<roundcube:object name="addresslist" id="contacts-table" class="listing iconized" noheader="true" role="listbox" />
98
-</div>
99
-<div class="boxpagenav">
100
- <roundcube:button command="firstpage" type="link" class="icon firstpage disabled" classAct="icon firstpage" title="firstpage" label="first" />
101
- <roundcube:button command="previouspage" type="link" class="icon prevpage disabled" classAct="icon prevpage" title="previouspage" label="previous" />
102
- <roundcube:button command="nextpage" type="link" class="icon nextpage disabled" classAct="icon nextpage" title="nextpage" label="next" />
103
- <roundcube:button command="lastpage" type="link" class="icon lastpage disabled" classAct="icon lastpage" title="lastpage" label="last" />
104
-</div>
105
-<div class="boxfooter">
106
- <roundcube:button command="add" type="link" title="newcontact" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="addcontact" /><roundcube:button command="delete" type="link" title="deletecontact" class="listbutton delete disabled" classAct="listbutton delete" innerClass="inner" label="deletecontact" />
107
- <span class="countdisplay" aria-live="polite" aria-relevant="text">
108
- <span class="voice"><roundcube:label name="contacts" /></span>
109
- <roundcube:object name="recordsCountDisplay" label="fromtoshort" />
110
- </span>
111
-</div>
112
-</div>
113
-
114
-<div class="voice" role="note">
115
-<h3><roundcube:label name="helplistnavigation" /></h3>
116
-<pre>
117
-<roundcube:label name="helplistkeyboardnavigation" />
118
-<roundcube:label name="helplistkeyboardnavcontacts" />
119
-</pre>
120
-</div>
121
-
122
-
123
-<div id="contacts-box" class="uibox">
124
- <div class="iframebox">
125
- <roundcube:object name="contentframe" id="contact-frame" style="width:100%; height:100%" frameborder="0" src="env:blankpage" title="contactproperties" />
126
- </div>
127
-</div>
128
-
129
-</div><!-- end addressview-right -->
130
-
131
-</div><!-- end mainscreencontent -->
132
-
133
-</div><!-- end mainscreen -->
134
-
135
-<div id="dragcontactmenu" class="popupmenu" aria-hidden="true">
136
- <ul class="toolbarmenu" role="menu">
137
- <roundcube:button type="link-menuitem" command="move" onclick="return rcmail.drag_menu_action('move')" label="move" classAct="active" />
138
- <roundcube:button type="link-menuitem" command="copy" onclick="return rcmail.drag_menu_action('copy')" label="copy" classAct="active" />
139
- </ul>
140
-</div>
141
-
142
-<div id="contactmenu" class="popupmenu" aria-hidden="true">
143
- <h3 id="aria-label-contactmenu" class="voice"><roundcube:label name="arialabelmorecontactactions" /></h3>
144
- <ul id="contactmenu-menu" class="toolbarmenu iconized" role="menu" aria-labelledby="aria-label-contactmenu">
145
- <roundcube:if condition="env:qrcode" />
146
- <roundcube:button type="link-menuitem" command="qrcode" label="qrcode" class="icon" classAct="icon active" innerclass="icon qrcode" />
147
- <roundcube:endif />
148
- <roundcube:button type="link-menuitem" command="group-assign-selected" label="groupassign" class="icon" classAct="icon active" innerclass="icon assigngroup folder-selector-link" />
149
- <roundcube:button type="link-menuitem" command="group-remove-selected" label="groupremove" class="icon" classAct="icon active" innerclass="icon removegroup" />
150
- <roundcube:if condition="env:contact_move_enabled" />
151
- <roundcube:button type="link-menuitem" command="move" label="moveto" class="icon" classAct="icon active" innerclass="icon move folder-selector-link" />
152
- <roundcube:endif />
153
- <roundcube:if condition="env:contact_copy_enabled" />
154
- <roundcube:button type="link-menuitem" command="copy" label="copyto" class="icon" classAct="icon active" innerclass="icon copy folder-selector-link" />
155
- <roundcube:endif />
156
- <roundcube:container name="contactmenu" id="contactmenu-menu" />
157
- </ul>
158
-</div>
159
-
160
-<roundcube:include file="/includes/footer.html" />
161
-
162
-</body>
163
-</html>
164
roundcubemail-1.6.tar.gz/skins/larry/templates/bounce.html
Deleted
48
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe fullheight">
8
-
9
-<h1 class="voice"><roundcube:object name="pagetitle" /></h1>
10
-
11
-<div class="boxcontent" id="bounceheaders" role="region" aria-labelledby="aria-label-composeheaders">
12
-<h2 id="aria-label-composeheaders" class="voice"><roundcube:label name="arialabelmessageheaders" /></h2>
13
-<roundcube:object name="bounceObjects" id="bounce-objects" />
14
-<roundcube:object name="composeFormHead" role="main" />
15
-<table class="headers-table compose-headers"><tbody>
16
- <tr>
17
- <td class="title"><label for="_from"><roundcube:label name="from" /></label></td>
18
- <td class="editfield">
19
- <roundcube:object name="composeHeaders" part="from" form="form" id="_from" tabindex="1" />
20
- <a href="#identities" onclick="return rcmail.command('switch-task', 'settings/identities')" class="iconlink edit" tabindex="1"><roundcube:label name="editidents" /></a>
21
- </td>
22
- </tr>
23
- <tr>
24
- <td class="title top"><label for="_to"><roundcube:label name="to" /></label></td>
25
- <td class="editfield"><roundcube:object name="composeHeaders" part="to" form="form" id="_to" cols="70" rows="1" tabindex="1" /></td>
26
- </tr>
27
- <tr>
28
- <td class="title top"><label for="_cc"><roundcube:label name="cc" /></label></td>
29
- <td class="editfield"><roundcube:object name="composeHeaders" part="cc" form="form" id="_cc" cols="70" rows="1" tabindex="1" /></td>
30
- </tr>
31
- <tr>
32
- <td class="title top"><label for="_bcc"><roundcube:label name="bcc" /></label></td>
33
- <td class="editfield"><roundcube:object name="composeHeaders" part="bcc" form="form" id="_bcc" cols="70" rows="1" tabindex="1" /></td>
34
- </tr>
35
- <roundcube:if condition="!config:no_save_sent_messages" />
36
- <tr><td colspan="2" class="bounceopts">
37
- <label><roundcube:label name="savesentmessagein" /> <roundcube:object name="storetarget" maxlength="30" style="max-width:12em" tabindex="1" /></label>
38
- </td></tr>
39
- <roundcube:endif />
40
-</tbody></table>
41
-</form>
42
-</div>
43
-
44
-<roundcube:include file="/includes/footer.html" />
45
-
46
-</body>
47
-</html>
48
roundcubemail-1.6.tar.gz/skins/larry/templates/compose.html
Deleted
243
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-<roundcube:if condition="config:enable_spellcheck" />
7
-<link rel="stylesheet" type="text/css" href="/googiespell.css" />
8
-<roundcube:endif />
9
-</head>
10
-<roundcube:if condition="env:extwin" /><body class="extwin"><roundcube:else /><body><roundcube:endif />
11
-
12
-<roundcube:include file="/includes/header.html" />
13
-
14
-<div id="mainscreen">
15
-
16
-<h1 class="voice"><roundcube:object name="pagetitle" /></h1>
17
-
18
-<!-- toolbar -->
19
-<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
20
-<div id="messagetoolbar" class="toolbar fullwidth" role="toolbar" aria-labelledby="aria-label-toolbar">
21
- <roundcube:button command="list" type="link" class="button back disabled" classAct="button back" label="cancel" condition="!env:extwin" tabindex="2" />
22
- <roundcube:button command="close" type="link" class="button close disabled" classAct="button close" label="cancel" condition="env:extwin" tabindex="2" />
23
- <span class="spacer"></span>
24
- <roundcube:button command="send" type="link" class="button send disabled" classAct="button send" label="send" title="sendmessage" tabindex="2" />
25
- <roundcube:button command="savedraft" type="link" class="button savedraft disabled" classAct="button savedraft" label="save" title="savemessage" tabindex="2" />
26
- <span class="spacer"></span>
27
- <roundcube:if condition="!empty(env:spell_langs)" />
28
- <span class="dropbutton">
29
- <roundcube:button command="spellcheck" type="link" class="button spellcheck disabled" classAct="button spellcheck" classSel="button spellcheck pressed" label="spellcheck" title="checkspelling" tabindex="2" />
30
- <a href="#languages" class="dropbuttontip" id="spellmenulink" onclick="UI.toggle_popup('spellmenu',event);return false" aria-haspopup="true" aria-expanded="false" tabindex="2">Select Spell Language</a>
31
- </span>
32
- <roundcube:endif />
33
- <roundcube:button name="addattachment" type="link" class="button attach" label="attach" title="addattachment" onclick="rcmail.upload_input('uploadform')" aria-haspopup="true" aria-expanded="false" tabindex="2" />
34
- <roundcube:button command="insert-sig" type="link" class="button insertsig disabled" classAct="button insertsig" label="signature" title="insertsignature" tabindex="2" />
35
- <a href="#responses" class="button responses" label="responses" title="<roundcube:label name='insertresponse' />" id="responsesmenulink" unselectable="on" onmousedown="return false" onclick="UI.toggle_popup('responsesmenu',event);return false" tabindex="2" aria-haspopup="true" aria-expanded="false" aria-owns="textresponsesmenu"><roundcube:label name="responses" /></a>
36
- <span class="dropbutton" style="display:none">
37
- <roundcube:button command="compose-encrypted" type="link" class="button encrypt disabled" classAct="button encrypt" classSel="button encrypt selected" label="encrypt" title="encryptmessagemailvelope" tabindex="2" />
38
- <a href="#compose-encrypted" class="dropbuttontip" id="encryptionmenulink" onclick="UI.toggle_popup('encryptionmenu',event);return false" aria-haspopup="true" aria-expanded="false" tabindex="2" style="display:none"></a>
39
- </span>
40
- <roundcube:container name="toolbar" id="compose-toolbar" />
41
-</div>
42
-
43
-<div id="mainscreencontent">
44
-
45
-<div id="composeview-left">
46
-
47
-<!-- inline address book -->
48
-<div id="compose-contacts" class="uibox listbox" role="region" aria-labelledby="aria-label-composecontacts">
49
-<h2 id="aria-label-composecontacts" class="boxtitle"><roundcube:label name="contacts" /></h2>
50
- <div class="listsearchbox" role="search" aria-labelledby="aria-label-composequicksearch">
51
- <h3 id="aria-label-composequicksearch" class="voice"><roundcube:label name="arialabelcontactquicksearch" /></h3>
52
- <div class="searchbox">
53
- <label for="contactsearchbox" class="voice"><roundcube:label name="arialabelcontactsearchbox" /></label>
54
- <roundcube:object name="searchform" id="contactsearchbox" />
55
- <a id="searchmenulink" class="iconbutton searchicon"> </a>
56
- <roundcube:button command="reset-search" type="link" class="iconbutton reset" title="resetsearch" content=" " />
57
- </div>
58
- </div>
59
- <roundcube:object name="addressbooks" id="directorylist" class="treelist listing" summary="ariasummarycomposecontacts" />
60
- <div class="scroller withfooter" tabindex="-1">
61
- <roundcube:object name="addresslist" id="contacts-table" class="listing iconized" noheader="true" role="listbox" />
62
- </div>
63
-<div class="boxfooter">
64
- <roundcube:button command="add-recipient" prop="to" type="link" title="to" class="listbutton addto disabled" classAct="listbutton addto" innerClass="inner" content="To+" /><roundcube:button command="add-recipient" prop="cc" type="link" title="cc" class="listbutton addcc disabled" classAct="listbutton addcc" innerClass="inner" content="Cc+" /><roundcube:button command="add-recipient" prop="bcc" type="link" title="bcc" class="listbutton addbcc disabled" classAct="listbutton addbcc" innerClass="inner" content="Bcc+" /><roundcube:container name="compose-contacts-toolbar" id="compose-contacts-toolbar" />
65
-</div>
66
-<div class="boxpagenav">
67
- <roundcube:button command="firstpage" type="link" class="icon firstpage disabled" classAct="icon firstpage" title="firstpage" label="first" />
68
- <roundcube:button command="previouspage" type="link" class="icon prevpage disabled" classAct="icon prevpage" title="previouspage" label="previous" />
69
- <roundcube:button command="nextpage" type="link" class="icon nextpage disabled" classAct="icon nextpage" title="nextpage" label="next" />
70
- <roundcube:button command="lastpage" type="link" class="icon lastpage disabled" classAct="icon lastpage" title="lastpage" label="last" />
71
-</div>
72
-</div>
73
-
74
-</div>
75
-
76
-<div id="composeview-right" role="main">
77
-
78
-<roundcube:form name="form" method="post" id="compose-content" class="uibox">
79
-
80
-<!-- message headers -->
81
-<div id="composeheaders" role="region" aria-labelledby="aria-label-composeheaders">
82
-<roundcube:object name="composeObjects" id="compose-objects" class="boxcontent" style="padding-bottom:0" />
83
-<h2 id="aria-label-composeheaders" class="voice"><roundcube:label name="arialabelmessageheaders" /></h2>
84
-
85
-<a href="#options" id="composeoptionstoggle" class="moreheaderstoggle" title="<roundcube:label name='togglecomposeoptions' />" aria-expanded="false"><span class="iconlink"></span></a>
86
-
87
-<table class="headers-table compose-headers">
88
-<tbody>
89
- <tr>
90
- <td class="title"><label for="_from"><roundcube:label name="from" /></label></td>
91
- <td class="editfield">
92
- <roundcube:object name="composeHeaders" part="from" form="form" id="_from" tabindex="1" />
93
- <a href="#identities" onclick="return rcmail.command('switch-task', 'settings/identities')" class="iconlink edit" tabindex="0"><roundcube:label name="editidents" /></a>
94
- </td>
95
- </tr><tr>
96
- <td class="title top"><label for="_to"><roundcube:label name="to" /></label></td>
97
- <td class="editfield"><roundcube:object name="composeHeaders" part="to" form="form" id="_to" cols="70" rows="1" tabindex="1" aria-required="true" /></td>
98
- </tr><tr id="compose-cc">
99
- <td class="title top">
100
- <label for="_cc"><roundcube:label name="cc" /></label>
101
- <a href="#cc" onclick="return UI.hide_header_row('cc');" class="iconbutton cancel" title="<roundcube:label name='delete' />" tabindex="3"><roundcube:label name="delete" /> <roundcube:label name="cc" /></a>
102
- </td>
103
- <td class="editfield"><roundcube:object name="composeHeaders" part="cc" form="form" id="_cc" cols="70" rows="1" tabindex="1" /></td>
104
- </tr><tr id="compose-bcc">
105
- <td class="title top">
106
- <label for="_bcc"><roundcube:label name="bcc" /></label>
107
- <a href="#bcc" onclick="return UI.hide_header_row('bcc');" class="iconbutton cancel" title="<roundcube:label name='delete' />" tabindex="3"><roundcube:label name="delete" /> <roundcube:label name="bcc" /></a>
108
- </td>
109
- <td class="editfield"><roundcube:object name="composeHeaders" part="bcc" form="form" id="_bcc" cols="70" rows="1" tabindex="1" /></td>
110
- </tr><tr id="compose-replyto">
111
- <td class="title top">
112
- <label for="_replyto"><roundcube:label name="replyto" /></label>
113
- <a href="#replyto" onclick="return UI.hide_header_row('replyto');" class="iconbutton cancel" title="<roundcube:label name='delete' />" tabindex="3"><roundcube:label name="delete" /> <roundcube:label name="replyto" /></a>
114
- </td>
115
- <td class="editfield"><roundcube:object name="composeHeaders" part="replyto" form="form" id="_replyto" size="70" tabindex="1" /></td>
116
- </tr><tr id="compose-followupto">
117
- <td class="title top">
118
- <label for="_followupto"><roundcube:label name="followupto" /></label>
119
- <a href="#followupto" onclick="return UI.hide_header_row('followupto');" class="iconbutton cancel" title="<roundcube:label name='delete' />" tabindex="3"><roundcube:label name="delete" /> <roundcube:label name="followupto" /></a>
120
- </td>
121
- <td class="editfield"><roundcube:object name="composeHeaders" part="followupto" form="form" id="_followupto" size="70" tabindex="1" /></td>
122
- </tr><tr>
123
- <td></td>
124
- <td class="formlinks">
125
- <a href="#cc" onclick="return UI.show_header_row('cc')" id="cc-link" class="iconlink add" tabindex="3"><roundcube:label name="addcc" /></a>
126
- <a href="#bcc" onclick="return UI.show_header_row('bcc')" id="bcc-link" class="iconlink add" tabindex="3"><roundcube:label name="addbcc" /></a>
127
- <a href="#reply-to" onclick="return UI.show_header_row('replyto')" id="replyto-link" class="iconlink add" tabindex="3"><roundcube:label name="addreplyto" /></a>
128
- <a href="#followup-to" onclick="return UI.show_header_row('followupto')" id="followupto-link" class="iconlink add" tabindex="3"><roundcube:label name="addfollowupto" /></a>
129
- </td>
130
- </tr><tr>
131
- <td class="title"><label for="compose-subject"><roundcube:label name="subject" /></label></td>
132
- <td class="editfield"><roundcube:object name="composeSubject" id="compose-subject" form="form" tabindex="1" /></td>
133
- </tr>
134
-</tbody>
135
-</table>
136
-
137
-<div id="composebuttons" class="formbuttons">
138
- <roundcube:button command="extwin" type="link" class="button extwin" classSel="button extwin pressed" innerClass="icon" title="openinextwin" label="openinextwin" condition="!env:extwin" />
139
-</div>
140
-
141
-<!-- (collapsible) message options -->
142
-<div id="composeoptions" role="region" aria-labelledby="aria-label-composeoptions">
143
- <h2 id="aria-label-composeoptions" class="voice"><roundcube:label name="arialabelcomposeoptions" /></h2>
144
- <roundcube:if condition="!in_array('htmleditor', (array)config:dont_override)" />
145
- <span class="composeoption">
146
- <label><roundcube:label name="editortype" />
147
- <roundcube:object name="editorSelector" editorid="composebody" tabindex="4" /></label>
148
- </span>
149
- <roundcube:endif />
150
- <span class="composeoption">
151
- <label for="rcmcomposepriority"><roundcube:label name="priority" />
152
- <roundcube:object name="prioritySelector" form="form" id="rcmcomposepriority" tabindex="4" /></label>
153
- </span>
154
- <roundcube:if condition="!in_array('mdn_default', (array)config:dont_override)" />
155
- <span class="composeoption">
156
- <label><roundcube:object name="mdnCheckBox" form="form" id="rcmcomposereceipt" tabindex="4" /> <roundcube:label name="returnreceipt" /></label>
157
- </span>
158
- <roundcube:endif />
159
- <roundcube:if condition="!in_array('dsn_default', (array)config:dont_override)" />
160
- <span class="composeoption">
161
- <label><roundcube:object name="dsnCheckBox" form="form" id="rcmcomposedsn" tabindex="4" /> <roundcube:label name="dsn" /></label>
162
- </span>
163
- <roundcube:endif />
164
- <span class="composeoption">
165
- <label><roundcube:object name="keepFormattingCheckBox" form="form" id="rcmcomposekeepformatting" tabindex="4" /> <roundcube:label name="keepformatting" /></label>
166
- </span>
167
- <roundcube:if condition="!config:no_save_sent_messages" />
168
- <span class="composeoption">
169
- <label><roundcube:label name="savesentmessagein" /> <roundcube:object name="storetarget" maxlength="30" style="max-width:12em" tabindex="4" /></label>
170
- </span>
171
- <roundcube:endif />
172
- <roundcube:container name="composeoptions" id="composeoptions" />
173
-</div>
174
-
175
-</div>
176
-
177
-<!-- message compose body -->
178
-<div id="composeview-bottom">
179
- <div id="composebodycontainer">
180
- <label for="composebody" class="voice"><roundcube:label name="arialabelmessagebody" /></label>
181
- <roundcube:object name="composeBody" id="composebody" form="form" cols="70" rows="20" tabindex="1" />
182
- </div>
183
- <div id="compose-attachments" class="rightcol" role="region" aria-labelledby="aria-label-composeattachments">
184
- <h2 id="aria-label-composeattachments" class="voice"><roundcube:label name="attachments" /></h2>
185
- <div class="upload-form" style="text-align:center; margin-bottom:10px">
186
- <roundcube:object name="composeAttachmentForm" mode="hint" />
187
- <a class="button" tabindex="1" href="#" onclick="rcmail.upload_input('uploadform')"><roundcube:label name="addattachment" /></a>
188
- </div>
189
- <roundcube:object name="composeAttachmentList" id="attachment-list" class="attachmentslist" tabindex="1" />
190
- <roundcube:object name="fileDropArea" id="compose-attachments" />
191
- </div>
192
-<!--
193
- <div id="composeformbuttons" class="footerleft formbuttons floating">
194
- <roundcube:button type="input" command="send" class="button mainaction" label="sendmessage" tabindex="11" />
195
- <roundcube:button type="input" command="savedraft" class="button" label="savemessage" tabindex="12" />
196
- <roundcube:button type="input" command="list" class="button" label="cancel" tabindex="13" />
197
- </div>
198
--->
199
-</div>
200
-
201
-</form>
202
-
203
-</div><!-- end mailview-right -->
204
-
205
-</div><!-- end mainscreencontent -->
206
-
207
-</div><!-- end mainscreen -->
208
-
209
-<roundcube:object name="composeAttachmentForm" id="uploadform" mode="smart" />
210
-
211
-<div id="spellmenu" class="popupmenu" aria-hidden="true"></div>
212
-
213
-<div id="responsesmenu" class="popupmenu" aria-hidden="true">
214
- <h3 id="aria-label-responsesmenu" class="voice"><roundcube:label name="arialabelresponsesmenu" /></h3>
215
- <ul class="toolbarmenu" id="textresponsesmenu" role="menu" aria-labelledby="aria-label-responsesmenu">
216
- <li role="separator" class="separator" id=""><label><roundcube:label name="insertresponse" /></label></li>
217
- <roundcube:object name="responseslist" id="responseslist" tagname="ul" itemclass="active" list-placeholder="noresponsesavailable" />
218
- <li role="separator" class="separator"><label><roundcube:label name="manageresponses" /></label></li>
219
- <roundcube:button name="responses" type="link-menuitem" label="editresponses" class="active" onclick="return rcmail.command('switch-task', 'settings/responses')" />
220
- </ul>
221
-</div>
222
-
223
-<div id="attachmentmenu" class="popupmenu" aria-hidden="true">
224
- <ul class="toolbarmenu" id="attachmentoptionsmenu" role="menu">
225
- <roundcube:button command="open-attachment" id="attachmenuopen" type="link-menuitem" label="open" class="icon" classAct="icon active" innerclass="icon extwin" />
226
- <roundcube:button command="download-attachment" id="attachmenudownload" type="link-menuitem" label="download" class="icon" classAct="icon active" innerclass="icon download" />
227
- <roundcube:button command="rename-attachment" id="attachmenurename" type="link-menuitem" label="rename" class="icon" classAct="icon active" innerclass="icon rename" />
228
- <roundcube:container name="attachmentmenu" id="attachmentoptionsmenu" />
229
- </ul>
230
-</div>
231
-
232
-<div id="encryptionmenu" class="popupmenu" aria-hidden="true">
233
- <ul class="toolbarmenu" role="menu">
234
- <roundcube:button command="compose-encrypted" type="link-menuitem" label="encryptmessage" classAct="active" />
235
- <roundcube:button command="compose-encrypted-signed" type="link-menuitem" label="encryptandsign" classAct="active" />
236
- </ul>
237
-</div>
238
-
239
-<roundcube:include file="/includes/footer.html" />
240
-
241
-</body>
242
-</html>
243
roundcubemail-1.6.tar.gz/skins/larry/templates/contact.html
Deleted
34
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe">
8
-
9
-<h1 class="boxtitle"><roundcube:label name="contactproperties" /></h1>
10
-
11
-<div id="contact-details" class="boxcontent">
12
- <roundcube:if condition="strlen(env:sourcename)" />
13
- <div id="sourcename"><roundcube:label name="addressbook" />: <roundcube:var name="env:sourcename" /></div>
14
- <roundcube:endif />
15
-
16
- <div id="contactphoto"><roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" placeholderGroup="/images/contactgroup.png" /></div>
17
- <roundcube:object name="contacthead" id="contacthead" />
18
- <br style="clear:both" />
19
-
20
- <div id="contacttabs" class="tabbed">
21
- <roundcube:object name="contactdetails" />
22
- </div>
23
-
24
-</div>
25
-
26
-<div id="headerbuttons" class="formbuttons">
27
- <roundcube:button command="edit" type="input" class="button mainaction" label="editcontact" condition="!ENV:readonly" />
28
-</div>
29
-
30
-<roundcube:include file="/includes/footer.html" />
31
-
32
-</body>
33
-</html>
34
roundcubemail-1.6.tar.gz/skins/larry/templates/contactedit.html
Deleted
49
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe">
8
-
9
-<h1 class="boxtitle"><roundcube:object name="steptitle" /></h1>
10
-
11
-<roundcube:form name="editform" method="post" id="contact-details" class="boxcontent">
12
- <roundcube:if condition="strlen(env:sourcename)" />
13
- <div id="sourcename"><roundcube:label name="addressbook" />: <roundcube:var name="env:sourcename" condition="env:action!='add'" /><roundcube:object name="sourceselector" id="sourceselect" condition="env:action=='add'" /></div>
14
- <roundcube:endif />
15
-
16
- <fieldset id="contactphoto">
17
- <legend class="voice"><roundcube:label name="contactphoto" /></legend>
18
- <roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" />
19
- <roundcube:if condition="env:photocol" />
20
- <roundcube:object name="fileDropArea" id="contactpic" />
21
- <div class="formlinks">
22
- <roundcube:button command="upload-photo" id="uploadformlink" type="link" label="replacephoto" class="iconlink upload disabled" classAct="iconlink upload active" onclick="rcmail.upload_input('upload-form')" condition="env:photocol" /><br/>
23
- <roundcube:button command="delete-photo" type="link" label="delete" class="iconlink delete disabled" classAct="iconlink delete active" condition="env:photocol" />
24
- </div>
25
- <roundcube:endif />
26
- </fieldset>
27
-
28
- <roundcube:object name="contactedithead" id="contacthead" size="16" form="editform" />
29
- <br style="clear:both" />
30
-
31
- <div id="contacttabs" class="tabbed">
32
- <roundcube:object name="contacteditform" size="40" textareacols="60" form="editform" />
33
- </div>
34
-
35
-</form>
36
-
37
-<div class="footerleft formbuttons">
38
- <roundcube:button command="save" type="input" class="button mainaction" label="save" />
39
- <roundcube:button command="show" type="input" class="button" label="cancel" condition="env:action=='edit'" />
40
- <roundcube:button name="cancel" type="input" class="button" label="cancel" onclick="history.back()" condition="env:action=='add'" />
41
-</div>
42
-
43
-<roundcube:object name="photoUploadForm" id="upload-form" mode="smart" />
44
-
45
-<roundcube:include file="/includes/footer.html" />
46
-
47
-</body>
48
-</html>
49
roundcubemail-1.6.tar.gz/skins/larry/templates/contactprint.html
Deleted
22
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:object name="meta" />
6
-<roundcube:object name="links" />
7
-<link rel="stylesheet" type="text/css" href="/print.css" />
8
-</head>
9
-<body>
10
-
11
-<div id="header"><roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" border="0" alt="Logo" logo-type="print" logo-match="all" /></div>
12
-
13
-<div id="contact-details" class="boxcontent">
14
- <div id="contactphoto"><roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" placeholderGroup="/images/contactgroup.png" /></div>
15
- <roundcube:object name="contacthead" id="contacthead" />
16
- <br style="clear:both" />
17
- <roundcube:object name="contactdetails" />
18
-</div>
19
-
20
-</body>
21
-</html>
22
roundcubemail-1.6.tar.gz/skins/larry/templates/contactsearch.html
Deleted
19
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe fullheight">
8
-
9
-<h1 class="voice"><roundcube:label name="addressbook" /> : <roundcube:label name="advsearch" /></h1>
10
-
11
-<div id="contact-details" class="boxcontent">
12
- <roundcube:object name="searchform" id="advsearchform" class="tabbed" size=30 />
13
-</div>
14
-
15
-<roundcube:include file="/includes/footer.html" />
16
-
17
-</body>
18
-</html>
19
roundcubemail-1.6.tar.gz/skins/larry/templates/error.html
Deleted
20
1
2
-<!DOCTYPE html>
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<roundcube:if condition="!env:framed && env:error_task != 'error-login'" />
8
-<body class="error<roundcube:exp expression="env:extwin ? ' extwin' : ''" />">
9
-<roundcube:include file="/includes/header.html" />
10
-<roundcube:else />
11
-<body class="error iframe">
12
-<roundcube:endif />
13
-
14
-<div class="uibox centerbox errorbox">
15
-$__page_content
16
-</div>
17
-
18
-</body>
19
-</html>
20
roundcubemail-1.6.tar.gz/skins/larry/templates/folderedit.html
Deleted
26
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe">
8
-
9
-<h1 class="boxtitle"><roundcube:label name="folderproperties" /></h1>
10
-
11
-<div class="boxcontent">
12
-<roundcube:object name="folderdetails" class="propform" />
13
-</div>
14
-
15
-<div class="footerleft formbuttons">
16
- <roundcube:button command="save" type="input" class="button mainaction" label="save" />
17
- <roundcube:if condition="!strlen(request:_mbox)" />
18
- <input type="button" value="<roundcube:label name="cancel" />" class="button" onclick="history.back()" />
19
- <roundcube:endif />
20
-</div>
21
-
22
-<roundcube:include file="/includes/footer.html" />
23
-
24
-</body>
25
-</html>
26
roundcubemail-1.6.tar.gz/skins/larry/templates/folders.html
Deleted
70
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<div id="mainscreen" class="offset">
12
-
13
-<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="folders" /></h1>
14
-
15
-<roundcube:include file="/includes/settingstabs.html" />
16
-
17
-<div id="settings-right" role="main">
18
-
19
-<div id="folderslist" class="uibox listbox">
20
-<h2 id="folderslist-header" class="boxtitle">
21
- <roundcube:label name="folders" />
22
- <a href="#folders" class="iconbutton search" title="<roundcube:label name='findfolders' />" tabindex="0"><roundcube:label name='findfolders' /></a>
23
-</h2>
24
-<div class="listsearchbox">
25
- <roundcube:object name="folderfilter" id="folderlist-filter" />
26
- <div class="searchbox" role="search" aria-labelledby="aria-label-foldersearchform">
27
- <h3 id="aria-label-foldersearchform" class="voice"><roundcube:label name="arialabelfoldersearchform" /></h3>
28
- <label for="foldersearch" class="voice"><roundcube:label name="arialabelsearchterms" /></label>
29
- <input type="text" name="q" id="foldersearch" placeholder="<roundcube:label name='findfolders' />" />
30
- <a class="iconbutton searchicon"></a>
31
- <roundcube:button command="reset-foldersearch" type="link" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" />
32
- </div>
33
-</div>
34
-<div id="folderslist-content" class="scroller withfooter">
35
- <roundcube:object name="foldersubscription" id="subscription-table" class="treelist listing folderlist" />
36
-</div>
37
-<div id="folderslist-footer" class="boxfooter">
38
- <roundcube:button command="create-folder" type="link" title="createfolder" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="createfolder" /><roundcube:button name="mailboxmenulink" id="mailboxmenulink" type="link" title="folderactions" class="listbutton groupactions" onclick="return UI.toggle_popup('mailboxmenu',event)" innerClass="inner" content="⚙" aria-haspopup="true" aria-expanded="false" aria-owns="mailboxoptionsmenu" />
39
- <roundcube:if condition="env:quota" />
40
- <span class="voice"><roundcube:label name="quota"></span>
41
- <roundcube:object name="quotaDisplay" id="quotadisplay" class="countdisplay" display="text" />
42
- <roundcube:endif />
43
-</div>
44
-
45
-<div id="mailboxmenu" class="popupmenu" aria-hidden="true">
46
- <h3 id="aria-label-mailboxmenu" class="voice"><roundcube:label name="arialabelmailboxmenu" /></h3>
47
- <ul class="toolbarmenu" id="mailboxoptionsmenu" role="menu" aria-labelledby="aria-label-mailboxmenu">
48
- <roundcube:button command="delete-folder" type="link-menuitem" label="delete" classAct="active" />
49
- <roundcube:button command="purge" type="link-menuitem" label="empty" classAct="active" />
50
- <roundcube:container name="mailboxoptions" id="mailboxoptionsmenu" />
51
- </ul>
52
-</div>
53
-
54
-</div>
55
-
56
-<div id="folder-details" class="uibox contentbox">
57
- <div class="iframebox">
58
- <roundcube:object name="contentframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="env:blankpage" />
59
- </div>
60
-</div>
61
-
62
-</div>
63
-
64
-</div>
65
-
66
-<roundcube:include file="/includes/footer.html" />
67
-
68
-</body>
69
-</html>
70
roundcubemail-1.6.tar.gz/skins/larry/templates/identities.html
Deleted
42
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<div id="mainscreen" class="offset">
12
-
13
-<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="identities" /></h1>
14
-
15
-<roundcube:include file="/includes/settingstabs.html" />
16
-
17
-<div id="settings-right" role="main" aria-labelledby="aria-label-identitieslist">
18
-<div id="identitieslist" class="uibox listbox">
19
-<h2 class="boxtitle" id="aria-label-identitieslist"><roundcube:label name="identities" /></h2>
20
-<div class="scroller withfooter">
21
-<roundcube:object name="identitiesList" id="identities-table" class="listing" noheader="true" editIcon="" role="listbox" />
22
-</div>
23
-<div class="boxfooter">
24
-<roundcube:button command="add" type="link" title="newidentity" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="addidentity" condition="config:identities_level:0<2" /><roundcube:button command="delete" type="link" title="delete" class="listbutton delete disabled" classAct="listbutton delete" innerClass="inner" label="delete" condition="config:identities_level:0<2" />
25
-</div>
26
-</div>
27
-
28
-<div id="identity-details" class="uibox contentbox">
29
- <div class="iframebox">
30
- <roundcube:object name="contentframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="env:blankpage" title="arialabelidentityeditfrom" />
31
- </div>
32
-</div>
33
-
34
-</div>
35
-
36
-</div>
37
-
38
-<roundcube:include file="/includes/footer.html" />
39
-
40
-</body>
41
-</html>
42
roundcubemail-1.6.tar.gz/skins/larry/templates/identityedit.html
Deleted
23
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe">
8
-
9
-<h1 class="boxtitle"><roundcube:object name="steptitle" /></h1>
10
-
11
-<div id="preferences-details" class="boxcontent">
12
-<roundcube:object name="identityform" class="propform" size="40" textareacols="40" textarearows="6" />
13
-</div>
14
-
15
-<div class="footerleft formbuttons">
16
- <roundcube:button command="save" type="input" class="button mainaction" label="save" />
17
-</div>
18
-
19
-<roundcube:include file="/includes/footer.html" />
20
-
21
-</body>
22
-</html>
23
roundcubemail-1.6.tar.gz/skins/larry/templates/importcontacts.html
Deleted
19
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe fullheight">
8
-
9
-<h1 class="voice"><roundcube:label name="addressbook" /> : <roundcube:label name="importcontacts" /></h1>
10
-
11
-<div class="boxcontent">
12
- <roundcube:object name="importstep" class="propform" />
13
-</div>
14
-
15
-<roundcube:include file="/includes/footer.html" />
16
-
17
-</body>
18
-</html>
19
roundcubemail-1.6.tar.gz/skins/larry/templates/login.html
Deleted
56
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body>
8
-
9
-<h1 class="voice"><roundcube:object name="productname" /> <roundcube:label name="login" /></h1>
10
-
11
-<div id="login-form">
12
-<div class="box-inner" role="main">
13
-<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" />
14
-
15
-<roundcube:form name="form" method="post">
16
-<roundcube:object name="loginform" form="form" size="40" submit=true />
17
-</form>
18
-
19
-</div>
20
-
21
-<div class="box-bottom" role="complementary">
22
- <roundcube:object name="message" id="message" />
23
- <noscript>
24
- <p class="noscriptwarning"><roundcube:label name="noscriptwarning" /></p>
25
- </noscript>
26
-</div>
27
-
28
-<div id="bottomline" role="contentinfo">
29
- <roundcube:object name="productname" condition="config:display_product_info > 0" /> <roundcube:object name="version" condition="config:display_product_info == 2" />
30
- <roundcube:if condition="config:support_url" />
31
- ● <a href="<roundcube:var name='config:support_url' />" target="_blank" class="support-link"><roundcube:label name="support" /></a>
32
- <roundcube:endif />
33
- <roundcube:container name="loginfooter" id="bottomline" />
34
-</div>
35
-</div>
36
-
37
-<roundcube:include file="/includes/footer.html" />
38
-
39
-<roundcube:object name="preloader" images="
40
- /images/ajaxloader.gif
41
- /images/ajaxloader_dark.gif
42
- /images/buttons.png
43
- /images/addcontact.png
44
- /images/filetypes.png
45
- /images/listicons.png
46
- /images/messages.png
47
- /images/messages_dark.png
48
- /images/quota.png
49
- /images/selector.png
50
- /images/splitter.png
51
- /images/watermark.jpg
52
-" />
53
-
54
-</body>
55
-</html>
56
roundcubemail-1.6.tar.gz/skins/larry/templates/mail.html
Deleted
272
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-<style type="text/css">
7
-<roundcube:if condition="env:layout != 'list'" />
8
- #mailview-top { height: 270px; }
9
- #mailview-bottom { top: 284px; height: auto; display: block; }
10
- #mailpreviewframe { display: block; }
11
-<roundcube:endif />
12
-</style>
13
-</head>
14
-<body class="minwidth">
15
-
16
-<roundcube:include file="/includes/header.html" />
17
-
18
-<div id="mainscreen">
19
-
20
-<h1 class="voice"><roundcube:label name="mail" /></h1>
21
-
22
-<!-- toolbar -->
23
-<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
24
-<div id="messagetoolbar" class="toolbar" role="toolbar" aria-labelledby="aria-label-toolbar">
25
- <roundcube:button command="checkmail" type="link" class="button checkmail disabled" classAct="button checkmail" classSel="button checkmail pressed" label="refresh" title="checkmail" />
26
- <roundcube:include file="/includes/mailtoolbar.html" />
27
-</div>
28
-
29
-<div id="messagesearchtools">
30
-
31
-<!-- search filter -->
32
-<div id="searchfilter">
33
- <label for="messagessearchfilter" class="voice"><roundcube:label name="arialabelmessagessearchfilter" /></label>
34
- <roundcube:object name="searchfilter" class="searchfilter decorated" id="messagessearchfilter" aria-controls="messagelist" />
35
-</div>
36
-
37
-<!-- search box -->
38
-<div id="quicksearchbar" class="searchbox" role="search" aria-labelledby="aria-label-searchform">
39
-<h2 id="aria-label-searchform" class="voice"><roundcube:label name="arialabelmailsearchform" /></h2>
40
-<label for="quicksearchbox" class="voice"><roundcube:label name="arialabelmailquicksearchbox" /></label>
41
-<roundcube:button command="menu-open" prop="searchmenu" type="link" id="searchmenulink" class="iconbutton searchoptions" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="searchmenu-menu" />
42
-<roundcube:object name="searchform" id="quicksearchbox" />
43
-<roundcube:button command="reset-search" id="searchreset" type="link" class="iconbutton reset" title="resetsearch" label="resetsearch" />
44
-
45
-<div id="searchmenu" class="popupmenu" data-editable="true">
46
- <h3 id="aria-label-searchmenu" class="voice"><roundcube:label name="searchmod" /></h3>
47
- <ul class="toolbarmenu" id="searchmenu-menu" role="menu" aria-labelledby="aria-label-searchmenu">
48
- <li role="menuitem"><label><input type="checkbox" name="s_mods" value="subject" id="s_mod_subject" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="subject" /></span></label></li>
49
- <li role="menuitem"><label><input type="checkbox" name="s_mods" value="from" id="s_mod_from" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="from" /></span></label></li>
50
- <li role="menuitem"><label><input type="checkbox" name="s_mods" value="to" id="s_mod_to" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="to" /></span></label></li>
51
- <li role="menuitem"><label><input type="checkbox" name="s_mods" value="cc" id="s_mod_cc" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="cc" /></span></label></li>
52
- <li role="menuitem"><label><input type="checkbox" name="s_mods" value="bcc" id="s_mod_bcc" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="bcc" /></span></label></li>
53
- <li role="menuitem"><label><input type="checkbox" name="s_mods" value="body" id="s_mod_body" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="body" /></span></label></li>
54
- <li role="menuitem"><label><input type="checkbox" name="s_mods" value="text" id="s_mod_text" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="msgtext" /></span></label></li>
55
- <li role="separator" class="separator"><label><roundcube:label name="date" /></label></li>
56
- <li role="menuitem"><roundcube:object name="searchinterval" id="s_interval" onchange="rcmail.set_searchinterval($(this).val())" /></li>
57
- <li role="separator" class="separator"><label><roundcube:label name="searchscope" /></label></li>
58
- <li role="menuitem"><label><input type="radio" name="s_scope" value="base" id="s_scope_base" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="currentfolder" /></span></label></li>
59
- <li role="menuitem"><label><input type="radio" name="s_scope" value="sub" id="s_scope_sub" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="subfolders" /></span></label></li>
60
- <li role="menuitem"><label><input type="radio" name="s_scope" value="all" id="s_scope_all" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="allfolders" /></span></label></li>
61
- </ul>
62
- <div class="buttons"><a class="button" href="#" onclick="if (rcmail.command('search')) UI.show_popup('searchmenu',false)"><roundcube:label name="search" /></a></div>
63
-</div>
64
-
65
-</div>
66
-
67
-</div>
68
-
69
-<div id="mainscreencontent" class="<roundcube:var name="env:layout" />">
70
-<div id="mailview-left">
71
-
72
-<!-- folders list -->
73
-<div id="mailboxcontainer" class="uibox listbox" role="navigation" aria-labelledby="aria-label-folderlist">
74
-<h2 id="aria-label-folderlist" class="voice"><roundcube:label name="arialabelfolderlist" /></h2>
75
-<div id="folderlist-content" class="scroller withfooter">
76
- <roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing folderlist" folder_filter="mail" unreadwrap="%s" />
77
-</div>
78
-<div id="folderlist-footer" class="boxfooter">
79
- <roundcube:button name="mailboxmenulink" id="mailboxmenulink" type="link" title="folderactions" class="listbutton groupactions" onclick="UI.toggle_popup('mailboxmenu',event);return false" innerClass="inner" content="⚙" aria-haspopup="true" aria-expanded="false" aria-owns="mailboxoptionsmenu" />
80
- <roundcube:if condition="env:quota" />
81
- <span class="voice"><roundcube:label name="quota"></span>
82
- <roundcube:object name="quotaDisplay" id="quotadisplay" class="countdisplay" display="text" />
83
- <roundcube:endif />
84
-</div>
85
-</div>
86
-
87
-</div>
88
-
89
-<div id="mailview-right" role="main">
90
-
91
-<roundcube:if condition="env:layout == 'desktop'" />
92
-<div id="mailview-top" class="uibox">
93
-<roundcube:else />
94
-<div id="mailview-top" class="uibox fullheight">
95
-<roundcube:endif />
96
-
97
-<!-- messagelist -->
98
-<div id="messagelistheader"><roundcube:object name="listmenulink" optionsmenuIcon="true" /></div>
99
-<div id="messagelistcontainer" class="boxlistcontent" tabindex="-1">
100
-<h2 id="aria-label-messagelist" class="voice"><roundcube:label name="arialabelmessagelist" /></h2>
101
-<roundcube:object name="messages"
102
- id="messagelist"
103
- class="records-table messagelist sortheader fixedheader"
104
- optionsmenuIcon="true"
105
- aria-labelledby="aria-label-messagelist" />
106
-</div>
107
-
108
-<div class="voice" role="note">
109
-<h3><roundcube:label name="helplistnavigation" /></h3>
110
-<pre>
111
-<roundcube:label name="helplistkeyboardnavigation" />
112
-<roundcube:label name="helplistkeyboardnavmessages" />
113
-</pre>
114
-</div>
115
-
116
-<!-- list footer -->
117
-<div id="messagelistfooter">
118
- <div id="listcontrols">
119
- <roundcube:button href="#list" command="set-listmode" prop="list" type="link" class="iconbutton listmode disabled" classAct="iconbutton listmode" id="maillistmode" title="list" content="List" />
120
- <roundcube:button href="#threads" command="set-listmode" prop="threads"type="link" class="iconbutton threadmode disabled" classAct="iconbutton threadmode" id="mailthreadmode" title="threads" content="Threads" />
121
- </div>
122
-
123
- <div id="listselectors">
124
- <a href="#select" id="listselectmenulink" class="menuselector" onclick="UI.toggle_popup('listselectmenu', event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="listselectmenu-menu"><span class="handle"><roundcube:label name="select" /></span></a>
125
- <roundcube:if condition="env:threads" />
126
- <a href="#threads" id="threadselectmenulink" class="menuselector" onclick="UI.toggle_popup('threadselectmenu', event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="threadselectmenu-menu"><span class="handle"><roundcube:label name="threads" /></span></a>
127
- <roundcube:endif />
128
- </div>
129
-
130
- <div id="countcontrols" class="pagenav dark">
131
- <roundcube:object name="messageCountDisplay" class="countdisplay" aria-live="polite" aria-relevant="text" />
132
- <span class="pagenavbuttons">
133
- <roundcube:button command="firstpage" type="link" class="button firstpage disabled" classAct="button firstpage" classSel="button firstpage pressed" innerClass="inner" title="firstpage" label="first" />
134
- <roundcube:button command="previouspage" type="link" class="button prevpage disabled" classAct="button prevpage" classSel="button prevpage pressed" innerClass="inner" title="previouspage" label="previous" />
135
- <input id="pagejumper" class="pagejumper" type="text" size="3" disabled title="<roundcube:label name="currpage" />" />
136
- <roundcube:button command="nextpage" type="link" class="button nextpage disabled" classAct="button nextpage" classSel="button nextpage pressed" innerClass="inner" title="nextpage" label="next" />
137
- <roundcube:button command="lastpage" type="link" class="button lastpage disabled" classAct="button lastpage" classSel="button lastpage pressed" innerClass="inner" title="lastpage" label="last" />
138
- </span>
139
- </div>
140
-
141
- <roundcube:container name="listcontrols" id="listcontrols" />
142
-</div>
143
-
144
-</div><!-- end mailview-top -->
145
-
146
-<div id="mailview-bottom" class="uibox">
147
-
148
-<div id="mailpreviewframe" class="iframebox" role="complementary" aria-labelledby="aria-label-mailpreviewframe">
149
-<h2 id="aria-label-mailpreviewframe" class="voice"><roundcube:label name="arialabelmailpreviewframe" /></h2>
150
-<roundcube:object name="contentframe" id="messagecontframe" style="width:100%; height:100%" frameborder="0" src="env:blankpage" title="arialabelmailpreviewframe" />
151
-</div>
152
-
153
-</div><!-- end mailview-bottom -->
154
-
155
-</div><!-- end mailview-right -->
156
-
157
-</div><!-- end mainscreencontent -->
158
-
159
-</div><!-- end mainscreen -->
160
-
161
-<div id="dragmessagemenu" class="popupmenu" aria-hidden="true">
162
- <ul class="toolbarmenu" role="menu">
163
- <roundcube:button command="move" type="link-menuitem" onclick="return rcmail.drag_menu_action('move')" label="move" classAct="active" />
164
- <roundcube:button command="copy" type="link-menuitem" onclick="return rcmail.drag_menu_action('copy')" label="copy" classAct="active" />
165
- </ul>
166
-</div>
167
-
168
-<div id="mailboxmenu" class="popupmenu" aria-hidden="true">
169
- <h3 id="aria-label-mailboxmenu" class="voice"><roundcube:label name="arialabelmailboxmenu" /></h3>
170
- <ul class="toolbarmenu" id="mailboxoptionsmenu" role="menu" aria-labelledby="aria-label-mailboxmenu">
171
- <roundcube:button command="expunge" type="link-menuitem" label="compact" classAct="active" />
172
- <roundcube:button command="purge" type="link-menuitem" label="empty" classAct="active" />
173
- <roundcube:button command="mark-all-read" type="link-menuitem" label="markallread" classAct="active" />
174
- <roundcube:button command="import-messages" type="link-menuitem" name="messageimport" classAct="active" label="importmessages" onclick="UI.import_dialog()" />
175
- <roundcube:button command="folders" task="settings" type="link-menuitem" label="managefolders" classAct="active" />
176
- <roundcube:container name="mailboxoptions" id="mailboxoptionsmenu" />
177
- </ul>
178
-</div>
179
-
180
-<div id="listselectmenu" class="popupmenu dropdown" aria-hidden="true">
181
- <h3 id="aria-label-listselectmenu" class="voice"><roundcube:label name="arialabellistselectmenu" /></h3>
182
- <ul id="listselectmenu-menu" class="toolbarmenu iconized" role="menu" aria-labelledby="aria-label-listselectmenu">
183
- <roundcube:button command="select-all" type="link-menuitem" label="all" class="icon" classAct="icon active" innerclass="icon mail" />
184
- <roundcube:button command="select-all" type="link-menuitem" prop="page" label="currpage" class="icon" classAct="icon active" innerclass="icon list" />
185
- <roundcube:button command="select-all" type="link-menuitem" prop="unread" label="unread" class="icon" classAct="icon active" innerclass="icon unread" />
186
- <roundcube:button command="select-all" type="link-menuitem" prop="flagged" label="flagged" class="icon" classAct="icon active" innerclass="icon flagged" />
187
- <roundcube:button command="select-all" type="link-menuitem" prop="invert" label="invert" class="icon" classAct="icon active" innerclass="icon invert" />
188
- <roundcube:button command="select-none" type="link-menuitem" label="none" class="icon" classAct="icon active" innerclass="icon cross" />
189
- </ul>
190
-</div>
191
-
192
-<div id="threadselectmenu" class="popupmenu dropdown" aria-hidden="true">
193
- <h3 id="aria-label-threadselectmenu" class="voice"><roundcube:label name="arialabelthreadselectmenu" /></h3>
194
- <ul id="threadselectmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-threadselectmenu">
195
- <roundcube:button command="expand-all" type="link-menuitem" label="expand-all" class="icon" classAct="icon active" innerclass="icon conversation" />
196
- <roundcube:button command="expand-unread" type="link-menuitem" label="expand-unread" class="icon" classAct="icon active" innerclass="icon conversation" />
197
- <roundcube:button command="collapse-all" type="link-menuitem" label="collapse-all" class="icon" classAct="icon active" innerclass="icon conversation" />
198
- </ul>
199
-</div>
200
-
201
-<div id="listoptions" class="propform popupdialog" role="dialog" aria-labelledby="aria-label-listoptions" aria-hidden="true">
202
-<h2 id="aria-label-listoptions" class="voice"><roundcube:label name="arialabelmessagelistoptions" /></h2>
203
- <roundcube:if condition="!in_array('layout', (array)config:dont_override)" />
204
- <fieldset id="listoptions-layout" class="floating">
205
- <legend><roundcube:label name="layout" /></legend>
206
- <ul class="proplist">
207
- <li><label><input type="radio" name="layout" value="widescreen" /> <span><roundcube:label name="layoutwidescreen" /></span></label></li>
208
- <li><label><input type="radio" name="layout" value="desktop" /> <span><roundcube:label name="layoutdesktop" /></span></label></li>
209
- <li><label><input type="radio" name="layout" value="list" /> <span><roundcube:label name="layoutlist" /></span></label></li>
210
- </ul>
211
- </fieldset>
212
- <roundcube:endif />
213
- <roundcube:if condition="!in_array('list_cols', (array)config:dont_override)" />
214
- <fieldset id="listoptions-columns" class="floating">
215
- <legend><roundcube:label name="listcolumns" /></legend>
216
- <ul class="proplist">
217
- <li><label class="disabled"><input type="checkbox" name="list_col" value="threads" checked disabled /> <span><roundcube:label name="threads" /></span></label></li>
218
- <li><label class="disabled"><input type="checkbox" name="list_col" value="subject" checked disabled /> <span><roundcube:label name="subject" /></span></label></li>
219
- <li><label><input type="checkbox" name="list_col" value="fromto" /> <span><roundcube:label name="fromto" /></span></label></li>
220
- <li><label><input type="checkbox" name="list_col" value="from" /> <span><roundcube:label name="from" /></span></label></li>
221
- <li><label><input type="checkbox" name="list_col" value="to" /> <span><roundcube:label name="to" /></span></label></li>
222
- <li><label><input type="checkbox" name="list_col" value="replyto" /> <span><roundcube:label name="replyto" /></span></label></li>
223
- <li><label><input type="checkbox" name="list_col" value="cc" /> <span><roundcube:label name="cc" /></span></label></li>
224
- <li><label><input type="checkbox" name="list_col" value="date" /> <span><roundcube:label name="date" /></span></label></li>
225
- <li><label><input type="checkbox" name="list_col" value="size" /> <span><roundcube:label name="size" /></span></label></li>
226
- <li><label><input type="checkbox" name="list_col" value="status" /> <span><roundcube:label name="readstatus" /></span></label></li>
227
- <li><label><input type="checkbox" name="list_col" value="attachment" /> <span><roundcube:label name="attachment" /></span></label></li>
228
- <li><label><input type="checkbox" name="list_col" value="flag" /> <span><roundcube:label name="flag" /></span></label></li>
229
- <li><label><input type="checkbox" name="list_col" value="priority" /> <span><roundcube:label name="priority" /></span></label></li>
230
- </ul>
231
- </fieldset>
232
- <roundcube:endif />
233
- <roundcube:if condition="!in_array('message_sort_col', (array)config:dont_override)" />
234
- <fieldset id="listoptions-sortcol" class="floating">
235
- <legend><roundcube:label name="listsorting" /></legend>
236
- <ul class="proplist">
237
- <li><label><input type="radio" name="sort_col" value="" /> <span><roundcube:label name="nonesort" /></span></label></li>
238
- <li><label><input type="radio" name="sort_col" value="arrival" /> <span><roundcube:label name="arrival" /></span></label></li>
239
- <li><label><input type="radio" name="sort_col" value="date" /> <span><roundcube:label name="sentdate" /></span></label></li>
240
- <li><label><input type="radio" name="sort_col" value="subject" /> <span><roundcube:label name="subject" /></span></label></li>
241
- <li><label><input type="radio" name="sort_col" value="fromto" /> <span><roundcube:label name="fromto" /></span></label></li>
242
- <li><label><input type="radio" name="sort_col" value="from" /> <span><roundcube:label name="from" /></span></label></li>
243
- <li><label><input type="radio" name="sort_col" value="to" /> <span><roundcube:label name="to" /></span></label></li>
244
- <li><label><input type="radio" name="sort_col" value="cc" /> <span><roundcube:label name="cc" /></span></label></li>
245
- <li><label><input type="radio" name="sort_col" value="size" /> <span><roundcube:label name="size" /></span></label></li>
246
- </ul>
247
- </fieldset>
248
- <roundcube:endif />
249
- <roundcube:if condition="!in_array('message_sort_order', (array)config:dont_override)" />
250
- <fieldset id="listoptions-sortord" class="floating">
251
- <legend><roundcube:label name="listorder" /></legend>
252
- <ul class="proplist">
253
- <li><label><input type="radio" name="sort_ord" value="ASC" /> <span><roundcube:label name="asc" /></span></label></li>
254
- <li><label><input type="radio" name="sort_ord" value="DESC" /> <span><roundcube:label name="desc" /></span></label></li>
255
- </ul>
256
- </fieldset>
257
- <roundcube:endif />
258
- <roundcube:container name="listoptions" id="listoptionsmenu" />
259
- <br style="clear:both" />
260
- <div class="formbuttons">
261
- <roundcube:button command="menu-save" id="listmenusave" type="input" class="button mainaction" label="save" />
262
- <roundcube:button command="menu-close" prop="messagelistmenu" id="listmenucancel" type="input" class="button" label="cancel" />
263
- </div>
264
-</div>
265
-
266
-<roundcube:object name="messageimportform" id="uploadform" buttons="no" class="popupdialog" />
267
-
268
-<roundcube:include file="/includes/footer.html" />
269
-
270
-</body>
271
-</html>
272
roundcubemail-1.6.tar.gz/skins/larry/templates/message.html
Deleted
113
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<div id="mainscreen">
12
-
13
-<h1 class="voice"><roundcube:object name="messageHeaders" valueOf="subject" /></h1>
14
-
15
-<!-- toolbar -->
16
-<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
17
-<div id="messagetoolbar" class="toolbar fullwidth" role="toolbar" aria-labelledby="aria-label-toolbar">
18
-<roundcube:if condition="!env:extwin" />
19
- <roundcube:button command="list" type="link" class="button back disabled" classAct="button back" classSel="button back pressed" label="back" />
20
-<roundcube:endif />
21
- <roundcube:include file="/includes/mailtoolbar.html" />
22
-</div>
23
-
24
-<roundcube:if condition="!env:extwin" />
25
-
26
-<div id="mainscreencontent">
27
-
28
-<div id="mailview-left">
29
-
30
-<!-- folders list -->
31
-<div id="mailboxcontainer" class="uibox listbox" role="navigation" aria-labelledby="aria-label-folderlist">
32
-<h2 id="aria-label-folderlist" class="voice"><roundcube:label name="arialabelfolderlist" /></h2>
33
-<div class="scroller">
34
-<roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing folderlist" folder_filter="mail" unreadwrap="%s" />
35
-</div>
36
-</div>
37
-
38
-</div>
39
-
40
-<div id="mailview-right" class="uibox" role="main">
41
-<roundcube:else />
42
-<roundcube:object name="mailboxlist" folder_filter="mail" type="js" />
43
-
44
-<div id="mailview-right" class="offset fullwidth uibox" role="main">
45
-<roundcube:endif />
46
-
47
-<div id="messageheader">
48
-<span class="moreheaderstoggle"></span>
49
-
50
-<!-- record navigation -->
51
-<div id="countcontrols" class="pagenav" role="navigation" aria-labelledby="aria-label-countcontrols">
52
- <h2 id="aria-label-countcontrols" class="voice"><roundcube:label name="arialabelmessagenav" /></h2>
53
- <roundcube:object name="messageCountDisplay" class="countdisplay" />
54
- <roundcube:button command="previousmessage" type="link" class="button prevpage disabled" classAct="button prevpage" classSel="button prevpage pressed" innerClass="inner" title="previousmessage" label="previous" />
55
- <roundcube:button command="nextmessage" type="link" class="button nextpage disabled" classAct="button nextpage" classSel="button nextpage pressed" innerClass="inner" title="nextmessage" label="next" />
56
-</div>
57
-
58
-<roundcube:if condition="env:optional_format=='text'" />
59
-<div id="formatcontrols">
60
- <span class="buttongroup">
61
- <roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html selected" innerClass="icon" title="changeformathtml" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text" classSel="button last changeformat text pressed" innerClass="icon" title="changeformattext" />
62
- </span>
63
-</div>
64
-<roundcube:elseif condition="env:optional_format=='html'" />
65
-<div id="formatcontrols">
66
- <span class="buttongroup">
67
- <roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html" classSel="button first changeformat html pressed" innerClass="icon" title="changeformathtml" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text selected" innerClass="icon" title="changeformattext" />
68
- </span>
69
-</div>
70
-<roundcube:endif />
71
-
72
-<h2 class="subject"><span class="flag-icon"></span><span onmouseover="rcube_webmail.long_subject_title(this)"><span class="voice"><roundcube:label name="subject" />: </span><roundcube:object name="messageHeaders" valueOf="subject" /></span></h2>
73
-<div class="message-headers">
74
-<roundcube:object name="messageHeaders" class="headers-table" addicon="/images/addcontact.png" exclude="subject" max="20" />
75
-</div>
76
-<roundcube:object name="messageFullHeaders" id="full-headers" />
77
-
78
-<div id="contactphoto"><roundcube:object name="contactphoto" /></div>
79
-</div>
80
-
81
-<div id="messagecontent">
82
-<div class="rightcol" role="region" aria-labelledby="aria-label-messageattachments">
83
-<h2 id="aria-label-messageattachments" class="voice"><roundcube:label name="attachments" /></h2>
84
-<roundcube:object name="messageAttachments" id="attachment-list" class="attachmentslist" />
85
-</div>
86
-<div class="leftcol" role="region" aria-labelledby="aria-label-messagebody">
87
-<h2 id="aria-label-messagebody" class="voice"><roundcube:label name="arialabelmessagebody" /></h2>
88
-<roundcube:object name="messageObjects" id="message-objects" />
89
-<roundcube:object name="messageBody" id="messagebody" headertableclass="message-partheaders headers-table" />
90
-</div>
91
-</div>
92
-
93
-</div><!-- end mailview-right -->
94
-
95
-<roundcube:if condition="!env:extwin" />
96
-</div><!-- end mainscreencontent -->
97
-<roundcube:endif />
98
-
99
-</div><!-- end mainscreen -->
100
-
101
-<div id="attachmentmenu" class="popupmenu" aria-hidden="true">
102
- <ul class="toolbarmenu" id="attachmentoptionsmenu" role="menu">
103
- <roundcube:button command="open-attachment" id="attachmenuopen" type="link-menuitem" label="open" class="icon" classAct="icon active" innerclass="icon extwin" />
104
- <roundcube:button command="download-attachment" id="attachmenudownload" type="link-menuitem" label="download" class="icon" classAct="icon active" innerclass="icon download" />
105
- <roundcube:container name="attachmentmenu" id="attachmentoptionsmenu" />
106
- </ul>
107
-</div>
108
-
109
-<roundcube:include file="/includes/footer.html" />
110
-
111
-</body>
112
-</html>
113
roundcubemail-1.6.tar.gz/skins/larry/templates/messageerror.html
Deleted
57
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<roundcube:if condition="env:action != 'show'" />
8
-<body class="iframe fullheight">
9
-
10
-<div id="mainscreen" class="watermark" style="top:0"></div>
11
-
12
-<roundcube:else />
13
-<body class="<roundcube:exp expression="env:extwin ? 'extwin' : ''" />">
14
-
15
-<roundcube:include file="/includes/header.html" />
16
-
17
-<div id="mainscreen">
18
-
19
-<h1 class="voice"><roundcube:label name="messageopenerror" /></h1>
20
-
21
-<!-- toolbar -->
22
-<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
23
-<div id="messagetoolbar" class="toolbar fullwidth" role="toolbar" aria-labelledby="aria-label-toolbar">
24
- <roundcube:button command="list" type="link" class="button back disabled" classAct="button back" classSel="button back pressed" label="back" />
25
-</div>
26
-
27
-<div id="mainscreencontent">
28
-
29
-<div id="mailview-left">
30
-
31
-<!-- folders list -->
32
-<div id="mailboxcontainer" class="uibox listbox" role="navigation" aria-labelledby="aria-label-folderlist">
33
-<h2 id="aria-label-folderlist" class="voice"><roundcube:label name="arialabelfolderlist" /></h2>
34
-<div class="scroller">
35
- <roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing" folder_filter="mail" unreadwrap="%s" />
36
-</div>
37
-</div>
38
-
39
-</div>
40
-
41
-<div id="mailview-right" class="uibox">
42
-
43
-<div id="messagecontent" class="watermark" style="top:0"></div>
44
-
45
-</div><!-- end mailview-right -->
46
-
47
-</div><!-- end mainscreencontent -->
48
-
49
-</div><!-- end mainscreen -->
50
-
51
-<roundcube:include file="/includes/footer.html" />
52
-
53
-<roundcube:endif />
54
-
55
-</body>
56
-</html>
57
roundcubemail-1.6.tar.gz/skins/larry/templates/messagepart.html
Deleted
92
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="extwin noscroll">
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<div id="mainscreen">
12
-
13
-<h1 class="voice"><roundcube:label name="attachment" />: <roundcube:var name="env:filename" /></h1>
14
-
15
-<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
16
-<div id="messagetoolbar" class="toolbar fullwidth" role="toolbar" aria-labelledby="aria-label-toolbar">
17
- <roundcube:button command="download" type="link" class="button download disabled" classAct="button download" classSel="button download pressed" label="download" title="download" />
18
- <roundcube:button command="print" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" title="print" />
19
- <roundcube:container name="toolbar" id="messagetoolbar" />
20
- <roundcube:if condition="env:is_message" />
21
- <span class="spacer"></span>
22
- <roundcube:button command="reply" type="link" class="button reply disabled" classAct="button reply" classSel="button reply pressed" label="reply" title="replytomessage" />
23
- <span class="dropbutton">
24
- <roundcube:button command="reply-all" type="link" class="button reply-all disabled" classAct="button reply-all" classSel="button reply-all pressed" label="replyall" title="replytoallmessage" />
25
- <a href="#reply-all" class="dropbuttontip" id="replyallmenulink" onclick="UI.toggle_popup('replyallmenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="replyallmenu-menu" tabindex="0">Reply-all options</a>
26
- </span>
27
- <span class="dropbutton">
28
- <roundcube:button command="forward" type="link" class="button forward disabled" classAct="button forward" classSel="button forward pressed" label="forward" title="forwardmessage" />
29
- <a href="#forward" class="dropbuttontip" id="forwardmenulink" onclick="UI.toggle_popup('forwardmenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="forwardmenu-menu" tabindex="0">Forwarding options</a>
30
- </span>
31
- <roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="button more" label="more" title="moreactions" onclick="UI.toggle_popup('messagemenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="messagemenu-menu" />
32
- <roundcube:endif />
33
- <roundcube:if condition="stripos(env:mimetype, 'image/') === 0" />
34
- <roundcube:button command="image-scale" type="link" prop="+" data-hidden="small" class="button zoomin disabled" classAct="button zoomin" label="zoomin" title="increaseimage" innerclass="inner" />
35
- <roundcube:button command="image-scale" type="link" prop="-" data-hidden="small" class="button zoomout disabled" classAct="button zoomout" label="zoomout" title="decreaseimage" innerclass="inner" />
36
- <roundcube:button command="image-rotate" type="link" class="button rotate disabled" classAct="button rotate" data-hidden="small" label="rotate" title="rotateimage" innerclass="inner" />
37
- <roundcube:endif />
38
-</div>
39
-
40
-<div id="mainscreencontent">
41
-
42
-<div id="messagepartheader" class="uibox listbox" role="contentinfo" aria-labelledby="aria-label-contentinfo">
43
- <h2 class="boxtitle" id="aria-label-contentinfo"><roundcube:label name="properties" /></h2>
44
- <div class="scroller">
45
- <roundcube:object name="messagePartControls" class="listing" />
46
- </div>
47
-</div>
48
-
49
-<div id="messagepartcontainer" class="uibox" role="main" aria-labelledby="aria-label-messagepart">
50
- <h2 id="aria-label-messagepart" class="voice"><roundcube:label name="arialabelattachmentpreview" /></h2>
51
- <div class="iframebox">
52
- <roundcube:object name="messagePartFrame" id="messagepartframe" frameborder="0" title="arialabelattachmentpreview" />
53
- </div>
54
-</div>
55
-
56
-</div>
57
-</div>
58
-
59
-<roundcube:if condition="env:is_message" />
60
-<div id="forwardmenu" class="popupmenu" aria-hidden="true">
61
- <h3 id="aria-label-forwardmenu" class="voice"><roundcube:label name="arialabelforwardingoptions" /></h3>
62
- <ul id="forwardmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-forwardmenu">
63
- <roundcube:button type="link-menuitem" command="forward-inline" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" />
64
- <roundcube:button type="link-menuitem" command="forward-attachment" label="forwardattachment" prop="sub" classAct="forwardattachmentlink active" class="forwardattachmentlink" />
65
- <roundcube:container name="forwardmenu" id="forwardmenu-menu" />
66
- </ul>
67
-</div>
68
-
69
-<div id="replyallmenu" class="popupmenu" aria-hidden="true">
70
- <h3 id="aria-label-replyallmenu" class="voice"><roundcube:label name="arialabelreplyalloptions" /></h3>
71
- <ul id="replyallmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-replyallmenu">
72
- <roundcube:button type="link-menuitem" command="reply-all" label="replyall" prop="sub" class="replyalllink" classAct="replyalllink active" />
73
- <roundcube:button type="link-menuitem" command="reply-list" label="replylist" prop="sub" class="replylistlink" classAct="replylistlink active" />
74
- <roundcube:container name="replyallmenu" id="replyallmenu-menu" />
75
- </ul>
76
-</div>
77
-
78
-<div id="messagemenu" class="popupmenu" aria-hidden="true">
79
- <h3 id="aria-label-messagemenu" class="voice"><roundcube:label name="arialabelmoremessageactions" /></h3>
80
- <ul id="messagemenu-menu" class="toolbarmenu iconized" role="menu" aria-labelledby="aria-label-messagemenu">
81
- <roundcube:button type="link-menuitem" command="edit" prop="new" label="editasnew" class="icon" classAct="icon active" innerclass="icon edit" />
82
- <roundcube:button type="link-menuitem" command="viewsource" label="viewsource" class="icon" classAct="icon active" innerclass="icon viewsource" />
83
- <roundcube:container name="messagemenu" id="messagemenu-menu" />
84
- </ul>
85
-</div>
86
-<roundcube:endif />
87
-
88
-<roundcube:include file="/includes/footer.html" />
89
-
90
-</body>
91
-</html>
92
roundcubemail-1.6.tar.gz/skins/larry/templates/messagepreview.html
Deleted
83
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe fullheight">
8
-
9
-<div id="messageheader" class="previewheader">
10
-
11
-<!-- record navigation -->
12
-<div id="countcontrols" role="toolbar" aria-labelledby="aria-label-messagetoolbar">
13
-<h2 id="aria-label-messagetoolbar" class="voice"><roundcube:label name="arialabelmessageactions" /></h2>
14
-<roundcube:if condition="env:optional_format=='text'" />
15
- <span class="buttongroup">
16
- <roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html selected" innerClass="icon" title="changeformathtml" content="HTML" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text" classSel="button changeformat text pressed" innerClass="icon" title="changeformattext" content="Text" />
17
- </span>
18
-<roundcube:elseif condition="env:optional_format=='html'" />
19
-
20
- <span class="buttongroup">
21
- <roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html" classSel="button changeformat html pressed" innerClass="icon" title="changeformathtml" content="HTML" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text selected" innerClass="icon" title="changeformattext" content="Text" />
22
- </span>
23
-<roundcube:endif />
24
-<roundcube:if condition="env:mailbox != config:drafts_mbox || env:message_context">
25
-
26
- <roundcube:button command="reply" type="link" class="button reply" classSel="button reply pressed" innerClass="icon" title="replytomessage" label="replytomessage" />
27
- <roundcube:button command="reply-all" type="link" class="button replyall" classSel="button replyall pressed" innerClass="icon" title="replytoallmessage" label="replytoallmessage" />
28
- <roundcube:button command="forward" type="link" class="button forward" classSel="button forward pressed" innerClass="icon" title="forwardmessage" label="forwardmessage" />
29
-<roundcube:endif />
30
-<roundcube:if condition="!env:message_context">
31
-
32
- <roundcube:button command="extwin" type="link" class="button extwin" classSel="button extwin pressed" innerClass="icon" title="openinextwin" label="openinextwin" />
33
-<roundcube:endif />
34
-</div>
35
-
36
-<h3 class="subject"><span class="flag-icon"></span><span onmouseover="rcube_webmail.long_subject_title(this)"><span class="voice"><roundcube:label name="subject" />: </span><roundcube:object name="messageHeaders" valueOf="subject" /></span></h3>
37
-
38
-<a href="#details" id="previewheaderstoggle" class="moreheaderstoggle" aria-expanded="false"><span class="iconlink" title="<roundcube:label name='togglemoreheaders' />"></span></a>
39
-<div id="contactphoto"><roundcube:object name="contactphoto" /></div>
40
-
41
-<table class="headers-table" id="preview-shortheaders"><tbody><tr>
42
-<roundcube:if condition="env:mailbox == config:drafts_mbox || env:mailbox == config:sent_mbox">
43
- <td class="header-title"><roundcube:label name="to" /></td>
44
- <td class="header from"><roundcube:object name="messageHeaders" valueOf="to" max="3" addicon="/images/addcontact.png" /></td>
45
-<roundcube:else />
46
- <td class="header-title"><roundcube:label name="from" /></td>
47
- <td class="header from"><roundcube:object name="messageHeaders" valueOf="from" addicon="/images/addcontact.png" /></td>
48
-<roundcube:endif />
49
- <td class="header-title"><roundcube:label name="date" /></td>
50
- <td class="header date"><span><roundcube:object name="messageHeaders" valueOf="date" /></span></td>
51
-</tr></tbody></table>
52
-
53
-<roundcube:object name="messageHeaders" id="preview-allheaders" class="headers-table" addicon="/images/addcontact.png" max="10" exclude="subject,replyto" />
54
-
55
-<roundcube:object name="messageFullHeaders" id="full-headers" />
56
-
57
-</div>
58
-
59
-<div id="messagepreview" role="main">
60
-<div class="rightcol" role="region" aria-labelledby="aria-label-messageattachments">
61
-<h2 id="aria-label-messageattachments" class="voice"><roundcube:label name="attachments" /></h2>
62
-<roundcube:object name="messageAttachments" id="attachment-list" class="attachmentslist" />
63
-</div>
64
-<div class="leftcol" role="region" aria-labelledby="aria-label-messagebody">
65
-<h2 id="aria-label-messagebody" class="voice"><roundcube:label name="arialabelmessagebody" /></h2>
66
-<roundcube:object name="messageObjects" id="message-objects" />
67
-<roundcube:object name="messageBody" id="messagebody" headertableclass="message-partheaders headers-table" />
68
-</div>
69
-</div>
70
-
71
-<div id="attachmentmenu" class="popupmenu" aria-hidden="true">
72
- <ul class="toolbarmenu" id="attachmentoptionsmenu" role="menu">
73
- <roundcube:button command="open-attachment" id="attachmenuopen" type="link-menuitem" label="open" class="icon" classAct="icon active" innerclass="icon extwin" />
74
- <roundcube:button command="download-attachment" id="attachmenudownload" type="link-menuitem" label="download" class="icon" classAct="icon active" innerclass="icon download" />
75
- <roundcube:container name="attachmentmenu" id="attachmentoptionsmenu" />
76
- </ul>
77
-</div>
78
-
79
-<roundcube:include file="/includes/footer.html" />
80
-
81
-</body>
82
-</html>
83
roundcubemail-1.6.tar.gz/skins/larry/templates/messageprint.html
Deleted
21
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:object name="meta" />
6
-<roundcube:object name="links" />
7
-<link rel="stylesheet" type="text/css" href="/print.css" />
8
-</head>
9
-<body>
10
-
11
-<div id="header"><roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" border="0" alt="Logo" logo-type="print" logo-match="all" /></div>
12
-
13
-<div id="printmessageframe">
14
-<roundcube:object name="messageHeaders" class="headers-table" max="10" />
15
-<roundcube:object name="messageAttachments" id="attachment-list" />
16
-<roundcube:object name="messageBody" id="messagebody" showImages="false" />
17
-</div>
18
-
19
-</body>
20
-</html>
21
roundcubemail-1.6.tar.gz/skins/larry/templates/plugin.html
Deleted
29
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="noscroll">
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<div id="mainscreen" class="offset">
12
-
13
-<roundcube:if condition="env:task == 'settings'" />
14
- <roundcube:include file="/includes/settingstabs.html" />
15
-<roundcube:endif />
16
-
17
-<div id="pluginbody" class="uibox contentbox">
18
-<roundcube:object name="plugin.body" />
19
-</div>
20
-
21
-</div>
22
-
23
-<roundcube:object name="plugin.footer" />
24
-
25
-<roundcube:include file="/includes/footer.html" />
26
-
27
-</body>
28
-</html>
29
roundcubemail-1.6.tar.gz/skins/larry/templates/responseedit.html
Deleted
23
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe">
8
-
9
-<h1 class="boxtitle"><roundcube:object name="steptitle" /></h1>
10
-
11
-<div id="preferences-details" class="boxcontent">
12
-<roundcube:object name="responseform" class="propform" size="60" textareacols="60" textarearows="18" />
13
-</div>
14
-
15
-<div class="footerleft formbuttons">
16
- <roundcube:button command="save" type="input" class="button mainaction" label="save" condition="!env:readonly" />
17
-</div>
18
-
19
-<roundcube:include file="/includes/footer.html" />
20
-
21
-</body>
22
-</html>
23
roundcubemail-1.6.tar.gz/skins/larry/templates/responses.html
Deleted
43
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<div id="mainscreen" class="offset">
12
-
13
-<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="responses" /></h1>
14
-
15
-<roundcube:include file="/includes/settingstabs.html" />
16
-
17
-<div id="settings-right" role="main" aria-labelledby="aria-label-responseslist">
18
-
19
-<div id="responseslist" class="uibox listbox">
20
-<h2 class="boxtitle" id="aria-label-responseslist"><roundcube:label name="responses" /></h2>
21
-<div class="scroller withfooter">
22
-<roundcube:object name="responsesList" id="responses-table" class="listing" cellspacing="0" noheader="true" role="listbox" />
23
-</div>
24
-<div class="boxfooter">
25
-<roundcube:button command="add" type="link" title="newresponse" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="addresponse" /><roundcube:button command="delete" type="link" title="delete" class="listbutton delete disabled" classAct="listbutton delete" innerClass="inner" label="delete" />
26
-</div>
27
-</div>
28
-
29
-<div id="response-details" class="uibox contentbox">
30
- <div class="iframebox">
31
- <roundcube:object name="contentframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="env:blankpage" title="arialabelresponseeditfrom" />
32
- </div>
33
-</div>
34
-
35
-</div>
36
-
37
-</div>
38
-
39
-<roundcube:include file="/includes/footer.html" />
40
-
41
-</body>
42
-</html>
43
roundcubemail-1.6.tar.gz/skins/larry/templates/settings.html
Deleted
40
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
8
-
9
-<roundcube:include file="/includes/header.html" />
10
-
11
-<div id="mainscreen" class="offset">
12
-
13
-<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="preferences" /></h1>
14
-
15
-<roundcube:include file="/includes/settingstabs.html" />
16
-
17
-<div id="settings-right">
18
-
19
-<div id="sectionslist" class="uibox listbox" role="navigation" aria-labelledby="aria-label-prefsection">
20
-<h2 id="aria-label-prefsection" class="boxtitle"><roundcube:label name="section" /></h2>
21
-<div class="scroller">
22
- <roundcube:object name="sectionslist" id="sections-table" class="listing iconized" noheader="true" />
23
-</div>
24
-</div>
25
-
26
-<div id="preferences-box" class="uibox contentbox" role="main">
27
- <div class="iframebox">
28
- <roundcube:object name="contentframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="env:blankpage" title="arialabelpreferencesform" />
29
- </div>
30
-</div>
31
-
32
-</div>
33
-
34
-</div>
35
-
36
-<roundcube:include file="/includes/footer.html" />
37
-
38
-</body>
39
-</html>
40
roundcubemail-1.6.tar.gz/skins/larry/templates/settingsedit.html
Deleted
23
1
2
-<roundcube:object name="doctype" value="html5" />
3
-<html>
4
-<head>
5
-<roundcube:include file="/includes/links.html" />
6
-</head>
7
-<body class="iframe">
8
-
9
-<h1 class="boxtitle"><roundcube:object name="sectionname" /></h1>
10
-
11
-<div id="preferences-details" class="boxcontent">
12
-<roundcube:object name="userprefs" form="form" class="propform" />
13
-</div>
14
-
15
-<div class="footerleft formbuttons">
16
- <roundcube:button command="save" type="input" class="button mainaction" label="save" />
17
-</div>
18
-
19
-<roundcube:include file="/includes/footer.html" />
20
-
21
-</body>
22
-</html>
23
roundcubemail-1.6.tar.gz/skins/larry/thumbnail.png
Deleted
roundcubemail-1.6.tar.gz/skins/larry/ui.js
Deleted
1503
1
2
-/**
3
- * Roundcube functions for default skin interface
4
- *
5
- * Copyright (c) The Roundcube Dev Team
6
- *
7
- * The contents are subject to the Creative Commons Attribution-ShareAlike
8
- * License. It is allowed to copy, distribute, transmit and to adapt the work
9
- * by keeping credits to the original autors in the README file.
10
- * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
11
- *
12
- * @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt CC0-1.0
13
- */
14
-
15
-function rcube_mail_ui()
16
-{
17
- var env = {};
18
- var popups = {};
19
- var popupconfig = {
20
- forwardmenu: { editable:1 },
21
- searchmenu: { editable:1, callback:searchmenu },
22
- attachmentmenu: { },
23
- listoptions: { editable:1 },
24
- groupmenu: { above:1 },
25
- mailboxmenu: { above:1 },
26
- spellmenu: { callback: spellmenu },
27
- 'folder-selector': { iconized:1 }
28
- };
29
-
30
- var me = this;
31
- var mailviewsplit;
32
- var mailviewsplit2;
33
- var compose_headers = {};
34
- var prefs;
35
-
36
- // export public methods
37
- this.set = setenv;
38
- this.init = init;
39
- this.init_tabs = init_tabs;
40
- this.show_about = show_about;
41
- this.show_popup = show_popup;
42
- this.toggle_popup = toggle_popup;
43
- this.add_popup = add_popup;
44
- this.import_dialog = import_dialog;
45
- this.set_searchmod = set_searchmod;
46
- this.show_header_row = show_header_row;
47
- this.hide_header_row = hide_header_row;
48
- this.update_quota = update_quota;
49
- this.get_pref = get_pref;
50
- this.save_pref = save_pref;
51
- this.folder_search_init = folder_search_init;
52
-
53
-
54
- // set minimal mode on small screens (don't wait for document.ready)
55
- if (window.$ && document.body) {
56
- var minmode = get_pref('minimalmode');
57
- if (parseInt(minmode) || (minmode === null && $(window).height() < 850)) {
58
- $(document.body).addClass('minimal');
59
- }
60
-
61
- if (bw.tablet) {
62
- $('#viewport').attr('content', "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0");
63
- }
64
-
65
- $(document).ready(function() { me.init(); });
66
- }
67
-
68
-
69
- /**
70
- *
71
- */
72
- function setenv(key, val)
73
- {
74
- envkey = val;
75
- }
76
-
77
- /**
78
- * Get preference stored in browser
79
- */
80
- function get_pref(key)
81
- {
82
- if (!prefs) {
83
- prefs = rcmail.local_storage_get_item('prefs.larry', {});
84
- }
85
-
86
- // fall-back to cookies
87
- if (prefskey == null) {
88
- var cookie = rcmail.get_cookie(key);
89
- if (cookie != null) {
90
- prefskey = cookie;
91
-
92
- // copy value to local storage and remove cookie (if localStorage is supported)
93
- if (rcmail.local_storage_set_item('prefs.larry', prefs)) {
94
- rcmail.set_cookie(key, cookie, new Date()); // expire cookie
95
- }
96
- }
97
- }
98
-
99
- return prefskey;
100
- }
101
-
102
- /**
103
- * Saves preference value to browser storage
104
- */
105
- function save_pref(key, val)
106
- {
107
- prefskey = val;
108
-
109
- // write prefs to local storage (if supported)
110
- if (!rcmail.local_storage_set_item('prefs.larry', prefs)) {
111
- // store value in cookie
112
- rcmail.set_cookie(key, val, false);
113
- }
114
- }
115
-
116
- /**
117
- * Initialize UI
118
- * Called on document.ready
119
- */
120
- function init()
121
- {
122
- rcmail.addEventListener('message', message_displayed);
123
-
124
- $.widget('ui.dialog', $.ui.dialog, {
125
- open: function() {
126
- this._super();
127
- dialog_open(this);
128
- return this;
129
- }});
130
-
131
- /*** prepare minmode functions ***/
132
- $('#taskbar a').each(function(i,elem){
133
- $(elem).append('<span class="tooltip">' + $('.button-inner', this).html() + '</span>')
134
- });
135
-
136
- $('#taskbar .minmodetoggle').click(function(e){
137
- var ismin = $(document.body).toggleClass('minimal').hasClass('minimal');
138
- save_pref('minimalmode', ismin?1:0);
139
- $(window).resize();
140
- });
141
-
142
- /*** mail task ***/
143
- if (rcmail.env.task == 'mail') {
144
- rcmail.addEventListener('menu-open', menu_toggle)
145
- .addEventListener('menu-close', menu_toggle)
146
- .addEventListener('menu-save', save_listoptions)
147
- .addEventListener('enable-command', enable_command)
148
- .addEventListener('responseafterlist', function(e){ switch_view_mode(rcmail.env.threading ? 'thread' : 'list', true) })
149
- .addEventListener('responseaftersearch', function(e){ switch_view_mode(rcmail.env.threading ? 'thread' : 'list', true) });
150
-
151
- var dragmenu = $('#dragmessagemenu');
152
- if (dragmenu.length) {
153
- rcmail.gui_object('dragmenu', 'dragmessagemenu');
154
- popups.dragmenu = dragmenu;
155
- }
156
-
157
- if (rcmail.env.action == 'show' || rcmail.env.action == 'preview') {
158
- rcmail.addEventListener('aftershow-headers', function() { layout_messageview(); })
159
- .addEventListener('afterhide-headers', function() { layout_messageview(); });
160
-
161
- $('#previewheaderstoggle').click(function(e) {
162
- toggle_preview_headers();
163
- if (this.blur && !rcube_event.is_keyboard(e))
164
- this.blur();
165
- return false;
166
- });
167
-
168
- // add menu link for each attachment
169
- $('#attachment-list > li').each(function() {
170
- attachmentmenu_append(this);
171
- });
172
-
173
- if (rcmail.env.action == 'preview' && get_pref('previewheaders') == '1') {
174
- toggle_preview_headers();
175
- }
176
-
177
- if (rcmail.env.action == 'show') {
178
- $('#messagecontent').focus();
179
- }
180
- }
181
- else if (rcmail.env.action == 'compose') {
182
- rcmail.addEventListener('fileappended', function(e) { if (e.attachment.complete) attachmentmenu_append(e.item); })
183
- .addEventListener('aftertoggle-editor', function(e) {
184
- window.setTimeout(function() { layout_composeview(); }, 200);
185
- })
186
- .addEventListener('compose-encrypted', function(e) {
187
- $("selectname='editorSelector'").prop('disabled', e.active);
188
- $('a.button.attach, a.button.responses')(e.active?'addClass':'removeClass')('disabled');
189
- $('#responseslist a.insertresponse')(e.active?'removeClass':'addClass')('active');
190
- });
191
-
192
- init_compose_editfields();
193
-
194
- $('#composeoptionstoggle').click(function(e){
195
- var expanded = $('#composeoptions').toggle().is(':visible');
196
- $('#composeoptionstoggle').toggleClass('remove').attr('aria-expanded', expanded ? 'true' : 'false');
197
- layout_composeview();
198
- save_pref('composeoptions', expanded ? '1' : '0');
199
- if (!rcube_event.is_keyboard(e))
200
- this.blur();
201
- return false;
202
- }).css('cursor', 'pointer');
203
-
204
- if (get_pref('composeoptions') !== '0') {
205
- $('#composeoptionstoggle').click();
206
- }
207
-
208
- // toggle compose options if opened in new window and they were visible before
209
- var opener_rc = rcmail.opener();
210
- if (opener_rc && opener_rc.env.action == 'compose' && $('#composeoptionstoggle', opener.document).hasClass('remove'))
211
- $('#composeoptionstoggle').click();
212
-
213
- new rcube_splitter({ id:'composesplitterv', p1:'#composeview-left', p2:'#composeview-right',
214
- orientation:'v', relative:true, start:206, min:170, size:12, render:layout_composeview }).init();
215
-
216
- // add menu link for each attachment
217
- $('#attachment-list > li').each(function() {
218
- attachmentmenu_append(this);
219
- });
220
- }
221
- else if (rcmail.env.action == 'bounce') {
222
- init_compose_editfields();
223
- }
224
- else if (rcmail.env.action == 'list' || !rcmail.env.action) {
225
- mail_layout();
226
-
227
- $('#maillistmode').addClass(rcmail.env.threading ? '' : 'selected').click(function(e) { switch_view_mode('list'); return false; });
228
- $('#mailthreadmode').addClass(rcmail.env.threading ? 'selected' : '').click(function(e) { switch_view_mode('thread'); return false; });
229
-
230
- rcmail.init_pagejumper('#pagejumper');
231
-
232
- rcmail.addEventListener('setquota', update_quota)
233
- .addEventListener('layout-change', mail_layout);
234
- }
235
- else if (rcmail.env.action == 'get') {
236
- new rcube_splitter({ id:'mailpartsplitterv', p1:'#messagepartheader', p2:'#messagepartcontainer',
237
- orientation:'v', relative:true, start:226, min:150, size:12}).init();
238
- }
239
-
240
- if ($('#mailview-left').length) {
241
- new rcube_splitter({ id:'mailviewsplitterv', p1:'#mailview-left', p2:'#mailview-right',
242
- orientation:'v', relative:true, start:206, min:150, size:12, callback:render_mailboxlist, render:resize_leftcol }).init();
243
- }
244
- }
245
- /*** settings task ***/
246
- else if (rcmail.env.task == 'settings') {
247
- rcmail.addEventListener('init', function(){
248
- var tab = '#settingstabpreferences';
249
- if (rcmail.env.action)
250
- tab = '#settingstab' + (rcmail.env.action.indexOf('identity')>0 ? 'identities' : rcmail.env.action.replace(/\./g, ''));
251
-
252
- $(tab).addClass('selected')
253
- .children().first().removeAttr('onclick').click(function() { return false; });
254
- });
255
-
256
- if (rcmail.env.action == 'folders') {
257
- new rcube_splitter({ id:'folderviewsplitter', p1:'#folderslist', p2:'#folder-details',
258
- orientation:'v', relative:true, start:266, min:180, size:12 }).init();
259
-
260
- rcmail.addEventListener('setquota', update_quota);
261
-
262
- folder_search_init($('#folderslist'));
263
- }
264
- else if (rcmail.env.action == 'identities') {
265
- new rcube_splitter({ id:'identviewsplitter', p1:'#identitieslist', p2:'#identity-details',
266
- orientation:'v', relative:true, start:266, min:180, size:12 }).init();
267
- }
268
- else if (rcmail.env.action == 'responses') {
269
- new rcube_splitter({ id:'responseviewsplitter', p1:'#responseslist', p2:'#response-details',
270
- orientation:'v', relative:true, start:266, min:180, size:12 }).init();
271
- }
272
- else if (rcmail.env.action == 'preferences' || !rcmail.env.action) {
273
- new rcube_splitter({ id:'prefviewsplitter', p1:'#sectionslist', p2:'#preferences-box',
274
- orientation:'v', relative:true, start:266, min:180, size:12 }).init();
275
- }
276
- else if (rcmail.env.action == 'edit-prefs') {
277
- var legend = $('#preferences-details fieldset.advanced legend'),
278
- toggle = $('<a href="#toggle"></a>')
279
- .text(rcmail.gettext('toggleadvancedoptions'))
280
- .attr('title', rcmail.gettext('toggleadvancedoptions'))
281
- .addClass('advanced-toggle');
282
-
283
- legend.click(function(e) {
284
- toggle.html($(this).hasClass('collapsed') ? '▲' : '▼');
285
-
286
- $(this).toggleClass('collapsed')
287
- .closest('fieldset').children('.propform').toggle()
288
- }).append(toggle).addClass('collapsed')
289
-
290
- // this magically fixes incorrect position of toggle link created above in Firefox 3.6
291
- if (bw.mz)
292
- legend.parents('form').css('display', 'inline');
293
- }
294
- }
295
- /*** addressbook task ***/
296
- else if (rcmail.env.task == 'addressbook') {
297
- rcmail.addEventListener('beforepushgroup', push_contactgroup)
298
- .addEventListener('beforepopgroup', pop_contactgroup)
299
- .addEventListener('menu-open', menu_toggle)
300
- .addEventListener('menu-close', menu_toggle);
301
-
302
- if (rcmail.env.action == '') {
303
- new rcube_splitter({ id:'addressviewsplitterd', p1:'#addressview-left', p2:'#addressview-right',
304
- orientation:'v', relative:true, start:206, min:150, size:12, render:resize_leftcol }).init();
305
- new rcube_splitter({ id:'addressviewsplitter', p1:'#addresslist', p2:'#contacts-box',
306
- orientation:'v', relative:true, start:266, min:260, size:12 }).init();
307
- }
308
-
309
- var dragmenu = $('#dragcontactmenu');
310
- if (dragmenu.length) {
311
- rcmail.gui_object('dragmenu', 'dragcontactmenu');
312
- popups.dragmenu = dragmenu;
313
- }
314
- }
315
-
316
- // turn a group of fieldsets into tabs
317
- $('.tabbed').each(function(idx, elem){ init_tabs(elem); })
318
-
319
- // decorate select elements
320
- $('select.decorated').each(function(){
321
- if (bw.opera) {
322
- $(this).removeClass('decorated');
323
- return;
324
- }
325
-
326
- var select = $(this),
327
- parent = select.parent(),
328
- height = Math.max(select.height(), 26) - 2,
329
- width = select.width() - 22,
330
- title = $('option', this).first().text();
331
-
332
- if ($('option:selected', this).val() != '')
333
- title = $('option:selected', this).text();
334
-
335
- var overlay = $('<a class="menuselector" tabindex="-1"><span class="handle">' + title + '</span></a>')
336
- .css('position', 'absolute')
337
- .offset(select.position())
338
- .insertAfter(select);
339
-
340
- overlay.children().width(width).height(height).css('line-height', (height - 1) + 'px');
341
-
342
- if (parent.css('position') != 'absolute')
343
- parent.css('position', 'relative');
344
-
345
- // re-set original select width to fix click action and options width in some browsers
346
- select.width(overlay.width())
347
- .on(bw.mz ? 'change keyup' : 'change', function() {
348
- var val = $('option:selected', this).text();
349
- $(this).next().children().text(val);
350
- });
351
-
352
- select
353
- .on('focus', function(e){ overlay.addClass('focus'); })
354
- .on('blur', function(e){ overlay.removeClass('focus'); });
355
- });
356
-
357
- // set min-width to show all toolbar buttons
358
- var screen = $('body.minwidth');
359
- if (screen.length) {
360
- screen.css('min-width', $('.toolbar').width() + $('#quicksearchbar').width() + $('#searchfilter').width() + 30);
361
- }
362
-
363
- // don't use $(window).resize() due to some unwanted side-effects
364
- window.onresize = resize;
365
- resize();
366
- }
367
-
368
- /**
369
- * Update UI on window resize
370
- */
371
- function resize(e)
372
- {
373
- // resize in intervals to prevent lags and double onresize calls in Chrome (#1489005)
374
- var interval = e ? 10 : 0;
375
-
376
- if (rcmail.resize_timeout)
377
- window.clearTimeout(rcmail.resize_timeout);
378
-
379
- rcmail.resize_timeout = window.setTimeout(function() {
380
- if (rcmail.env.task == 'mail') {
381
- if (rcmail.env.action == 'show' || rcmail.env.action == 'preview')
382
- layout_messageview();
383
- else if (rcmail.env.action == 'compose')
384
- layout_composeview();
385
- }
386
-
387
- // make iframe footer buttons float if scrolling is active
388
- $('body.iframe .footerleft').each(function(){
389
- var footer = $(this),
390
- body = $(document.body),
391
- floating = footer.hasClass('floating'),
392
- overflow = body.outerHeight(true) > $(window).height();
393
-
394
- if (overflow != floating) {
395
- var action = overflow ? 'addClass' : 'removeClass';
396
- footeraction('floating');
397
- bodyaction('floatingbuttons');
398
- }
399
- });
400
- }, interval);
401
- }
402
-
403
- /**
404
- * Triggered when a new user message is displayed
405
- */
406
- function message_displayed(p)
407
- {
408
- var siblings = $(p.object).siblings('div');
409
- if (siblings.length)
410
- $(p.object).insertBefore(siblings.first());
411
-
412
- // show a popup dialog on errors
413
- if (p.type == 'error' && rcmail.env.task != 'login') {
414
- // hide original message object, we don't want both
415
- rcmail.hide_message(p.object);
416
-
417
- if (me.message_timer) {
418
- window.clearTimeout(me.message_timer);
419
- }
420
-
421
- if (!me.messagedialog) {
422
- me.messagedialog = $('<div>').addClass('popupdialog').hide();
423
- }
424
-
425
- var msg = p.message,
426
- dialog_close = function() {
427
- // check if dialog is still displayed, to prevent from js error
428
- me.messagedialog.is(':visible') && me.messagedialog.dialog('destroy').hide();
429
- };
430
-
431
- if (me.messagedialog.is(':visible') && me.messagedialog.text() != msg)
432
- msg = me.messagedialog.html() + '<p>' + p.message + '</p>';
433
-
434
- me.messagedialog.html(msg)
435
- .dialog({
436
- resizable: false,
437
- closeOnEscape: true,
438
- dialogClass: p.type,
439
- title: rcmail.gettext('errortitle'),
440
- close: dialog_close,
441
- hide: {effect: 'fadeOut'},
442
- width: 420,
443
- minHeight: 90
444
- }).show();
445
-
446
- me.messagedialog.closest('divrole=dialog').attr('role', 'alertdialog');
447
-
448
- if (p.timeout > 0)
449
- me.message_timer = window.setTimeout(dialog_close, p.timeout);
450
- }
451
- }
452
-
453
- // modify dialog position to fully fit the close button into the window
454
- function dialog_open(dialog)
455
- {
456
- var me = $(dialog.uiDialog),
457
- offset = me.offset(),
458
- position = me.position(),
459
- width = me.outerWidth(),
460
- maxWidth = $(window).width(),
461
- topOffset = offset.top - 12;
462
-
463
- if (topOffset < 0)
464
- me.css('top', position.top - topOffset);
465
- if (offset.left + width + 12 > maxWidth)
466
- me.css('left', position.left - 12);
467
- }
468
-
469
- // Mail view layout initialization and change handler
470
- function mail_layout(p)
471
- {
472
- var layout = p ? p.new_layout : rcmail.env.layout,
473
- top = $('#mailview-top'),
474
- bottom = $('#mailview-bottom');
475
-
476
- if (p)
477
- $('#mainscreencontent').removeClass().addClass(layout);
478
-
479
- $('#mailviewsplitter')layout == 'desktop' ? 'show' : 'hide'();
480
- $('#mailviewsplitter2')layout == 'widescreen' ? 'show' : 'hide'();
481
- $('#mailpreviewframe')layout != 'list' ? 'show' : 'hide'();
482
- rcmail.env.contentframe = layout == 'list' ? null : 'messagecontframe';
483
-
484
- if (layout == 'widescreen') {
485
- $('#countcontrols').detach().appendTo($('#messagelistheader'));
486
- top.css({height: 'auto', width: 394});
487
- bottom.css({top: 0, left: 406, height: 'auto'}).show();
488
- if (!mailviewsplit2) {
489
- mailviewsplit2 = new rcube_splitter({ id:'mailviewsplitter2', p1:'#mailview-top', p2:'#mailview-bottom',
490
- orientation:'v', relative:true, start:416, min:400, size:12});
491
- mailviewsplit2.init();
492
- }
493
- else
494
- mailviewsplit2.resize();
495
- }
496
- else if (layout == 'desktop') {
497
- top.css({height: 270, width: 'auto'});
498
- bottom.css({left: 0, top: 284, height: 'auto'}).show();
499
- if (!mailviewsplit) {
500
- mailviewsplit = new rcube_splitter({ id:'mailviewsplitter', p1:'#mailview-top', p2:'#mailview-bottom',
501
- orientation:'h', relative:true, start:276, min:150, size:12, offset:4 });
502
- mailviewsplit.init();
503
- }
504
- else
505
- mailviewsplit.resize();
506
- }
507
- else { // layout == 'list'
508
- top.css({height: 'auto', width: 'auto'});
509
- bottom.hide();
510
- }
511
-
512
- if (p && p.old_layout == 'widescreen') {
513
- $('#countcontrols').detach().appendTo($('#messagelistfooter'));
514
- }
515
- }
516
-
517
- /**
518
- * Adjust UI objects of the mail view screen
519
- */
520
- function layout_messageview()
521
- {
522
- $('#messagecontent').css('top', ($('#messageheader').outerHeight() + 1) + 'px');
523
- $('#message-objects div a').addClass('button');
524
-
525
- if (!$('#attachment-list li').length) {
526
- $('div.rightcol').hide().attr('aria-hidden', 'true');
527
- $('div.leftcol').css('margin-right', '0');
528
- }
529
-
530
- var mvlpe = $('#messagebody.mailvelope, #messagebody > .mailvelope');
531
- if (mvlpe.length) {
532
- var h = $('#messagecontent').length ?
533
- $('#messagecontent').height() - 16 :
534
- $(window).height() - mvlpe.offset().top - 2;
535
- mvlpe.height(h);
536
- }
537
- }
538
-
539
-
540
- function render_mailboxlist(splitter)
541
- {
542
- // TODO: implement smart shortening of long folder names
543
- }
544
-
545
-
546
- function resize_leftcol(splitter)
547
- {
548
- // STUB
549
- }
550
-
551
- function init_compose_editfields()
552
- {
553
- // Show input elements with non-empty value
554
- var f, v, field, fields = 'cc', 'bcc', 'replyto', 'followupto';
555
- for (f=0; f < fields.length; f++) {
556
- v = fieldsf; field = $('#_'+v);
557
- if (field.length) {
558
- field.on('change', {v: v}, function(e) { if (this.value) show_header_row(e.data.v, true); });
559
- if (field.val() != '')
560
- show_header_row(v, true);
561
- }
562
- }
563
-
564
- // adjust hight when textarea starts to scroll
565
- $("textareaname='_to', textareaname='_cc', textareaname='_bcc'").change(function(e){ adjust_compose_editfields(this); }).change();
566
- rcmail.addEventListener('autocomplete_insert', function(p){ adjust_compose_editfields(p.field); });
567
- }
568
-
569
- function adjust_compose_editfields(elem)
570
- {
571
- if (elem.nodeName == 'TEXTAREA') {
572
- var $elem = $(elem), line_height = 14, // hard-coded because some browsers only provide the outer height in elem.clientHeight
573
- content_height = elem.scrollHeight,
574
- rows = elem.value.length > 80 && content_height > line_height*1.5 ? 2 : 1;
575
- $elem.css('height', (line_height*rows) + 'px');
576
- layout_composeview();
577
- }
578
- }
579
-
580
- function layout_composeview()
581
- {
582
- var body = $('#composebody'),
583
- form = $('#compose-content'),
584
- bottom = $('#composeview-bottom'),
585
- w, h, bh, ovflw, btns = 0,
586
- minheight = 300;
587
-
588
- if (!form.length)
589
- return;
590
-
591
- bh = form.height() - bottom.position().top;
592
- ovflw = minheight - bh;
593
- btns = ovflw > -100 ? 0 : 40;
594
- bottom.height(Math.max(minheight, bh));
595
- form.css('overflow', ovflw > 0 ? 'auto' : 'hidden');
596
-
597
- w = body.parent().width() - 5;
598
- h = body.parent().height() - 8;
599
- body.width(w).height(h);
600
-
601
- $('#composebodycontainer > div').width(w+7);
602
- $('#composebody_ifr').height(h + 4 - $('div.tox-toolbar').height());
603
- $('#googie_edit_layer').width(w).height(h);
604
-// $('#composebodycontainer')(btns ? 'addClass' : 'removeClass')('buttons');
605
-// $('#composeformbuttons')(btns ? 'show' : 'hide')();
606
-
607
- var abooks = $('#directorylist');
608
- if (abooks.length)
609
- $('#compose-contacts .scroller').css('top', abooks.position().top + abooks.outerHeight());
610
- }
611
-
612
-
613
- function update_quota(p)
614
- {
615
- var element = $('#quotadisplay'), menu = $('#quotamenu'),
616
- step = 24, step_count = 20,
617
- y = p.total ? Math.ceil(p.percent / 100 * step_count) * step : 0;
618
-
619
- // never show full-circle if quota is close to 100% but below.
620
- if (p.total && y == step * step_count && p.percent < 100)
621
- y -= step;
622
-
623
- element.css('background-position', '0 -' + y + 'px');
624
- element.attr('class', 'countdisplay p' + (Math.round(p.percent / 10) * 10));
625
-
626
- if (p.table) {
627
- if (!menu.length)
628
- menu = $('<div id="quotamenu" class="popupmenu">').appendTo($('body'));
629
-
630
- menu.html(p.table);
631
- element.css('cursor', 'pointer').off('click').on('click', function(e) {
632
- return rcmail.command('menu-open', 'quotamenu', e.target, e);
633
- });
634
- }
635
- }
636
-
637
- function folder_search_init(container)
638
- {
639
- // animation to unfold list search box
640
- $('.boxtitle a.search', container).click(function(e) {
641
- var title = $('.boxtitle', container),
642
- box = $('.listsearchbox', container),
643
- dir = box.is(':visible') ? -1 : 1,
644
- height = 34 + ($('select', box).length ? 22 : 0);
645
-
646
- box.slideToggle({
647
- duration: 160,
648
- progress: function(animation, progress) {
649
- if (dir < 0) progress = 1 - progress;
650
- $('.scroller', container).css('top', (title.outerHeight() + height * progress) + 'px');
651
- },
652
- complete: function() {
653
- box.toggleClass('expanded');
654
- if (box.is(':visible')) {
655
- box.find('inputtype=text').focus();
656
- height = 34 + ($('select', box).length ? $('select', box).outerHeight() + 4 : 0);
657
- $('.scroller', container).css('top', (title.outerHeight() + height) + 'px');
658
- }
659
- else {
660
- $('a.reset', box).click();
661
- }
662
- // TODO: save state in localStorage
663
- }
664
- });
665
-
666
- return false;
667
- });
668
- }
669
-
670
- function enable_command(p)
671
- {
672
- if (p.command == 'reply-list' && rcmail.env.reply_all_mode == 1) {
673
- var label = rcmail.gettext(p.status ? 'replylist' : 'replyall');
674
- if (rcmail.env.action == 'preview')
675
- $('a.button.replyall').attr('title', label);
676
- else
677
- $('a.button.reply-all').text(label).attr('title', label);
678
- }
679
- else if (p.command == 'compose-encrypted') {
680
- // show the toolbar button for Mailvelope
681
- $('a.button.encrypt').parent().show();
682
- }
683
- else if (p.command == 'compose-encrypted-signed') {
684
- // enable selector for encrypt and sign
685
- $('#encryptionmenulink').show();
686
- }
687
- }
688
-
689
-
690
- /**
691
- * Register a popup menu
692
- */
693
- function add_popup(popup, config)
694
- {
695
- var obj = popupspopup = $('#'+popup);
696
- obj.appendTo(document.body); // move it to top for proper absolute positioning
697
-
698
- if (obj.length)
699
- popupconfigpopup = $.extend(popupconfigpopup || {}, config || {});
700
- }
701
-
702
- /**
703
- * Trigger for popup menus
704
- */
705
- function toggle_popup(popup, e, config)
706
- {
707
- // auto-register menu object
708
- if (config || !popupconfigpopup)
709
- add_popup(popup, config);
710
-
711
- return rcmail.command('menu-open', popup, e.target, e);
712
- }
713
-
714
- /**
715
- * (Deprecated) trigger for popup menus
716
- */
717
- function show_popup(popup, show, config)
718
- {
719
- // auto-register menu object
720
- if (config || !popupconfigpopup)
721
- add_popup(popup, config);
722
-
723
- config = popupconfigpopup || {};
724
- var ref = $(config.link ? config.link : '#'+popup+'link'),
725
- pos = ref.offset();
726
- if (ref.has('.inner'))
727
- ref = ref.children('.inner');
728
-
729
- // fire command with simulated mouse click event
730
- return rcmail.command('menu-open',
731
- { menu:popup, show:show },
732
- ref.get(0),
733
- $.Event('click', { target:ref.get(0), pageX:pos.left, pageY:pos.top, clientX:pos.left, clientY:pos.top }));
734
- }
735
-
736
- /**
737
- * Switch between short and full headers display in message preview
738
- */
739
- function toggle_preview_headers()
740
- {
741
- $('#preview-shortheaders').toggle();
742
- var full = $('#preview-allheaders').toggle(),
743
- button = $('a#previewheaderstoggle');
744
-
745
- // add toggle button to full headers table
746
- if (full.is(':visible'))
747
- button.attr('href', '#hide').removeClass('add').addClass('remove').attr('aria-expanded', 'true');
748
- else
749
- button.attr('href', '#details').removeClass('remove').addClass('add').attr('aria-expanded', 'false');
750
-
751
- save_pref('previewheaders', full.is(':visible') ? '1' : '0');
752
- }
753
-
754
-
755
- /**
756
- *
757
- */
758
- function switch_view_mode(mode, force)
759
- {
760
- if (force || !$('#mail'+mode+'mode').hasClass('disabled')) {
761
- $('#maillistmode, #mailthreadmode').removeClass('selected').attr('tabindex', '0').attr('aria-disabled', 'false');
762
- $('#mail'+mode+'mode').addClass('selected').attr('tabindex', '-1').attr('aria-disabled', 'true');
763
- }
764
- }
765
-
766
-
767
- /**** popup menu callbacks ****/
768
-
769
- /**
770
- * Handler for menu-open and menu-close events
771
- */
772
- function menu_toggle(p)
773
- {
774
- if (p && p.name == 'messagelistmenu') {
775
- show_listoptions(p);
776
- }
777
- else if (p) {
778
- // adjust menu position according to config
779
- var config = popupconfigp.name || {},
780
- ref = $(config.link || '#'+p.name+'link'),
781
- visible = p.obj && p.obj.is(':visible'),
782
- above = config.above;
783
-
784
- // fix position according to config
785
- if (p.obj && visible && ref.length) {
786
- var parent = ref.parent(),
787
- win = $(window), pos;
788
-
789
- if (parent.hasClass('dropbutton'))
790
- ref = parent;
791
-
792
- if (config.above || ref.hasClass('dropbutton')) {
793
- pos = ref.offset();
794
- p.obj.css({ left:pos.left+'px', top:(pos.top + (config.above ? -p.obj.height() : ref.outerHeight()))+'px' });
795
- }
796
- }
797
-
798
- // add the right classes
799
- if (p.obj && config.iconized) {
800
- p.obj.children('ul').addClass('iconized');
801
- }
802
-
803
- // apply some data-attributes from menu config
804
- if (p.obj && config.editable)
805
- p.obj.attr('data-editable', 'true');
806
-
807
- // trigger callback function
808
- if (typeof config.callback == 'function') {
809
- config.callback(visible, p);
810
- }
811
- }
812
- }
813
-
814
- function searchmenu(show)
815
- {
816
- if (show && rcmail.env.search_mods) {
817
- var n, all = '*',
818
- obj = popups'searchmenu',
819
- list = $('input:checkboxname="s_mods"', obj),
820
- mbox = rcmail.env.mailbox,
821
- mods = rcmail.env.search_mods,
822
- scope = rcmail.env.search_scope || 'base';
823
-
824
- if (rcmail.env.task == 'mail') {
825
- mods = modsmbox || mods'*';
826
- all = 'text';
827
- $('input:radioname="s_scope"').prop('checked', false).filter('#s_scope_'+scope).prop('checked', true);
828
- }
829
-
830
- if (modsall) {
831
- list.map(function() {
832
- this.checked = true;
833
- this.disabled = this.value != all;
834
- });
835
- }
836
- else {
837
- list.prop('disabled', false).prop('checked', false);
838
- for (n in mods)
839
- $('#s_mod_' + n).prop('checked', true);
840
- }
841
- }
842
- }
843
-
844
- function attachmentmenu(elem, event)
845
- {
846
- var id = elem.parentNode.id.replace(/^attach/, '');
847
-
848
- $.each('open', 'download', 'rename', function() {
849
- var action = this;
850
- $('#attachmenu' + action).off('click').attr('onclick', '').click(function(e) {
851
- return rcmail.command(action + '-attachment', id, this);
852
- });
853
- });
854
-
855
- popupconfig.attachmentmenu.link = elem;
856
- rcmail.command('menu-open', {menu: 'attachmentmenu', id: id}, elem, event);
857
- }
858
-
859
- function spellmenu(show, p)
860
- {
861
- var k, link, li,
862
- lang = rcmail.spellcheck_lang(),
863
- ul = $('ul', p.obj);
864
-
865
- if (!ul.length) {
866
- ul = $('<ul class="toolbarmenu selectable" role="menu">');
867
-
868
- for (k in rcmail.env.spell_langs) {
869
- li = $('<li role="menuitem">');
870
- link = $('<a href="#'+k+'" tabindex="0"></a>').text(rcmail.env.spell_langsk)
871
- .addClass('active').data('lang', k)
872
- .on('click keypress', function(e) {
873
- if (e.type != 'keypress' || rcube_event.get_keycode(e) == 13) {
874
- rcmail.spellcheck_lang_set($(this).data('lang'));
875
- rcmail.hide_menu('spellmenu', e);
876
- return false;
877
- }
878
- });
879
-
880
- link.appendTo(li);
881
- li.appendTo(ul);
882
- }
883
-
884
- ul.appendTo(p.obj);
885
- }
886
-
887
- // select current language
888
- $('li', ul).each(function() {
889
- var el = $('a', this);
890
- if (el.data('lang') == lang)
891
- el.addClass('selected').attr('aria-selected', 'true');
892
- else if (el.hasClass('selected'))
893
- el.removeClass('selected').removeAttr('aria-selected');
894
- });
895
- }
896
-
897
- // append drop-icon to attachments list item (to invoke attachment menu)
898
- function attachmentmenu_append(item)
899
- {
900
- item = $(item);
901
-
902
- if (!item.children('.drop').length && !item.is('.no-menu')) {
903
- var label = rcmail.gettext('options'),
904
- fname = item.find('a.filename'),
905
- tabindex = fname.attr('tabindex') || 0;
906
-
907
- var button = $('<a>')
908
- .attr({'class': 'drop skip-content', tabindex: tabindex, 'aria-haspopup': true, title: label})
909
- .text(label)
910
- .on('click keypress', function(e) {
911
- if (e.type != 'keypress' || rcube_event.get_keycode(e) == 13) {
912
- attachmentmenu(this, e);
913
- return false;
914
- }
915
- });
916
-
917
- if (fname.length)
918
- button.insertAfter(fname);
919
- else
920
- button.appendTo(item);
921
- }
922
- }
923
-
924
- /**
925
- *
926
- */
927
- function show_listoptions(p)
928
- {
929
- var $dialog = $('#listoptions');
930
-
931
- // close the dialog
932
- if ($dialog.is(':visible')) {
933
- $dialog.dialog('close', p.originalEvent);
934
- return;
935
- }
936
-
937
- // set form values
938
- $('inputname="sort_col"value="'+rcmail.env.sort_col+'"').prop('checked', true);
939
- $('inputname="sort_ord"value="DESC"').prop('checked', rcmail.env.sort_order == 'DESC');
940
- $('inputname="sort_ord"value="ASC"').prop('checked', rcmail.env.sort_order != 'DESC');
941
-
942
- $.each('widescreen', 'desktop', 'list', function() {
943
- $('inputname="layout"value="' + this + '"').prop('checked', rcmail.env.layout == this);
944
- });
945
- $('#listoptions-columns', $dialog)rcmail.env.layout == 'widescreen' ? 'hide' : 'show'();
946
-
947
- // set checkboxes
948
- $('inputname="list_col"').each(function() {
949
- $(this).prop('checked', $.inArray(this.value, rcmail.env.listcols) != -1);
950
- });
951
-
952
- $dialog.dialog({
953
- modal: true,
954
- resizable: false,
955
- closeOnEscape: true,
956
- title: null,
957
- open: function(e) {
958
- setTimeout(function(){ $dialog.find('a, input:not(:disabled)').not('aria-disabled=true').first().focus(); }, 100);
959
- },
960
- close: function(e) {
961
- $dialog.dialog('destroy').hide();
962
- if (e.originalEvent && rcube_event.is_keyboard(e.originalEvent))
963
- $('#listmenulink').focus();
964
- },
965
- minWidth: 500,
966
- width: $dialog.width()+25
967
- }).show();
968
- }
969
-
970
-
971
- /**
972
- *
973
- */
974
- function save_listoptions(p)
975
- {
976
- $('#listoptions').dialog('close');
977
-
978
- if (rcube_event.is_keyboard(p.originalEvent))
979
- $('#listmenulink').focus();
980
-
981
- var sort = $('inputname="sort_col":checked').val(),
982
- ord = $('inputname="sort_ord":checked').val(),
983
- layout = $('inputname="layout":checked').val(),
984
- cols = $('inputname="list_col":checked')
985
- .map(function(){ return this.value; }).get();
986
-
987
- rcmail.set_list_options(cols, sort, ord, rcmail.env.threading, layout);
988
- }
989
-
990
-
991
- /**
992
- *
993
- */
994
- function set_searchmod(elem)
995
- {
996
- var all, m, task = rcmail.env.task,
997
- mods = rcmail.env.search_mods || {},
998
- mbox = rcmail.env.mailbox,
999
- scope = $('inputname="s_scope":checked').val();
1000
-
1001
- if (task == 'mail') {
1002
- if (!modsmbox)
1003
- modsmbox = rcube_clone_object(mods'*');
1004
- m = modsmbox;
1005
- all = 'text';
1006
- }
1007
- else { //addressbook
1008
- m = mods;
1009
- all = '*';
1010
- }
1011
-
1012
- if (!elem.checked)
1013
- delete(melem.value);
1014
- else
1015
- melem.value = 1;
1016
-
1017
- // mark all fields
1018
- if (elem.value == all) {
1019
- $('input:checkboxname="s_mods"').not(elem).map(function() {
1020
- this.checked = true;
1021
- if (elem.checked) {
1022
- this.disabled = true;
1023
- delete mthis.value;
1024
- }
1025
- else {
1026
- this.disabled = false;
1027
- mthis.value = 1;
1028
- }
1029
- });
1030
- }
1031
-
1032
- rcmail.set_searchmods(m);
1033
- }
1034
-
1035
- function push_contactgroup(p)
1036
- {
1037
- // lets the contacts list swipe to the left, nice!
1038
- var table = $('#contacts-table'),
1039
- scroller = table.parent().css('overflow', 'hidden');
1040
-
1041
- table.clone()
1042
- .css({ position:'absolute', top:'0', left:'0', width:table.width()+'px', 'z-index':10 })
1043
- .appendTo(scroller)
1044
- .animate({ left: -(table.width()+5) + 'px' }, 300, 'swing', function(){
1045
- $(this).remove();
1046
- scroller.css('overflow', 'auto')
1047
- });
1048
- }
1049
-
1050
- function pop_contactgroup(p)
1051
- {
1052
- // lets the contacts list swipe to the left, nice!
1053
- var table = $('#contacts-table'),
1054
- scroller = table.parent().css('overflow', 'hidden'),
1055
- clone = table.clone().appendTo(scroller);
1056
-
1057
- table.css({ position:'absolute', top:'0', left:-(table.width()+5) + 'px', width:table.width()+'px', height:table.height()+'px', 'z-index':10 })
1058
- .animate({ left:'0' }, 300, 'linear', function(){
1059
- clone.remove();
1060
- $(this).css({ position:'relative', left:'0', width:'100%', height:'auto', 'z-index':1 });
1061
- scroller.css('overflow', 'auto')
1062
- });
1063
- }
1064
-
1065
- /**
1066
- * Mail import dialog
1067
- */
1068
- function import_dialog()
1069
- {
1070
- var content = $('#uploadform'),
1071
- dialog = content.clone().removeClass('popupdialog');
1072
-
1073
- var save_func = function(e) {
1074
- return rcmail.command('import-messages', $(dialog.find('form')0));
1075
- };
1076
-
1077
- rcmail.simple_dialog(dialog, rcmail.gettext('importmessages'), save_func, {
1078
- button: 'import',
1079
- closeOnEscape: true,
1080
- minWidth: 400
1081
- });
1082
- }
1083
-
1084
- /**
1085
- *
1086
- */
1087
- function show_header_row(which, updated)
1088
- {
1089
- var row = $('#compose-' + which);
1090
- if (row.is(':visible'))
1091
- return; // nothing to be done here
1092
-
1093
- if (compose_headerswhich && !updated)
1094
- $('#_' + which).val(compose_headerswhich);
1095
-
1096
- row.show();
1097
- $('#' + which + '-link').hide();
1098
-
1099
- layout_composeview();
1100
- $('input,textarea', row).focus();
1101
-
1102
- return false;
1103
- }
1104
-
1105
- /**
1106
- *
1107
- */
1108
- function hide_header_row(which)
1109
- {
1110
- // copy and clear field value
1111
- var field = $('#_' + which);
1112
- compose_headerswhich = field.val();
1113
- field.val('');
1114
-
1115
- $('#compose-' + which).hide();
1116
- $('#' + which + '-link').show();
1117
- layout_composeview();
1118
- return false;
1119
- }
1120
-
1121
-
1122
- /**
1123
- * Fieldsets-to-tabs converter
1124
- */
1125
- function init_tabs(elem, current)
1126
- {
1127
- var content = $(elem),
1128
- id = content.get(0).id,
1129
- fs = content.children('fieldset');
1130
-
1131
- if (!fs.length)
1132
- return;
1133
-
1134
- if (!id) {
1135
- id = 'rcmtabcontainer';
1136
- content.attr('id', id);
1137
- }
1138
-
1139
- // create tabs container
1140
- var tabs = $('<ul>').addClass('tabsbar').prependTo(content);
1141
-
1142
- // convert fieldsets into tabs
1143
- fs.each(function(idx) {
1144
- var tab, a, elm = $(this),
1145
- legend = elm.children('legend'),
1146
- tid = id + '-t' + idx;
1147
-
1148
- // create a tab
1149
- a = $('<a>').text(legend.text()).attr('href', '#' + tid);
1150
- tab = $('<li>').addClass('tablink');
1151
-
1152
- // remove legend
1153
- legend.remove();
1154
-
1155
- // link fieldset with tab item
1156
- elm.attr('id', tid);
1157
-
1158
- // add the tab to container
1159
- tab.append(a).appendTo(tabs);
1160
- });
1161
-
1162
- // use jquery UI tabs widget to do the interaction and styling
1163
- content.tabs({
1164
- active: current || 0,
1165
- heightStyle: 'content',
1166
- activate: function(e, ui) {resize(); }
1167
- });
1168
- }
1169
-
1170
- /**
1171
- * Show about page as jquery UI dialog
1172
- */
1173
- function show_about(elem)
1174
- {
1175
- var frame = $('<iframe>').attr({id: 'aboutframe', src: rcmail.url('settings/about'), frameborder: '0'});
1176
- h = Math.floor($(window).height() * 0.75),
1177
- buttons = {},
1178
- supportln = $('#supportlink');
1179
-
1180
- if (supportln.length && (env.supporturl = supportln.attr('href')))
1181
- buttonssupportln.html() = function(e){ env.supporturl.indexOf('mailto:') < 0 ? window.open(env.supporturl) : location.href = env.supporturl };
1182
-
1183
- frame.dialog({
1184
- modal: true,
1185
- resizable: false,
1186
- closeOnEscape: true,
1187
- title: elem ? elem.title || elem.innerHTML : null,
1188
- close: function() {
1189
- frame.dialog('destroy').remove();
1190
- },
1191
- buttons: buttons,
1192
- width: 640,
1193
- height: h
1194
- }).width(640);
1195
- }
1196
-}
1197
-
1198
-
1199
-/**
1200
- * Roundcube Scroller class
1201
- *
1202
- * @deprecated Use treelist widget
1203
- */
1204
-function rcube_scroller(list, top, bottom)
1205
-{
1206
- var ref = this;
1207
-
1208
- this.list = $(list);
1209
- this.top = $(top);
1210
- this.bottom = $(bottom);
1211
- this.step_size = 6;
1212
- this.step_time = 20;
1213
- this.delay = 500;
1214
-
1215
- this.top
1216
- .mouseenter(function() { if (rcmail.drag_active) ref.ts = window.setTimeout(function() { ref.scroll('down'); }, ref.delay); })
1217
- .mouseout(function() { if (ref.ts) window.clearTimeout(ref.ts); });
1218
-
1219
- this.bottom
1220
- .mouseenter(function() { if (rcmail.drag_active) ref.ts = window.setTimeout(function() { ref.scroll('up'); }, ref.delay); })
1221
- .mouseout(function() { if (ref.ts) window.clearTimeout(ref.ts); });
1222
-
1223
- this.scroll = function(dir)
1224
- {
1225
- var ref = this, size = this.step_size;
1226
-
1227
- if (!rcmail.drag_active)
1228
- return;
1229
-
1230
- if (dir == 'down')
1231
- size *= -1;
1232
-
1233
- this.list.get(0).scrollTop += size;
1234
- this.ts = window.setTimeout(function() { ref.scroll(dir); }, this.step_time);
1235
- };
1236
-};
1237
-
1238
-
1239
-/**
1240
- * Roundcube UI splitter class
1241
- *
1242
- * @constructor
1243
- */
1244
-function rcube_splitter(p)
1245
-{
1246
- this.p = p;
1247
- this.id = p.id;
1248
- this.horizontal = (p.orientation == 'horizontal' || p.orientation == 'h');
1249
- this.halfsize = (p.size !== undefined ? p.size : 10) / 2;
1250
- this.pos = p.start || 0;
1251
- this.min = p.min || 20;
1252
- this.offset = p.offset || 0;
1253
- this.relative = p.relative ? true : false;
1254
- this.drag_active = false;
1255
- this.render = p.render;
1256
- this.callback = p.callback;
1257
-
1258
- var me = this;
1259
- rcube_splitter._instancesthis.id = me;
1260
-
1261
- this.init = function()
1262
- {
1263
- this.p1 = $(this.p.p1);
1264
- this.p2 = $(this.p.p2);
1265
- this.parent = this.p1.parent();
1266
-
1267
- // check if referenced elements exist, otherwise abort
1268
- if (!this.p1.length || !this.p2.length)
1269
- return;
1270
-
1271
- // create and position the handle for this splitter
1272
- this.p1pos = this.relative ? this.p1.position() : this.p1.offset();
1273
- this.p2pos = this.relative ? this.p2.position() : this.p2.offset();
1274
- this.handle = $('<div>')
1275
- .attr('id', this.id)
1276
- .attr('unselectable', 'on')
1277
- .attr('role', 'presentation')
1278
- .addClass('splitter ' + (this.horizontal ? 'splitter-h' : 'splitter-v'))
1279
- .appendTo(this.parent)
1280
- .mousedown(onDragStart);
1281
-
1282
- if (this.horizontal) {
1283
- var top = this.p1pos.top + this.p1.outerHeight();
1284
- this.handle.css({ left:'0px', top:top+'px' });
1285
- }
1286
- else {
1287
- var left = this.p1pos.left + this.p1.outerWidth();
1288
- this.handle.css({ left:left+'px', top:'0px' });
1289
- }
1290
-
1291
- // listen to window resize on IE
1292
- if (bw.ie)
1293
- $(window).resize(onResize);
1294
-
1295
- // read saved position from cookie
1296
- var cookie = this.get_cookie();
1297
- if (cookie && !isNaN(cookie)) {
1298
- this.pos = parseFloat(cookie);
1299
- this.resize();
1300
- }
1301
- else if (this.pos) {
1302
- this.resize();
1303
- this.set_cookie();
1304
- }
1305
- };
1306
-
1307
- /**
1308
- * Set size and position of all DOM objects
1309
- * according to the saved splitter position
1310
- */
1311
- this.resize = function()
1312
- {
1313
- if (this.horizontal) {
1314
- this.p1.css('height', Math.floor(this.pos - this.p1pos.top - Math.floor(this.halfsize)) + 'px');
1315
- this.p2.css('top', Math.ceil(this.pos + Math.ceil(this.halfsize) + 2) + 'px');
1316
- this.handle.css('top', Math.round(this.pos - this.halfsize + this.offset)+'px');
1317
- if (bw.ie) {
1318
- var new_height = parseInt(this.parent.outerHeight(), 10) - parseInt(this.p2.css('top'), 10);
1319
- this.p2.css('height', (new_height > 0 ? new_height : 0) + 'px');
1320
- }
1321
- }
1322
- else {
1323
- this.p1.css('width', Math.floor(this.pos - this.p1pos.left - Math.floor(this.halfsize)) + 'px');
1324
- this.p2.css('left', Math.ceil(this.pos + Math.ceil(this.halfsize)) + 'px');
1325
- this.handle.css('left', Math.round(this.pos - this.halfsize + this.offset + 3)+'px');
1326
- if (bw.ie) {
1327
- var new_width = parseInt(this.parent.outerWidth(), 10) - parseInt(this.p2.css('left'), 10) ;
1328
- this.p2.css('width', (new_width > 0 ? new_width : 0) + 'px');
1329
- }
1330
- }
1331
-
1332
- this.p2.resize();
1333
- this.p1.resize();
1334
-
1335
- // also resize iframe covers
1336
- if (this.drag_active) {
1337
- $('iframe').each(function(i, elem) {
1338
- var pos = $(this).offset();
1339
- $('#iframe-splitter-fix-'+i).css({ top: pos.top+'px', left: pos.left+'px', width:elem.offsetWidth+'px', height: elem.offsetHeight+'px' });
1340
- });
1341
- }
1342
-
1343
- if (typeof this.render == 'function')
1344
- this.render(this);
1345
- };
1346
-
1347
- /**
1348
- * Handler for mousedown events
1349
- */
1350
- function onDragStart(e)
1351
- {
1352
- // disable text selection while dragging the splitter
1353
- if (bw.konq || bw.chrome || bw.safari)
1354
- document.body.style.webkitUserSelect = 'none';
1355
-
1356
- me.p1pos = me.relative ? me.p1.position() : me.p1.offset();
1357
- me.p2pos = me.relative ? me.p2.position() : me.p2.offset();
1358
- me.drag_active = true;
1359
-
1360
- // start listening to mousemove events
1361
- $(document).on('mousemove.' + this.id, onDrag).on('mouseup.' + this.id, onDragStop);
1362
-
1363
- // hack messages list so it will propagate the mouseup event over the list
1364
- if (rcmail.message_list)
1365
- rcmail.message_list.drag_active = true;
1366
-
1367
- // enable dragging above iframes
1368
- $('iframe').each(function(i, elem) {
1369
- $('<div>')
1370
- .attr('id', 'iframe-splitter-fix-'+i)
1371
- .addClass('iframe-splitter-fix')
1372
- .css({ background: '#fff',
1373
- width: elem.offsetWidth+'px', height: elem.offsetHeight+'px',
1374
- position: 'absolute', opacity: '0.001', zIndex: 1000
1375
- })
1376
- .css($(this).offset())
1377
- .appendTo('body');
1378
- });
1379
- };
1380
-
1381
- /**
1382
- * Handler for mousemove events
1383
- */
1384
- function onDrag(e)
1385
- {
1386
- if (!me.drag_active)
1387
- return false;
1388
-
1389
- // with timing events dragging action is more responsive
1390
- window.clearTimeout(me.ts);
1391
- me.ts = window.setTimeout(function() { onDragAction(e); }, 1);
1392
-
1393
- return false;
1394
- };
1395
-
1396
- /**
1397
- * Dragging action (see onDrag())
1398
- */
1399
- function onDragAction(e)
1400
- {
1401
- var pos = rcube_event.get_mouse_pos(e);
1402
-
1403
- if (me.relative) {
1404
- var parent = me.parent.offset();
1405
- pos.x -= parent.left;
1406
- pos.y -= parent.top;
1407
- }
1408
-
1409
- if (me.horizontal) {
1410
- if (((pos.y - me.halfsize) > me.p1pos.top) && ((pos.y + me.halfsize) < (me.p2pos.top + me.p2.outerHeight()))) {
1411
- me.pos = Math.max(me.min, pos.y - Math.max(0, me.offset));
1412
- if (me.pos > me.min)
1413
- me.pos = Math.min(me.pos, me.parent.height() - me.min);
1414
-
1415
- me.resize();
1416
- }
1417
- }
1418
- else {
1419
- if (((pos.x - me.halfsize) > me.p1pos.left) && ((pos.x + me.halfsize) < (me.p2pos.left + me.p2.outerWidth()))) {
1420
- me.pos = Math.max(me.min, pos.x - Math.max(0, me.offset));
1421
- if (me.pos > me.min)
1422
- me.pos = Math.min(me.pos, me.parent.width() - me.min);
1423
-
1424
- me.resize();
1425
- }
1426
- }
1427
-
1428
- me.p1pos = me.relative ? me.p1.position() : me.p1.offset();
1429
- me.p2pos = me.relative ? me.p2.position() : me.p2.offset();
1430
- };
1431
-
1432
- /**
1433
- * Handler for mouseup events
1434
- */
1435
- function onDragStop(e)
1436
- {
1437
- // resume the ability to highlight text
1438
- if (bw.konq || bw.chrome || bw.safari)
1439
- document.body.style.webkitUserSelect = 'auto';
1440
-
1441
- // cancel the listening for drag events
1442
- $(document).off('.' + me.id);
1443
- me.drag_active = false;
1444
-
1445
- if (rcmail.message_list)
1446
- rcmail.message_list.drag_active = false;
1447
-
1448
- // remove temp divs
1449
- $('div.iframe-splitter-fix').remove();
1450
-
1451
- me.set_cookie();
1452
-
1453
- if (typeof me.callback == 'function')
1454
- me.callback(me);
1455
-
1456
- return bw.safari ? true : rcube_event.cancel(e);
1457
- };
1458
-
1459
- /**
1460
- * Handler for window resize events
1461
- */
1462
- function onResize(e)
1463
- {
1464
- if (me.horizontal) {
1465
- var new_height = parseInt(me.parent.outerHeight(), 10) - parseInt(me.p20.style.top, 10);
1466
- me.p2.css('height', (new_height > 0 ? new_height : 0) +'px');
1467
- }
1468
- else {
1469
- var new_width = parseInt(me.parent.outerWidth(), 10) - parseInt(me.p20.style.left, 10);
1470
- me.p2.css('width', (new_width > 0 ? new_width : 0) + 'px');
1471
- }
1472
- };
1473
-
1474
- /**
1475
- * Get saved splitter position from cookie
1476
- */
1477
- this.get_cookie = function()
1478
- {
1479
- return window.UI ? UI.get_pref(this.id) : null;
1480
- };
1481
-
1482
- /**
1483
- * Saves splitter position in cookie
1484
- */
1485
- this.set_cookie = function()
1486
- {
1487
- if (window.UI)
1488
- UI.save_pref(this.id, this.pos);
1489
- };
1490
-
1491
-} // end class rcube_splitter
1492
-
1493
-
1494
-// static getter for splitter instances
1495
-rcube_splitter._instances = {};
1496
-
1497
-rcube_splitter.get_instance = function(id)
1498
-{
1499
- return rcube_splitter._instancesid;
1500
-};
1501
-
1502
-// @license-end
1503
roundcubemail-1.6.tar.gz/skins/larry/ui.min.js
Deleted
15
1
2
-/**
3
- * Roundcube functions for default skin interface
4
- *
5
- * Copyright (c) The Roundcube Dev Team
6
- *
7
- * The contents are subject to the Creative Commons Attribution-ShareAlike
8
- * License. It is allowed to copy, distribute, transmit and to adapt the work
9
- * by keeping credits to the original autors in the README file.
10
- * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
11
- *
12
- * @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt CC0-1.0
13
- */
14
-function rcube_mail_ui(){var a,o,i,e,s={},n={},r={forwardmenu:{editable:1},searchmenu:{editable:1,callback:function(e){if(e&&rcmail.env.search_mods){var t,i="*",s=n.searchmenu,a=$('input:checkboxname="s_mods"',s),o=rcmail.env.mailbox,e=rcmail.env.search_mods,s=rcmail.env.search_scope||"base";if("mail"==rcmail.env.task&&(e=eo||e"*",i="text",$('input:radioname="s_scope"').prop("checked",!1).filter("#s_scope_"+s).prop("checked",!0)),ei)a.map(function(){this.checked=!0,this.disabled=this.value!=i});else for(t in a.prop("disabled",!1).prop("checked",!1),e)$("#s_mod_"+t).prop("checked",!0)}}},attachmentmenu:{},listoptions:{editable:1},groupmenu:{above:1},mailboxmenu:{above:1},spellmenu:{callback:function(e,t){var i,s,a=rcmail.spellcheck_lang(),o=$("ul",t.obj);if(!o.length){for(i in o=$('<ul class="toolbarmenu selectable" role="menu">'),rcmail.env.spell_langs)s=$('<li role="menuitem">'),$('<a href="#'+i+'" tabindex="0"></a>').text(rcmail.env.spell_langsi).addClass("active").data("lang",i).on("click keypress",function(e){if("keypress"!=e.type||13==rcube_event.get_keycode(e))return rcmail.spellcheck_lang_set($(this).data("lang")),rcmail.hide_menu("spellmenu",e),!1}).appendTo(s),s.appendTo(o);o.appendTo(t.obj)}$("li",o).each(function(){var e=$("a",this);e.data("lang")==a?e.addClass("selected").attr("aria-selected","true"):e.hasClass("selected")&&e.removeClass("selected").removeAttr("aria-selected")})}},"folder-selector":{iconized:1}},l=this,c={};function d(e){var t;return null!=(i=i||rcmail.local_storage_get_item("prefs.larry",{}))e||null!=(t=rcmail.get_cookie(e))&&(ie=t,rcmail.local_storage_set_item("prefs.larry",i)&&rcmail.set_cookie(e,t,new Date)),ie}function p(e,t){ie=t,rcmail.local_storage_set_item("prefs.larry",i)||rcmail.set_cookie(e,t,!1)}function m(e){e=e?10:0;rcmail.resize_timeout&&window.clearTimeout(rcmail.resize_timeout),rcmail.resize_timeout=window.setTimeout(function(){"mail"==rcmail.env.task&&("show"==rcmail.env.action||"preview"==rcmail.env.action?v():"compose"==rcmail.env.action&&k()),$("body.iframe .footerleft").each(function(){var e=$(this),t=$(document.body),i=e.hasClass("floating"),s=t.outerHeight(!0)>$(window).height();s!=i&&(es=s?"addClass":"removeClass"("floating"),ts("floatingbuttons"))})},e)}function u(e){var t,i=$(e.object).siblings("div");i.length&&$(e.object).insertBefore(i.first()),"error"==e.type&&"login"!=rcmail.env.task&&(rcmail.hide_message(e.object),l.message_timer&&window.clearTimeout(l.message_timer),l.messagedialog||(l.messagedialog=$("<div>").addClass("popupdialog").hide()),t=e.message,i=function(){l.messagedialog.is(":visible")&&l.messagedialog.dialog("destroy").hide()},l.messagedialog.is(":visible")&&l.messagedialog.text()!=t&&(t=l.messagedialog.html()+"<p>"+e.message+"</p>"),l.messagedialog.html(t).dialog({resizable:!1,closeOnEscape:!0,dialogClass:e.type,title:rcmail.gettext("errortitle"),close:i,hide:{effect:"fadeOut"},width:420,minHeight:90}).show(),l.messagedialog.closest("divrole=dialog").attr("role","alertdialog"),0<e.timeout&&(l.message_timer=window.setTimeout(i,e.timeout)))}function f(e){var t=e?e.new_layout:rcmail.env.layout,i=$("#mailview-top"),s=$("#mailview-bottom");e&&$("#mainscreencontent").removeClass().addClass(t),$("#mailviewsplitter")"desktop"==t?"show":"hide"(),$("#mailviewsplitter2")"widescreen"==t?"show":"hide"(),$("#mailpreviewframe")"list"!=t?"show":"hide"(),rcmail.env.contentframe="list"==t?null:"messagecontframe","widescreen"==t?($("#countcontrols").detach().appendTo($("#messagelistheader")),i.css({height:"auto",width:394}),s.css({top:0,left:406,height:"auto"}).show(),o?o.resize():(o=new rcube_splitter({id:"mailviewsplitter2",p1:"#mailview-top",p2:"#mailview-bottom",orientation:"v",relative:!0,start:416,min:400,size:12})).init()):"desktop"==t?(i.css({height:270,width:"auto"}),s.css({left:0,top:284,height:"auto"}).show(),a?a.resize():(a=new rcube_splitter({id:"mailviewsplitter",p1:"#mailview-top",p2:"#mailview-bottom",orientation:"h",relative:!0,start:276,min:150,size:12,offset:4})).init()):(i.css({height:"auto",width:"auto"}),s.hide()),e&&"widescreen"==e.old_layout&&$("#countcontrols").detach().appendTo($("#messagelistfooter"))}function v(){$("#messagecontent").css("top",$("#messageheader").outerHeight()+1+"px"),$("#message-objects div a").addClass("button"),$("#attachment-list li").length||($("div.rightcol").hide().attr("aria-hidden","true"),$("div.leftcol").css("margin-right","0"));var e,t=$("#messagebody.mailvelope, #messagebody > .mailvelope");t.length&&(e=$("#messagecontent").length?$("#messagecontent").height()-16:$(window).height()-t.offset().top-2,t.height(e))}function g(e){}function b(e){}function w(){for(var e,t,i="cc","bcc","replyto","followupto",s=0;s<i.length;s++)e=is,(t=$("#_"+e)).length&&(t.on("change",{v:e},function(e){this.value&&q(e.data.v,!0)}),""!=t.val()&&q(e,!0));$("textareaname='_to', textareaname='_cc', textareaname='_bcc'").change(function(e){_(this)}).change(),rcmail.addEventListener("autocomplete_insert",function(e){_(e.field)})}function _(e){var t,i;"TEXTAREA"==e.nodeName&&(t=$(e),i=e.scrollHeight,i=80<e.value.length&&21<i?2:1,t.css("height",14*i+"px"),k())}function k(){var e,t,i=$("#composebody"),s=$("#compose-content"),a=$("#composeview-bottom");s.length&&(t=300-(e=s.height()-a.position().top),a.height(Math.max(300,e)),s.css("overflow",0<t?"auto":"hidden"),s=i.parent().width()-5,t=i.parent().height()-8,i.width(s).height(t),$("#composebodycontainer > div").width(7+s),$("#composebody_ifr").height(4+t-$("div.tox-toolbar").height()),$("#googie_edit_layer").width(s).height(t),(t=$("#directorylist")).length&&$("#compose-contacts .scroller").css("top",t.position().top+t.outerHeight()))}function x(e){var t=$("#quotadisplay"),i=$("#quotamenu"),s=e.total?24*Math.ceil(e.percent/100*20):0;e.total&&480==s&&e.percent<100&&(s-=24),t.css("background-position","0 -"+s+"px"),t.attr("class","countdisplay p"+10*Math.round(e.percent/10)),e.table&&((i=!i.length?$('<div id="quotamenu" class="popupmenu">').appendTo($("body")):i).html(e.table),t.css("cursor","pointer").off("click").on("click",function(e){return rcmail.command("menu-open","quotamenu",e.target,e)}))}function y(o){$(".boxtitle a.search",o).click(function(e){var i=$(".boxtitle",o),t=$(".listsearchbox",o),s=t.is(":visible")?-1:1,a=34+($("select",t).length?22:0);return t.slideToggle({duration:160,progress:function(e,t){s<0&&(t=1-t),$(".scroller",o).css("top",i.outerHeight()+a*t+"px")},complete:function(){t.toggleClass("expanded"),t.is(":visible")?(t.find("inputtype=text").focus(),a=34+($("select",t).length?$("select",t).outerHeight()+4:0),$(".scroller",o).css("top",i.outerHeight()+a+"px")):$("a.reset",t).click()}}),!1})}function z(e){var t;"reply-list"==e.command&&1==rcmail.env.reply_all_mode?(t=rcmail.gettext(e.status?"replylist":"replyall"),("preview"==rcmail.env.action?$("a.button.replyall"):$("a.button.reply-all").text(t)).attr("title",t)):"compose-encrypted"==e.command?$("a.button.encrypt").parent().show():"compose-encrypted-signed"==e.command&&$("#encryptionmenulink").show()}function C(e,t){var i=ne=$("#"+e);i.appendTo(document.body),i.length&&(re=$.extend(re||{},t||{}))}function E(){$("#preview-shortheaders").toggle();var e=$("#preview-allheaders").toggle(),t=$("a#previewheaderstoggle");e.is(":visible")?t.attr("href","#hide").removeClass("add").addClass("remove").attr("aria-expanded","true"):t.attr("href","#details").removeClass("remove").addClass("add").attr("aria-expanded","false"),p("previewheaders",e.is(":visible")?"1":"0")}function T(e,t){!t&&$("#mail"+e+"mode").hasClass("disabled")||($("#maillistmode, #mailthreadmode").removeClass("selected").attr("tabindex","0").attr("aria-disabled","false"),$("#mail"+e+"mode").addClass("selected").attr("tabindex","-1").attr("aria-disabled","true"))}function L(e){var t,i,s,a,o;e&&"messagelistmenu"==e.name?(a=e,(o=$("#listoptions")).is(":visible")?o.dialog("close",a.originalEvent):($('inputname="sort_col"value="'+rcmail.env.sort_col+'"').prop("checked",!0),$('inputname="sort_ord"value="DESC"').prop("checked","DESC"==rcmail.env.sort_order),$('inputname="sort_ord"value="ASC"').prop("checked","DESC"!=rcmail.env.sort_order),$.each("widescreen","desktop","list",function(){$('inputname="layout"value="'+this+'"').prop("checked",rcmail.env.layout==this)}),$("#listoptions-columns",o)"widescreen"==rcmail.env.layout?"hide":"show"(),$('inputname="list_col"').each(function(){$(this).prop("checked",-1!=$.inArray(this.value,rcmail.env.listcols))}),o.dialog({modal:!0,resizable:!1,closeOnEscape:!0,title:null,open:function(e){setTimeout(function(){o.find("a, input:not(:disabled)").not("aria-disabled=true").first().focus()},100)},close:function(e){o.dialog("destroy").hide(),e.originalEvent&&rcube_event.is_keyboard(e.originalEvent)&&$("#listmenulink").focus()},minWidth:500,width:o.width()+25}).show())):e&&(t=re.name||{},i=$(t.link||"#"+e.name+"link"),s=e.obj&&e.obj.is(":visible"),t.above,e.obj&&s&&i.length&&(a=i.parent(),$(window),a.hasClass("dropbutton")&&(i=a),(t.above||i.hasClass("dropbutton"))&&(a=i.offset(),e.obj.css({left:a.left+"px",top:a.top+(t.above?-e.obj.height():i.outerHeight())+"px"}))),e.obj&&t.iconized&&e.obj.children("ul").addClass("iconized"),e.obj&&t.editable&&e.obj.attr("data-editable","true"),"function"==typeof t.callback&&t.callback(s,e))}function M(e){var t,i,s;(e=$(e)).children(".drop").length||e.is(".no-menu")||(s=rcmail.gettext("options"),i=(t=e.find("a.filename")).attr("tabindex")||0,s=$("<a>").attr({class:"drop skip-content",tabindex:i,"aria-haspopup":!0,title:s}).text(s).on("click keypress",function(e){if("keypress"!=e.type||13==rcube_event.get_keycode(e))return t=e,i=(e=this).parentNode.id.replace(/^attach/,""),$.each("open","download","rename",function(){var t=this;$("#attachmenu"+t).off("click").attr("onclick","").click(function(e){return rcmail.command(t+"-attachment",i,this)})}),r.attachmentmenu.link=e,rcmail.command("menu-open",{menu:"attachmentmenu",id:i},e,t),!1;var t,i}),t.length?s.insertAfter(t):s.appendTo(e))}function j(e){$("#listoptions").dialog("close"),rcube_event.is_keyboard(e.originalEvent)&&$("#listmenulink").focus();var t=$('inputname="sort_col":checked').val(),i=$('inputname="sort_ord":checked').val(),s=$('inputname="layout":checked').val(),e=$('inputname="list_col":checked').map(function(){return this.value}).get();rcmail.set_list_options(e,t,i,rcmail.env.threading,s)}function H(e){var t=$("#contacts-table"),i=t.parent().css("overflow","hidden");t.clone().css({position:"absolute",top:"0",left:"0",width:t.width()+"px","z-index":10}).appendTo(i).animate({left:-(t.width()+5)+"px"},300,"swing",function(){$(this).remove(),i.css("overflow","auto")})}function I(e){var t=$("#contacts-table"),i=t.parent().css("overflow","hidden"),s=t.clone().appendTo(i);t.css({position:"absolute",top:"0",left:-(t.width()+5)+"px",width:t.width()+"px",height:t.height()+"px","z-index":10}).animate({left:"0"},300,"linear",function(){s.remove(),$(this).css({position:"relative",left:"0",width:"100%",height:"auto","z-index":1}),i.css("overflow","auto")})}function q(e,t){var i=$("#compose-"+e);if(!i.is(":visible"))return ce&&!t&&$("#_"+e).val(ce),i.show(),$("#"+e+"-link").hide(),k(),$("input,textarea",i).focus(),!1}function W(e,t){var o,i=$(e),n=i.get(0).id,e=i.children("fieldset");e.length&&(n||(n="rcmtabcontainer",i.attr("id",n)),o=$("<ul>").addClass("tabsbar").prependTo(i),e.each(function(e){var t=$(this),i=t.children("legend"),s=n+"-t"+e,a=$("<a>").text(i.text()).attr("href","#"+s),e=$("<li>").addClass("tablink");i.remove(),t.attr("id",s),e.append(a).appendTo(o)}),i.tabs({active:t||0,heightStyle:"content",activate:function(e,t){m()}}))}this.set=function(e,t){se=t},this.init=function(){{var e,t;rcmail.addEventListener("message",u),$.widget("ui.dialog",$.ui.dialog,{open:function(){return this._super(),function(e){var t=$(e.uiDialog),i=t.offset(),s=t.position(),a=t.outerWidth(),o=$(window).width(),e=i.top-12;e<0&&t.css("top",s.top-e);i.left+a+12>o&&t.css("left",s.left-12)}(this),this}}),$("#taskbar a").each(function(e,t){$(t).append('<span class="tooltip">'+$(".button-inner",this).html()+"</span>")}),$("#taskbar .minmodetoggle").click(function(e){p("minimalmode",$(document.body).toggleClass("minimal").hasClass("minimal")?1:0),$(window).resize()}),"mail"==rcmail.env.task?(rcmail.addEventListener("menu-open",L).addEventListener("menu-close",L).addEventListener("menu-save",j).addEventListener("enable-command",z).addEventListener("responseafterlist",function(e){T(rcmail.env.threading?"thread":"list",!0)}).addEventListener("responseaftersearch",function(e){T(rcmail.env.threading?"thread":"list",!0)}),(i=$("#dragmessagemenu")).length&&(rcmail.gui_object("dragmenu","dragmessagemenu"),n.dragmenu=i),"show"==rcmail.env.action||"preview"==rcmail.env.action?(rcmail.addEventListener("aftershow-headers",function(){v()}).addEventListener("afterhide-headers",function(){v()}),$("#previewheaderstoggle").click(function(e){return E(),this.blur&&!rcube_event.is_keyboard(e)&&this.blur(),!1}),$("#attachment-list > li").each(function(){M(this)}),"preview"==rcmail.env.action&&"1"==d("previewheaders")&&E(),"show"==rcmail.env.action&&$("#messagecontent").focus()):"compose"==rcmail.env.action?(rcmail.addEventListener("fileappended",function(e){e.attachment.complete&&M(e.item)}).addEventListener("aftertoggle-editor",function(e){window.setTimeout(function(){k()},200)}).addEventListener("compose-encrypted",function(e){$("selectname='editorSelector'").prop("disabled",e.active),$("a.button.attach, a.button.responses")e.active?"addClass":"removeClass"("disabled"),$("#responseslist a.insertresponse")e.active?"removeClass":"addClass"("active")}),w(),$("#composeoptionstoggle").click(function(e){var t=$("#composeoptions").toggle().is(":visible");return $("#composeoptionstoggle").toggleClass("remove").attr("aria-expanded",t?"true":"false"),k(),p("composeoptions",t?"1":"0"),rcube_event.is_keyboard(e)||this.blur(),!1}).css("cursor","pointer"),"0"!==d("composeoptions")&&$("#composeoptionstoggle").click(),(e=rcmail.opener())&&"compose"==e.env.action&&$("#composeoptionstoggle",opener.document).hasClass("remove")&&$("#composeoptionstoggle").click(),new rcube_splitter({id:"composesplitterv",p1:"#composeview-left",p2:"#composeview-right",orientation:"v",relative:!0,start:206,min:170,size:12,render:k}).init(),$("#attachment-list > li").each(function(){M(this)})):"bounce"==rcmail.env.action?w():"list"!=rcmail.env.action&&rcmail.env.action?"get"==rcmail.env.action&&new rcube_splitter({id:"mailpartsplitterv",p1:"#messagepartheader",p2:"#messagepartcontainer",orientation:"v",relative:!0,start:226,min:150,size:12}).init():(f(),$("#maillistmode").addClass(rcmail.env.threading?"":"selected").click(function(e){return T("list"),!1}),$("#mailthreadmode").addClass(rcmail.env.threading?"selected":"").click(function(e){return T("thread"),!1}),rcmail.init_pagejumper("#pagejumper"),rcmail.addEventListener("setquota",x).addEventListener("layout-change",f)),$("#mailview-left").length&&new rcube_splitter({id:"mailviewsplitterv",p1:"#mailview-left",p2:"#mailview-right",orientation:"v",relative:!0,start:206,min:150,size:12,callback:g,render:b}).init()):"settings"==rcmail.env.task?(rcmail.addEventListener("init",function(){var e="#settingstabpreferences";rcmail.env.action&&(e="#settingstab"+(0<rcmail.env.action.indexOf("identity")?"identities":rcmail.env.action.replace(/\./g,""))),$(e).addClass("selected").children().first().removeAttr("onclick").click(function(){return!1})}),"folders"==rcmail.env.action?(new rcube_splitter({id:"folderviewsplitter",p1:"#folderslist",p2:"#folder-details",orientation:"v",relative:!0,start:266,min:180,size:12}).init(),rcmail.addEventListener("setquota",x),y($("#folderslist"))):"identities"==rcmail.env.action?new rcube_splitter({id:"identviewsplitter",p1:"#identitieslist",p2:"#identity-details",orientation:"v",relative:!0,start:266,min:180,size:12}).init():"responses"==rcmail.env.action?new rcube_splitter({id:"responseviewsplitter",p1:"#responseslist",p2:"#response-details",orientation:"v",relative:!0,start:266,min:180,size:12}).init():"preferences"!=rcmail.env.action&&rcmail.env.action?"edit-prefs"==rcmail.env.action&&(e=$("#preferences-details fieldset.advanced legend"),t=$('<a href="#toggle"></a>').text(rcmail.gettext("toggleadvancedoptions")).attr("title",rcmail.gettext("toggleadvancedoptions")).addClass("advanced-toggle"),e.click(function(e){t.html($(this).hasClass("collapsed")?"▲":"▼"),$(this).toggleClass("collapsed").closest("fieldset").children(".propform").toggle()}).append(t).addClass("collapsed"),bw.mz&&e.parents("form").css("display","inline")):new rcube_splitter({id:"prefviewsplitter",p1:"#sectionslist",p2:"#preferences-box",orientation:"v",relative:!0,start:266,min:180,size:12}).init()):"addressbook"==rcmail.env.task&&(rcmail.addEventListener("beforepushgroup",H).addEventListener("beforepopgroup",I).addEventListener("menu-open",L).addEventListener("menu-close",L),""==rcmail.env.action&&(new rcube_splitter({id:"addressviewsplitterd",p1:"#addressview-left",p2:"#addressview-right",orientation:"v",relative:!0,start:206,min:150,size:12,render:b}).init(),new rcube_splitter({id:"addressviewsplitter",p1:"#addresslist",p2:"#contacts-box",orientation:"v",relative:!0,start:266,min:260,size:12}).init()),(i=$("#dragcontactmenu")).length&&(rcmail.gui_object("dragmenu","dragcontactmenu"),n.dragmenu=i))}$(".tabbed").each(function(e,t){W(t)}),$("select.decorated").each(function(){var e,t,i,s,a,o;bw.opera?$(this).removeClass("decorated"):(t=(e=$(this)).parent(),i=Math.max(e.height(),26)-2,s=e.width()-22,a=$("option",this).first().text(),""!=$("option:selected",this).val()&&(a=$("option:selected",this).text()),(o=$('<a class="menuselector" tabindex="-1"><span class="handle">'+a+"</span></a>").css("position","absolute").offset(e.position()).insertAfter(e)).children().width(s).height(i).css("line-height",i-1+"px"),"absolute"!=t.css("position")&&t.css("position","relative"),e.width(o.width()).on(bw.mz?"change keyup":"change",function(){var e=$("option:selected",this).text();$(this).next().children().text(e)}),e.on("focus",function(e){o.addClass("focus")}).on("blur",function(e){o.removeClass("focus")}))});var i=$("body.minwidth");i.length&&i.css("min-width",$(".toolbar").width()+$("#quicksearchbar").width()+$("#searchfilter").width()+30);(window.onresize=m)()},this.init_tabs=W,this.show_about=function(e){var t=$("<iframe>").attr({id:"aboutframe",src:rcmail.url("settings/about"),frameborder:"0"});h=Math.floor(.75*$(window).height()),buttons={},supportln=$("#supportlink"),supportln.length&&(s.supporturl=supportln.attr("href"))&&(buttonssupportln.html()=function(e){s.supporturl.indexOf("mailto:")<0?window.open(s.supporturl):location.href=s.supporturl});t.dialog({modal:!0,resizable:!1,closeOnEscape:!0,title:e?e.title||e.innerHTML:null,close:function(){t.dialog("destroy").remove()},buttons:buttons,width:640,height:h}).width(640)},this.show_popup=function(e,t,i){!i&&re||C(e,i);i=re||{};var s=$(i.link||"#"+e+"link"),i=s.offset();s.has(".inner")&&(s=s.children(".inner"));return rcmail.command("menu-open",{menu:e,show:t},s.get(0),$.Event("click",{target:s.get(0),pageX:i.left,pageY:i.top,clientX:i.left,clientY:i.top}))},this.toggle_popup=function(e,t,i){!i&&re||C(e,i);return rcmail.command("menu-open",e,t.target,t)},this.add_popup=C,this.import_dialog=function(){var t=$("#uploadform").clone().removeClass("popupdialog");rcmail.simple_dialog(t,rcmail.gettext("importmessages"),function(e){return rcmail.command("import-messages",$(t.find("form")0))},{button:"import",closeOnEscape:!0,minWidth:400})},this.set_searchmod=function(e){var t,i=rcmail.env.task,s=rcmail.env.search_mods||{},a=rcmail.env.mailbox;$('inputname="s_scope":checked').val();s="mail"==i?(sa||(sa=rcube_clone_object(s"*")),t=sa,"text"):(t=s,"*");e.checked?te.value=1:delete te.value;e.value==s&&$('input:checkboxname="s_mods"').not(e).map(function(){this.checked=!0,e.checked?(this.disabled=!0,delete tthis.value):(this.disabled=!1,tthis.value=1)});rcmail.set_searchmods(t)},this.show_header_row=q,this.hide_header_row=function(e){var t=$("#_"+e);return ce=t.val(),t.val(""),$("#compose-"+e).hide(),$("#"+e+"-link").show(),k(),!1},this.update_quota=x,this.get_pref=d,this.save_pref=p,this.folder_search_init=y,window.$&&document.body&&(e=d("minimalmode"),(parseInt(e)||null===e&&$(window).height()<850)&&$(document.body).addClass("minimal"),bw.tablet&&$("#viewport").attr("content","width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"),$(document).ready(function(){l.init()}))}function rcube_scroller(e,t,i){var s=this;this.list=$(e),this.top=$(t),this.bottom=$(i),this.step_size=6,this.step_time=20,this.delay=500,this.top.mouseenter(function(){rcmail.drag_active&&(s.ts=window.setTimeout(function(){s.scroll("down")},s.delay))}).mouseout(function(){s.ts&&window.clearTimeout(s.ts)}),this.bottom.mouseenter(function(){rcmail.drag_active&&(s.ts=window.setTimeout(function(){s.scroll("up")},s.delay))}).mouseout(function(){s.ts&&window.clearTimeout(s.ts)}),this.scroll=function(e){var t=this,i=this.step_size;rcmail.drag_active&&("down"==e&&(i*=-1),this.list.get(0).scrollTop+=i,this.ts=window.setTimeout(function(){t.scroll(e)},this.step_time))}}function rcube_splitter(e){this.p=e,this.id=e.id,this.horizontal="horizontal"==e.orientation||"h"==e.orientation,this.halfsize=(void 0!==e.size?e.size:10)/2,this.pos=e.start||0,this.min=e.min||20,this.offset=e.offset||0,this.relative=!!e.relative,this.drag_active=!1,this.render=e.render,this.callback=e.callback;var i=this;function s(e){(bw.konq||bw.chrome||bw.safari)&&(document.body.style.webkitUserSelect="none"),i.p1pos=i.relative?i.p1.position():i.p1.offset(),i.p2pos=i.relative?i.p2.position():i.p2.offset(),i.drag_active=!0,$(document).on("mousemove."+this.id,t).on("mouseup."+this.id,a),rcmail.message_list&&(rcmail.message_list.drag_active=!0),$("iframe").each(function(e,t){$("<div>").attr("id","iframe-splitter-fix-"+e).addClass("iframe-splitter-fix").css({background:"#fff",width:t.offsetWidth+"px",height:t.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css($(this).offset()).appendTo("body")})}function t(e){return i.drag_active&&(window.clearTimeout(i.ts),i.ts=window.setTimeout(function(){!function(e){var t=rcube_event.get_mouse_pos(e);i.relative&&(e=i.parent.offset(),t.x-=e.left,t.y-=e.top);i.horizontal?t.y-i.halfsize>i.p1pos.top&&t.y+i.halfsize<i.p2pos.top+i.p2.outerHeight()&&(i.pos=Math.max(i.min,t.y-Math.max(0,i.offset)),i.pos>i.min&&(i.pos=Math.min(i.pos,i.parent.height()-i.min)),i.resize()):t.x-i.halfsize>i.p1pos.left&&t.x+i.halfsize<i.p2pos.left+i.p2.outerWidth()&&(i.pos=Math.max(i.min,t.x-Math.max(0,i.offset)),i.pos>i.min&&(i.pos=Math.min(i.pos,i.parent.width()-i.min)),i.resize());i.p1pos=i.relative?i.p1.position():i.p1.offset(),i.p2pos=i.relative?i.p2.position():i.p2.offset()}(e)},1)),!1}function a(e){return(bw.konq||bw.chrome||bw.safari)&&(document.body.style.webkitUserSelect="auto"),$(document).off("."+i.id),i.drag_active=!1,rcmail.message_list&&(rcmail.message_list.drag_active=!1),$("div.iframe-splitter-fix").remove(),i.set_cookie(),"function"==typeof i.callback&&i.callback(i),!!bw.safari||rcube_event.cancel(e)}function o(e){var t;i.horizontal?(t=parseInt(i.parent.outerHeight(),10)-parseInt(i.p20.style.top,10),i.p2.css("height",(0<t?t:0)+"px")):(t=parseInt(i.parent.outerWidth(),10)-parseInt(i.p20.style.left,10),i.p2.css("width",(0<t?t:0)+"px"))}rcube_splitter._instancesthis.id=i,this.init=function(){var e,t;this.p1=$(this.p.p1),this.p2=$(this.p.p2),this.parent=this.p1.parent(),this.p1.length&&this.p2.length&&(this.p1pos=this.relative?this.p1.position():this.p1.offset(),this.p2pos=this.relative?this.p2.position():this.p2.offset(),this.handle=$("<div>").attr("id",this.id).attr("unselectable","on").attr("role","presentation").addClass("splitter "+(this.horizontal?"splitter-h":"splitter-v")).appendTo(this.parent).mousedown(s),this.horizontal?(e=this.p1pos.top+this.p1.outerHeight(),this.handle.css({left:"0px",top:e+"px"})):(t=this.p1pos.left+this.p1.outerWidth(),this.handle.css({left:t+"px",top:"0px"})),bw.ie&&$(window).resize(o),(t=this.get_cookie())&&!isNaN(t)?(this.pos=parseFloat(t),this.resize()):this.pos&&(this.resize(),this.set_cookie()))},this.resize=function(){var e;this.horizontal?(this.p1.css("height",Math.floor(this.pos-this.p1pos.top-Math.floor(this.halfsize))+"px"),this.p2.css("top",Math.ceil(this.pos+Math.ceil(this.halfsize)+2)+"px"),this.handle.css("top",Math.round(this.pos-this.halfsize+this.offset)+"px"),bw.ie&&(e=parseInt(this.parent.outerHeight(),10)-parseInt(this.p2.css("top"),10),this.p2.css("height",(0<e?e:0)+"px"))):(this.p1.css("width",Math.floor(this.pos-this.p1pos.left-Math.floor(this.halfsize))+"px"),this.p2.css("left",Math.ceil(this.pos+Math.ceil(this.halfsize))+"px"),this.handle.css("left",Math.round(this.pos-this.halfsize+this.offset+3)+"px"),bw.ie&&(e=parseInt(this.parent.outerWidth(),10)-parseInt(this.p2.css("left"),10),this.p2.css("width",(0<e?e:0)+"px"))),this.p2.resize(),this.p1.resize(),this.drag_active&&$("iframe").each(function(e,t){var i=$(this).offset();$("#iframe-splitter-fix-"+e).css({top:i.top+"px",left:i.left+"px",width:t.offsetWidth+"px",height:t.offsetHeight+"px"})}),"function"==typeof this.render&&this.render(this)},this.get_cookie=function(){return window.UI?UI.get_pref(this.id):null},this.set_cookie=function(){window.UI&&UI.save_pref(this.id,this.pos)}}rcube_splitter._instances={},rcube_splitter.get_instance=function(e){return rcube_splitter._instancese};
15
roundcubemail-1.6.tar.gz/skins/larry/watermark.html
Deleted
24
1
2
-<!DOCTYPE html>
3
-<html>
4
-<head>
5
-<meta charset="utf-8">
6
-<title></title>
7
-<style type="text/css">
8
-
9
-html, body {
10
- height: 95%;
11
-}
12
-
13
-body {
14
- background: url(images/watermark.jpg) center no-repeat #fff;
15
-}
16
-
17
-</style>
18
-</head>
19
-<body>
20
-
21
-</body>
22
-</html>
23
\ No newline at end of file
24
roundcubemail-1.6.tar.gz/vendor/autoload.php
Changed
7
1
2
3
require_once __DIR__ . '/composer/autoload_real.php';
4
5
-return ComposerAutoloaderInit85451a37b3f0077caeb7d96fe7c31367::getLoader();
6
+return ComposerAutoloaderInitc6a250ad85fd067f9d235d5d523ffe44::getLoader();
7
roundcubemail-1.6.tar.gz/vendor/bin/rcubeinitdb.sh
Added
121
1
2
+#!/usr/bin/env php
3
+<?php
4
+
5
+/**
6
+ * Proxy PHP file generated by Composer
7
+ *
8
+ * This file includes the referenced bin path (../roundcube/plugin-installer/src/bin/rcubeinitdb.sh)
9
+ * using a stream wrapper to prevent the shebang from being output on PHP<8
10
+ *
11
+ * @generated
12
+ */
13
+
14
+namespace Composer;
15
+
16
+$GLOBALS'_composer_bin_dir' = __DIR__;
17
+$GLOBALS'_composer_autoload_path' = __DIR__ . '/..'.'/autoload.php';
18
+
19
+if (PHP_VERSION_ID < 80000) {
20
+ if (!class_exists('Composer\BinProxyWrapper')) {
21
+ /**
22
+ * @internal
23
+ */
24
+ final class BinProxyWrapper
25
+ {
26
+ private $handle;
27
+ private $position;
28
+ private $realpath;
29
+
30
+ public function stream_open($path, $mode, $options, &$opened_path)
31
+ {
32
+ // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
33
+ $opened_path = substr($path, 17);
34
+ $this->realpath = realpath($opened_path) ?: $opened_path;
35
+ $opened_path = $this->realpath;
36
+ $this->handle = fopen($this->realpath, $mode);
37
+ $this->position = 0;
38
+
39
+ return (bool) $this->handle;
40
+ }
41
+
42
+ public function stream_read($count)
43
+ {
44
+ $data = fread($this->handle, $count);
45
+
46
+ if ($this->position === 0) {
47
+ $data = preg_replace('{^#!.*\r?\n}', '', $data);
48
+ }
49
+
50
+ $this->position += strlen($data);
51
+
52
+ return $data;
53
+ }
54
+
55
+ public function stream_cast($castAs)
56
+ {
57
+ return $this->handle;
58
+ }
59
+
60
+ public function stream_close()
61
+ {
62
+ fclose($this->handle);
63
+ }
64
+
65
+ public function stream_lock($operation)
66
+ {
67
+ return $operation ? flock($this->handle, $operation) : true;
68
+ }
69
+
70
+ public function stream_seek($offset, $whence)
71
+ {
72
+ if (0 === fseek($this->handle, $offset, $whence)) {
73
+ $this->position = ftell($this->handle);
74
+ return true;
75
+ }
76
+
77
+ return false;
78
+ }
79
+
80
+ public function stream_tell()
81
+ {
82
+ return $this->position;
83
+ }
84
+
85
+ public function stream_eof()
86
+ {
87
+ return feof($this->handle);
88
+ }
89
+
90
+ public function stream_stat()
91
+ {
92
+ return array();
93
+ }
94
+
95
+ public function stream_set_option($option, $arg1, $arg2)
96
+ {
97
+ return true;
98
+ }
99
+
100
+ public function url_stat($path, $flags)
101
+ {
102
+ $path = substr($path, 17);
103
+ if (file_exists($path)) {
104
+ return stat($path);
105
+ }
106
+
107
+ return false;
108
+ }
109
+ }
110
+ }
111
+
112
+ if (
113
+ (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
114
+ || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
115
+ ) {
116
+ return include("phpvfscomposer://" . __DIR__ . '/..'.'/roundcube/plugin-installer/src/bin/rcubeinitdb.sh');
117
+ }
118
+}
119
+
120
+return include __DIR__ . '/..'.'/roundcube/plugin-installer/src/bin/rcubeinitdb.sh';
121
roundcubemail-1.6.tar.gz/vendor/composer/InstalledVersions.php
Changed
53
1
2
private static $installed;
3
4
/**
5
- * @var bool
6
- */
7
- private static $installedIsLocalDir;
8
-
9
- /**
10
* @var bool|null
11
*/
12
private static $canGetVendors;
13
14
{
15
self::$installed = $data;
16
self::$installedByVendor = array();
17
-
18
- // when using reload, we disable the duplicate protection to ensure that self::$installed data is
19
- // always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
20
- // so we have to assume it does not, and that may result in duplicate data being returned when listing
21
- // all installed packages for example
22
- self::$installedIsLocalDir = false;
23
}
24
25
/**
26
27
$copiedLocalDir = false;
28
29
if (self::$canGetVendors) {
30
- $selfDir = strtr(__DIR__, '\\', '/');
31
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
32
- $vendorDir = strtr($vendorDir, '\\', '/');
33
if (isset(self::$installedByVendor$vendorDir)) {
34
$installed = self::$installedByVendor$vendorDir;
35
} elseif (is_file($vendorDir.'/composer/installed.php')) {
36
37
$required = require $vendorDir.'/composer/installed.php';
38
self::$installedByVendor$vendorDir = $required;
39
$installed = $required;
40
- if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
41
+ if (strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
42
self::$installed = $required;
43
- self::$installedIsLocalDir = true;
44
+ $copiedLocalDir = true;
45
}
46
}
47
- if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
48
- $copiedLocalDir = true;
49
- }
50
}
51
}
52
53
roundcubemail-1.6.tar.gz/vendor/composer/autoload_namespaces.php
Changed
18
1
2
'Zend_Config' => array($vendorDir . '/zf1/zend-config/library'),
3
'Zend_Cache' => array($vendorDir . '/zf1/zend-cache/library'),
4
'Yubikey' => array($vendorDir . '/enygma/yubikey/src'),
5
- 'Net' => array($vendorDir . '/pear/net_smtp', $vendorDir . '/pear/net_socket'),
6
+ 'Roundcube\\Composer' => array($vendorDir . '/roundcube/plugin-installer/src'),
7
+ 'Net' => array($vendorDir . '/pear/net_socket', $vendorDir . '/pear/net_smtp'),
8
'Monolog' => array($vendorDir . '/monolog/monolog/src'),
9
'Mail' => array($vendorDir . '/pear/mail_mime'),
10
'KubAT\\PhpSimple\\HtmlDomParser' => array($vendorDir . '/kub-at/php-simple-html-dom-parser/src'),
11
'HTTP_Request2' => array($vendorDir . '/pear/http_request2'),
12
'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'),
13
- 'Console' => array($vendorDir . '/pear/console_commandline', $vendorDir . '/pear/console_getopt'),
14
+ 'Console' => array($vendorDir . '/pear/console_getopt', $vendorDir . '/pear/console_commandline'),
15
'Caxy\\HtmlDiff' => array($vendorDir . '/caxy/php-htmldiff/lib'),
16
'Auth' => array($vendorDir . '/pear/auth_sasl'),
17
);
18
roundcubemail-1.6.tar.gz/vendor/composer/autoload_psr4.php
Changed
32
1
2
$baseDir = dirname($vendorDir);
3
4
return array(
5
- 'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src', $vendorDir . '/phpdocumentor/reflection-common/src'),
6
+ 'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/type-resolver/src', $vendorDir . '/phpdocumentor/reflection-docblock/src'),
7
'cogpowered\\FineDiff\\' => array($vendorDir . '/lolli42/finediff/src'),
8
'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'),
9
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
10
11
'Sabre\\Event\\' => array($vendorDir . '/sabre/event/lib'),
12
'Sabre\\' => array($vendorDir . '/sabre/dav/lib'),
13
'RtfHtmlPhp\\' => array($vendorDir . '/roundcube/rtf-html-php/src'),
14
- 'Roundcube\\Composer\\' => array($vendorDir . '/roundcube/plugin-installer/src'),
15
'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
16
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
17
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
18
'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src/Prophecy'),
19
'ParagonIE\\ConstantTime\\' => array($vendorDir . '/paragonie/constant_time_encoding/src'),
20
- 'PHPStan\\PhpDocParser\\' => array($vendorDir . '/phpstan/phpdoc-parser/src'),
21
'OTPHP\\' => array($vendorDir . '/spomky-labs/otphp/src'),
22
'Masterminds\\' => array($vendorDir . '/masterminds/html5/src'),
23
'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
24
25
'Firebase\\JWT\\' => array($vendorDir . '/firebase/php-jwt/src'),
26
'Endroid\\QrCode\\' => array($vendorDir . '/endroid/qr-code/src'),
27
'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'),
28
- 'Doctrine\\Deprecations\\' => array($vendorDir . '/doctrine/deprecations/src'),
29
'Desarrolla2\\Cache\\' => array($vendorDir . '/desarrolla2/cache/src'),
30
'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
31
'Assert\\' => array($vendorDir . '/beberlei/assert/lib/Assert'),
32
roundcubemail-1.6.tar.gz/vendor/composer/autoload_real.php
Changed
35
1
2
3
// autoload_real.php @generated by Composer
4
5
-class ComposerAutoloaderInit85451a37b3f0077caeb7d96fe7c31367
6
+class ComposerAutoloaderInitc6a250ad85fd067f9d235d5d523ffe44
7
{
8
private static $loader;
9
10
11
12
require __DIR__ . '/platform_check.php';
13
14
- spl_autoload_register(array('ComposerAutoloaderInit85451a37b3f0077caeb7d96fe7c31367', 'loadClassLoader'), true, true);
15
+ spl_autoload_register(array('ComposerAutoloaderInitc6a250ad85fd067f9d235d5d523ffe44', 'loadClassLoader'), true, true);
16
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
17
- spl_autoload_unregister(array('ComposerAutoloaderInit85451a37b3f0077caeb7d96fe7c31367', 'loadClassLoader'));
18
+ spl_autoload_unregister(array('ComposerAutoloaderInitc6a250ad85fd067f9d235d5d523ffe44', 'loadClassLoader'));
19
20
$includePaths = require __DIR__ . '/include_paths.php';
21
$includePaths = get_include_path();
22
set_include_path(implode(PATH_SEPARATOR, $includePaths));
23
24
require __DIR__ . '/autoload_static.php';
25
- call_user_func(\Composer\Autoload\ComposerStaticInit85451a37b3f0077caeb7d96fe7c31367::getInitializer($loader));
26
+ call_user_func(\Composer\Autoload\ComposerStaticInitc6a250ad85fd067f9d235d5d523ffe44::getInitializer($loader));
27
28
$loader->register(true);
29
30
- $filesToLoad = \Composer\Autoload\ComposerStaticInit85451a37b3f0077caeb7d96fe7c31367::$files;
31
+ $filesToLoad = \Composer\Autoload\ComposerStaticInitc6a250ad85fd067f9d235d5d523ffe44::$files;
32
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
33
if (empty($GLOBALS'__composer_autoload_files'$fileIdentifier)) {
34
$GLOBALS'__composer_autoload_files'$fileIdentifier = true;
35
roundcubemail-1.6.tar.gz/vendor/composer/autoload_static.php
Changed
127
1
2
3
namespace Composer\Autoload;
4
5
-class ComposerStaticInit85451a37b3f0077caeb7d96fe7c31367
6
+class ComposerStaticInitc6a250ad85fd067f9d235d5d523ffe44
7
{
8
public static $files = array (
9
'383eaff206634a77a1be54e64e6459c7' => __DIR__ . '/..' . '/sabre/uri/lib/functions.php',
10
11
'R' =>
12
array (
13
'RtfHtmlPhp\\' => 11,
14
- 'Roundcube\\Composer\\' => 19,
15
),
16
'P' =>
17
array (
18
19
'Psr\\Http\\Message\\' => 17,
20
'Prophecy\\' => 9,
21
'ParagonIE\\ConstantTime\\' => 23,
22
- 'PHPStan\\PhpDocParser\\' => 21,
23
),
24
'O' =>
25
array (
26
27
'D' =>
28
array (
29
'Doctrine\\Instantiator\\' => 22,
30
- 'Doctrine\\Deprecations\\' => 22,
31
'Desarrolla2\\Cache\\' => 18,
32
'DeepCopy\\' => 9,
33
),
34
35
public static $prefixDirsPsr4 = array (
36
'phpDocumentor\\Reflection\\' =>
37
array (
38
- 0 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src',
39
+ 0 => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src',
40
1 => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src',
41
- 2 => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src',
42
+ 2 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src',
43
),
44
'cogpowered\\FineDiff\\' =>
45
array (
46
47
array (
48
0 => __DIR__ . '/..' . '/roundcube/rtf-html-php/src',
49
),
50
- 'Roundcube\\Composer\\' =>
51
- array (
52
- 0 => __DIR__ . '/..' . '/roundcube/plugin-installer/src',
53
- ),
54
'Psr\\SimpleCache\\' =>
55
array (
56
0 => __DIR__ . '/..' . '/psr/simple-cache/src',
57
58
array (
59
0 => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src',
60
),
61
- 'PHPStan\\PhpDocParser\\' =>
62
- array (
63
- 0 => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src',
64
- ),
65
'OTPHP\\' =>
66
array (
67
0 => __DIR__ . '/..' . '/spomky-labs/otphp/src',
68
69
array (
70
0 => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator',
71
),
72
- 'Doctrine\\Deprecations\\' =>
73
- array (
74
- 0 => __DIR__ . '/..' . '/doctrine/deprecations/src',
75
- ),
76
'Desarrolla2\\Cache\\' =>
77
array (
78
0 => __DIR__ . '/..' . '/desarrolla2/cache/src',
79
80
0 => __DIR__ . '/..' . '/enygma/yubikey/src',
81
),
82
),
83
+ 'R' =>
84
+ array (
85
+ 'Roundcube\\Composer' =>
86
+ array (
87
+ 0 => __DIR__ . '/..' . '/roundcube/plugin-installer/src',
88
+ ),
89
+ ),
90
'N' =>
91
array (
92
'Net' =>
93
array (
94
- 0 => __DIR__ . '/..' . '/pear/net_smtp',
95
- 1 => __DIR__ . '/..' . '/pear/net_socket',
96
+ 0 => __DIR__ . '/..' . '/pear/net_socket',
97
+ 1 => __DIR__ . '/..' . '/pear/net_smtp',
98
),
99
),
100
'M' =>
101
102
array (
103
'Console' =>
104
array (
105
- 0 => __DIR__ . '/..' . '/pear/console_commandline',
106
- 1 => __DIR__ . '/..' . '/pear/console_getopt',
107
+ 0 => __DIR__ . '/..' . '/pear/console_getopt',
108
+ 1 => __DIR__ . '/..' . '/pear/console_commandline',
109
),
110
'Caxy\\HtmlDiff' =>
111
array (
112
113
public static function getInitializer(ClassLoader $loader)
114
{
115
return \Closure::bind(function () use ($loader) {
116
- $loader->prefixLengthsPsr4 = ComposerStaticInit85451a37b3f0077caeb7d96fe7c31367::$prefixLengthsPsr4;
117
- $loader->prefixDirsPsr4 = ComposerStaticInit85451a37b3f0077caeb7d96fe7c31367::$prefixDirsPsr4;
118
- $loader->prefixesPsr0 = ComposerStaticInit85451a37b3f0077caeb7d96fe7c31367::$prefixesPsr0;
119
- $loader->classMap = ComposerStaticInit85451a37b3f0077caeb7d96fe7c31367::$classMap;
120
+ $loader->prefixLengthsPsr4 = ComposerStaticInitc6a250ad85fd067f9d235d5d523ffe44::$prefixLengthsPsr4;
121
+ $loader->prefixDirsPsr4 = ComposerStaticInitc6a250ad85fd067f9d235d5d523ffe44::$prefixDirsPsr4;
122
+ $loader->prefixesPsr0 = ComposerStaticInitc6a250ad85fd067f9d235d5d523ffe44::$prefixesPsr0;
123
+ $loader->classMap = ComposerStaticInitc6a250ad85fd067f9d235d5d523ffe44::$classMap;
124
125
}, null, ClassLoader::class);
126
}
127
roundcubemail-1.6.tar.gz/vendor/composer/include_paths.php
Changed
13
1
2
$vendorDir . '/pear/pear-core-minimal/src',
3
$vendorDir . '/pear/net_ldap2',
4
$vendorDir . '/pear/auth_sasl',
5
- $vendorDir . '/pear/mail_mime',
6
- $vendorDir . '/pear/console_commandline',
7
$vendorDir . '/pear/crypt_gpg',
8
+ $vendorDir . '/pear/console_commandline',
9
+ $vendorDir . '/pear/mail_mime',
10
$vendorDir . '/pear/net_socket',
11
$vendorDir . '/pear/net_smtp',
12
);
13
roundcubemail-1.6.tar.gz/vendor/composer/installed.json
Changed
494
1
2
"install-path": "../desarrolla2/cache"
3
},
4
{
5
- "name": "doctrine/deprecations",
6
- "version": "1.1.4",
7
- "version_normalized": "1.1.4.0",
8
- "source": {
9
- "type": "git",
10
- "url": "https://github.com/doctrine/deprecations.git",
11
- "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9"
12
- },
13
- "dist": {
14
- "type": "zip",
15
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9",
16
- "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9",
17
- "shasum": ""
18
- },
19
- "require": {
20
- "php": "^7.1 || ^8.0"
21
- },
22
- "require-dev": {
23
- "doctrine/coding-standard": "^9 || ^12",
24
- "phpstan/phpstan": "1.4.10 || 2.0.3",
25
- "phpstan/phpstan-phpunit": "^1.0 || ^2",
26
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
27
- "psr/log": "^1 || ^2 || ^3"
28
- },
29
- "suggest": {
30
- "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
31
- },
32
- "time": "2024-12-07T21:18:45+00:00",
33
- "type": "library",
34
- "installation-source": "dist",
35
- "autoload": {
36
- "psr-4": {
37
- "Doctrine\\Deprecations\\": "src"
38
- }
39
- },
40
- "notification-url": "https://packagist.org/downloads/",
41
- "license":
42
- "MIT"
43
- ,
44
- "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
45
- "homepage": "https://www.doctrine-project.org/",
46
- "support": {
47
- "issues": "https://github.com/doctrine/deprecations/issues",
48
- "source": "https://github.com/doctrine/deprecations/tree/1.1.4"
49
- },
50
- "install-path": "../doctrine/deprecations"
51
- },
52
- {
53
"name": "doctrine/instantiator",
54
"version": "1.5.0",
55
"version_normalized": "1.5.0.0",
56
57
},
58
{
59
"name": "enygma/yubikey",
60
- "version": "3.9",
61
- "version_normalized": "3.9.0.0",
62
+ "version": "3.3",
63
+ "version_normalized": "3.3.0.0",
64
"source": {
65
"type": "git",
66
"url": "https://github.com/enygma/yubikey.git",
67
- "reference": "9eaa725ecc200fbb930f51c344adb4b272d87ae6"
68
+ "reference": "2c2502dd85ed3d13c08fbb8a3eef516fdef58ec6"
69
},
70
"dist": {
71
"type": "zip",
72
- "url": "https://api.github.com/repos/enygma/yubikey/zipball/9eaa725ecc200fbb930f51c344adb4b272d87ae6",
73
- "reference": "9eaa725ecc200fbb930f51c344adb4b272d87ae6",
74
+ "url": "https://api.github.com/repos/enygma/yubikey/zipball/2c2502dd85ed3d13c08fbb8a3eef516fdef58ec6",
75
+ "reference": "2c2502dd85ed3d13c08fbb8a3eef516fdef58ec6",
76
"shasum": ""
77
},
78
"require": {
79
- "php": ">=7.4"
80
+ "php": ">=5.3.1"
81
},
82
"require-dev": {
83
"codeclimate/php-test-reporter": "dev-master",
84
"phpunit/phpunit": "4.3.2"
85
},
86
- "time": "2024-12-02T17:08:18+00:00",
87
+ "time": "2018-03-08T20:38:39+00:00",
88
"type": "library",
89
"installation-source": "dist",
90
"autoload": {
91
92
,
93
"support": {
94
"issues": "https://github.com/enygma/yubikey/issues",
95
- "source": "https://github.com/enygma/yubikey/tree/3.9"
96
+ "source": "https://github.com/enygma/yubikey/tree/master"
97
},
98
"install-path": "../enygma/yubikey"
99
},
100
101
},
102
{
103
"name": "kolab/kolab_tags",
104
- "version": "3.5.3",
105
- "version_normalized": "3.5.3.0",
106
+ "version": "3.5.2",
107
+ "version_normalized": "3.5.2.0",
108
"dist": {
109
"type": "path",
110
"url": "/tmp/roundcubemail-1.6/roundcubemail-plugins-kolab-latest/plugins/kolab_tags",
111
- "reference": "177159cad2b1c822d9fbf509fd2c04c62d3f02b7"
112
+ "reference": "62ffa5279d9f351941be6b23b0d0478aeff91bfd"
113
},
114
"require": {
115
"kolab/libkolab": ">=3.4.0",
116
117
},
118
{
119
"name": "phpdocumentor/reflection-docblock",
120
- "version": "5.6.1",
121
- "version_normalized": "5.6.1.0",
122
+ "version": "5.3.0",
123
+ "version_normalized": "5.3.0.0",
124
"source": {
125
"type": "git",
126
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
127
- "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8"
128
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
129
},
130
"dist": {
131
"type": "zip",
132
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8",
133
- "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8",
134
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
135
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
136
"shasum": ""
137
},
138
"require": {
139
- "doctrine/deprecations": "^1.1",
140
"ext-filter": "*",
141
- "php": "^7.4 || ^8.0",
142
+ "php": "^7.2 || ^8.0",
143
"phpdocumentor/reflection-common": "^2.2",
144
- "phpdocumentor/type-resolver": "^1.7",
145
- "phpstan/phpdoc-parser": "^1.7|^2.0",
146
+ "phpdocumentor/type-resolver": "^1.3",
147
"webmozart/assert": "^1.9.1"
148
},
149
"require-dev": {
150
- "mockery/mockery": "~1.3.5 || ~1.6.0",
151
- "phpstan/extension-installer": "^1.1",
152
- "phpstan/phpstan": "^1.8",
153
- "phpstan/phpstan-mockery": "^1.1",
154
- "phpstan/phpstan-webmozart-assert": "^1.2",
155
- "phpunit/phpunit": "^9.5",
156
- "psalm/phar": "^5.26"
157
+ "mockery/mockery": "~1.3.2",
158
+ "psalm/phar": "^4.8"
159
},
160
- "time": "2024-12-07T09:39:29+00:00",
161
+ "time": "2021-10-19T17:43:47+00:00",
162
"type": "library",
163
"extra": {
164
"branch-alias": {
165
166
},
167
{
168
"name": "Jaap van Otterdijk",
169
- "email": "opensource@ijaap.nl"
170
+ "email": "account@ijaap.nl"
171
}
172
,
173
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
174
"support": {
175
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
176
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1"
177
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
178
},
179
"install-path": "../phpdocumentor/reflection-docblock"
180
},
181
{
182
"name": "phpdocumentor/type-resolver",
183
- "version": "1.10.0",
184
- "version_normalized": "1.10.0.0",
185
+ "version": "1.6.1",
186
+ "version_normalized": "1.6.1.0",
187
"source": {
188
"type": "git",
189
"url": "https://github.com/phpDocumentor/TypeResolver.git",
190
- "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a"
191
+ "reference": "77a32518733312af16a44300404e945338981de3"
192
},
193
"dist": {
194
"type": "zip",
195
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a",
196
- "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a",
197
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
198
+ "reference": "77a32518733312af16a44300404e945338981de3",
199
"shasum": ""
200
},
201
"require": {
202
- "doctrine/deprecations": "^1.0",
203
- "php": "^7.3 || ^8.0",
204
- "phpdocumentor/reflection-common": "^2.0",
205
- "phpstan/phpdoc-parser": "^1.18|^2.0"
206
+ "php": "^7.2 || ^8.0",
207
+ "phpdocumentor/reflection-common": "^2.0"
208
},
209
"require-dev": {
210
"ext-tokenizer": "*",
211
- "phpbench/phpbench": "^1.2",
212
- "phpstan/extension-installer": "^1.1",
213
- "phpstan/phpstan": "^1.8",
214
- "phpstan/phpstan-phpunit": "^1.1",
215
- "phpunit/phpunit": "^9.5",
216
- "rector/rector": "^0.13.9",
217
- "vimeo/psalm": "^4.25"
218
+ "psalm/phar": "^4.8"
219
},
220
- "time": "2024-11-09T15:12:26+00:00",
221
+ "time": "2022-03-15T21:29:03+00:00",
222
"type": "library",
223
"extra": {
224
"branch-alias": {
225
226
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
227
"support": {
228
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
229
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0"
230
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
231
},
232
"install-path": "../phpdocumentor/type-resolver"
233
},
234
235
"install-path": "../phpspec/prophecy"
236
},
237
{
238
- "name": "phpstan/phpdoc-parser",
239
- "version": "2.0.0",
240
- "version_normalized": "2.0.0.0",
241
- "source": {
242
- "type": "git",
243
- "url": "https://github.com/phpstan/phpdoc-parser.git",
244
- "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299"
245
- },
246
- "dist": {
247
- "type": "zip",
248
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299",
249
- "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299",
250
- "shasum": ""
251
- },
252
- "require": {
253
- "php": "^7.4 || ^8.0"
254
- },
255
- "require-dev": {
256
- "doctrine/annotations": "^2.0",
257
- "nikic/php-parser": "^5.3.0",
258
- "php-parallel-lint/php-parallel-lint": "^1.2",
259
- "phpstan/extension-installer": "^1.0",
260
- "phpstan/phpstan": "^2.0",
261
- "phpstan/phpstan-phpunit": "^2.0",
262
- "phpstan/phpstan-strict-rules": "^2.0",
263
- "phpunit/phpunit": "^9.6",
264
- "symfony/process": "^5.2"
265
- },
266
- "time": "2024-10-13T11:29:49+00:00",
267
- "type": "library",
268
- "installation-source": "dist",
269
- "autoload": {
270
- "psr-4": {
271
- "PHPStan\\PhpDocParser\\":
272
- "src/"
273
-
274
- }
275
- },
276
- "notification-url": "https://packagist.org/downloads/",
277
- "license":
278
- "MIT"
279
- ,
280
- "description": "PHPDoc parser with support for nullable, intersection and generic types",
281
- "support": {
282
- "issues": "https://github.com/phpstan/phpdoc-parser/issues",
283
- "source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.0"
284
- },
285
- "install-path": "../phpstan/phpdoc-parser"
286
- },
287
- {
288
"name": "phpstan/phpstan",
289
- "version": "1.12.16",
290
- "version_normalized": "1.12.16.0",
291
+ "version": "1.12.12",
292
+ "version_normalized": "1.12.12.0",
293
"source": {
294
"type": "git",
295
"url": "https://github.com/phpstan/phpstan.git",
296
- "reference": "e0bb5cb78545aae631220735aa706eac633a6be9"
297
+ "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0"
298
},
299
"dist": {
300
"type": "zip",
301
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e0bb5cb78545aae631220735aa706eac633a6be9",
302
- "reference": "e0bb5cb78545aae631220735aa706eac633a6be9",
303
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0",
304
+ "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0",
305
"shasum": ""
306
},
307
"require": {
308
309
"conflict": {
310
"phpstan/phpstan-shim": "*"
311
},
312
- "time": "2025-01-21T14:50:05+00:00",
313
+ "time": "2024-11-28T22:13:23+00:00",
314
"bin":
315
"phpstan",
316
"phpstan.phar"
317
318
"install-path": "../ralouphie/getallheaders"
319
},
320
{
321
- "name": "roundcube/larry",
322
- "version": "1.6.1",
323
- "version_normalized": "1.6.1.0",
324
- "source": {
325
- "type": "git",
326
- "url": "https://github.com/roundcube/larry.git",
327
- "reference": "6a7c98a5285812a2f226fce6230d1f762386fb68"
328
- },
329
- "dist": {
330
- "type": "zip",
331
- "url": "https://api.github.com/repos/roundcube/larry/zipball/6a7c98a5285812a2f226fce6230d1f762386fb68",
332
- "reference": "6a7c98a5285812a2f226fce6230d1f762386fb68",
333
- "shasum": ""
334
- },
335
- "require": {
336
- "roundcube/plugin-installer": ">=0.3.0"
337
- },
338
- "time": "2023-07-11T16:26:44+00:00",
339
- "type": "roundcube-skin",
340
- "installation-source": "dist",
341
- "notification-url": "https://packagist.org/downloads/",
342
- "license":
343
- "CC-BY-SA-3.0"
344
- ,
345
- "description": "The Larry theme for Roundcube Webmail",
346
- "support": {
347
- "issues": "https://github.com/roundcube/larry/issues",
348
- "source": "https://github.com/roundcube/larry/tree/1.6.1"
349
- },
350
- "install-path": "../../skins/larry"
351
- },
352
- {
353
"name": "roundcube/plugin-installer",
354
- "version": "dev-master",
355
- "version_normalized": "dev-master",
356
+ "version": "0.2.0",
357
+ "version_normalized": "0.2.0.0",
358
"source": {
359
"type": "git",
360
"url": "https://github.com/roundcube/plugin-installer.git",
361
- "reference": "c4db5c9da438a5802925c895c90cd46db7503437"
362
+ "reference": "10148d050ee2db019d83113a479fb7716fd04d48"
363
},
364
"dist": {
365
"type": "zip",
366
- "url": "https://api.github.com/repos/roundcube/plugin-installer/zipball/c4db5c9da438a5802925c895c90cd46db7503437",
367
- "reference": "c4db5c9da438a5802925c895c90cd46db7503437",
368
+ "url": "https://api.github.com/repos/roundcube/plugin-installer/zipball/10148d050ee2db019d83113a479fb7716fd04d48",
369
+ "reference": "10148d050ee2db019d83113a479fb7716fd04d48",
370
"shasum": ""
371
},
372
"require": {
373
- "composer-plugin-api": "^2.1",
374
- "php": ">=7.3 <8.5",
375
- "roundcube/roundcubemail": "*"
376
+ "php": ">=5.3.0"
377
},
378
"require-dev": {
379
- "composer/composer": "^2.1",
380
- "ergebnis/composer-normalize": "^2.13",
381
- "friendsofphp/php-cs-fixer": "^3.0",
382
- "phpstan/extension-installer": "^1.1",
383
- "phpstan/phpstan": "^1.2",
384
- "phpstan/phpstan-deprecation-rules": "^1.0",
385
- "phpstan/phpstan-strict-rules": "^1.3"
386
+ "composer/composer": "*"
387
},
388
- "time": "2025-01-22T12:23:56+00:00",
389
- "default-branch": true,
390
- "type": "composer-plugin",
391
+ "time": "2020-11-02T20:04:07+00:00",
392
+ "bin":
393
+ "src/bin/rcubeinitdb.sh"
394
+ ,
395
+ "type": "composer-installer",
396
"extra": {
397
- "class":
398
- "Roundcube\\Composer\\RoundcubeInstaller"
399
-
400
+ "class": "Roundcube\\Composer\\PluginInstaller"
401
},
402
"installation-source": "dist",
403
"autoload": {
404
- "psr-4": {
405
- "Roundcube\\Composer\\": "src/"
406
+ "psr-0": {
407
+ "Roundcube\\Composer": "src/"
408
}
409
},
410
"notification-url": "https://packagist.org/downloads/",
411
"license":
412
- "GPL-3.0-or-later"
413
+ "GPL-3.0+"
414
,
415
"authors":
416
{
417
418
{
419
"name": "Till Klampaeckel",
420
"email": "till@php.net"
421
- },
422
- {
423
- "name": "Philip Weir",
424
- "email": "roundcube@tehinterweb.co.uk"
425
}
426
,
427
- "description": "A composer-installer for Roundcube plugins and skins.",
428
+ "description": "A composer-installer for Roundcube plugins.",
429
"support": {
430
"issues": "https://github.com/roundcube/plugin-installer/issues",
431
- "source": "https://github.com/roundcube/plugin-installer/tree/0.3.10"
432
+ "source": "https://github.com/roundcube/plugin-installer/tree/0.2.0"
433
},
434
"install-path": "../roundcube/plugin-installer"
435
},
436
437
},
438
{
439
"name": "sabre/uri",
440
- "version": "2.3.4",
441
- "version_normalized": "2.3.4.0",
442
+ "version": "2.2.4",
443
+ "version_normalized": "2.2.4.0",
444
"source": {
445
"type": "git",
446
"url": "https://github.com/sabre-io/uri.git",
447
- "reference": "b76524c22de90d80ca73143680a8e77b1266c291"
448
+ "reference": "c0c9af9f7754e60a49ebd760e1708adc6d1510c0"
449
},
450
"dist": {
451
"type": "zip",
452
- "url": "https://api.github.com/repos/sabre-io/uri/zipball/b76524c22de90d80ca73143680a8e77b1266c291",
453
- "reference": "b76524c22de90d80ca73143680a8e77b1266c291",
454
+ "url": "https://api.github.com/repos/sabre-io/uri/zipball/c0c9af9f7754e60a49ebd760e1708adc6d1510c0",
455
+ "reference": "c0c9af9f7754e60a49ebd760e1708adc6d1510c0",
456
"shasum": ""
457
},
458
"require": {
459
- "php": "^7.4 || ^8.0"
460
+ "php": "^7.1 || ^8.0"
461
},
462
"require-dev": {
463
- "friendsofphp/php-cs-fixer": "^3.63",
464
- "phpstan/extension-installer": "^1.4",
465
- "phpstan/phpstan": "^1.12",
466
- "phpstan/phpstan-phpunit": "^1.4",
467
- "phpstan/phpstan-strict-rules": "^1.6",
468
- "phpunit/phpunit": "^9.6"
469
+ "friendsofphp/php-cs-fixer": "~2.19.3",
470
+ "phpstan/phpstan": "^0.12",
471
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
472
},
473
- "time": "2024-08-27T12:18:16+00:00",
474
+ "time": "2022-09-19T12:25:28+00:00",
475
"type": "library",
476
"installation-source": "dist",
477
"autoload": {
478
479
,
480
"dev": true,
481
"dev-package-names":
482
- "doctrine/deprecations",
483
"doctrine/instantiator",
484
"myclabs/deep-copy",
485
"phpcompatibility/php-compatibility",
486
487
"phpdocumentor/reflection-docblock",
488
"phpdocumentor/type-resolver",
489
"phpspec/prophecy",
490
- "phpstan/phpdoc-parser",
491
"phpstan/phpstan",
492
"phpunit/php-code-coverage",
493
"phpunit/php-file-iterator",
494
roundcubemail-1.6.tar.gz/vendor/composer/installed.php
Changed
150
1
2
'name' => 'roundcube/roundcubemail',
3
'pretty_version' => 'dev-dev/kolab-1.6',
4
'version' => 'dev-dev/kolab-1.6',
5
- 'reference' => 'de3d000b6f345535b933a84656db71488a19fff5',
6
+ 'reference' => '4da3c307d028858fc4524d51eda0d67b6910bc51',
7
'type' => 'library',
8
'install_path' => __DIR__ . '/../../',
9
'aliases' => array(),
10
11
),
12
'dev_requirement' => false,
13
),
14
- 'doctrine/deprecations' => array(
15
- 'pretty_version' => '1.1.4',
16
- 'version' => '1.1.4.0',
17
- 'reference' => '31610dbb31faa98e6b5447b62340826f54fbc4e9',
18
- 'type' => 'library',
19
- 'install_path' => __DIR__ . '/../doctrine/deprecations',
20
- 'aliases' => array(),
21
- 'dev_requirement' => true,
22
- ),
23
'doctrine/instantiator' => array(
24
'pretty_version' => '1.5.0',
25
'version' => '1.5.0.0',
26
27
'dev_requirement' => false,
28
),
29
'enygma/yubikey' => array(
30
- 'pretty_version' => '3.9',
31
- 'version' => '3.9.0.0',
32
- 'reference' => '9eaa725ecc200fbb930f51c344adb4b272d87ae6',
33
+ 'pretty_version' => '3.3',
34
+ 'version' => '3.3.0.0',
35
+ 'reference' => '2c2502dd85ed3d13c08fbb8a3eef516fdef58ec6',
36
'type' => 'library',
37
'install_path' => __DIR__ . '/../enygma/yubikey',
38
'aliases' => array(),
39
40
'dev_requirement' => false,
41
),
42
'kolab/kolab_tags' => array(
43
- 'pretty_version' => '3.5.3',
44
- 'version' => '3.5.3.0',
45
- 'reference' => '177159cad2b1c822d9fbf509fd2c04c62d3f02b7',
46
+ 'pretty_version' => '3.5.2',
47
+ 'version' => '3.5.2.0',
48
+ 'reference' => '62ffa5279d9f351941be6b23b0d0478aeff91bfd',
49
'type' => 'roundcube-plugin',
50
'install_path' => __DIR__ . '/../../plugins/kolab_tags',
51
'aliases' => array(),
52
53
'dev_requirement' => true,
54
),
55
'phpdocumentor/reflection-docblock' => array(
56
- 'pretty_version' => '5.6.1',
57
- 'version' => '5.6.1.0',
58
- 'reference' => 'e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8',
59
+ 'pretty_version' => '5.3.0',
60
+ 'version' => '5.3.0.0',
61
+ 'reference' => '622548b623e81ca6d78b721c5e029f4ce664f170',
62
'type' => 'library',
63
'install_path' => __DIR__ . '/../phpdocumentor/reflection-docblock',
64
'aliases' => array(),
65
'dev_requirement' => true,
66
),
67
'phpdocumentor/type-resolver' => array(
68
- 'pretty_version' => '1.10.0',
69
- 'version' => '1.10.0.0',
70
- 'reference' => '679e3ce485b99e84c775d28e2e96fade9a7fb50a',
71
+ 'pretty_version' => '1.6.1',
72
+ 'version' => '1.6.1.0',
73
+ 'reference' => '77a32518733312af16a44300404e945338981de3',
74
'type' => 'library',
75
'install_path' => __DIR__ . '/../phpdocumentor/type-resolver',
76
'aliases' => array(),
77
78
'aliases' => array(),
79
'dev_requirement' => true,
80
),
81
- 'phpstan/phpdoc-parser' => array(
82
- 'pretty_version' => '2.0.0',
83
- 'version' => '2.0.0.0',
84
- 'reference' => 'c00d78fb6b29658347f9d37ebe104bffadf36299',
85
- 'type' => 'library',
86
- 'install_path' => __DIR__ . '/../phpstan/phpdoc-parser',
87
- 'aliases' => array(),
88
- 'dev_requirement' => true,
89
- ),
90
'phpstan/phpstan' => array(
91
- 'pretty_version' => '1.12.16',
92
- 'version' => '1.12.16.0',
93
- 'reference' => 'e0bb5cb78545aae631220735aa706eac633a6be9',
94
+ 'pretty_version' => '1.12.12',
95
+ 'version' => '1.12.12.0',
96
+ 'reference' => 'b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0',
97
'type' => 'library',
98
'install_path' => __DIR__ . '/../phpstan/phpstan',
99
'aliases' => array(),
100
101
'aliases' => array(),
102
'dev_requirement' => false,
103
),
104
- 'roundcube/larry' => array(
105
- 'pretty_version' => '1.6.1',
106
- 'version' => '1.6.1.0',
107
- 'reference' => '6a7c98a5285812a2f226fce6230d1f762386fb68',
108
- 'type' => 'roundcube-skin',
109
- 'install_path' => __DIR__ . '/../../skins/larry',
110
- 'aliases' => array(),
111
- 'dev_requirement' => false,
112
- ),
113
'roundcube/plugin-installer' => array(
114
- 'pretty_version' => 'dev-master',
115
- 'version' => 'dev-master',
116
- 'reference' => 'c4db5c9da438a5802925c895c90cd46db7503437',
117
- 'type' => 'composer-plugin',
118
+ 'pretty_version' => '0.2.0',
119
+ 'version' => '0.2.0.0',
120
+ 'reference' => '10148d050ee2db019d83113a479fb7716fd04d48',
121
+ 'type' => 'composer-installer',
122
'install_path' => __DIR__ . '/../roundcube/plugin-installer',
123
- 'aliases' => array(
124
- 0 => '9999999-dev',
125
- ),
126
+ 'aliases' => array(),
127
'dev_requirement' => false,
128
),
129
'roundcube/roundcubemail' => array(
130
'pretty_version' => 'dev-dev/kolab-1.6',
131
'version' => 'dev-dev/kolab-1.6',
132
- 'reference' => 'de3d000b6f345535b933a84656db71488a19fff5',
133
+ 'reference' => '4da3c307d028858fc4524d51eda0d67b6910bc51',
134
'type' => 'library',
135
'install_path' => __DIR__ . '/../../',
136
'aliases' => array(),
137
138
'dev_requirement' => false,
139
),
140
'sabre/uri' => array(
141
- 'pretty_version' => '2.3.4',
142
- 'version' => '2.3.4.0',
143
- 'reference' => 'b76524c22de90d80ca73143680a8e77b1266c291',
144
+ 'pretty_version' => '2.2.4',
145
+ 'version' => '2.2.4.0',
146
+ 'reference' => 'c0c9af9f7754e60a49ebd760e1708adc6d1510c0',
147
'type' => 'library',
148
'install_path' => __DIR__ . '/../sabre/uri',
149
'aliases' => array(),
150
roundcubemail-1.6.tar.gz/vendor/composer/platform_check.php
Changed
12
1
2
3
$issues = array();
4
5
-if (!(PHP_VERSION_ID >= 70400)) {
6
- $issues = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
7
+if (!(PHP_VERSION_ID >= 70200)) {
8
+ $issues = 'Your Composer dependencies require a PHP version ">= 7.2.0". You are running ' . PHP_VERSION . '.';
9
}
10
11
if ($issues) {
12
roundcubemail-1.6.tar.gz/vendor/doctrine/deprecations
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/doctrine/deprecations/LICENSE
Deleted
21
1
2
-Copyright (c) 2020-2021 Doctrine Project
3
-
4
-Permission is hereby granted, free of charge, to any person obtaining a copy of
5
-this software and associated documentation files (the "Software"), to deal in
6
-the Software without restriction, including without limitation the rights to
7
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
8
-of the Software, and to permit persons to whom the Software is furnished to do
9
-so, subject to the following conditions:
10
-
11
-The above copyright notice and this permission notice shall be included in all
12
-copies or substantial portions of the Software.
13
-
14
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
-SOFTWARE.
21
roundcubemail-1.6.tar.gz/vendor/doctrine/deprecations/README.md
Deleted
220
1
2
-# Doctrine Deprecations
3
-
4
-A small (side-effect free by default) layer on top of
5
-`trigger_error(E_USER_DEPRECATED)` or PSR-3 logging.
6
-
7
-- no side-effects by default, making it a perfect fit for libraries that don't know how the error handler works they operate under
8
-- options to avoid having to rely on error handlers global state by using PSR-3 logging
9
-- deduplicate deprecation messages to avoid excessive triggering and reduce overhead
10
-
11
-We recommend to collect Deprecations using a PSR logger instead of relying on
12
-the global error handler.
13
-
14
-## Usage from consumer perspective:
15
-
16
-Enable Doctrine deprecations to be sent to a PSR3 logger:
17
-
18
-```php
19
-\Doctrine\Deprecations\Deprecation::enableWithPsrLogger($logger);
20
-```
21
-
22
-Enable Doctrine deprecations to be sent as `@trigger_error($message, E_USER_DEPRECATED)`
23
-messages by setting the `DOCTRINE_DEPRECATIONS` environment variable to `trigger`.
24
-Alternatively, call:
25
-
26
-```php
27
-\Doctrine\Deprecations\Deprecation::enableWithTriggerError();
28
-```
29
-
30
-If you only want to enable deprecation tracking, without logging or calling `trigger_error`
31
-then set the `DOCTRINE_DEPRECATIONS` environment variable to `track`.
32
-Alternatively, call:
33
-
34
-```php
35
-\Doctrine\Deprecations\Deprecation::enableTrackingDeprecations();
36
-```
37
-
38
-Tracking is enabled with all three modes and provides access to all triggered
39
-deprecations and their individual count:
40
-
41
-```php
42
-$deprecations = \Doctrine\Deprecations\Deprecation::getTriggeredDeprecations();
43
-
44
-foreach ($deprecations as $identifier => $count) {
45
- echo $identifier . " was triggered " . $count . " times\n";
46
-}
47
-```
48
-
49
-### Suppressing Specific Deprecations
50
-
51
-Disable triggering about specific deprecations:
52
-
53
-```php
54
-\Doctrine\Deprecations\Deprecation::ignoreDeprecations("https://link/to/deprecations-description-identifier");
55
-```
56
-
57
-Disable all deprecations from a package
58
-
59
-```php
60
-\Doctrine\Deprecations\Deprecation::ignorePackage("doctrine/orm");
61
-```
62
-
63
-### Other Operations
64
-
65
-When used within PHPUnit or other tools that could collect multiple instances of the same deprecations
66
-the deduplication can be disabled:
67
-
68
-```php
69
-\Doctrine\Deprecations\Deprecation::withoutDeduplication();
70
-```
71
-
72
-Disable deprecation tracking again:
73
-
74
-```php
75
-\Doctrine\Deprecations\Deprecation::disable();
76
-```
77
-
78
-## Usage from a library/producer perspective:
79
-
80
-When you want to unconditionally trigger a deprecation even when called
81
-from the library itself then the `trigger` method is the way to go:
82
-
83
-```php
84
-\Doctrine\Deprecations\Deprecation::trigger(
85
- "doctrine/orm",
86
- "https://link/to/deprecations-description",
87
- "message"
88
-);
89
-```
90
-
91
-If variable arguments are provided at the end, they are used with `sprintf` on
92
-the message.
93
-
94
-```php
95
-\Doctrine\Deprecations\Deprecation::trigger(
96
- "doctrine/orm",
97
- "https://github.com/doctrine/orm/issue/1234",
98
- "message %s %d",
99
- "foo",
100
- 1234
101
-);
102
-```
103
-
104
-When you want to trigger a deprecation only when it is called by a function
105
-outside of the current package, but not trigger when the package itself is the cause,
106
-then use:
107
-
108
-```php
109
-\Doctrine\Deprecations\Deprecation::triggerIfCalledFromOutside(
110
- "doctrine/orm",
111
- "https://link/to/deprecations-description",
112
- "message"
113
-);
114
-```
115
-
116
-Based on the issue link each deprecation message is only triggered once per
117
-request.
118
-
119
-A limited stacktrace is included in the deprecation message to find the
120
-offending location.
121
-
122
-Note: A producer/library should never call `Deprecation::enableWith` methods
123
-and leave the decision how to handle deprecations to application and
124
-frameworks.
125
-
126
-## Usage in PHPUnit tests
127
-
128
-There is a `VerifyDeprecations` trait that you can use to make assertions on
129
-the occurrence of deprecations within a test.
130
-
131
-```php
132
-use Doctrine\Deprecations\PHPUnit\VerifyDeprecations;
133
-
134
-class MyTest extends TestCase
135
-{
136
- use VerifyDeprecations;
137
-
138
- public function testSomethingDeprecation()
139
- {
140
- $this->expectDeprecationWithIdentifier('https://github.com/doctrine/orm/issue/1234');
141
-
142
- triggerTheCodeWithDeprecation();
143
- }
144
-
145
- public function testSomethingDeprecationFixed()
146
- {
147
- $this->expectNoDeprecationWithIdentifier('https://github.com/doctrine/orm/issue/1234');
148
-
149
- triggerTheCodeWithoutDeprecation();
150
- }
151
-}
152
-```
153
-
154
-## Displaying deprecations after running a PHPUnit test suite
155
-
156
-It is possible to integrate this library with PHPUnit to display all
157
-deprecations triggered during the test suite execution.
158
-
159
-```xml
160
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
161
- xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
162
- colors="true"
163
- bootstrap="vendor/autoload.php"
164
- displayDetailsOnTestsThatTriggerDeprecations="true"
165
- failOnDeprecation="true"
166
- >
167
- <!-- one attribute to display the deprecations, the other to fail the test suite -->
168
-
169
- <php>
170
- <!-- ensures native PHP deprecations are used -->
171
- <server name="DOCTRINE_DEPRECATIONS" value="trigger"/>
172
- </php>
173
-
174
- <!-- ensures the @ operator in @trigger_error is ignored -->
175
- <source ignoreSuppressionOfDeprecations="true">
176
- <include>
177
- <directory>src</directory>
178
- </include>
179
- </source>
180
-</phpunit>
181
-```
182
-
183
-Note that you can still trigger Deprecations in your code, provided you use the
184
-`#WithoutErrorHandler` attribute to disable PHPUnit's error handler for tests
185
-that call it. Be wary that this will disable all error handling, meaning it
186
-will mask any warnings or errors that would otherwise be caught by PHPUnit.
187
-
188
-At the moment, it is not possible to disable deduplication with an environment
189
-variable, but you can use a bootstrap file to achieve that:
190
-
191
-```php
192
-// tests/bootstrap.php
193
-<?php
194
-
195
-declare(strict_types=1);
196
-
197
-require dirname(__DIR__) . '/vendor/autoload.php';
198
-
199
-use Doctrine\Deprecations\Deprecation;
200
-
201
-Deprecation::withoutDeduplication();
202
-```
203
-
204
-Then, reference that file in your PHPUnit configuration:
205
-
206
-```xml
207
-<phpunit …
208
- bootstrap="tests/bootstrap.php"
209
- …
210
- >
211
- …
212
-</phpunit>
213
-```
214
-
215
-## What is a deprecation identifier?
216
-
217
-An identifier for deprecations is just a link to any resource, most often a
218
-Github Issue or Pull Request explaining the deprecation and potentially its
219
-alternative.
220
roundcubemail-1.6.tar.gz/vendor/doctrine/deprecations/composer.json
Deleted
38
1
2
-{
3
- "name": "doctrine/deprecations",
4
- "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
5
- "license": "MIT",
6
- "type": "library",
7
- "homepage": "https://www.doctrine-project.org/",
8
- "require": {
9
- "php": "^7.1 || ^8.0"
10
- },
11
- "require-dev": {
12
- "doctrine/coding-standard": "^9 || ^12",
13
- "phpstan/phpstan": "1.4.10 || 2.0.3",
14
- "phpstan/phpstan-phpunit": "^1.0 || ^2",
15
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
16
- "psr/log": "^1 || ^2 || ^3"
17
- },
18
- "suggest": {
19
- "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
20
- },
21
- "autoload": {
22
- "psr-4": {
23
- "Doctrine\\Deprecations\\": "src"
24
- }
25
- },
26
- "autoload-dev": {
27
- "psr-4": {
28
- "DeprecationTests\\": "test_fixtures/src",
29
- "Doctrine\\Foo\\": "test_fixtures/vendor/doctrine/foo"
30
- }
31
- },
32
- "config": {
33
- "allow-plugins": {
34
- "dealerdirect/phpcodesniffer-composer-installer": true
35
- }
36
- }
37
-}
38
roundcubemail-1.6.tar.gz/vendor/doctrine/deprecations/src
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/doctrine/deprecations/src/Deprecation.php
Deleted
311
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace Doctrine\Deprecations;
7
-
8
-use Psr\Log\LoggerInterface;
9
-
10
-use function array_key_exists;
11
-use function array_reduce;
12
-use function assert;
13
-use function debug_backtrace;
14
-use function sprintf;
15
-use function str_replace;
16
-use function strpos;
17
-use function strrpos;
18
-use function substr;
19
-use function trigger_error;
20
-
21
-use const DEBUG_BACKTRACE_IGNORE_ARGS;
22
-use const DIRECTORY_SEPARATOR;
23
-use const E_USER_DEPRECATED;
24
-
25
-/**
26
- * Manages Deprecation logging in different ways.
27
- *
28
- * By default triggered exceptions are not logged.
29
- *
30
- * To enable different deprecation logging mechanisms you can call the
31
- * following methods:
32
- *
33
- * - Minimal collection of deprecations via getTriggeredDeprecations()
34
- * \Doctrine\Deprecations\Deprecation::enableTrackingDeprecations();
35
- *
36
- * - Uses @trigger_error with E_USER_DEPRECATED
37
- * \Doctrine\Deprecations\Deprecation::enableWithTriggerError();
38
- *
39
- * - Sends deprecation messages via a PSR-3 logger
40
- * \Doctrine\Deprecations\Deprecation::enableWithPsrLogger($logger);
41
- *
42
- * Packages that trigger deprecations should use the `trigger()` or
43
- * `triggerIfCalledFromOutside()` methods.
44
- */
45
-class Deprecation
46
-{
47
- private const TYPE_NONE = 0;
48
- private const TYPE_TRACK_DEPRECATIONS = 1;
49
- private const TYPE_TRIGGER_ERROR = 2;
50
- private const TYPE_PSR_LOGGER = 4;
51
-
52
- /** @var int-mask-of<self::TYPE_*>|null */
53
- private static $type;
54
-
55
- /** @var LoggerInterface|null */
56
- private static $logger;
57
-
58
- /** @var array<string,bool> */
59
- private static $ignoredPackages = ;
60
-
61
- /** @var array<string,int> */
62
- private static $triggeredDeprecations = ;
63
-
64
- /** @var array<string,bool> */
65
- private static $ignoredLinks = ;
66
-
67
- /** @var bool */
68
- private static $deduplication = true;
69
-
70
- /**
71
- * Trigger a deprecation for the given package and identfier.
72
- *
73
- * The link should point to a Github issue or Wiki entry detailing the
74
- * deprecation. It is additionally used to de-duplicate the trigger of the
75
- * same deprecation during a request.
76
- *
77
- * @param float|int|string $args
78
- */
79
- public static function trigger(string $package, string $link, string $message, ...$args): void
80
- {
81
- $type = self::$type ?? self::getTypeFromEnv();
82
-
83
- if ($type === self::TYPE_NONE) {
84
- return;
85
- }
86
-
87
- if (isset(self::$ignoredLinks$link)) {
88
- return;
89
- }
90
-
91
- if (array_key_exists($link, self::$triggeredDeprecations)) {
92
- self::$triggeredDeprecations$link++;
93
- } else {
94
- self::$triggeredDeprecations$link = 1;
95
- }
96
-
97
- if (self::$deduplication === true && self::$triggeredDeprecations$link > 1) {
98
- return;
99
- }
100
-
101
- if (isset(self::$ignoredPackages$package)) {
102
- return;
103
- }
104
-
105
- $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
106
-
107
- $message = sprintf($message, ...$args);
108
-
109
- self::delegateTriggerToBackend($message, $backtrace, $link, $package);
110
- }
111
-
112
- /**
113
- * Trigger a deprecation for the given package and identifier when called from outside.
114
- *
115
- * "Outside" means we assume that $package is currently installed as a
116
- * dependency and the caller is not a file in that package. When $package
117
- * is installed as a root package then deprecations triggered from the
118
- * tests folder are also considered "outside".
119
- *
120
- * This deprecation method assumes that you are using Composer to install
121
- * the dependency and are using the default /vendor/ folder and not a
122
- * Composer plugin to change the install location. The assumption is also
123
- * that $package is the exact composer packge name.
124
- *
125
- * Compared to {@link trigger()} this method causes some overhead when
126
- * deprecation tracking is enabled even during deduplication, because it
127
- * needs to call {@link debug_backtrace()}
128
- *
129
- * @param float|int|string $args
130
- */
131
- public static function triggerIfCalledFromOutside(string $package, string $link, string $message, ...$args): void
132
- {
133
- $type = self::$type ?? self::getTypeFromEnv();
134
-
135
- if ($type === self::TYPE_NONE) {
136
- return;
137
- }
138
-
139
- $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
140
-
141
- // first check that the caller is not from a tests folder, in which case we always let deprecations pass
142
- if (isset($backtrace1'file', $backtrace0'file') && strpos($backtrace1'file', DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR) === false) {
143
- $path = DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . str_replace('/', DIRECTORY_SEPARATOR, $package) . DIRECTORY_SEPARATOR;
144
-
145
- if (strpos($backtrace0'file', $path) === false) {
146
- return;
147
- }
148
-
149
- if (strpos($backtrace1'file', $path) !== false) {
150
- return;
151
- }
152
- }
153
-
154
- if (isset(self::$ignoredLinks$link)) {
155
- return;
156
- }
157
-
158
- if (array_key_exists($link, self::$triggeredDeprecations)) {
159
- self::$triggeredDeprecations$link++;
160
- } else {
161
- self::$triggeredDeprecations$link = 1;
162
- }
163
-
164
- if (self::$deduplication === true && self::$triggeredDeprecations$link > 1) {
165
- return;
166
- }
167
-
168
- if (isset(self::$ignoredPackages$package)) {
169
- return;
170
- }
171
-
172
- $message = sprintf($message, ...$args);
173
-
174
- self::delegateTriggerToBackend($message, $backtrace, $link, $package);
175
- }
176
-
177
- /** @param list<array{function: string, line?: int, file?: string, class?: class-string, type?: string, args?: mixed, object?: object}> $backtrace */
178
- private static function delegateTriggerToBackend(string $message, array $backtrace, string $link, string $package): void
179
- {
180
- $type = self::$type ?? self::getTypeFromEnv();
181
-
182
- if (($type & self::TYPE_PSR_LOGGER) > 0) {
183
- $context =
184
- 'file' => $backtrace0'file' ?? null,
185
- 'line' => $backtrace0'line' ?? null,
186
- 'package' => $package,
187
- 'link' => $link,
188
- ;
189
-
190
- assert(self::$logger !== null);
191
-
192
- self::$logger->notice($message, $context);
193
- }
194
-
195
- if (! (($type & self::TYPE_TRIGGER_ERROR) > 0)) {
196
- return;
197
- }
198
-
199
- $message .= sprintf(
200
- ' (%s:%d called by %s:%d, %s, package %s)',
201
- self::basename($backtrace0'file' ?? 'native code'),
202
- $backtrace0'line' ?? 0,
203
- self::basename($backtrace1'file' ?? 'native code'),
204
- $backtrace1'line' ?? 0,
205
- $link,
206
- $package
207
- );
208
-
209
- @trigger_error($message, E_USER_DEPRECATED);
210
- }
211
-
212
- /**
213
- * A non-local-aware version of PHPs basename function.
214
- */
215
- private static function basename(string $filename): string
216
- {
217
- $pos = strrpos($filename, DIRECTORY_SEPARATOR);
218
-
219
- if ($pos === false) {
220
- return $filename;
221
- }
222
-
223
- return substr($filename, $pos + 1);
224
- }
225
-
226
- public static function enableTrackingDeprecations(): void
227
- {
228
- self::$type = self::$type ?? self::getTypeFromEnv();
229
- self::$type |= self::TYPE_TRACK_DEPRECATIONS;
230
- }
231
-
232
- public static function enableWithTriggerError(): void
233
- {
234
- self::$type = self::$type ?? self::getTypeFromEnv();
235
- self::$type |= self::TYPE_TRIGGER_ERROR;
236
- }
237
-
238
- public static function enableWithPsrLogger(LoggerInterface $logger): void
239
- {
240
- self::$type = self::$type ?? self::getTypeFromEnv();
241
- self::$type |= self::TYPE_PSR_LOGGER;
242
- self::$logger = $logger;
243
- }
244
-
245
- public static function withoutDeduplication(): void
246
- {
247
- self::$deduplication = false;
248
- }
249
-
250
- public static function disable(): void
251
- {
252
- self::$type = self::TYPE_NONE;
253
- self::$logger = null;
254
- self::$deduplication = true;
255
- self::$ignoredLinks = ;
256
-
257
- foreach (self::$triggeredDeprecations as $link => $count) {
258
- self::$triggeredDeprecations$link = 0;
259
- }
260
- }
261
-
262
- public static function ignorePackage(string $packageName): void
263
- {
264
- self::$ignoredPackages$packageName = true;
265
- }
266
-
267
- public static function ignoreDeprecations(string ...$links): void
268
- {
269
- foreach ($links as $link) {
270
- self::$ignoredLinks$link = true;
271
- }
272
- }
273
-
274
- public static function getUniqueTriggeredDeprecationsCount(): int
275
- {
276
- return array_reduce(self::$triggeredDeprecations, static function (int $carry, int $count) {
277
- return $carry + $count;
278
- }, 0);
279
- }
280
-
281
- /**
282
- * Returns each triggered deprecation link identifier and the amount of occurrences.
283
- *
284
- * @return array<string,int>
285
- */
286
- public static function getTriggeredDeprecations(): array
287
- {
288
- return self::$triggeredDeprecations;
289
- }
290
-
291
- /** @return int-mask-of<self::TYPE_*> */
292
- private static function getTypeFromEnv(): int
293
- {
294
- switch ($_SERVER'DOCTRINE_DEPRECATIONS' ?? $_ENV'DOCTRINE_DEPRECATIONS' ?? null) {
295
- case 'trigger':
296
- self::$type = self::TYPE_TRIGGER_ERROR;
297
- break;
298
-
299
- case 'track':
300
- self::$type = self::TYPE_TRACK_DEPRECATIONS;
301
- break;
302
-
303
- default:
304
- self::$type = self::TYPE_NONE;
305
- break;
306
- }
307
-
308
- return self::$type;
309
- }
310
-}
311
roundcubemail-1.6.tar.gz/vendor/doctrine/deprecations/src/PHPUnit
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/doctrine/deprecations/src/PHPUnit/VerifyDeprecations.php
Deleted
64
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace Doctrine\Deprecations\PHPUnit;
7
-
8
-use Doctrine\Deprecations\Deprecation;
9
-
10
-use function sprintf;
11
-
12
-trait VerifyDeprecations
13
-{
14
- /** @var array<string,int> */
15
- private $doctrineDeprecationsExpectations = ;
16
-
17
- /** @var array<string,int> */
18
- private $doctrineNoDeprecationsExpectations = ;
19
-
20
- public function expectDeprecationWithIdentifier(string $identifier): void
21
- {
22
- $this->doctrineDeprecationsExpectations$identifier = Deprecation::getTriggeredDeprecations()$identifier ?? 0;
23
- }
24
-
25
- public function expectNoDeprecationWithIdentifier(string $identifier): void
26
- {
27
- $this->doctrineNoDeprecationsExpectations$identifier = Deprecation::getTriggeredDeprecations()$identifier ?? 0;
28
- }
29
-
30
- /** @before */
31
- public function enableDeprecationTracking(): void
32
- {
33
- Deprecation::enableTrackingDeprecations();
34
- }
35
-
36
- /** @after */
37
- public function verifyDeprecationsAreTriggered(): void
38
- {
39
- foreach ($this->doctrineDeprecationsExpectations as $identifier => $expectation) {
40
- $actualCount = Deprecation::getTriggeredDeprecations()$identifier ?? 0;
41
-
42
- $this->assertTrue(
43
- $actualCount > $expectation,
44
- sprintf(
45
- "Expected deprecation with identifier '%s' was not triggered by code executed in test.",
46
- $identifier
47
- )
48
- );
49
- }
50
-
51
- foreach ($this->doctrineNoDeprecationsExpectations as $identifier => $expectation) {
52
- $actualCount = Deprecation::getTriggeredDeprecations()$identifier ?? 0;
53
-
54
- $this->assertTrue(
55
- $actualCount === $expectation,
56
- sprintf(
57
- "Expected deprecation with identifier '%s' was triggered by code executed in test, but expected not to.",
58
- $identifier
59
- )
60
- );
61
- }
62
- }
63
-}
64
roundcubemail-1.6.tar.gz/vendor/enygma/yubikey/.travis.yml
Changed
7
1
2
language: php
3
php:
4
- 5.6
5
- - 7.1
6
script: phpunit --configuration tests/phpunit.xml tests/
7
roundcubemail-1.6.tar.gz/vendor/enygma/yubikey/composer.json
Changed
10
1
2
}
3
,
4
"require":{
5
- "php":">=7.4"
6
+ "php":">=5.3.1"
7
},
8
"require-dev": {
9
"phpunit/phpunit": "4.3.2",
10
roundcubemail-1.6.tar.gz/vendor/enygma/yubikey/src/Yubikey/RequestCollection.php
Changed
85
1
2
*
3
* @return integer Count of current Requests
4
*/
5
- #\ReturnTypeWillChange
6
public function count()
7
{
8
return count($this->requests);
9
10
*
11
* @return Current Request object
12
*/
13
- #\ReturnTypeWillChange
14
public function current()
15
{
16
return $this->requests$this->position;
17
18
*
19
* @return integer Current position in set
20
*/
21
- #\ReturnTypeWillChange
22
public function key()
23
{
24
return $this->position;
25
26
*
27
* @return integer Next positiion in set
28
*/
29
- #\ReturnTypeWillChange
30
public function next()
31
{
32
return ++$this->position;
33
34
/**
35
* For Iterator, rewind set location to beginning
36
*/
37
- #\ReturnTypeWillChange
38
public function rewind()
39
{
40
$this->position = 0;
41
42
*
43
* @return boolean Valid/invalid result
44
*/
45
- #\ReturnTypeWillChange
46
public function valid()
47
{
48
return isset($this->requests$this->position);
49
50
* @param mixed $offset Offset identifier
51
* @return boolean Found/not found result
52
*/
53
- #\ReturnTypeWillChange
54
public function offsetExists($offset)
55
{
56
return (isset($this->requests$offset));
57
58
* @param mixed $offset Offset to locate
59
* @return \Yubikey\Request object if found
60
*/
61
- #\ReturnTypeWillChange
62
public function offsetGet($offset)
63
{
64
return $this->requests$offset;
65
66
* @param mixed $offset Offset to use in data set
67
* @param mixed $data Data to assign
68
*/
69
- #\ReturnTypeWillChange
70
public function offsetSet($offset, $data)
71
{
72
$this->requests$offset = $data;
73
74
*
75
* @param mixed $offset Offset to remove
76
*/
77
- #\ReturnTypeWillChange
78
public function offsetUnset($offset)
79
{
80
unset($this->requests$offset);
81
}
82
-}
83
+}
84
\ No newline at end of file
85
roundcubemail-1.6.tar.gz/vendor/enygma/yubikey/src/Yubikey/ResponseCollection.php
Changed
81
1
2
*
3
* @return integer Count of current Requests
4
*/
5
- #\ReturnTypeWillChange
6
public function count()
7
{
8
return count($this->responses);
9
10
*
11
* @return Current Request object
12
*/
13
- #\ReturnTypeWillChange
14
public function current()
15
{
16
return $this->responses$this->position;
17
18
*
19
* @return integer Current position in set
20
*/
21
- #\ReturnTypeWillChange
22
public function key()
23
{
24
return $this->position;
25
26
*
27
* @return integer Next positiion in set
28
*/
29
- #\ReturnTypeWillChange
30
public function next()
31
{
32
return ++$this->position;
33
34
/**
35
* For Iterator, rewind set location to beginning
36
*/
37
- #\ReturnTypeWillChange
38
public function rewind()
39
{
40
$this->position = 0;
41
42
*
43
* @return boolean Valid/invalid result
44
*/
45
- #\ReturnTypeWillChange
46
public function valid()
47
{
48
return isset($this->responses$this->position);
49
50
* @param mixed $offset Offset identifier
51
* @return boolean Found/not found result
52
*/
53
- #\ReturnTypeWillChange
54
public function offsetExists($offset)
55
{
56
return (isset($this->responses$offset));
57
58
* @param mixed $offset Offset to locate
59
* @return \Yubikey\Request object if found
60
*/
61
- #\ReturnTypeWillChange
62
public function offsetGet($offset)
63
{
64
return $this->responses$offset;
65
66
* @param mixed $offset Offset to use in data set
67
* @param mixed $data Data to assign
68
*/
69
- #\ReturnTypeWillChange
70
public function offsetSet($offset, $data)
71
{
72
$this->responses$offset = $data;
73
74
*
75
* @param mixed $offset Offset to remove
76
*/
77
- #\ReturnTypeWillChange
78
public function offsetUnset($offset)
79
{
80
unset($this->responses$offset);
81
roundcubemail-1.6.tar.gz/vendor/enygma/yubikey/src/Yubikey/Validate.php
Changed
24
1
2
*/
3
private $yubikeyid = null;
4
5
-
6
- /**
7
- * Client ID for API
8
- * @var int|null
9
- */
10
- private $clientId = null;
11
-
12
/**
13
* Init the object and set the API key, Client ID and optionally hosts
14
*
15
16
}
17
18
$query = http_build_query($data);
19
- $query = mb_convert_encoding(str_replace('%3A', ':', $query), 'UTF-8', 'ISO-8859-1');
20
+ $query = utf8_encode(str_replace('%3A', ':', $query));
21
22
$hash = preg_replace(
23
'/\+/', '%2B',
24
roundcubemail-1.6.tar.gz/vendor/kolab/net_ldap3/.git/index
Changed
roundcubemail-1.6.tar.gz/vendor/kolab/net_ldap3/.git/logs/HEAD
Changed
8
1
2
-0000000000000000000000000000000000000000 39a754269fe6e5d94b0fe87215e89232876bda01 default <default@a82dd0724835.(none)> 1737550069 +0000 clone: from /home/default/.cache/composer/vcs/https---git.kolab.org-diffusion-PNL-php-net-ldap.git/
3
-39a754269fe6e5d94b0fe87215e89232876bda01 39a754269fe6e5d94b0fe87215e89232876bda01 default <default@a82dd0724835.(none)> 1737550069 +0000 checkout: moving from master to master
4
-39a754269fe6e5d94b0fe87215e89232876bda01 39a754269fe6e5d94b0fe87215e89232876bda01 default <default@a82dd0724835.(none)> 1737550069 +0000 reset: moving to 39a754269fe6e5d94b0fe87215e89232876bda01
5
+0000000000000000000000000000000000000000 39a754269fe6e5d94b0fe87215e89232876bda01 default <default@87d988cab160.(none)> 1734429147 +0000 clone: from /home/default/.cache/composer/vcs/https---git.kolab.org-diffusion-PNL-php-net-ldap.git/
6
+39a754269fe6e5d94b0fe87215e89232876bda01 39a754269fe6e5d94b0fe87215e89232876bda01 default <default@87d988cab160.(none)> 1734429147 +0000 checkout: moving from master to master
7
+39a754269fe6e5d94b0fe87215e89232876bda01 39a754269fe6e5d94b0fe87215e89232876bda01 default <default@87d988cab160.(none)> 1734429147 +0000 reset: moving to 39a754269fe6e5d94b0fe87215e89232876bda01
8
roundcubemail-1.6.tar.gz/vendor/kolab/net_ldap3/.git/logs/refs/heads/master
Changed
4
1
2
-0000000000000000000000000000000000000000 39a754269fe6e5d94b0fe87215e89232876bda01 default <default@a82dd0724835.(none)> 1737550069 +0000 clone: from /home/default/.cache/composer/vcs/https---git.kolab.org-diffusion-PNL-php-net-ldap.git/
3
+0000000000000000000000000000000000000000 39a754269fe6e5d94b0fe87215e89232876bda01 default <default@87d988cab160.(none)> 1734429147 +0000 clone: from /home/default/.cache/composer/vcs/https---git.kolab.org-diffusion-PNL-php-net-ldap.git/
4
roundcubemail-1.6.tar.gz/vendor/kolab/net_ldap3/.git/logs/refs/remotes/origin/HEAD
Changed
4
1
2
-0000000000000000000000000000000000000000 39a754269fe6e5d94b0fe87215e89232876bda01 default <default@a82dd0724835.(none)> 1737550069 +0000 clone: from /home/default/.cache/composer/vcs/https---git.kolab.org-diffusion-PNL-php-net-ldap.git/
3
+0000000000000000000000000000000000000000 39a754269fe6e5d94b0fe87215e89232876bda01 default <default@87d988cab160.(none)> 1734429147 +0000 clone: from /home/default/.cache/composer/vcs/https---git.kolab.org-diffusion-PNL-php-net-ldap.git/
4
roundcubemail-1.6.tar.gz/vendor/kolab/net_ldap3/.git/objects/info/packs
Changed
5
1
2
-P pack-d4bd21dce20ede4dc9da8efe3a7ed69e0e23e2a6.pack
3
+P pack-351c26872c454922c1f91b97e599f4369aa802b9.pack
4
5
roundcubemail-1.6.tar.gz/vendor/kolab/net_ldap3/.git/objects/pack/pack-351c26872c454922c1f91b97e599f4369aa802b9.idx
Added
roundcubemail-1.6.tar.gz/vendor/kolab/net_ldap3/.git/objects/pack/pack-351c26872c454922c1f91b97e599f4369aa802b9.pack
Added
roundcubemail-1.6.tar.gz/vendor/kolab/net_ldap3/.git/objects/pack/pack-351c26872c454922c1f91b97e599f4369aa802b9.rev
Added
roundcubemail-1.6.tar.gz/vendor/kolab/net_ldap3/.git/objects/pack/pack-d4bd21dce20ede4dc9da8efe3a7ed69e0e23e2a6.idx
Deleted
roundcubemail-1.6.tar.gz/vendor/kolab/net_ldap3/.git/objects/pack/pack-d4bd21dce20ede4dc9da8efe3a7ed69e0e23e2a6.pack
Deleted
roundcubemail-1.6.tar.gz/vendor/kolab/net_ldap3/.git/objects/pack/pack-d4bd21dce20ede4dc9da8efe3a7ed69e0e23e2a6.rev
Deleted
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/README.md
Changed
8
1
2
!License: MIT(https://img.shields.io/badge/License-MIT-yellow.svg)(https://opensource.org/licenses/MIT)
3
!Qa workflow(https://github.com/phpDocumentor/ReflectionDocBlock/workflows/Qa%20workflow/badge.svg)
4
+!Coveralls Coverage(https://img.shields.io/coveralls/github/phpDocumentor/ReflectionDocBlock.svg)(https://coveralls.io/github/phpDocumentor/ReflectionDocBlock?branch=master)
5
!Scrutinizer Code Coverage(https://img.shields.io/scrutinizer/coverage/g/phpDocumentor/ReflectionDocBlock.svg)(https://scrutinizer-ci.com/g/phpDocumentor/ReflectionDocBlock/?branch=master)
6
!Scrutinizer Code Quality(https://img.shields.io/scrutinizer/g/phpDocumentor/ReflectionDocBlock.svg)(https://scrutinizer-ci.com/g/phpDocumentor/ReflectionDocBlock/?branch=master)
7
!Stable Version(https://img.shields.io/packagist/v/phpdocumentor/reflection-docblock.svg)(https://packagist.org/packages/phpdocumentor/reflection-docblock)
8
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/composer.json
Changed
49
1
2
},
3
{
4
"name": "Jaap van Otterdijk",
5
- "email": "opensource@ijaap.nl"
6
+ "email": "account@ijaap.nl"
7
}
8
,
9
"require": {
10
- "php": "^7.4 || ^8.0",
11
- "phpdocumentor/type-resolver": "^1.7",
12
+ "php": "^7.2 || ^8.0",
13
+ "phpdocumentor/type-resolver": "^1.3",
14
"webmozart/assert": "^1.9.1",
15
"phpdocumentor/reflection-common": "^2.2",
16
- "ext-filter": "*",
17
- "phpstan/phpdoc-parser": "^1.7|^2.0",
18
- "doctrine/deprecations": "^1.1"
19
+ "ext-filter": "*"
20
},
21
"require-dev": {
22
- "mockery/mockery": "~1.3.5 || ~1.6.0",
23
- "phpunit/phpunit": "^9.5",
24
- "phpstan/phpstan": "^1.8",
25
- "phpstan/phpstan-mockery": "^1.1",
26
- "phpstan/extension-installer": "^1.1",
27
- "phpstan/phpstan-webmozart-assert": "^1.2",
28
- "psalm/phar": "^5.26"
29
+ "mockery/mockery": "~1.3.2",
30
+ "psalm/phar": "^4.8"
31
},
32
"autoload": {
33
"psr-4": {
34
35
"phpDocumentor\\Reflection\\": "tests/unit", "tests/integration"
36
}
37
},
38
- "config": {
39
- "platform": {
40
- "php":"7.4.0"
41
- },
42
- "allow-plugins": {
43
- "phpstan/extension-installer": true
44
- }
45
- },
46
"extra": {
47
"branch-alias": {
48
"dev-master": "5.x-dev"
49
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php
Changed
34
1
2
final class DocBlock
3
{
4
/** @var string The opening line for this docblock. */
5
- private string $summary;
6
+ private $summary;
7
8
/** @var DocBlock\Description The actual description for this docblock. */
9
- private DocBlock\Description $description;
10
+ private $description;
11
12
/** @var Tag An array containing all the tags in this docblock; except inline. */
13
- private array $tags = ;
14
+ private $tags = ;
15
16
/** @var Types\Context|null Information about the context of this DocBlock. */
17
- private ?Types\Context $context = null;
18
+ private $context;
19
20
/** @var Location|null Information about the location of this DocBlock. */
21
- private ?Location $location = null;
22
+ private $location;
23
24
/** @var bool Is this DocBlock (the start of) a template? */
25
- private bool $isTemplateStart;
26
+ private $isTemplateStart;
27
28
/** @var bool Does this DocBlock signify the end of a DocBlock template? */
29
- private bool $isTemplateEnd;
30
+ private $isTemplateEnd;
31
32
/**
33
* @param DocBlock\Tag $tags
34
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php
Changed
31
1
2
* is mainly responsible for rendering.
3
*
4
* @see DescriptionFactory to create a new Description.
5
- * @see Tags\Formatter for the formatting of the body and tags.
6
+ * @see Description\Formatter for the formatting of the body and tags.
7
*/
8
class Description
9
{
10
- private string $bodyTemplate;
11
+ /** @var string */
12
+ private $bodyTemplate;
13
14
/** @var Tag */
15
- private array $tags;
16
+ private $tags;
17
18
/**
19
* Initializes a Description with its body (template) and a listing of the tags used in the body template.
20
21
*/
22
public function render(?Formatter $formatter = null): string
23
{
24
- if ($this->tags === ) {
25
- return vsprintf($this->bodyTemplate, );
26
- }
27
-
28
if ($formatter === null) {
29
$formatter = new PassthroughFormatter();
30
}
31
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php
Changed
25
1
2
3
namespace phpDocumentor\Reflection\DocBlock;
4
5
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\Factory;
6
use phpDocumentor\Reflection\Types\Context as TypeContext;
7
use phpDocumentor\Reflection\Utils;
8
9
10
*/
11
class DescriptionFactory
12
{
13
- private Factory $tagFactory;
14
+ /** @var TagFactory */
15
+ private $tagFactory;
16
17
/**
18
* Initializes this factory with the means to construct (inline) tags.
19
*/
20
- public function __construct(Factory $tagFactory)
21
+ public function __construct(TagFactory $tagFactory)
22
{
23
$this->tagFactory = $tagFactory;
24
}
25
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php
Changed
42
1
2
*/
3
class ExampleFinder
4
{
5
- private string $sourceDirectory = '';
6
+ /** @var string */
7
+ private $sourceDirectory = '';
8
9
/** @var string */
10
- private array $exampleDirectories = ;
11
+ private $exampleDirectories = ;
12
13
/**
14
* Attempts to find the example contents for the given descriptor.
15
16
$filename = $example->getFilePath();
17
18
$file = $this->getExampleFileContents($filename);
19
- if ($file === null) {
20
+ if (!$file) {
21
return sprintf('** File not found : %s **', $filename);
22
}
23
24
25
}
26
}
27
28
- if ($normalizedPath === null) {
29
+ if (!$normalizedPath) {
30
if (is_readable($this->getExamplePathFromSource($filename))) {
31
$normalizedPath = $this->getExamplePathFromSource($filename);
32
} elseif (is_readable($this->getExamplePathFromExampleDirectory($filename))) {
33
34
}
35
}
36
37
- $lines = $normalizedPath !== null && is_readable($normalizedPath) ? file($normalizedPath) : false;
38
+ $lines = $normalizedPath && is_readable($normalizedPath) ? file($normalizedPath) : false;
39
40
return $lines !== false ? $lines : null;
41
}
42
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php
Changed
38
1
2
class Serializer
3
{
4
/** @var string The string to indent the comment with. */
5
- protected string $indentString = ' ';
6
+ protected $indentString = ' ';
7
8
/** @var int The number of times the indent string is repeated. */
9
- protected int $indent = 0;
10
+ protected $indent = 0;
11
12
/** @var bool Whether to indent the first line with the given indent amount and string. */
13
- protected bool $isFirstLineIndented = true;
14
+ protected $isFirstLineIndented = true;
15
16
/** @var int|null The max length of a line. */
17
- protected ?int $lineLength = null;
18
+ protected $lineLength;
19
20
/** @var Formatter A custom tag formatter. */
21
- protected Formatter $tagFormatter;
22
- private string $lineEnding;
23
+ protected $tagFormatter;
24
+ /** @var string */
25
+ private $lineEnding;
26
27
/**
28
* Create a Serializer instance.
29
30
$indent = str_repeat($this->indentString, $this->indent);
31
$firstIndent = $this->isFirstLineIndented ? $indent : '';
32
// 3 === strlen(' * ')
33
- $wrapLength = $this->lineLength !== null ? $this->lineLength - strlen($indent) - 3 : null;
34
+ $wrapLength = $this->lineLength ? $this->lineLength - strlen($indent) - 3 : null;
35
36
$text = $this->removeTrailingSpaces(
37
$indent,
38
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php
Changed
236
1
2
use phpDocumentor\Reflection\DocBlock\Tags\Author;
3
use phpDocumentor\Reflection\DocBlock\Tags\Covers;
4
use phpDocumentor\Reflection\DocBlock\Tags\Deprecated;
5
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\Factory;
6
use phpDocumentor\Reflection\DocBlock\Tags\Generic;
7
use phpDocumentor\Reflection\DocBlock\Tags\InvalidTag;
8
use phpDocumentor\Reflection\DocBlock\Tags\Link as LinkTag;
9
use phpDocumentor\Reflection\DocBlock\Tags\Method;
10
-use phpDocumentor\Reflection\DocBlock\Tags\Mixin;
11
use phpDocumentor\Reflection\DocBlock\Tags\Param;
12
use phpDocumentor\Reflection\DocBlock\Tags\Property;
13
use phpDocumentor\Reflection\DocBlock\Tags\PropertyRead;
14
15
use phpDocumentor\Reflection\DocBlock\Tags\See as SeeTag;
16
use phpDocumentor\Reflection\DocBlock\Tags\Since;
17
use phpDocumentor\Reflection\DocBlock\Tags\Source;
18
-use phpDocumentor\Reflection\DocBlock\Tags\TemplateCovariant;
19
use phpDocumentor\Reflection\DocBlock\Tags\Throws;
20
use phpDocumentor\Reflection\DocBlock\Tags\Uses;
21
use phpDocumentor\Reflection\DocBlock\Tags\Var_;
22
23
use ReflectionParameter;
24
use Webmozart\Assert\Assert;
25
26
-use function array_key_exists;
27
use function array_merge;
28
use function array_slice;
29
use function call_user_func_array;
30
+use function count;
31
use function get_class;
32
-use function is_object;
33
use function preg_match;
34
-use function sprintf;
35
use function strpos;
36
use function trim;
37
38
39
public const REGEX_TAGNAME = '\w\-\_\\\\:+';
40
41
/**
42
- * @var array<class-string<Tag>|Factory> An array with a tag as a key, and an
43
+ * @var array<class-string<Tag>> An array with a tag as a key, and an
44
* FQCN to a class that handles it as an array value.
45
*/
46
- private array $tagHandlerMappings =
47
- 'author' => Author::class,
48
- 'covers' => Covers::class,
49
- 'deprecated' => Deprecated::class,
50
- // 'example' => '\phpDocumentor\Reflection\DocBlock\Tags\Example',
51
- 'link' => LinkTag::class,
52
- 'mixin' => Mixin::class,
53
- 'method' => Method::class,
54
- 'param' => Param::class,
55
- 'property-read' => PropertyRead::class,
56
- 'property' => Property::class,
57
- 'property-write' => PropertyWrite::class,
58
- 'return' => Return_::class,
59
- 'see' => SeeTag::class,
60
- 'since' => Since::class,
61
- 'source' => Source::class,
62
- 'template-covariant' => TemplateCovariant::class,
63
- 'throw' => Throws::class,
64
- 'throws' => Throws::class,
65
- 'uses' => Uses::class,
66
- 'var' => Var_::class,
67
- 'version' => Version::class,
68
+ private $tagHandlerMappings =
69
+ 'author' => Author::class,
70
+ 'covers' => Covers::class,
71
+ 'deprecated' => Deprecated::class,
72
+ // 'example' => '\phpDocumentor\Reflection\DocBlock\Tags\Example',
73
+ 'link' => LinkTag::class,
74
+ 'method' => Method::class,
75
+ 'param' => Param::class,
76
+ 'property-read' => PropertyRead::class,
77
+ 'property' => Property::class,
78
+ 'property-write' => PropertyWrite::class,
79
+ 'return' => Return_::class,
80
+ 'see' => SeeTag::class,
81
+ 'since' => Since::class,
82
+ 'source' => Source::class,
83
+ 'throw' => Throws::class,
84
+ 'throws' => Throws::class,
85
+ 'uses' => Uses::class,
86
+ 'var' => Var_::class,
87
+ 'version' => Version::class,
88
;
89
90
/**
91
- * @var array<class-string<Tag>> An array with an annotation as a key, and an
92
+ * @var array<class-string<Tag>> An array with a anotation s a key, and an
93
* FQCN to a class that handles it as an array value.
94
*/
95
- private array $annotationMappings = ;
96
+ private $annotationMappings = ;
97
98
/**
99
* @var ReflectionParameter a lazy-loading cache containing parameters
100
* for each tagHandler that has been used.
101
*/
102
- private array $tagHandlerParameterCache = ;
103
+ private $tagHandlerParameterCache = ;
104
105
- private FqsenResolver $fqsenResolver;
106
+ /** @var FqsenResolver */
107
+ private $fqsenResolver;
108
109
/**
110
* @var mixed an array representing a simple Service Locator where we can store parameters and
111
* services that can be inserted into the Factory Methods of Tag Handlers.
112
*/
113
- private array $serviceLocator = ;
114
+ private $serviceLocator = ;
115
116
/**
117
* Initialize this tag factory with the means to resolve an FQSEN and optionally a list of tag handlers.
118
119
120
public function addService(object $service, ?string $alias = null): void
121
{
122
- $this->serviceLocator$alias ?? get_class($service) = $service;
123
+ $this->serviceLocator$alias ?: get_class($service) = $service;
124
}
125
126
- /** {@inheritDoc} */
127
- public function registerTagHandler(string $tagName, $handler): void
128
+ public function registerTagHandler(string $tagName, string $handler): void
129
{
130
Assert::stringNotEmpty($tagName);
131
- if (strpos($tagName, '\\') !== false && $tagName0 !== '\\') {
132
+ Assert::classExists($handler);
133
+ Assert::implementsInterface($handler, Tag::class);
134
+
135
+ if (strpos($tagName, '\\') && $tagName0 !== '\\') {
136
throw new InvalidArgumentException(
137
'A namespaced tag must have a leading backslash as it must be fully qualified'
138
);
139
}
140
141
- if (is_object($handler)) {
142
- Assert::isInstanceOf($handler, Factory::class);
143
- $this->tagHandlerMappings$tagName = $handler;
144
-
145
- return;
146
- }
147
-
148
- Assert::classExists($handler);
149
- Assert::implementsInterface($handler, Tag::class);
150
$this->tagHandlerMappings$tagName = $handler;
151
}
152
153
154
);
155
}
156
157
+ if (count($matches) < 3) {
158
+ $matches = '';
159
+ }
160
+
161
return array_slice($matches, 1);
162
}
163
164
165
$this->getServiceLocatorWithDynamicParameters($context, $name, $body)
166
);
167
168
- if (array_key_exists('tagLine', $arguments)) {
169
- $arguments'tagLine' = sprintf('@%s %s', $name, $body);
170
- }
171
-
172
try {
173
$callable = $handlerClassName, 'create';
174
Assert::isCallable($callable);
175
176
/**
177
* Determines the Fully Qualified Class Name of the Factory or Tag (containing a Factory Method `create`).
178
*
179
- * @return class-string<Tag>|Factory
180
+ * @return class-string<Tag>
181
*/
182
- private function findHandlerClassName(string $tagName, TypeContext $context)
183
+ private function findHandlerClassName(string $tagName, TypeContext $context): string
184
{
185
$handlerClassName = Generic::class;
186
if (isset($this->tagHandlerMappings$tagName)) {
187
188
}
189
}
190
191
- $parameterName = $parameter->getName();
192
if (isset($locator$typeHint)) {
193
- $arguments$parameterName = $locator$typeHint;
194
+ $arguments = $locator$typeHint;
195
continue;
196
}
197
198
+ $parameterName = $parameter->getName();
199
if (isset($locator$parameterName)) {
200
- $arguments$parameterName = $locator$parameterName;
201
+ $arguments = $locator$parameterName;
202
continue;
203
}
204
205
- $arguments$parameterName = null;
206
+ $arguments = null;
207
}
208
209
return $arguments;
210
211
* Retrieves a series of ReflectionParameter objects for the static 'create' method of the given
212
* tag handler class name.
213
*
214
- * @param class-string|Factory $handler
215
+ * @param class-string $handlerClassName
216
*
217
* @return ReflectionParameter
218
*/
219
- private function fetchParametersForHandlerFactoryMethod($handler): array
220
+ private function fetchParametersForHandlerFactoryMethod(string $handlerClassName): array
221
{
222
- $handlerClassName = is_object($handler) ? get_class($handler) : $handler;
223
-
224
if (!isset($this->tagHandlerParameterCache$handlerClassName)) {
225
$methodReflection = new ReflectionMethod($handlerClassName, 'create');
226
$this->tagHandlerParameterCache$handlerClassName = $methodReflection->getParameters();
227
228
* Returns a copy of this class' Service Locator with added dynamic parameters,
229
* such as the tag's name, body and Context.
230
*
231
- * @param TypeContext $context The Context (namespace and aliases) that may be
232
+ * @param TypeContext $context The Context (namespace and aliasses) that may be
233
* passed and is used to resolve FQSENs.
234
* @param string $tagName The name of the tag that may be
235
* passed onto the factory method of the Tag class.
236
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/TagFactory.php
Changed
47
1
2
namespace phpDocumentor\Reflection\DocBlock;
3
4
use InvalidArgumentException;
5
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\Factory;
6
+use phpDocumentor\Reflection\Types\Context as TypeContext;
7
8
-interface TagFactory extends Factory
9
+interface TagFactory
10
{
11
/**
12
* Adds a parameter to the service locator that can be injected in a tag's factory method.
13
14
public function addParameter(string $name, $value): void;
15
16
/**
17
+ * Factory method responsible for instantiating the correct sub type.
18
+ *
19
+ * @param string $tagLine The text for this tag, including description.
20
+ *
21
+ * @return Tag A new tag object.
22
+ *
23
+ * @throws InvalidArgumentException If an invalid tag line was presented.
24
+ */
25
+ public function create(string $tagLine, ?TypeContext $context = null): Tag;
26
+
27
+ /**
28
* Registers a service with the Service Locator using the FQCN of the class or the alias, if provided.
29
*
30
* When calling a tag's "create" method we always check the signature for dependencies to inject. If a parameter
31
32
*
33
* @param string $tagName Name of tag to register a handler for. When registering a namespaced
34
* tag, the full name, along with a prefixing slash MUST be provided.
35
- * @param class-string<Tag>|Factory $handler FQCN of handler.
36
+ * @param class-string<Tag> $handler FQCN of handler.
37
*
38
* @throws InvalidArgumentException If the tag name is not a string.
39
* @throws InvalidArgumentException If the tag name is namespaced (contains backslashes) but
40
41
* @throws InvalidArgumentException If the handler is not an existing class.
42
* @throws InvalidArgumentException If the handler does not implement the {@see Tag} interface.
43
*/
44
- public function registerTagHandler(string $tagName, $handler): void;
45
+ public function registerTagHandler(string $tagName, string $handler): void;
46
}
47
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php
Changed
18
1
2
final class Author extends BaseTag implements Factory\StaticMethod
3
{
4
/** @var string register that this is the author tag. */
5
- protected string $name = 'author';
6
+ protected $name = 'author';
7
8
/** @var string The name of the author */
9
- private string $authorName;
10
+ private $authorName;
11
12
/** @var string The email of the author */
13
- private string $authorEmail;
14
+ private $authorEmail;
15
16
/**
17
* Initializes this tag with the author name and e-mail.
18
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php
Changed
14
1
2
abstract class BaseTag implements DocBlock\Tag
3
{
4
/** @var string Name of the tag */
5
- protected string $name = '';
6
+ protected $name = '';
7
8
/** @var Description|null Description of the tag. */
9
- protected ?Description $description = null;
10
+ protected $description;
11
12
/**
13
* Gets the name of this tag.
14
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php
Changed
15
1
2
*/
3
final class Covers extends BaseTag implements Factory\StaticMethod
4
{
5
- protected string $name = 'covers';
6
+ /** @var string */
7
+ protected $name = 'covers';
8
9
- private Fqsen $refers;
10
+ /** @var Fqsen */
11
+ private $refers;
12
13
/**
14
* Initializes this tag.
15
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php
Changed
29
1
2
*/
3
final class Deprecated extends BaseTag implements Factory\StaticMethod
4
{
5
- protected string $name = 'deprecated';
6
+ /** @var string */
7
+ protected $name = 'deprecated';
8
9
/**
10
* PCRE regular expression matching a version vector.
11
12
)';
13
14
/** @var string|null The version vector. */
15
- private ?string $version = null;
16
+ private $version;
17
18
public function __construct(?string $version = null, ?Description $description = null)
19
{
20
21
?DescriptionFactory $descriptionFactory = null,
22
?TypeContext $context = null
23
): self {
24
- if ($body === null || $body === '') {
25
+ if (empty($body)) {
26
return new static();
27
}
28
29
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php
Changed
42
1
2
final class Example implements Tag, Factory\StaticMethod
3
{
4
/** @var string Path to a file to use as an example. May also be an absolute URI. */
5
- private string $filePath;
6
+ private $filePath;
7
8
/**
9
* @var bool Whether the file path component represents an URI. This determines how the file portion
10
* appears at {@link getContent()}.
11
*/
12
- private bool $isURI;
13
+ private $isURI;
14
15
- private int $startingLine;
16
+ /** @var int */
17
+ private $startingLine;
18
19
- private int $lineCount;
20
+ /** @var int */
21
+ private $lineCount;
22
23
- private ?string $content = null;
24
+ /** @var string|null */
25
+ private $content;
26
27
public function __construct(
28
string $filePath,
29
30
31
$filePath = null;
32
$fileUri = null;
33
- if (array_key_exists(1, $matches) && $matches1 !== '') {
34
+ if ($matches1 !== '') {
35
$filePath = $matches1;
36
} else {
37
- $fileUri = array_key_exists(2, $matches) ? $matches2 : '';
38
+ $fileUri = $matches2;
39
}
40
41
$startingLine = 1;
42
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Extends_.php
Deleted
50
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-/**
7
- * This file is part of phpDocumentor.
8
- *
9
- * For the full copyright and license information, please view the LICENSE
10
- * file that was distributed with this source code.
11
- *
12
- * @link http://phpdoc.org
13
- */
14
-
15
-namespace phpDocumentor\Reflection\DocBlock\Tags;
16
-
17
-use Doctrine\Deprecations\Deprecation;
18
-use phpDocumentor\Reflection\DocBlock\Description;
19
-use phpDocumentor\Reflection\DocBlock\Tag;
20
-use phpDocumentor\Reflection\Type;
21
-
22
-/**
23
- * Reflection class for a {@}extends tag in a Docblock.
24
- */
25
-class Extends_ extends TagWithType
26
-{
27
- public function __construct(Type $type, ?Description $description = null)
28
- {
29
- $this->name = 'extends';
30
- $this->type = $type;
31
- $this->description = $description;
32
- }
33
-
34
- /**
35
- * @deprecated Create using static factory is deprecated,
36
- * this method should not be called directly by library consumers
37
- */
38
- public static function create(string $body): ?Tag
39
- {
40
- Deprecation::trigger(
41
- 'phpdocumentor/reflection-docblock',
42
- 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361',
43
- 'Create using static factory is deprecated, this method should not be called directly
44
- by library consumers',
45
- );
46
-
47
- return null;
48
- }
49
-}
50
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/AbstractPHPStanFactory.php
Deleted
140
1
2
-<?php
3
-/*
4
- * This file is part of phpDocumentor.
5
- *
6
- * For the full copyright and license information, please view the LICENSE
7
- * file that was distributed with this source code.
8
- *
9
- * @link http://phpdoc.org
10
- *
11
- */
12
-
13
-declare(strict_types=1);
14
-
15
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
16
-
17
-use phpDocumentor\Reflection\DocBlock\Tag;
18
-use phpDocumentor\Reflection\DocBlock\Tags\InvalidTag;
19
-use phpDocumentor\Reflection\Types\Context as TypeContext;
20
-use PHPStan\PhpDocParser\Lexer\Lexer;
21
-use PHPStan\PhpDocParser\Parser\ConstExprParser;
22
-use PHPStan\PhpDocParser\Parser\PhpDocParser;
23
-use PHPStan\PhpDocParser\Parser\TokenIterator;
24
-use PHPStan\PhpDocParser\Parser\TypeParser;
25
-use PHPStan\PhpDocParser\ParserConfig;
26
-use RuntimeException;
27
-
28
-use function class_exists;
29
-use function ltrim;
30
-use function property_exists;
31
-use function rtrim;
32
-
33
-/**
34
- * Factory class creating tags using phpstan's parser
35
- *
36
- * This class uses {@see PHPStanFactory} implementations to create tags
37
- * from the ast of the phpstan docblock parser.
38
- *
39
- * @internal This class is not part of the BC promise of this library.
40
- */
41
-class AbstractPHPStanFactory implements Factory
42
-{
43
- private PhpDocParser $parser;
44
- private Lexer $lexer;
45
- /** @var PHPStanFactory */
46
- private array $factories;
47
-
48
- public function __construct(PHPStanFactory ...$factories)
49
- {
50
- if (class_exists(ParserConfig::class)) {
51
- $config = new ParserConfig('indexes' => true, 'lines' => true);
52
- $this->lexer = new Lexer($config);
53
- $constParser = new ConstExprParser($config);
54
- $this->parser = new PhpDocParser(
55
- $config,
56
- new TypeParser($config, $constParser),
57
- $constParser
58
- );
59
- } else {
60
- $this->lexer = new Lexer(true);
61
- $constParser = new ConstExprParser(true, true, 'lines' => true, 'indexes' => true);
62
- $this->parser = new PhpDocParser(
63
- new TypeParser($constParser, true, 'lines' => true, 'indexes' => true),
64
- $constParser,
65
- true,
66
- true,
67
- 'lines' => true, 'indexes' => true,
68
- true
69
- );
70
- }
71
-
72
- $this->factories = $factories;
73
- }
74
-
75
- public function create(string $tagLine, ?TypeContext $context = null): Tag
76
- {
77
- $tokens = $this->tokenizeLine($tagLine);
78
- $ast = $this->parser->parseTag($tokens);
79
- if (class_exists(ParserConfig::class) === false) {
80
- if (property_exists($ast->value, 'description') === true) {
81
- $ast->value->setAttribute(
82
- 'description',
83
- $ast->value->description . $tokens->joinUntil(Lexer::TOKEN_END)
84
- );
85
- }
86
- }
87
-
88
- if ($context === null) {
89
- $context = new TypeContext('');
90
- }
91
-
92
- try {
93
- foreach ($this->factories as $factory) {
94
- if ($factory->supports($ast, $context)) {
95
- return $factory->create($ast, $context);
96
- }
97
- }
98
- } catch (RuntimeException $e) {
99
- return InvalidTag::create((string) $ast->value, 'method')->withError($e);
100
- }
101
-
102
- return InvalidTag::create(
103
- (string) $ast->value,
104
- $ast->name
105
- );
106
- }
107
-
108
- /**
109
- * Solve the issue with the lexer not tokenizing the line correctly
110
- *
111
- * This method is a workaround for the lexer that includes newline tokens with spaces. For
112
- * phpstan this isn't an issue, as it doesn't do a lot of things with the indentation of descriptions.
113
- * But for us is important to keep the indentation of the descriptions, so we need to fix the lexer output.
114
- */
115
- private function tokenizeLine(string $tagLine): TokenIterator
116
- {
117
- $tokens = $this->lexer->tokenize($tagLine);
118
- $fixed = ;
119
- foreach ($tokens as $token) {
120
- if (($token1 === Lexer::TOKEN_PHPDOC_EOL) && rtrim($token0, " \t") !== $token0) {
121
- $fixed =
122
- rtrim($tokenLexer::VALUE_OFFSET, " \t"),
123
- Lexer::TOKEN_PHPDOC_EOL,
124
- $token2 ?? 0,
125
- ;
126
- $fixed =
127
- ltrim($tokenLexer::VALUE_OFFSET, "\n\r"),
128
- Lexer::TOKEN_HORIZONTAL_WS,
129
- ($token2 ?? 0) + 1,
130
- ;
131
- continue;
132
- }
133
-
134
- $fixed = $token;
135
- }
136
-
137
- return new TokenIterator($fixed);
138
- }
139
-}
140
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/ExtendsFactory.php
Deleted
54
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
9
-use phpDocumentor\Reflection\DocBlock\Tag;
10
-use phpDocumentor\Reflection\DocBlock\Tags\Extends_;
11
-use phpDocumentor\Reflection\TypeResolver;
12
-use phpDocumentor\Reflection\Types\Context;
13
-use PHPStan\PhpDocParser\Ast\PhpDoc\ExtendsTagValueNode;
14
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
15
-use Webmozart\Assert\Assert;
16
-
17
-use function is_string;
18
-
19
-/**
20
- * @internal This class is not part of the BC promise of this library.
21
- */
22
-final class ExtendsFactory implements PHPStanFactory
23
-{
24
- private DescriptionFactory $descriptionFactory;
25
- private TypeResolver $typeResolver;
26
-
27
- public function __construct(TypeResolver $typeResolver, DescriptionFactory $descriptionFactory)
28
- {
29
- $this->descriptionFactory = $descriptionFactory;
30
- $this->typeResolver = $typeResolver;
31
- }
32
-
33
- public function supports(PhpDocTagNode $node, Context $context): bool
34
- {
35
- return $node->value instanceof ExtendsTagValueNode && $node->name === '@extends';
36
- }
37
-
38
- public function create(PhpDocTagNode $node, Context $context): Tag
39
- {
40
- $tagValue = $node->value;
41
- Assert::isInstanceOf($tagValue, ExtendsTagValueNode::class);
42
-
43
- $description = $tagValue->getAttribute('description');
44
- if (is_string($description) === false) {
45
- $description = $tagValue->description;
46
- }
47
-
48
- return new Extends_(
49
- $this->typeResolver->createType($tagValue->type, $context),
50
- $this->descriptionFactory->create($description, $context)
51
- );
52
- }
53
-}
54
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Factory.php
Deleted
43
1
2
-<?php
3
-/*
4
- * This file is part of phpDocumentor.
5
- *
6
- * For the full copyright and license information, please view the LICENSE
7
- * file that was distributed with this source code.
8
- *
9
- * @link http://phpdoc.org
10
- *
11
- */
12
-
13
-declare(strict_types=1);
14
-
15
-/**
16
- * This file is part of phpDocumentor.
17
- *
18
- * For the full copyright and license information, please view the LICENSE
19
- * file that was distributed with this source code.
20
- *
21
- * @link http://phpdoc.org
22
- */
23
-
24
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
25
-
26
-use InvalidArgumentException;
27
-use phpDocumentor\Reflection\DocBlock\Tag;
28
-use phpDocumentor\Reflection\Types\Context as TypeContext;
29
-
30
-interface Factory
31
-{
32
- /**
33
- * Factory method responsible for instantiating the correct sub type.
34
- *
35
- * @param string $tagLine The text for this tag, including description.
36
- *
37
- * @return Tag A new tag object.
38
- *
39
- * @throws InvalidArgumentException If an invalid tag line was presented.
40
- */
41
- public function create(string $tagLine, ?TypeContext $context = null): Tag;
42
-}
43
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/ImplementsFactory.php
Deleted
54
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
9
-use phpDocumentor\Reflection\DocBlock\Tag;
10
-use phpDocumentor\Reflection\DocBlock\Tags\Implements_;
11
-use phpDocumentor\Reflection\TypeResolver;
12
-use phpDocumentor\Reflection\Types\Context;
13
-use PHPStan\PhpDocParser\Ast\PhpDoc\ImplementsTagValueNode;
14
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
15
-use Webmozart\Assert\Assert;
16
-
17
-use function is_string;
18
-
19
-/**
20
- * @internal This class is not part of the BC promise of this library.
21
- */
22
-final class ImplementsFactory implements PHPStanFactory
23
-{
24
- private DescriptionFactory $descriptionFactory;
25
- private TypeResolver $typeResolver;
26
-
27
- public function __construct(TypeResolver $typeResolver, DescriptionFactory $descriptionFactory)
28
- {
29
- $this->descriptionFactory = $descriptionFactory;
30
- $this->typeResolver = $typeResolver;
31
- }
32
-
33
- public function supports(PhpDocTagNode $node, Context $context): bool
34
- {
35
- return $node->value instanceof ImplementsTagValueNode && $node->name === '@implements';
36
- }
37
-
38
- public function create(PhpDocTagNode $node, Context $context): Tag
39
- {
40
- $tagValue = $node->value;
41
- Assert::isInstanceOf($tagValue, ImplementsTagValueNode::class);
42
-
43
- $description = $tagValue->getAttribute('description');
44
- if (is_string($description) === false) {
45
- $description = $tagValue->description;
46
- }
47
-
48
- return new Implements_(
49
- $this->typeResolver->createType($tagValue->type, $context),
50
- $this->descriptionFactory->create($description, $context)
51
- );
52
- }
53
-}
54
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/MethodFactory.php
Deleted
85
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
9
-use phpDocumentor\Reflection\DocBlock\Tag;
10
-use phpDocumentor\Reflection\DocBlock\Tags\Method;
11
-use phpDocumentor\Reflection\DocBlock\Tags\MethodParameter;
12
-use phpDocumentor\Reflection\Type;
13
-use phpDocumentor\Reflection\TypeResolver;
14
-use phpDocumentor\Reflection\Types\Context;
15
-use phpDocumentor\Reflection\Types\Mixed_;
16
-use phpDocumentor\Reflection\Types\Void_;
17
-use PHPStan\PhpDocParser\Ast\PhpDoc\MethodTagValueNode;
18
-use PHPStan\PhpDocParser\Ast\PhpDoc\MethodTagValueParameterNode;
19
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
20
-use Webmozart\Assert\Assert;
21
-
22
-use function array_map;
23
-use function trim;
24
-
25
-/**
26
- * @internal This class is not part of the BC promise of this library.
27
- */
28
-final class MethodFactory implements PHPStanFactory
29
-{
30
- private DescriptionFactory $descriptionFactory;
31
- private TypeResolver $typeResolver;
32
-
33
- public function __construct(TypeResolver $typeResolver, DescriptionFactory $descriptionFactory)
34
- {
35
- $this->descriptionFactory = $descriptionFactory;
36
- $this->typeResolver = $typeResolver;
37
- }
38
-
39
- public function create(PhpDocTagNode $node, Context $context): Tag
40
- {
41
- $tagValue = $node->value;
42
- Assert::isInstanceOf($tagValue, MethodTagValueNode::class);
43
-
44
- return new Method(
45
- $tagValue->methodName,
46
- ,
47
- $this->createReturnType($tagValue, $context),
48
- $tagValue->isStatic,
49
- $this->descriptionFactory->create($tagValue->description, $context),
50
- false,
51
- array_map(
52
- function (MethodTagValueParameterNode $param) use ($context) {
53
- return new MethodParameter(
54
- trim($param->parameterName, '$'),
55
- $param->type === null ? new Mixed_() : $this->typeResolver->createType(
56
- $param->type,
57
- $context
58
- ),
59
- $param->isReference,
60
- $param->isVariadic,
61
- $param->defaultValue === null ?
62
- MethodParameter::NO_DEFAULT_VALUE :
63
- (string) $param->defaultValue
64
- );
65
- },
66
- $tagValue->parameters
67
- ),
68
- );
69
- }
70
-
71
- public function supports(PhpDocTagNode $node, Context $context): bool
72
- {
73
- return $node->value instanceof MethodTagValueNode;
74
- }
75
-
76
- private function createReturnType(MethodTagValueNode $tagValue, Context $context): Type
77
- {
78
- if ($tagValue->returnType === null) {
79
- return new Void_();
80
- }
81
-
82
- return $this->typeResolver->createType($tagValue->returnType, $context);
83
- }
84
-}
85
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/MethodParameterFactory.php
Deleted
102
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-/**
7
- * This file is part of phpDocumentor.
8
- *
9
- * For the full copyright and license information, please view the LICENSE
10
- * file that was distributed with this source code.
11
- *
12
- * @link http://phpdoc.org
13
- */
14
-
15
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
16
-
17
-use function array_key_last;
18
-use function get_class;
19
-use function gettype;
20
-use function method_exists;
21
-use function ucfirst;
22
-use function var_export;
23
-
24
-/**
25
- * @internal This class is not part of the BC promise of this library.
26
- */
27
-final class MethodParameterFactory
28
-{
29
- /**
30
- * Formats the given default value to a string-able mixin
31
- *
32
- * @param mixed $defaultValue
33
- */
34
- public function format($defaultValue): string
35
- {
36
- $method = 'format' . ucfirst(gettype($defaultValue));
37
- if (method_exists($this, $method)) {
38
- return ' = ' . $this->{$method}($defaultValue);
39
- }
40
-
41
- return '';
42
- }
43
-
44
- private function formatDouble(float $defaultValue): string
45
- {
46
- return var_export($defaultValue, true);
47
- }
48
-
49
- /**
50
- * @param mixed $defaultValue
51
- */
52
- private function formatNull($defaultValue): string
53
- {
54
- return 'null';
55
- }
56
-
57
- private function formatInteger(int $defaultValue): string
58
- {
59
- return var_export($defaultValue, true);
60
- }
61
-
62
- private function formatString(string $defaultValue): string
63
- {
64
- return var_export($defaultValue, true);
65
- }
66
-
67
- private function formatBoolean(bool $defaultValue): string
68
- {
69
- return var_export($defaultValue, true);
70
- }
71
-
72
- /**
73
- * @param array<(array<mixed>|int|float|bool|string|object|null)> $defaultValue
74
- */
75
- private function formatArray(array $defaultValue): string
76
- {
77
- $formatedValue = '';
78
-
79
- foreach ($defaultValue as $key => $value) {
80
- $method = 'format' . ucfirst(gettype($value));
81
- if (!method_exists($this, $method)) {
82
- continue;
83
- }
84
-
85
- $formatedValue .= $this->{$method}($value);
86
-
87
- if ($key === array_key_last($defaultValue)) {
88
- continue;
89
- }
90
-
91
- $formatedValue .= ',';
92
- }
93
-
94
- return $formatedValue . '';
95
- }
96
-
97
- private function formatObject(object $defaultValue): string
98
- {
99
- return 'new ' . get_class($defaultValue) . '()';
100
- }
101
-}
102
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PHPStanFactory.php
Deleted
18
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use phpDocumentor\Reflection\DocBlock\Tag;
9
-use phpDocumentor\Reflection\Types\Context;
10
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
11
-
12
-interface PHPStanFactory
13
-{
14
- public function create(PhpDocTagNode $node, Context $context): Tag;
15
-
16
- public function supports(PhpDocTagNode $node, Context $context): bool;
17
-}
18
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/ParamFactory.php
Deleted
94
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use Doctrine\Deprecations\Deprecation;
9
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
10
-use phpDocumentor\Reflection\DocBlock\Tag;
11
-use phpDocumentor\Reflection\DocBlock\Tags\InvalidTag;
12
-use phpDocumentor\Reflection\DocBlock\Tags\Param;
13
-use phpDocumentor\Reflection\TypeResolver;
14
-use phpDocumentor\Reflection\Types\Context;
15
-use PHPStan\PhpDocParser\Ast\PhpDoc\InvalidTagValueNode;
16
-use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode;
17
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
18
-use PHPStan\PhpDocParser\Ast\PhpDoc\TypelessParamTagValueNode;
19
-use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
20
-use PHPStan\PhpDocParser\Ast\Type\OffsetAccessTypeNode;
21
-use Webmozart\Assert\Assert;
22
-
23
-use function is_string;
24
-use function sprintf;
25
-use function trim;
26
-
27
-/**
28
- * @internal This class is not part of the BC promise of this library.
29
- */
30
-final class ParamFactory implements PHPStanFactory
31
-{
32
- private DescriptionFactory $descriptionFactory;
33
- private TypeResolver $typeResolver;
34
-
35
- public function __construct(TypeResolver $typeResolver, DescriptionFactory $descriptionFactory)
36
- {
37
- $this->descriptionFactory = $descriptionFactory;
38
- $this->typeResolver = $typeResolver;
39
- }
40
-
41
- public function create(PhpDocTagNode $node, Context $context): Tag
42
- {
43
- $tagValue = $node->value;
44
-
45
- if ($tagValue instanceof InvalidTagValueNode) {
46
- Deprecation::trigger(
47
- 'phpdocumentor/reflection-docblock',
48
- 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/362',
49
- sprintf(
50
- 'Param tag value "%s" is invalid, falling back to legacy parsing. Please update your docblocks.',
51
- $tagValue->value
52
- )
53
- );
54
-
55
- return Param::create($tagValue->value, $this->typeResolver, $this->descriptionFactory, $context);
56
- }
57
-
58
- Assert::isInstanceOfAny(
59
- $tagValue,
60
-
61
- ParamTagValueNode::class,
62
- TypelessParamTagValueNode::class,
63
-
64
- );
65
-
66
- if (($tagValue->type ?? null) instanceof OffsetAccessTypeNode) {
67
- return InvalidTag::create(
68
- (string) $tagValue,
69
- 'param'
70
- );
71
- }
72
-
73
- $description = $tagValue->getAttribute('description');
74
- if (is_string($description) === false) {
75
- $description = $tagValue->description;
76
- }
77
-
78
- return new Param(
79
- trim($tagValue->parameterName, '$'),
80
- $this->typeResolver->createType($tagValue->type ?? new IdentifierTypeNode('mixed'), $context),
81
- $tagValue->isVariadic,
82
- $this->descriptionFactory->create($description, $context),
83
- $tagValue->isReference
84
- );
85
- }
86
-
87
- public function supports(PhpDocTagNode $node, Context $context): bool
88
- {
89
- return $node->value instanceof ParamTagValueNode
90
- || $node->value instanceof TypelessParamTagValueNode
91
- || $node->name === '@param';
92
- }
93
-}
94
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyFactory.php
Deleted
56
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
9
-use phpDocumentor\Reflection\DocBlock\Tag;
10
-use phpDocumentor\Reflection\DocBlock\Tags\Property;
11
-use phpDocumentor\Reflection\TypeResolver;
12
-use phpDocumentor\Reflection\Types\Context;
13
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
14
-use PHPStan\PhpDocParser\Ast\PhpDoc\PropertyTagValueNode;
15
-use Webmozart\Assert\Assert;
16
-
17
-use function is_string;
18
-use function trim;
19
-
20
-/**
21
- * @internal This class is not part of the BC promise of this library.
22
- */
23
-final class PropertyFactory implements PHPStanFactory
24
-{
25
- private DescriptionFactory $descriptionFactory;
26
- private TypeResolver $typeResolver;
27
-
28
- public function __construct(TypeResolver $typeResolver, DescriptionFactory $descriptionFactory)
29
- {
30
- $this->descriptionFactory = $descriptionFactory;
31
- $this->typeResolver = $typeResolver;
32
- }
33
-
34
- public function create(PhpDocTagNode $node, Context $context): Tag
35
- {
36
- $tagValue = $node->value;
37
- Assert::isInstanceOf($tagValue, PropertyTagValueNode::class);
38
-
39
- $description = $tagValue->getAttribute('description');
40
- if (is_string($description) === false) {
41
- $description = $tagValue->description;
42
- }
43
-
44
- return new Property(
45
- trim($tagValue->propertyName, '$'),
46
- $this->typeResolver->createType($tagValue->type, $context),
47
- $this->descriptionFactory->create($description, $context)
48
- );
49
- }
50
-
51
- public function supports(PhpDocTagNode $node, Context $context): bool
52
- {
53
- return $node->value instanceof PropertyTagValueNode && $node->name === '@property';
54
- }
55
-}
56
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyReadFactory.php
Deleted
56
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
9
-use phpDocumentor\Reflection\DocBlock\Tag;
10
-use phpDocumentor\Reflection\DocBlock\Tags\PropertyRead;
11
-use phpDocumentor\Reflection\TypeResolver;
12
-use phpDocumentor\Reflection\Types\Context;
13
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
14
-use PHPStan\PhpDocParser\Ast\PhpDoc\PropertyTagValueNode;
15
-use Webmozart\Assert\Assert;
16
-
17
-use function is_string;
18
-use function trim;
19
-
20
-/**
21
- * @internal This class is not part of the BC promise of this library.
22
- */
23
-final class PropertyReadFactory implements PHPStanFactory
24
-{
25
- private DescriptionFactory $descriptionFactory;
26
- private TypeResolver $typeResolver;
27
-
28
- public function __construct(TypeResolver $typeResolver, DescriptionFactory $descriptionFactory)
29
- {
30
- $this->typeResolver = $typeResolver;
31
- $this->descriptionFactory = $descriptionFactory;
32
- }
33
-
34
- public function create(PhpDocTagNode $node, Context $context): Tag
35
- {
36
- $tagValue = $node->value;
37
- Assert::isInstanceOf($tagValue, PropertyTagValueNode::class);
38
-
39
- $description = $tagValue->getAttribute('description');
40
- if (is_string($description) === false) {
41
- $description = $tagValue->description;
42
- }
43
-
44
- return new PropertyRead(
45
- trim($tagValue->propertyName, '$'),
46
- $this->typeResolver->createType($tagValue->type, $context),
47
- $this->descriptionFactory->create($description, $context)
48
- );
49
- }
50
-
51
- public function supports(PhpDocTagNode $node, Context $context): bool
52
- {
53
- return $node->value instanceof PropertyTagValueNode && $node->name === '@property-read';
54
- }
55
-}
56
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyWriteFactory.php
Deleted
56
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
9
-use phpDocumentor\Reflection\DocBlock\Tag;
10
-use phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite;
11
-use phpDocumentor\Reflection\TypeResolver;
12
-use phpDocumentor\Reflection\Types\Context;
13
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
14
-use PHPStan\PhpDocParser\Ast\PhpDoc\PropertyTagValueNode;
15
-use Webmozart\Assert\Assert;
16
-
17
-use function is_string;
18
-use function trim;
19
-
20
-/**
21
- * @internal This class is not part of the BC promise of this library.
22
- */
23
-final class PropertyWriteFactory implements PHPStanFactory
24
-{
25
- private DescriptionFactory $descriptionFactory;
26
- private TypeResolver $typeResolver;
27
-
28
- public function __construct(TypeResolver $typeResolver, DescriptionFactory $descriptionFactory)
29
- {
30
- $this->descriptionFactory = $descriptionFactory;
31
- $this->typeResolver = $typeResolver;
32
- }
33
-
34
- public function create(PhpDocTagNode $node, Context $context): Tag
35
- {
36
- $tagValue = $node->value;
37
- Assert::isInstanceOf($tagValue, PropertyTagValueNode::class);
38
-
39
- $description = $tagValue->getAttribute('description');
40
- if (is_string($description) === false) {
41
- $description = $tagValue->description;
42
- }
43
-
44
- return new PropertyWrite(
45
- trim($tagValue->propertyName, '$'),
46
- $this->typeResolver->createType($tagValue->type, $context),
47
- $this->descriptionFactory->create($description, $context)
48
- );
49
- }
50
-
51
- public function supports(PhpDocTagNode $node, Context $context): bool
52
- {
53
- return $node->value instanceof PropertyTagValueNode && $node->name === '@property-write';
54
- }
55
-}
56
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/ReturnFactory.php
Deleted
54
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
9
-use phpDocumentor\Reflection\DocBlock\Tag;
10
-use phpDocumentor\Reflection\DocBlock\Tags\Return_;
11
-use phpDocumentor\Reflection\TypeResolver;
12
-use phpDocumentor\Reflection\Types\Context;
13
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
14
-use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode;
15
-use Webmozart\Assert\Assert;
16
-
17
-use function is_string;
18
-
19
-/**
20
- * @internal This class is not part of the BC promise of this library.
21
- */
22
-final class ReturnFactory implements PHPStanFactory
23
-{
24
- private DescriptionFactory $descriptionFactory;
25
- private TypeResolver $typeResolver;
26
-
27
- public function __construct(TypeResolver $typeResolver, DescriptionFactory $descriptionFactory)
28
- {
29
- $this->descriptionFactory = $descriptionFactory;
30
- $this->typeResolver = $typeResolver;
31
- }
32
-
33
- public function create(PhpDocTagNode $node, Context $context): Tag
34
- {
35
- $tagValue = $node->value;
36
- Assert::isInstanceOf($tagValue, ReturnTagValueNode::class);
37
-
38
- $description = $tagValue->getAttribute('description');
39
- if (is_string($description) === false) {
40
- $description = $tagValue->description;
41
- }
42
-
43
- return new Return_(
44
- $this->typeResolver->createType($tagValue->type, $context),
45
- $this->descriptionFactory->create($description, $context)
46
- );
47
- }
48
-
49
- public function supports(PhpDocTagNode $node, Context $context): bool
50
- {
51
- return $node->value instanceof ReturnTagValueNode;
52
- }
53
-}
54
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/TemplateExtendsFactory.php
Deleted
54
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
9
-use phpDocumentor\Reflection\DocBlock\Tag;
10
-use phpDocumentor\Reflection\DocBlock\Tags\TemplateExtends;
11
-use phpDocumentor\Reflection\TypeResolver;
12
-use phpDocumentor\Reflection\Types\Context;
13
-use PHPStan\PhpDocParser\Ast\PhpDoc\ExtendsTagValueNode;
14
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
15
-use Webmozart\Assert\Assert;
16
-
17
-use function is_string;
18
-
19
-/**
20
- * @internal This class is not part of the BC promise of this library.
21
- */
22
-final class TemplateExtendsFactory implements PHPStanFactory
23
-{
24
- private DescriptionFactory $descriptionFactory;
25
- private TypeResolver $typeResolver;
26
-
27
- public function __construct(TypeResolver $typeResolver, DescriptionFactory $descriptionFactory)
28
- {
29
- $this->descriptionFactory = $descriptionFactory;
30
- $this->typeResolver = $typeResolver;
31
- }
32
-
33
- public function supports(PhpDocTagNode $node, Context $context): bool
34
- {
35
- return $node->value instanceof ExtendsTagValueNode && $node->name === '@template-extends';
36
- }
37
-
38
- public function create(PhpDocTagNode $node, Context $context): Tag
39
- {
40
- $tagValue = $node->value;
41
- Assert::isInstanceOf($tagValue, ExtendsTagValueNode::class);
42
-
43
- $description = $tagValue->getAttribute('description');
44
- if (is_string($description) === false) {
45
- $description = $tagValue->description;
46
- }
47
-
48
- return new TemplateExtends(
49
- $this->typeResolver->createType($tagValue->type, $context),
50
- $this->descriptionFactory->create($description, $context)
51
- );
52
- }
53
-}
54
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/TemplateFactory.php
Deleted
58
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
9
-use phpDocumentor\Reflection\DocBlock\Tag;
10
-use phpDocumentor\Reflection\DocBlock\Tags\Template;
11
-use phpDocumentor\Reflection\TypeResolver;
12
-use phpDocumentor\Reflection\Types\Context;
13
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
14
-use PHPStan\PhpDocParser\Ast\PhpDoc\TemplateTagValueNode;
15
-use Webmozart\Assert\Assert;
16
-
17
-use function is_string;
18
-
19
-/**
20
- * @internal This class is not part of the BC promise of this library.
21
- */
22
-final class TemplateFactory implements PHPStanFactory
23
-{
24
- private DescriptionFactory $descriptionFactory;
25
- private TypeResolver $typeResolver;
26
-
27
- public function __construct(TypeResolver $typeResolver, DescriptionFactory $descriptionFactory)
28
- {
29
- $this->descriptionFactory = $descriptionFactory;
30
- $this->typeResolver = $typeResolver;
31
- }
32
-
33
- public function create(PhpDocTagNode $node, Context $context): Tag
34
- {
35
- $tagValue = $node->value;
36
-
37
- Assert::isInstanceOf($tagValue, TemplateTagValueNode::class);
38
- $name = $tagValue->name;
39
-
40
- $description = $tagValue->getAttribute('description');
41
- if (is_string($description) === false) {
42
- $description = $tagValue->description;
43
- }
44
-
45
- return new Template(
46
- $name,
47
- $this->typeResolver->createType($tagValue->bound, $context),
48
- $this->typeResolver->createType($tagValue->default, $context),
49
- $this->descriptionFactory->create($description, $context)
50
- );
51
- }
52
-
53
- public function supports(PhpDocTagNode $node, Context $context): bool
54
- {
55
- return $node->value instanceof TemplateTagValueNode && $node->name === '@template';
56
- }
57
-}
58
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/TemplateImplementsFactory.php
Deleted
54
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
9
-use phpDocumentor\Reflection\DocBlock\Tag;
10
-use phpDocumentor\Reflection\DocBlock\Tags\TemplateImplements;
11
-use phpDocumentor\Reflection\TypeResolver;
12
-use phpDocumentor\Reflection\Types\Context;
13
-use PHPStan\PhpDocParser\Ast\PhpDoc\ImplementsTagValueNode;
14
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
15
-use Webmozart\Assert\Assert;
16
-
17
-use function is_string;
18
-
19
-/**
20
- * @internal This class is not part of the BC promise of this library.
21
- */
22
-final class TemplateImplementsFactory implements PHPStanFactory
23
-{
24
- private DescriptionFactory $descriptionFactory;
25
- private TypeResolver $typeResolver;
26
-
27
- public function __construct(TypeResolver $typeResolver, DescriptionFactory $descriptionFactory)
28
- {
29
- $this->descriptionFactory = $descriptionFactory;
30
- $this->typeResolver = $typeResolver;
31
- }
32
-
33
- public function supports(PhpDocTagNode $node, Context $context): bool
34
- {
35
- return $node->value instanceof ImplementsTagValueNode && $node->name === '@template-implements';
36
- }
37
-
38
- public function create(PhpDocTagNode $node, Context $context): Tag
39
- {
40
- $tagValue = $node->value;
41
- Assert::isInstanceOf($tagValue, ImplementsTagValueNode::class);
42
-
43
- $description = $tagValue->getAttribute('description');
44
- if (is_string($description) === false) {
45
- $description = $tagValue->description;
46
- }
47
-
48
- return new TemplateImplements(
49
- $this->typeResolver->createType($tagValue->type, $context),
50
- $this->descriptionFactory->create($description, $context)
51
- );
52
- }
53
-}
54
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/VarFactory.php
Deleted
56
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\DocBlock\Tags\Factory;
7
-
8
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
9
-use phpDocumentor\Reflection\DocBlock\Tag;
10
-use phpDocumentor\Reflection\DocBlock\Tags\Var_;
11
-use phpDocumentor\Reflection\TypeResolver;
12
-use phpDocumentor\Reflection\Types\Context;
13
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
14
-use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode;
15
-use Webmozart\Assert\Assert;
16
-
17
-use function is_string;
18
-use function trim;
19
-
20
-/**
21
- * @internal This class is not part of the BC promise of this library.
22
- */
23
-final class VarFactory implements PHPStanFactory
24
-{
25
- private DescriptionFactory $descriptionFactory;
26
- private TypeResolver $typeResolver;
27
-
28
- public function __construct(TypeResolver $typeResolver, DescriptionFactory $descriptionFactory)
29
- {
30
- $this->descriptionFactory = $descriptionFactory;
31
- $this->typeResolver = $typeResolver;
32
- }
33
-
34
- public function create(PhpDocTagNode $node, Context $context): Tag
35
- {
36
- $tagValue = $node->value;
37
- Assert::isInstanceOf($tagValue, VarTagValueNode::class);
38
-
39
- $description = $tagValue->getAttribute('description');
40
- if (is_string($description) === false) {
41
- $description = $tagValue->description;
42
- }
43
-
44
- return new Var_(
45
- trim($tagValue->variableName, '$'),
46
- $this->typeResolver->createType($tagValue->type, $context),
47
- $this->descriptionFactory->create($description, $context)
48
- );
49
- }
50
-
51
- public function supports(PhpDocTagNode $node, Context $context): bool
52
- {
53
- return $node->value instanceof VarTagValueNode;
54
- }
55
-}
56
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php
Changed
10
1
2
class AlignFormatter implements Formatter
3
{
4
/** @var int The maximum tag name length. */
5
- protected int $maxLen = 0;
6
+ protected $maxLen = 0;
7
8
/**
9
* @param Tag $tags All tags that should later be aligned with the formatter.
10
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Implements_.php
Deleted
50
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-/**
7
- * This file is part of phpDocumentor.
8
- *
9
- * For the full copyright and license information, please view the LICENSE
10
- * file that was distributed with this source code.
11
- *
12
- * @link http://phpdoc.org
13
- */
14
-
15
-namespace phpDocumentor\Reflection\DocBlock\Tags;
16
-
17
-use Doctrine\Deprecations\Deprecation;
18
-use phpDocumentor\Reflection\DocBlock\Description;
19
-use phpDocumentor\Reflection\DocBlock\Tag;
20
-use phpDocumentor\Reflection\Type;
21
-
22
-/**
23
- * Reflection class for a {@}implements tag in a Docblock.
24
- */
25
-class Implements_ extends TagWithType
26
-{
27
- public function __construct(Type $type, ?Description $description = null)
28
- {
29
- $this->name = 'implements';
30
- $this->type = $type;
31
- $this->description = $description;
32
- }
33
-
34
- /**
35
- * @deprecated Create using static factory is deprecated,
36
- * this method should not be called directly by library consumers
37
- */
38
- public static function create(string $body): ?Tag
39
- {
40
- Deprecation::trigger(
41
- 'phpdocumentor/reflection-docblock',
42
- 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361',
43
- 'Create using static factory is deprecated, this method should not be called directly
44
- by library consumers',
45
- );
46
-
47
- return null;
48
- }
49
-}
50
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/InvalidTag.php
Changed
25
1
2
* we cannot simply throw exceptions at all time because the exceptions will break the creation of a
3
* docklock. Just silently ignore the exceptions is not an option because the user as an issue to fix.
4
*
5
- * This tag holds that error information until a using application is able to display it. The object will just behave
6
+ * This tag holds that error information until a using application is able to display it. The object wil just behave
7
* like any normal tag. So the normal application flow will not break.
8
*/
9
final class InvalidTag implements Tag
10
{
11
- private string $name;
12
+ /** @var string */
13
+ private $name;
14
15
- private string $body;
16
+ /** @var string */
17
+ private $body;
18
19
- private ?Throwable $throwable = null;
20
+ /** @var Throwable|null */
21
+ private $throwable;
22
23
private function __construct(string $name, string $body)
24
{
25
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php
Changed
15
1
2
*/
3
final class Link extends BaseTag implements Factory\StaticMethod
4
{
5
- protected string $name = 'link';
6
+ /** @var string */
7
+ protected $name = 'link';
8
9
- private string $link;
10
+ /** @var string */
11
+ private $link;
12
13
/**
14
* Initializes a link to a URL.
15
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php
Changed
257
1
2
use Webmozart\Assert\Assert;
3
4
use function array_keys;
5
-use function array_map;
6
use function explode;
7
use function implode;
8
use function is_string;
9
10
use function sort;
11
use function strpos;
12
use function substr;
13
-use function trigger_error;
14
use function trim;
15
use function var_export;
16
17
-use const E_USER_DEPRECATED;
18
-
19
/**
20
* Reflection class for an {@}method in a Docblock.
21
*/
22
final class Method extends BaseTag implements Factory\StaticMethod
23
{
24
- protected string $name = 'method';
25
-
26
- private string $methodName;
27
+ /** @var string */
28
+ protected $name = 'method';
29
30
- private bool $isStatic;
31
+ /** @var string */
32
+ private $methodName;
33
34
- private Type $returnType;
35
+ /**
36
+ * @phpstan-var array<int, array{name: string, type: Type}>
37
+ * @var array<int, array<string, Type|string>>
38
+ */
39
+ private $arguments;
40
41
- private bool $returnsReference;
42
+ /** @var bool */
43
+ private $isStatic;
44
45
- /** @var MethodParameter */
46
- private array $parameters;
47
+ /** @var Type */
48
+ private $returnType;
49
50
/**
51
* @param array<int, array<string, Type|string>> $arguments
52
- * @param MethodParameter $parameters
53
* @phpstan-param array<int, array{name: string, type: Type}|string> $arguments
54
*/
55
public function __construct(
56
57
array $arguments = ,
58
?Type $returnType = null,
59
bool $static = false,
60
- ?Description $description = null,
61
- bool $returnsReference = false,
62
- ?array $parameters = null
63
+ ?Description $description = null
64
) {
65
Assert::stringNotEmpty($methodName);
66
67
68
$returnType = new Void_();
69
}
70
71
- $arguments = $this->filterArguments($arguments);
72
-
73
- $this->methodName = $methodName;
74
- $this->returnType = $returnType;
75
- $this->isStatic = $static;
76
- $this->description = $description;
77
- $this->returnsReference = $returnsReference;
78
- $this->parameters = $parameters ?? $this->fromLegacyArguments($arguments);
79
+ $this->methodName = $methodName;
80
+ $this->arguments = $this->filterArguments($arguments);
81
+ $this->returnType = $returnType;
82
+ $this->isStatic = $static;
83
+ $this->description = $description;
84
}
85
86
- /**
87
- * @deprecated Create using static factory is deprecated,
88
- * this method should not be called directly by library consumers
89
- */
90
public static function create(
91
string $body,
92
?TypeResolver $typeResolver = null,
93
?DescriptionFactory $descriptionFactory = null,
94
?TypeContext $context = null
95
): ?self {
96
- trigger_error(
97
- 'Create using static factory is deprecated, this method should not be called directly
98
- by library consumers',
99
- E_USER_DEPRECATED
100
- );
101
Assert::stringNotEmpty($body);
102
Assert::notNull($typeResolver);
103
Assert::notNull($descriptionFactory);
104
105
// 2. optionally the keyword "static" followed by whitespace
106
// 3. optionally a word with underscores followed by whitespace : as
107
// type for the return value
108
- // 4. optionally an ampersand followed or not by whitespace : as
109
- // a reference
110
- // 5. then optionally a word with underscores followed by () and
111
+ // 4. then optionally a word with underscores followed by () and
112
// whitespace : as method name as used by phpDocumentor
113
- // 6. then a word with underscores, followed by ( and any character
114
+ // 5. then a word with underscores, followed by ( and any character
115
// until a ) and whitespace : as method name with signature
116
- // 7. any remaining text : as description
117
+ // 6. any remaining text : as description
118
if (
119
!preg_match(
120
'/^
121
122
)
123
\s+
124
)?
125
- # Returns reference
126
- (?:
127
- (&)
128
- \s*
129
- )?
130
# Method name
131
(\w_+)
132
# Arguments
133
134
return null;
135
}
136
137
- , $static, $returnType, $returnsReference, $methodName, $argumentLines, $description = $matches;
138
+ , $static, $returnType, $methodName, $argumentLines, $description = $matches;
139
140
$static = $static === 'static';
141
142
143
$returnType = 'void';
144
}
145
146
- $returnsReference = $returnsReference === '&';
147
-
148
$returnType = $typeResolver->resolve($returnType, $context);
149
$description = $descriptionFactory->create($description, $context);
150
151
152
}
153
}
154
155
- return new static(
156
- $methodName,
157
- $arguments,
158
- $returnType,
159
- $static,
160
- $description,
161
- $returnsReference
162
- );
163
+ return new static($methodName, $arguments, $returnType, $static, $description);
164
}
165
166
/**
167
168
}
169
170
/**
171
- * @deprecated Method deprecated, use {@see self::getParameters()}
172
- *
173
* @return array<int, array<string, Type|string>>
174
* @phpstan-return array<int, array{name: string, type: Type}>
175
*/
176
public function getArguments(): array
177
{
178
- trigger_error('Method deprecated, use ::getParameters()', E_USER_DEPRECATED);
179
-
180
- return array_map(
181
- static function (MethodParameter $methodParameter) {
182
- return 'name' => $methodParameter->getName(), 'type' => $methodParameter->getType();
183
- },
184
- $this->parameters
185
- );
186
- }
187
-
188
- /** @return MethodParameter */
189
- public function getParameters(): array
190
- {
191
- return $this->parameters;
192
+ return $this->arguments;
193
}
194
195
/**
196
197
return $this->returnType;
198
}
199
200
- public function returnsReference(): bool
201
- {
202
- return $this->returnsReference;
203
- }
204
-
205
public function __toString(): string
206
{
207
$arguments = ;
208
- foreach ($this->parameters as $parameter) {
209
- $arguments = (string) $parameter;
210
+ foreach ($this->arguments as $argument) {
211
+ $arguments = $argument'type' . ' $' . $argument'name';
212
}
213
214
$argumentStr = '(' . implode(', ', $arguments) . ')';
215
216
217
$methodName = $this->methodName;
218
219
- $reference = $this->returnsReference ? '&' : '';
220
-
221
return $static
222
. ($returnType !== '' ? ($static !== '' ? ' ' : '') . $returnType : '')
223
- . ($methodName !== '' ? ($static !== '' || $returnType !== '' ? ' ' : '') . $reference . $methodName : '')
224
+ . ($methodName !== '' ? ($static !== '' || $returnType !== '' ? ' ' : '') . $methodName : '')
225
. $argumentStr
226
. ($description !== '' ? ' ' . $description : '');
227
}
228
229
230
return $argument;
231
}
232
-
233
- /**
234
- * @param array{name: string, type: Type} $arguments
235
- * @phpstan-param array<int, array{name: string, type: Type}> $arguments
236
- *
237
- * @return MethodParameter
238
- */
239
- private function fromLegacyArguments(array $arguments): array
240
- {
241
- trigger_error(
242
- 'Create method parameters via legacy format is deprecated add parameters via the constructor',
243
- E_USER_DEPRECATED
244
- );
245
-
246
- return array_map(
247
- static function ($arg) {
248
- return new MethodParameter(
249
- $arg'name',
250
- $arg'type'
251
- );
252
- },
253
- $arguments
254
- );
255
- }
256
}
257
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/MethodParameter.php
Deleted
93
1
2
-<?php
3
-/**
4
- * This file is part of phpDocumentor.
5
- *
6
- * For the full copyright and license information, please view the LICENSE
7
- * file that was distributed with this source code.
8
- *
9
- * @link http://phpdoc.org
10
- */
11
-
12
-declare(strict_types=1);
13
-
14
-namespace phpDocumentor\Reflection\DocBlock\Tags;
15
-
16
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\MethodParameterFactory;
17
-use phpDocumentor\Reflection\Type;
18
-
19
-final class MethodParameter
20
-{
21
- private Type $type;
22
-
23
- private bool $isReference;
24
-
25
- private bool $isVariadic;
26
-
27
- private string $name;
28
-
29
- /** @var mixed */
30
- private $defaultValue;
31
-
32
- public const NO_DEFAULT_VALUE = '__NO_VALUE__';
33
-
34
- /**
35
- * @param mixed $defaultValue
36
- */
37
- public function __construct(
38
- string $name,
39
- Type $type,
40
- bool $isReference = false,
41
- bool $isVariadic = false,
42
- $defaultValue = self::NO_DEFAULT_VALUE
43
- ) {
44
- $this->type = $type;
45
- $this->isReference = $isReference;
46
- $this->isVariadic = $isVariadic;
47
- $this->name = $name;
48
- $this->defaultValue = $defaultValue;
49
- }
50
-
51
- public function getName(): string
52
- {
53
- return $this->name;
54
- }
55
-
56
- public function getType(): Type
57
- {
58
- return $this->type;
59
- }
60
-
61
- public function isReference(): bool
62
- {
63
- return $this->isReference;
64
- }
65
-
66
- public function isVariadic(): bool
67
- {
68
- return $this->isVariadic;
69
- }
70
-
71
- public function getDefaultValue(): ?string
72
- {
73
- if ($this->defaultValue === self::NO_DEFAULT_VALUE) {
74
- return null;
75
- }
76
-
77
- return (new MethodParameterFactory())->format($this->defaultValue);
78
- }
79
-
80
- public function __toString(): string
81
- {
82
- return $this->getType() . ' ' .
83
- ($this->isReference() ? '&' : '') .
84
- ($this->isVariadic() ? '...' : '') .
85
- '$' . $this->getName() .
86
- (
87
- $this->defaultValue !== self::NO_DEFAULT_VALUE ?
88
- (new MethodParameterFactory())->format($this->defaultValue) :
89
- ''
90
- );
91
- }
92
-}
93
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Mixin.php
Deleted
53
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-/**
7
- * This file is part of phpDocumentor.
8
- *
9
- * For the full copyright and license information, please view the LICENSE
10
- * file that was distributed with this source code.
11
- *
12
- * @link http://phpdoc.org
13
- */
14
-
15
-namespace phpDocumentor\Reflection\DocBlock\Tags;
16
-
17
-use phpDocumentor\Reflection\DocBlock\Description;
18
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
19
-use phpDocumentor\Reflection\Type;
20
-use phpDocumentor\Reflection\TypeResolver;
21
-use phpDocumentor\Reflection\Types\Context as TypeContext;
22
-use Webmozart\Assert\Assert;
23
-
24
-/**
25
- * Reflection class for a {@}mixin tag in a Docblock.
26
- */
27
-final class Mixin extends TagWithType implements Factory\StaticMethod
28
-{
29
- public function __construct(Type $type, ?Description $description = null)
30
- {
31
- $this->name = 'mixin';
32
- $this->type = $type;
33
- $this->description = $description;
34
- }
35
-
36
- public static function create(
37
- string $body,
38
- ?TypeResolver $typeResolver = null,
39
- ?DescriptionFactory $descriptionFactory = null,
40
- ?TypeContext $context = null
41
- ): self {
42
- Assert::notNull($typeResolver);
43
- Assert::notNull($descriptionFactory);
44
-
45
- $type, $description = self::extractTypeFromBody($body);
46
-
47
- $type = $typeResolver->resolve($type, $context);
48
- $description = $descriptionFactory->create($description, $context);
49
-
50
- return new static($type, $description);
51
- }
52
-}
53
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php
Changed
60
1
2
3
namespace phpDocumentor\Reflection\DocBlock\Tags;
4
5
-use Doctrine\Deprecations\Deprecation;
6
use phpDocumentor\Reflection\DocBlock\Description;
7
use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
8
use phpDocumentor\Reflection\Type;
9
10
*/
11
final class Param extends TagWithType implements Factory\StaticMethod
12
{
13
- private ?string $variableName = null;
14
+ /** @var string|null */
15
+ private $variableName;
16
17
/** @var bool determines whether this is a variadic argument */
18
- private bool $isVariadic;
19
+ private $isVariadic;
20
21
/** @var bool determines whether this is passed by reference */
22
- private bool $isReference;
23
+ private $isReference;
24
25
public function __construct(
26
?string $variableName,
27
28
$this->isReference = $isReference;
29
}
30
31
- /**
32
- * @deprecated Create using static factory is deprecated,
33
- * this method should not be called directly by library consumers
34
- */
35
public static function create(
36
string $body,
37
?TypeResolver $typeResolver = null,
38
?DescriptionFactory $descriptionFactory = null,
39
?TypeContext $context = null
40
): self {
41
- Deprecation::triggerIfCalledFromOutside(
42
- 'phpdocumentor/reflection-docblock',
43
- 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361',
44
- 'Create using static factory is deprecated, this method should not be called directly
45
- by library consumers',
46
- );
47
-
48
Assert::stringNotEmpty($body);
49
Assert::notNull($typeResolver);
50
Assert::notNull($descriptionFactory);
51
52
}
53
54
$variableName = '';
55
- if ($this->variableName !== null && $this->variableName !== '') {
56
+ if ($this->variableName) {
57
$variableName .= ($this->isReference ? '&' : '') . ($this->isVariadic ? '...' : '');
58
$variableName .= '$' . $this->variableName;
59
}
60
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php
Changed
59
1
2
3
namespace phpDocumentor\Reflection\DocBlock\Tags;
4
5
-use Doctrine\Deprecations\Deprecation;
6
use phpDocumentor\Reflection\DocBlock\Description;
7
use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
8
use phpDocumentor\Reflection\Type;
9
10
*/
11
final class Property extends TagWithType implements Factory\StaticMethod
12
{
13
- protected ?string $variableName = null;
14
+ /** @var string|null */
15
+ protected $variableName;
16
17
public function __construct(?string $variableName, ?Type $type = null, ?Description $description = null)
18
{
19
20
$this->description = $description;
21
}
22
23
- /**
24
- * @deprecated Create using static factory is deprecated,
25
- * this method should not be called directly by library consumers
26
- */
27
public static function create(
28
string $body,
29
?TypeResolver $typeResolver = null,
30
?DescriptionFactory $descriptionFactory = null,
31
?TypeContext $context = null
32
): self {
33
- Deprecation::triggerIfCalledFromOutside(
34
- 'phpdocumentor/reflection-docblock',
35
- 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361',
36
- 'Create using static factory is deprecated, this method should not be called directly
37
- by library consumers',
38
- );
39
-
40
Assert::stringNotEmpty($body);
41
Assert::notNull($typeResolver);
42
Assert::notNull($descriptionFactory);
43
44
*/
45
public function __toString(): string
46
{
47
- if ($this->description !== null) {
48
+ if ($this->description) {
49
$description = $this->description->render();
50
} else {
51
$description = '';
52
}
53
54
- if ($this->variableName !== null && $this->variableName !== '') {
55
+ if ($this->variableName) {
56
$variableName = '$' . $this->variableName;
57
} else {
58
$variableName = '';
59
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php
Changed
59
1
2
3
namespace phpDocumentor\Reflection\DocBlock\Tags;
4
5
-use Doctrine\Deprecations\Deprecation;
6
use phpDocumentor\Reflection\DocBlock\Description;
7
use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
8
use phpDocumentor\Reflection\Type;
9
10
*/
11
final class PropertyRead extends TagWithType implements Factory\StaticMethod
12
{
13
- protected ?string $variableName = null;
14
+ /** @var string|null */
15
+ protected $variableName;
16
17
public function __construct(?string $variableName, ?Type $type = null, ?Description $description = null)
18
{
19
20
$this->description = $description;
21
}
22
23
- /**
24
- * @deprecated Create using static factory is deprecated,
25
- * this method should not be called directly by library consumers
26
- */
27
public static function create(
28
string $body,
29
?TypeResolver $typeResolver = null,
30
?DescriptionFactory $descriptionFactory = null,
31
?TypeContext $context = null
32
): self {
33
- Deprecation::triggerIfCalledFromOutside(
34
- 'phpdocumentor/reflection-docblock',
35
- 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361',
36
- 'Create using static factory is deprecated, this method should not be called directly
37
- by library consumers',
38
- );
39
-
40
Assert::stringNotEmpty($body);
41
Assert::notNull($typeResolver);
42
Assert::notNull($descriptionFactory);
43
44
*/
45
public function __toString(): string
46
{
47
- if ($this->description !== null) {
48
+ if ($this->description) {
49
$description = $this->description->render();
50
} else {
51
$description = '';
52
}
53
54
- if ($this->variableName !== null && $this->variableName !== '') {
55
+ if ($this->variableName) {
56
$variableName = '$' . $this->variableName;
57
} else {
58
$variableName = '';
59
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php
Changed
43
1
2
3
namespace phpDocumentor\Reflection\DocBlock\Tags;
4
5
-use Doctrine\Deprecations\Deprecation;
6
use phpDocumentor\Reflection\DocBlock\Description;
7
use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
8
use phpDocumentor\Reflection\Type;
9
10
*/
11
final class PropertyWrite extends TagWithType implements Factory\StaticMethod
12
{
13
- protected string $variableName;
14
+ /** @var string */
15
+ protected $variableName;
16
17
public function __construct(?string $variableName, ?Type $type = null, ?Description $description = null)
18
{
19
20
$this->description = $description;
21
}
22
23
- /**
24
- * @deprecated Create using static factory is deprecated,
25
- * this method should not be called directly by library consumers
26
- */
27
public static function create(
28
string $body,
29
?TypeResolver $typeResolver = null,
30
?DescriptionFactory $descriptionFactory = null,
31
?TypeContext $context = null
32
): self {
33
- Deprecation::triggerIfCalledFromOutside(
34
- 'phpdocumentor/reflection-docblock',
35
- 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361',
36
- 'Create using static factory is deprecated, this method should not be called directly
37
- by library consumers',
38
- );
39
-
40
Assert::stringNotEmpty($body);
41
Assert::notNull($typeResolver);
42
Assert::notNull($descriptionFactory);
43
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php
Changed
11
1
2
*/
3
final class Fqsen implements Reference
4
{
5
- private RealFqsen $fqsen;
6
+ /** @var RealFqsen */
7
+ private $fqsen;
8
9
public function __construct(RealFqsen $fqsen)
10
{
11
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.php
Changed
11
1
2
*/
3
final class Url implements Reference
4
{
5
- private string $uri;
6
+ /** @var string */
7
+ private $uri;
8
9
public function __construct(string $uri)
10
{
11
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php
Changed
51
1
2
3
namespace phpDocumentor\Reflection\DocBlock\Tags;
4
5
-use Doctrine\Deprecations\Deprecation;
6
use phpDocumentor\Reflection\DocBlock\Description;
7
use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
8
use phpDocumentor\Reflection\Type;
9
10
$this->description = $description;
11
}
12
13
- /**
14
- * @deprecated Create using static factory is deprecated,
15
- * this method should not be called directly by library consumers
16
- */
17
public static function create(
18
string $body,
19
?TypeResolver $typeResolver = null,
20
?DescriptionFactory $descriptionFactory = null,
21
?TypeContext $context = null
22
): self {
23
- Deprecation::triggerIfCalledFromOutside(
24
- 'phpdocumentor/reflection-docblock',
25
- 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361',
26
- 'Create using static factory is deprecated, this method should not be called directly
27
- by library consumers',
28
- );
29
-
30
Assert::notNull($typeResolver);
31
Assert::notNull($descriptionFactory);
32
33
34
35
return new static($type, $description);
36
}
37
+
38
+ public function __toString(): string
39
+ {
40
+ if ($this->description) {
41
+ $description = $this->description->render();
42
+ } else {
43
+ $description = '';
44
+ }
45
+
46
+ $type = $this->type ? '' . $this->type : 'mixed';
47
+
48
+ return $type . ($description !== '' ? ' ' . $description : '');
49
+ }
50
}
51
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php
Changed
15
1
2
*/
3
final class See extends BaseTag implements Factory\StaticMethod
4
{
5
- protected string $name = 'see';
6
+ /** @var string */
7
+ protected $name = 'see';
8
9
- protected Reference $refers;
10
+ /** @var Reference */
11
+ protected $refers;
12
13
/**
14
* Initializes this tag.
15
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php
Changed
38
1
2
*/
3
final class Since extends BaseTag implements Factory\StaticMethod
4
{
5
- protected string $name = 'since';
6
+ /** @var string */
7
+ protected $name = 'since';
8
9
/**
10
* PCRE regular expression matching a version vector.
11
12
)';
13
14
/** @var string|null The version vector. */
15
- private ?string $version = null;
16
+ private $version;
17
18
public function __construct(?string $version = null, ?Description $description = null)
19
{
20
21
?DescriptionFactory $descriptionFactory = null,
22
?TypeContext $context = null
23
): ?self {
24
- if ($body === null || $body === '') {
25
+ if (empty($body)) {
26
return new static();
27
}
28
29
30
*/
31
public function __toString(): string
32
{
33
- if ($this->description !== null) {
34
+ if ($this->description) {
35
$description = $this->description->render();
36
} else {
37
$description = '';
38
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php
Changed
19
1
2
*/
3
final class Source extends BaseTag implements Factory\StaticMethod
4
{
5
- protected string $name = 'source';
6
+ /** @var string */
7
+ protected $name = 'source';
8
9
/** @var int The starting line, relative to the structural element's location. */
10
- private int $startingLine;
11
+ private $startingLine;
12
13
/** @var int|null The number of lines, relative to the starting line. NULL means "to the end". */
14
- private ?int $lineCount = null;
15
+ private $lineCount;
16
17
/**
18
* @param int|string $startingLine should be a to int convertible value
19
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TagWithType.php
Changed
50
1
2
3
namespace phpDocumentor\Reflection\DocBlock\Tags;
4
5
-use InvalidArgumentException;
6
use phpDocumentor\Reflection\Type;
7
8
use function in_array;
9
-use function sprintf;
10
use function strlen;
11
use function substr;
12
use function trim;
13
14
abstract class TagWithType extends BaseTag
15
{
16
/** @var ?Type */
17
- protected ?Type $type = null;
18
+ protected $type;
19
20
/**
21
* Returns the type section of the variable.
22
23
}
24
}
25
26
- if ($nestingLevel < 0 || $nestingLevel > 0) {
27
- throw new InvalidArgumentException(
28
- sprintf('Could not find type in %s, please check for malformed notations', $body)
29
- );
30
- }
31
-
32
$description = trim(substr($body, strlen($type)));
33
34
return $type, $description;
35
}
36
-
37
- public function __toString(): string
38
- {
39
- if ($this->description) {
40
- $description = $this->description->render();
41
- } else {
42
- $description = '';
43
- }
44
-
45
- $type = (string) $this->type;
46
-
47
- return $type . ($description !== '' ? ($type !== '' ? ' ' : '') . $description : '');
48
- }
49
}
50
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Template.php
Deleted
94
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-/**
7
- * This file is part of phpDocumentor.
8
- *
9
- * For the full copyright and license information, please view the LICENSE
10
- * file that was distributed with this source code.
11
- *
12
- * @link http://phpdoc.org
13
- */
14
-
15
-namespace phpDocumentor\Reflection\DocBlock\Tags;
16
-
17
-use Doctrine\Deprecations\Deprecation;
18
-use phpDocumentor\Reflection\DocBlock\Description;
19
-use phpDocumentor\Reflection\DocBlock\Tag;
20
-use phpDocumentor\Reflection\Type;
21
-
22
-/**
23
- * Reflection class for a {@}template tag in a Docblock.
24
- */
25
-final class Template extends BaseTag
26
-{
27
- /** @var non-empty-string */
28
- private string $templateName;
29
-
30
- /** @var ?Type The real type */
31
- private ?Type $bound;
32
-
33
- private ?Type $default;
34
-
35
- /** @param non-empty-string $templateName */
36
- public function __construct(
37
- string $templateName,
38
- ?Type $bound = null,
39
- ?Type $default = null,
40
- ?Description $description = null
41
- ) {
42
- $this->name = 'template';
43
- $this->templateName = $templateName;
44
- $this->bound = $bound;
45
- $this->default = $default;
46
- $this->description = $description;
47
- }
48
-
49
- /**
50
- * @deprecated Create using static factory is deprecated,
51
- * this method should not be called directly by library consumers
52
- */
53
- public static function create(string $body): ?Tag
54
- {
55
- Deprecation::trigger(
56
- 'phpdocumentor/reflection-docblock',
57
- 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361',
58
- 'Create using static factory is deprecated, this method should not be called directly
59
- by library consumers',
60
- );
61
-
62
- return null;
63
- }
64
-
65
- public function getTemplateName(): string
66
- {
67
- return $this->templateName;
68
- }
69
-
70
- public function getBound(): ?Type
71
- {
72
- return $this->bound;
73
- }
74
-
75
- public function getDefault(): ?Type
76
- {
77
- return $this->default;
78
- }
79
-
80
- public function __toString(): string
81
- {
82
- $bound = $this->bound !== null ? ' of ' . $this->bound : '';
83
- $default = $this->default !== null ? ' = ' . $this->default : '';
84
-
85
- if ($this->description) {
86
- $description = $this->description->render();
87
- } else {
88
- $description = '';
89
- }
90
-
91
- return $this->templateName . $bound . $default . ($description !== '' ? ' ' . $description : '');
92
- }
93
-}
94
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TemplateCovariant.php
Deleted
53
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-/**
7
- * This file is part of phpDocumentor.
8
- *
9
- * For the full copyright and license information, please view the LICENSE
10
- * file that was distributed with this source code.
11
- *
12
- * @link http://phpdoc.org
13
- */
14
-
15
-namespace phpDocumentor\Reflection\DocBlock\Tags;
16
-
17
-use phpDocumentor\Reflection\DocBlock\Description;
18
-use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
19
-use phpDocumentor\Reflection\Type;
20
-use phpDocumentor\Reflection\TypeResolver;
21
-use phpDocumentor\Reflection\Types\Context as TypeContext;
22
-use Webmozart\Assert\Assert;
23
-
24
-/**
25
- * Reflection class for a {@}template-covariant tag in a Docblock.
26
- */
27
-final class TemplateCovariant extends TagWithType implements Factory\StaticMethod
28
-{
29
- public function __construct(Type $type, ?Description $description = null)
30
- {
31
- $this->name = 'template-covariant';
32
- $this->type = $type;
33
- $this->description = $description;
34
- }
35
-
36
- public static function create(
37
- string $body,
38
- ?TypeResolver $typeResolver = null,
39
- ?DescriptionFactory $descriptionFactory = null,
40
- ?TypeContext $context = null
41
- ): self {
42
- Assert::notNull($typeResolver);
43
- Assert::notNull($descriptionFactory);
44
-
45
- $type, $description = self::extractTypeFromBody($body);
46
-
47
- $type = $typeResolver->resolve($type, $context);
48
- $description = $descriptionFactory->create($description, $context);
49
-
50
- return new static($type, $description);
51
- }
52
-}
53
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TemplateExtends.php
Deleted
31
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-/**
7
- * This file is part of phpDocumentor.
8
- *
9
- * For the full copyright and license information, please view the LICENSE
10
- * file that was distributed with this source code.
11
- *
12
- * @link http://phpdoc.org
13
- */
14
-
15
-namespace phpDocumentor\Reflection\DocBlock\Tags;
16
-
17
-use phpDocumentor\Reflection\DocBlock\Description;
18
-use phpDocumentor\Reflection\Type;
19
-
20
-/**
21
- * Reflection class for a {@}template-extends tag in a Docblock.
22
- */
23
-final class TemplateExtends extends Extends_
24
-{
25
- public function __construct(Type $type, ?Description $description = null)
26
- {
27
- parent::__construct($type, $description);
28
- $this->name = 'template-extends';
29
- }
30
-}
31
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TemplateImplements.php
Deleted
31
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-/**
7
- * This file is part of phpDocumentor.
8
- *
9
- * For the full copyright and license information, please view the LICENSE
10
- * file that was distributed with this source code.
11
- *
12
- * @link http://phpdoc.org
13
- */
14
-
15
-namespace phpDocumentor\Reflection\DocBlock\Tags;
16
-
17
-use phpDocumentor\Reflection\DocBlock\Description;
18
-use phpDocumentor\Reflection\Type;
19
-
20
-/**
21
- * Reflection class for a {@}template-implements tag in a Docblock.
22
- */
23
-final class TemplateImplements extends Implements_
24
-{
25
- public function __construct(Type $type, ?Description $description = null)
26
- {
27
- parent::__construct($type, $description);
28
- $this->name = 'template-implements';
29
- }
30
-}
31
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php
Changed
19
1
2
3
return new static($type, $description);
4
}
5
+
6
+ public function __toString(): string
7
+ {
8
+ if ($this->description) {
9
+ $description = $this->description->render();
10
+ } else {
11
+ $description = '';
12
+ }
13
+
14
+ $type = (string) $this->type;
15
+
16
+ return $type . ($description !== '' ? ($type !== '' ? ' ' : '') . $description : '');
17
+ }
18
}
19
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php
Changed
15
1
2
*/
3
final class Uses extends BaseTag implements Factory\StaticMethod
4
{
5
- protected string $name = 'uses';
6
+ /** @var string */
7
+ protected $name = 'uses';
8
9
- protected Fqsen $refers;
10
+ /** @var Fqsen */
11
+ protected $refers;
12
13
/**
14
* Initializes this tag.
15
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php
Changed
58
1
2
3
namespace phpDocumentor\Reflection\DocBlock\Tags;
4
5
-use Doctrine\Deprecations\Deprecation;
6
use phpDocumentor\Reflection\DocBlock\Description;
7
use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
8
use phpDocumentor\Reflection\Type;
9
10
*/
11
final class Var_ extends TagWithType implements Factory\StaticMethod
12
{
13
- protected ?string $variableName = '';
14
+ /** @var string|null */
15
+ protected $variableName = '';
16
17
public function __construct(?string $variableName, ?Type $type = null, ?Description $description = null)
18
{
19
20
$this->description = $description;
21
}
22
23
- /**
24
- * @deprecated Create using static factory is deprecated,
25
- * this method should not be called directly by library consumers
26
- */
27
public static function create(
28
string $body,
29
?TypeResolver $typeResolver = null,
30
?DescriptionFactory $descriptionFactory = null,
31
?TypeContext $context = null
32
): self {
33
- Deprecation::triggerIfCalledFromOutside(
34
- 'phpdocumentor/reflection-docblock',
35
- 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361',
36
- 'Create using static factory is deprecated, this method should not be called directly
37
- by library consumers',
38
- );
39
Assert::stringNotEmpty($body);
40
Assert::notNull($typeResolver);
41
Assert::notNull($descriptionFactory);
42
43
*/
44
public function __toString(): string
45
{
46
- if ($this->description !== null) {
47
+ if ($this->description) {
48
$description = $this->description->render();
49
} else {
50
$description = '';
51
}
52
53
- if ($this->variableName !== null && $this->variableName !== '') {
54
+ if ($this->variableName) {
55
$variableName = '$' . $this->variableName;
56
} else {
57
$variableName = '';
58
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php
Changed
29
1
2
*/
3
final class Version extends BaseTag implements Factory\StaticMethod
4
{
5
- protected string $name = 'version';
6
+ /** @var string */
7
+ protected $name = 'version';
8
9
/**
10
* PCRE regular expression matching a version vector.
11
12
)';
13
14
/** @var string|null The version vector. */
15
- private ?string $version = null;
16
+ private $version;
17
18
public function __construct(?string $version = null, ?Description $description = null)
19
{
20
21
?DescriptionFactory $descriptionFactory = null,
22
?TypeContext $context = null
23
): ?self {
24
- if ($body === null || $body === '') {
25
+ if (empty($body)) {
26
return new static();
27
}
28
29
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php
Changed
140
1
2
use phpDocumentor\Reflection\DocBlock\StandardTagFactory;
3
use phpDocumentor\Reflection\DocBlock\Tag;
4
use phpDocumentor\Reflection\DocBlock\TagFactory;
5
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\AbstractPHPStanFactory;
6
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\ExtendsFactory;
7
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\Factory;
8
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\ImplementsFactory;
9
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\MethodFactory;
10
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\ParamFactory;
11
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\PropertyFactory;
12
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\PropertyReadFactory;
13
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\PropertyWriteFactory;
14
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\ReturnFactory;
15
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\TemplateExtendsFactory;
16
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\TemplateFactory;
17
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\TemplateImplementsFactory;
18
-use phpDocumentor\Reflection\DocBlock\Tags\Factory\VarFactory;
19
use Webmozart\Assert\Assert;
20
21
use function array_shift;
22
23
24
final class DocBlockFactory implements DocBlockFactoryInterface
25
{
26
- private DocBlock\DescriptionFactory $descriptionFactory;
27
+ /** @var DocBlock\DescriptionFactory */
28
+ private $descriptionFactory;
29
30
- private TagFactory $tagFactory;
31
+ /** @var DocBlock\TagFactory */
32
+ private $tagFactory;
33
34
/**
35
* Initializes this factory with the required subcontractors.
36
37
public function __construct(DescriptionFactory $descriptionFactory, TagFactory $tagFactory)
38
{
39
$this->descriptionFactory = $descriptionFactory;
40
- $this->tagFactory = $tagFactory;
41
+ $this->tagFactory = $tagFactory;
42
}
43
44
/**
45
* Factory method for easy instantiation.
46
*
47
- * @param array<string, class-string<Tag>|Factory> $additionalTags
48
+ * @param array<string, class-string<Tag>> $additionalTags
49
*/
50
- public static function createInstance(array $additionalTags = ): DocBlockFactoryInterface
51
+ public static function createInstance(array $additionalTags = ): self
52
{
53
- $fqsenResolver = new FqsenResolver();
54
- $tagFactory = new StandardTagFactory($fqsenResolver);
55
+ $fqsenResolver = new FqsenResolver();
56
+ $tagFactory = new StandardTagFactory($fqsenResolver);
57
$descriptionFactory = new DescriptionFactory($tagFactory);
58
- $typeResolver = new TypeResolver($fqsenResolver);
59
-
60
- $phpstanTagFactory = new AbstractPHPStanFactory(
61
- new ParamFactory($typeResolver, $descriptionFactory),
62
- new VarFactory($typeResolver, $descriptionFactory),
63
- new ReturnFactory($typeResolver, $descriptionFactory),
64
- new PropertyFactory($typeResolver, $descriptionFactory),
65
- new PropertyReadFactory($typeResolver, $descriptionFactory),
66
- new PropertyWriteFactory($typeResolver, $descriptionFactory),
67
- new MethodFactory($typeResolver, $descriptionFactory),
68
- new ImplementsFactory($typeResolver, $descriptionFactory),
69
- new ExtendsFactory($typeResolver, $descriptionFactory),
70
- new TemplateFactory($typeResolver, $descriptionFactory),
71
- new TemplateImplementsFactory($typeResolver, $descriptionFactory),
72
- new TemplateExtendsFactory($typeResolver, $descriptionFactory),
73
- );
74
75
$tagFactory->addService($descriptionFactory);
76
- $tagFactory->addService($typeResolver);
77
- $tagFactory->registerTagHandler('param', $phpstanTagFactory);
78
- $tagFactory->registerTagHandler('var', $phpstanTagFactory);
79
- $tagFactory->registerTagHandler('return', $phpstanTagFactory);
80
- $tagFactory->registerTagHandler('property', $phpstanTagFactory);
81
- $tagFactory->registerTagHandler('property-read', $phpstanTagFactory);
82
- $tagFactory->registerTagHandler('property-write', $phpstanTagFactory);
83
- $tagFactory->registerTagHandler('method', $phpstanTagFactory);
84
- $tagFactory->registerTagHandler('extends', $phpstanTagFactory);
85
- $tagFactory->registerTagHandler('implements', $phpstanTagFactory);
86
- $tagFactory->registerTagHandler('template', $phpstanTagFactory);
87
- $tagFactory->registerTagHandler('template-extends', $phpstanTagFactory);
88
- $tagFactory->registerTagHandler('template-implements', $phpstanTagFactory);
89
+ $tagFactory->addService(new TypeResolver($fqsenResolver));
90
91
$docBlockFactory = new self($descriptionFactory, $tagFactory);
92
foreach ($additionalTags as $tagName => $tagHandler) {
93
94
}
95
96
/**
97
- * @param class-string<Tag>|Factory $handler
98
+ * @param class-string<Tag> $handler
99
*/
100
- public function registerTagHandler(string $tagName, $handler): void
101
+ public function registerTagHandler(string $tagName, string $handler): void
102
{
103
$this->tagFactory->registerTagHandler($tagName, $handler);
104
}
105
106
}
107
108
// phpcs:disable
109
-
110
/**
111
* Splits the DocBlock into a template marker, summary, description and block of tags.
112
*
113
114
*
115
* @author Richard van Velzen (@_richardJ) Special thanks to Richard for the regex responsible for the split.
116
*/
117
- private function splitDocBlock(string $comment): array
118
+ private function splitDocBlock(string $comment) : array
119
{
120
// phpcs:enable
121
// Performance improvement cheat: if the first character is an @ then only tags are in this DocBlock. This
122
123
/**
124
* Creates the tag objects.
125
*
126
- * @param string $tags Tag block to parse.
127
+ * @param string $tags Tag block to parse.
128
* @param Types\Context $context Context of the parsed Tag
129
*
130
* @return DocBlock\Tag
131
132
}
133
134
$result = ;
135
- $lines = $this->splitTagBlockIntoTagLines($tags);
136
+ $lines = $this->splitTagBlockIntoTagLines($tags);
137
foreach ($lines as $key => $tagLine) {
138
$result$key = $this->tagFactory->create(trim($tagLine), $context);
139
}
140
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php
Changed
10
1
2
*
3
* @param array<string, class-string<Tag>> $additionalTags
4
*/
5
- public static function createInstance(array $additionalTags = ): self;
6
+ public static function createInstance(array $additionalTags = ): DocBlockFactory;
7
8
/**
9
* @param string|object $docblock
10
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/reflection-docblock/src/Utils.php
Changed
10
1
2
*
3
* This function is inspired by {@link https://github.com/thecodingmachine/safe/blob/master/generated/pcre.php}. But
4
* since this library is all about performance we decided to strip everything we don't need. Reducing the amount
5
- * of files that have to be loaded, etc.
6
+ * of files that have to be loaded, ect.
7
*
8
* @param string $pattern The pattern to search for, as a string.
9
* @param string $subject The input string.
10
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/.phpdoc
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/.phpdoc/template
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/.phpdoc/template/base.html.twig
Deleted
17
1
2
-{% extends 'layout.html.twig' %}
3
-
4
-{% set topMenu = {
5
- "menu":
6
- { "name": "About", "url": "https://phpdoc.org/"},
7
- { "name": "Components", "url": "https://phpdoc.org/components.html"},
8
- { "name": "Documentation", "url": "https://docs.phpdoc.org/"},
9
- ,
10
- "social":
11
- { "iconClass": "fab fa-mastodon", "url": "https://phpc.social/@phpdoc"},
12
- { "iconClass": "fab fa-github", "url": "https://github.com/phpdocumentor/typeresolver"},
13
- { "iconClass": "fas fa-envelope-open-text", "url": "https://github.com/orgs/phpDocumentor/discussions"}
14
-
15
-}
16
-%}
17
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/composer.json
Changed
39
1
2
}
3
,
4
"require": {
5
- "php": "^7.3 || ^8.0",
6
- "phpdocumentor/reflection-common": "^2.0",
7
- "phpstan/phpdoc-parser": "^1.18|^2.0",
8
- "doctrine/deprecations": "^1.0"
9
+ "php": "^7.2 || ^8.0",
10
+ "phpdocumentor/reflection-common": "^2.0"
11
},
12
"require-dev": {
13
"ext-tokenizer": "*",
14
- "phpunit/phpunit": "^9.5",
15
- "phpstan/phpstan": "^1.8",
16
- "phpstan/phpstan-phpunit": "^1.1",
17
- "phpstan/extension-installer": "^1.1",
18
- "vimeo/psalm": "^4.25",
19
- "rector/rector": "^0.13.9",
20
- "phpbench/phpbench": "^1.2"
21
+ "psalm/phar": "^4.8"
22
},
23
"autoload": {
24
"psr-4": {
25
26
"branch-alias": {
27
"dev-1.x": "1.x-dev"
28
}
29
- },
30
- "config": {
31
- "platform": {
32
- "php": "7.3.0"
33
- },
34
- "allow-plugins": {
35
- "phpstan/extension-installer": true
36
- }
37
}
38
}
39
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/docs
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/docs/getting-started.rst
Deleted
34
1
2
-===============
3
-Getting started
4
-===============
5
-
6
-On this page you will find a brief introduction on how to use the TypeResolver in your project.
7
-
8
-Installation
9
-============
10
-
11
-The TypeResolver is available on Packagist and can be installed using Composer:
12
-
13
-.. code:: bash
14
- composer require phpdocumentor/type-resolver
15
-
16
-
17
-General usage
18
-===========
19
-
20
-After you installed the TypeResolver you can use it in your project. This can be done by creating a new instance
21
-of the :php:class:`\phpDocumentor\Reflection\TypeResolver` class and calling
22
-:php:method:`\phpDocumentor\Reflection\TypeResolver::resolve()` with the type you want to resolve.
23
-
24
-.. code:: php
25
- $typeResolver = new \phpDocumentor\Reflection\TypeResolver();
26
- $type = $typeResolver->resolve('string');
27
- echo get_class($type); // phpDocumentor\Reflection\Types\String_
28
-
29
-The real power of this resolver is in its capability to expand partial class names into fully qualified class names;
30
-but in order to do that we need an additional :php:class:`\phpDocumentor\Reflection\Types\Context` class that
31
-will inform the resolver in which namespace the given expression occurs and which namespace aliases (or imports) apply.
32
-
33
-Read more about the Context class in the next section.
34
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/docs/index.rst
Deleted
19
1
2
-=============
3
-Type resolver
4
-=============
5
-
6
-This project part of the phpDocumentor project. It is capable of creating an object structure of the type
7
-specifications found in the PHPDoc blocks of a project. This can be useful for static analysis of a project
8
-or other behavior that requires knowledge of the types used in a project like automatically build forms.
9
-
10
-This project aims to cover all types that are available in PHPDoc and PHP itself. And is open for extension by
11
-third party developers.
12
-
13
-.. toctree::
14
- :maxdepth: 2
15
- :hidden:
16
-
17
- index
18
- getting-started
19
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/phpdoc.dist.xml
Deleted
48
1
2
-<?xml version="1.0" encoding="UTF-8" ?>
3
-<phpdocumentor
4
- configVersion="3"
5
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6
- xmlns="https://www.phpdoc.org"
7
- xsi:noNamespaceSchemaLocation="data/xsd/phpdoc.xsd"
8
->
9
- <title>Type Resolver</title>
10
- <paths>
11
- <output>build/docs</output>
12
- </paths>
13
- <version number="0.2.0">
14
- <folder>latest</folder>
15
- <api>
16
- <source dsn="./">
17
- <path>src/</path>
18
- </source>
19
- <output>api</output>
20
- <ignore hidden="true" symlinks="true">
21
- <path>tests/**/*</path>
22
- <path>build/**/*</path>
23
- <path>var/**/*</path>
24
- <path>vendor/**/*</path>
25
- </ignore>
26
- <extensions>
27
- <extension>php</extension>
28
- </extensions>
29
- <ignore-tags>
30
- <ignore-tag>template</ignore-tag>
31
- <ignore-tag>template-extends</ignore-tag>
32
- <ignore-tag>template-implements</ignore-tag>
33
- <ignore-tag>extends</ignore-tag>
34
- <ignore-tag>implements</ignore-tag>
35
- </ignore-tags>
36
- <default-package-name>phpDocumentor</default-package-name>
37
- </api>
38
- <guide>
39
- <source dsn=".">
40
- <path>docs</path>
41
- </source>
42
- <output>guides</output>
43
- </guide>
44
- </version>
45
- <setting name="guides.enabled" value="true"/>
46
- <template name="default" />
47
-</phpdocumentor>
48
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/ArrayShape.php
Deleted
54
1
2
-<?php
3
-/*
4
- * This file is part of phpDocumentor.
5
- *
6
- * For the full copyright and license information, please view the LICENSE
7
- * file that was distributed with this source code.
8
- *
9
- * @link http://phpdoc.org
10
- *
11
- */
12
-
13
-declare(strict_types=1);
14
-
15
-namespace phpDocumentor\Reflection\PseudoTypes;
16
-
17
-use phpDocumentor\Reflection\PseudoType;
18
-use phpDocumentor\Reflection\Type;
19
-use phpDocumentor\Reflection\Types\Array_;
20
-use phpDocumentor\Reflection\Types\ArrayKey;
21
-use phpDocumentor\Reflection\Types\Mixed_;
22
-
23
-use function implode;
24
-
25
-/** @psalm-immutable */
26
-class ArrayShape implements PseudoType
27
-{
28
- /** @var ArrayShapeItem */
29
- private $items;
30
-
31
- public function __construct(ArrayShapeItem ...$items)
32
- {
33
- $this->items = $items;
34
- }
35
-
36
- /**
37
- * @return ArrayShapeItem
38
- */
39
- public function getItems(): array
40
- {
41
- return $this->items;
42
- }
43
-
44
- public function underlyingType(): Type
45
- {
46
- return new Array_(new Mixed_(), new ArrayKey());
47
- }
48
-
49
- public function __toString(): string
50
- {
51
- return 'array{' . implode(', ', $this->items) . '}';
52
- }
53
-}
54
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/ArrayShapeItem.php
Deleted
20
1
2
-<?php
3
-/*
4
- * This file is part of phpDocumentor.
5
- *
6
- * For the full copyright and license information, please view the LICENSE
7
- * file that was distributed with this source code.
8
- *
9
- * @link http://phpdoc.org
10
- *
11
- */
12
-
13
-declare(strict_types=1);
14
-
15
-namespace phpDocumentor\Reflection\PseudoTypes;
16
-
17
-class ArrayShapeItem extends ShapeItem
18
-{
19
-}
20
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/ConstExpression.php
Deleted
57
1
2
-<?php
3
-/*
4
- * This file is part of phpDocumentor.
5
- *
6
- * For the full copyright and license information, please view the LICENSE
7
- * file that was distributed with this source code.
8
- *
9
- * @link http://phpdoc.org
10
- *
11
- */
12
-
13
-declare(strict_types=1);
14
-
15
-namespace phpDocumentor\Reflection\PseudoTypes;
16
-
17
-use phpDocumentor\Reflection\PseudoType;
18
-use phpDocumentor\Reflection\Type;
19
-use phpDocumentor\Reflection\Types\Mixed_;
20
-
21
-use function sprintf;
22
-
23
-/** @psalm-immutable */
24
-final class ConstExpression implements PseudoType
25
-{
26
- /** @var Type */
27
- private $owner;
28
- /** @var string */
29
- private $expression;
30
-
31
- public function __construct(Type $owner, string $expression)
32
- {
33
- $this->owner = $owner;
34
- $this->expression = $expression;
35
- }
36
-
37
- public function getOwner(): Type
38
- {
39
- return $this->owner;
40
- }
41
-
42
- public function getExpression(): string
43
- {
44
- return $this->expression;
45
- }
46
-
47
- public function underlyingType(): Type
48
- {
49
- return new Mixed_();
50
- }
51
-
52
- public function __toString(): string
53
- {
54
- return sprintf('%s::%s', (string) $this->owner, $this->expression);
55
- }
56
-}
57
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/False_.php
Changed
7
1
2
}
3
}
4
5
-class_alias(False_::class, 'phpDocumentor\Reflection\Types\False_', false);
6
+class_alias('\phpDocumentor\Reflection\PseudoTypes\False_', 'phpDocumentor\Reflection\Types\False_', false);
7
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/FloatValue.php
Deleted
47
1
2
-<?php
3
-/*
4
- * This file is part of phpDocumentor.
5
- *
6
- * For the full copyright and license information, please view the LICENSE
7
- * file that was distributed with this source code.
8
- *
9
- * @link http://phpdoc.org
10
- *
11
- */
12
-
13
-declare(strict_types=1);
14
-
15
-namespace phpDocumentor\Reflection\PseudoTypes;
16
-
17
-use phpDocumentor\Reflection\PseudoType;
18
-use phpDocumentor\Reflection\Type;
19
-use phpDocumentor\Reflection\Types\Float_;
20
-
21
-/** @psalm-immutable */
22
-class FloatValue implements PseudoType
23
-{
24
- /** @var float */
25
- private $value;
26
-
27
- public function __construct(float $value)
28
- {
29
- $this->value = $value;
30
- }
31
-
32
- public function getValue(): float
33
- {
34
- return $this->value;
35
- }
36
-
37
- public function underlyingType(): Type
38
- {
39
- return new Float_();
40
- }
41
-
42
- public function __toString(): string
43
- {
44
- return (string) $this->value;
45
- }
46
-}
47
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/IntegerValue.php
Deleted
47
1
2
-<?php
3
-/*
4
- * This file is part of phpDocumentor.
5
- *
6
- * For the full copyright and license information, please view the LICENSE
7
- * file that was distributed with this source code.
8
- *
9
- * @link http://phpdoc.org
10
- *
11
- */
12
-
13
-declare(strict_types=1);
14
-
15
-namespace phpDocumentor\Reflection\PseudoTypes;
16
-
17
-use phpDocumentor\Reflection\PseudoType;
18
-use phpDocumentor\Reflection\Type;
19
-use phpDocumentor\Reflection\Types\Integer;
20
-
21
-/** @psalm-immutable */
22
-final class IntegerValue implements PseudoType
23
-{
24
- /** @var int */
25
- private $value;
26
-
27
- public function __construct(int $value)
28
- {
29
- $this->value = $value;
30
- }
31
-
32
- public function getValue(): int
33
- {
34
- return $this->value;
35
- }
36
-
37
- public function underlyingType(): Type
38
- {
39
- return new Integer();
40
- }
41
-
42
- public function __toString(): string
43
- {
44
- return (string) $this->value;
45
- }
46
-}
47
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/ListShape.php
Deleted
18
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\PseudoTypes;
7
-
8
-use function implode;
9
-
10
-/** @psalm-immutable */
11
-final class ListShape extends ArrayShape
12
-{
13
- public function __toString(): string
14
- {
15
- return 'list{' . implode(', ', $this->getItems()) . '}';
16
- }
17
-}
18
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/ListShapeItem.php
Deleted
11
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\PseudoTypes;
7
-
8
-final class ListShapeItem extends ArrayShapeItem
9
-{
10
-}
11
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyArray.php
Deleted
50
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-/**
7
- * This file is part of phpDocumentor.
8
- *
9
- * For the full copyright and license information, please view the LICENSE
10
- * file that was distributed with this source code.
11
- *
12
- * @link http://phpdoc.org
13
- */
14
-
15
-namespace phpDocumentor\Reflection\PseudoTypes;
16
-
17
-use phpDocumentor\Reflection\PseudoType;
18
-use phpDocumentor\Reflection\Type;
19
-use phpDocumentor\Reflection\Types\Array_;
20
-use phpDocumentor\Reflection\Types\Mixed_;
21
-
22
-/**
23
- * Value Object representing the type 'non-empty-array'.
24
- *
25
- * @psalm-immutable
26
- */
27
-final class NonEmptyArray extends Array_ implements PseudoType
28
-{
29
- public function underlyingType(): Type
30
- {
31
- return new Array_($this->valueType, $this->keyType);
32
- }
33
-
34
- /**
35
- * Returns a rendered output of the Type as it would be used in a DocBlock.
36
- */
37
- public function __toString(): string
38
- {
39
- if ($this->keyType) {
40
- return 'non-empty-array<' . $this->keyType . ',' . $this->valueType . '>';
41
- }
42
-
43
- if ($this->valueType instanceof Mixed_) {
44
- return 'non-empty-array';
45
- }
46
-
47
- return 'non-empty-array<' . $this->valueType . '>';
48
- }
49
-}
50
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyList.php
Deleted
52
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-/**
7
- * This file is part of phpDocumentor.
8
- *
9
- * For the full copyright and license information, please view the LICENSE
10
- * file that was distributed with this source code.
11
- *
12
- * @link http://phpdoc.org
13
- */
14
-
15
-namespace phpDocumentor\Reflection\PseudoTypes;
16
-
17
-use phpDocumentor\Reflection\PseudoType;
18
-use phpDocumentor\Reflection\Type;
19
-use phpDocumentor\Reflection\Types\Array_;
20
-use phpDocumentor\Reflection\Types\Integer;
21
-use phpDocumentor\Reflection\Types\Mixed_;
22
-
23
-/**
24
- * Value Object representing the type 'non-empty-list'.
25
- *
26
- * @psalm-immutable
27
- */
28
-final class NonEmptyList extends Array_ implements PseudoType
29
-{
30
- public function underlyingType(): Type
31
- {
32
- return new Array_($this->valueType, $this->keyType);
33
- }
34
-
35
- public function __construct(?Type $valueType = null)
36
- {
37
- parent::__construct($valueType, new Integer());
38
- }
39
-
40
- /**
41
- * Returns a rendered output of the Type as it would be used in a DocBlock.
42
- */
43
- public function __toString(): string
44
- {
45
- if ($this->valueType instanceof Mixed_) {
46
- return 'non-empty-list';
47
- }
48
-
49
- return 'non-empty-list<' . $this->valueType . '>';
50
- }
51
-}
52
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/ObjectShape.php
Deleted
43
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\PseudoTypes;
7
-
8
-use phpDocumentor\Reflection\PseudoType;
9
-use phpDocumentor\Reflection\Type;
10
-use phpDocumentor\Reflection\Types\Object_;
11
-
12
-use function implode;
13
-
14
-/** @psalm-immutable */
15
-final class ObjectShape implements PseudoType
16
-{
17
- /** @var ObjectShapeItem */
18
- private $items;
19
-
20
- public function __construct(ObjectShapeItem ...$items)
21
- {
22
- $this->items = $items;
23
- }
24
-
25
- /**
26
- * @return ObjectShapeItem
27
- */
28
- public function getItems(): array
29
- {
30
- return $this->items;
31
- }
32
-
33
- public function underlyingType(): Type
34
- {
35
- return new Object_();
36
- }
37
-
38
- public function __toString(): string
39
- {
40
- return 'object{' . implode(', ', $this->items) . '}';
41
- }
42
-}
43
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/ObjectShapeItem.php
Deleted
11
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\PseudoTypes;
7
-
8
-final class ObjectShapeItem extends ShapeItem
9
-{
10
-}
11
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/ShapeItem.php
Deleted
58
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-namespace phpDocumentor\Reflection\PseudoTypes;
7
-
8
-use phpDocumentor\Reflection\Type;
9
-use phpDocumentor\Reflection\Types\Mixed_;
10
-
11
-use function sprintf;
12
-
13
-abstract class ShapeItem
14
-{
15
- /** @var string|null */
16
- private $key;
17
- /** @var Type */
18
- private $value;
19
- /** @var bool */
20
- private $optional;
21
-
22
- public function __construct(?string $key, ?Type $value, bool $optional)
23
- {
24
- $this->key = $key;
25
- $this->value = $value ?? new Mixed_();
26
- $this->optional = $optional;
27
- }
28
-
29
- public function getKey(): ?string
30
- {
31
- return $this->key;
32
- }
33
-
34
- public function getValue(): Type
35
- {
36
- return $this->value;
37
- }
38
-
39
- public function isOptional(): bool
40
- {
41
- return $this->optional;
42
- }
43
-
44
- public function __toString(): string
45
- {
46
- if ($this->key !== null) {
47
- return sprintf(
48
- '%s%s: %s',
49
- $this->key,
50
- $this->optional ? '?' : '',
51
- (string) $this->value
52
- );
53
- }
54
-
55
- return (string) $this->value;
56
- }
57
-}
58
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/StringValue.php
Deleted
49
1
2
-<?php
3
-/*
4
- * This file is part of phpDocumentor.
5
- *
6
- * For the full copyright and license information, please view the LICENSE
7
- * file that was distributed with this source code.
8
- *
9
- * @link http://phpdoc.org
10
- *
11
- */
12
-
13
-declare(strict_types=1);
14
-
15
-namespace phpDocumentor\Reflection\PseudoTypes;
16
-
17
-use phpDocumentor\Reflection\PseudoType;
18
-use phpDocumentor\Reflection\Type;
19
-use phpDocumentor\Reflection\Types\String_;
20
-
21
-use function sprintf;
22
-
23
-/** @psalm-immutable */
24
-class StringValue implements PseudoType
25
-{
26
- /** @var string */
27
- private $value;
28
-
29
- public function __construct(string $value)
30
- {
31
- $this->value = $value;
32
- }
33
-
34
- public function getValue(): string
35
- {
36
- return $this->value;
37
- }
38
-
39
- public function underlyingType(): Type
40
- {
41
- return new String_();
42
- }
43
-
44
- public function __toString(): string
45
- {
46
- return sprintf('"%s"', $this->value);
47
- }
48
-}
49
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/PseudoTypes/True_.php
Changed
7
1
2
}
3
}
4
5
-class_alias(True_::class, 'phpDocumentor\Reflection\Types\True_', false);
6
+class_alias('\phpDocumentor\Reflection\PseudoTypes\True_', 'phpDocumentor\Reflection\Types\True_', false);
7
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/TypeResolver.php
Changed
964
1
2
3
namespace phpDocumentor\Reflection;
4
5
-use Doctrine\Deprecations\Deprecation;
6
+use ArrayIterator;
7
use InvalidArgumentException;
8
-use phpDocumentor\Reflection\PseudoTypes\ArrayShape;
9
-use phpDocumentor\Reflection\PseudoTypes\ArrayShapeItem;
10
-use phpDocumentor\Reflection\PseudoTypes\CallableString;
11
-use phpDocumentor\Reflection\PseudoTypes\ConstExpression;
12
-use phpDocumentor\Reflection\PseudoTypes\False_;
13
-use phpDocumentor\Reflection\PseudoTypes\FloatValue;
14
-use phpDocumentor\Reflection\PseudoTypes\HtmlEscapedString;
15
use phpDocumentor\Reflection\PseudoTypes\IntegerRange;
16
-use phpDocumentor\Reflection\PseudoTypes\IntegerValue;
17
use phpDocumentor\Reflection\PseudoTypes\List_;
18
-use phpDocumentor\Reflection\PseudoTypes\ListShape;
19
-use phpDocumentor\Reflection\PseudoTypes\ListShapeItem;
20
-use phpDocumentor\Reflection\PseudoTypes\LiteralString;
21
-use phpDocumentor\Reflection\PseudoTypes\LowercaseString;
22
-use phpDocumentor\Reflection\PseudoTypes\NegativeInteger;
23
-use phpDocumentor\Reflection\PseudoTypes\NonEmptyArray;
24
-use phpDocumentor\Reflection\PseudoTypes\NonEmptyList;
25
-use phpDocumentor\Reflection\PseudoTypes\NonEmptyLowercaseString;
26
-use phpDocumentor\Reflection\PseudoTypes\NonEmptyString;
27
-use phpDocumentor\Reflection\PseudoTypes\Numeric_;
28
-use phpDocumentor\Reflection\PseudoTypes\NumericString;
29
-use phpDocumentor\Reflection\PseudoTypes\ObjectShape;
30
-use phpDocumentor\Reflection\PseudoTypes\ObjectShapeItem;
31
-use phpDocumentor\Reflection\PseudoTypes\PositiveInteger;
32
-use phpDocumentor\Reflection\PseudoTypes\StringValue;
33
-use phpDocumentor\Reflection\PseudoTypes\TraitString;
34
-use phpDocumentor\Reflection\PseudoTypes\True_;
35
-use phpDocumentor\Reflection\Types\AggregatedType;
36
use phpDocumentor\Reflection\Types\Array_;
37
use phpDocumentor\Reflection\Types\ArrayKey;
38
-use phpDocumentor\Reflection\Types\Boolean;
39
-use phpDocumentor\Reflection\Types\Callable_;
40
-use phpDocumentor\Reflection\Types\CallableParameter;
41
use phpDocumentor\Reflection\Types\ClassString;
42
use phpDocumentor\Reflection\Types\Collection;
43
use phpDocumentor\Reflection\Types\Compound;
44
use phpDocumentor\Reflection\Types\Context;
45
use phpDocumentor\Reflection\Types\Expression;
46
-use phpDocumentor\Reflection\Types\Float_;
47
use phpDocumentor\Reflection\Types\Integer;
48
use phpDocumentor\Reflection\Types\InterfaceString;
49
use phpDocumentor\Reflection\Types\Intersection;
50
use phpDocumentor\Reflection\Types\Iterable_;
51
-use phpDocumentor\Reflection\Types\Mixed_;
52
-use phpDocumentor\Reflection\Types\Never_;
53
-use phpDocumentor\Reflection\Types\Null_;
54
use phpDocumentor\Reflection\Types\Nullable;
55
use phpDocumentor\Reflection\Types\Object_;
56
-use phpDocumentor\Reflection\Types\Parent_;
57
-use phpDocumentor\Reflection\Types\Resource_;
58
-use phpDocumentor\Reflection\Types\Scalar;
59
-use phpDocumentor\Reflection\Types\Self_;
60
-use phpDocumentor\Reflection\Types\Static_;
61
use phpDocumentor\Reflection\Types\String_;
62
-use phpDocumentor\Reflection\Types\This;
63
-use phpDocumentor\Reflection\Types\Void_;
64
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprFloatNode;
65
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprIntegerNode;
66
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode;
67
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstFetchNode;
68
-use PHPStan\PhpDocParser\Ast\Type\ArrayShapeItemNode;
69
-use PHPStan\PhpDocParser\Ast\Type\ArrayShapeNode;
70
-use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode;
71
-use PHPStan\PhpDocParser\Ast\Type\CallableTypeNode;
72
-use PHPStan\PhpDocParser\Ast\Type\CallableTypeParameterNode;
73
-use PHPStan\PhpDocParser\Ast\Type\ConditionalTypeForParameterNode;
74
-use PHPStan\PhpDocParser\Ast\Type\ConditionalTypeNode;
75
-use PHPStan\PhpDocParser\Ast\Type\ConstTypeNode;
76
-use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
77
-use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
78
-use PHPStan\PhpDocParser\Ast\Type\IntersectionTypeNode;
79
-use PHPStan\PhpDocParser\Ast\Type\NullableTypeNode;
80
-use PHPStan\PhpDocParser\Ast\Type\ObjectShapeItemNode;
81
-use PHPStan\PhpDocParser\Ast\Type\ObjectShapeNode;
82
-use PHPStan\PhpDocParser\Ast\Type\OffsetAccessTypeNode;
83
-use PHPStan\PhpDocParser\Ast\Type\ThisTypeNode;
84
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
85
-use PHPStan\PhpDocParser\Ast\Type\UnionTypeNode;
86
-use PHPStan\PhpDocParser\Lexer\Lexer;
87
-use PHPStan\PhpDocParser\Parser\ConstExprParser;
88
-use PHPStan\PhpDocParser\Parser\ParserException;
89
-use PHPStan\PhpDocParser\Parser\TokenIterator;
90
-use PHPStan\PhpDocParser\Parser\TypeParser;
91
-use PHPStan\PhpDocParser\ParserConfig;
92
use RuntimeException;
93
94
-use function array_filter;
95
use function array_key_exists;
96
-use function array_map;
97
-use function array_reverse;
98
+use function array_pop;
99
+use function array_values;
100
use function class_exists;
101
use function class_implements;
102
-use function get_class;
103
+use function count;
104
+use function current;
105
+use function end;
106
use function in_array;
107
-use function sprintf;
108
+use function is_numeric;
109
+use function key;
110
+use function preg_split;
111
use function strpos;
112
use function strtolower;
113
use function trim;
114
115
+use const PREG_SPLIT_DELIM_CAPTURE;
116
+use const PREG_SPLIT_NO_EMPTY;
117
+
118
final class TypeResolver
119
{
120
+ /** @var string Definition of the ARRAY operator for types */
121
+ private const OPERATOR_ARRAY = '';
122
+
123
/** @var string Definition of the NAMESPACE operator in PHP */
124
private const OPERATOR_NAMESPACE = '\\';
125
126
+ /** @var int the iterator parser is inside a compound context */
127
+ private const PARSER_IN_COMPOUND = 0;
128
+
129
+ /** @var int the iterator parser is inside a nullable expression context */
130
+ private const PARSER_IN_NULLABLE = 1;
131
+
132
+ /** @var int the iterator parser is inside an array expression context */
133
+ private const PARSER_IN_ARRAY_EXPRESSION = 2;
134
+
135
+ /** @var int the iterator parser is inside a collection expression context */
136
+ private const PARSER_IN_COLLECTION_EXPRESSION = 3;
137
+
138
/**
139
* @var array<string, string> List of recognized keywords and unto which Value Object they map
140
* @psalm-var array<string, class-string<Type>>
141
*/
142
private $keywords =
143
- 'string' => String_::class,
144
- 'class-string' => ClassString::class,
145
- 'interface-string' => InterfaceString::class,
146
- 'html-escaped-string' => HtmlEscapedString::class,
147
- 'lowercase-string' => LowercaseString::class,
148
- 'non-empty-lowercase-string' => NonEmptyLowercaseString::class,
149
- 'non-empty-string' => NonEmptyString::class,
150
- 'numeric-string' => NumericString::class,
151
- 'numeric' => Numeric_::class,
152
- 'trait-string' => TraitString::class,
153
- 'int' => Integer::class,
154
- 'integer' => Integer::class,
155
- 'positive-int' => PositiveInteger::class,
156
- 'negative-int' => NegativeInteger::class,
157
- 'bool' => Boolean::class,
158
- 'boolean' => Boolean::class,
159
- 'real' => Float_::class,
160
- 'float' => Float_::class,
161
- 'double' => Float_::class,
162
- 'object' => Object_::class,
163
- 'mixed' => Mixed_::class,
164
- 'array' => Array_::class,
165
- 'array-key' => ArrayKey::class,
166
- 'non-empty-array' => NonEmptyArray::class,
167
- 'resource' => Resource_::class,
168
- 'void' => Void_::class,
169
- 'null' => Null_::class,
170
- 'scalar' => Scalar::class,
171
- 'callback' => Callable_::class,
172
- 'callable' => Callable_::class,
173
- 'callable-string' => CallableString::class,
174
- 'false' => False_::class,
175
- 'true' => True_::class,
176
- 'literal-string' => LiteralString::class,
177
- 'self' => Self_::class,
178
- '$this' => This::class,
179
- 'static' => Static_::class,
180
- 'parent' => Parent_::class,
181
- 'iterable' => Iterable_::class,
182
- 'never' => Never_::class,
183
- 'list' => List_::class,
184
- 'non-empty-list' => NonEmptyList::class,
185
+ 'string' => Types\String_::class,
186
+ 'class-string' => Types\ClassString::class,
187
+ 'interface-string' => Types\InterfaceString::class,
188
+ 'html-escaped-string' => PseudoTypes\HtmlEscapedString::class,
189
+ 'lowercase-string' => PseudoTypes\LowercaseString::class,
190
+ 'non-empty-lowercase-string' => PseudoTypes\NonEmptyLowercaseString::class,
191
+ 'non-empty-string' => PseudoTypes\NonEmptyString::class,
192
+ 'numeric-string' => PseudoTypes\NumericString::class,
193
+ 'numeric' => PseudoTypes\Numeric_::class,
194
+ 'trait-string' => PseudoTypes\TraitString::class,
195
+ 'int' => Types\Integer::class,
196
+ 'integer' => Types\Integer::class,
197
+ 'positive-int' => PseudoTypes\PositiveInteger::class,
198
+ 'negative-int' => PseudoTypes\NegativeInteger::class,
199
+ 'bool' => Types\Boolean::class,
200
+ 'boolean' => Types\Boolean::class,
201
+ 'real' => Types\Float_::class,
202
+ 'float' => Types\Float_::class,
203
+ 'double' => Types\Float_::class,
204
+ 'object' => Types\Object_::class,
205
+ 'mixed' => Types\Mixed_::class,
206
+ 'array' => Types\Array_::class,
207
+ 'array-key' => Types\ArrayKey::class,
208
+ 'resource' => Types\Resource_::class,
209
+ 'void' => Types\Void_::class,
210
+ 'null' => Types\Null_::class,
211
+ 'scalar' => Types\Scalar::class,
212
+ 'callback' => Types\Callable_::class,
213
+ 'callable' => Types\Callable_::class,
214
+ 'callable-string' => PseudoTypes\CallableString::class,
215
+ 'false' => PseudoTypes\False_::class,
216
+ 'true' => PseudoTypes\True_::class,
217
+ 'literal-string' => PseudoTypes\LiteralString::class,
218
+ 'self' => Types\Self_::class,
219
+ '$this' => Types\This::class,
220
+ 'static' => Types\Static_::class,
221
+ 'parent' => Types\Parent_::class,
222
+ 'iterable' => Types\Iterable_::class,
223
+ 'never' => Types\Never_::class,
224
+ 'list' => PseudoTypes\List_::class,
225
;
226
227
/**
228
- * @psalm-readonly
229
* @var FqsenResolver
230
- */
231
- private $fqsenResolver;
232
- /**
233
* @psalm-readonly
234
- * @var TypeParser
235
*/
236
- private $typeParser;
237
- /**
238
- * @psalm-readonly
239
- * @var Lexer
240
- */
241
- private $lexer;
242
+ private $fqsenResolver;
243
244
/**
245
* Initializes this TypeResolver with the means to create and resolve Fqsen objects.
246
247
public function __construct(?FqsenResolver $fqsenResolver = null)
248
{
249
$this->fqsenResolver = $fqsenResolver ?: new FqsenResolver();
250
-
251
- if (class_exists(ParserConfig::class)) {
252
- $this->typeParser = new TypeParser(new ParserConfig(), new ConstExprParser(new ParserConfig()));
253
- $this->lexer = new Lexer(new ParserConfig());
254
- } else {
255
- $this->typeParser = new TypeParser(new ConstExprParser());
256
- $this->lexer = new Lexer();
257
- }
258
}
259
260
/**
261
262
* This method only works as expected if the namespace and aliases are set;
263
* no dynamic reflection is being performed here.
264
*
265
- * @uses Context::getNamespace() to determine with what to prefix the type name.
266
* @uses Context::getNamespaceAliases() to check whether the first part of the relative type name should not be
267
* replaced with another namespace.
268
+ * @uses Context::getNamespace() to determine with what to prefix the type name.
269
*
270
* @param string $type The relative or absolute type.
271
*/
272
273
$context = new Context('');
274
}
275
276
- $tokens = $this->lexer->tokenize($type);
277
- $tokenIterator = new TokenIterator($tokens);
278
+ // split the type string into tokens `|`, `?`, `<`, `>`, `,`, `(`, `)`, ``, '<', '>' and type names
279
+ $tokens = preg_split(
280
+ '/(\\||\\?|<|>|&|, ?|\\(|\\)|\\\\+)/',
281
+ $type,
282
+ -1,
283
+ PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE
284
+ );
285
+
286
+ if ($tokens === false) {
287
+ throw new InvalidArgumentException('Unable to split the type string "' . $type . '" into tokens');
288
+ }
289
290
- $ast = $this->parse($tokenIterator);
291
- $type = $this->createType($ast, $context);
292
+ /** @var ArrayIterator<int, string|null> $tokenIterator */
293
+ $tokenIterator = new ArrayIterator($tokens);
294
295
- return $this->tryParseRemainingCompoundTypes($tokenIterator, $context, $type);
296
+ return $this->parseTypes($tokenIterator, $context, self::PARSER_IN_COMPOUND);
297
}
298
299
- public function createType(?TypeNode $type, Context $context): Type
300
+ /**
301
+ * Analyse each tokens and creates types
302
+ *
303
+ * @param ArrayIterator<int, string|null> $tokens the iterator on tokens
304
+ * @param int $parserContext on of self::PARSER_* constants, indicating
305
+ * the context where we are in the parsing
306
+ */
307
+ private function parseTypes(ArrayIterator $tokens, Context $context, int $parserContext): Type
308
{
309
- if ($type === null) {
310
- return new Mixed_();
311
- }
312
-
313
- switch (get_class($type)) {
314
- case ArrayTypeNode::class:
315
- return new Array_(
316
- $this->createType($type->type, $context)
317
+ $types = ;
318
+ $token = '';
319
+ $compoundToken = '|';
320
+ while ($tokens->valid()) {
321
+ $token = $tokens->current();
322
+ if ($token === null) {
323
+ throw new RuntimeException(
324
+ 'Unexpected nullable character'
325
);
326
+ }
327
328
- case ArrayShapeNode::class:
329
- switch ($type->kind) {
330
- case ArrayShapeNode::KIND_ARRAY:
331
- return new ArrayShape(
332
- ...array_map(
333
- function (ArrayShapeItemNode $item) use ($context): ArrayShapeItem {
334
- return new ArrayShapeItem(
335
- (string) $item->keyName,
336
- $this->createType($item->valueType, $context),
337
- $item->optional
338
- );
339
- },
340
- $type->items
341
- )
342
- );
343
-
344
- case ArrayShapeNode::KIND_LIST:
345
- return new ListShape(
346
- ...array_map(
347
- function (ArrayShapeItemNode $item) use ($context): ListShapeItem {
348
- return new ListShapeItem(
349
- null,
350
- $this->createType($item->valueType, $context),
351
- $item->optional
352
- );
353
- },
354
- $type->items
355
- )
356
- );
357
-
358
- default:
359
- throw new RuntimeException('Unsupported array shape kind');
360
+ if ($token === '|' || $token === '&') {
361
+ if (count($types) === 0) {
362
+ throw new RuntimeException(
363
+ 'A type is missing before a type separator'
364
+ );
365
}
366
- case ObjectShapeNode::class:
367
- return new ObjectShape(
368
- ...array_map(
369
- function (ObjectShapeItemNode $item) use ($context): ObjectShapeItem {
370
- return new ObjectShapeItem(
371
- (string) $item->keyName,
372
- $this->createType($item->valueType, $context),
373
- $item->optional
374
- );
375
- },
376
- $type->items
377
- )
378
- );
379
-
380
- case CallableTypeNode::class:
381
- return $this->createFromCallable($type, $context);
382
-
383
- case ConstTypeNode::class:
384
- return $this->createFromConst($type, $context);
385
-
386
- case GenericTypeNode::class:
387
- return $this->createFromGeneric($type, $context);
388
-
389
- case IdentifierTypeNode::class:
390
- return $this->resolveSingleType($type->name, $context);
391
-
392
- case IntersectionTypeNode::class:
393
- return new Intersection(
394
- array_filter(
395
- array_map(
396
- function (TypeNode $nestedType) use ($context): Type {
397
- $type = $this->createType($nestedType, $context);
398
- if ($type instanceof AggregatedType) {
399
- return new Expression($type);
400
- }
401
-
402
- return $type;
403
- },
404
- $type->types
405
- )
406
- )
407
- );
408
-
409
- case NullableTypeNode::class:
410
- $nestedType = $this->createType($type->type, $context);
411
-
412
- return new Nullable($nestedType);
413
-
414
- case UnionTypeNode::class:
415
- return new Compound(
416
- array_filter(
417
- array_map(
418
- function (TypeNode $nestedType) use ($context): Type {
419
- $type = $this->createType($nestedType, $context);
420
- if ($type instanceof AggregatedType) {
421
- return new Expression($type);
422
- }
423
-
424
- return $type;
425
- },
426
- $type->types
427
- )
428
- )
429
- );
430
-
431
- case ThisTypeNode::class:
432
- return new This();
433
-
434
- case ConditionalTypeNode::class:
435
- case ConditionalTypeForParameterNode::class:
436
- case OffsetAccessTypeNode::class:
437
- default:
438
- return new Mixed_();
439
- }
440
- }
441
442
- private function createFromGeneric(GenericTypeNode $type, Context $context): Type
443
- {
444
- switch (strtolower($type->type->name)) {
445
- case 'array':
446
- return $this->createArray($type->genericTypes, $context);
447
+ if (
448
+ !in_array($parserContext,
449
+ self::PARSER_IN_COMPOUND,
450
+ self::PARSER_IN_ARRAY_EXPRESSION,
451
+ self::PARSER_IN_COLLECTION_EXPRESSION,
452
+ , true)
453
+ ) {
454
+ throw new RuntimeException(
455
+ 'Unexpected type separator'
456
+ );
457
+ }
458
459
- case 'class-string':
460
- $subType = $this->createType($type->genericTypes0, $context);
461
- if (!$subType instanceof Object_ || $subType->getFqsen() === null) {
462
+ $compoundToken = $token;
463
+ $tokens->next();
464
+ } elseif ($token === '?') {
465
+ if (
466
+ !in_array($parserContext,
467
+ self::PARSER_IN_COMPOUND,
468
+ self::PARSER_IN_ARRAY_EXPRESSION,
469
+ self::PARSER_IN_COLLECTION_EXPRESSION,
470
+ , true)
471
+ ) {
472
throw new RuntimeException(
473
- $subType . ' is not a class string'
474
+ 'Unexpected nullable character'
475
);
476
}
477
478
- return new ClassString(
479
- $subType->getFqsen()
480
- );
481
+ $tokens->next();
482
+ $type = $this->parseTypes($tokens, $context, self::PARSER_IN_NULLABLE);
483
+ $types = new Nullable($type);
484
+ } elseif ($token === '(') {
485
+ $tokens->next();
486
+ $type = $this->parseTypes($tokens, $context, self::PARSER_IN_ARRAY_EXPRESSION);
487
+
488
+ $token = $tokens->current();
489
+ if ($token === null) { // Someone did not properly close their array expression ..
490
+ break;
491
+ }
492
+
493
+ $tokens->next();
494
+
495
+ $resolvedType = new Expression($type);
496
497
- case 'interface-string':
498
- $subType = $this->createType($type->genericTypes0, $context);
499
- if (!$subType instanceof Object_ || $subType->getFqsen() === null) {
500
+ $types = $resolvedType;
501
+ } elseif ($parserContext === self::PARSER_IN_ARRAY_EXPRESSION && isset($token0) && $token0 === ')') {
502
+ break;
503
+ } elseif ($token === '<') {
504
+ if (count($types) === 0) {
505
throw new RuntimeException(
506
- $subType . ' is not a class string'
507
+ 'Unexpected collection operator "<", class name is missing'
508
);
509
}
510
511
- return new InterfaceString(
512
- $subType->getFqsen()
513
- );
514
-
515
- case 'list':
516
- return new List_(
517
- $this->createType($type->genericTypes0, $context)
518
- );
519
+ $classType = array_pop($types);
520
+ if ($classType !== null) {
521
+ if ((string) $classType === 'class-string') {
522
+ $types = $this->resolveClassString($tokens, $context);
523
+ } elseif ((string) $classType === 'int') {
524
+ $types = $this->resolveIntRange($tokens);
525
+ } elseif ((string) $classType === 'interface-string') {
526
+ $types = $this->resolveInterfaceString($tokens, $context);
527
+ } else {
528
+ $types = $this->resolveCollection($tokens, $classType, $context);
529
+ }
530
+ }
531
532
- case 'non-empty-list':
533
- return new NonEmptyList(
534
- $this->createType($type->genericTypes0, $context)
535
- );
536
+ $tokens->next();
537
+ } elseif (
538
+ $parserContext === self::PARSER_IN_COLLECTION_EXPRESSION
539
+ && ($token === '>' || trim($token) === ',')
540
+ ) {
541
+ break;
542
+ } elseif ($token === self::OPERATOR_ARRAY) {
543
+ end($types);
544
+ $last = key($types);
545
+ if ($last === null) {
546
+ throw new InvalidArgumentException('Unexpected array operator');
547
+ }
548
549
- case 'int':
550
- if (isset($type->genericTypes1) === false) {
551
- throw new RuntimeException('int<min,max> has not the correct format');
552
+ $lastItem = $types$last;
553
+ if ($lastItem instanceof Expression) {
554
+ $lastItem = $lastItem->getValueType();
555
}
556
557
- return new IntegerRange((string) $type->genericTypes0, (string) $type->genericTypes1);
558
-
559
- case 'iterable':
560
- return new Iterable_(
561
- ...array_reverse(
562
- array_map(
563
- function (TypeNode $genericType) use ($context): Type {
564
- return $this->createType($genericType, $context);
565
- },
566
- $type->genericTypes
567
- )
568
- )
569
- );
570
+ $types$last = new Array_($lastItem);
571
572
- default:
573
- $collectionType = $this->createType($type->type, $context);
574
- if ($collectionType instanceof Object_ === false) {
575
- throw new RuntimeException(sprintf('%s is not a collection', (string) $collectionType));
576
+ $tokens->next();
577
+ } else {
578
+ $type = $this->resolveSingleType($token, $context);
579
+ $tokens->next();
580
+ if ($parserContext === self::PARSER_IN_NULLABLE) {
581
+ return $type;
582
}
583
584
- return new Collection(
585
- $collectionType->getFqsen(),
586
- ...array_reverse(
587
- array_map(
588
- function (TypeNode $genericType) use ($context): Type {
589
- return $this->createType($genericType, $context);
590
- },
591
- $type->genericTypes
592
- )
593
- )
594
- );
595
+ $types = $type;
596
+ }
597
}
598
- }
599
-
600
- private function createFromCallable(CallableTypeNode $type, Context $context): Callable_
601
- {
602
- return new Callable_(array_map(
603
- function (CallableTypeParameterNode $param) use ($context): CallableParameter {
604
- return new CallableParameter(
605
- $this->createType($param->type, $context),
606
- $param->parameterName !== '' ? trim($param->parameterName, '$') : null,
607
- $param->isReference,
608
- $param->isVariadic,
609
- $param->isOptional
610
- );
611
- },
612
- $type->parameters
613
- ), $this->createType($type->returnType, $context));
614
- }
615
616
- private function createFromConst(ConstTypeNode $type, Context $context): Type
617
- {
618
- switch (true) {
619
- case $type->constExpr instanceof ConstExprIntegerNode:
620
- return new IntegerValue((int) $type->constExpr->value);
621
+ if ($token === '|' || $token === '&') {
622
+ throw new RuntimeException(
623
+ 'A type is missing after a type separator'
624
+ );
625
+ }
626
627
- case $type->constExpr instanceof ConstExprFloatNode:
628
- return new FloatValue((float) $type->constExpr->value);
629
+ if (count($types) === 0) {
630
+ if ($parserContext === self::PARSER_IN_NULLABLE) {
631
+ throw new RuntimeException(
632
+ 'A type is missing after a nullable character'
633
+ );
634
+ }
635
636
- case $type->constExpr instanceof ConstExprStringNode:
637
- return new StringValue($type->constExpr->value);
638
+ if ($parserContext === self::PARSER_IN_ARRAY_EXPRESSION) {
639
+ throw new RuntimeException(
640
+ 'A type is missing in an array expression'
641
+ );
642
+ }
643
644
- case $type->constExpr instanceof ConstFetchNode:
645
- return new ConstExpression(
646
- $this->resolve($type->constExpr->className, $context),
647
- $type->constExpr->name
648
+ if ($parserContext === self::PARSER_IN_COLLECTION_EXPRESSION) {
649
+ throw new RuntimeException(
650
+ 'A type is missing in a collection expression'
651
);
652
+ }
653
+ } elseif (count($types) === 1) {
654
+ return current($types);
655
+ }
656
657
- default:
658
- throw new RuntimeException(sprintf('Unsupported constant type %s', get_class($type)));
659
+ if ($compoundToken === '|') {
660
+ return new Compound(array_values($types));
661
}
662
+
663
+ return new Intersection(array_values($types));
664
}
665
666
/**
667
668
return new Object_($this->fqsenResolver->resolve($type, $context));
669
}
670
671
- /** @param TypeNode $typeNodes */
672
- private function createArray(array $typeNodes, Context $context): Array_
673
+ /**
674
+ * Resolves class string
675
+ *
676
+ * @param ArrayIterator<int, (string|null)> $tokens
677
+ */
678
+ private function resolveClassString(ArrayIterator $tokens, Context $context): Type
679
{
680
- $types = array_reverse(
681
- array_map(
682
- function (TypeNode $node) use ($context): Type {
683
- return $this->createType($node, $context);
684
- },
685
- $typeNodes
686
- )
687
- );
688
+ $tokens->next();
689
690
- if (isset($types1) === false) {
691
- return new Array_(...$types);
692
- }
693
+ $classType = $this->parseTypes($tokens, $context, self::PARSER_IN_COLLECTION_EXPRESSION);
694
695
- if ($this->validArrayKeyType($types1) || $types1 instanceof ArrayKey) {
696
- return new Array_(...$types);
697
+ if (!$classType instanceof Object_ || $classType->getFqsen() === null) {
698
+ throw new RuntimeException(
699
+ $classType . ' is not a class string'
700
+ );
701
}
702
703
- if ($types1 instanceof Compound && $types1->getIterator()->count() === 2) {
704
- if ($this->validArrayKeyType($types1->get(0)) && $this->validArrayKeyType($types1->get(1))) {
705
- return new Array_(...$types);
706
+ $token = $tokens->current();
707
+ if ($token !== '>') {
708
+ if (empty($token)) {
709
+ throw new RuntimeException(
710
+ 'class-string: ">" is missing'
711
+ );
712
}
713
+
714
+ throw new RuntimeException(
715
+ 'Unexpected character "' . $token . '", ">" is missing'
716
+ );
717
}
718
719
- throw new RuntimeException('An array can have only integers or strings as keys');
720
+ return new ClassString($classType->getFqsen());
721
}
722
723
- private function validArrayKeyType(?Type $type): bool
724
+ /**
725
+ * Resolves integer ranges
726
+ *
727
+ * @param ArrayIterator<int, (string|null)> $tokens
728
+ */
729
+ private function resolveIntRange(ArrayIterator $tokens): Type
730
{
731
- return $type instanceof String_ || $type instanceof Integer;
732
+ $tokens->next();
733
+
734
+ $token = '';
735
+ $minValue = null;
736
+ $maxValue = null;
737
+ $commaFound = false;
738
+ $tokenCounter = 0;
739
+ while ($tokens->valid()) {
740
+ $tokenCounter++;
741
+ $token = $tokens->current();
742
+ if ($token === null) {
743
+ throw new RuntimeException(
744
+ 'Unexpected nullable character'
745
+ );
746
+ }
747
+
748
+ $token = trim($token);
749
+
750
+ if ($token === '>') {
751
+ break;
752
+ }
753
+
754
+ if ($token === ',') {
755
+ $commaFound = true;
756
+ }
757
+
758
+ if ($commaFound === false && $minValue === null) {
759
+ if (is_numeric($token) || $token === 'max' || $token === 'min') {
760
+ $minValue = $token;
761
+ }
762
+ }
763
+
764
+ if ($commaFound === true && $maxValue === null) {
765
+ if (is_numeric($token) || $token === 'max' || $token === 'min') {
766
+ $maxValue = $token;
767
+ }
768
+ }
769
+
770
+ $tokens->next();
771
+ }
772
+
773
+ if ($token !== '>') {
774
+ if (empty($token)) {
775
+ throw new RuntimeException(
776
+ 'interface-string: ">" is missing'
777
+ );
778
+ }
779
+
780
+ throw new RuntimeException(
781
+ 'Unexpected character "' . $token . '", ">" is missing'
782
+ );
783
+ }
784
+
785
+ if ($minValue === null || $maxValue === null || $tokenCounter > 4) {
786
+ throw new RuntimeException(
787
+ 'int<min,max> has not the correct format'
788
+ );
789
+ }
790
+
791
+ return new IntegerRange($minValue, $maxValue);
792
}
793
794
- private function parse(TokenIterator $tokenIterator): TypeNode
795
+ /**
796
+ * Resolves class string
797
+ *
798
+ * @param ArrayIterator<int, (string|null)> $tokens
799
+ */
800
+ private function resolveInterfaceString(ArrayIterator $tokens, Context $context): Type
801
{
802
- try {
803
- $ast = $this->typeParser->parse($tokenIterator);
804
- } catch (ParserException $e) {
805
- throw new RuntimeException($e->getMessage(), 0, $e);
806
+ $tokens->next();
807
+
808
+ $classType = $this->parseTypes($tokens, $context, self::PARSER_IN_COLLECTION_EXPRESSION);
809
+
810
+ if (!$classType instanceof Object_ || $classType->getFqsen() === null) {
811
+ throw new RuntimeException(
812
+ $classType . ' is not a interface string'
813
+ );
814
+ }
815
+
816
+ $token = $tokens->current();
817
+ if ($token !== '>') {
818
+ if (empty($token)) {
819
+ throw new RuntimeException(
820
+ 'interface-string: ">" is missing'
821
+ );
822
+ }
823
+
824
+ throw new RuntimeException(
825
+ 'Unexpected character "' . $token . '", ">" is missing'
826
+ );
827
}
828
829
- return $ast;
830
+ return new InterfaceString($classType->getFqsen());
831
}
832
833
/**
834
- * Will try to parse unsupported type notations by phpstan
835
+ * Resolves the collection values and keys
836
*
837
- * The phpstan parser doesn't support the illegal nullable combinations like this library does.
838
- * This method will warn the user about those notations but for bc purposes we will still have it here.
839
+ * @param ArrayIterator<int, (string|null)> $tokens
840
+ *
841
+ * @return Array_|Iterable_|Collection
842
*/
843
- private function tryParseRemainingCompoundTypes(TokenIterator $tokenIterator, Context $context, Type $type): Type
844
+ private function resolveCollection(ArrayIterator $tokens, Type $classType, Context $context): Type
845
{
846
+ $isArray = ((string) $classType === 'array');
847
+ $isIterable = ((string) $classType === 'iterable');
848
+ $isList = ((string) $classType === 'list');
849
+
850
+ // allow only "array", "iterable" or class name before "<"
851
if (
852
- $tokenIterator->isCurrentTokenType(Lexer::TOKEN_UNION) ||
853
- $tokenIterator->isCurrentTokenType(Lexer::TOKEN_INTERSECTION)
854
+ !$isArray && !$isIterable && !$isList
855
+ && (!$classType instanceof Object_ || $classType->getFqsen() === null)
856
) {
857
- Deprecation::trigger(
858
- 'phpdocumentor/type-resolver',
859
- 'https://github.com/phpDocumentor/TypeResolver/issues/184',
860
- 'Legacy nullable type detected, please update your code as
861
- you are using nullable types in a docblock. support will be removed in v2.0.0'
862
+ throw new RuntimeException(
863
+ $classType . ' is not a collection'
864
);
865
}
866
867
- $continue = true;
868
- while ($continue) {
869
- $continue = false;
870
- while ($tokenIterator->tryConsumeTokenType(Lexer::TOKEN_UNION)) {
871
- $ast = $this->parse($tokenIterator);
872
- $type2 = $this->createType($ast, $context);
873
- $type = new Compound($type, $type2);
874
- $continue = true;
875
+ $tokens->next();
876
+
877
+ $valueType = $this->parseTypes($tokens, $context, self::PARSER_IN_COLLECTION_EXPRESSION);
878
+ $keyType = null;
879
+
880
+ $token = $tokens->current();
881
+ if ($token !== null && trim($token) === ',' && !$isList) {
882
+ // if we have a comma, then we just parsed the key type, not the value type
883
+ $keyType = $valueType;
884
+ if ($isArray) {
885
+ // check the key type for an "array" collection. We allow only
886
+ // strings or integers.
887
+ if (
888
+ !$keyType instanceof ArrayKey &&
889
+ !$keyType instanceof String_ &&
890
+ !$keyType instanceof Integer &&
891
+ !$keyType instanceof Compound
892
+ ) {
893
+ throw new RuntimeException(
894
+ 'An array can have only integers or strings as keys'
895
+ );
896
+ }
897
+
898
+ if ($keyType instanceof Compound) {
899
+ foreach ($keyType->getIterator() as $item) {
900
+ if (
901
+ !$item instanceof ArrayKey &&
902
+ !$item instanceof String_ &&
903
+ !$item instanceof Integer
904
+ ) {
905
+ throw new RuntimeException(
906
+ 'An array can have only integers or strings as keys'
907
+ );
908
+ }
909
+ }
910
+ }
911
}
912
913
- while ($tokenIterator->tryConsumeTokenType(Lexer::TOKEN_INTERSECTION)) {
914
- $ast = $this->typeParser->parse($tokenIterator);
915
- $type2 = $this->createType($ast, $context);
916
- $type = new Intersection($type, $type2);
917
- $continue = true;
918
+ $tokens->next();
919
+ // now let's parse the value type
920
+ $valueType = $this->parseTypes($tokens, $context, self::PARSER_IN_COLLECTION_EXPRESSION);
921
+ }
922
+
923
+ $token = $tokens->current();
924
+ if ($token !== '>') {
925
+ if (empty($token)) {
926
+ throw new RuntimeException(
927
+ 'Collection: ">" is missing'
928
+ );
929
}
930
+
931
+ throw new RuntimeException(
932
+ 'Unexpected character "' . $token . '", ">" is missing'
933
+ );
934
+ }
935
+
936
+ if ($isArray) {
937
+ return new Array_($valueType, $keyType);
938
+ }
939
+
940
+ if ($isIterable) {
941
+ return new Iterable_($valueType, $keyType);
942
+ }
943
+
944
+ if ($isList) {
945
+ return new List_($valueType);
946
+ }
947
+
948
+ if ($classType instanceof Object_) {
949
+ return $this->makeCollectionFromObject($classType, $valueType, $keyType);
950
}
951
952
- return $type;
953
+ throw new RuntimeException('Invalid $classType provided');
954
+ }
955
+
956
+ /**
957
+ * @psalm-pure
958
+ */
959
+ private function makeCollectionFromObject(Object_ $object, Type $valueType, ?Type $keyType = null): Collection
960
+ {
961
+ return new Collection($object->getFqsen(), $valueType, $keyType);
962
}
963
}
964
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/Types/AbstractList.php
Changed
10
1
2
}
3
4
/**
5
- * Returns the type for the values of this array.
6
+ * Returns the value for the keys of this array.
7
*/
8
public function getValueType(): Type
9
{
10
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/Types/AggregatedType.php
Changed
10
1
2
*/
3
private function add(Type $type): void
4
{
5
- if ($type instanceof static) {
6
+ if ($type instanceof self) {
7
foreach ($type->getIterator() as $subType) {
8
$this->add($subType);
9
}
10
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/Types/CallableParameter.php
Deleted
79
1
2
-<?php
3
-/**
4
- * This file is part of phpDocumentor.
5
- *
6
- * For the full copyright and license information, please view the LICENSE
7
- * file that was distributed with this source code.
8
- *
9
- * @link http://phpdoc.org
10
- */
11
-
12
-declare(strict_types=1);
13
-
14
-namespace phpDocumentor\Reflection\Types;
15
-
16
-use phpDocumentor\Reflection\Type;
17
-
18
-/**
19
- * Value Object representing a Callable parameters.
20
- *
21
- * @psalm-immutable
22
- */
23
-final class CallableParameter
24
-{
25
- /** @var Type */
26
- private $type;
27
-
28
- /** @var bool */
29
- private $isReference;
30
-
31
- /** @var bool */
32
- private $isVariadic;
33
-
34
- /** @var bool */
35
- private $isOptional;
36
-
37
- /** @var string|null */
38
- private $name;
39
-
40
- public function __construct(
41
- Type $type,
42
- ?string $name = null,
43
- bool $isReference = false,
44
- bool $isVariadic = false,
45
- bool $isOptional = false
46
- ) {
47
- $this->type = $type;
48
- $this->isReference = $isReference;
49
- $this->isVariadic = $isVariadic;
50
- $this->isOptional = $isOptional;
51
- $this->name = $name;
52
- }
53
-
54
- public function getName(): ?string
55
- {
56
- return $this->name;
57
- }
58
-
59
- public function getType(): Type
60
- {
61
- return $this->type;
62
- }
63
-
64
- public function isReference(): bool
65
- {
66
- return $this->isReference;
67
- }
68
-
69
- public function isVariadic(): bool
70
- {
71
- return $this->isVariadic;
72
- }
73
-
74
- public function isOptional(): bool
75
- {
76
- return $this->isOptional;
77
- }
78
-}
79
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/Types/Callable_.php
Changed
33
1
2
*/
3
final class Callable_ implements Type
4
{
5
- /** @var Type|null */
6
- private $returnType;
7
- /** @var CallableParameter */
8
- private $parameters;
9
-
10
- /**
11
- * @param CallableParameter $parameters
12
- */
13
- public function __construct(array $parameters = , ?Type $returnType = null)
14
- {
15
- $this->parameters = $parameters;
16
- $this->returnType = $returnType;
17
- }
18
-
19
- /** @return CallableParameter */
20
- public function getParameters(): array
21
- {
22
- return $this->parameters;
23
- }
24
-
25
- public function getReturnType(): ?Type
26
- {
27
- return $this->returnType;
28
- }
29
-
30
/**
31
* Returns a rendered output of the Type as it would be used in a DocBlock.
32
*/
33
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php
Changed
27
1
2
use const T_NAMESPACE;
3
use const T_NS_SEPARATOR;
4
use const T_STRING;
5
-use const T_TRAIT;
6
use const T_USE;
7
8
if (!defined('T_NAME_QUALIFIED')) {
9
- define('T_NAME_QUALIFIED', 10001);
10
+ define('T_NAME_QUALIFIED', 'T_NAME_QUALIFIED');
11
}
12
13
if (!defined('T_NAME_FULLY_QUALIFIED')) {
14
- define('T_NAME_FULLY_QUALIFIED', 10002);
15
+ define('T_NAME_FULLY_QUALIFIED', 'T_NAME_FULLY_QUALIFIED');
16
}
17
18
/**
19
20
$currentNamespace = $this->parseNamespace($tokens);
21
break;
22
case T_CLASS:
23
- case T_TRAIT:
24
// Fast-forward the iterator through the class so that any
25
// T_USE tokens found within are skipped - these are not
26
// valid namespace use statements so should be ignored.
27
roundcubemail-1.6.tar.gz/vendor/phpdocumentor/type-resolver/src/Types/Float_.php
Changed
10
1
2
*
3
* @psalm-immutable
4
*/
5
-class Float_ implements Type
6
+final class Float_ implements Type
7
{
8
/**
9
* Returns a rendered output of the Type as it would be used in a DocBlock.
10
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/LICENSE
Deleted
24
1
2
-MIT License
3
-
4
-Copyright (c) 2016 Ondřej Mirtes
5
-
6
-Permission is hereby granted, free of charge, to any person obtaining a copy
7
-of this software and associated documentation files (the "Software"), to deal
8
-in the Software without restriction, including without limitation the rights
9
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
-copies of the Software, and to permit persons to whom the Software is
11
-furnished to do so, subject to the following conditions:
12
-
13
-The above copyright notice and this permission notice shall be included in all
14
-copies or substantial portions of the Software.
15
-
16
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
-SOFTWARE.
23
\ No newline at end of file
24
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/README.md
Deleted
125
1
2
-<h1 align="center">PHPDoc Parser for PHPStan</h1>
3
-
4
-<p align="center">
5
- <a href="https://github.com/phpstan/phpdoc-parser/actions"><img src="https://github.com/phpstan/phpdoc-parser/workflows/Build/badge.svg" alt="Build Status"></a>
6
- <a href="https://packagist.org/packages/phpstan/phpdoc-parser"><img src="https://poser.pugx.org/phpstan/phpdoc-parser/v/stable" alt="Latest Stable Version"></a>
7
- <a href="https://choosealicense.com/licenses/mit/"><img src="https://poser.pugx.org/phpstan/phpstan/license" alt="License"></a>
8
- <a href="https://phpstan.org/"><img src="https://img.shields.io/badge/PHPStan-enabled-brightgreen.svg?style=flat" alt="PHPStan Enabled"></a>
9
-</p>
10
-
11
-This library `phpstan/phpdoc-parser` represents PHPDocs with an AST (Abstract Syntax Tree). It supports parsing and modifying PHPDocs.
12
-
13
-For the complete list of supported PHPDoc features check out PHPStan documentation. PHPStan is the main (but not the only) user of this library.
14
-
15
-* PHPDoc Basics(https://phpstan.org/writing-php-code/phpdocs-basics) (list of PHPDoc tags)
16
-* PHPDoc Types(https://phpstan.org/writing-php-code/phpdoc-types) (list of PHPDoc types)
17
-* phpdoc-parser API Reference(https://phpstan.github.io/phpdoc-parser/2.0.x/namespace-PHPStan.PhpDocParser.html) with all the AST node types etc.
18
-
19
-This parser also supports parsing Doctrine Annotations(https://github.com/doctrine/annotations). The AST nodes live in the PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine namespace(https://phpstan.github.io/phpdoc-parser/2.0.x/namespace-PHPStan.PhpDocParser.Ast.PhpDoc.Doctrine.html).
20
-
21
-## Installation
22
-
23
-```
24
-composer require phpstan/phpdoc-parser
25
-```
26
-
27
-## Basic usage
28
-
29
-```php
30
-<?php
31
-
32
-require_once __DIR__ . '/vendor/autoload.php';
33
-
34
-use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode;
35
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode;
36
-use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
37
-use PHPStan\PhpDocParser\Lexer\Lexer;
38
-use PHPStan\PhpDocParser\ParserConfig;
39
-use PHPStan\PhpDocParser\Parser\ConstExprParser;
40
-use PHPStan\PhpDocParser\Parser\PhpDocParser;
41
-use PHPStan\PhpDocParser\Parser\TokenIterator;
42
-use PHPStan\PhpDocParser\Parser\TypeParser;
43
-
44
-// basic setup
45
-
46
-$config = new ParserConfig(usedAttributes: );
47
-$lexer = new Lexer($config);
48
-$constExprParser = new ConstExprParser($config);
49
-$typeParser = new TypeParser($config, $constExprParser);
50
-$phpDocParser = new PhpDocParser($config, $typeParser, $constExprParser);
51
-
52
-// parsing and reading a PHPDoc string
53
-
54
-$tokens = new TokenIterator($lexer->tokenize('/** @param Lorem $a */'));
55
-$phpDocNode = $phpDocParser->parse($tokens); // PhpDocNode
56
-$paramTags = $phpDocNode->getParamTagValues(); // ParamTagValueNode
57
-echo $paramTags0->parameterName; // '$a'
58
-echo $paramTags0->type; // IdentifierTypeNode - 'Lorem'
59
-```
60
-
61
-### Format-preserving printer
62
-
63
-This component can be used to modify the AST
64
-and print it again as close as possible to the original.
65
-
66
-It's heavily inspired by format-preserving printer component in nikic/PHP-Parser(https://github.com/nikic/PHP-Parser).
67
-
68
-```php
69
-<?php
70
-
71
-require_once __DIR__ . '/vendor/autoload.php';
72
-
73
-use PHPStan\PhpDocParser\Ast\NodeTraverser;
74
-use PHPStan\PhpDocParser\Ast\NodeVisitor\CloningVisitor;
75
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode;
76
-use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
77
-use PHPStan\PhpDocParser\Lexer\Lexer;
78
-use PHPStan\PhpDocParser\ParserConfig;
79
-use PHPStan\PhpDocParser\Parser\ConstExprParser;
80
-use PHPStan\PhpDocParser\Parser\PhpDocParser;
81
-use PHPStan\PhpDocParser\Parser\TokenIterator;
82
-use PHPStan\PhpDocParser\Parser\TypeParser;
83
-use PHPStan\PhpDocParser\Printer\Printer;
84
-
85
-// basic setup with enabled required lexer attributes
86
-
87
-$config = new ParserConfig(usedAttributes: 'lines' => true, 'indexes' => true);
88
-$lexer = new Lexer($config);
89
-$constExprParser = new ConstExprParser($config);
90
-$typeParser = new TypeParser($config, $constExprParser);
91
-$phpDocParser = new PhpDocParser($config, $typeParser, $constExprParser);
92
-
93
-$tokens = new TokenIterator($lexer->tokenize('/** @param Lorem $a */'));
94
-$phpDocNode = $phpDocParser->parse($tokens); // PhpDocNode
95
-
96
-$cloningTraverser = new NodeTraverser(new CloningVisitor());
97
-
98
-/** @var PhpDocNode $newPhpDocNode */
99
-$newPhpDocNode = $cloningTraverser->traverse($phpDocNode);
100
-
101
-// change something in $newPhpDocNode
102
-$newPhpDocNode->getParamTagValues()0->type = new IdentifierTypeNode('Ipsum');
103
-
104
-// print changed PHPDoc
105
-$printer = new Printer();
106
-$newPhpDoc = $printer->printFormatPreserving($newPhpDocNode, $phpDocNode, $tokens);
107
-echo $newPhpDoc; // '/** @param Ipsum $a */'
108
-```
109
-
110
-## Code of Conduct
111
-
112
-This project adheres to a Contributor Code of Conduct(CODE_OF_CONDUCT.md). By participating in this project and its community, you are expected to uphold this code.
113
-
114
-## Building
115
-
116
-Initially you need to run `composer install`, or `composer update` in case you aren't working in a folder which was built before.
117
-
118
-Afterwards you can either run the whole build including linting and coding standards using
119
-
120
- make
121
-
122
-or run only tests using
123
-
124
- make tests
125
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/UPGRADING.md
Deleted
131
1
2
-Upgrading from phpstan/phpdoc-parser 1.x to 2.0
3
-=================================
4
-
5
-### PHP version requirements
6
-
7
-phpstan/phpdoc-parser now requires PHP 7.4 or newer to run.
8
-
9
-### Changed constructors of parser classes
10
-
11
-Instead of different arrays and boolean values passed into class constructors during setup, parser classes now share a common ParserConfig object.
12
-
13
-Before:
14
-
15
-```php
16
-use PHPStan\PhpDocParser\Lexer\Lexer;
17
-use PHPStan\PhpDocParser\Parser\ConstExprParser;
18
-use PHPStan\PhpDocParser\Parser\TypeParser;
19
-use PHPStan\PhpDocParser\Parser\PhpDocParser;
20
-
21
-$usedAttributes = 'lines' => true, 'indexes' => true;
22
-
23
-$lexer = new Lexer();
24
-$constExprParser = new ConstExprParser(true, true, $usedAttributes);
25
-$typeParser = new TypeParser($constExprParser, true, $usedAttributes);
26
-$phpDocParser = new PhpDocParser($typeParser, $constExprParser, true, true, $usedAttributes);
27
-```
28
-
29
-After:
30
-
31
-```php
32
-use PHPStan\PhpDocParser\Lexer\Lexer;
33
-use PHPStan\PhpDocParser\ParserConfig;
34
-use PHPStan\PhpDocParser\Parser\ConstExprParser;
35
-use PHPStan\PhpDocParser\Parser\TypeParser;
36
-use PHPStan\PhpDocParser\Parser\PhpDocParser;
37
-
38
-$config = new ParserConfig(usedAttributes: 'lines' => true, 'indexes' => true);
39
-$lexer = new Lexer($config);
40
-$constExprParser = new ConstExprParser($config);
41
-$typeParser = new TypeParser($config, $constExprParser);
42
-$phpDocParser = new PhpDocParser($config, $typeParser, $constExprParser);
43
-```
44
-
45
-The point of ParserConfig is that over the course of phpstan/phpdoc-parser 2.x development series it's most likely going to gain new optional parameters akin to PHPStan's bleeding edge(https://phpstan.org/blog/what-is-bleeding-edge). These parameters will allow opting in to new behaviour which will become the default in 3.0.
46
-
47
-With ParserConfig object, it's now going to be impossible to configure parser classes inconsistently. Which happened to users(https://github.com/phpstan/phpdoc-parser/issues/251#issuecomment-2333927959) when they were separate boolean values.
48
-
49
-### Support for parsing Doctrine annotations
50
-
51
-This parser now supports parsing Doctrine Annotations(https://github.com/doctrine/annotations). The AST nodes representing Doctrine Annotations live in the PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine namespace(https://phpstan.github.io/phpdoc-parser/2.0.x/namespace-PHPStan.PhpDocParser.Ast.PhpDoc.Doctrine.html).
52
-
53
-### Whitespace before description is required
54
-
55
-phpdoc-parser 1.x sometimes silently consumed invalid part of a PHPDoc type as description:
56
-
57
-```php
58
-/** @return \Closure(...int, string): string */
59
-```
60
-
61
-This became `IdentifierTypeNode` of `\Closure` and with `(...int, string): string` as description. (Valid callable syntax is: `\Closure(int ...$u, string): string`.)
62
-
63
-Another example:
64
-
65
-```php
66
-/** @return array{foo: int}} */
67
-```
68
-
69
-The extra `}` also became description.
70
-
71
-Both of these examples are now InvalidTagValueNode.
72
-
73
-If these parts are supposed to be PHPDoc descriptions, you need to put whitespace between the type and the description text:
74
-
75
-```php
76
-/** @return \Closure (...int, string): string */
77
-/** @return array{foo: int} } */
78
-```
79
-
80
-### Type aliases with invalid types are preserved
81
-
82
-In phpdoc-parser 1.x, invalid type alias syntax was represented as `InvalidTagValueNode`(https://phpstan.github.io/phpdoc-parser/2.0.x/PHPStan.PhpDocParser.Ast.PhpDoc.InvalidTagValueNode.html), losing information about a type alias being present.
83
-
84
-```php
85
-/**
86
- * @phpstan-type TypeAlias
87
- */
88
-```
89
-
90
-This `@phpstan-type` is missing the actual type to alias. In phpdoc-parser 2.0 this is now represented as `TypeAliasTagValueNode`(https://phpstan.github.io/phpdoc-parser/2.0.x/PHPStan.PhpDocParser.Ast.PhpDoc.TypeAliasTagValueNode.html) (instead of `InvalidTagValueNode`) with `InvalidTypeNode`(https://phpstan.github.io/phpdoc-parser/2.0.x/PHPStan.PhpDocParser.Ast.Type.InvalidTypeNode.html) in place of the type.
91
-
92
-### Removal of QuoteAwareConstExprStringNode
93
-
94
-The class QuoteAwareConstExprStringNode(https://phpstan.github.io/phpdoc-parser/1.23.x/PHPStan.PhpDocParser.Ast.ConstExpr.QuoteAwareConstExprStringNode.html) has been removed.
95
-
96
-Instead, ConstExprStringNode(https://phpstan.github.io/phpdoc-parser/2.0.x/PHPStan.PhpDocParser.Ast.ConstExpr.ConstExprStringNode.html) gained information about the kind of quotes being used.
97
-
98
-### Removed 2nd parameter of `ConstExprParser::parse()` (`$trimStrings`)
99
-
100
-`ConstExprStringNode::$value` now contains unescaped values without surrounding `''` or `""` quotes.
101
-
102
-Use `ConstExprStringNode::__toString()` or `Printer`(https://phpstan.github.io/phpdoc-parser/2.0.x/PHPStan.PhpDocParser.Printer.Printer.html) to get the escaped value along with surrounding quotes.
103
-
104
-### Text between tags always belongs to description
105
-
106
-Multi-line descriptions between tags were previously represented as separate PhpDocTextNode(https://phpstan.github.io/phpdoc-parser/2.0.x/PHPStan.PhpDocParser.Ast.PhpDoc.PhpDocTextNode.html):
107
-
108
-```php
109
-/**
110
- * @param Foo $foo 1st multi world description
111
- * some text in the middle
112
- * @param Bar $bar 2nd multi world description
113
- */
114
-```
115
-
116
-The line with `some text in the middle` in phpdoc-parser 2.0 is now part of the description of the first `@param` tag.
117
-
118
-### `ArrayShapeNode` construction changes
119
-
120
-`ArrayShapeNode` constructor made private, added public static methods `createSealed()` and `createUnsealed()`.
121
-
122
-### Minor BC breaks
123
-
124
-* Constructor parameter `$isEquality` in `AssertTag*ValueNode` made required
125
-* Constructor parameter `$templateTypes` in `MethodTagValueNode` made required
126
-* Constructor parameter `$isReference` in `ParamTagValueNode` made required
127
-* Constructor parameter `$isReference` in `TypelessParamTagValueNode` made required
128
-* Constructor parameter `$templateTypes` in `CallableTypeNode` made required
129
-* Constructor parameters `$expectedTokenValue` and `$currentTokenLine` in `ParserException` made required
130
-* `ArrayShapeItemNode` and `ObjectShapeItemNode` are not standalone TypeNode, just Node
131
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/composer.json
Deleted
46
1
2
-{
3
- "name": "phpstan/phpdoc-parser",
4
- "description": "PHPDoc parser with support for nullable, intersection and generic types",
5
- "license": "MIT",
6
- "require": {
7
- "php": "^7.4 || ^8.0"
8
- },
9
- "require-dev": {
10
- "doctrine/annotations": "^2.0",
11
- "nikic/php-parser": "^5.3.0",
12
- "php-parallel-lint/php-parallel-lint": "^1.2",
13
- "phpstan/extension-installer": "^1.0",
14
- "phpstan/phpstan": "^2.0",
15
- "phpstan/phpstan-phpunit": "^2.0",
16
- "phpstan/phpstan-strict-rules": "^2.0",
17
- "phpunit/phpunit": "^9.6",
18
- "symfony/process": "^5.2"
19
- },
20
- "config": {
21
- "platform": {
22
- "php": "7.4.6"
23
- },
24
- "sort-packages": true,
25
- "allow-plugins": {
26
- "phpstan/extension-installer": true
27
- }
28
- },
29
- "autoload": {
30
- "psr-4": {
31
- "PHPStan\\PhpDocParser\\":
32
- "src/"
33
-
34
- }
35
- },
36
- "autoload-dev": {
37
- "psr-4": {
38
- "PHPStan\\PhpDocParser\\":
39
- "tests/PHPStan"
40
-
41
- }
42
- },
43
- "minimum-stability": "dev",
44
- "prefer-stable": true
45
-}
46
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/AbstractNodeVisitor.php
Deleted
36
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast;
5
-
6
-/**
7
- * Inspired by https://github.com/nikic/PHP-Parser/tree/36a6dcd04e7b0285e8f0868f44bd4927802f7df1
8
- *
9
- * Copyright (c) 2011, Nikita Popov
10
- * All rights reserved.
11
- */
12
-abstract class AbstractNodeVisitor implements NodeVisitor // phpcs:ignore SlevomatCodingStandard.Classes.SuperfluousAbstractClassNaming.SuperfluousPrefix
13
-{
14
-
15
- public function beforeTraverse(array $nodes): ?array
16
- {
17
- return null;
18
- }
19
-
20
- public function enterNode(Node $node)
21
- {
22
- return null;
23
- }
24
-
25
- public function leaveNode(Node $node)
26
- {
27
- return null;
28
- }
29
-
30
- public function afterTraverse(array $nodes): ?array
31
- {
32
- return null;
33
- }
34
-
35
-}
36
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Attribute.php
Deleted
18
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast;
5
-
6
-final class Attribute
7
-{
8
-
9
- public const START_LINE = 'startLine';
10
- public const END_LINE = 'endLine';
11
-
12
- public const START_INDEX = 'startIndex';
13
- public const END_INDEX = 'endIndex';
14
-
15
- public const ORIGINAL_NODE = 'originalNode';
16
-
17
-}
18
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayItemNode.php
Deleted
36
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\ConstExpr;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function sprintf;
8
-
9
-class ConstExprArrayItemNode implements ConstExprNode
10
-{
11
-
12
- use NodeAttributes;
13
-
14
- public ?ConstExprNode $key = null;
15
-
16
- public ConstExprNode $value;
17
-
18
- public function __construct(?ConstExprNode $key, ConstExprNode $value)
19
- {
20
- $this->key = $key;
21
- $this->value = $value;
22
- }
23
-
24
-
25
- public function __toString(): string
26
- {
27
- if ($this->key !== null) {
28
- return sprintf('%s => %s', $this->key, $this->value);
29
-
30
- }
31
-
32
- return (string) $this->value;
33
- }
34
-
35
-}
36
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayNode.php
Deleted
32
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\ConstExpr;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function implode;
8
-
9
-class ConstExprArrayNode implements ConstExprNode
10
-{
11
-
12
- use NodeAttributes;
13
-
14
- /** @var ConstExprArrayItemNode */
15
- public array $items;
16
-
17
- /**
18
- * @param ConstExprArrayItemNode $items
19
- */
20
- public function __construct(array $items)
21
- {
22
- $this->items = $items;
23
- }
24
-
25
-
26
- public function __toString(): string
27
- {
28
- return '' . implode(', ', $this->items) . '';
29
- }
30
-
31
-}
32
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFalseNode.php
Deleted
19
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\ConstExpr;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class ConstExprFalseNode implements ConstExprNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- public function __toString(): string
14
- {
15
- return 'false';
16
- }
17
-
18
-}
19
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFloatNode.php
Deleted
27
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\ConstExpr;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class ConstExprFloatNode implements ConstExprNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- public string $value;
14
-
15
- public function __construct(string $value)
16
- {
17
- $this->value = $value;
18
- }
19
-
20
-
21
- public function __toString(): string
22
- {
23
- return $this->value;
24
- }
25
-
26
-}
27
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprIntegerNode.php
Deleted
27
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\ConstExpr;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class ConstExprIntegerNode implements ConstExprNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- public string $value;
14
-
15
- public function __construct(string $value)
16
- {
17
- $this->value = $value;
18
- }
19
-
20
-
21
- public function __toString(): string
22
- {
23
- return $this->value;
24
- }
25
-
26
-}
27
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNode.php
Deleted
12
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\ConstExpr;
5
-
6
-use PHPStan\PhpDocParser\Ast\Node;
7
-
8
-interface ConstExprNode extends Node
9
-{
10
-
11
-}
12
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNullNode.php
Deleted
19
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\ConstExpr;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class ConstExprNullNode implements ConstExprNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- public function __toString(): string
14
- {
15
- return 'null';
16
- }
17
-
18
-}
19
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprStringNode.php
Deleted
82
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\ConstExpr;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function addcslashes;
8
-use function assert;
9
-use function dechex;
10
-use function ord;
11
-use function preg_replace_callback;
12
-use function sprintf;
13
-use function str_pad;
14
-use function strlen;
15
-use const STR_PAD_LEFT;
16
-
17
-class ConstExprStringNode implements ConstExprNode
18
-{
19
-
20
- public const SINGLE_QUOTED = 1;
21
- public const DOUBLE_QUOTED = 2;
22
-
23
- use NodeAttributes;
24
-
25
- public string $value;
26
-
27
- /** @var self::SINGLE_QUOTED|self::DOUBLE_QUOTED */
28
- public $quoteType;
29
-
30
- /**
31
- * @param self::SINGLE_QUOTED|self::DOUBLE_QUOTED $quoteType
32
- */
33
- public function __construct(string $value, int $quoteType)
34
- {
35
- $this->value = $value;
36
- $this->quoteType = $quoteType;
37
- }
38
-
39
-
40
- public function __toString(): string
41
- {
42
- if ($this->quoteType === self::SINGLE_QUOTED) {
43
- // from https://github.com/nikic/PHP-Parser/blob/0ffddce52d816f72d0efc4d9b02e276d3309ef01/lib/PhpParser/PrettyPrinter/Standard.php#L1007
44
- return sprintf("'%s'", addcslashes($this->value, '\'\\'));
45
- }
46
-
47
- // from https://github.com/nikic/PHP-Parser/blob/0ffddce52d816f72d0efc4d9b02e276d3309ef01/lib/PhpParser/PrettyPrinter/Standard.php#L1010-L1040
48
- return sprintf('"%s"', $this->escapeDoubleQuotedString());
49
- }
50
-
51
- private function escapeDoubleQuotedString(): string
52
- {
53
- $quote = '"';
54
- $escaped = addcslashes($this->value, "\n\r\t\f\v$" . $quote . '\\');
55
-
56
- // Escape control characters and non-UTF-8 characters.
57
- // Regex based on https://stackoverflow.com/a/11709412/385378.
58
- $regex = '/(
59
- \x00-\x08\x0E-\x1F # Control characters
60
- | \xC0-\xC1 # Invalid UTF-8 Bytes
61
- | \xF5-\xFF # Invalid UTF-8 Bytes
62
- | \xE0(?=\x80-\x9F) # Overlong encoding of prior code point
63
- | \xF0(?=\x80-\x8F) # Overlong encoding of prior code point
64
- | \xC2-\xDF(?!\x80-\xBF) # Invalid UTF-8 Sequence Start
65
- | \xE0-\xEF(?!\x80-\xBF{2}) # Invalid UTF-8 Sequence Start
66
- | \xF0-\xF4(?!\x80-\xBF{3}) # Invalid UTF-8 Sequence Start
67
- | (?<=\x00-\x7F\xF5-\xFF)\x80-\xBF # Invalid UTF-8 Sequence Middle
68
- | (?<!\xC2-\xDF|\xE0-\xEF|\xE0-\xEF\x80-\xBF|\xF0-\xF4|\xF0-\xF4\x80-\xBF|\xF0-\xF4\x80-\xBF{2})\x80-\xBF # Overlong Sequence
69
- | (?<=\xE0-\xEF)\x80-\xBF(?!\x80-\xBF) # Short 3 byte sequence
70
- | (?<=\xF0-\xF4)\x80-\xBF(?!\x80-\xBF{2}) # Short 4 byte sequence
71
- | (?<=\xF0-\xF4\x80-\xBF)\x80-\xBF(?!\x80-\xBF) # Short 4 byte sequence (2)
72
- )/x';
73
- return preg_replace_callback($regex, static function ($matches) {
74
- assert(strlen($matches0) === 1);
75
- $hex = dechex(ord($matches0));
76
-
77
- return '\\x' . str_pad($hex, 2, '0', STR_PAD_LEFT);
78
- }, $escaped);
79
- }
80
-
81
-}
82
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprTrueNode.php
Deleted
19
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\ConstExpr;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class ConstExprTrueNode implements ConstExprNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- public function __toString(): string
14
- {
15
- return 'true';
16
- }
17
-
18
-}
19
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstFetchNode.php
Deleted
36
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\ConstExpr;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class ConstFetchNode implements ConstExprNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- /** @var string class name for class constants or empty string for non-class constants */
14
- public string $className;
15
-
16
- public string $name;
17
-
18
- public function __construct(string $className, string $name)
19
- {
20
- $this->className = $className;
21
- $this->name = $name;
22
- }
23
-
24
-
25
- public function __toString(): string
26
- {
27
- if ($this->className === '') {
28
- return $this->name;
29
-
30
- }
31
-
32
- return "{$this->className}::{$this->name}";
33
- }
34
-
35
-}
36
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/DoctrineConstExprStringNode.php
Deleted
43
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\ConstExpr;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function sprintf;
8
-use function str_replace;
9
-use function strlen;
10
-use function substr;
11
-
12
-class DoctrineConstExprStringNode extends ConstExprStringNode
13
-{
14
-
15
- use NodeAttributes;
16
-
17
- public string $value;
18
-
19
- public function __construct(string $value)
20
- {
21
- parent::__construct($value, self::DOUBLE_QUOTED);
22
- $this->value = $value;
23
- }
24
-
25
- public function __toString(): string
26
- {
27
- return self::escape($this->value);
28
- }
29
-
30
- public static function unescape(string $value): string
31
- {
32
- // from https://github.com/doctrine/annotations/blob/a9ec7af212302a75d1f92fa65d3abfbd16245a2a/lib/Doctrine/Common/Annotations/DocLexer.php#L103-L107
33
- return str_replace('""', '"', substr($value, 1, strlen($value) - 2));
34
- }
35
-
36
- private static function escape(string $value): string
37
- {
38
- // from https://github.com/phpstan/phpdoc-parser/issues/205#issuecomment-1662323656
39
- return sprintf('"%s"', str_replace('"', '""', $value));
40
- }
41
-
42
-}
43
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Node.php
Deleted
24
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast;
5
-
6
-interface Node
7
-{
8
-
9
- public function __toString(): string;
10
-
11
- /**
12
- * @param mixed $value
13
- */
14
- public function setAttribute(string $key, $value): void;
15
-
16
- public function hasAttribute(string $key): bool;
17
-
18
- /**
19
- * @return mixed
20
- */
21
- public function getAttribute(string $key);
22
-
23
-}
24
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/NodeAttributes.php
Deleted
40
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast;
5
-
6
-use function array_key_exists;
7
-
8
-trait NodeAttributes
9
-{
10
-
11
- /** @var array<string, mixed> */
12
- private array $attributes = ;
13
-
14
- /**
15
- * @param mixed $value
16
- */
17
- public function setAttribute(string $key, $value): void
18
- {
19
- $this->attributes$key = $value;
20
- }
21
-
22
- public function hasAttribute(string $key): bool
23
- {
24
- return array_key_exists($key, $this->attributes);
25
- }
26
-
27
- /**
28
- * @return mixed
29
- */
30
- public function getAttribute(string $key)
31
- {
32
- if ($this->hasAttribute($key)) {
33
- return $this->attributes$key;
34
- }
35
-
36
- return null;
37
- }
38
-
39
-}
40
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/NodeTraverser.php
Deleted
314
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast;
5
-
6
-use LogicException;
7
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprNode;
8
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocChildNode;
9
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagValueNode;
10
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
11
-use function array_keys;
12
-use function array_pop;
13
-use function array_splice;
14
-use function count;
15
-use function get_class;
16
-use function get_object_vars;
17
-use function gettype;
18
-use function is_array;
19
-use function sprintf;
20
-
21
-/**
22
- * Inspired by https://github.com/nikic/PHP-Parser/tree/36a6dcd04e7b0285e8f0868f44bd4927802f7df1
23
- *
24
- * Copyright (c) 2011, Nikita Popov
25
- * All rights reserved.
26
- */
27
-final class NodeTraverser
28
-{
29
-
30
- /**
31
- * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CHILDREN, child nodes
32
- * of the current node will not be traversed for any visitors.
33
- *
34
- * For subsequent visitors enterNode() will still be called on the current
35
- * node and leaveNode() will also be invoked for the current node.
36
- */
37
- public const DONT_TRAVERSE_CHILDREN = 1;
38
-
39
- /**
40
- * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns
41
- * STOP_TRAVERSAL, traversal is aborted.
42
- *
43
- * The afterTraverse() method will still be invoked.
44
- */
45
- public const STOP_TRAVERSAL = 2;
46
-
47
- /**
48
- * If NodeVisitor::leaveNode() returns REMOVE_NODE for a node that occurs
49
- * in an array, it will be removed from the array.
50
- *
51
- * For subsequent visitors leaveNode() will still be invoked for the
52
- * removed node.
53
- */
54
- public const REMOVE_NODE = 3;
55
-
56
- /**
57
- * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CURRENT_AND_CHILDREN, child nodes
58
- * of the current node will not be traversed for any visitors.
59
- *
60
- * For subsequent visitors enterNode() will not be called as well.
61
- * leaveNode() will be invoked for visitors that has enterNode() method invoked.
62
- */
63
- public const DONT_TRAVERSE_CURRENT_AND_CHILDREN = 4;
64
-
65
- /** @var list<NodeVisitor> Visitors */
66
- private array $visitors = ;
67
-
68
- /** @var bool Whether traversal should be stopped */
69
- private bool $stopTraversal;
70
-
71
- /**
72
- * @param list<NodeVisitor> $visitors
73
- */
74
- public function __construct(array $visitors)
75
- {
76
- $this->visitors = $visitors;
77
- }
78
-
79
- /**
80
- * Traverses an array of nodes using the registered visitors.
81
- *
82
- * @param Node $nodes Array of nodes
83
- *
84
- * @return Node Traversed array of nodes
85
- */
86
- public function traverse(array $nodes): array
87
- {
88
- $this->stopTraversal = false;
89
-
90
- foreach ($this->visitors as $visitor) {
91
- $return = $visitor->beforeTraverse($nodes);
92
- if ($return === null) {
93
- continue;
94
- }
95
-
96
- $nodes = $return;
97
- }
98
-
99
- $nodes = $this->traverseArray($nodes);
100
-
101
- foreach ($this->visitors as $visitor) {
102
- $return = $visitor->afterTraverse($nodes);
103
- if ($return === null) {
104
- continue;
105
- }
106
-
107
- $nodes = $return;
108
- }
109
-
110
- return $nodes;
111
- }
112
-
113
- /**
114
- * Recursively traverse a node.
115
- *
116
- * @param Node $node Node to traverse.
117
- *
118
- * @return Node Result of traversal (may be original node or new one)
119
- */
120
- private function traverseNode(Node $node): Node
121
- {
122
- $subNodeNames = array_keys(get_object_vars($node));
123
- foreach ($subNodeNames as $name) {
124
- $subNode =& $node->$name;
125
-
126
- if (is_array($subNode)) {
127
- $subNode = $this->traverseArray($subNode);
128
- if ($this->stopTraversal) {
129
- break;
130
- }
131
- } elseif ($subNode instanceof Node) {
132
- $traverseChildren = true;
133
- $breakVisitorIndex = null;
134
-
135
- foreach ($this->visitors as $visitorIndex => $visitor) {
136
- $return = $visitor->enterNode($subNode);
137
- if ($return === null) {
138
- continue;
139
- }
140
-
141
- if ($return instanceof Node) {
142
- $this->ensureReplacementReasonable($subNode, $return);
143
- $subNode = $return;
144
- } elseif ($return === self::DONT_TRAVERSE_CHILDREN) {
145
- $traverseChildren = false;
146
- } elseif ($return === self::DONT_TRAVERSE_CURRENT_AND_CHILDREN) {
147
- $traverseChildren = false;
148
- $breakVisitorIndex = $visitorIndex;
149
- break;
150
- } elseif ($return === self::STOP_TRAVERSAL) {
151
- $this->stopTraversal = true;
152
- break 2;
153
- } else {
154
- throw new LogicException(
155
- 'enterNode() returned invalid value of type ' . gettype($return),
156
- );
157
- }
158
- }
159
-
160
- if ($traverseChildren) {
161
- $subNode = $this->traverseNode($subNode);
162
- if ($this->stopTraversal) {
163
- break;
164
- }
165
- }
166
-
167
- foreach ($this->visitors as $visitorIndex => $visitor) {
168
- $return = $visitor->leaveNode($subNode);
169
-
170
- if ($return !== null) {
171
- if ($return instanceof Node) {
172
- $this->ensureReplacementReasonable($subNode, $return);
173
- $subNode = $return;
174
- } elseif ($return === self::STOP_TRAVERSAL) {
175
- $this->stopTraversal = true;
176
- break 2;
177
- } elseif (is_array($return)) {
178
- throw new LogicException(
179
- 'leaveNode() may only return an array ' .
180
- 'if the parent structure is an array',
181
- );
182
- } else {
183
- throw new LogicException(
184
- 'leaveNode() returned invalid value of type ' . gettype($return),
185
- );
186
- }
187
- }
188
-
189
- if ($breakVisitorIndex === $visitorIndex) {
190
- break;
191
- }
192
- }
193
- }
194
- }
195
-
196
- return $node;
197
- }
198
-
199
- /**
200
- * Recursively traverse array (usually of nodes).
201
- *
202
- * @param mixed $nodes Array to traverse
203
- *
204
- * @return mixed Result of traversal (may be original array or changed one)
205
- */
206
- private function traverseArray(array $nodes): array
207
- {
208
- $doNodes = ;
209
-
210
- foreach ($nodes as $i => &$node) {
211
- if ($node instanceof Node) {
212
- $traverseChildren = true;
213
- $breakVisitorIndex = null;
214
-
215
- foreach ($this->visitors as $visitorIndex => $visitor) {
216
- $return = $visitor->enterNode($node);
217
- if ($return === null) {
218
- continue;
219
- }
220
-
221
- if ($return instanceof Node) {
222
- $this->ensureReplacementReasonable($node, $return);
223
- $node = $return;
224
- } elseif (is_array($return)) {
225
- $doNodes = $i, $return;
226
- continue 2;
227
- } elseif ($return === self::REMOVE_NODE) {
228
- $doNodes = $i, ;
229
- continue 2;
230
- } elseif ($return === self::DONT_TRAVERSE_CHILDREN) {
231
- $traverseChildren = false;
232
- } elseif ($return === self::DONT_TRAVERSE_CURRENT_AND_CHILDREN) {
233
- $traverseChildren = false;
234
- $breakVisitorIndex = $visitorIndex;
235
- break;
236
- } elseif ($return === self::STOP_TRAVERSAL) {
237
- $this->stopTraversal = true;
238
- break 2;
239
- } else {
240
- throw new LogicException(
241
- 'enterNode() returned invalid value of type ' . gettype($return),
242
- );
243
- }
244
- }
245
-
246
- if ($traverseChildren) {
247
- $node = $this->traverseNode($node);
248
- if ($this->stopTraversal) {
249
- break;
250
- }
251
- }
252
-
253
- foreach ($this->visitors as $visitorIndex => $visitor) {
254
- $return = $visitor->leaveNode($node);
255
-
256
- if ($return !== null) {
257
- if ($return instanceof Node) {
258
- $this->ensureReplacementReasonable($node, $return);
259
- $node = $return;
260
- } elseif (is_array($return)) {
261
- $doNodes = $i, $return;
262
- break;
263
- } elseif ($return === self::REMOVE_NODE) {
264
- $doNodes = $i, ;
265
- break;
266
- } elseif ($return === self::STOP_TRAVERSAL) {
267
- $this->stopTraversal = true;
268
- break 2;
269
- } else {
270
- throw new LogicException(
271
- 'leaveNode() returned invalid value of type ' . gettype($return),
272
- );
273
- }
274
- }
275
-
276
- if ($breakVisitorIndex === $visitorIndex) {
277
- break;
278
- }
279
- }
280
- } elseif (is_array($node)) {
281
- throw new LogicException('Invalid node structure: Contains nested arrays');
282
- }
283
- }
284
-
285
- if (count($doNodes) > 0) {
286
- while ($i, $replace = array_pop($doNodes)) {
287
- array_splice($nodes, $i, 1, $replace);
288
- }
289
- }
290
-
291
- return $nodes;
292
- }
293
-
294
- private function ensureReplacementReasonable(Node $old, Node $new): void
295
- {
296
- if ($old instanceof TypeNode && !$new instanceof TypeNode) {
297
- throw new LogicException(sprintf('Trying to replace TypeNode with %s', get_class($new)));
298
- }
299
-
300
- if ($old instanceof ConstExprNode && !$new instanceof ConstExprNode) {
301
- throw new LogicException(sprintf('Trying to replace ConstExprNode with %s', get_class($new)));
302
- }
303
-
304
- if ($old instanceof PhpDocChildNode && !$new instanceof PhpDocChildNode) {
305
- throw new LogicException(sprintf('Trying to replace PhpDocChildNode with %s', get_class($new)));
306
- }
307
-
308
- if ($old instanceof PhpDocTagValueNode && !$new instanceof PhpDocTagValueNode) {
309
- throw new LogicException(sprintf('Trying to replace PhpDocTagValueNode with %s', get_class($new)));
310
- }
311
- }
312
-
313
-}
314
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor.php
Deleted
89
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast;
5
-
6
-/**
7
- * Inspired by https://github.com/nikic/PHP-Parser/tree/36a6dcd04e7b0285e8f0868f44bd4927802f7df1
8
- *
9
- * Copyright (c) 2011, Nikita Popov
10
- * All rights reserved.
11
- */
12
-interface NodeVisitor
13
-{
14
-
15
- /**
16
- * Called once before traversal.
17
- *
18
- * Return value semantics:
19
- * * null: $nodes stays as-is
20
- * * otherwise: $nodes is set to the return value
21
- *
22
- * @param Node $nodes Array of nodes
23
- *
24
- * @return Node|null Array of nodes
25
- */
26
- public function beforeTraverse(array $nodes): ?array;
27
-
28
- /**
29
- * Called when entering a node.
30
- *
31
- * Return value semantics:
32
- * * null
33
- * => $node stays as-is
34
- * * array (of Nodes)
35
- * => The return value is merged into the parent array (at the position of the $node)
36
- * * NodeTraverser::REMOVE_NODE
37
- * => $node is removed from the parent array
38
- * * NodeTraverser::DONT_TRAVERSE_CHILDREN
39
- * => Children of $node are not traversed. $node stays as-is
40
- * * NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN
41
- * => Further visitors for the current node are skipped, and its children are not
42
- * traversed. $node stays as-is.
43
- * * NodeTraverser::STOP_TRAVERSAL
44
- * => Traversal is aborted. $node stays as-is
45
- * * otherwise
46
- * => $node is set to the return value
47
- *
48
- * @param Node $node Node
49
- *
50
- * @return Node|Node|NodeTraverser::*|null Replacement node (or special return value)
51
- */
52
- public function enterNode(Node $node);
53
-
54
- /**
55
- * Called when leaving a node.
56
- *
57
- * Return value semantics:
58
- * * null
59
- * => $node stays as-is
60
- * * NodeTraverser::REMOVE_NODE
61
- * => $node is removed from the parent array
62
- * * NodeTraverser::STOP_TRAVERSAL
63
- * => Traversal is aborted. $node stays as-is
64
- * * array (of Nodes)
65
- * => The return value is merged into the parent array (at the position of the $node)
66
- * * otherwise
67
- * => $node is set to the return value
68
- *
69
- * @param Node $node Node
70
- *
71
- * @return Node|Node|NodeTraverser::REMOVE_NODE|NodeTraverser::STOP_TRAVERSAL|null Replacement node (or special return value)
72
- */
73
- public function leaveNode(Node $node);
74
-
75
- /**
76
- * Called once after traversal.
77
- *
78
- * Return value semantics:
79
- * * null: $nodes stays as-is
80
- * * otherwise: $nodes is set to the return value
81
- *
82
- * @param Node $nodes Array of nodes
83
- *
84
- * @return Node|null Array of nodes
85
- */
86
- public function afterTraverse(array $nodes): ?array;
87
-
88
-}
89
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor/CloningVisitor.php
Deleted
22
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\NodeVisitor;
5
-
6
-use PHPStan\PhpDocParser\Ast\AbstractNodeVisitor;
7
-use PHPStan\PhpDocParser\Ast\Attribute;
8
-use PHPStan\PhpDocParser\Ast\Node;
9
-
10
-final class CloningVisitor extends AbstractNodeVisitor
11
-{
12
-
13
- public function enterNode(Node $originalNode): Node
14
- {
15
- $node = clone $originalNode;
16
- $node->setAttribute(Attribute::ORIGINAL_NODE, $originalNode);
17
-
18
- return $node;
19
- }
20
-
21
-}
22
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagMethodValueNode.php
Deleted
47
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class AssertTagMethodValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- public string $parameter;
18
-
19
- public string $method;
20
-
21
- public bool $isNegated;
22
-
23
- public bool $isEquality;
24
-
25
- /** @var string (may be empty) */
26
- public string $description;
27
-
28
- public function __construct(TypeNode $type, string $parameter, string $method, bool $isNegated, string $description, bool $isEquality)
29
- {
30
- $this->type = $type;
31
- $this->parameter = $parameter;
32
- $this->method = $method;
33
- $this->isNegated = $isNegated;
34
- $this->isEquality = $isEquality;
35
- $this->description = $description;
36
- }
37
-
38
-
39
- public function __toString(): string
40
- {
41
- $isNegated = $this->isNegated ? '!' : '';
42
- $isEquality = $this->isEquality ? '=' : '';
43
- return trim("{$isNegated}{$isEquality}{$this->type} {$this->parameter}->{$this->method}() {$this->description}");
44
- }
45
-
46
-}
47
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagPropertyValueNode.php
Deleted
47
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class AssertTagPropertyValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- public string $parameter;
18
-
19
- public string $property;
20
-
21
- public bool $isNegated;
22
-
23
- public bool $isEquality;
24
-
25
- /** @var string (may be empty) */
26
- public string $description;
27
-
28
- public function __construct(TypeNode $type, string $parameter, string $property, bool $isNegated, string $description, bool $isEquality)
29
- {
30
- $this->type = $type;
31
- $this->parameter = $parameter;
32
- $this->property = $property;
33
- $this->isNegated = $isNegated;
34
- $this->isEquality = $isEquality;
35
- $this->description = $description;
36
- }
37
-
38
-
39
- public function __toString(): string
40
- {
41
- $isNegated = $this->isNegated ? '!' : '';
42
- $isEquality = $this->isEquality ? '=' : '';
43
- return trim("{$isNegated}{$isEquality}{$this->type} {$this->parameter}->{$this->property} {$this->description}");
44
- }
45
-
46
-}
47
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagValueNode.php
Deleted
44
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class AssertTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- public string $parameter;
18
-
19
- public bool $isNegated;
20
-
21
- public bool $isEquality;
22
-
23
- /** @var string (may be empty) */
24
- public string $description;
25
-
26
- public function __construct(TypeNode $type, string $parameter, bool $isNegated, string $description, bool $isEquality)
27
- {
28
- $this->type = $type;
29
- $this->parameter = $parameter;
30
- $this->isNegated = $isNegated;
31
- $this->isEquality = $isEquality;
32
- $this->description = $description;
33
- }
34
-
35
-
36
- public function __toString(): string
37
- {
38
- $isNegated = $this->isNegated ? '!' : '';
39
- $isEquality = $this->isEquality ? '=' : '';
40
- return trim("{$isNegated}{$isEquality}{$this->type} {$this->parameter} {$this->description}");
41
- }
42
-
43
-}
44
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/DeprecatedTagValueNode.php
Deleted
29
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function trim;
8
-
9
-class DeprecatedTagValueNode implements PhpDocTagValueNode
10
-{
11
-
12
- use NodeAttributes;
13
-
14
- /** @var string (may be empty) */
15
- public string $description;
16
-
17
- public function __construct(string $description)
18
- {
19
- $this->description = $description;
20
- }
21
-
22
-
23
- public function __toString(): string
24
- {
25
- return trim($this->description);
26
- }
27
-
28
-}
29
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineAnnotation.php
Deleted
36
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine;
5
-
6
-use PHPStan\PhpDocParser\Ast\Node;
7
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
8
-use function implode;
9
-
10
-class DoctrineAnnotation implements Node
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public string $name;
16
-
17
- /** @var list<DoctrineArgument> */
18
- public array $arguments;
19
-
20
- /**
21
- * @param list<DoctrineArgument> $arguments
22
- */
23
- public function __construct(string $name, array $arguments)
24
- {
25
- $this->name = $name;
26
- $this->arguments = $arguments;
27
- }
28
-
29
- public function __toString(): string
30
- {
31
- $arguments = implode(', ', $this->arguments);
32
- return $this->name . '(' . $arguments . ')';
33
- }
34
-
35
-}
36
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArgument.php
Deleted
44
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine;
5
-
6
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprNode;
7
-use PHPStan\PhpDocParser\Ast\Node;
8
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
9
-use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
10
-
11
-/**
12
- * @phpstan-type ValueType = DoctrineAnnotation|IdentifierTypeNode|DoctrineArray|ConstExprNode
13
- */
14
-class DoctrineArgument implements Node
15
-{
16
-
17
- use NodeAttributes;
18
-
19
- public ?IdentifierTypeNode $key = null;
20
-
21
- /** @var ValueType */
22
- public $value;
23
-
24
- /**
25
- * @param ValueType $value
26
- */
27
- public function __construct(?IdentifierTypeNode $key, $value)
28
- {
29
- $this->key = $key;
30
- $this->value = $value;
31
- }
32
-
33
-
34
- public function __toString(): string
35
- {
36
- if ($this->key === null) {
37
- return (string) $this->value;
38
- }
39
-
40
- return $this->key . '=' . $this->value;
41
- }
42
-
43
-}
44
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArray.php
Deleted
34
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine;
5
-
6
-use PHPStan\PhpDocParser\Ast\Node;
7
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
8
-use function implode;
9
-
10
-class DoctrineArray implements Node
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- /** @var list<DoctrineArrayItem> */
16
- public array $items;
17
-
18
- /**
19
- * @param list<DoctrineArrayItem> $items
20
- */
21
- public function __construct(array $items)
22
- {
23
- $this->items = $items;
24
- }
25
-
26
- public function __toString(): string
27
- {
28
- $items = implode(', ', $this->items);
29
-
30
- return '{' . $items . '}';
31
- }
32
-
33
-}
34
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArrayItem.php
Deleted
49
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine;
5
-
6
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprIntegerNode;
7
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode;
8
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstFetchNode;
9
-use PHPStan\PhpDocParser\Ast\Node;
10
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
11
-use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
12
-
13
-/**
14
- * @phpstan-import-type ValueType from DoctrineArgument
15
- * @phpstan-type KeyType = ConstExprIntegerNode|ConstExprStringNode|IdentifierTypeNode|ConstFetchNode|null
16
- */
17
-class DoctrineArrayItem implements Node
18
-{
19
-
20
- use NodeAttributes;
21
-
22
- /** @var KeyType */
23
- public $key;
24
-
25
- /** @var ValueType */
26
- public $value;
27
-
28
- /**
29
- * @param KeyType $key
30
- * @param ValueType $value
31
- */
32
- public function __construct($key, $value)
33
- {
34
- $this->key = $key;
35
- $this->value = $value;
36
- }
37
-
38
-
39
- public function __toString(): string
40
- {
41
- if ($this->key === null) {
42
- return (string) $this->value;
43
- }
44
-
45
- return $this->key . '=' . $this->value;
46
- }
47
-
48
-}
49
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineTagValueNode.php
Deleted
37
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagValueNode;
8
-use function trim;
9
-
10
-class DoctrineTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public DoctrineAnnotation $annotation;
16
-
17
- /** @var string (may be empty) */
18
- public string $description;
19
-
20
-
21
- public function __construct(
22
- DoctrineAnnotation $annotation,
23
- string $description
24
- )
25
- {
26
- $this->annotation = $annotation;
27
- $this->description = $description;
28
- }
29
-
30
-
31
- public function __toString(): string
32
- {
33
- return trim("{$this->annotation} {$this->description}");
34
- }
35
-
36
-}
37
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ExtendsTagValueNode.php
Deleted
33
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
8
-use function trim;
9
-
10
-class ExtendsTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public GenericTypeNode $type;
16
-
17
- /** @var string (may be empty) */
18
- public string $description;
19
-
20
- public function __construct(GenericTypeNode $type, string $description)
21
- {
22
- $this->type = $type;
23
- $this->description = $description;
24
- }
25
-
26
-
27
- public function __toString(): string
28
- {
29
- return trim("{$this->type} {$this->description}");
30
- }
31
-
32
-}
33
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/GenericTagValueNode.php
Deleted
28
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class GenericTagValueNode implements PhpDocTagValueNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- /** @var string (may be empty) */
14
- public string $value;
15
-
16
- public function __construct(string $value)
17
- {
18
- $this->value = $value;
19
- }
20
-
21
-
22
- public function __toString(): string
23
- {
24
- return $this->value;
25
- }
26
-
27
-}
28
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ImplementsTagValueNode.php
Deleted
33
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
8
-use function trim;
9
-
10
-class ImplementsTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public GenericTypeNode $type;
16
-
17
- /** @var string (may be empty) */
18
- public string $description;
19
-
20
- public function __construct(GenericTypeNode $type, string $description)
21
- {
22
- $this->type = $type;
23
- $this->description = $description;
24
- }
25
-
26
-
27
- public function __toString(): string
28
- {
29
- return trim("{$this->type} {$this->description}");
30
- }
31
-
32
-}
33
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/InvalidTagValueNode.php
Deleted
55
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Parser\ParserException;
8
-use function sprintf;
9
-use function trigger_error;
10
-use const E_USER_WARNING;
11
-
12
-/**
13
- * @property ParserException $exception
14
- */
15
-class InvalidTagValueNode implements PhpDocTagValueNode
16
-{
17
-
18
- use NodeAttributes;
19
-
20
- /** @var string (may be empty) */
21
- public string $value;
22
-
23
- /** @var mixed */
24
- private array $exceptionArgs;
25
-
26
- public function __construct(string $value, ParserException $exception)
27
- {
28
- $this->value = $value;
29
- $this->exceptionArgs =
30
- $exception->getCurrentTokenValue(),
31
- $exception->getCurrentTokenType(),
32
- $exception->getCurrentOffset(),
33
- $exception->getExpectedTokenType(),
34
- $exception->getExpectedTokenValue(),
35
- $exception->getCurrentTokenLine(),
36
- ;
37
- }
38
-
39
- public function __get(string $name): ?ParserException
40
- {
41
- if ($name !== 'exception') {
42
- trigger_error(sprintf('Undefined property: %s::$%s', self::class, $name), E_USER_WARNING);
43
- return null;
44
- }
45
-
46
- return new ParserException(...$this->exceptionArgs);
47
- }
48
-
49
- public function __toString(): string
50
- {
51
- return $this->value;
52
- }
53
-
54
-}
55
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueNode.php
Deleted
57
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function count;
9
-use function implode;
10
-
11
-class MethodTagValueNode implements PhpDocTagValueNode
12
-{
13
-
14
- use NodeAttributes;
15
-
16
- public bool $isStatic;
17
-
18
- public ?TypeNode $returnType = null;
19
-
20
- public string $methodName;
21
-
22
- /** @var TemplateTagValueNode */
23
- public array $templateTypes;
24
-
25
- /** @var MethodTagValueParameterNode */
26
- public array $parameters;
27
-
28
- /** @var string (may be empty) */
29
- public string $description;
30
-
31
- /**
32
- * @param MethodTagValueParameterNode $parameters
33
- * @param TemplateTagValueNode $templateTypes
34
- */
35
- public function __construct(bool $isStatic, ?TypeNode $returnType, string $methodName, array $parameters, string $description, array $templateTypes)
36
- {
37
- $this->isStatic = $isStatic;
38
- $this->returnType = $returnType;
39
- $this->methodName = $methodName;
40
- $this->parameters = $parameters;
41
- $this->description = $description;
42
- $this->templateTypes = $templateTypes;
43
- }
44
-
45
-
46
- public function __toString(): string
47
- {
48
- $static = $this->isStatic ? 'static ' : '';
49
- $returnType = $this->returnType !== null ? "{$this->returnType} " : '';
50
- $parameters = implode(', ', $this->parameters);
51
- $description = $this->description !== '' ? " {$this->description}" : '';
52
- $templateTypes = count($this->templateTypes) > 0 ? '<' . implode(', ', $this->templateTypes) . '>' : '';
53
- return "{$static}{$returnType}{$this->methodName}{$templateTypes}({$parameters}){$description}";
54
- }
55
-
56
-}
57
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueParameterNode.php
Deleted
46
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprNode;
7
-use PHPStan\PhpDocParser\Ast\Node;
8
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
9
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
10
-
11
-class MethodTagValueParameterNode implements Node
12
-{
13
-
14
- use NodeAttributes;
15
-
16
- public ?TypeNode $type = null;
17
-
18
- public bool $isReference;
19
-
20
- public bool $isVariadic;
21
-
22
- public string $parameterName;
23
-
24
- public ?ConstExprNode $defaultValue = null;
25
-
26
- public function __construct(?TypeNode $type, bool $isReference, bool $isVariadic, string $parameterName, ?ConstExprNode $defaultValue)
27
- {
28
- $this->type = $type;
29
- $this->isReference = $isReference;
30
- $this->isVariadic = $isVariadic;
31
- $this->parameterName = $parameterName;
32
- $this->defaultValue = $defaultValue;
33
- }
34
-
35
-
36
- public function __toString(): string
37
- {
38
- $type = $this->type !== null ? "{$this->type} " : '';
39
- $isReference = $this->isReference ? '&' : '';
40
- $isVariadic = $this->isVariadic ? '...' : '';
41
- $default = $this->defaultValue !== null ? " = {$this->defaultValue}" : '';
42
- return "{$type}{$isReference}{$isVariadic}{$this->parameterName}{$default}";
43
- }
44
-
45
-}
46
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MixinTagValueNode.php
Deleted
33
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class MixinTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- /** @var string (may be empty) */
18
- public string $description;
19
-
20
- public function __construct(TypeNode $type, string $description)
21
- {
22
- $this->type = $type;
23
- $this->description = $description;
24
- }
25
-
26
-
27
- public function __toString(): string
28
- {
29
- return trim("{$this->type} {$this->description}");
30
- }
31
-
32
-}
33
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamClosureThisTagValueNode.php
Deleted
35
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class ParamClosureThisTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- public string $parameterName;
18
-
19
- /** @var string (may be empty) */
20
- public string $description;
21
-
22
- public function __construct(TypeNode $type, string $parameterName, string $description)
23
- {
24
- $this->type = $type;
25
- $this->parameterName = $parameterName;
26
- $this->description = $description;
27
- }
28
-
29
- public function __toString(): string
30
- {
31
- return trim("{$this->type} {$this->parameterName} {$this->description}");
32
- }
33
-
34
-}
35
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamImmediatelyInvokedCallableTagValueNode.php
Deleted
31
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function trim;
8
-
9
-class ParamImmediatelyInvokedCallableTagValueNode implements PhpDocTagValueNode
10
-{
11
-
12
- use NodeAttributes;
13
-
14
- public string $parameterName;
15
-
16
- /** @var string (may be empty) */
17
- public string $description;
18
-
19
- public function __construct(string $parameterName, string $description)
20
- {
21
- $this->parameterName = $parameterName;
22
- $this->description = $description;
23
- }
24
-
25
- public function __toString(): string
26
- {
27
- return trim("{$this->parameterName} {$this->description}");
28
- }
29
-
30
-}
31
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamLaterInvokedCallableTagValueNode.php
Deleted
31
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function trim;
8
-
9
-class ParamLaterInvokedCallableTagValueNode implements PhpDocTagValueNode
10
-{
11
-
12
- use NodeAttributes;
13
-
14
- public string $parameterName;
15
-
16
- /** @var string (may be empty) */
17
- public string $description;
18
-
19
- public function __construct(string $parameterName, string $description)
20
- {
21
- $this->parameterName = $parameterName;
22
- $this->description = $description;
23
- }
24
-
25
- public function __toString(): string
26
- {
27
- return trim("{$this->parameterName} {$this->description}");
28
- }
29
-
30
-}
31
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamOutTagValueNode.php
Deleted
35
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class ParamOutTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- public string $parameterName;
18
-
19
- /** @var string (may be empty) */
20
- public string $description;
21
-
22
- public function __construct(TypeNode $type, string $parameterName, string $description)
23
- {
24
- $this->type = $type;
25
- $this->parameterName = $parameterName;
26
- $this->description = $description;
27
- }
28
-
29
- public function __toString(): string
30
- {
31
- return trim("{$this->type} {$this->parameterName} {$this->description}");
32
- }
33
-
34
-}
35
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamTagValueNode.php
Deleted
44
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class ParamTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- public bool $isReference;
18
-
19
- public bool $isVariadic;
20
-
21
- public string $parameterName;
22
-
23
- /** @var string (may be empty) */
24
- public string $description;
25
-
26
- public function __construct(TypeNode $type, bool $isVariadic, string $parameterName, string $description, bool $isReference)
27
- {
28
- $this->type = $type;
29
- $this->isReference = $isReference;
30
- $this->isVariadic = $isVariadic;
31
- $this->parameterName = $parameterName;
32
- $this->description = $description;
33
- }
34
-
35
-
36
- public function __toString(): string
37
- {
38
- $reference = $this->isReference ? '&' : '';
39
- $variadic = $this->isVariadic ? '...' : '';
40
- return trim("{$this->type} {$reference}{$variadic}{$this->parameterName} {$this->description}");
41
- }
42
-
43
-}
44
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocChildNode.php
Deleted
12
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\Node;
7
-
8
-interface PhpDocChildNode extends Node
9
-{
10
-
11
-}
12
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocNode.php
Deleted
392
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\Node;
7
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
8
-use function array_column;
9
-use function array_filter;
10
-use function array_map;
11
-use function implode;
12
-
13
-class PhpDocNode implements Node
14
-{
15
-
16
- use NodeAttributes;
17
-
18
- /** @var PhpDocChildNode */
19
- public array $children;
20
-
21
- /**
22
- * @param PhpDocChildNode $children
23
- */
24
- public function __construct(array $children)
25
- {
26
- $this->children = $children;
27
- }
28
-
29
-
30
- /**
31
- * @return PhpDocTagNode
32
- */
33
- public function getTags(): array
34
- {
35
- return array_filter($this->children, static fn (PhpDocChildNode $child): bool => $child instanceof PhpDocTagNode);
36
- }
37
-
38
-
39
- /**
40
- * @return PhpDocTagNode
41
- */
42
- public function getTagsByName(string $tagName): array
43
- {
44
- return array_filter($this->getTags(), static fn (PhpDocTagNode $tag): bool => $tag->name === $tagName);
45
- }
46
-
47
-
48
- /**
49
- * @return VarTagValueNode
50
- */
51
- public function getVarTagValues(string $tagName = '@var'): array
52
- {
53
- return array_filter(
54
- array_column($this->getTagsByName($tagName), 'value'),
55
- static fn (PhpDocTagValueNode $value): bool => $value instanceof VarTagValueNode,
56
- );
57
- }
58
-
59
-
60
- /**
61
- * @return ParamTagValueNode
62
- */
63
- public function getParamTagValues(string $tagName = '@param'): array
64
- {
65
- return array_filter(
66
- array_column($this->getTagsByName($tagName), 'value'),
67
- static fn (PhpDocTagValueNode $value): bool => $value instanceof ParamTagValueNode,
68
- );
69
- }
70
-
71
-
72
- /**
73
- * @return TypelessParamTagValueNode
74
- */
75
- public function getTypelessParamTagValues(string $tagName = '@param'): array
76
- {
77
- return array_filter(
78
- array_column($this->getTagsByName($tagName), 'value'),
79
- static fn (PhpDocTagValueNode $value): bool => $value instanceof TypelessParamTagValueNode,
80
- );
81
- }
82
-
83
-
84
- /**
85
- * @return ParamImmediatelyInvokedCallableTagValueNode
86
- */
87
- public function getParamImmediatelyInvokedCallableTagValues(string $tagName = '@param-immediately-invoked-callable'): array
88
- {
89
- return array_filter(
90
- array_column($this->getTagsByName($tagName), 'value'),
91
- static fn (PhpDocTagValueNode $value): bool => $value instanceof ParamImmediatelyInvokedCallableTagValueNode,
92
- );
93
- }
94
-
95
-
96
- /**
97
- * @return ParamLaterInvokedCallableTagValueNode
98
- */
99
- public function getParamLaterInvokedCallableTagValues(string $tagName = '@param-later-invoked-callable'): array
100
- {
101
- return array_filter(
102
- array_column($this->getTagsByName($tagName), 'value'),
103
- static fn (PhpDocTagValueNode $value): bool => $value instanceof ParamLaterInvokedCallableTagValueNode,
104
- );
105
- }
106
-
107
-
108
- /**
109
- * @return ParamClosureThisTagValueNode
110
- */
111
- public function getParamClosureThisTagValues(string $tagName = '@param-closure-this'): array
112
- {
113
- return array_filter(
114
- array_column($this->getTagsByName($tagName), 'value'),
115
- static fn (PhpDocTagValueNode $value): bool => $value instanceof ParamClosureThisTagValueNode,
116
- );
117
- }
118
-
119
- /**
120
- * @return PureUnlessCallableIsImpureTagValueNode
121
- */
122
- public function getPureUnlessCallableIsImpureTagValues(string $tagName = '@pure-unless-callable-is-impure'): array
123
- {
124
- return array_filter(
125
- array_column($this->getTagsByName($tagName), 'value'),
126
- static fn (PhpDocTagValueNode $value): bool => $value instanceof PureUnlessCallableIsImpureTagValueNode,
127
- );
128
- }
129
-
130
- /**
131
- * @return TemplateTagValueNode
132
- */
133
- public function getTemplateTagValues(string $tagName = '@template'): array
134
- {
135
- return array_filter(
136
- array_column($this->getTagsByName($tagName), 'value'),
137
- static fn (PhpDocTagValueNode $value): bool => $value instanceof TemplateTagValueNode,
138
- );
139
- }
140
-
141
-
142
- /**
143
- * @return ExtendsTagValueNode
144
- */
145
- public function getExtendsTagValues(string $tagName = '@extends'): array
146
- {
147
- return array_filter(
148
- array_column($this->getTagsByName($tagName), 'value'),
149
- static fn (PhpDocTagValueNode $value): bool => $value instanceof ExtendsTagValueNode,
150
- );
151
- }
152
-
153
-
154
- /**
155
- * @return ImplementsTagValueNode
156
- */
157
- public function getImplementsTagValues(string $tagName = '@implements'): array
158
- {
159
- return array_filter(
160
- array_column($this->getTagsByName($tagName), 'value'),
161
- static fn (PhpDocTagValueNode $value): bool => $value instanceof ImplementsTagValueNode,
162
- );
163
- }
164
-
165
-
166
- /**
167
- * @return UsesTagValueNode
168
- */
169
- public function getUsesTagValues(string $tagName = '@use'): array
170
- {
171
- return array_filter(
172
- array_column($this->getTagsByName($tagName), 'value'),
173
- static fn (PhpDocTagValueNode $value): bool => $value instanceof UsesTagValueNode,
174
- );
175
- }
176
-
177
-
178
- /**
179
- * @return ReturnTagValueNode
180
- */
181
- public function getReturnTagValues(string $tagName = '@return'): array
182
- {
183
- return array_filter(
184
- array_column($this->getTagsByName($tagName), 'value'),
185
- static fn (PhpDocTagValueNode $value): bool => $value instanceof ReturnTagValueNode,
186
- );
187
- }
188
-
189
-
190
- /**
191
- * @return ThrowsTagValueNode
192
- */
193
- public function getThrowsTagValues(string $tagName = '@throws'): array
194
- {
195
- return array_filter(
196
- array_column($this->getTagsByName($tagName), 'value'),
197
- static fn (PhpDocTagValueNode $value): bool => $value instanceof ThrowsTagValueNode,
198
- );
199
- }
200
-
201
-
202
- /**
203
- * @return MixinTagValueNode
204
- */
205
- public function getMixinTagValues(string $tagName = '@mixin'): array
206
- {
207
- return array_filter(
208
- array_column($this->getTagsByName($tagName), 'value'),
209
- static fn (PhpDocTagValueNode $value): bool => $value instanceof MixinTagValueNode,
210
- );
211
- }
212
-
213
- /**
214
- * @return RequireExtendsTagValueNode
215
- */
216
- public function getRequireExtendsTagValues(string $tagName = '@phpstan-require-extends'): array
217
- {
218
- return array_filter(
219
- array_column($this->getTagsByName($tagName), 'value'),
220
- static fn (PhpDocTagValueNode $value): bool => $value instanceof RequireExtendsTagValueNode,
221
- );
222
- }
223
-
224
- /**
225
- * @return RequireImplementsTagValueNode
226
- */
227
- public function getRequireImplementsTagValues(string $tagName = '@phpstan-require-implements'): array
228
- {
229
- return array_filter(
230
- array_column($this->getTagsByName($tagName), 'value'),
231
- static fn (PhpDocTagValueNode $value): bool => $value instanceof RequireImplementsTagValueNode,
232
- );
233
- }
234
-
235
- /**
236
- * @return DeprecatedTagValueNode
237
- */
238
- public function getDeprecatedTagValues(): array
239
- {
240
- return array_filter(
241
- array_column($this->getTagsByName('@deprecated'), 'value'),
242
- static fn (PhpDocTagValueNode $value): bool => $value instanceof DeprecatedTagValueNode,
243
- );
244
- }
245
-
246
-
247
- /**
248
- * @return PropertyTagValueNode
249
- */
250
- public function getPropertyTagValues(string $tagName = '@property'): array
251
- {
252
- return array_filter(
253
- array_column($this->getTagsByName($tagName), 'value'),
254
- static fn (PhpDocTagValueNode $value): bool => $value instanceof PropertyTagValueNode,
255
- );
256
- }
257
-
258
-
259
- /**
260
- * @return PropertyTagValueNode
261
- */
262
- public function getPropertyReadTagValues(string $tagName = '@property-read'): array
263
- {
264
- return array_filter(
265
- array_column($this->getTagsByName($tagName), 'value'),
266
- static fn (PhpDocTagValueNode $value): bool => $value instanceof PropertyTagValueNode,
267
- );
268
- }
269
-
270
-
271
- /**
272
- * @return PropertyTagValueNode
273
- */
274
- public function getPropertyWriteTagValues(string $tagName = '@property-write'): array
275
- {
276
- return array_filter(
277
- array_column($this->getTagsByName($tagName), 'value'),
278
- static fn (PhpDocTagValueNode $value): bool => $value instanceof PropertyTagValueNode,
279
- );
280
- }
281
-
282
-
283
- /**
284
- * @return MethodTagValueNode
285
- */
286
- public function getMethodTagValues(string $tagName = '@method'): array
287
- {
288
- return array_filter(
289
- array_column($this->getTagsByName($tagName), 'value'),
290
- static fn (PhpDocTagValueNode $value): bool => $value instanceof MethodTagValueNode,
291
- );
292
- }
293
-
294
-
295
- /**
296
- * @return TypeAliasTagValueNode
297
- */
298
- public function getTypeAliasTagValues(string $tagName = '@phpstan-type'): array
299
- {
300
- return array_filter(
301
- array_column($this->getTagsByName($tagName), 'value'),
302
- static fn (PhpDocTagValueNode $value): bool => $value instanceof TypeAliasTagValueNode,
303
- );
304
- }
305
-
306
-
307
- /**
308
- * @return TypeAliasImportTagValueNode
309
- */
310
- public function getTypeAliasImportTagValues(string $tagName = '@phpstan-import-type'): array
311
- {
312
- return array_filter(
313
- array_column($this->getTagsByName($tagName), 'value'),
314
- static fn (PhpDocTagValueNode $value): bool => $value instanceof TypeAliasImportTagValueNode,
315
- );
316
- }
317
-
318
-
319
- /**
320
- * @return AssertTagValueNode
321
- */
322
- public function getAssertTagValues(string $tagName = '@phpstan-assert'): array
323
- {
324
- return array_filter(
325
- array_column($this->getTagsByName($tagName), 'value'),
326
- static fn (PhpDocTagValueNode $value): bool => $value instanceof AssertTagValueNode,
327
- );
328
- }
329
-
330
-
331
- /**
332
- * @return AssertTagPropertyValueNode
333
- */
334
- public function getAssertPropertyTagValues(string $tagName = '@phpstan-assert'): array
335
- {
336
- return array_filter(
337
- array_column($this->getTagsByName($tagName), 'value'),
338
- static fn (PhpDocTagValueNode $value): bool => $value instanceof AssertTagPropertyValueNode,
339
- );
340
- }
341
-
342
-
343
- /**
344
- * @return AssertTagMethodValueNode
345
- */
346
- public function getAssertMethodTagValues(string $tagName = '@phpstan-assert'): array
347
- {
348
- return array_filter(
349
- array_column($this->getTagsByName($tagName), 'value'),
350
- static fn (PhpDocTagValueNode $value): bool => $value instanceof AssertTagMethodValueNode,
351
- );
352
- }
353
-
354
-
355
- /**
356
- * @return SelfOutTagValueNode
357
- */
358
- public function getSelfOutTypeTagValues(string $tagName = '@phpstan-this-out'): array
359
- {
360
- return array_filter(
361
- array_column($this->getTagsByName($tagName), 'value'),
362
- static fn (PhpDocTagValueNode $value): bool => $value instanceof SelfOutTagValueNode,
363
- );
364
- }
365
-
366
-
367
- /**
368
- * @return ParamOutTagValueNode
369
- */
370
- public function getParamOutTypeTagValues(string $tagName = '@param-out'): array
371
- {
372
- return array_filter(
373
- array_column($this->getTagsByName($tagName), 'value'),
374
- static fn (PhpDocTagValueNode $value): bool => $value instanceof ParamOutTagValueNode,
375
- );
376
- }
377
-
378
-
379
- public function __toString(): string
380
- {
381
- $children = array_map(
382
- static function (PhpDocChildNode $child): string {
383
- $s = (string) $child;
384
- return $s === '' ? '' : ' ' . $s;
385
- },
386
- $this->children,
387
- );
388
- return "/**\n *" . implode("\n *", $children) . "\n */";
389
- }
390
-
391
-}
392
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagNode.php
Deleted
36
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine\DoctrineTagValueNode;
8
-use function trim;
9
-
10
-class PhpDocTagNode implements PhpDocChildNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public string $name;
16
-
17
- public PhpDocTagValueNode $value;
18
-
19
- public function __construct(string $name, PhpDocTagValueNode $value)
20
- {
21
- $this->name = $name;
22
- $this->value = $value;
23
- }
24
-
25
-
26
- public function __toString(): string
27
- {
28
- if ($this->value instanceof DoctrineTagValueNode) {
29
- return (string) $this->value;
30
- }
31
-
32
- return trim("{$this->name} {$this->value}");
33
- }
34
-
35
-}
36
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.php
Deleted
12
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\Node;
7
-
8
-interface PhpDocTagValueNode extends Node
9
-{
10
-
11
-}
12
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTextNode.php
Deleted
27
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class PhpDocTextNode implements PhpDocChildNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- public string $text;
14
-
15
- public function __construct(string $text)
16
- {
17
- $this->text = $text;
18
- }
19
-
20
-
21
- public function __toString(): string
22
- {
23
- return $this->text;
24
- }
25
-
26
-}
27
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.php
Deleted
36
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class PropertyTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- public string $propertyName;
18
-
19
- /** @var string (may be empty) */
20
- public string $description;
21
-
22
- public function __construct(TypeNode $type, string $propertyName, string $description)
23
- {
24
- $this->type = $type;
25
- $this->propertyName = $propertyName;
26
- $this->description = $description;
27
- }
28
-
29
-
30
- public function __toString(): string
31
- {
32
- return trim("{$this->type} {$this->propertyName} {$this->description}");
33
- }
34
-
35
-}
36
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PureUnlessCallableIsImpureTagValueNode.php
Deleted
31
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function trim;
8
-
9
-class PureUnlessCallableIsImpureTagValueNode implements PhpDocTagValueNode
10
-{
11
-
12
- use NodeAttributes;
13
-
14
- public string $parameterName;
15
-
16
- /** @var string (may be empty) */
17
- public string $description;
18
-
19
- public function __construct(string $parameterName, string $description)
20
- {
21
- $this->parameterName = $parameterName;
22
- $this->description = $description;
23
- }
24
-
25
- public function __toString(): string
26
- {
27
- return trim("{$this->parameterName} {$this->description}");
28
- }
29
-
30
-}
31
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireExtendsTagValueNode.php
Deleted
33
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class RequireExtendsTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- /** @var string (may be empty) */
18
- public string $description;
19
-
20
- public function __construct(TypeNode $type, string $description)
21
- {
22
- $this->type = $type;
23
- $this->description = $description;
24
- }
25
-
26
-
27
- public function __toString(): string
28
- {
29
- return trim("{$this->type} {$this->description}");
30
- }
31
-
32
-}
33
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireImplementsTagValueNode.php
Deleted
33
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class RequireImplementsTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- /** @var string (may be empty) */
18
- public string $description;
19
-
20
- public function __construct(TypeNode $type, string $description)
21
- {
22
- $this->type = $type;
23
- $this->description = $description;
24
- }
25
-
26
-
27
- public function __toString(): string
28
- {
29
- return trim("{$this->type} {$this->description}");
30
- }
31
-
32
-}
33
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.php
Deleted
33
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class ReturnTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- /** @var string (may be empty) */
18
- public string $description;
19
-
20
- public function __construct(TypeNode $type, string $description)
21
- {
22
- $this->type = $type;
23
- $this->description = $description;
24
- }
25
-
26
-
27
- public function __toString(): string
28
- {
29
- return trim("{$this->type} {$this->description}");
30
- }
31
-
32
-}
33
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/SelfOutTagValueNode.php
Deleted
33
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class SelfOutTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- /** @var string (may be empty) */
18
- public string $description;
19
-
20
- public function __construct(TypeNode $type, string $description)
21
- {
22
- $this->type = $type;
23
- $this->description = $description;
24
- }
25
-
26
-
27
- public function __toString(): string
28
- {
29
- return trim($this->type . ' ' . $this->description);
30
- }
31
-
32
-}
33
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php
Deleted
49
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class TemplateTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- /** @var non-empty-string */
16
- public string $name;
17
-
18
- public ?TypeNode $bound;
19
-
20
- public ?TypeNode $default;
21
-
22
- public ?TypeNode $lowerBound;
23
-
24
- /** @var string (may be empty) */
25
- public string $description;
26
-
27
- /**
28
- * @param non-empty-string $name
29
- */
30
- public function __construct(string $name, ?TypeNode $bound, string $description, ?TypeNode $default = null, ?TypeNode $lowerBound = null)
31
- {
32
- $this->name = $name;
33
- $this->bound = $bound;
34
- $this->lowerBound = $lowerBound;
35
- $this->default = $default;
36
- $this->description = $description;
37
- }
38
-
39
-
40
- public function __toString(): string
41
- {
42
- $upperBound = $this->bound !== null ? " of {$this->bound}" : '';
43
- $lowerBound = $this->lowerBound !== null ? " super {$this->lowerBound}" : '';
44
- $default = $this->default !== null ? " = {$this->default}" : '';
45
- return trim("{$this->name}{$upperBound}{$lowerBound}{$default} {$this->description}");
46
- }
47
-
48
-}
49
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ThrowsTagValueNode.php
Deleted
33
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class ThrowsTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- /** @var string (may be empty) */
18
- public string $description;
19
-
20
- public function __construct(TypeNode $type, string $description)
21
- {
22
- $this->type = $type;
23
- $this->description = $description;
24
- }
25
-
26
-
27
- public function __toString(): string
28
- {
29
- return trim("{$this->type} {$this->description}");
30
- }
31
-
32
-}
33
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasImportTagValueNode.php
Deleted
37
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
8
-use function trim;
9
-
10
-class TypeAliasImportTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public string $importedAlias;
16
-
17
- public IdentifierTypeNode $importedFrom;
18
-
19
- public ?string $importedAs = null;
20
-
21
- public function __construct(string $importedAlias, IdentifierTypeNode $importedFrom, ?string $importedAs)
22
- {
23
- $this->importedAlias = $importedAlias;
24
- $this->importedFrom = $importedFrom;
25
- $this->importedAs = $importedAs;
26
- }
27
-
28
- public function __toString(): string
29
- {
30
- return trim(
31
- "{$this->importedAlias} from {$this->importedFrom}"
32
- . ($this->importedAs !== null ? " as {$this->importedAs}" : ''),
33
- );
34
- }
35
-
36
-}
37
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasTagValueNode.php
Deleted
32
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class TypeAliasTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public string $alias;
16
-
17
- public TypeNode $type;
18
-
19
- public function __construct(string $alias, TypeNode $type)
20
- {
21
- $this->alias = $alias;
22
- $this->type = $type;
23
- }
24
-
25
-
26
- public function __toString(): string
27
- {
28
- return trim("{$this->alias} {$this->type}");
29
- }
30
-
31
-}
32
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypelessParamTagValueNode.php
Deleted
40
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function trim;
8
-
9
-class TypelessParamTagValueNode implements PhpDocTagValueNode
10
-{
11
-
12
- use NodeAttributes;
13
-
14
- public bool $isReference;
15
-
16
- public bool $isVariadic;
17
-
18
- public string $parameterName;
19
-
20
- /** @var string (may be empty) */
21
- public string $description;
22
-
23
- public function __construct(bool $isVariadic, string $parameterName, string $description, bool $isReference)
24
- {
25
- $this->isReference = $isReference;
26
- $this->isVariadic = $isVariadic;
27
- $this->parameterName = $parameterName;
28
- $this->description = $description;
29
- }
30
-
31
-
32
- public function __toString(): string
33
- {
34
- $reference = $this->isReference ? '&' : '';
35
- $variadic = $this->isVariadic ? '...' : '';
36
- return trim("{$reference}{$variadic}{$this->parameterName} {$this->description}");
37
- }
38
-
39
-}
40
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/UsesTagValueNode.php
Deleted
33
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
8
-use function trim;
9
-
10
-class UsesTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public GenericTypeNode $type;
16
-
17
- /** @var string (may be empty) */
18
- public string $description;
19
-
20
- public function __construct(GenericTypeNode $type, string $description)
21
- {
22
- $this->type = $type;
23
- $this->description = $description;
24
- }
25
-
26
-
27
- public function __toString(): string
28
- {
29
- return trim("{$this->type} {$this->description}");
30
- }
31
-
32
-}
33
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.php
Deleted
37
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\PhpDoc;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
8
-use function trim;
9
-
10
-class VarTagValueNode implements PhpDocTagValueNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- /** @var string (may be empty) */
18
- public string $variableName;
19
-
20
- /** @var string (may be empty) */
21
- public string $description;
22
-
23
- public function __construct(TypeNode $type, string $variableName, string $description)
24
- {
25
- $this->type = $type;
26
- $this->variableName = $variableName;
27
- $this->description = $description;
28
- }
29
-
30
-
31
- public function __toString(): string
32
- {
33
- return trim("$this->type " . trim("{$this->variableName} {$this->description}"));
34
- }
35
-
36
-}
37
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.php
Deleted
50
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprIntegerNode;
7
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode;
8
-use PHPStan\PhpDocParser\Ast\Node;
9
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
10
-use function sprintf;
11
-
12
-class ArrayShapeItemNode implements Node
13
-{
14
-
15
- use NodeAttributes;
16
-
17
- /** @var ConstExprIntegerNode|ConstExprStringNode|IdentifierTypeNode|null */
18
- public $keyName;
19
-
20
- public bool $optional;
21
-
22
- public TypeNode $valueType;
23
-
24
- /**
25
- * @param ConstExprIntegerNode|ConstExprStringNode|IdentifierTypeNode|null $keyName
26
- */
27
- public function __construct($keyName, bool $optional, TypeNode $valueType)
28
- {
29
- $this->keyName = $keyName;
30
- $this->optional = $optional;
31
- $this->valueType = $valueType;
32
- }
33
-
34
-
35
- public function __toString(): string
36
- {
37
- if ($this->keyName !== null) {
38
- return sprintf(
39
- '%s%s: %s',
40
- (string) $this->keyName,
41
- $this->optional ? '?' : '',
42
- (string) $this->valueType,
43
- );
44
- }
45
-
46
- return (string) $this->valueType;
47
- }
48
-
49
-}
50
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php
Deleted
78
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function implode;
8
-
9
-class ArrayShapeNode implements TypeNode
10
-{
11
-
12
- public const KIND_ARRAY = 'array';
13
- public const KIND_LIST = 'list';
14
- public const KIND_NON_EMPTY_ARRAY = 'non-empty-array';
15
- public const KIND_NON_EMPTY_LIST = 'non-empty-list';
16
-
17
- use NodeAttributes;
18
-
19
- /** @var ArrayShapeItemNode */
20
- public array $items;
21
-
22
- public bool $sealed;
23
-
24
- /** @var self::KIND_* */
25
- public $kind;
26
-
27
- public ?ArrayShapeUnsealedTypeNode $unsealedType = null;
28
-
29
- /**
30
- * @param ArrayShapeItemNode $items
31
- * @param self::KIND_* $kind
32
- */
33
- private function __construct(
34
- array $items,
35
- bool $sealed = true,
36
- ?ArrayShapeUnsealedTypeNode $unsealedType = null,
37
- string $kind = self::KIND_ARRAY
38
- )
39
- {
40
- $this->items = $items;
41
- $this->sealed = $sealed;
42
- $this->unsealedType = $unsealedType;
43
- $this->kind = $kind;
44
- }
45
-
46
-
47
- /**
48
- * @param ArrayShapeItemNode $items
49
- * @param self::KIND_* $kind
50
- */
51
- public static function createSealed(array $items, string $kind = self::KIND_ARRAY): self
52
- {
53
- return new self($items, true, null, $kind);
54
- }
55
-
56
- /**
57
- * @param ArrayShapeItemNode $items
58
- * @param self::KIND_* $kind
59
- */
60
- public static function createUnsealed(array $items, ?ArrayShapeUnsealedTypeNode $unsealedType, string $kind = self::KIND_ARRAY): self
61
- {
62
- return new self($items, false, $unsealedType, $kind);
63
- }
64
-
65
-
66
- public function __toString(): string
67
- {
68
- $items = $this->items;
69
-
70
- if (! $this->sealed) {
71
- $items = '...' . $this->unsealedType;
72
- }
73
-
74
- return $this->kind . '{' . implode(', ', $items) . '}';
75
- }
76
-
77
-}
78
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeUnsealedTypeNode.php
Deleted
34
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\Node;
7
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
8
-use function sprintf;
9
-
10
-class ArrayShapeUnsealedTypeNode implements Node
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $valueType;
16
-
17
- public ?TypeNode $keyType = null;
18
-
19
- public function __construct(TypeNode $valueType, ?TypeNode $keyType)
20
- {
21
- $this->valueType = $valueType;
22
- $this->keyType = $keyType;
23
- }
24
-
25
- public function __toString(): string
26
- {
27
- if ($this->keyType !== null) {
28
- return sprintf('<%s, %s>', $this->keyType, $this->valueType);
29
- }
30
- return sprintf('<%s>', $this->valueType);
31
- }
32
-
33
-}
34
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.php
Deleted
35
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class ArrayTypeNode implements TypeNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- public TypeNode $type;
14
-
15
- public function __construct(TypeNode $type)
16
- {
17
- $this->type = $type;
18
- }
19
-
20
-
21
- public function __toString(): string
22
- {
23
- if (
24
- $this->type instanceof CallableTypeNode
25
- || $this->type instanceof ConstTypeNode
26
- || $this->type instanceof NullableTypeNode
27
- ) {
28
- return '(' . $this->type . ')';
29
- }
30
-
31
- return $this->type . '';
32
- }
33
-
34
-}
35
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php
Deleted
52
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Ast\PhpDoc\TemplateTagValueNode;
8
-use function implode;
9
-
10
-class CallableTypeNode implements TypeNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public IdentifierTypeNode $identifier;
16
-
17
- /** @var TemplateTagValueNode */
18
- public array $templateTypes;
19
-
20
- /** @var CallableTypeParameterNode */
21
- public array $parameters;
22
-
23
- public TypeNode $returnType;
24
-
25
- /**
26
- * @param CallableTypeParameterNode $parameters
27
- * @param TemplateTagValueNode $templateTypes
28
- */
29
- public function __construct(IdentifierTypeNode $identifier, array $parameters, TypeNode $returnType, array $templateTypes)
30
- {
31
- $this->identifier = $identifier;
32
- $this->parameters = $parameters;
33
- $this->returnType = $returnType;
34
- $this->templateTypes = $templateTypes;
35
- }
36
-
37
-
38
- public function __toString(): string
39
- {
40
- $returnType = $this->returnType;
41
- if ($returnType instanceof self) {
42
- $returnType = "({$returnType})";
43
- }
44
- $template = $this->templateTypes !==
45
- ? '<' . implode(', ', $this->templateTypes) . '>'
46
- : '';
47
- $parameters = implode(', ', $this->parameters);
48
- return "{$this->identifier}{$template}({$parameters}): {$returnType}";
49
- }
50
-
51
-}
52
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeParameterNode.php
Deleted
46
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\Node;
7
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
8
-use function trim;
9
-
10
-class CallableTypeParameterNode implements Node
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- public TypeNode $type;
16
-
17
- public bool $isReference;
18
-
19
- public bool $isVariadic;
20
-
21
- /** @var string (may be empty) */
22
- public string $parameterName;
23
-
24
- public bool $isOptional;
25
-
26
- public function __construct(TypeNode $type, bool $isReference, bool $isVariadic, string $parameterName, bool $isOptional)
27
- {
28
- $this->type = $type;
29
- $this->isReference = $isReference;
30
- $this->isVariadic = $isVariadic;
31
- $this->parameterName = $parameterName;
32
- $this->isOptional = $isOptional;
33
- }
34
-
35
-
36
- public function __toString(): string
37
- {
38
- $type = "{$this->type} ";
39
- $isReference = $this->isReference ? '&' : '';
40
- $isVariadic = $this->isVariadic ? '...' : '';
41
- $isOptional = $this->isOptional ? '=' : '';
42
- return trim("{$type}{$isReference}{$isVariadic}{$this->parameterName}") . $isOptional;
43
- }
44
-
45
-}
46
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeForParameterNode.php
Deleted
46
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function sprintf;
8
-
9
-class ConditionalTypeForParameterNode implements TypeNode
10
-{
11
-
12
- use NodeAttributes;
13
-
14
- public string $parameterName;
15
-
16
- public TypeNode $targetType;
17
-
18
- public TypeNode $if;
19
-
20
- public TypeNode $else;
21
-
22
- public bool $negated;
23
-
24
- public function __construct(string $parameterName, TypeNode $targetType, TypeNode $if, TypeNode $else, bool $negated)
25
- {
26
- $this->parameterName = $parameterName;
27
- $this->targetType = $targetType;
28
- $this->if = $if;
29
- $this->else = $else;
30
- $this->negated = $negated;
31
- }
32
-
33
- public function __toString(): string
34
- {
35
- return sprintf(
36
- '(%s %s %s ? %s : %s)',
37
- $this->parameterName,
38
- $this->negated ? 'is not' : 'is',
39
- $this->targetType,
40
- $this->if,
41
- $this->else,
42
- );
43
- }
44
-
45
-}
46
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeNode.php
Deleted
46
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function sprintf;
8
-
9
-class ConditionalTypeNode implements TypeNode
10
-{
11
-
12
- use NodeAttributes;
13
-
14
- public TypeNode $subjectType;
15
-
16
- public TypeNode $targetType;
17
-
18
- public TypeNode $if;
19
-
20
- public TypeNode $else;
21
-
22
- public bool $negated;
23
-
24
- public function __construct(TypeNode $subjectType, TypeNode $targetType, TypeNode $if, TypeNode $else, bool $negated)
25
- {
26
- $this->subjectType = $subjectType;
27
- $this->targetType = $targetType;
28
- $this->if = $if;
29
- $this->else = $else;
30
- $this->negated = $negated;
31
- }
32
-
33
- public function __toString(): string
34
- {
35
- return sprintf(
36
- '(%s %s %s ? %s : %s)',
37
- $this->subjectType,
38
- $this->negated ? 'is not' : 'is',
39
- $this->targetType,
40
- $this->if,
41
- $this->else,
42
- );
43
- }
44
-
45
-}
46
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConstTypeNode.php
Deleted
27
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprNode;
7
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
8
-
9
-class ConstTypeNode implements TypeNode
10
-{
11
-
12
- use NodeAttributes;
13
-
14
- public ConstExprNode $constExpr;
15
-
16
- public function __construct(ConstExprNode $constExpr)
17
- {
18
- $this->constExpr = $constExpr;
19
- }
20
-
21
- public function __toString(): string
22
- {
23
- return $this->constExpr->__toString();
24
- }
25
-
26
-}
27
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/GenericTypeNode.php
Deleted
59
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function implode;
8
-use function sprintf;
9
-
10
-class GenericTypeNode implements TypeNode
11
-{
12
-
13
- public const VARIANCE_INVARIANT = 'invariant';
14
- public const VARIANCE_COVARIANT = 'covariant';
15
- public const VARIANCE_CONTRAVARIANT = 'contravariant';
16
- public const VARIANCE_BIVARIANT = 'bivariant';
17
-
18
- use NodeAttributes;
19
-
20
- public IdentifierTypeNode $type;
21
-
22
- /** @var TypeNode */
23
- public array $genericTypes;
24
-
25
- /** @var (self::VARIANCE_*) */
26
- public array $variances;
27
-
28
- /**
29
- * @param TypeNode $genericTypes
30
- * @param (self::VARIANCE_*) $variances
31
- */
32
- public function __construct(IdentifierTypeNode $type, array $genericTypes, array $variances = )
33
- {
34
- $this->type = $type;
35
- $this->genericTypes = $genericTypes;
36
- $this->variances = $variances;
37
- }
38
-
39
-
40
- public function __toString(): string
41
- {
42
- $genericTypes = ;
43
-
44
- foreach ($this->genericTypes as $index => $type) {
45
- $variance = $this->variances$index ?? self::VARIANCE_INVARIANT;
46
- if ($variance === self::VARIANCE_INVARIANT) {
47
- $genericTypes = (string) $type;
48
- } elseif ($variance === self::VARIANCE_BIVARIANT) {
49
- $genericTypes = '*';
50
- } else {
51
- $genericTypes = sprintf('%s %s', $variance, $type);
52
- }
53
- }
54
-
55
- return $this->type . '<' . implode(', ', $genericTypes) . '>';
56
- }
57
-
58
-}
59
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/IdentifierTypeNode.php
Deleted
27
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class IdentifierTypeNode implements TypeNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- public string $name;
14
-
15
- public function __construct(string $name)
16
- {
17
- $this->name = $name;
18
- }
19
-
20
-
21
- public function __toString(): string
22
- {
23
- return $this->name;
24
- }
25
-
26
-}
27
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/IntersectionTypeNode.php
Deleted
39
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function array_map;
8
-use function implode;
9
-
10
-class IntersectionTypeNode implements TypeNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- /** @var TypeNode */
16
- public array $types;
17
-
18
- /**
19
- * @param TypeNode $types
20
- */
21
- public function __construct(array $types)
22
- {
23
- $this->types = $types;
24
- }
25
-
26
-
27
- public function __toString(): string
28
- {
29
- return '(' . implode(' & ', array_map(static function (TypeNode $type): string {
30
- if ($type instanceof NullableTypeNode) {
31
- return '(' . $type . ')';
32
- }
33
-
34
- return (string) $type;
35
- }, $this->types)) . ')';
36
- }
37
-
38
-}
39
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/InvalidTypeNode.php
Deleted
40
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use PHPStan\PhpDocParser\Parser\ParserException;
8
-
9
-class InvalidTypeNode implements TypeNode
10
-{
11
-
12
- use NodeAttributes;
13
-
14
- /** @var mixed */
15
- private array $exceptionArgs;
16
-
17
- public function __construct(ParserException $exception)
18
- {
19
- $this->exceptionArgs =
20
- $exception->getCurrentTokenValue(),
21
- $exception->getCurrentTokenType(),
22
- $exception->getCurrentOffset(),
23
- $exception->getExpectedTokenType(),
24
- $exception->getExpectedTokenValue(),
25
- $exception->getCurrentTokenLine(),
26
- ;
27
- }
28
-
29
- public function getException(): ParserException
30
- {
31
- return new ParserException(...$this->exceptionArgs);
32
- }
33
-
34
- public function __toString(): string
35
- {
36
- return '*Invalid type*';
37
- }
38
-
39
-}
40
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/NullableTypeNode.php
Deleted
27
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class NullableTypeNode implements TypeNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- public TypeNode $type;
14
-
15
- public function __construct(TypeNode $type)
16
- {
17
- $this->type = $type;
18
- }
19
-
20
-
21
- public function __toString(): string
22
- {
23
- return '?' . $this->type;
24
- }
25
-
26
-}
27
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeItemNode.php
Deleted
49
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode;
7
-use PHPStan\PhpDocParser\Ast\Node;
8
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
9
-use function sprintf;
10
-
11
-class ObjectShapeItemNode implements Node
12
-{
13
-
14
- use NodeAttributes;
15
-
16
- /** @var ConstExprStringNode|IdentifierTypeNode */
17
- public $keyName;
18
-
19
- public bool $optional;
20
-
21
- public TypeNode $valueType;
22
-
23
- /**
24
- * @param ConstExprStringNode|IdentifierTypeNode $keyName
25
- */
26
- public function __construct($keyName, bool $optional, TypeNode $valueType)
27
- {
28
- $this->keyName = $keyName;
29
- $this->optional = $optional;
30
- $this->valueType = $valueType;
31
- }
32
-
33
-
34
- public function __toString(): string
35
- {
36
- if ($this->keyName !== null) {
37
- return sprintf(
38
- '%s%s: %s',
39
- (string) $this->keyName,
40
- $this->optional ? '?' : '',
41
- (string) $this->valueType,
42
- );
43
- }
44
-
45
- return (string) $this->valueType;
46
- }
47
-
48
-}
49
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeNode.php
Deleted
33
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function implode;
8
-
9
-class ObjectShapeNode implements TypeNode
10
-{
11
-
12
- use NodeAttributes;
13
-
14
- /** @var ObjectShapeItemNode */
15
- public array $items;
16
-
17
- /**
18
- * @param ObjectShapeItemNode $items
19
- */
20
- public function __construct(array $items)
21
- {
22
- $this->items = $items;
23
- }
24
-
25
- public function __toString(): string
26
- {
27
- $items = $this->items;
28
-
29
- return 'object{' . implode(', ', $items) . '}';
30
- }
31
-
32
-}
33
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/OffsetAccessTypeNode.php
Deleted
36
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class OffsetAccessTypeNode implements TypeNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- public TypeNode $type;
14
-
15
- public TypeNode $offset;
16
-
17
- public function __construct(TypeNode $type, TypeNode $offset)
18
- {
19
- $this->type = $type;
20
- $this->offset = $offset;
21
- }
22
-
23
- public function __toString(): string
24
- {
25
- if (
26
- $this->type instanceof CallableTypeNode
27
- || $this->type instanceof NullableTypeNode
28
- ) {
29
- return '(' . $this->type . ')' . $this->offset . '';
30
- }
31
-
32
- return $this->type . '' . $this->offset . '';
33
- }
34
-
35
-}
36
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/ThisTypeNode.php
Deleted
19
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-
8
-class ThisTypeNode implements TypeNode
9
-{
10
-
11
- use NodeAttributes;
12
-
13
- public function __toString(): string
14
- {
15
- return '$this';
16
- }
17
-
18
-}
19
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/TypeNode.php
Deleted
12
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\Node;
7
-
8
-interface TypeNode extends Node
9
-{
10
-
11
-}
12
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Ast/Type/UnionTypeNode.php
Deleted
39
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Ast\Type;
5
-
6
-use PHPStan\PhpDocParser\Ast\NodeAttributes;
7
-use function array_map;
8
-use function implode;
9
-
10
-class UnionTypeNode implements TypeNode
11
-{
12
-
13
- use NodeAttributes;
14
-
15
- /** @var TypeNode */
16
- public array $types;
17
-
18
- /**
19
- * @param TypeNode $types
20
- */
21
- public function __construct(array $types)
22
- {
23
- $this->types = $types;
24
- }
25
-
26
-
27
- public function __toString(): string
28
- {
29
- return '(' . implode(' | ', array_map(static function (TypeNode $type): string {
30
- if ($type instanceof NullableTypeNode) {
31
- return '(' . $type . ')';
32
- }
33
-
34
- return (string) $type;
35
- }, $this->types)) . ')';
36
- }
37
-
38
-}
39
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Lexer
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.php
Deleted
197
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Lexer;
5
-
6
-use PHPStan\PhpDocParser\ParserConfig;
7
-use function implode;
8
-use function preg_match_all;
9
-use const PREG_SET_ORDER;
10
-
11
-/**
12
- * Implementation based on Nette Tokenizer (New BSD License; https://github.com/nette/tokenizer)
13
- */
14
-class Lexer
15
-{
16
-
17
- public const TOKEN_REFERENCE = 0;
18
- public const TOKEN_UNION = 1;
19
- public const TOKEN_INTERSECTION = 2;
20
- public const TOKEN_NULLABLE = 3;
21
- public const TOKEN_OPEN_PARENTHESES = 4;
22
- public const TOKEN_CLOSE_PARENTHESES = 5;
23
- public const TOKEN_OPEN_ANGLE_BRACKET = 6;
24
- public const TOKEN_CLOSE_ANGLE_BRACKET = 7;
25
- public const TOKEN_OPEN_SQUARE_BRACKET = 8;
26
- public const TOKEN_CLOSE_SQUARE_BRACKET = 9;
27
- public const TOKEN_COMMA = 10;
28
- public const TOKEN_VARIADIC = 11;
29
- public const TOKEN_DOUBLE_COLON = 12;
30
- public const TOKEN_DOUBLE_ARROW = 13;
31
- public const TOKEN_EQUAL = 14;
32
- public const TOKEN_OPEN_PHPDOC = 15;
33
- public const TOKEN_CLOSE_PHPDOC = 16;
34
- public const TOKEN_PHPDOC_TAG = 17;
35
- public const TOKEN_DOCTRINE_TAG = 18;
36
- public const TOKEN_FLOAT = 19;
37
- public const TOKEN_INTEGER = 20;
38
- public const TOKEN_SINGLE_QUOTED_STRING = 21;
39
- public const TOKEN_DOUBLE_QUOTED_STRING = 22;
40
- public const TOKEN_DOCTRINE_ANNOTATION_STRING = 23;
41
- public const TOKEN_IDENTIFIER = 24;
42
- public const TOKEN_THIS_VARIABLE = 25;
43
- public const TOKEN_VARIABLE = 26;
44
- public const TOKEN_HORIZONTAL_WS = 27;
45
- public const TOKEN_PHPDOC_EOL = 28;
46
- public const TOKEN_OTHER = 29;
47
- public const TOKEN_END = 30;
48
- public const TOKEN_COLON = 31;
49
- public const TOKEN_WILDCARD = 32;
50
- public const TOKEN_OPEN_CURLY_BRACKET = 33;
51
- public const TOKEN_CLOSE_CURLY_BRACKET = 34;
52
- public const TOKEN_NEGATED = 35;
53
- public const TOKEN_ARROW = 36;
54
-
55
- public const TOKEN_LABELS =
56
- self::TOKEN_REFERENCE => '\'&\'',
57
- self::TOKEN_UNION => '\'|\'',
58
- self::TOKEN_INTERSECTION => '\'&\'',
59
- self::TOKEN_NULLABLE => '\'?\'',
60
- self::TOKEN_NEGATED => '\'!\'',
61
- self::TOKEN_OPEN_PARENTHESES => '\'(\'',
62
- self::TOKEN_CLOSE_PARENTHESES => '\')\'',
63
- self::TOKEN_OPEN_ANGLE_BRACKET => '\'<\'',
64
- self::TOKEN_CLOSE_ANGLE_BRACKET => '\'>\'',
65
- self::TOKEN_OPEN_SQUARE_BRACKET => '\'\'',
66
- self::TOKEN_CLOSE_SQUARE_BRACKET => '\'\'',
67
- self::TOKEN_OPEN_CURLY_BRACKET => '\'{\'',
68
- self::TOKEN_CLOSE_CURLY_BRACKET => '\'}\'',
69
- self::TOKEN_COMMA => '\',\'',
70
- self::TOKEN_COLON => '\':\'',
71
- self::TOKEN_VARIADIC => '\'...\'',
72
- self::TOKEN_DOUBLE_COLON => '\'::\'',
73
- self::TOKEN_DOUBLE_ARROW => '\'=>\'',
74
- self::TOKEN_ARROW => '\'->\'',
75
- self::TOKEN_EQUAL => '\'=\'',
76
- self::TOKEN_OPEN_PHPDOC => '\'/**\'',
77
- self::TOKEN_CLOSE_PHPDOC => '\'*/\'',
78
- self::TOKEN_PHPDOC_TAG => 'TOKEN_PHPDOC_TAG',
79
- self::TOKEN_DOCTRINE_TAG => 'TOKEN_DOCTRINE_TAG',
80
- self::TOKEN_PHPDOC_EOL => 'TOKEN_PHPDOC_EOL',
81
- self::TOKEN_FLOAT => 'TOKEN_FLOAT',
82
- self::TOKEN_INTEGER => 'TOKEN_INTEGER',
83
- self::TOKEN_SINGLE_QUOTED_STRING => 'TOKEN_SINGLE_QUOTED_STRING',
84
- self::TOKEN_DOUBLE_QUOTED_STRING => 'TOKEN_DOUBLE_QUOTED_STRING',
85
- self::TOKEN_DOCTRINE_ANNOTATION_STRING => 'TOKEN_DOCTRINE_ANNOTATION_STRING',
86
- self::TOKEN_IDENTIFIER => 'type',
87
- self::TOKEN_THIS_VARIABLE => '\'$this\'',
88
- self::TOKEN_VARIABLE => 'variable',
89
- self::TOKEN_HORIZONTAL_WS => 'TOKEN_HORIZONTAL_WS',
90
- self::TOKEN_OTHER => 'TOKEN_OTHER',
91
- self::TOKEN_END => 'TOKEN_END',
92
- self::TOKEN_WILDCARD => '*',
93
- ;
94
-
95
- public const VALUE_OFFSET = 0;
96
- public const TYPE_OFFSET = 1;
97
- public const LINE_OFFSET = 2;
98
-
99
- private ParserConfig $config; // @phpstan-ignore property.onlyWritten
100
-
101
- private ?string $regexp = null;
102
-
103
- public function __construct(ParserConfig $config)
104
- {
105
- $this->config = $config;
106
- }
107
-
108
-
109
- /**
110
- * @return list<array{string, int, int}>
111
- */
112
- public function tokenize(string $s): array
113
- {
114
- if ($this->regexp === null) {
115
- $this->regexp = $this->generateRegexp();
116
- }
117
-
118
- preg_match_all($this->regexp, $s, $matches, PREG_SET_ORDER);
119
-
120
- $tokens = ;
121
- $line = 1;
122
- foreach ($matches as $match) {
123
- $type = (int) $match'MARK';
124
- $tokens = $match0, $type, $line;
125
- if ($type !== self::TOKEN_PHPDOC_EOL) {
126
- continue;
127
- }
128
-
129
- $line++;
130
- }
131
-
132
- $tokens = '', self::TOKEN_END, $line;
133
-
134
- return $tokens;
135
- }
136
-
137
-
138
- private function generateRegexp(): string
139
- {
140
- $patterns =
141
- self::TOKEN_HORIZONTAL_WS => '\\x09\\x20++',
142
-
143
- self::TOKEN_IDENTIFIER => '(?:\\\\?+a-z_\\x80-\\xFF0-9a-z_\\x80-\\xFF-*+)++',
144
- self::TOKEN_THIS_VARIABLE => '\\$this(?!0-9a-z_\\x80-\\xFF)',
145
- self::TOKEN_VARIABLE => '\\$a-z_\\x80-\\xFF0-9a-z_\\x80-\\xFF*+',
146
-
147
- // '&' followed by TOKEN_VARIADIC, TOKEN_VARIABLE, TOKEN_EQUAL, TOKEN_EQUAL or TOKEN_CLOSE_PARENTHESES
148
- self::TOKEN_REFERENCE => '&(?=\\s*+(?:.,=)|(?:\\$(?!this(?!0-9a-z_\\x80-\\xFF)))))',
149
- self::TOKEN_UNION => '\\|',
150
- self::TOKEN_INTERSECTION => '&',
151
- self::TOKEN_NULLABLE => '\\?',
152
- self::TOKEN_NEGATED => '!',
153
-
154
- self::TOKEN_OPEN_PARENTHESES => '\\(',
155
- self::TOKEN_CLOSE_PARENTHESES => '\\)',
156
- self::TOKEN_OPEN_ANGLE_BRACKET => '<',
157
- self::TOKEN_CLOSE_ANGLE_BRACKET => '>',
158
- self::TOKEN_OPEN_SQUARE_BRACKET => '\\',
159
- self::TOKEN_CLOSE_SQUARE_BRACKET => '\\',
160
- self::TOKEN_OPEN_CURLY_BRACKET => '\\{',
161
- self::TOKEN_CLOSE_CURLY_BRACKET => '\\}',
162
-
163
- self::TOKEN_COMMA => ',',
164
- self::TOKEN_VARIADIC => '\\.\\.\\.',
165
- self::TOKEN_DOUBLE_COLON => '::',
166
- self::TOKEN_DOUBLE_ARROW => '=>',
167
- self::TOKEN_ARROW => '->',
168
- self::TOKEN_EQUAL => '=',
169
- self::TOKEN_COLON => ':',
170
-
171
- self::TOKEN_OPEN_PHPDOC => '/\\*\\*(?=\\s)\\x20?+',
172
- self::TOKEN_CLOSE_PHPDOC => '\\*/',
173
- self::TOKEN_PHPDOC_TAG => '@(?:a-za-z0-9-\\\\+:)?a-za-z0-9-\\\\*+',
174
- self::TOKEN_DOCTRINE_TAG => '@a-z_\\\\a-z0-9_\:\\\\*a-z_a-z0-9_*',
175
- self::TOKEN_PHPDOC_EOL => '\\r?+\\n\\x09\\x20*+(?:\\*(?!/)\\x20?+)?',
176
-
177
- self::TOKEN_FLOAT => '+\-?(?:(?:0-9++(_0-9++)*\\.0-9*+(_0-9++)*(?:e+\-?0-9++(_0-9++)*)?)|(?:0-9*+(_0-9++)*\\.0-9++(_0-9++)*(?:e+\-?0-9++(_0-9++)*)?)|(?:0-9++(_0-9++)*e+\-?0-9++(_0-9++)*))',
178
- self::TOKEN_INTEGER => '+\-?(?:(?:0b0-1++(_0-1++)*)|(?:0o0-7++(_0-7++)*)|(?:0x0-9a-f++(_0-9a-f++)*)|(?:0-9++(_0-9++)*))',
179
- self::TOKEN_SINGLE_QUOTED_STRING => '\'(?:\\\\^\\r\\n|^\'\\r\\n\\\\)*+\'',
180
- self::TOKEN_DOUBLE_QUOTED_STRING => '"(?:\\\\^\\r\\n|^"\\r\\n\\\\)*+"',
181
- self::TOKEN_DOCTRINE_ANNOTATION_STRING => '"(?:""|^")*+"',
182
-
183
- self::TOKEN_WILDCARD => '\\*',
184
-
185
- // anything but TOKEN_CLOSE_PHPDOC or TOKEN_HORIZONTAL_WS or TOKEN_EOL
186
- self::TOKEN_OTHER => '(?:(?!\\*/)^\\s)++',
187
- ;
188
-
189
- foreach ($patterns as $type => &$pattern) {
190
- $pattern = '(?:' . $pattern . ')(*MARK:' . $type . ')';
191
- }
192
-
193
- return '~' . implode('|', $patterns) . '~Asi';
194
- }
195
-
196
-}
197
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Parser
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Parser/ConstExprParser.php
Deleted
294
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Parser;
5
-
6
-use PHPStan\PhpDocParser\Ast;
7
-use PHPStan\PhpDocParser\Lexer\Lexer;
8
-use PHPStan\PhpDocParser\ParserConfig;
9
-use function str_replace;
10
-use function strtolower;
11
-
12
-class ConstExprParser
13
-{
14
-
15
- private ParserConfig $config;
16
-
17
- private bool $parseDoctrineStrings;
18
-
19
- public function __construct(
20
- ParserConfig $config
21
- )
22
- {
23
- $this->config = $config;
24
- $this->parseDoctrineStrings = false;
25
- }
26
-
27
- /**
28
- * @internal
29
- */
30
- public function toDoctrine(): self
31
- {
32
- $self = new self($this->config);
33
- $self->parseDoctrineStrings = true;
34
- return $self;
35
- }
36
-
37
- public function parse(TokenIterator $tokens): Ast\ConstExpr\ConstExprNode
38
- {
39
- $startLine = $tokens->currentTokenLine();
40
- $startIndex = $tokens->currentTokenIndex();
41
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_FLOAT)) {
42
- $value = $tokens->currentTokenValue();
43
- $tokens->next();
44
-
45
- return $this->enrichWithAttributes(
46
- $tokens,
47
- new Ast\ConstExpr\ConstExprFloatNode(str_replace('_', '', $value)),
48
- $startLine,
49
- $startIndex,
50
- );
51
- }
52
-
53
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_INTEGER)) {
54
- $value = $tokens->currentTokenValue();
55
- $tokens->next();
56
-
57
- return $this->enrichWithAttributes(
58
- $tokens,
59
- new Ast\ConstExpr\ConstExprIntegerNode(str_replace('_', '', $value)),
60
- $startLine,
61
- $startIndex,
62
- );
63
- }
64
-
65
- if ($this->parseDoctrineStrings && $tokens->isCurrentTokenType(Lexer::TOKEN_DOCTRINE_ANNOTATION_STRING)) {
66
- $value = $tokens->currentTokenValue();
67
- $tokens->next();
68
-
69
- return $this->enrichWithAttributes(
70
- $tokens,
71
- new Ast\ConstExpr\DoctrineConstExprStringNode(Ast\ConstExpr\DoctrineConstExprStringNode::unescape($value)),
72
- $startLine,
73
- $startIndex,
74
- );
75
- }
76
-
77
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING, Lexer::TOKEN_DOUBLE_QUOTED_STRING)) {
78
- if ($this->parseDoctrineStrings) {
79
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING)) {
80
- throw new ParserException(
81
- $tokens->currentTokenValue(),
82
- $tokens->currentTokenType(),
83
- $tokens->currentTokenOffset(),
84
- Lexer::TOKEN_DOUBLE_QUOTED_STRING,
85
- null,
86
- $tokens->currentTokenLine(),
87
- );
88
- }
89
-
90
- $value = $tokens->currentTokenValue();
91
- $tokens->next();
92
-
93
- return $this->enrichWithAttributes(
94
- $tokens,
95
- $this->parseDoctrineString($value, $tokens),
96
- $startLine,
97
- $startIndex,
98
- );
99
- }
100
-
101
- $value = StringUnescaper::unescapeString($tokens->currentTokenValue());
102
- $type = $tokens->currentTokenType();
103
- $tokens->next();
104
-
105
- return $this->enrichWithAttributes(
106
- $tokens,
107
- new Ast\ConstExpr\ConstExprStringNode(
108
- $value,
109
- $type === Lexer::TOKEN_SINGLE_QUOTED_STRING
110
- ? Ast\ConstExpr\ConstExprStringNode::SINGLE_QUOTED
111
- : Ast\ConstExpr\ConstExprStringNode::DOUBLE_QUOTED,
112
- ),
113
- $startLine,
114
- $startIndex,
115
- );
116
-
117
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_IDENTIFIER)) {
118
- $identifier = $tokens->currentTokenValue();
119
- $tokens->next();
120
-
121
- switch (strtolower($identifier)) {
122
- case 'true':
123
- return $this->enrichWithAttributes(
124
- $tokens,
125
- new Ast\ConstExpr\ConstExprTrueNode(),
126
- $startLine,
127
- $startIndex,
128
- );
129
- case 'false':
130
- return $this->enrichWithAttributes(
131
- $tokens,
132
- new Ast\ConstExpr\ConstExprFalseNode(),
133
- $startLine,
134
- $startIndex,
135
- );
136
- case 'null':
137
- return $this->enrichWithAttributes(
138
- $tokens,
139
- new Ast\ConstExpr\ConstExprNullNode(),
140
- $startLine,
141
- $startIndex,
142
- );
143
- case 'array':
144
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES);
145
- return $this->parseArray($tokens, Lexer::TOKEN_CLOSE_PARENTHESES, $startIndex);
146
- }
147
-
148
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_DOUBLE_COLON)) {
149
- $classConstantName = '';
150
- $lastType = null;
151
- while (true) {
152
- if ($lastType !== Lexer::TOKEN_IDENTIFIER && $tokens->currentTokenType() === Lexer::TOKEN_IDENTIFIER) {
153
- $classConstantName .= $tokens->currentTokenValue();
154
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
155
- $lastType = Lexer::TOKEN_IDENTIFIER;
156
-
157
- continue;
158
- }
159
-
160
- if ($lastType !== Lexer::TOKEN_WILDCARD && $tokens->tryConsumeTokenType(Lexer::TOKEN_WILDCARD)) {
161
- $classConstantName .= '*';
162
- $lastType = Lexer::TOKEN_WILDCARD;
163
-
164
- if ($tokens->getSkippedHorizontalWhiteSpaceIfAny() !== '') {
165
- break;
166
- }
167
-
168
- continue;
169
- }
170
-
171
- if ($lastType === null) {
172
- // trigger parse error if nothing valid was consumed
173
- $tokens->consumeTokenType(Lexer::TOKEN_WILDCARD);
174
- }
175
-
176
- break;
177
- }
178
-
179
- return $this->enrichWithAttributes(
180
- $tokens,
181
- new Ast\ConstExpr\ConstFetchNode($identifier, $classConstantName),
182
- $startLine,
183
- $startIndex,
184
- );
185
-
186
- }
187
-
188
- return $this->enrichWithAttributes(
189
- $tokens,
190
- new Ast\ConstExpr\ConstFetchNode('', $identifier),
191
- $startLine,
192
- $startIndex,
193
- );
194
-
195
- } elseif ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
196
- return $this->parseArray($tokens, Lexer::TOKEN_CLOSE_SQUARE_BRACKET, $startIndex);
197
- }
198
-
199
- throw new ParserException(
200
- $tokens->currentTokenValue(),
201
- $tokens->currentTokenType(),
202
- $tokens->currentTokenOffset(),
203
- Lexer::TOKEN_IDENTIFIER,
204
- null,
205
- $tokens->currentTokenLine(),
206
- );
207
- }
208
-
209
-
210
- private function parseArray(TokenIterator $tokens, int $endToken, int $startIndex): Ast\ConstExpr\ConstExprArrayNode
211
- {
212
- $items = ;
213
-
214
- $startLine = $tokens->currentTokenLine();
215
-
216
- if (!$tokens->tryConsumeTokenType($endToken)) {
217
- do {
218
- $items = $this->parseArrayItem($tokens);
219
- } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA) && !$tokens->isCurrentTokenType($endToken));
220
- $tokens->consumeTokenType($endToken);
221
- }
222
-
223
- return $this->enrichWithAttributes(
224
- $tokens,
225
- new Ast\ConstExpr\ConstExprArrayNode($items),
226
- $startLine,
227
- $startIndex,
228
- );
229
- }
230
-
231
-
232
- /**
233
- * This method is supposed to be called with TokenIterator after reading TOKEN_DOUBLE_QUOTED_STRING and shifting
234
- * to the next token.
235
- */
236
- public function parseDoctrineString(string $text, TokenIterator $tokens): Ast\ConstExpr\DoctrineConstExprStringNode
237
- {
238
- // Because of how Lexer works, a valid Doctrine string
239
- // can consist of a sequence of TOKEN_DOUBLE_QUOTED_STRING and TOKEN_DOCTRINE_ANNOTATION_STRING
240
- while ($tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_QUOTED_STRING, Lexer::TOKEN_DOCTRINE_ANNOTATION_STRING)) {
241
- $text .= $tokens->currentTokenValue();
242
- $tokens->next();
243
- }
244
-
245
- return new Ast\ConstExpr\DoctrineConstExprStringNode(Ast\ConstExpr\DoctrineConstExprStringNode::unescape($text));
246
- }
247
-
248
-
249
- private function parseArrayItem(TokenIterator $tokens): Ast\ConstExpr\ConstExprArrayItemNode
250
- {
251
- $startLine = $tokens->currentTokenLine();
252
- $startIndex = $tokens->currentTokenIndex();
253
-
254
- $expr = $this->parse($tokens);
255
-
256
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_DOUBLE_ARROW)) {
257
- $key = $expr;
258
- $value = $this->parse($tokens);
259
-
260
- } else {
261
- $key = null;
262
- $value = $expr;
263
- }
264
-
265
- return $this->enrichWithAttributes(
266
- $tokens,
267
- new Ast\ConstExpr\ConstExprArrayItemNode($key, $value),
268
- $startLine,
269
- $startIndex,
270
- );
271
- }
272
-
273
- /**
274
- * @template T of Ast\ConstExpr\ConstExprNode
275
- * @param T $node
276
- * @return T
277
- */
278
- private function enrichWithAttributes(TokenIterator $tokens, Ast\ConstExpr\ConstExprNode $node, int $startLine, int $startIndex): Ast\ConstExpr\ConstExprNode
279
- {
280
- if ($this->config->useLinesAttributes) {
281
- $node->setAttribute(Ast\Attribute::START_LINE, $startLine);
282
- $node->setAttribute(Ast\Attribute::END_LINE, $tokens->currentTokenLine());
283
- }
284
-
285
- if ($this->config->useIndexAttributes) {
286
- $node->setAttribute(Ast\Attribute::START_INDEX, $startIndex);
287
- $node->setAttribute(Ast\Attribute::END_INDEX, $tokens->endIndexOfLastRelevantToken());
288
- }
289
-
290
- return $node;
291
- }
292
-
293
-}
294
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Parser/ParserException.php
Deleted
102
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Parser;
5
-
6
-use Exception;
7
-use PHPStan\PhpDocParser\Lexer\Lexer;
8
-use function assert;
9
-use function json_encode;
10
-use function sprintf;
11
-use const JSON_INVALID_UTF8_SUBSTITUTE;
12
-use const JSON_UNESCAPED_SLASHES;
13
-use const JSON_UNESCAPED_UNICODE;
14
-
15
-class ParserException extends Exception
16
-{
17
-
18
- private string $currentTokenValue;
19
-
20
- private int $currentTokenType;
21
-
22
- private int $currentOffset;
23
-
24
- private int $expectedTokenType;
25
-
26
- private ?string $expectedTokenValue;
27
-
28
- private ?int $currentTokenLine;
29
-
30
- public function __construct(
31
- string $currentTokenValue,
32
- int $currentTokenType,
33
- int $currentOffset,
34
- int $expectedTokenType,
35
- ?string $expectedTokenValue,
36
- ?int $currentTokenLine
37
- )
38
- {
39
- $this->currentTokenValue = $currentTokenValue;
40
- $this->currentTokenType = $currentTokenType;
41
- $this->currentOffset = $currentOffset;
42
- $this->expectedTokenType = $expectedTokenType;
43
- $this->expectedTokenValue = $expectedTokenValue;
44
- $this->currentTokenLine = $currentTokenLine;
45
-
46
- parent::__construct(sprintf(
47
- 'Unexpected token %s, expected %s%s at offset %d%s',
48
- $this->formatValue($currentTokenValue),
49
- Lexer::TOKEN_LABELS$expectedTokenType,
50
- $expectedTokenValue !== null ? sprintf(' (%s)', $this->formatValue($expectedTokenValue)) : '',
51
- $currentOffset,
52
- $currentTokenLine === null ? '' : sprintf(' on line %d', $currentTokenLine),
53
- ));
54
- }
55
-
56
-
57
- public function getCurrentTokenValue(): string
58
- {
59
- return $this->currentTokenValue;
60
- }
61
-
62
-
63
- public function getCurrentTokenType(): int
64
- {
65
- return $this->currentTokenType;
66
- }
67
-
68
-
69
- public function getCurrentOffset(): int
70
- {
71
- return $this->currentOffset;
72
- }
73
-
74
-
75
- public function getExpectedTokenType(): int
76
- {
77
- return $this->expectedTokenType;
78
- }
79
-
80
-
81
- public function getExpectedTokenValue(): ?string
82
- {
83
- return $this->expectedTokenValue;
84
- }
85
-
86
-
87
- public function getCurrentTokenLine(): ?int
88
- {
89
- return $this->currentTokenLine;
90
- }
91
-
92
-
93
- private function formatValue(string $value): string
94
- {
95
- $json = json_encode($value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_SUBSTITUTE);
96
- assert($json !== false);
97
-
98
- return $json;
99
- }
100
-
101
-}
102
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php
Deleted
1245
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Parser;
5
-
6
-use LogicException;
7
-use PHPStan\PhpDocParser\Ast;
8
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprIntegerNode;
9
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode;
10
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstFetchNode;
11
-use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine;
12
-use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
13
-use PHPStan\PhpDocParser\Lexer\Lexer;
14
-use PHPStan\PhpDocParser\ParserConfig;
15
-use PHPStan\ShouldNotHappenException;
16
-use function array_key_exists;
17
-use function count;
18
-use function rtrim;
19
-use function str_replace;
20
-use function trim;
21
-
22
-/**
23
- * @phpstan-import-type ValueType from Doctrine\DoctrineArgument as DoctrineValueType
24
- */
25
-class PhpDocParser
26
-{
27
-
28
- private const DISALLOWED_DESCRIPTION_START_TOKENS =
29
- Lexer::TOKEN_UNION,
30
- Lexer::TOKEN_INTERSECTION,
31
- ;
32
-
33
- private ParserConfig $config;
34
-
35
- private TypeParser $typeParser;
36
-
37
- private ConstExprParser $constantExprParser;
38
-
39
- private ConstExprParser $doctrineConstantExprParser;
40
-
41
- public function __construct(
42
- ParserConfig $config,
43
- TypeParser $typeParser,
44
- ConstExprParser $constantExprParser
45
- )
46
- {
47
- $this->config = $config;
48
- $this->typeParser = $typeParser;
49
- $this->constantExprParser = $constantExprParser;
50
- $this->doctrineConstantExprParser = $constantExprParser->toDoctrine();
51
- }
52
-
53
-
54
- public function parse(TokenIterator $tokens): Ast\PhpDoc\PhpDocNode
55
- {
56
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_PHPDOC);
57
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
58
-
59
- $children = ;
60
-
61
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) {
62
- $lastChild = $this->parseChild($tokens);
63
- $children = $lastChild;
64
- while (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) {
65
- if (
66
- $lastChild instanceof Ast\PhpDoc\PhpDocTagNode
67
- && (
68
- $lastChild->value instanceof Doctrine\DoctrineTagValueNode
69
- || $lastChild->value instanceof Ast\PhpDoc\GenericTagValueNode
70
- )
71
- ) {
72
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
73
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) {
74
- break;
75
- }
76
- $lastChild = $this->parseChild($tokens);
77
- $children = $lastChild;
78
- continue;
79
- }
80
-
81
- if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL)) {
82
- break;
83
- }
84
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) {
85
- break;
86
- }
87
-
88
- $lastChild = $this->parseChild($tokens);
89
- $children = $lastChild;
90
- }
91
- }
92
-
93
- try {
94
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PHPDOC);
95
- } catch (ParserException $e) {
96
- $name = '';
97
- $startLine = $tokens->currentTokenLine();
98
- $startIndex = $tokens->currentTokenIndex();
99
- if (count($children) > 0) {
100
- $lastChild = $childrencount($children) - 1;
101
- if ($lastChild instanceof Ast\PhpDoc\PhpDocTagNode) {
102
- $name = $lastChild->name;
103
- $startLine = $tokens->currentTokenLine();
104
- $startIndex = $tokens->currentTokenIndex();
105
- }
106
- }
107
-
108
- $tag = new Ast\PhpDoc\PhpDocTagNode(
109
- $name,
110
- $this->enrichWithAttributes(
111
- $tokens,
112
- new Ast\PhpDoc\InvalidTagValueNode($e->getMessage(), $e),
113
- $startLine,
114
- $startIndex,
115
- ),
116
- );
117
-
118
- $tokens->forwardToTheEnd();
119
-
120
- return $this->enrichWithAttributes($tokens, new Ast\PhpDoc\PhpDocNode($this->enrichWithAttributes($tokens, $tag, $startLine, $startIndex)), 1, 0);
121
- }
122
-
123
- return $this->enrichWithAttributes($tokens, new Ast\PhpDoc\PhpDocNode($children), 1, 0);
124
- }
125
-
126
-
127
- /** @phpstan-impure */
128
- private function parseChild(TokenIterator $tokens): Ast\PhpDoc\PhpDocChildNode
129
- {
130
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG)) {
131
- $startLine = $tokens->currentTokenLine();
132
- $startIndex = $tokens->currentTokenIndex();
133
- return $this->enrichWithAttributes($tokens, $this->parseTag($tokens), $startLine, $startIndex);
134
- }
135
-
136
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_DOCTRINE_TAG)) {
137
- $startLine = $tokens->currentTokenLine();
138
- $startIndex = $tokens->currentTokenIndex();
139
- $tag = $tokens->currentTokenValue();
140
- $tokens->next();
141
-
142
- $tagStartLine = $tokens->currentTokenLine();
143
- $tagStartIndex = $tokens->currentTokenIndex();
144
-
145
- return $this->enrichWithAttributes($tokens, new Ast\PhpDoc\PhpDocTagNode(
146
- $tag,
147
- $this->enrichWithAttributes(
148
- $tokens,
149
- $this->parseDoctrineTagValue($tokens, $tag),
150
- $tagStartLine,
151
- $tagStartIndex,
152
- ),
153
- ), $startLine, $startIndex);
154
- }
155
-
156
- $startLine = $tokens->currentTokenLine();
157
- $startIndex = $tokens->currentTokenIndex();
158
- $text = $this->parseText($tokens);
159
-
160
- return $this->enrichWithAttributes($tokens, $text, $startLine, $startIndex);
161
- }
162
-
163
- /**
164
- * @template T of Ast\Node
165
- * @param T $tag
166
- * @return T
167
- */
168
- private function enrichWithAttributes(TokenIterator $tokens, Ast\Node $tag, int $startLine, int $startIndex): Ast\Node
169
- {
170
- if ($this->config->useLinesAttributes) {
171
- $tag->setAttribute(Ast\Attribute::START_LINE, $startLine);
172
- $tag->setAttribute(Ast\Attribute::END_LINE, $tokens->currentTokenLine());
173
- }
174
-
175
- if ($this->config->useIndexAttributes) {
176
- $tag->setAttribute(Ast\Attribute::START_INDEX, $startIndex);
177
- $tag->setAttribute(Ast\Attribute::END_INDEX, $tokens->endIndexOfLastRelevantToken());
178
- }
179
-
180
- return $tag;
181
- }
182
-
183
-
184
- private function parseText(TokenIterator $tokens): Ast\PhpDoc\PhpDocTextNode
185
- {
186
- $text = '';
187
-
188
- $endTokens = Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END;
189
-
190
- $savepoint = false;
191
-
192
- // if the next token is EOL, everything below is skipped and empty string is returned
193
- while (true) {
194
- $tmpText = $tokens->getSkippedHorizontalWhiteSpaceIfAny() . $tokens->joinUntil(Lexer::TOKEN_PHPDOC_EOL, ...$endTokens);
195
- $text .= $tmpText;
196
-
197
- // stop if we're not at EOL - meaning it's the end of PHPDoc
198
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC)) {
199
- break;
200
- }
201
-
202
- if (!$savepoint) {
203
- $tokens->pushSavePoint();
204
- $savepoint = true;
205
- } elseif ($tmpText !== '') {
206
- $tokens->dropSavePoint();
207
- $tokens->pushSavePoint();
208
- }
209
-
210
- $tokens->pushSavePoint();
211
- $tokens->next();
212
-
213
- // if we're at EOL, check what's next
214
- // if next is a PHPDoc tag, EOL, or end of PHPDoc, stop
215
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG, ...$endTokens)) {
216
- $tokens->rollback();
217
- break;
218
- }
219
-
220
- // otherwise if the next is text, continue building the description string
221
-
222
- $tokens->dropSavePoint();
223
- $text .= $tokens->getDetectedNewline() ?? "\n";
224
- }
225
-
226
- if ($savepoint) {
227
- $tokens->rollback();
228
- $text = rtrim($text, $tokens->getDetectedNewline() ?? "\n");
229
- }
230
-
231
- return new Ast\PhpDoc\PhpDocTextNode(trim($text, " \t"));
232
- }
233
-
234
-
235
- private function parseOptionalDescriptionAfterDoctrineTag(TokenIterator $tokens): string
236
- {
237
- $text = '';
238
-
239
- $endTokens = Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END;
240
-
241
- $savepoint = false;
242
-
243
- // if the next token is EOL, everything below is skipped and empty string is returned
244
- while (true) {
245
- $tmpText = $tokens->getSkippedHorizontalWhiteSpaceIfAny() . $tokens->joinUntil(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG, Lexer::TOKEN_PHPDOC_EOL, ...$endTokens);
246
- $text .= $tmpText;
247
-
248
- // stop if we're not at EOL - meaning it's the end of PHPDoc
249
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC)) {
250
- if (!$tokens->isPrecededByHorizontalWhitespace()) {
251
- return trim($text . $this->parseText($tokens)->text, " \t");
252
- }
253
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG)) {
254
- $tokens->pushSavePoint();
255
- $child = $this->parseChild($tokens);
256
- if ($child instanceof Ast\PhpDoc\PhpDocTagNode) {
257
- if (
258
- $child->value instanceof Ast\PhpDoc\GenericTagValueNode
259
- || $child->value instanceof Doctrine\DoctrineTagValueNode
260
- ) {
261
- $tokens->rollback();
262
- break;
263
- }
264
- if ($child->value instanceof Ast\PhpDoc\InvalidTagValueNode) {
265
- $tokens->rollback();
266
- $tokens->pushSavePoint();
267
- $tokens->next();
268
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
269
- $tokens->rollback();
270
- break;
271
- }
272
- $tokens->rollback();
273
- return trim($text . $this->parseText($tokens)->text, " \t");
274
- }
275
- }
276
-
277
- $tokens->rollback();
278
- return trim($text . $this->parseText($tokens)->text, " \t");
279
- }
280
- break;
281
- }
282
-
283
- if (!$savepoint) {
284
- $tokens->pushSavePoint();
285
- $savepoint = true;
286
- } elseif ($tmpText !== '') {
287
- $tokens->dropSavePoint();
288
- $tokens->pushSavePoint();
289
- }
290
-
291
- $tokens->pushSavePoint();
292
- $tokens->next();
293
-
294
- // if we're at EOL, check what's next
295
- // if next is a PHPDoc tag, EOL, or end of PHPDoc, stop
296
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG, ...$endTokens)) {
297
- $tokens->rollback();
298
- break;
299
- }
300
-
301
- // otherwise if the next is text, continue building the description string
302
-
303
- $tokens->dropSavePoint();
304
- $text .= $tokens->getDetectedNewline() ?? "\n";
305
- }
306
-
307
- if ($savepoint) {
308
- $tokens->rollback();
309
- $text = rtrim($text, $tokens->getDetectedNewline() ?? "\n");
310
- }
311
-
312
- return trim($text, " \t");
313
- }
314
-
315
-
316
- public function parseTag(TokenIterator $tokens): Ast\PhpDoc\PhpDocTagNode
317
- {
318
- $tag = $tokens->currentTokenValue();
319
- $tokens->next();
320
- $value = $this->parseTagValue($tokens, $tag);
321
-
322
- return new Ast\PhpDoc\PhpDocTagNode($tag, $value);
323
- }
324
-
325
-
326
- public function parseTagValue(TokenIterator $tokens, string $tag): Ast\PhpDoc\PhpDocTagValueNode
327
- {
328
- $startLine = $tokens->currentTokenLine();
329
- $startIndex = $tokens->currentTokenIndex();
330
-
331
- try {
332
- $tokens->pushSavePoint();
333
-
334
- switch ($tag) {
335
- case '@param':
336
- case '@phpstan-param':
337
- case '@psalm-param':
338
- case '@phan-param':
339
- $tagValue = $this->parseParamTagValue($tokens);
340
- break;
341
-
342
- case '@param-immediately-invoked-callable':
343
- case '@phpstan-param-immediately-invoked-callable':
344
- $tagValue = $this->parseParamImmediatelyInvokedCallableTagValue($tokens);
345
- break;
346
-
347
- case '@param-later-invoked-callable':
348
- case '@phpstan-param-later-invoked-callable':
349
- $tagValue = $this->parseParamLaterInvokedCallableTagValue($tokens);
350
- break;
351
-
352
- case '@param-closure-this':
353
- case '@phpstan-param-closure-this':
354
- $tagValue = $this->parseParamClosureThisTagValue($tokens);
355
- break;
356
-
357
- case '@pure-unless-callable-is-impure':
358
- case '@phpstan-pure-unless-callable-is-impure':
359
- $tagValue = $this->parsePureUnlessCallableIsImpureTagValue($tokens);
360
- break;
361
-
362
- case '@var':
363
- case '@phpstan-var':
364
- case '@psalm-var':
365
- case '@phan-var':
366
- $tagValue = $this->parseVarTagValue($tokens);
367
- break;
368
-
369
- case '@return':
370
- case '@phpstan-return':
371
- case '@psalm-return':
372
- case '@phan-return':
373
- case '@phan-real-return':
374
- $tagValue = $this->parseReturnTagValue($tokens);
375
- break;
376
-
377
- case '@throws':
378
- case '@phpstan-throws':
379
- $tagValue = $this->parseThrowsTagValue($tokens);
380
- break;
381
-
382
- case '@mixin':
383
- case '@phan-mixin':
384
- $tagValue = $this->parseMixinTagValue($tokens);
385
- break;
386
-
387
- case '@psalm-require-extends':
388
- case '@phpstan-require-extends':
389
- $tagValue = $this->parseRequireExtendsTagValue($tokens);
390
- break;
391
-
392
- case '@psalm-require-implements':
393
- case '@phpstan-require-implements':
394
- $tagValue = $this->parseRequireImplementsTagValue($tokens);
395
- break;
396
-
397
- case '@deprecated':
398
- $tagValue = $this->parseDeprecatedTagValue($tokens);
399
- break;
400
-
401
- case '@property':
402
- case '@property-read':
403
- case '@property-write':
404
- case '@phpstan-property':
405
- case '@phpstan-property-read':
406
- case '@phpstan-property-write':
407
- case '@psalm-property':
408
- case '@psalm-property-read':
409
- case '@psalm-property-write':
410
- case '@phan-property':
411
- case '@phan-property-read':
412
- case '@phan-property-write':
413
- $tagValue = $this->parsePropertyTagValue($tokens);
414
- break;
415
-
416
- case '@method':
417
- case '@phpstan-method':
418
- case '@psalm-method':
419
- case '@phan-method':
420
- $tagValue = $this->parseMethodTagValue($tokens);
421
- break;
422
-
423
- case '@template':
424
- case '@phpstan-template':
425
- case '@psalm-template':
426
- case '@phan-template':
427
- case '@template-covariant':
428
- case '@phpstan-template-covariant':
429
- case '@psalm-template-covariant':
430
- case '@template-contravariant':
431
- case '@phpstan-template-contravariant':
432
- case '@psalm-template-contravariant':
433
- $tagValue = $this->typeParser->parseTemplateTagValue(
434
- $tokens,
435
- fn ($tokens) => $this->parseOptionalDescription($tokens, true),
436
- );
437
- break;
438
-
439
- case '@extends':
440
- case '@phpstan-extends':
441
- case '@phan-extends':
442
- case '@phan-inherits':
443
- case '@template-extends':
444
- $tagValue = $this->parseExtendsTagValue('@extends', $tokens);
445
- break;
446
-
447
- case '@implements':
448
- case '@phpstan-implements':
449
- case '@template-implements':
450
- $tagValue = $this->parseExtendsTagValue('@implements', $tokens);
451
- break;
452
-
453
- case '@use':
454
- case '@phpstan-use':
455
- case '@template-use':
456
- $tagValue = $this->parseExtendsTagValue('@use', $tokens);
457
- break;
458
-
459
- case '@phpstan-type':
460
- case '@psalm-type':
461
- case '@phan-type':
462
- $tagValue = $this->parseTypeAliasTagValue($tokens);
463
- break;
464
-
465
- case '@phpstan-import-type':
466
- case '@psalm-import-type':
467
- $tagValue = $this->parseTypeAliasImportTagValue($tokens);
468
- break;
469
-
470
- case '@phpstan-assert':
471
- case '@phpstan-assert-if-true':
472
- case '@phpstan-assert-if-false':
473
- case '@psalm-assert':
474
- case '@psalm-assert-if-true':
475
- case '@psalm-assert-if-false':
476
- case '@phan-assert':
477
- case '@phan-assert-if-true':
478
- case '@phan-assert-if-false':
479
- $tagValue = $this->parseAssertTagValue($tokens);
480
- break;
481
-
482
- case '@phpstan-this-out':
483
- case '@phpstan-self-out':
484
- case '@psalm-this-out':
485
- case '@psalm-self-out':
486
- $tagValue = $this->parseSelfOutTagValue($tokens);
487
- break;
488
-
489
- case '@param-out':
490
- case '@phpstan-param-out':
491
- case '@psalm-param-out':
492
- $tagValue = $this->parseParamOutTagValue($tokens);
493
- break;
494
-
495
- default:
496
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
497
- $tagValue = $this->parseDoctrineTagValue($tokens, $tag);
498
- } else {
499
- $tagValue = new Ast\PhpDoc\GenericTagValueNode($this->parseOptionalDescriptionAfterDoctrineTag($tokens));
500
- }
501
- break;
502
- }
503
-
504
- $tokens->dropSavePoint();
505
-
506
- } catch (ParserException $e) {
507
- $tokens->rollback();
508
- $tagValue = new Ast\PhpDoc\InvalidTagValueNode($this->parseOptionalDescription($tokens, false), $e);
509
- }
510
-
511
- return $this->enrichWithAttributes($tokens, $tagValue, $startLine, $startIndex);
512
- }
513
-
514
-
515
- private function parseDoctrineTagValue(TokenIterator $tokens, string $tag): Ast\PhpDoc\PhpDocTagValueNode
516
- {
517
- $startLine = $tokens->currentTokenLine();
518
- $startIndex = $tokens->currentTokenIndex();
519
-
520
- return new Doctrine\DoctrineTagValueNode(
521
- $this->enrichWithAttributes(
522
- $tokens,
523
- new Doctrine\DoctrineAnnotation($tag, $this->parseDoctrineArguments($tokens, false)),
524
- $startLine,
525
- $startIndex,
526
- ),
527
- $this->parseOptionalDescriptionAfterDoctrineTag($tokens),
528
- );
529
- }
530
-
531
-
532
- /**
533
- * @return list<Doctrine\DoctrineArgument>
534
- */
535
- private function parseDoctrineArguments(TokenIterator $tokens, bool $deep): array
536
- {
537
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
538
- return ;
539
- }
540
-
541
- if (!$deep) {
542
- $tokens->addEndOfLineToSkippedTokens();
543
- }
544
-
545
- $arguments = ;
546
-
547
- try {
548
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES);
549
-
550
- do {
551
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PARENTHESES)) {
552
- break;
553
- }
554
- $arguments = $this->parseDoctrineArgument($tokens);
555
- } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA));
556
- } finally {
557
- if (!$deep) {
558
- $tokens->removeEndOfLineFromSkippedTokens();
559
- }
560
- }
561
-
562
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
563
-
564
- return $arguments;
565
- }
566
-
567
-
568
- private function parseDoctrineArgument(TokenIterator $tokens): Doctrine\DoctrineArgument
569
- {
570
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_IDENTIFIER)) {
571
- $startLine = $tokens->currentTokenLine();
572
- $startIndex = $tokens->currentTokenIndex();
573
-
574
- return $this->enrichWithAttributes(
575
- $tokens,
576
- new Doctrine\DoctrineArgument(null, $this->parseDoctrineArgumentValue($tokens)),
577
- $startLine,
578
- $startIndex,
579
- );
580
- }
581
-
582
- $startLine = $tokens->currentTokenLine();
583
- $startIndex = $tokens->currentTokenIndex();
584
-
585
- try {
586
- $tokens->pushSavePoint();
587
- $currentValue = $tokens->currentTokenValue();
588
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
589
-
590
- $key = $this->enrichWithAttributes(
591
- $tokens,
592
- new IdentifierTypeNode($currentValue),
593
- $startLine,
594
- $startIndex,
595
- );
596
- $tokens->consumeTokenType(Lexer::TOKEN_EQUAL);
597
-
598
- $value = $this->parseDoctrineArgumentValue($tokens);
599
-
600
- $tokens->dropSavePoint();
601
-
602
- return $this->enrichWithAttributes(
603
- $tokens,
604
- new Doctrine\DoctrineArgument($key, $value),
605
- $startLine,
606
- $startIndex,
607
- );
608
- } catch (ParserException $e) {
609
- $tokens->rollback();
610
-
611
- return $this->enrichWithAttributes(
612
- $tokens,
613
- new Doctrine\DoctrineArgument(null, $this->parseDoctrineArgumentValue($tokens)),
614
- $startLine,
615
- $startIndex,
616
- );
617
- }
618
- }
619
-
620
-
621
- /**
622
- * @return DoctrineValueType
623
- */
624
- private function parseDoctrineArgumentValue(TokenIterator $tokens)
625
- {
626
- $startLine = $tokens->currentTokenLine();
627
- $startIndex = $tokens->currentTokenIndex();
628
-
629
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG)) {
630
- $name = $tokens->currentTokenValue();
631
- $tokens->next();
632
-
633
- return $this->enrichWithAttributes(
634
- $tokens,
635
- new Doctrine\DoctrineAnnotation($name, $this->parseDoctrineArguments($tokens, true)),
636
- $startLine,
637
- $startIndex,
638
- );
639
- }
640
-
641
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET)) {
642
- $items = ;
643
- do {
644
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET)) {
645
- break;
646
- }
647
- $items = $this->parseDoctrineArrayItem($tokens);
648
- } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA));
649
-
650
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET);
651
-
652
- return $this->enrichWithAttributes(
653
- $tokens,
654
- new Doctrine\DoctrineArray($items),
655
- $startLine,
656
- $startIndex,
657
- );
658
- }
659
-
660
- $currentTokenValue = $tokens->currentTokenValue();
661
- $tokens->pushSavePoint(); // because of ConstFetchNode
662
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_IDENTIFIER)) {
663
- $identifier = $this->enrichWithAttributes(
664
- $tokens,
665
- new Ast\Type\IdentifierTypeNode($currentTokenValue),
666
- $startLine,
667
- $startIndex,
668
- );
669
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_COLON)) {
670
- $tokens->dropSavePoint();
671
- return $identifier;
672
- }
673
-
674
- $tokens->rollback(); // because of ConstFetchNode
675
- } else {
676
- $tokens->dropSavePoint(); // because of ConstFetchNode
677
- }
678
-
679
- $currentTokenValue = $tokens->currentTokenValue();
680
- $currentTokenType = $tokens->currentTokenType();
681
- $currentTokenOffset = $tokens->currentTokenOffset();
682
- $currentTokenLine = $tokens->currentTokenLine();
683
-
684
- try {
685
- $constExpr = $this->doctrineConstantExprParser->parse($tokens);
686
- if ($constExpr instanceof Ast\ConstExpr\ConstExprArrayNode) {
687
- throw new ParserException(
688
- $currentTokenValue,
689
- $currentTokenType,
690
- $currentTokenOffset,
691
- Lexer::TOKEN_IDENTIFIER,
692
- null,
693
- $currentTokenLine,
694
- );
695
- }
696
-
697
- return $constExpr;
698
- } catch (LogicException $e) {
699
- throw new ParserException(
700
- $currentTokenValue,
701
- $currentTokenType,
702
- $currentTokenOffset,
703
- Lexer::TOKEN_IDENTIFIER,
704
- null,
705
- $currentTokenLine,
706
- );
707
- }
708
- }
709
-
710
-
711
- private function parseDoctrineArrayItem(TokenIterator $tokens): Doctrine\DoctrineArrayItem
712
- {
713
- $startLine = $tokens->currentTokenLine();
714
- $startIndex = $tokens->currentTokenIndex();
715
-
716
- try {
717
- $tokens->pushSavePoint();
718
-
719
- $key = $this->parseDoctrineArrayKey($tokens);
720
- if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL)) {
721
- if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_COLON)) {
722
- $tokens->consumeTokenType(Lexer::TOKEN_EQUAL); // will throw exception
723
- }
724
- }
725
-
726
- $value = $this->parseDoctrineArgumentValue($tokens);
727
-
728
- $tokens->dropSavePoint();
729
-
730
- return $this->enrichWithAttributes(
731
- $tokens,
732
- new Doctrine\DoctrineArrayItem($key, $value),
733
- $startLine,
734
- $startIndex,
735
- );
736
- } catch (ParserException $e) {
737
- $tokens->rollback();
738
-
739
- return $this->enrichWithAttributes(
740
- $tokens,
741
- new Doctrine\DoctrineArrayItem(null, $this->parseDoctrineArgumentValue($tokens)),
742
- $startLine,
743
- $startIndex,
744
- );
745
- }
746
- }
747
-
748
-
749
- /**
750
- * @return ConstExprIntegerNode|ConstExprStringNode|IdentifierTypeNode|ConstFetchNode
751
- */
752
- private function parseDoctrineArrayKey(TokenIterator $tokens)
753
- {
754
- $startLine = $tokens->currentTokenLine();
755
- $startIndex = $tokens->currentTokenIndex();
756
-
757
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_INTEGER)) {
758
- $key = new Ast\ConstExpr\ConstExprIntegerNode(str_replace('_', '', $tokens->currentTokenValue()));
759
- $tokens->next();
760
-
761
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_DOCTRINE_ANNOTATION_STRING)) {
762
- $key = $this->doctrineConstantExprParser->parseDoctrineString($tokens->currentTokenValue(), $tokens);
763
-
764
- $tokens->next();
765
-
766
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING)) {
767
- $key = new Ast\ConstExpr\ConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\ConstExprStringNode::SINGLE_QUOTED);
768
- $tokens->next();
769
-
770
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_QUOTED_STRING)) {
771
- $value = $tokens->currentTokenValue();
772
- $tokens->next();
773
- $key = $this->doctrineConstantExprParser->parseDoctrineString($value, $tokens);
774
-
775
- } else {
776
- $currentTokenValue = $tokens->currentTokenValue();
777
- $tokens->pushSavePoint(); // because of ConstFetchNode
778
- if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_IDENTIFIER)) {
779
- $tokens->dropSavePoint();
780
- throw new ParserException(
781
- $tokens->currentTokenValue(),
782
- $tokens->currentTokenType(),
783
- $tokens->currentTokenOffset(),
784
- Lexer::TOKEN_IDENTIFIER,
785
- null,
786
- $tokens->currentTokenLine(),
787
- );
788
- }
789
-
790
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_COLON)) {
791
- $tokens->dropSavePoint();
792
-
793
- return $this->enrichWithAttributes(
794
- $tokens,
795
- new IdentifierTypeNode($currentTokenValue),
796
- $startLine,
797
- $startIndex,
798
- );
799
- }
800
-
801
- $tokens->rollback();
802
- $constExpr = $this->doctrineConstantExprParser->parse($tokens);
803
- if (!$constExpr instanceof Ast\ConstExpr\ConstFetchNode) {
804
- throw new ParserException(
805
- $tokens->currentTokenValue(),
806
- $tokens->currentTokenType(),
807
- $tokens->currentTokenOffset(),
808
- Lexer::TOKEN_IDENTIFIER,
809
- null,
810
- $tokens->currentTokenLine(),
811
- );
812
- }
813
-
814
- return $constExpr;
815
- }
816
-
817
- return $this->enrichWithAttributes($tokens, $key, $startLine, $startIndex);
818
- }
819
-
820
-
821
- /**
822
- * @return Ast\PhpDoc\ParamTagValueNode|Ast\PhpDoc\TypelessParamTagValueNode
823
- */
824
- private function parseParamTagValue(TokenIterator $tokens): Ast\PhpDoc\PhpDocTagValueNode
825
- {
826
- if (
827
- $tokens->isCurrentTokenType(Lexer::TOKEN_REFERENCE, Lexer::TOKEN_VARIADIC, Lexer::TOKEN_VARIABLE)
828
- ) {
829
- $type = null;
830
- } else {
831
- $type = $this->typeParser->parse($tokens);
832
- }
833
-
834
- $isReference = $tokens->tryConsumeTokenType(Lexer::TOKEN_REFERENCE);
835
- $isVariadic = $tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC);
836
- $parameterName = $this->parseRequiredVariableName($tokens);
837
- $description = $this->parseOptionalDescription($tokens, false);
838
-
839
- if ($type !== null) {
840
- return new Ast\PhpDoc\ParamTagValueNode($type, $isVariadic, $parameterName, $description, $isReference);
841
- }
842
-
843
- return new Ast\PhpDoc\TypelessParamTagValueNode($isVariadic, $parameterName, $description, $isReference);
844
- }
845
-
846
-
847
- private function parseParamImmediatelyInvokedCallableTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamImmediatelyInvokedCallableTagValueNode
848
- {
849
- $parameterName = $this->parseRequiredVariableName($tokens);
850
- $description = $this->parseOptionalDescription($tokens, false);
851
-
852
- return new Ast\PhpDoc\ParamImmediatelyInvokedCallableTagValueNode($parameterName, $description);
853
- }
854
-
855
-
856
- private function parseParamLaterInvokedCallableTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamLaterInvokedCallableTagValueNode
857
- {
858
- $parameterName = $this->parseRequiredVariableName($tokens);
859
- $description = $this->parseOptionalDescription($tokens, false);
860
-
861
- return new Ast\PhpDoc\ParamLaterInvokedCallableTagValueNode($parameterName, $description);
862
- }
863
-
864
-
865
- private function parseParamClosureThisTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamClosureThisTagValueNode
866
- {
867
- $type = $this->typeParser->parse($tokens);
868
- $parameterName = $this->parseRequiredVariableName($tokens);
869
- $description = $this->parseOptionalDescription($tokens, false);
870
-
871
- return new Ast\PhpDoc\ParamClosureThisTagValueNode($type, $parameterName, $description);
872
- }
873
-
874
- private function parsePureUnlessCallableIsImpureTagValue(TokenIterator $tokens): Ast\PhpDoc\PureUnlessCallableIsImpureTagValueNode
875
- {
876
- $parameterName = $this->parseRequiredVariableName($tokens);
877
- $description = $this->parseOptionalDescription($tokens, false);
878
-
879
- return new Ast\PhpDoc\PureUnlessCallableIsImpureTagValueNode($parameterName, $description);
880
- }
881
-
882
- private function parseVarTagValue(TokenIterator $tokens): Ast\PhpDoc\VarTagValueNode
883
- {
884
- $type = $this->typeParser->parse($tokens);
885
- $variableName = $this->parseOptionalVariableName($tokens);
886
- $description = $this->parseOptionalDescription($tokens, $variableName === '');
887
- return new Ast\PhpDoc\VarTagValueNode($type, $variableName, $description);
888
- }
889
-
890
-
891
- private function parseReturnTagValue(TokenIterator $tokens): Ast\PhpDoc\ReturnTagValueNode
892
- {
893
- $type = $this->typeParser->parse($tokens);
894
- $description = $this->parseOptionalDescription($tokens, true);
895
- return new Ast\PhpDoc\ReturnTagValueNode($type, $description);
896
- }
897
-
898
-
899
- private function parseThrowsTagValue(TokenIterator $tokens): Ast\PhpDoc\ThrowsTagValueNode
900
- {
901
- $type = $this->typeParser->parse($tokens);
902
- $description = $this->parseOptionalDescription($tokens, true);
903
- return new Ast\PhpDoc\ThrowsTagValueNode($type, $description);
904
- }
905
-
906
- private function parseMixinTagValue(TokenIterator $tokens): Ast\PhpDoc\MixinTagValueNode
907
- {
908
- $type = $this->typeParser->parse($tokens);
909
- $description = $this->parseOptionalDescription($tokens, true);
910
- return new Ast\PhpDoc\MixinTagValueNode($type, $description);
911
- }
912
-
913
- private function parseRequireExtendsTagValue(TokenIterator $tokens): Ast\PhpDoc\RequireExtendsTagValueNode
914
- {
915
- $type = $this->typeParser->parse($tokens);
916
- $description = $this->parseOptionalDescription($tokens, true);
917
- return new Ast\PhpDoc\RequireExtendsTagValueNode($type, $description);
918
- }
919
-
920
- private function parseRequireImplementsTagValue(TokenIterator $tokens): Ast\PhpDoc\RequireImplementsTagValueNode
921
- {
922
- $type = $this->typeParser->parse($tokens);
923
- $description = $this->parseOptionalDescription($tokens, true);
924
- return new Ast\PhpDoc\RequireImplementsTagValueNode($type, $description);
925
- }
926
-
927
- private function parseDeprecatedTagValue(TokenIterator $tokens): Ast\PhpDoc\DeprecatedTagValueNode
928
- {
929
- $description = $this->parseOptionalDescription($tokens, false);
930
- return new Ast\PhpDoc\DeprecatedTagValueNode($description);
931
- }
932
-
933
-
934
- private function parsePropertyTagValue(TokenIterator $tokens): Ast\PhpDoc\PropertyTagValueNode
935
- {
936
- $type = $this->typeParser->parse($tokens);
937
- $parameterName = $this->parseRequiredVariableName($tokens);
938
- $description = $this->parseOptionalDescription($tokens, false);
939
- return new Ast\PhpDoc\PropertyTagValueNode($type, $parameterName, $description);
940
- }
941
-
942
-
943
- private function parseMethodTagValue(TokenIterator $tokens): Ast\PhpDoc\MethodTagValueNode
944
- {
945
- $staticKeywordOrReturnTypeOrMethodName = $this->typeParser->parse($tokens);
946
-
947
- if ($staticKeywordOrReturnTypeOrMethodName instanceof Ast\Type\IdentifierTypeNode && $staticKeywordOrReturnTypeOrMethodName->name === 'static') {
948
- $isStatic = true;
949
- $returnTypeOrMethodName = $this->typeParser->parse($tokens);
950
-
951
- } else {
952
- $isStatic = false;
953
- $returnTypeOrMethodName = $staticKeywordOrReturnTypeOrMethodName;
954
- }
955
-
956
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_IDENTIFIER)) {
957
- $returnType = $returnTypeOrMethodName;
958
- $methodName = $tokens->currentTokenValue();
959
- $tokens->next();
960
-
961
- } elseif ($returnTypeOrMethodName instanceof Ast\Type\IdentifierTypeNode) {
962
- $returnType = $isStatic ? $staticKeywordOrReturnTypeOrMethodName : null;
963
- $methodName = $returnTypeOrMethodName->name;
964
- $isStatic = false;
965
-
966
- } else {
967
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); // will throw exception
968
- exit;
969
- }
970
-
971
- $templateTypes = ;
972
-
973
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)) {
974
- do {
975
- $startLine = $tokens->currentTokenLine();
976
- $startIndex = $tokens->currentTokenIndex();
977
- $templateTypes = $this->enrichWithAttributes(
978
- $tokens,
979
- $this->typeParser->parseTemplateTagValue($tokens),
980
- $startLine,
981
- $startIndex,
982
- );
983
- } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA));
984
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET);
985
- }
986
-
987
- $parameters = ;
988
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES);
989
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PARENTHESES)) {
990
- $parameters = $this->parseMethodTagValueParameter($tokens);
991
- while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) {
992
- $parameters = $this->parseMethodTagValueParameter($tokens);
993
- }
994
- }
995
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
996
-
997
- $description = $this->parseOptionalDescription($tokens, false);
998
- return new Ast\PhpDoc\MethodTagValueNode($isStatic, $returnType, $methodName, $parameters, $description, $templateTypes);
999
- }
1000
-
1001
- private function parseMethodTagValueParameter(TokenIterator $tokens): Ast\PhpDoc\MethodTagValueParameterNode
1002
- {
1003
- $startLine = $tokens->currentTokenLine();
1004
- $startIndex = $tokens->currentTokenIndex();
1005
-
1006
- switch ($tokens->currentTokenType()) {
1007
- case Lexer::TOKEN_IDENTIFIER:
1008
- case Lexer::TOKEN_OPEN_PARENTHESES:
1009
- case Lexer::TOKEN_NULLABLE:
1010
- $parameterType = $this->typeParser->parse($tokens);
1011
- break;
1012
-
1013
- default:
1014
- $parameterType = null;
1015
- }
1016
-
1017
- $isReference = $tokens->tryConsumeTokenType(Lexer::TOKEN_REFERENCE);
1018
- $isVariadic = $tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC);
1019
-
1020
- $parameterName = $tokens->currentTokenValue();
1021
- $tokens->consumeTokenType(Lexer::TOKEN_VARIABLE);
1022
-
1023
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL)) {
1024
- $defaultValue = $this->constantExprParser->parse($tokens);
1025
-
1026
- } else {
1027
- $defaultValue = null;
1028
- }
1029
-
1030
- return $this->enrichWithAttributes(
1031
- $tokens,
1032
- new Ast\PhpDoc\MethodTagValueParameterNode($parameterType, $isReference, $isVariadic, $parameterName, $defaultValue),
1033
- $startLine,
1034
- $startIndex,
1035
- );
1036
- }
1037
-
1038
- private function parseExtendsTagValue(string $tagName, TokenIterator $tokens): Ast\PhpDoc\PhpDocTagValueNode
1039
- {
1040
- $startLine = $tokens->currentTokenLine();
1041
- $startIndex = $tokens->currentTokenIndex();
1042
- $baseType = new IdentifierTypeNode($tokens->currentTokenValue());
1043
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
1044
-
1045
- $type = $this->typeParser->parseGeneric(
1046
- $tokens,
1047
- $this->typeParser->enrichWithAttributes($tokens, $baseType, $startLine, $startIndex),
1048
- );
1049
-
1050
- $description = $this->parseOptionalDescription($tokens, true);
1051
-
1052
- switch ($tagName) {
1053
- case '@extends':
1054
- return new Ast\PhpDoc\ExtendsTagValueNode($type, $description);
1055
- case '@implements':
1056
- return new Ast\PhpDoc\ImplementsTagValueNode($type, $description);
1057
- case '@use':
1058
- return new Ast\PhpDoc\UsesTagValueNode($type, $description);
1059
- }
1060
-
1061
- throw new ShouldNotHappenException();
1062
- }
1063
-
1064
- private function parseTypeAliasTagValue(TokenIterator $tokens): Ast\PhpDoc\TypeAliasTagValueNode
1065
- {
1066
- $alias = $tokens->currentTokenValue();
1067
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
1068
-
1069
- // support phan-type/psalm-type syntax
1070
- $tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL);
1071
-
1072
- $startLine = $tokens->currentTokenLine();
1073
- $startIndex = $tokens->currentTokenIndex();
1074
- try {
1075
- $type = $this->typeParser->parse($tokens);
1076
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) {
1077
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL)) {
1078
- throw new ParserException(
1079
- $tokens->currentTokenValue(),
1080
- $tokens->currentTokenType(),
1081
- $tokens->currentTokenOffset(),
1082
- Lexer::TOKEN_PHPDOC_EOL,
1083
- null,
1084
- $tokens->currentTokenLine(),
1085
- );
1086
- }
1087
- }
1088
-
1089
- return new Ast\PhpDoc\TypeAliasTagValueNode($alias, $type);
1090
- } catch (ParserException $e) {
1091
- $this->parseOptionalDescription($tokens, false);
1092
- return new Ast\PhpDoc\TypeAliasTagValueNode(
1093
- $alias,
1094
- $this->enrichWithAttributes($tokens, new Ast\Type\InvalidTypeNode($e), $startLine, $startIndex),
1095
- );
1096
- }
1097
- }
1098
-
1099
- private function parseTypeAliasImportTagValue(TokenIterator $tokens): Ast\PhpDoc\TypeAliasImportTagValueNode
1100
- {
1101
- $importedAlias = $tokens->currentTokenValue();
1102
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
1103
-
1104
- $tokens->consumeTokenValue(Lexer::TOKEN_IDENTIFIER, 'from');
1105
-
1106
- $identifierStartLine = $tokens->currentTokenLine();
1107
- $identifierStartIndex = $tokens->currentTokenIndex();
1108
- $importedFrom = $tokens->currentTokenValue();
1109
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
1110
- $importedFromType = $this->enrichWithAttributes(
1111
- $tokens,
1112
- new IdentifierTypeNode($importedFrom),
1113
- $identifierStartLine,
1114
- $identifierStartIndex,
1115
- );
1116
-
1117
- $importedAs = null;
1118
- if ($tokens->tryConsumeTokenValue('as')) {
1119
- $importedAs = $tokens->currentTokenValue();
1120
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
1121
- }
1122
-
1123
- return new Ast\PhpDoc\TypeAliasImportTagValueNode($importedAlias, $importedFromType, $importedAs);
1124
- }
1125
-
1126
- /**
1127
- * @return Ast\PhpDoc\AssertTagValueNode|Ast\PhpDoc\AssertTagPropertyValueNode|Ast\PhpDoc\AssertTagMethodValueNode
1128
- */
1129
- private function parseAssertTagValue(TokenIterator $tokens): Ast\PhpDoc\PhpDocTagValueNode
1130
- {
1131
- $isNegated = $tokens->tryConsumeTokenType(Lexer::TOKEN_NEGATED);
1132
- $isEquality = $tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL);
1133
- $type = $this->typeParser->parse($tokens);
1134
- $parameter = $this->parseAssertParameter($tokens);
1135
- $description = $this->parseOptionalDescription($tokens, false);
1136
-
1137
- if (array_key_exists('method', $parameter)) {
1138
- return new Ast\PhpDoc\AssertTagMethodValueNode($type, $parameter'parameter', $parameter'method', $isNegated, $description, $isEquality);
1139
- } elseif (array_key_exists('property', $parameter)) {
1140
- return new Ast\PhpDoc\AssertTagPropertyValueNode($type, $parameter'parameter', $parameter'property', $isNegated, $description, $isEquality);
1141
- }
1142
-
1143
- return new Ast\PhpDoc\AssertTagValueNode($type, $parameter'parameter', $isNegated, $description, $isEquality);
1144
- }
1145
-
1146
- /**
1147
- * @return array{parameter: string}|array{parameter: string, property: string}|array{parameter: string, method: string}
1148
- */
1149
- private function parseAssertParameter(TokenIterator $tokens): array
1150
- {
1151
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_THIS_VARIABLE)) {
1152
- $parameter = '$this';
1153
- $tokens->next();
1154
- } else {
1155
- $parameter = $tokens->currentTokenValue();
1156
- $tokens->consumeTokenType(Lexer::TOKEN_VARIABLE);
1157
- }
1158
-
1159
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_ARROW)) {
1160
- $tokens->consumeTokenType(Lexer::TOKEN_ARROW);
1161
-
1162
- $propertyOrMethod = $tokens->currentTokenValue();
1163
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
1164
-
1165
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
1166
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
1167
-
1168
- return 'parameter' => $parameter, 'method' => $propertyOrMethod;
1169
- }
1170
-
1171
- return 'parameter' => $parameter, 'property' => $propertyOrMethod;
1172
- }
1173
-
1174
- return 'parameter' => $parameter;
1175
- }
1176
-
1177
- private function parseSelfOutTagValue(TokenIterator $tokens): Ast\PhpDoc\SelfOutTagValueNode
1178
- {
1179
- $type = $this->typeParser->parse($tokens);
1180
- $description = $this->parseOptionalDescription($tokens, true);
1181
-
1182
- return new Ast\PhpDoc\SelfOutTagValueNode($type, $description);
1183
- }
1184
-
1185
- private function parseParamOutTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamOutTagValueNode
1186
- {
1187
- $type = $this->typeParser->parse($tokens);
1188
- $parameterName = $this->parseRequiredVariableName($tokens);
1189
- $description = $this->parseOptionalDescription($tokens, false);
1190
-
1191
- return new Ast\PhpDoc\ParamOutTagValueNode($type, $parameterName, $description);
1192
- }
1193
-
1194
- private function parseOptionalVariableName(TokenIterator $tokens): string
1195
- {
1196
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_VARIABLE)) {
1197
- $parameterName = $tokens->currentTokenValue();
1198
- $tokens->next();
1199
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_THIS_VARIABLE)) {
1200
- $parameterName = '$this';
1201
- $tokens->next();
1202
-
1203
- } else {
1204
- $parameterName = '';
1205
- }
1206
-
1207
- return $parameterName;
1208
- }
1209
-
1210
-
1211
- private function parseRequiredVariableName(TokenIterator $tokens): string
1212
- {
1213
- $parameterName = $tokens->currentTokenValue();
1214
- $tokens->consumeTokenType(Lexer::TOKEN_VARIABLE);
1215
-
1216
- return $parameterName;
1217
- }
1218
-
1219
- /**
1220
- * @param bool $limitStartToken true should be used when the description immediately follows a parsed type
1221
- */
1222
- private function parseOptionalDescription(TokenIterator $tokens, bool $limitStartToken): string
1223
- {
1224
- if ($limitStartToken) {
1225
- foreach (self::DISALLOWED_DESCRIPTION_START_TOKENS as $disallowedStartToken) {
1226
- if (!$tokens->isCurrentTokenType($disallowedStartToken)) {
1227
- continue;
1228
- }
1229
-
1230
- $tokens->consumeTokenType(Lexer::TOKEN_OTHER); // will throw exception
1231
- }
1232
-
1233
- if (
1234
- !$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END)
1235
- && !$tokens->isPrecededByHorizontalWhitespace()
1236
- ) {
1237
- $tokens->consumeTokenType(Lexer::TOKEN_HORIZONTAL_WS); // will throw exception
1238
- }
1239
- }
1240
-
1241
- return $this->parseText($tokens)->text;
1242
- }
1243
-
1244
-}
1245
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php
Deleted
102
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Parser;
5
-
6
-use PHPStan\ShouldNotHappenException;
7
-use function chr;
8
-use function hexdec;
9
-use function octdec;
10
-use function preg_replace_callback;
11
-use function str_replace;
12
-use function substr;
13
-
14
-class StringUnescaper
15
-{
16
-
17
- private const REPLACEMENTS =
18
- '\\' => '\\',
19
- 'n' => "\n",
20
- 'r' => "\r",
21
- 't' => "\t",
22
- 'f' => "\f",
23
- 'v' => "\v",
24
- 'e' => "\x1B",
25
- ;
26
-
27
- public static function unescapeString(string $string): string
28
- {
29
- $quote = $string0;
30
-
31
- if ($quote === '\'') {
32
- return str_replace(
33
- '\\\\', '\\\'',
34
- '\\', '\'',
35
- substr($string, 1, -1),
36
- );
37
- }
38
-
39
- return self::parseEscapeSequences(substr($string, 1, -1), '"');
40
- }
41
-
42
- /**
43
- * Implementation based on https://github.com/nikic/PHP-Parser/blob/b0edd4c41111042d43bb45c6c657b2e0db367d9e/lib/PhpParser/Node/Scalar/String_.php#L90-L130
44
- */
45
- private static function parseEscapeSequences(string $str, string $quote): string
46
- {
47
- $str = str_replace('\\' . $quote, $quote, $str);
48
-
49
- return preg_replace_callback(
50
- '~\\\\(\\\\nrtfve|xX0-9a-fA-F{1,2}|0-7{1,3}|u\{(0-9a-fA-F+)\})~',
51
- static function ($matches) {
52
- $str = $matches1;
53
-
54
- if (isset(self::REPLACEMENTS$str)) {
55
- return self::REPLACEMENTS$str;
56
- }
57
- if ($str0 === 'x' || $str0 === 'X') {
58
- return chr((int) hexdec(substr($str, 1)));
59
- }
60
- if ($str0 === 'u') {
61
- if (!isset($matches2)) {
62
- throw new ShouldNotHappenException();
63
- }
64
- return self::codePointToUtf8((int) hexdec($matches2));
65
- }
66
-
67
- return chr((int) octdec($str));
68
- },
69
- $str,
70
- );
71
- }
72
-
73
- /**
74
- * Implementation based on https://github.com/nikic/PHP-Parser/blob/b0edd4c41111042d43bb45c6c657b2e0db367d9e/lib/PhpParser/Node/Scalar/String_.php#L132-L154
75
- */
76
- private static function codePointToUtf8(int $num): string
77
- {
78
- if ($num <= 0x7F) {
79
- return chr($num);
80
- }
81
- if ($num <= 0x7FF) {
82
- return chr(($num >> 6) + 0xC0)
83
- . chr(($num & 0x3F) + 0x80);
84
- }
85
- if ($num <= 0xFFFF) {
86
- return chr(($num >> 12) + 0xE0)
87
- . chr((($num >> 6) & 0x3F) + 0x80)
88
- . chr(($num & 0x3F) + 0x80);
89
- }
90
- if ($num <= 0x1FFFFF) {
91
- return chr(($num >> 18) + 0xF0)
92
- . chr((($num >> 12) & 0x3F) + 0x80)
93
- . chr((($num >> 6) & 0x3F) + 0x80)
94
- . chr(($num & 0x3F) + 0x80);
95
- }
96
-
97
- // Invalid UTF-8 codepoint escape sequence: Codepoint too large
98
- return "\xef\xbf\xbd";
99
- }
100
-
101
-}
102
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Parser/TokenIterator.php
Deleted
383
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Parser;
5
-
6
-use LogicException;
7
-use PHPStan\PhpDocParser\Lexer\Lexer;
8
-use function array_pop;
9
-use function assert;
10
-use function count;
11
-use function in_array;
12
-use function strlen;
13
-use function substr;
14
-
15
-class TokenIterator
16
-{
17
-
18
- /** @var list<array{string, int, int}> */
19
- private array $tokens;
20
-
21
- private int $index;
22
-
23
- /** @var int */
24
- private array $savePoints = ;
25
-
26
- /** @var list<int> */
27
- private array $skippedTokenTypes = Lexer::TOKEN_HORIZONTAL_WS;
28
-
29
- private ?string $newline = null;
30
-
31
- /**
32
- * @param list<array{string, int, int}> $tokens
33
- */
34
- public function __construct(array $tokens, int $index = 0)
35
- {
36
- $this->tokens = $tokens;
37
- $this->index = $index;
38
-
39
- $this->skipIrrelevantTokens();
40
- }
41
-
42
-
43
- /**
44
- * @return list<array{string, int, int}>
45
- */
46
- public function getTokens(): array
47
- {
48
- return $this->tokens;
49
- }
50
-
51
-
52
- public function getContentBetween(int $startPos, int $endPos): string
53
- {
54
- if ($startPos < 0 || $endPos > count($this->tokens)) {
55
- throw new LogicException();
56
- }
57
-
58
- $content = '';
59
- for ($i = $startPos; $i < $endPos; $i++) {
60
- $content .= $this->tokens$iLexer::VALUE_OFFSET;
61
- }
62
-
63
- return $content;
64
- }
65
-
66
-
67
- public function getTokenCount(): int
68
- {
69
- return count($this->tokens);
70
- }
71
-
72
-
73
- public function currentTokenValue(): string
74
- {
75
- return $this->tokens$this->indexLexer::VALUE_OFFSET;
76
- }
77
-
78
-
79
- public function currentTokenType(): int
80
- {
81
- return $this->tokens$this->indexLexer::TYPE_OFFSET;
82
- }
83
-
84
-
85
- public function currentTokenOffset(): int
86
- {
87
- $offset = 0;
88
- for ($i = 0; $i < $this->index; $i++) {
89
- $offset += strlen($this->tokens$iLexer::VALUE_OFFSET);
90
- }
91
-
92
- return $offset;
93
- }
94
-
95
-
96
- public function currentTokenLine(): int
97
- {
98
- return $this->tokens$this->indexLexer::LINE_OFFSET;
99
- }
100
-
101
-
102
- public function currentTokenIndex(): int
103
- {
104
- return $this->index;
105
- }
106
-
107
-
108
- public function endIndexOfLastRelevantToken(): int
109
- {
110
- $endIndex = $this->currentTokenIndex();
111
- $endIndex--;
112
- while (in_array($this->tokens$endIndexLexer::TYPE_OFFSET, $this->skippedTokenTypes, true)) {
113
- if (!isset($this->tokens$endIndex - 1)) {
114
- break;
115
- }
116
- $endIndex--;
117
- }
118
-
119
- return $endIndex;
120
- }
121
-
122
-
123
- public function isCurrentTokenValue(string $tokenValue): bool
124
- {
125
- return $this->tokens$this->indexLexer::VALUE_OFFSET === $tokenValue;
126
- }
127
-
128
-
129
- public function isCurrentTokenType(int ...$tokenType): bool
130
- {
131
- return in_array($this->tokens$this->indexLexer::TYPE_OFFSET, $tokenType, true);
132
- }
133
-
134
-
135
- public function isPrecededByHorizontalWhitespace(): bool
136
- {
137
- return ($this->tokens$this->index - 1Lexer::TYPE_OFFSET ?? -1) === Lexer::TOKEN_HORIZONTAL_WS;
138
- }
139
-
140
-
141
- /**
142
- * @throws ParserException
143
- */
144
- public function consumeTokenType(int $tokenType): void
145
- {
146
- if ($this->tokens$this->indexLexer::TYPE_OFFSET !== $tokenType) {
147
- $this->throwError($tokenType);
148
- }
149
-
150
- if ($tokenType === Lexer::TOKEN_PHPDOC_EOL) {
151
- if ($this->newline === null) {
152
- $this->detectNewline();
153
- }
154
- }
155
-
156
- $this->index++;
157
- $this->skipIrrelevantTokens();
158
- }
159
-
160
-
161
- /**
162
- * @throws ParserException
163
- */
164
- public function consumeTokenValue(int $tokenType, string $tokenValue): void
165
- {
166
- if ($this->tokens$this->indexLexer::TYPE_OFFSET !== $tokenType || $this->tokens$this->indexLexer::VALUE_OFFSET !== $tokenValue) {
167
- $this->throwError($tokenType, $tokenValue);
168
- }
169
-
170
- $this->index++;
171
- $this->skipIrrelevantTokens();
172
- }
173
-
174
-
175
- /** @phpstan-impure */
176
- public function tryConsumeTokenValue(string $tokenValue): bool
177
- {
178
- if ($this->tokens$this->indexLexer::VALUE_OFFSET !== $tokenValue) {
179
- return false;
180
- }
181
-
182
- $this->index++;
183
- $this->skipIrrelevantTokens();
184
-
185
- return true;
186
- }
187
-
188
-
189
- /** @phpstan-impure */
190
- public function tryConsumeTokenType(int $tokenType): bool
191
- {
192
- if ($this->tokens$this->indexLexer::TYPE_OFFSET !== $tokenType) {
193
- return false;
194
- }
195
-
196
- if ($tokenType === Lexer::TOKEN_PHPDOC_EOL) {
197
- if ($this->newline === null) {
198
- $this->detectNewline();
199
- }
200
- }
201
-
202
- $this->index++;
203
- $this->skipIrrelevantTokens();
204
-
205
- return true;
206
- }
207
-
208
-
209
- private function detectNewline(): void
210
- {
211
- $value = $this->currentTokenValue();
212
- if (substr($value, 0, 2) === "\r\n") {
213
- $this->newline = "\r\n";
214
- } elseif (substr($value, 0, 1) === "\n") {
215
- $this->newline = "\n";
216
- }
217
- }
218
-
219
-
220
- public function getSkippedHorizontalWhiteSpaceIfAny(): string
221
- {
222
- if ($this->index > 0 && $this->tokens$this->index - 1Lexer::TYPE_OFFSET === Lexer::TOKEN_HORIZONTAL_WS) {
223
- return $this->tokens$this->index - 1Lexer::VALUE_OFFSET;
224
- }
225
-
226
- return '';
227
- }
228
-
229
-
230
- /** @phpstan-impure */
231
- public function joinUntil(int ...$tokenType): string
232
- {
233
- $s = '';
234
- while (!in_array($this->tokens$this->indexLexer::TYPE_OFFSET, $tokenType, true)) {
235
- $s .= $this->tokens$this->index++Lexer::VALUE_OFFSET;
236
- }
237
- return $s;
238
- }
239
-
240
-
241
- public function next(): void
242
- {
243
- $this->index++;
244
- $this->skipIrrelevantTokens();
245
- }
246
-
247
-
248
- private function skipIrrelevantTokens(): void
249
- {
250
- if (!isset($this->tokens$this->index)) {
251
- return;
252
- }
253
-
254
- while (in_array($this->tokens$this->indexLexer::TYPE_OFFSET, $this->skippedTokenTypes, true)) {
255
- if (!isset($this->tokens$this->index + 1)) {
256
- break;
257
- }
258
- $this->index++;
259
- }
260
- }
261
-
262
-
263
- public function addEndOfLineToSkippedTokens(): void
264
- {
265
- $this->skippedTokenTypes = Lexer::TOKEN_HORIZONTAL_WS, Lexer::TOKEN_PHPDOC_EOL;
266
- }
267
-
268
-
269
- public function removeEndOfLineFromSkippedTokens(): void
270
- {
271
- $this->skippedTokenTypes = Lexer::TOKEN_HORIZONTAL_WS;
272
- }
273
-
274
- /** @phpstan-impure */
275
- public function forwardToTheEnd(): void
276
- {
277
- $lastToken = count($this->tokens) - 1;
278
- $this->index = $lastToken;
279
- }
280
-
281
-
282
- public function pushSavePoint(): void
283
- {
284
- $this->savePoints = $this->index;
285
- }
286
-
287
-
288
- public function dropSavePoint(): void
289
- {
290
- array_pop($this->savePoints);
291
- }
292
-
293
-
294
- public function rollback(): void
295
- {
296
- $index = array_pop($this->savePoints);
297
- assert($index !== null);
298
- $this->index = $index;
299
- }
300
-
301
-
302
- /**
303
- * @throws ParserException
304
- */
305
- private function throwError(int $expectedTokenType, ?string $expectedTokenValue = null): void
306
- {
307
- throw new ParserException(
308
- $this->currentTokenValue(),
309
- $this->currentTokenType(),
310
- $this->currentTokenOffset(),
311
- $expectedTokenType,
312
- $expectedTokenValue,
313
- $this->currentTokenLine(),
314
- );
315
- }
316
-
317
- /**
318
- * Check whether the position is directly preceded by a certain token type.
319
- *
320
- * During this check TOKEN_HORIZONTAL_WS and TOKEN_PHPDOC_EOL are skipped
321
- */
322
- public function hasTokenImmediatelyBefore(int $pos, int $expectedTokenType): bool
323
- {
324
- $tokens = $this->tokens;
325
- $pos--;
326
- for (; $pos >= 0; $pos--) {
327
- $token = $tokens$pos;
328
- $type = $tokenLexer::TYPE_OFFSET;
329
- if ($type === $expectedTokenType) {
330
- return true;
331
- }
332
- if (!in_array($type,
333
- Lexer::TOKEN_HORIZONTAL_WS,
334
- Lexer::TOKEN_PHPDOC_EOL,
335
- , true)) {
336
- break;
337
- }
338
- }
339
- return false;
340
- }
341
-
342
- /**
343
- * Check whether the position is directly followed by a certain token type.
344
- *
345
- * During this check TOKEN_HORIZONTAL_WS and TOKEN_PHPDOC_EOL are skipped
346
- */
347
- public function hasTokenImmediatelyAfter(int $pos, int $expectedTokenType): bool
348
- {
349
- $tokens = $this->tokens;
350
- $pos++;
351
- for ($c = count($tokens); $pos < $c; $pos++) {
352
- $token = $tokens$pos;
353
- $type = $tokenLexer::TYPE_OFFSET;
354
- if ($type === $expectedTokenType) {
355
- return true;
356
- }
357
- if (!in_array($type,
358
- Lexer::TOKEN_HORIZONTAL_WS,
359
- Lexer::TOKEN_PHPDOC_EOL,
360
- , true)) {
361
- break;
362
- }
363
- }
364
-
365
- return false;
366
- }
367
-
368
- public function getDetectedNewline(): ?string
369
- {
370
- return $this->newline;
371
- }
372
-
373
- /**
374
- * Whether the given position is immediately surrounded by parenthesis.
375
- */
376
- public function hasParentheses(int $startPos, int $endPos): bool
377
- {
378
- return $this->hasTokenImmediatelyBefore($startPos, Lexer::TOKEN_OPEN_PARENTHESES)
379
- && $this->hasTokenImmediatelyAfter($endPos, Lexer::TOKEN_CLOSE_PARENTHESES);
380
- }
381
-
382
-}
383
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php
Deleted
1064
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Parser;
5
-
6
-use LogicException;
7
-use PHPStan\PhpDocParser\Ast;
8
-use PHPStan\PhpDocParser\Ast\PhpDoc\TemplateTagValueNode;
9
-use PHPStan\PhpDocParser\Lexer\Lexer;
10
-use PHPStan\PhpDocParser\ParserConfig;
11
-use function in_array;
12
-use function str_replace;
13
-use function strlen;
14
-use function strpos;
15
-use function substr_compare;
16
-
17
-class TypeParser
18
-{
19
-
20
- private ParserConfig $config;
21
-
22
- private ConstExprParser $constExprParser;
23
-
24
- public function __construct(
25
- ParserConfig $config,
26
- ConstExprParser $constExprParser
27
- )
28
- {
29
- $this->config = $config;
30
- $this->constExprParser = $constExprParser;
31
- }
32
-
33
- /** @phpstan-impure */
34
- public function parse(TokenIterator $tokens): Ast\Type\TypeNode
35
- {
36
- $startLine = $tokens->currentTokenLine();
37
- $startIndex = $tokens->currentTokenIndex();
38
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_NULLABLE)) {
39
- $type = $this->parseNullable($tokens);
40
-
41
- } else {
42
- $type = $this->parseAtomic($tokens);
43
-
44
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_UNION)) {
45
- $type = $this->parseUnion($tokens, $type);
46
-
47
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_INTERSECTION)) {
48
- $type = $this->parseIntersection($tokens, $type);
49
- }
50
- }
51
-
52
- return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex);
53
- }
54
-
55
- /**
56
- * @internal
57
- * @template T of Ast\Node
58
- * @param T $type
59
- * @return T
60
- */
61
- public function enrichWithAttributes(TokenIterator $tokens, Ast\Node $type, int $startLine, int $startIndex): Ast\Node
62
- {
63
- if ($this->config->useLinesAttributes) {
64
- $type->setAttribute(Ast\Attribute::START_LINE, $startLine);
65
- $type->setAttribute(Ast\Attribute::END_LINE, $tokens->currentTokenLine());
66
- }
67
-
68
- if ($this->config->useIndexAttributes) {
69
- $type->setAttribute(Ast\Attribute::START_INDEX, $startIndex);
70
- $type->setAttribute(Ast\Attribute::END_INDEX, $tokens->endIndexOfLastRelevantToken());
71
- }
72
-
73
- return $type;
74
- }
75
-
76
- /** @phpstan-impure */
77
- private function subParse(TokenIterator $tokens): Ast\Type\TypeNode
78
- {
79
- $startLine = $tokens->currentTokenLine();
80
- $startIndex = $tokens->currentTokenIndex();
81
-
82
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_NULLABLE)) {
83
- $type = $this->parseNullable($tokens);
84
-
85
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_VARIABLE)) {
86
- $type = $this->parseConditionalForParameter($tokens, $tokens->currentTokenValue());
87
-
88
- } else {
89
- $type = $this->parseAtomic($tokens);
90
-
91
- if ($tokens->isCurrentTokenValue('is')) {
92
- $type = $this->parseConditional($tokens, $type);
93
- } else {
94
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
95
-
96
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_UNION)) {
97
- $type = $this->subParseUnion($tokens, $type);
98
-
99
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_INTERSECTION)) {
100
- $type = $this->subParseIntersection($tokens, $type);
101
- }
102
- }
103
- }
104
-
105
- return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex);
106
- }
107
-
108
-
109
- /** @phpstan-impure */
110
- private function parseAtomic(TokenIterator $tokens): Ast\Type\TypeNode
111
- {
112
- $startLine = $tokens->currentTokenLine();
113
- $startIndex = $tokens->currentTokenIndex();
114
-
115
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
116
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
117
- $type = $this->subParse($tokens);
118
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
119
-
120
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
121
-
122
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
123
- $type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
124
- }
125
-
126
- return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex);
127
- }
128
-
129
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_THIS_VARIABLE)) {
130
- $type = $this->enrichWithAttributes($tokens, new Ast\Type\ThisTypeNode(), $startLine, $startIndex);
131
-
132
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
133
- $type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
134
- }
135
-
136
- return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex);
137
- }
138
-
139
- $currentTokenValue = $tokens->currentTokenValue();
140
- $tokens->pushSavePoint(); // because of ConstFetchNode
141
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_IDENTIFIER)) {
142
- $type = $this->enrichWithAttributes($tokens, new Ast\Type\IdentifierTypeNode($currentTokenValue), $startLine, $startIndex);
143
-
144
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_COLON)) {
145
- $tokens->dropSavePoint(); // because of ConstFetchNode
146
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)) {
147
- $tokens->pushSavePoint();
148
-
149
- $isHtml = $this->isHtml($tokens);
150
- $tokens->rollback();
151
- if ($isHtml) {
152
- return $type;
153
- }
154
-
155
- $origType = $type;
156
- $type = $this->tryParseCallable($tokens, $type, true);
157
- if ($type === $origType) {
158
- $type = $this->parseGeneric($tokens, $type);
159
-
160
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
161
- $type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
162
- }
163
- }
164
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
165
- $type = $this->tryParseCallable($tokens, $type, false);
166
-
167
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
168
- $type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
169
-
170
- } elseif (in_array($type->name,
171
- Ast\Type\ArrayShapeNode::KIND_ARRAY,
172
- Ast\Type\ArrayShapeNode::KIND_LIST,
173
- Ast\Type\ArrayShapeNode::KIND_NON_EMPTY_ARRAY,
174
- Ast\Type\ArrayShapeNode::KIND_NON_EMPTY_LIST,
175
- 'object',
176
- , true) && $tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET) && !$tokens->isPrecededByHorizontalWhitespace()) {
177
- if ($type->name === 'object') {
178
- $type = $this->parseObjectShape($tokens);
179
- } else {
180
- $type = $this->parseArrayShape($tokens, $type, $type->name);
181
- }
182
-
183
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
184
- $type = $this->tryParseArrayOrOffsetAccess(
185
- $tokens,
186
- $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex),
187
- );
188
- }
189
- }
190
-
191
- return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex);
192
- } else {
193
- $tokens->rollback(); // because of ConstFetchNode
194
- }
195
- } else {
196
- $tokens->dropSavePoint(); // because of ConstFetchNode
197
- }
198
-
199
- $currentTokenValue = $tokens->currentTokenValue();
200
- $currentTokenType = $tokens->currentTokenType();
201
- $currentTokenOffset = $tokens->currentTokenOffset();
202
- $currentTokenLine = $tokens->currentTokenLine();
203
-
204
- try {
205
- $constExpr = $this->constExprParser->parse($tokens);
206
- if ($constExpr instanceof Ast\ConstExpr\ConstExprArrayNode) {
207
- throw new ParserException(
208
- $currentTokenValue,
209
- $currentTokenType,
210
- $currentTokenOffset,
211
- Lexer::TOKEN_IDENTIFIER,
212
- null,
213
- $currentTokenLine,
214
- );
215
- }
216
-
217
- $type = $this->enrichWithAttributes(
218
- $tokens,
219
- new Ast\Type\ConstTypeNode($constExpr),
220
- $startLine,
221
- $startIndex,
222
- );
223
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
224
- $type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
225
- }
226
-
227
- return $type;
228
- } catch (LogicException $e) {
229
- throw new ParserException(
230
- $currentTokenValue,
231
- $currentTokenType,
232
- $currentTokenOffset,
233
- Lexer::TOKEN_IDENTIFIER,
234
- null,
235
- $currentTokenLine,
236
- );
237
- }
238
- }
239
-
240
-
241
- /** @phpstan-impure */
242
- private function parseUnion(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode
243
- {
244
- $types = $type;
245
-
246
- while ($tokens->tryConsumeTokenType(Lexer::TOKEN_UNION)) {
247
- $types = $this->parseAtomic($tokens);
248
- }
249
-
250
- return new Ast\Type\UnionTypeNode($types);
251
- }
252
-
253
-
254
- /** @phpstan-impure */
255
- private function subParseUnion(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode
256
- {
257
- $types = $type;
258
-
259
- while ($tokens->tryConsumeTokenType(Lexer::TOKEN_UNION)) {
260
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
261
- $types = $this->parseAtomic($tokens);
262
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
263
- }
264
-
265
- return new Ast\Type\UnionTypeNode($types);
266
- }
267
-
268
-
269
- /** @phpstan-impure */
270
- private function parseIntersection(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode
271
- {
272
- $types = $type;
273
-
274
- while ($tokens->tryConsumeTokenType(Lexer::TOKEN_INTERSECTION)) {
275
- $types = $this->parseAtomic($tokens);
276
- }
277
-
278
- return new Ast\Type\IntersectionTypeNode($types);
279
- }
280
-
281
-
282
- /** @phpstan-impure */
283
- private function subParseIntersection(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode
284
- {
285
- $types = $type;
286
-
287
- while ($tokens->tryConsumeTokenType(Lexer::TOKEN_INTERSECTION)) {
288
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
289
- $types = $this->parseAtomic($tokens);
290
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
291
- }
292
-
293
- return new Ast\Type\IntersectionTypeNode($types);
294
- }
295
-
296
-
297
- /** @phpstan-impure */
298
- private function parseConditional(TokenIterator $tokens, Ast\Type\TypeNode $subjectType): Ast\Type\TypeNode
299
- {
300
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
301
-
302
- $negated = false;
303
- if ($tokens->isCurrentTokenValue('not')) {
304
- $negated = true;
305
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
306
- }
307
-
308
- $targetType = $this->parse($tokens);
309
-
310
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
311
- $tokens->consumeTokenType(Lexer::TOKEN_NULLABLE);
312
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
313
-
314
- $ifType = $this->parse($tokens);
315
-
316
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
317
- $tokens->consumeTokenType(Lexer::TOKEN_COLON);
318
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
319
-
320
- $elseType = $this->subParse($tokens);
321
-
322
- return new Ast\Type\ConditionalTypeNode($subjectType, $targetType, $ifType, $elseType, $negated);
323
- }
324
-
325
- /** @phpstan-impure */
326
- private function parseConditionalForParameter(TokenIterator $tokens, string $parameterName): Ast\Type\TypeNode
327
- {
328
- $tokens->consumeTokenType(Lexer::TOKEN_VARIABLE);
329
- $tokens->consumeTokenValue(Lexer::TOKEN_IDENTIFIER, 'is');
330
-
331
- $negated = false;
332
- if ($tokens->isCurrentTokenValue('not')) {
333
- $negated = true;
334
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
335
- }
336
-
337
- $targetType = $this->parse($tokens);
338
-
339
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
340
- $tokens->consumeTokenType(Lexer::TOKEN_NULLABLE);
341
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
342
-
343
- $ifType = $this->parse($tokens);
344
-
345
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
346
- $tokens->consumeTokenType(Lexer::TOKEN_COLON);
347
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
348
-
349
- $elseType = $this->subParse($tokens);
350
-
351
- return new Ast\Type\ConditionalTypeForParameterNode($parameterName, $targetType, $ifType, $elseType, $negated);
352
- }
353
-
354
-
355
- /** @phpstan-impure */
356
- private function parseNullable(TokenIterator $tokens): Ast\Type\TypeNode
357
- {
358
- $tokens->consumeTokenType(Lexer::TOKEN_NULLABLE);
359
-
360
- $type = $this->parseAtomic($tokens);
361
-
362
- return new Ast\Type\NullableTypeNode($type);
363
- }
364
-
365
- /** @phpstan-impure */
366
- public function isHtml(TokenIterator $tokens): bool
367
- {
368
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET);
369
-
370
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_IDENTIFIER)) {
371
- return false;
372
- }
373
-
374
- $htmlTagName = $tokens->currentTokenValue();
375
-
376
- $tokens->next();
377
-
378
- if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET)) {
379
- return false;
380
- }
381
-
382
- $endTag = '</' . $htmlTagName . '>';
383
- $endTagSearchOffset = - strlen($endTag);
384
-
385
- while (!$tokens->isCurrentTokenType(Lexer::TOKEN_END)) {
386
- if (
387
- (
388
- $tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)
389
- && strpos($tokens->currentTokenValue(), '/' . $htmlTagName . '>') !== false
390
- )
391
- || substr_compare($tokens->currentTokenValue(), $endTag, $endTagSearchOffset) === 0
392
- ) {
393
- return true;
394
- }
395
-
396
- $tokens->next();
397
- }
398
-
399
- return false;
400
- }
401
-
402
- /** @phpstan-impure */
403
- public function parseGeneric(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $baseType): Ast\Type\GenericTypeNode
404
- {
405
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET);
406
-
407
- $startLine = $baseType->getAttribute(Ast\Attribute::START_LINE);
408
- $startIndex = $baseType->getAttribute(Ast\Attribute::START_INDEX);
409
- $genericTypes = ;
410
- $variances = ;
411
-
412
- $isFirst = true;
413
- while ($isFirst || $tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) {
414
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
415
-
416
- // trailing comma case
417
- if (!$isFirst && $tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET)) {
418
- break;
419
- }
420
- $isFirst = false;
421
-
422
- $genericTypes, $variances = $this->parseGenericTypeArgument($tokens);
423
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
424
- }
425
-
426
- $type = new Ast\Type\GenericTypeNode($baseType, $genericTypes, $variances);
427
- if ($startLine !== null && $startIndex !== null) {
428
- $type = $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex);
429
- }
430
-
431
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET);
432
-
433
- return $type;
434
- }
435
-
436
-
437
- /**
438
- * @phpstan-impure
439
- * @return array{Ast\Type\TypeNode, Ast\Type\GenericTypeNode::VARIANCE_*}
440
- */
441
- public function parseGenericTypeArgument(TokenIterator $tokens): array
442
- {
443
- $startLine = $tokens->currentTokenLine();
444
- $startIndex = $tokens->currentTokenIndex();
445
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_WILDCARD)) {
446
- return
447
- $this->enrichWithAttributes($tokens, new Ast\Type\IdentifierTypeNode('mixed'), $startLine, $startIndex),
448
- Ast\Type\GenericTypeNode::VARIANCE_BIVARIANT,
449
- ;
450
- }
451
-
452
- if ($tokens->tryConsumeTokenValue('contravariant')) {
453
- $variance = Ast\Type\GenericTypeNode::VARIANCE_CONTRAVARIANT;
454
- } elseif ($tokens->tryConsumeTokenValue('covariant')) {
455
- $variance = Ast\Type\GenericTypeNode::VARIANCE_COVARIANT;
456
- } else {
457
- $variance = Ast\Type\GenericTypeNode::VARIANCE_INVARIANT;
458
- }
459
-
460
- $type = $this->parse($tokens);
461
- return $type, $variance;
462
- }
463
-
464
- /**
465
- * @throws ParserException
466
- * @param ?callable(TokenIterator): string $parseDescription
467
- */
468
- public function parseTemplateTagValue(
469
- TokenIterator $tokens,
470
- ?callable $parseDescription = null
471
- ): TemplateTagValueNode
472
- {
473
- $name = $tokens->currentTokenValue();
474
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
475
-
476
- $upperBound = $lowerBound = null;
477
-
478
- if ($tokens->tryConsumeTokenValue('of') || $tokens->tryConsumeTokenValue('as')) {
479
- $upperBound = $this->parse($tokens);
480
- }
481
-
482
- if ($tokens->tryConsumeTokenValue('super')) {
483
- $lowerBound = $this->parse($tokens);
484
- }
485
-
486
- if ($tokens->tryConsumeTokenValue('=')) {
487
- $default = $this->parse($tokens);
488
- } else {
489
- $default = null;
490
- }
491
-
492
- if ($parseDescription !== null) {
493
- $description = $parseDescription($tokens);
494
- } else {
495
- $description = '';
496
- }
497
-
498
- if ($name === '') {
499
- throw new LogicException('Template tag name cannot be empty.');
500
- }
501
-
502
- return new Ast\PhpDoc\TemplateTagValueNode($name, $upperBound, $description, $default, $lowerBound);
503
- }
504
-
505
-
506
- /** @phpstan-impure */
507
- private function parseCallable(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $identifier, bool $hasTemplate): Ast\Type\TypeNode
508
- {
509
- $templates = $hasTemplate
510
- ? $this->parseCallableTemplates($tokens)
511
- : ;
512
-
513
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES);
514
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
515
-
516
- $parameters = ;
517
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PARENTHESES)) {
518
- $parameters = $this->parseCallableParameter($tokens);
519
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
520
- while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) {
521
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
522
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PARENTHESES)) {
523
- break;
524
- }
525
- $parameters = $this->parseCallableParameter($tokens);
526
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
527
- }
528
- }
529
-
530
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
531
- $tokens->consumeTokenType(Lexer::TOKEN_COLON);
532
-
533
- $startLine = $tokens->currentTokenLine();
534
- $startIndex = $tokens->currentTokenIndex();
535
- $returnType = $this->enrichWithAttributes($tokens, $this->parseCallableReturnType($tokens), $startLine, $startIndex);
536
-
537
- return new Ast\Type\CallableTypeNode($identifier, $parameters, $returnType, $templates);
538
- }
539
-
540
-
541
- /**
542
- * @return Ast\PhpDoc\TemplateTagValueNode
543
- *
544
- * @phpstan-impure
545
- */
546
- private function parseCallableTemplates(TokenIterator $tokens): array
547
- {
548
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET);
549
-
550
- $templates = ;
551
-
552
- $isFirst = true;
553
- while ($isFirst || $tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) {
554
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
555
-
556
- // trailing comma case
557
- if (!$isFirst && $tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET)) {
558
- break;
559
- }
560
- $isFirst = false;
561
-
562
- $templates = $this->parseCallableTemplateArgument($tokens);
563
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
564
- }
565
-
566
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET);
567
-
568
- return $templates;
569
- }
570
-
571
-
572
- private function parseCallableTemplateArgument(TokenIterator $tokens): Ast\PhpDoc\TemplateTagValueNode
573
- {
574
- $startLine = $tokens->currentTokenLine();
575
- $startIndex = $tokens->currentTokenIndex();
576
-
577
- return $this->enrichWithAttributes(
578
- $tokens,
579
- $this->parseTemplateTagValue($tokens),
580
- $startLine,
581
- $startIndex,
582
- );
583
- }
584
-
585
-
586
- /** @phpstan-impure */
587
- private function parseCallableParameter(TokenIterator $tokens): Ast\Type\CallableTypeParameterNode
588
- {
589
- $startLine = $tokens->currentTokenLine();
590
- $startIndex = $tokens->currentTokenIndex();
591
- $type = $this->parse($tokens);
592
- $isReference = $tokens->tryConsumeTokenType(Lexer::TOKEN_REFERENCE);
593
- $isVariadic = $tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC);
594
-
595
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_VARIABLE)) {
596
- $parameterName = $tokens->currentTokenValue();
597
- $tokens->consumeTokenType(Lexer::TOKEN_VARIABLE);
598
-
599
- } else {
600
- $parameterName = '';
601
- }
602
-
603
- $isOptional = $tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL);
604
- return $this->enrichWithAttributes(
605
- $tokens,
606
- new Ast\Type\CallableTypeParameterNode($type, $isReference, $isVariadic, $parameterName, $isOptional),
607
- $startLine,
608
- $startIndex,
609
- );
610
- }
611
-
612
-
613
- /** @phpstan-impure */
614
- private function parseCallableReturnType(TokenIterator $tokens): Ast\Type\TypeNode
615
- {
616
- $startLine = $tokens->currentTokenLine();
617
- $startIndex = $tokens->currentTokenIndex();
618
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_NULLABLE)) {
619
- return $this->parseNullable($tokens);
620
-
621
- } elseif ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
622
- $type = $this->subParse($tokens);
623
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
624
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
625
- $type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
626
- }
627
-
628
- return $type;
629
- } elseif ($tokens->tryConsumeTokenType(Lexer::TOKEN_THIS_VARIABLE)) {
630
- $type = new Ast\Type\ThisTypeNode();
631
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
632
- $type = $this->tryParseArrayOrOffsetAccess($tokens, $this->enrichWithAttributes(
633
- $tokens,
634
- $type,
635
- $startLine,
636
- $startIndex,
637
- ));
638
- }
639
-
640
- return $type;
641
- } else {
642
- $currentTokenValue = $tokens->currentTokenValue();
643
- $tokens->pushSavePoint(); // because of ConstFetchNode
644
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_IDENTIFIER)) {
645
- $type = new Ast\Type\IdentifierTypeNode($currentTokenValue);
646
-
647
- if (!$tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_COLON)) {
648
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)) {
649
- $type = $this->parseGeneric(
650
- $tokens,
651
- $this->enrichWithAttributes(
652
- $tokens,
653
- $type,
654
- $startLine,
655
- $startIndex,
656
- ),
657
- );
658
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
659
- $type = $this->tryParseArrayOrOffsetAccess($tokens, $this->enrichWithAttributes(
660
- $tokens,
661
- $type,
662
- $startLine,
663
- $startIndex,
664
- ));
665
- }
666
-
667
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
668
- $type = $this->tryParseArrayOrOffsetAccess($tokens, $this->enrichWithAttributes(
669
- $tokens,
670
- $type,
671
- $startLine,
672
- $startIndex,
673
- ));
674
-
675
- } elseif (in_array($type->name,
676
- Ast\Type\ArrayShapeNode::KIND_ARRAY,
677
- Ast\Type\ArrayShapeNode::KIND_LIST,
678
- Ast\Type\ArrayShapeNode::KIND_NON_EMPTY_ARRAY,
679
- Ast\Type\ArrayShapeNode::KIND_NON_EMPTY_LIST,
680
- 'object',
681
- , true) && $tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET) && !$tokens->isPrecededByHorizontalWhitespace()) {
682
- if ($type->name === 'object') {
683
- $type = $this->parseObjectShape($tokens);
684
- } else {
685
- $type = $this->parseArrayShape($tokens, $this->enrichWithAttributes(
686
- $tokens,
687
- $type,
688
- $startLine,
689
- $startIndex,
690
- ), $type->name);
691
- }
692
-
693
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
694
- $type = $this->tryParseArrayOrOffsetAccess($tokens, $this->enrichWithAttributes(
695
- $tokens,
696
- $type,
697
- $startLine,
698
- $startIndex,
699
- ));
700
- }
701
- }
702
-
703
- return $type;
704
- } else {
705
- $tokens->rollback(); // because of ConstFetchNode
706
- }
707
- } else {
708
- $tokens->dropSavePoint(); // because of ConstFetchNode
709
- }
710
- }
711
-
712
- $currentTokenValue = $tokens->currentTokenValue();
713
- $currentTokenType = $tokens->currentTokenType();
714
- $currentTokenOffset = $tokens->currentTokenOffset();
715
- $currentTokenLine = $tokens->currentTokenLine();
716
-
717
- try {
718
- $constExpr = $this->constExprParser->parse($tokens);
719
- if ($constExpr instanceof Ast\ConstExpr\ConstExprArrayNode) {
720
- throw new ParserException(
721
- $currentTokenValue,
722
- $currentTokenType,
723
- $currentTokenOffset,
724
- Lexer::TOKEN_IDENTIFIER,
725
- null,
726
- $currentTokenLine,
727
- );
728
- }
729
-
730
- $type = $this->enrichWithAttributes(
731
- $tokens,
732
- new Ast\Type\ConstTypeNode($constExpr),
733
- $startLine,
734
- $startIndex,
735
- );
736
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
737
- $type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
738
- }
739
-
740
- return $type;
741
- } catch (LogicException $e) {
742
- throw new ParserException(
743
- $currentTokenValue,
744
- $currentTokenType,
745
- $currentTokenOffset,
746
- Lexer::TOKEN_IDENTIFIER,
747
- null,
748
- $currentTokenLine,
749
- );
750
- }
751
- }
752
-
753
-
754
- /** @phpstan-impure */
755
- private function tryParseCallable(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $identifier, bool $hasTemplate): Ast\Type\TypeNode
756
- {
757
- try {
758
- $tokens->pushSavePoint();
759
- $type = $this->parseCallable($tokens, $identifier, $hasTemplate);
760
- $tokens->dropSavePoint();
761
-
762
- } catch (ParserException $e) {
763
- $tokens->rollback();
764
- $type = $identifier;
765
- }
766
-
767
- return $type;
768
- }
769
-
770
-
771
- /** @phpstan-impure */
772
- private function tryParseArrayOrOffsetAccess(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode
773
- {
774
- $startLine = $type->getAttribute(Ast\Attribute::START_LINE);
775
- $startIndex = $type->getAttribute(Ast\Attribute::START_INDEX);
776
- try {
777
- while ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
778
- $tokens->pushSavePoint();
779
-
780
- $canBeOffsetAccessType = !$tokens->isPrecededByHorizontalWhitespace();
781
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET);
782
-
783
- if ($canBeOffsetAccessType && !$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_SQUARE_BRACKET)) {
784
- $offset = $this->parse($tokens);
785
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_SQUARE_BRACKET);
786
- $tokens->dropSavePoint();
787
- $type = new Ast\Type\OffsetAccessTypeNode($type, $offset);
788
-
789
- if ($startLine !== null && $startIndex !== null) {
790
- $type = $this->enrichWithAttributes(
791
- $tokens,
792
- $type,
793
- $startLine,
794
- $startIndex,
795
- );
796
- }
797
- } else {
798
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_SQUARE_BRACKET);
799
- $tokens->dropSavePoint();
800
- $type = new Ast\Type\ArrayTypeNode($type);
801
-
802
- if ($startLine !== null && $startIndex !== null) {
803
- $type = $this->enrichWithAttributes(
804
- $tokens,
805
- $type,
806
- $startLine,
807
- $startIndex,
808
- );
809
- }
810
- }
811
- }
812
-
813
- } catch (ParserException $e) {
814
- $tokens->rollback();
815
- }
816
-
817
- return $type;
818
- }
819
-
820
-
821
- /**
822
- * @phpstan-impure
823
- * @param Ast\Type\ArrayShapeNode::KIND_* $kind
824
- */
825
- private function parseArrayShape(TokenIterator $tokens, Ast\Type\TypeNode $type, string $kind): Ast\Type\ArrayShapeNode
826
- {
827
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET);
828
-
829
- $items = ;
830
- $sealed = true;
831
- $unsealedType = null;
832
-
833
- do {
834
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
835
-
836
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET)) {
837
- return Ast\Type\ArrayShapeNode::createSealed($items, $kind);
838
- }
839
-
840
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC)) {
841
- $sealed = false;
842
-
843
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
844
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)) {
845
- if ($kind === Ast\Type\ArrayShapeNode::KIND_ARRAY) {
846
- $unsealedType = $this->parseArrayShapeUnsealedType($tokens);
847
- } else {
848
- $unsealedType = $this->parseListShapeUnsealedType($tokens);
849
- }
850
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
851
- }
852
-
853
- $tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA);
854
- break;
855
- }
856
-
857
- $items = $this->parseArrayShapeItem($tokens);
858
-
859
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
860
- } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA));
861
-
862
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
863
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET);
864
-
865
- if ($sealed) {
866
- return Ast\Type\ArrayShapeNode::createSealed($items, $kind);
867
- }
868
-
869
- return Ast\Type\ArrayShapeNode::createUnsealed($items, $unsealedType, $kind);
870
- }
871
-
872
-
873
- /** @phpstan-impure */
874
- private function parseArrayShapeItem(TokenIterator $tokens): Ast\Type\ArrayShapeItemNode
875
- {
876
- $startLine = $tokens->currentTokenLine();
877
- $startIndex = $tokens->currentTokenIndex();
878
- try {
879
- $tokens->pushSavePoint();
880
- $key = $this->parseArrayShapeKey($tokens);
881
- $optional = $tokens->tryConsumeTokenType(Lexer::TOKEN_NULLABLE);
882
- $tokens->consumeTokenType(Lexer::TOKEN_COLON);
883
- $value = $this->parse($tokens);
884
- $tokens->dropSavePoint();
885
-
886
- return $this->enrichWithAttributes(
887
- $tokens,
888
- new Ast\Type\ArrayShapeItemNode($key, $optional, $value),
889
- $startLine,
890
- $startIndex,
891
- );
892
- } catch (ParserException $e) {
893
- $tokens->rollback();
894
- $value = $this->parse($tokens);
895
-
896
- return $this->enrichWithAttributes(
897
- $tokens,
898
- new Ast\Type\ArrayShapeItemNode(null, false, $value),
899
- $startLine,
900
- $startIndex,
901
- );
902
- }
903
- }
904
-
905
- /**
906
- * @phpstan-impure
907
- * @return Ast\ConstExpr\ConstExprIntegerNode|Ast\ConstExpr\ConstExprStringNode|Ast\Type\IdentifierTypeNode
908
- */
909
- private function parseArrayShapeKey(TokenIterator $tokens)
910
- {
911
- $startIndex = $tokens->currentTokenIndex();
912
- $startLine = $tokens->currentTokenLine();
913
-
914
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_INTEGER)) {
915
- $key = new Ast\ConstExpr\ConstExprIntegerNode(str_replace('_', '', $tokens->currentTokenValue()));
916
- $tokens->next();
917
-
918
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING)) {
919
- $key = new Ast\ConstExpr\ConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\ConstExprStringNode::SINGLE_QUOTED);
920
- $tokens->next();
921
-
922
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_QUOTED_STRING)) {
923
- $key = new Ast\ConstExpr\ConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\ConstExprStringNode::DOUBLE_QUOTED);
924
-
925
- $tokens->next();
926
-
927
- } else {
928
- $key = new Ast\Type\IdentifierTypeNode($tokens->currentTokenValue());
929
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
930
- }
931
-
932
- return $this->enrichWithAttributes(
933
- $tokens,
934
- $key,
935
- $startLine,
936
- $startIndex,
937
- );
938
- }
939
-
940
- /**
941
- * @phpstan-impure
942
- */
943
- private function parseArrayShapeUnsealedType(TokenIterator $tokens): Ast\Type\ArrayShapeUnsealedTypeNode
944
- {
945
- $startLine = $tokens->currentTokenLine();
946
- $startIndex = $tokens->currentTokenIndex();
947
-
948
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET);
949
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
950
-
951
- $valueType = $this->parse($tokens);
952
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
953
-
954
- $keyType = null;
955
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) {
956
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
957
-
958
- $keyType = $valueType;
959
- $valueType = $this->parse($tokens);
960
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
961
- }
962
-
963
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET);
964
-
965
- return $this->enrichWithAttributes(
966
- $tokens,
967
- new Ast\Type\ArrayShapeUnsealedTypeNode($valueType, $keyType),
968
- $startLine,
969
- $startIndex,
970
- );
971
- }
972
-
973
- /**
974
- * @phpstan-impure
975
- */
976
- private function parseListShapeUnsealedType(TokenIterator $tokens): Ast\Type\ArrayShapeUnsealedTypeNode
977
- {
978
- $startLine = $tokens->currentTokenLine();
979
- $startIndex = $tokens->currentTokenIndex();
980
-
981
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET);
982
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
983
-
984
- $valueType = $this->parse($tokens);
985
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
986
-
987
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET);
988
-
989
- return $this->enrichWithAttributes(
990
- $tokens,
991
- new Ast\Type\ArrayShapeUnsealedTypeNode($valueType, null),
992
- $startLine,
993
- $startIndex,
994
- );
995
- }
996
-
997
- /**
998
- * @phpstan-impure
999
- */
1000
- private function parseObjectShape(TokenIterator $tokens): Ast\Type\ObjectShapeNode
1001
- {
1002
- $tokens->consumeTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET);
1003
-
1004
- $items = ;
1005
-
1006
- do {
1007
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
1008
-
1009
- if ($tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET)) {
1010
- return new Ast\Type\ObjectShapeNode($items);
1011
- }
1012
-
1013
- $items = $this->parseObjectShapeItem($tokens);
1014
-
1015
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
1016
- } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA));
1017
-
1018
- $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
1019
- $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET);
1020
-
1021
- return new Ast\Type\ObjectShapeNode($items);
1022
- }
1023
-
1024
- /** @phpstan-impure */
1025
- private function parseObjectShapeItem(TokenIterator $tokens): Ast\Type\ObjectShapeItemNode
1026
- {
1027
- $startLine = $tokens->currentTokenLine();
1028
- $startIndex = $tokens->currentTokenIndex();
1029
-
1030
- $key = $this->parseObjectShapeKey($tokens);
1031
- $optional = $tokens->tryConsumeTokenType(Lexer::TOKEN_NULLABLE);
1032
- $tokens->consumeTokenType(Lexer::TOKEN_COLON);
1033
- $value = $this->parse($tokens);
1034
-
1035
- return $this->enrichWithAttributes($tokens, new Ast\Type\ObjectShapeItemNode($key, $optional, $value), $startLine, $startIndex);
1036
- }
1037
-
1038
- /**
1039
- * @phpstan-impure
1040
- * @return Ast\ConstExpr\ConstExprStringNode|Ast\Type\IdentifierTypeNode
1041
- */
1042
- private function parseObjectShapeKey(TokenIterator $tokens)
1043
- {
1044
- $startLine = $tokens->currentTokenLine();
1045
- $startIndex = $tokens->currentTokenIndex();
1046
-
1047
- if ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING)) {
1048
- $key = new Ast\ConstExpr\ConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\ConstExprStringNode::SINGLE_QUOTED);
1049
- $tokens->next();
1050
-
1051
- } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_QUOTED_STRING)) {
1052
- $key = new Ast\ConstExpr\ConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\ConstExprStringNode::DOUBLE_QUOTED);
1053
- $tokens->next();
1054
-
1055
- } else {
1056
- $key = new Ast\Type\IdentifierTypeNode($tokens->currentTokenValue());
1057
- $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
1058
- }
1059
-
1060
- return $this->enrichWithAttributes($tokens, $key, $startLine, $startIndex);
1061
- }
1062
-
1063
-}
1064
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/ParserConfig.php
Deleted
23
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser;
5
-
6
-class ParserConfig
7
-{
8
-
9
- public bool $useLinesAttributes;
10
-
11
- public bool $useIndexAttributes;
12
-
13
- /**
14
- * @param array{lines?: bool, indexes?: bool} $usedAttributes
15
- */
16
- public function __construct(array $usedAttributes)
17
- {
18
- $this->useLinesAttributes = $usedAttributes'lines' ?? false;
19
- $this->useIndexAttributes = $usedAttributes'indexes' ?? false;
20
- }
21
-
22
-}
23
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Printer
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Printer/DiffElem.php
Deleted
46
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Printer;
5
-
6
-/**
7
- * Inspired by https://github.com/nikic/PHP-Parser/tree/36a6dcd04e7b0285e8f0868f44bd4927802f7df1
8
- *
9
- * Copyright (c) 2011, Nikita Popov
10
- * All rights reserved.
11
- *
12
- * Implements the Myers diff algorithm.
13
- *
14
- * @internal
15
- */
16
-class DiffElem
17
-{
18
-
19
- public const TYPE_KEEP = 0;
20
- public const TYPE_REMOVE = 1;
21
- public const TYPE_ADD = 2;
22
- public const TYPE_REPLACE = 3;
23
-
24
- /** @var self::TYPE_* */
25
- public $type;
26
-
27
- /** @var mixed Is null for add operations */
28
- public $old;
29
-
30
- /** @var mixed Is null for remove operations */
31
- public $new;
32
-
33
- /**
34
- * @param self::TYPE_* $type
35
- * @param mixed $old Is null for add operations
36
- * @param mixed $new Is null for remove operations
37
- */
38
- public function __construct(int $type, $old, $new)
39
- {
40
- $this->type = $type;
41
- $this->old = $old;
42
- $this->new = $new;
43
- }
44
-
45
-}
46
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Printer/Differ.php
Deleted
198
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Printer;
5
-
6
-use Exception;
7
-use function array_reverse;
8
-use function count;
9
-
10
-/**
11
- * Inspired by https://github.com/nikic/PHP-Parser/tree/36a6dcd04e7b0285e8f0868f44bd4927802f7df1
12
- *
13
- * Copyright (c) 2011, Nikita Popov
14
- * All rights reserved.
15
- *
16
- * Implements the Myers diff algorithm.
17
- *
18
- * Myers, Eugene W. "An O (ND) difference algorithm and its variations."
19
- * Algorithmica 1.1 (1986): 251-266.
20
- *
21
- * @template T
22
- * @internal
23
- */
24
-class Differ
25
-{
26
-
27
- /** @var callable(T, T): bool */
28
- private $isEqual;
29
-
30
- /**
31
- * Create differ over the given equality relation.
32
- *
33
- * @param callable(T, T): bool $isEqual Equality relation
34
- */
35
- public function __construct(callable $isEqual)
36
- {
37
- $this->isEqual = $isEqual;
38
- }
39
-
40
- /**
41
- * Calculate diff (edit script) from $old to $new.
42
- *
43
- * @param T $old Original array
44
- * @param T $new New array
45
- *
46
- * @return DiffElem Diff (edit script)
47
- */
48
- public function diff(array $old, array $new): array
49
- {
50
- $trace, $x, $y = $this->calculateTrace($old, $new);
51
- return $this->extractDiff($trace, $x, $y, $old, $new);
52
- }
53
-
54
- /**
55
- * Calculate diff, including "replace" operations.
56
- *
57
- * If a sequence of remove operations is followed by the same number of add operations, these
58
- * will be coalesced into replace operations.
59
- *
60
- * @param T $old Original array
61
- * @param T $new New array
62
- *
63
- * @return DiffElem Diff (edit script), including replace operations
64
- */
65
- public function diffWithReplacements(array $old, array $new): array
66
- {
67
- return $this->coalesceReplacements($this->diff($old, $new));
68
- }
69
-
70
- /**
71
- * @param T $old
72
- * @param T $new
73
- * @return array{array<int, array<int, int>>, int, int}
74
- */
75
- private function calculateTrace(array $old, array $new): array
76
- {
77
- $n = count($old);
78
- $m = count($new);
79
- $max = $n + $m;
80
- $v = 1 => 0;
81
- $trace = ;
82
- for ($d = 0; $d <= $max; $d++) {
83
- $trace = $v;
84
- for ($k = -$d; $k <= $d; $k += 2) {
85
- if ($k === -$d || ($k !== $d && $v$k - 1 < $v$k + 1)) {
86
- $x = $v$k + 1;
87
- } else {
88
- $x = $v$k - 1 + 1;
89
- }
90
-
91
- $y = $x - $k;
92
- while ($x < $n && $y < $m && ($this->isEqual)($old$x, $new$y)) {
93
- $x++;
94
- $y++;
95
- }
96
-
97
- $v$k = $x;
98
- if ($x >= $n && $y >= $m) {
99
- return $trace, $x, $y;
100
- }
101
- }
102
- }
103
- throw new Exception('Should not happen');
104
- }
105
-
106
- /**
107
- * @param array<int, array<int, int>> $trace
108
- * @param T $old
109
- * @param T $new
110
- * @return DiffElem
111
- */
112
- private function extractDiff(array $trace, int $x, int $y, array $old, array $new): array
113
- {
114
- $result = ;
115
- for ($d = count($trace) - 1; $d >= 0; $d--) {
116
- $v = $trace$d;
117
- $k = $x - $y;
118
-
119
- if ($k === -$d || ($k !== $d && $v$k - 1 < $v$k + 1)) {
120
- $prevK = $k + 1;
121
- } else {
122
- $prevK = $k - 1;
123
- }
124
-
125
- $prevX = $v$prevK;
126
- $prevY = $prevX - $prevK;
127
-
128
- while ($x > $prevX && $y > $prevY) {
129
- $result = new DiffElem(DiffElem::TYPE_KEEP, $old$x - 1, $new$y - 1);
130
- $x--;
131
- $y--;
132
- }
133
-
134
- if ($d === 0) {
135
- break;
136
- }
137
-
138
- while ($x > $prevX) {
139
- $result = new DiffElem(DiffElem::TYPE_REMOVE, $old$x - 1, null);
140
- $x--;
141
- }
142
-
143
- while ($y > $prevY) {
144
- $result = new DiffElem(DiffElem::TYPE_ADD, null, $new$y - 1);
145
- $y--;
146
- }
147
- }
148
- return array_reverse($result);
149
- }
150
-
151
- /**
152
- * Coalesce equal-length sequences of remove+add into a replace operation.
153
- *
154
- * @param DiffElem $diff
155
- * @return DiffElem
156
- */
157
- private function coalesceReplacements(array $diff): array
158
- {
159
- $newDiff = ;
160
- $c = count($diff);
161
- for ($i = 0; $i < $c; $i++) {
162
- $diffType = $diff$i->type;
163
- if ($diffType !== DiffElem::TYPE_REMOVE) {
164
- $newDiff = $diff$i;
165
- continue;
166
- }
167
-
168
- $j = $i;
169
- while ($j < $c && $diff$j->type === DiffElem::TYPE_REMOVE) {
170
- $j++;
171
- }
172
-
173
- $k = $j;
174
- while ($k < $c && $diff$k->type === DiffElem::TYPE_ADD) {
175
- $k++;
176
- }
177
-
178
- if ($j - $i === $k - $j) {
179
- $len = $j - $i;
180
- for ($n = 0; $n < $len; $n++) {
181
- $newDiff = new DiffElem(
182
- DiffElem::TYPE_REPLACE,
183
- $diff$i + $n->old,
184
- $diff$j + $n->new,
185
- );
186
- }
187
- } else {
188
- for (; $i < $k; $i++) {
189
- $newDiff = $diff$i;
190
- }
191
- }
192
- $i = $k - 1;
193
- }
194
- return $newDiff;
195
- }
196
-
197
-}
198
roundcubemail-1.6.tar.gz/vendor/phpstan/phpdoc-parser/src/Printer/Printer.php
Deleted
868
1
2
-<?php declare(strict_types = 1);
3
-
4
-namespace PHPStan\PhpDocParser\Printer;
5
-
6
-use LogicException;
7
-use PHPStan\PhpDocParser\Ast\Attribute;
8
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprArrayNode;
9
-use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprNode;
10
-use PHPStan\PhpDocParser\Ast\Node;
11
-use PHPStan\PhpDocParser\Ast\PhpDoc\AssertTagMethodValueNode;
12
-use PHPStan\PhpDocParser\Ast\PhpDoc\AssertTagPropertyValueNode;
13
-use PHPStan\PhpDocParser\Ast\PhpDoc\AssertTagValueNode;
14
-use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine\DoctrineAnnotation;
15
-use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine\DoctrineArgument;
16
-use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine\DoctrineArray;
17
-use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine\DoctrineArrayItem;
18
-use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine\DoctrineTagValueNode;
19
-use PHPStan\PhpDocParser\Ast\PhpDoc\ExtendsTagValueNode;
20
-use PHPStan\PhpDocParser\Ast\PhpDoc\ImplementsTagValueNode;
21
-use PHPStan\PhpDocParser\Ast\PhpDoc\MethodTagValueNode;
22
-use PHPStan\PhpDocParser\Ast\PhpDoc\MethodTagValueParameterNode;
23
-use PHPStan\PhpDocParser\Ast\PhpDoc\MixinTagValueNode;
24
-use PHPStan\PhpDocParser\Ast\PhpDoc\ParamClosureThisTagValueNode;
25
-use PHPStan\PhpDocParser\Ast\PhpDoc\ParamImmediatelyInvokedCallableTagValueNode;
26
-use PHPStan\PhpDocParser\Ast\PhpDoc\ParamLaterInvokedCallableTagValueNode;
27
-use PHPStan\PhpDocParser\Ast\PhpDoc\ParamOutTagValueNode;
28
-use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode;
29
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocChildNode;
30
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode;
31
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
32
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagValueNode;
33
-use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTextNode;
34
-use PHPStan\PhpDocParser\Ast\PhpDoc\PropertyTagValueNode;
35
-use PHPStan\PhpDocParser\Ast\PhpDoc\PureUnlessCallableIsImpureTagValueNode;
36
-use PHPStan\PhpDocParser\Ast\PhpDoc\RequireExtendsTagValueNode;
37
-use PHPStan\PhpDocParser\Ast\PhpDoc\RequireImplementsTagValueNode;
38
-use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode;
39
-use PHPStan\PhpDocParser\Ast\PhpDoc\SelfOutTagValueNode;
40
-use PHPStan\PhpDocParser\Ast\PhpDoc\TemplateTagValueNode;
41
-use PHPStan\PhpDocParser\Ast\PhpDoc\ThrowsTagValueNode;
42
-use PHPStan\PhpDocParser\Ast\PhpDoc\TypeAliasImportTagValueNode;
43
-use PHPStan\PhpDocParser\Ast\PhpDoc\TypeAliasTagValueNode;
44
-use PHPStan\PhpDocParser\Ast\PhpDoc\UsesTagValueNode;
45
-use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode;
46
-use PHPStan\PhpDocParser\Ast\Type\ArrayShapeItemNode;
47
-use PHPStan\PhpDocParser\Ast\Type\ArrayShapeNode;
48
-use PHPStan\PhpDocParser\Ast\Type\ArrayShapeUnsealedTypeNode;
49
-use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode;
50
-use PHPStan\PhpDocParser\Ast\Type\CallableTypeNode;
51
-use PHPStan\PhpDocParser\Ast\Type\CallableTypeParameterNode;
52
-use PHPStan\PhpDocParser\Ast\Type\ConditionalTypeForParameterNode;
53
-use PHPStan\PhpDocParser\Ast\Type\ConditionalTypeNode;
54
-use PHPStan\PhpDocParser\Ast\Type\ConstTypeNode;
55
-use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
56
-use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
57
-use PHPStan\PhpDocParser\Ast\Type\IntersectionTypeNode;
58
-use PHPStan\PhpDocParser\Ast\Type\InvalidTypeNode;
59
-use PHPStan\PhpDocParser\Ast\Type\NullableTypeNode;
60
-use PHPStan\PhpDocParser\Ast\Type\ObjectShapeItemNode;
61
-use PHPStan\PhpDocParser\Ast\Type\ObjectShapeNode;
62
-use PHPStan\PhpDocParser\Ast\Type\OffsetAccessTypeNode;
63
-use PHPStan\PhpDocParser\Ast\Type\ThisTypeNode;
64
-use PHPStan\PhpDocParser\Ast\Type\TypeNode;
65
-use PHPStan\PhpDocParser\Ast\Type\UnionTypeNode;
66
-use PHPStan\PhpDocParser\Lexer\Lexer;
67
-use PHPStan\PhpDocParser\Parser\TokenIterator;
68
-use function array_keys;
69
-use function array_map;
70
-use function count;
71
-use function get_class;
72
-use function get_object_vars;
73
-use function implode;
74
-use function in_array;
75
-use function is_array;
76
-use function preg_match_all;
77
-use function sprintf;
78
-use function strlen;
79
-use function strpos;
80
-use function trim;
81
-use const PREG_SET_ORDER;
82
-
83
-/**
84
- * Inspired by https://github.com/nikic/PHP-Parser/tree/36a6dcd04e7b0285e8f0868f44bd4927802f7df1
85
- *
86
- * Copyright (c) 2011, Nikita Popov
87
- * All rights reserved.
88
- */
89
-final class Printer
90
-{
91
-
92
- /** @var Differ<Node> */
93
- private Differ $differ;
94
-
95
- /**
96
- * Map From "{$class}->{$subNode}" to string that should be inserted
97
- * between elements of this list subnode
98
- *
99
- * @var array<string, string>
100
- */
101
- private array $listInsertionMap =
102
- PhpDocNode::class . '->children' => "\n * ",
103
- UnionTypeNode::class . '->types' => '|',
104
- IntersectionTypeNode::class . '->types' => '&',
105
- ArrayShapeNode::class . '->items' => ', ',
106
- ObjectShapeNode::class . '->items' => ', ',
107
- CallableTypeNode::class . '->parameters' => ', ',
108
- CallableTypeNode::class . '->templateTypes' => ', ',
109
- GenericTypeNode::class . '->genericTypes' => ', ',
110
- ConstExprArrayNode::class . '->items' => ', ',
111
- MethodTagValueNode::class . '->parameters' => ', ',
112
- DoctrineArray::class . '->items' => ', ',
113
- DoctrineAnnotation::class . '->arguments' => ', ',
114
- ;
115
-
116
- /**
117
- * $find, $extraLeft, $extraRight
118
- *
119
- * @var array<string, array{string|null, string, string}>
120
- */
121
- private array $emptyListInsertionMap =
122
- CallableTypeNode::class . '->parameters' => '(', '', '',
123
- ArrayShapeNode::class . '->items' => '{', '', '',
124
- ObjectShapeNode::class . '->items' => '{', '', '',
125
- DoctrineArray::class . '->items' => '{', '', '',
126
- DoctrineAnnotation::class . '->arguments' => '(', '', '',
127
- ;
128
-
129
- /** @var array<string, list<class-string<TypeNode>>> */
130
- private array $parenthesesMap =
131
- CallableTypeNode::class . '->returnType' =>
132
- CallableTypeNode::class,
133
- UnionTypeNode::class,
134
- IntersectionTypeNode::class,
135
- ,
136
- ArrayTypeNode::class . '->type' =>
137
- CallableTypeNode::class,
138
- UnionTypeNode::class,
139
- IntersectionTypeNode::class,
140
- ConstTypeNode::class,
141
- NullableTypeNode::class,
142
- ,
143
- OffsetAccessTypeNode::class . '->type' =>
144
- CallableTypeNode::class,
145
- UnionTypeNode::class,
146
- IntersectionTypeNode::class,
147
- NullableTypeNode::class,
148
- ,
149
- ;
150
-
151
- /** @var array<string, list<class-string<TypeNode>>> */
152
- private array $parenthesesListMap =
153
- IntersectionTypeNode::class . '->types' =>
154
- IntersectionTypeNode::class,
155
- UnionTypeNode::class,
156
- NullableTypeNode::class,
157
- ,
158
- UnionTypeNode::class . '->types' =>
159
- IntersectionTypeNode::class,
160
- UnionTypeNode::class,
161
- NullableTypeNode::class,
162
- ,
163
- ;
164
-
165
- public function printFormatPreserving(PhpDocNode $node, PhpDocNode $originalNode, TokenIterator $originalTokens): string
166
- {
167
- $this->differ = new Differ(static function ($a, $b) {
168
- if ($a instanceof Node && $b instanceof Node) {
169
- return $a === $b->getAttribute(Attribute::ORIGINAL_NODE);
170
- }
171
-
172
- return false;
173
- });
174
-
175
- $tokenIndex = 0;
176
- $result = $this->printArrayFormatPreserving(
177
- $node->children,
178
- $originalNode->children,
179
- $originalTokens,
180
- $tokenIndex,
181
- PhpDocNode::class,
182
- 'children',
183
- );
184
- if ($result !== null) {
185
- return $result . $originalTokens->getContentBetween($tokenIndex, $originalTokens->getTokenCount());
186
- }
187
-
188
- return $this->print($node);
189
- }
190
-
191
- public function print(Node $node): string
192
- {
193
- if ($node instanceof PhpDocNode) {
194
- return "/**\n *" . implode("\n *", array_map(
195
- function (PhpDocChildNode $child): string {
196
- $s = $this->print($child);
197
- return $s === '' ? '' : ' ' . $s;
198
- },
199
- $node->children,
200
- )) . "\n */";
201
- }
202
- if ($node instanceof PhpDocTextNode) {
203
- return $node->text;
204
- }
205
- if ($node instanceof PhpDocTagNode) {
206
- if ($node->value instanceof DoctrineTagValueNode) {
207
- return $this->print($node->value);
208
- }
209
-
210
- return trim(sprintf('%s %s', $node->name, $this->print($node->value)));
211
- }
212
- if ($node instanceof PhpDocTagValueNode) {
213
- return $this->printTagValue($node);
214
- }
215
- if ($node instanceof TypeNode) {
216
- return $this->printType($node);
217
- }
218
- if ($node instanceof ConstExprNode) {
219
- return $this->printConstExpr($node);
220
- }
221
- if ($node instanceof MethodTagValueParameterNode) {
222
- $type = $node->type !== null ? $this->print($node->type) . ' ' : '';
223
- $isReference = $node->isReference ? '&' : '';
224
- $isVariadic = $node->isVariadic ? '...' : '';
225
- $default = $node->defaultValue !== null ? ' = ' . $this->print($node->defaultValue) : '';
226
- return "{$type}{$isReference}{$isVariadic}{$node->parameterName}{$default}";
227
- }
228
- if ($node instanceof CallableTypeParameterNode) {
229
- $type = $this->print($node->type) . ' ';
230
- $isReference = $node->isReference ? '&' : '';
231
- $isVariadic = $node->isVariadic ? '...' : '';
232
- $isOptional = $node->isOptional ? '=' : '';
233
- return trim("{$type}{$isReference}{$isVariadic}{$node->parameterName}") . $isOptional;
234
- }
235
- if ($node instanceof ArrayShapeUnsealedTypeNode) {
236
- if ($node->keyType !== null) {
237
- return sprintf('<%s, %s>', $this->printType($node->keyType), $this->printType($node->valueType));
238
- }
239
- return sprintf('<%s>', $this->printType($node->valueType));
240
- }
241
- if ($node instanceof DoctrineAnnotation) {
242
- return (string) $node;
243
- }
244
- if ($node instanceof DoctrineArgument) {
245
- return (string) $node;
246
- }
247
- if ($node instanceof DoctrineArray) {
248
- return (string) $node;
249
- }
250
- if ($node instanceof DoctrineArrayItem) {
251
- return (string) $node;
252
- }
253
- if ($node instanceof ArrayShapeItemNode) {
254
- if ($node->keyName !== null) {
255
- return sprintf(
256
- '%s%s: %s',
257
- $this->print($node->keyName),
258
- $node->optional ? '?' : '',
259
- $this->printType($node->valueType),
260
- );
261
- }
262
-
263
- return $this->printType($node->valueType);
264
- }
265
- if ($node instanceof ObjectShapeItemNode) {
266
- if ($node->keyName !== null) {
267
- return sprintf(
268
- '%s%s: %s',
269
- $this->print($node->keyName),
270
- $node->optional ? '?' : '',
271
- $this->printType($node->valueType),
272
- );
273
- }
274
-
275
- return $this->printType($node->valueType);
276
- }
277
-
278
- throw new LogicException(sprintf('Unknown node type %s', get_class($node)));
279
- }
280
-
281
- private function printTagValue(PhpDocTagValueNode $node): string
282
- {
283
- // only nodes that contain another node are handled here
284
- // the rest falls back on (string) $node
285
-
286
- if ($node instanceof AssertTagMethodValueNode) {
287
- $isNegated = $node->isNegated ? '!' : '';
288
- $isEquality = $node->isEquality ? '=' : '';
289
- $type = $this->printType($node->type);
290
- return trim("{$isNegated}{$isEquality}{$type} {$node->parameter}->{$node->method}() {$node->description}");
291
- }
292
- if ($node instanceof AssertTagPropertyValueNode) {
293
- $isNegated = $node->isNegated ? '!' : '';
294
- $isEquality = $node->isEquality ? '=' : '';
295
- $type = $this->printType($node->type);
296
- return trim("{$isNegated}{$isEquality}{$type} {$node->parameter}->{$node->property} {$node->description}");
297
- }
298
- if ($node instanceof AssertTagValueNode) {
299
- $isNegated = $node->isNegated ? '!' : '';
300
- $isEquality = $node->isEquality ? '=' : '';
301
- $type = $this->printType($node->type);
302
- return trim("{$isNegated}{$isEquality}{$type} {$node->parameter} {$node->description}");
303
- }
304
- if ($node instanceof ExtendsTagValueNode || $node instanceof ImplementsTagValueNode) {
305
- $type = $this->printType($node->type);
306
- return trim("{$type} {$node->description}");
307
- }
308
- if ($node instanceof MethodTagValueNode) {
309
- $static = $node->isStatic ? 'static ' : '';
310
- $returnType = $node->returnType !== null ? $this->printType($node->returnType) . ' ' : '';
311
- $parameters = implode(', ', array_map(fn (MethodTagValueParameterNode $parameter): string => $this->print($parameter), $node->parameters));
312
- $description = $node->description !== '' ? " {$node->description}" : '';
313
- $templateTypes = count($node->templateTypes) > 0 ? '<' . implode(', ', array_map(fn (TemplateTagValueNode $templateTag): string => $this->print($templateTag), $node->templateTypes)) . '>' : '';
314
- return "{$static}{$returnType}{$node->methodName}{$templateTypes}({$parameters}){$description}";
315
- }
316
- if ($node instanceof MixinTagValueNode) {
317
- $type = $this->printType($node->type);
318
- return trim("{$type} {$node->description}");
319
- }
320
- if ($node instanceof RequireExtendsTagValueNode) {
321
- $type = $this->printType($node->type);
322
- return trim("{$type} {$node->description}");
323
- }
324
- if ($node instanceof RequireImplementsTagValueNode) {
325
- $type = $this->printType($node->type);
326
- return trim("{$type} {$node->description}");
327
- }
328
- if ($node instanceof ParamOutTagValueNode) {
329
- $type = $this->printType($node->type);
330
- return trim("{$type} {$node->parameterName} {$node->description}");
331
- }
332
- if ($node instanceof ParamTagValueNode) {
333
- $reference = $node->isReference ? '&' : '';
334
- $variadic = $node->isVariadic ? '...' : '';
335
- $type = $this->printType($node->type);
336
- return trim("{$type} {$reference}{$variadic}{$node->parameterName} {$node->description}");
337
- }
338
- if ($node instanceof ParamImmediatelyInvokedCallableTagValueNode) {
339
- return trim("{$node->parameterName} {$node->description}");
340
- }
341
- if ($node instanceof ParamLaterInvokedCallableTagValueNode) {
342
- return trim("{$node->parameterName} {$node->description}");
343
- }
344
- if ($node instanceof ParamClosureThisTagValueNode) {
345
- return trim("{$node->type} {$node->parameterName} {$node->description}");
346
- }
347
- if ($node instanceof PureUnlessCallableIsImpureTagValueNode) {
348
- return trim("{$node->parameterName} {$node->description}");
349
- }
350
- if ($node instanceof PropertyTagValueNode) {
351
- $type = $this->printType($node->type);
352
- return trim("{$type} {$node->propertyName} {$node->description}");
353
- }
354
- if ($node instanceof ReturnTagValueNode) {
355
- $type = $this->printType($node->type);
356
- return trim("{$type} {$node->description}");
357
- }
358
- if ($node instanceof SelfOutTagValueNode) {
359
- $type = $this->printType($node->type);
360
- return trim($type . ' ' . $node->description);
361
- }
362
- if ($node instanceof TemplateTagValueNode) {
363
- $upperBound = $node->bound !== null ? ' of ' . $this->printType($node->bound) : '';
364
- $lowerBound = $node->lowerBound !== null ? ' super ' . $this->printType($node->lowerBound) : '';
365
- $default = $node->default !== null ? ' = ' . $this->printType($node->default) : '';
366
- return trim("{$node->name}{$upperBound}{$lowerBound}{$default} {$node->description}");
367
- }
368
- if ($node instanceof ThrowsTagValueNode) {
369
- $type = $this->printType($node->type);
370
- return trim("{$type} {$node->description}");
371
- }
372
- if ($node instanceof TypeAliasImportTagValueNode) {
373
- return trim(
374
- "{$node->importedAlias} from " . $this->printType($node->importedFrom)
375
- . ($node->importedAs !== null ? " as {$node->importedAs}" : ''),
376
- );
377
- }
378
- if ($node instanceof TypeAliasTagValueNode) {
379
- $type = $this->printType($node->type);
380
- return trim("{$node->alias} {$type}");
381
- }
382
- if ($node instanceof UsesTagValueNode) {
383
- $type = $this->printType($node->type);
384
- return trim("{$type} {$node->description}");
385
- }
386
- if ($node instanceof VarTagValueNode) {
387
- $type = $this->printType($node->type);
388
- return trim("{$type} " . trim("{$node->variableName} {$node->description}"));
389
- }
390
-
391
- return (string) $node;
392
- }
393
-
394
- private function printType(TypeNode $node): string
395
- {
396
- if ($node instanceof ArrayShapeNode) {
397
- $items = array_map(fn (ArrayShapeItemNode $item): string => $this->print($item), $node->items);
398
-
399
- if (! $node->sealed) {
400
- $items = '...' . ($node->unsealedType === null ? '' : $this->print($node->unsealedType));
401
- }
402
-
403
- return $node->kind . '{' . implode(', ', $items) . '}';
404
- }
405
- if ($node instanceof ArrayTypeNode) {
406
- return $this->printOffsetAccessType($node->type) . '';
407
- }
408
- if ($node instanceof CallableTypeNode) {
409
- if ($node->returnType instanceof CallableTypeNode || $node->returnType instanceof UnionTypeNode || $node->returnType instanceof IntersectionTypeNode) {
410
- $returnType = $this->wrapInParentheses($node->returnType);
411
- } else {
412
- $returnType = $this->printType($node->returnType);
413
- }
414
- $template = $node->templateTypes !==
415
- ? '<' . implode(', ', array_map(fn (TemplateTagValueNode $templateNode): string => $this->print($templateNode), $node->templateTypes)) . '>'
416
- : '';
417
- $parameters = implode(', ', array_map(fn (CallableTypeParameterNode $parameterNode): string => $this->print($parameterNode), $node->parameters));
418
- return "{$node->identifier}{$template}({$parameters}): {$returnType}";
419
- }
420
- if ($node instanceof ConditionalTypeForParameterNode) {
421
- return sprintf(
422
- '(%s %s %s ? %s : %s)',
423
- $node->parameterName,
424
- $node->negated ? 'is not' : 'is',
425
- $this->printType($node->targetType),
426
- $this->printType($node->if),
427
- $this->printType($node->else),
428
- );
429
- }
430
- if ($node instanceof ConditionalTypeNode) {
431
- return sprintf(
432
- '(%s %s %s ? %s : %s)',
433
- $this->printType($node->subjectType),
434
- $node->negated ? 'is not' : 'is',
435
- $this->printType($node->targetType),
436
- $this->printType($node->if),
437
- $this->printType($node->else),
438
- );
439
- }
440
- if ($node instanceof ConstTypeNode) {
441
- return $this->printConstExpr($node->constExpr);
442
- }
443
- if ($node instanceof GenericTypeNode) {
444
- $genericTypes = ;
445
-
446
- foreach ($node->genericTypes as $index => $type) {
447
- $variance = $node->variances$index ?? GenericTypeNode::VARIANCE_INVARIANT;
448
- if ($variance === GenericTypeNode::VARIANCE_INVARIANT) {
449
- $genericTypes = $this->printType($type);
450
- } elseif ($variance === GenericTypeNode::VARIANCE_BIVARIANT) {
451
- $genericTypes = '*';
452
- } else {
453
- $genericTypes = sprintf('%s %s', $variance, $this->print($type));
454
- }
455
- }
456
-
457
- return $node->type . '<' . implode(', ', $genericTypes) . '>';
458
- }
459
- if ($node instanceof IdentifierTypeNode) {
460
- return $node->name;
461
- }
462
- if ($node instanceof IntersectionTypeNode || $node instanceof UnionTypeNode) {
463
- $items = ;
464
- foreach ($node->types as $type) {
465
- if (
466
- $type instanceof IntersectionTypeNode
467
- || $type instanceof UnionTypeNode
468
- || $type instanceof NullableTypeNode
469
- ) {
470
- $items = $this->wrapInParentheses($type);
471
- continue;
472
- }
473
-
474
- $items = $this->printType($type);
475
- }
476
-
477
- return implode($node instanceof IntersectionTypeNode ? '&' : '|', $items);
478
- }
479
- if ($node instanceof InvalidTypeNode) {
480
- return (string) $node;
481
- }
482
- if ($node instanceof NullableTypeNode) {
483
- if ($node->type instanceof IntersectionTypeNode || $node->type instanceof UnionTypeNode) {
484
- return '?(' . $this->printType($node->type) . ')';
485
- }
486
-
487
- return '?' . $this->printType($node->type);
488
- }
489
- if ($node instanceof ObjectShapeNode) {
490
- $items = array_map(fn (ObjectShapeItemNode $item): string => $this->print($item), $node->items);
491
-
492
- return 'object{' . implode(', ', $items) . '}';
493
- }
494
- if ($node instanceof OffsetAccessTypeNode) {
495
- return $this->printOffsetAccessType($node->type) . '' . $this->printType($node->offset) . '';
496
- }
497
- if ($node instanceof ThisTypeNode) {
498
- return (string) $node;
499
- }
500
-
501
- throw new LogicException(sprintf('Unknown node type %s', get_class($node)));
502
- }
503
-
504
- private function wrapInParentheses(TypeNode $node): string
505
- {
506
- return '(' . $this->printType($node) . ')';
507
- }
508
-
509
- private function printOffsetAccessType(TypeNode $type): string
510
- {
511
- if (
512
- $type instanceof CallableTypeNode
513
- || $type instanceof UnionTypeNode
514
- || $type instanceof IntersectionTypeNode
515
- || $type instanceof NullableTypeNode
516
- ) {
517
- return $this->wrapInParentheses($type);
518
- }
519
-
520
- return $this->printType($type);
521
- }
522
-
523
- private function printConstExpr(ConstExprNode $node): string
524
- {
525
- // this is fine - ConstExprNode classes do not contain nodes that need smart printer logic
526
- return (string) $node;
527
- }
528
-
529
- /**
530
- * @param Node $nodes
531
- * @param Node $originalNodes
532
- */
533
- private function printArrayFormatPreserving(array $nodes, array $originalNodes, TokenIterator $originalTokens, int &$tokenIndex, string $parentNodeClass, string $subNodeName): ?string
534
- {
535
- $diff = $this->differ->diffWithReplacements($originalNodes, $nodes);
536
- $mapKey = $parentNodeClass . '->' . $subNodeName;
537
- $insertStr = $this->listInsertionMap$mapKey ?? null;
538
- $result = '';
539
- $beforeFirstKeepOrReplace = true;
540
- $delayedAdd = ;
541
-
542
- $insertNewline = false;
543
- $isMultiline, $beforeAsteriskIndent, $afterAsteriskIndent = $this->isMultiline($tokenIndex, $originalNodes, $originalTokens);
544
-
545
- if ($insertStr === "\n * ") {
546
- $insertStr = sprintf('%s%s*%s', $originalTokens->getDetectedNewline() ?? "\n", $beforeAsteriskIndent, $afterAsteriskIndent);
547
- }
548
-
549
- foreach ($diff as $i => $diffElem) {
550
- $diffType = $diffElem->type;
551
- $newNode = $diffElem->new;
552
- $originalNode = $diffElem->old;
553
- if ($diffType === DiffElem::TYPE_KEEP || $diffType === DiffElem::TYPE_REPLACE) {
554
- $beforeFirstKeepOrReplace = false;
555
- if (!$newNode instanceof Node || !$originalNode instanceof Node) {
556
- return null;
557
- }
558
-
559
- /** @var int $itemStartPos */
560
- $itemStartPos = $originalNode->getAttribute(Attribute::START_INDEX);
561
-
562
- /** @var int $itemEndPos */
563
- $itemEndPos = $originalNode->getAttribute(Attribute::END_INDEX);
564
- if ($itemStartPos < 0 || $itemEndPos < 0 || $itemStartPos < $tokenIndex) {
565
- throw new LogicException();
566
- }
567
-
568
- $result .= $originalTokens->getContentBetween($tokenIndex, $itemStartPos);
569
-
570
- if (count($delayedAdd) > 0) {
571
- foreach ($delayedAdd as $delayedAddNode) {
572
- $parenthesesNeeded = isset($this->parenthesesListMap$mapKey)
573
- && in_array(get_class($delayedAddNode), $this->parenthesesListMap$mapKey, true);
574
- if ($parenthesesNeeded) {
575
- $result .= '(';
576
- }
577
- $result .= $this->printNodeFormatPreserving($delayedAddNode, $originalTokens);
578
- if ($parenthesesNeeded) {
579
- $result .= ')';
580
- }
581
-
582
- if ($insertNewline) {
583
- $result .= $insertStr . sprintf('%s%s*%s', $originalTokens->getDetectedNewline() ?? "\n", $beforeAsteriskIndent, $afterAsteriskIndent);
584
- } else {
585
- $result .= $insertStr;
586
- }
587
- }
588
-
589
- $delayedAdd = ;
590
- }
591
-
592
- $parenthesesNeeded = isset($this->parenthesesListMap$mapKey)
593
- && in_array(get_class($newNode), $this->parenthesesListMap$mapKey, true)
594
- && !in_array(get_class($originalNode), $this->parenthesesListMap$mapKey, true);
595
- $addParentheses = $parenthesesNeeded && !$originalTokens->hasParentheses($itemStartPos, $itemEndPos);
596
- if ($addParentheses) {
597
- $result .= '(';
598
- }
599
-
600
- $result .= $this->printNodeFormatPreserving($newNode, $originalTokens);
601
- if ($addParentheses) {
602
- $result .= ')';
603
- }
604
- $tokenIndex = $itemEndPos + 1;
605
-
606
- } elseif ($diffType === DiffElem::TYPE_ADD) {
607
- if ($insertStr === null) {
608
- return null;
609
- }
610
- if (!$newNode instanceof Node) {
611
- return null;
612
- }
613
-
614
- if ($insertStr === ', ' && $isMultiline) {
615
- $insertStr = ',';
616
- $insertNewline = true;
617
- }
618
-
619
- if ($beforeFirstKeepOrReplace) {
620
- // Will be inserted at the next "replace" or "keep" element
621
- $delayedAdd = $newNode;
622
- continue;
623
- }
624
-
625
- /** @var int $itemEndPos */
626
- $itemEndPos = $tokenIndex - 1;
627
- if ($insertNewline) {
628
- $result .= $insertStr . sprintf('%s%s*%s', $originalTokens->getDetectedNewline() ?? "\n", $beforeAsteriskIndent, $afterAsteriskIndent);
629
- } else {
630
- $result .= $insertStr;
631
- }
632
-
633
- $parenthesesNeeded = isset($this->parenthesesListMap$mapKey)
634
- && in_array(get_class($newNode), $this->parenthesesListMap$mapKey, true);
635
- if ($parenthesesNeeded) {
636
- $result .= '(';
637
- }
638
-
639
- $result .= $this->printNodeFormatPreserving($newNode, $originalTokens);
640
- if ($parenthesesNeeded) {
641
- $result .= ')';
642
- }
643
-
644
- $tokenIndex = $itemEndPos + 1;
645
-
646
- } elseif ($diffType === DiffElem::TYPE_REMOVE) {
647
- if (!$originalNode instanceof Node) {
648
- return null;
649
- }
650
-
651
- /** @var int $itemStartPos */
652
- $itemStartPos = $originalNode->getAttribute(Attribute::START_INDEX);
653
-
654
- /** @var int $itemEndPos */
655
- $itemEndPos = $originalNode->getAttribute(Attribute::END_INDEX);
656
- if ($itemStartPos < 0 || $itemEndPos < 0) {
657
- throw new LogicException();
658
- }
659
-
660
- if ($i === 0) {
661
- // If we're removing from the start, keep the tokens before the node and drop those after it,
662
- // instead of the other way around.
663
- $originalTokensArray = $originalTokens->getTokens();
664
- for ($j = $tokenIndex; $j < $itemStartPos; $j++) {
665
- if ($originalTokensArray$jLexer::TYPE_OFFSET === Lexer::TOKEN_PHPDOC_EOL) {
666
- break;
667
- }
668
- $result .= $originalTokensArray$jLexer::VALUE_OFFSET;
669
- }
670
- }
671
-
672
- $tokenIndex = $itemEndPos + 1;
673
- }
674
- }
675
-
676
- if (count($delayedAdd) > 0) {
677
- if (!isset($this->emptyListInsertionMap$mapKey)) {
678
- return null;
679
- }
680
-
681
- $findToken, $extraLeft, $extraRight = $this->emptyListInsertionMap$mapKey;
682
- if ($findToken !== null) {
683
- $originalTokensArray = $originalTokens->getTokens();
684
- for (; $tokenIndex < count($originalTokensArray); $tokenIndex++) {
685
- $result .= $originalTokensArray$tokenIndexLexer::VALUE_OFFSET;
686
- if ($originalTokensArray$tokenIndexLexer::VALUE_OFFSET !== $findToken) {
687
- continue;
688
- }
689
-
690
- $tokenIndex++;
691
- break;
692
- }
693
- }
694
- $first = true;
695
- $result .= $extraLeft;
696
- foreach ($delayedAdd as $delayedAddNode) {
697
- if (!$first) {
698
- $result .= $insertStr;
699
- if ($insertNewline) {
700
- $result .= sprintf('%s%s*%s', $originalTokens->getDetectedNewline() ?? "\n", $beforeAsteriskIndent, $afterAsteriskIndent);
701
- }
702
- }
703
-
704
- $result .= $this->printNodeFormatPreserving($delayedAddNode, $originalTokens);
705
- $first = false;
706
- }
707
- $result .= $extraRight;
708
- }
709
-
710
- return $result;
711
- }
712
-
713
- /**
714
- * @param array<Node|null> $nodes
715
- * @return array{bool, string, string}
716
- */
717
- private function isMultiline(int $initialIndex, array $nodes, TokenIterator $originalTokens): array
718
- {
719
- $isMultiline = count($nodes) > 1;
720
- $pos = $initialIndex;
721
- $allText = '';
722
- /** @var Node|null $node */
723
- foreach ($nodes as $node) {
724
- if (!$node instanceof Node) {
725
- continue;
726
- }
727
-
728
- $endPos = $node->getAttribute(Attribute::END_INDEX) + 1;
729
- $text = $originalTokens->getContentBetween($pos, $endPos);
730
- $allText .= $text;
731
- if (strpos($text, "\n") === false) {
732
- // We require that a newline is present between *every* item. If the formatting
733
- // is inconsistent, with only some items having newlines, we don't consider it
734
- // as multiline
735
- $isMultiline = false;
736
- }
737
- $pos = $endPos;
738
- }
739
-
740
- $c = preg_match_all('~\n(?<before>\\x09\\x20*)\*(?<after>\\x20*)~', $allText, $matches, PREG_SET_ORDER);
741
- if ($c === 0) {
742
- return $isMultiline, '', '';
743
- }
744
-
745
- $before = '';
746
- $after = '';
747
- foreach ($matches as $match) {
748
- if (strlen($match'before') > strlen($before)) {
749
- $before = $match'before';
750
- }
751
- if (strlen($match'after') <= strlen($after)) {
752
- continue;
753
- }
754
-
755
- $after = $match'after';
756
- }
757
-
758
- return $isMultiline, $before, $after;
759
- }
760
-
761
- private function printNodeFormatPreserving(Node $node, TokenIterator $originalTokens): string
762
- {
763
- /** @var Node|null $originalNode */
764
- $originalNode = $node->getAttribute(Attribute::ORIGINAL_NODE);
765
- if ($originalNode === null) {
766
- return $this->print($node);
767
- }
768
-
769
- $class = get_class($node);
770
- if ($class !== get_class($originalNode)) {
771
- throw new LogicException();
772
- }
773
-
774
- $startPos = $originalNode->getAttribute(Attribute::START_INDEX);
775
- $endPos = $originalNode->getAttribute(Attribute::END_INDEX);
776
- if ($startPos < 0 || $endPos < 0) {
777
- throw new LogicException();
778
- }
779
-
780
- $result = '';
781
- $pos = $startPos;
782
- $subNodeNames = array_keys(get_object_vars($node));
783
- foreach ($subNodeNames as $subNodeName) {
784
- $subNode = $node->$subNodeName;
785
- $origSubNode = $originalNode->$subNodeName;
786
-
787
- if (
788
- (!$subNode instanceof Node && $subNode !== null)
789
- || (!$origSubNode instanceof Node && $origSubNode !== null)
790
- ) {
791
- if ($subNode === $origSubNode) {
792
- // Unchanged, can reuse old code
793
- continue;
794
- }
795
-
796
- if (is_array($subNode) && is_array($origSubNode)) {
797
- // Array subnode changed, we might be able to reconstruct it
798
- $listResult = $this->printArrayFormatPreserving(
799
- $subNode,
800
- $origSubNode,
801
- $originalTokens,
802
- $pos,
803
- $class,
804
- $subNodeName,
805
- );
806
-
807
- if ($listResult === null) {
808
- return $this->print($node);
809
- }
810
-
811
- $result .= $listResult;
812
- continue;
813
- }
814
-
815
- return $this->print($node);
816
- }
817
-
818
- if ($origSubNode === null) {
819
- if ($subNode === null) {
820
- // Both null, nothing to do
821
- continue;
822
- }
823
-
824
- return $this->print($node);
825
- }
826
-
827
- $subStartPos = $origSubNode->getAttribute(Attribute::START_INDEX);
828
- $subEndPos = $origSubNode->getAttribute(Attribute::END_INDEX);
829
- if ($subStartPos < 0 || $subEndPos < 0) {
830
- throw new LogicException();
831
- }
832
-
833
- if ($subEndPos < $subStartPos) {
834
- return $this->print($node);
835
- }
836
-
837
- if ($subNode === null) {
838
- return $this->print($node);
839
- }
840
-
841
- $result .= $originalTokens->getContentBetween($pos, $subStartPos);
842
- $mapKey = get_class($node) . '->' . $subNodeName;
843
- $parenthesesNeeded = isset($this->parenthesesMap$mapKey)
844
- && in_array(get_class($subNode), $this->parenthesesMap$mapKey, true);
845
-
846
- if ($subNode->getAttribute(Attribute::ORIGINAL_NODE) !== null) {
847
- $parenthesesNeeded = $parenthesesNeeded
848
- && !in_array(get_class($subNode->getAttribute(Attribute::ORIGINAL_NODE)), $this->parenthesesMap$mapKey, true);
849
- }
850
-
851
- $addParentheses = $parenthesesNeeded && !$originalTokens->hasParentheses($subStartPos, $subEndPos);
852
- if ($addParentheses) {
853
- $result .= '(';
854
- }
855
-
856
- $result .= $this->printNodeFormatPreserving($subNode, $originalTokens);
857
- if ($addParentheses) {
858
- $result .= ')';
859
- }
860
-
861
- $pos = $subEndPos + 1;
862
- }
863
-
864
- return $result . $originalTokens->getContentBetween($pos, $endPos + 1);
865
- }
866
-
867
-}
868
roundcubemail-1.6.tar.gz/vendor/phpstan/phpstan/phpstan.phar
Changed
roundcubemail-1.6.tar.gz/vendor/phpstan/phpstan/phpstan.phar.asc
Changed
31
1
2
-----BEGIN PGP SIGNATURE-----
3
4
-iQIzBAABCgAdFiEEynwsejDI6OEnSoR2UcZzBf/C5cAFAmePs/wACgkQUcZzBf/C
5
-5cAuJw/+MIoJmyzf/HoCKC4mgY+9gNTBKqWiE0g2JOwwWH/ZU3DCTI/O+BRUSRbR
6
-Tsbw9XHBL+yk/5Svl6JeyiRWhtgR8ljBe5nMYKIUZn89fBRmoKoLCvs4DArZNXCm
7
-Y50Ah9a5zyAVKByFed/gT4eeFfilXnWt3JZ62E15EK72BijIRJS3UNp1mS/wzSTv
8
-jVRPztohlZPSBRP+AL3+2AsQPeDMD4wBWSsCygwUprdL+0R4qjJ0GSPxuPMd+uAn
9
-n4wRTrHTYPkV609/mNuItZIIWUK2kp2Rkqf3OHELDUc9tgw1e2hLFx2Yo4h19XYU
10
-hyprmPUSY9PlDG5a1xnighBA5lk3mM9eM0XMjY0gNeNMy6J4MPYeAJr+X5gn7pei
11
-1Abz9UOxpsBkFdQ5Wxx/Qz6di6ZdQFU0V+59Sivooh8u7rFPSVx3gtjVu6K8Pv7l
12
-F26u7dWcgA/nywwzCPmcnjfUHGmp7CX2iit+uzSo+Mge2cbRFW9nG7Ig/LUx5gRi
13
-w1IHtYF+ypAcMo4PikiM0bn8N60y5dn4rz+NpXrHK146dfvRvlf1LXqrValrTVvY
14
-/9m+kE1h4NT3pOT0ftQcndoW3SaQL1wPIRSkHgkeg67W/dsrnub9I8n4CZJz7ttZ
15
-G8W/hkr/tZIbaVyOKTN2is0aXOTJfeKUAdEcQ99Bpk6N6XEn8Kc=
16
-=qRec
17
+iQIzBAABCgAdFiEEynwsejDI6OEnSoR2UcZzBf/C5cAFAmdI6tsACgkQUcZzBf/C
18
+5cB4lA/+ITHN8aCrWNOMhd9PzBuls+WrAbOFpRgKdsW3mMcUyFSDfG6DjsfTtGDw
19
+LKW01xUKq46fmoHGXjdmz0OWoB6cbfVyuo/LHUqUQvWYFieTUH56zZnQZ8H7nRDv
20
+G3wtS/XrH5NNMJwe7JL08+kQEwqKbadNdWkd1iE2dJS5SM6gOJFfXt52PCmSsBG9
21
+UCCYrJpomfyK2BVPp5bkHW+MGhxjAy+0tdpZlIpZ5ivlau3opL+ZDf3jl41cgYOm
22
+DVqs/L2aw7yBKvva7pJClFBDI3lO+APJlTsSihKUsNu58nSdT2hQFZWwzBdp1Wc/
23
+vs7voBii2eNpbARZ18Sv6rs8CW4tezKqgK3PcX0lK2p9r1QrrN7hZYl5jYxXovcn
24
+n5L5MXvcVK9J4tJx/Hy1/qN7K5HLlWTX9nUeEKveIQMAtRGVHc0nEl7jfNHt5Vpb
25
+gr8B3gRoIUqAxZcP/sly0HmR8TgBlkEzy7NdEjMkCrj4E/UMDI57crOTaDL/lE4e
26
+E03bBXsJT4heawCdbRisl7wNb+8JDNAnFNIPobce9TocZU8TGhlrY0XNpb3NqDl2
27
+bSeUXQ31L6L7QV/5a0oD4VRz1army3rUYVK47BkbRaujmvvgcCb4S61MDSmTxEXu
28
+Lgf3xfaOcta/FnvtFoMCVfScwh5a3C/Qw4Je+5JKq9lNNSgTSSM=
29
+=NUhN
30
-----END PGP SIGNATURE-----
31
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/.github
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/.github/workflows
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/.github/workflows/ci.yml
Deleted
133
1
2
-name: CI
3
-
4
-on:
5
- push:
6
- pull_request:
7
-
8
-permissions:
9
- contents: read
10
-
11
-jobs:
12
- cs:
13
- runs-on: ubuntu-latest
14
- if: "!contains(github.event.head_commit.message, 'skip ci') && !contains(github.event.head_commit.message, 'ci skip')"
15
-
16
- name: Coding Style
17
-
18
- steps:
19
- - name: Checkout code
20
- uses: actions/checkout@v4
21
-
22
- - name: Setup PHP
23
- uses: shivammathur/setup-php@v2
24
- with:
25
- php-version: "8.3"
26
- extensions: mbstring
27
- tools: composer:v2
28
- coverage: none
29
-
30
- - name: Set COMPOSER_ROOT_VERSION
31
- run: echo "COMPOSER_ROOT_VERSION=0.3.99" >> $GITHUB_ENV
32
-
33
- - name: Install dependencies
34
- run: composer install --prefer-dist --no-interaction --no-progress
35
-
36
- - name: Check Coding Style - PHP
37
- run: vendor/bin/php-cs-fixer fix --dry-run --using-cache=no --diff --verbose
38
-
39
- - name: Check composer.json format
40
- run: |
41
- composer remove --no-interaction roundcube/roundcubemail
42
- composer validate --strict --no-check-lock && composer normalize --dry-run --no-check-lock
43
-
44
- phpstan:
45
- runs-on: ubuntu-latest
46
- if: "!contains(github.event.head_commit.message, 'skip ci') && !contains(github.event.head_commit.message, 'ci skip')"
47
-
48
- name: Static Analysis
49
-
50
- steps:
51
- - name: Checkout code
52
- uses: actions/checkout@v4
53
-
54
- - name: Setup PHP
55
- uses: shivammathur/setup-php@v2
56
- with:
57
- php-version: "8.3"
58
- extensions: mbstring
59
- tools: composer:v2
60
- coverage: none
61
-
62
- - name: Set COMPOSER_ROOT_VERSION
63
- run: echo "COMPOSER_ROOT_VERSION=0.3.99" >> $GITHUB_ENV
64
-
65
- - name: Install dependencies
66
- run: composer install --prefer-dist --no-interaction --no-progress
67
-
68
- - name: Run Static Analysis
69
- run: vendor/bin/phpstan analyse
70
-
71
- test:
72
- runs-on: ubuntu-latest
73
- if: "!contains(github.event.head_commit.message, 'skip ci') && !contains(github.event.head_commit.message, 'ci skip')"
74
-
75
- strategy:
76
- fail-fast: false
77
- matrix:
78
- php: "7.3", "7.4", "8.0", "8.1", "8.2", "8.3", "8.4"
79
-
80
- name: Test / PHP ${{ matrix.php }}
81
-
82
- steps:
83
- - name: Checkout code
84
- uses: actions/checkout@v4
85
-
86
- - name: Setup PHP
87
- uses: shivammathur/setup-php@v2
88
- with:
89
- php-version: ${{ matrix.php }}
90
- extensions: mbstring
91
- tools: composer:v2
92
- coverage: none
93
-
94
- - name: Set COMPOSER_ROOT_VERSION
95
- run: echo "COMPOSER_ROOT_VERSION=0.3.99" >> $GITHUB_ENV
96
-
97
- - name: Test Roundcubemail as dependency - install plugin
98
- run: |
99
- cd test-composer
100
- composer install -v --prefer-dist --no-interaction --no-progress
101
-
102
- - name: Test Roundcubemail as dependency - verify install
103
- run: |
104
- cd test-composer
105
- ls -lah vendor/roundcube/roundcubemail/plugins/carddav/config.*
106
- if ! -f vendor/roundcube/roundcubemail/plugins/carddav/config.inc.php ; then echo 'Config file was not created' && exit 1; fi
107
-
108
- - name: Test Roundcubemail as root project - install plugin
109
- run: |
110
- cd test-composer/vendor/roundcube/roundcubemail
111
- ls -lah plugins/acl/config.*
112
- if -f plugins/acl/config.inc.php ; then echo 'Config file is not expected' && exit 1; fi
113
- composer install -v --prefer-dist --no-interaction --no-progress
114
-
115
- - name: Test Roundcubemail as root project - verify install
116
- run: |
117
- cd test-composer/vendor/roundcube/roundcubemail
118
- ls -lah plugins/acl/config.*
119
- if ! -f plugins/acl/config.inc.php ; then echo 'Config file was not created' && exit 1; fi
120
-
121
- - name: Test update - install plugin
122
- run: |
123
- cd test-composer
124
- echo '// xxx no config update xxx' >> vendor/roundcube/roundcubemail/plugins/carddav/config.inc.php
125
- composer update -v --prefer-dist --no-interaction --no-progress roundcube/carddav --prefer-lowest
126
-
127
- - name: Test update - verify install
128
- run: |
129
- cd test-composer
130
- ls -lah vendor/roundcube/roundcubemail/plugins/carddav/config.*
131
- if ! -f vendor/roundcube/roundcubemail/plugins/carddav/config.inc.php ; then echo 'Config file was deleted' && exit 1; fi
132
- if ! grep -Fq 'xxx no config update xxx' vendor/roundcube/roundcubemail/plugins/carddav/config.inc.php; then echo 'Config file was replaced' && exit 1; fi
133
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/.gitignore
Changed
9
1
2
-/composer.lock
3
-/vendor/
4
-
5
-/test-composer/*
6
-!/test-composer/composer.json
7
+composer.lock
8
+composer.phar
9
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/.php-cs-fixer.dist.php
Deleted
67
1
2
-<?php
3
-
4
-declare(strict_types=1);
5
-
6
-use PhpCsFixer\Config;
7
-use PhpCsFixer\Finder;
8
-
9
-$finder = Finder::create()
10
- ->in(__DIR__)
11
- ->exclude('vendor')
12
- ->ignoreDotFiles(false);
13
-
14
-return (new Config())
15
- ->setRiskyAllowed(true)
16
- ->setRules(
17
- '@PhpCsFixer' => true,
18
- '@PhpCsFixer:risky' => true,
19
- '@PHP74Migration' => true,
20
- '@PHP74Migration:risky' => true,
21
-
22
- // required by PSR-12
23
- 'concat_space' =>
24
- 'spacing' => 'one',
25
- ,
26
-
27
- // disable some too strict rules
28
- 'phpdoc_types_order' =>
29
- 'null_adjustment' => 'always_last',
30
- 'sort_algorithm' => 'none',
31
- ,
32
- 'single_line_throw' => false,
33
- 'yoda_style' =>
34
- 'equal' => false,
35
- 'identical' => false,
36
- ,
37
- 'native_constant_invocation' => true,
38
- 'native_function_invocation' => false,
39
- 'void_return' => false,
40
- 'blank_line_before_statement' =>
41
- 'statements' => 'break', 'continue', 'declare', 'return', 'throw', 'exit',
42
- ,
43
- 'final_internal_class' => false,
44
- 'combine_consecutive_issets' => false,
45
- 'combine_consecutive_unsets' => false,
46
- 'multiline_whitespace_before_semicolons' => false,
47
- 'no_superfluous_elseif' => false,
48
- 'ordered_class_elements' => false,
49
- 'php_unit_internal_class' => false,
50
- 'php_unit_test_class_requires_covers' => false,
51
- 'phpdoc_add_missing_param_annotation' => false,
52
- 'return_assignment' => false,
53
- 'comment_to_phpdoc' => false,
54
- 'general_phpdoc_annotation_remove' =>
55
- 'annotations' => 'author', 'copyright', 'throws',
56
- ,
57
-
58
- // fn => without curly brackets is less readable,
59
- // also prevent bounding of unwanted variables for GC
60
- 'use_arrow_functions' => false,
61
-
62
- // disable too destructive formating for now
63
- 'declare_strict_types' => false,
64
- )
65
- ->setFinder($finder)
66
- ->setCacheFile(sys_get_temp_dir() . '/php-cs-fixer.' . md5(__DIR__) . '.cache');
67
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/README.md
Changed
95
1
2
# Plugin Installer for Roundcube
3
4
-This installer ensures that plugins and skins end up in the correct directory:
5
+This installer ensures that plugins end up in the correct directory:
6
7
- * Plugins - `<roundcube-root>/plugins/plugin-name`
8
- * Skins - `<roundcube-root>/skins/skin-name`
9
+ * `<roundcube-root>/plugins/plugin-name`
10
11
## Minimum setup
12
13
14
### sample composer.json for plugins
15
16
{
17
- "name": "<your-vendor-name>/<plugin-name>",
18
+ "name": "yourvendor/plugin-name",
19
+ "license": "the license",
20
+ "description": "tell the world what your plugin is good at",
21
"type": "roundcube-plugin",
22
- "license": "GPL-3.0-or-later",
23
+ "authors":
24
+ {
25
+ "name": "<your-name>",
26
+ "email": "<your-email>"
27
+ }
28
+ ,
29
+ "repositories":
30
+ {
31
+ "type": "composer",
32
+ "url": "http://plugins.roundcube.net"
33
+ }
34
+
35
"require": {
36
- "roundcube/plugin-installer": ">=0.3.0"
37
- }
38
+ "roundcube/plugin-installer": "*"
39
+ },
40
+ "minimum-stability": "dev-master"
41
}
42
43
-### sample composer.json for skins
44
-
45
- {
46
- "name": "<your-vendor-name>/<skin-name>",
47
- "type": "roundcube-skin",
48
- "license": "GPL-3.0-or-later",
49
- "require": {
50
- "roundcube/plugin-installer": ">=0.3.0"
51
- }
52
- }
53
-
54
-## Roundcube specific composer.json params
55
-
56
-For both plugins and skins you can, optionally, add the following section to your `composer.json` file. All properties are optional and provided below with example values.
57
-`persistent-files` defines a list of files which should be maintained across updates. By default only `config.inc.php` is maintained. The array should contain paths relative to the root of your plugin.
58
-
59
- "extra": {
60
- "roundcube": {
61
- "min-version": "1.4.0",
62
- "sql-dir": "./SQL",
63
- "post-install-script": "./bin/install.sh",
64
- "post-update-script": "./bin/update.sh",
65
- "persistent-files": "config.inc.php", "skins/elastic/_custom.less"
66
- }
67
- }
68
-
69
-## Configuration
70
-
71
-This installer will ask if you want to enable each plugin or skin as it is installed. To always enable all plugins or skins add `enable-plugin`/`enable-skin` to the `config` section in the `composer.json` in the root of your Roundcube directory.
72
-When uninstalling packages Composer will not remove the folder. To remove the folder set `uninstall-remove-folder` in your config.
73
-
74
- "config": {
75
- "roundcube": {
76
- "enable-plugin": true,
77
- "enable-skin": true,
78
- "uninstall-remove-folder": true
79
- }
80
- }
81
-
82
-## Repository
83
-
84
-Submit your plugin or skin to Packagist(https://packagist.org/).
85
+ * Submit your plugin to plugins.roundcube.net(http://plugins.roundcube.net).
86
87
## Installation
88
89
90
* add your plugin in the `require` section of composer.json
91
* `composer.phar install`
92
93
-Read the whole story at plugins.roundcube.net(http://plugins.roundcube.net/#/about/).
94
+Read the whole story at plugins.roundcube.net(http://plugins.roundcube.net/about).
95
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/composer.json
Changed
74
1
2
{
3
"name": "roundcube/plugin-installer",
4
- "description": "A composer-installer for Roundcube plugins and skins.",
5
- "license": "GPL-3.0-or-later",
6
- "type": "composer-plugin",
7
+ "description": "A composer-installer for Roundcube plugins.",
8
+ "type": "composer-installer",
9
+ "license": "GPL-3.0+",
10
"authors":
11
{
12
"name": "Thomas Bruederli",
13
14
{
15
"name": "Till Klampaeckel",
16
"email": "till@php.net"
17
- },
18
- {
19
- "name": "Philip Weir",
20
- "email": "roundcube@tehinterweb.co.uk"
21
- }
22
- ,
23
- "require": {
24
- "php": ">=7.3 <8.5",
25
- "composer-plugin-api": "^2.1",
26
- "roundcube/roundcubemail": "*"
27
- },
28
- "require-dev": {
29
- "composer/composer": "^2.1",
30
- "ergebnis/composer-normalize": "^2.13",
31
- "friendsofphp/php-cs-fixer": "^3.0",
32
- "phpstan/extension-installer": "^1.1",
33
- "phpstan/phpstan": "^1.2",
34
- "phpstan/phpstan-deprecation-rules": "^1.0",
35
- "phpstan/phpstan-strict-rules": "^1.3"
36
- },
37
- "repositories":
38
- {
39
- "type": "git",
40
- "url": "https://github.com/roundcube/roundcubemail.git"
41
}
42
,
43
- "minimum-stability": "dev",
44
- "prefer-stable": true,
45
"autoload": {
46
- "psr-4": {
47
- "Roundcube\\Composer\\": "src/"
48
- }
49
- },
50
- "config": {
51
- "allow-plugins": {
52
- "ergebnis/composer-normalize": true,
53
- "phpstan/extension-installer": true
54
+ "psr-0": {
55
+ "Roundcube\\Composer": "src/"
56
}
57
},
58
"extra": {
59
- "class":
60
- "Roundcube\\Composer\\RoundcubeInstaller"
61
-
62
+ "class": "Roundcube\\Composer\\PluginInstaller"
63
+ },
64
+ "bin":
65
+ "src/bin/rcubeinitdb.sh"
66
+ ,
67
+ "require": {
68
+ "php": ">=5.3.0"
69
+ },
70
+ "require-dev": {
71
+ "composer/composer": "*"
72
}
73
}
74
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/phpstan.neon.dist
Deleted
22
1
2
-includes:
3
- - phar://phpstan.phar/conf/bleedingEdge.neon
4
-
5
-parameters:
6
- level: 4
7
- checkMissingOverrideMethodAttribute: true
8
- paths:
9
- - .
10
- excludePaths:
11
- - vendor
12
-
13
- ignoreErrors:
14
- # relax strict rules
15
- - '~^Only booleans are allowed in .+, .+ given( on the (left|right) side)?\.~'
16
- - '~^Construct empty\(\) is not allowed\. Use more strict comparison\.~'
17
-
18
- -
19
- message: '~^Constant RCMAIL_VERSION not found\.$~'
20
- path: 'src/ExtensionInstaller.php'
21
- count: 1
22
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/src/ExtensionInstaller.php
Deleted
476
1
2
-<?php
3
-
4
-namespace Roundcube\Composer;
5
-
6
-use Composer\Installer\InstallationManager;
7
-use Composer\Installer\LibraryInstaller;
8
-use Composer\Package\PackageInterface;
9
-use Composer\Package\Version\VersionParser;
10
-use Composer\Repository\InstalledRepository;
11
-use Composer\Repository\InstalledRepositoryInterface;
12
-use Composer\Repository\RootPackageRepository;
13
-use Composer\Util\Filesystem;
14
-use Composer\Util\ProcessExecutor;
15
-use React\Promise\PromiseInterface;
16
-
17
-abstract class ExtensionInstaller extends LibraryInstaller
18
-{
19
- /** @var string|null */
20
- private $roundcubemailInstallPath;
21
-
22
- /** @var string */
23
- protected $composer_type;
24
-
25
- protected function setRoundcubemailInstallPath(InstalledRepositoryInterface $installedRepo): void
26
- {
27
- // https://github.com/composer/composer/discussions/11927#discussioncomment-9116893
28
- $rootPackage = clone $this->composer->getPackage();
29
- $installedRepo = new InstalledRepository(
30
- $installedRepo,
31
- new RootPackageRepository($rootPackage),
32
- );
33
-
34
- $roundcubemailPackages = $installedRepo->findPackagesWithReplacersAndProviders('roundcube/roundcubemail');
35
- assert(count($roundcubemailPackages) === 1);
36
- $roundcubemailPackage = $roundcubemailPackages0;
37
-
38
- if ($roundcubemailPackage === $rootPackage) { // $this->getInstallPath($package) does not work for root package
39
- $this->initializeVendorDir();
40
- $installPath = dirname($this->vendorDir);
41
- } else {
42
- $installPath = $this->getInstallPath($roundcubemailPackage);
43
- }
44
-
45
- if ($this->roundcubemailInstallPath === null) {
46
- $this->roundcubemailInstallPath = $installPath;
47
- } elseif ($this->roundcubemailInstallPath !== $installPath) {
48
- throw new \Exception('Install path of "roundcube/roundcubemail" package has unexpectedly changed');
49
- }
50
- }
51
-
52
- protected function getRoundcubemailInstallPath(): string
53
- {
54
- // install path is not set at composer download phase
55
- // never assume any path, but for this known composer behaviour get it from backtrace instead
56
- if ($this->roundcubemailInstallPath === null) {
57
- $backtrace = debug_backtrace();
58
- foreach ($backtrace as $frame) {
59
- // relies on https://github.com/composer/composer/blob/2.7.4/src/Composer/Installer/InstallationManager.php#L243
60
- if (($frame'object' ?? null) instanceof InstallationManager
61
- && $frame'function' === 'downloadAndExecuteBatch'
62
- ) {
63
- $this->setRoundcubemailInstallPath($frame'args'0);
64
- }
65
- }
66
- }
67
-
68
- return $this->roundcubemailInstallPath;
69
- }
70
-
71
- #\Override
72
- public function getInstallPath(PackageInterface $package)
73
- {
74
- if (!$this->supports($package->getType())) {
75
- return parent::getInstallPath($package);
76
- }
77
-
78
- $vendorDir = $this->getVendorDir();
79
-
80
- return $vendorDir . \DIRECTORY_SEPARATOR
81
- . str_replace('/', \DIRECTORY_SEPARATOR, $this->getPackageName($package));
82
- }
83
-
84
- private function initializeRoundcubemailEnvironment(): void
85
- {
86
- if (!defined('INSTALL_PATH')) {
87
- define('INSTALL_PATH', $this->getRoundcubemailInstallPath() . '/');
88
- }
89
- require_once INSTALL_PATH . 'program/include/iniset.php';
90
- }
91
-
92
- #\Override
93
- public function isInstalled(InstalledRepositoryInterface $repo, PackageInterface $package)
94
- {
95
- $this->setRoundcubemailInstallPath($repo);
96
-
97
- return parent::isInstalled($repo, $package);
98
- }
99
-
100
- #\Override
101
- public function install(InstalledRepositoryInterface $repo, PackageInterface $package)
102
- {
103
- $this->setRoundcubemailInstallPath($repo);
104
- $this->initializeRoundcubemailEnvironment();
105
- $this->rcubeVersionCheck($package);
106
-
107
- $postInstall = function () use ($package) {
108
- $config_file = $this->rcubeConfigFile();
109
- $package_name = $this->getPackageName($package);
110
- $package_dir = $this->getInstallPath($package);
111
- $extra = $package->getExtra();
112
-
113
- if (is_writable($config_file) && \PHP_SAPI === 'cli' && $this->confirmInstall($package_name)) {
114
- $this->rcubeAlterConfig($package_name);
115
- }
116
-
117
- // copy config.inc.php.dist -> config.inc.php
118
- if (is_file($package_dir . \DIRECTORY_SEPARATOR . 'config.inc.php.dist')) {
119
- $config_exists = false;
120
- $alt_config_file = $this->rcubeConfigFile($package_name . '.inc.php');
121
-
122
- if (is_file($package_dir . \DIRECTORY_SEPARATOR . 'config.inc.php')) {
123
- $config_exists = true;
124
- } elseif (is_file($alt_config_file)) {
125
- $config_exists = true;
126
- }
127
-
128
- if (!$config_exists && is_writable($package_dir)) {
129
- $this->io->write('<info>Creating package config file</info>');
130
- copy($package_dir . \DIRECTORY_SEPARATOR . 'config.inc.php.dist', $package_dir . \DIRECTORY_SEPARATOR . 'config.inc.php');
131
- }
132
- }
133
-
134
- // initialize database schema
135
- if (!empty($extra'roundcube''sql-dir') && !getenv('SKIP_DB_INIT')) {
136
- if ($sqldir = realpath($package_dir . \DIRECTORY_SEPARATOR . $extra'roundcube''sql-dir')) {
137
- $this->io->write("<info>Running database initialization script for {$package_name}</info>");
138
-
139
- \rcmail_utils::db_init($sqldir);
140
- }
141
- }
142
-
143
- // run post-install script
144
- if (!empty($extra'roundcube''post-install-script')) {
145
- $this->rcubeRunScript($extra'roundcube''post-install-script', $package);
146
- }
147
- };
148
-
149
- $promise = parent::install($repo, $package);
150
-
151
- // Composer v2 might return a promise here
152
- if ($promise instanceof PromiseInterface) {
153
- return $promise->then($postInstall);
154
- }
155
-
156
- // If not, execute the code right away (composer v1, or v2 without async)
157
- $postInstall();
158
-
159
- return null;
160
- }
161
-
162
- #\Override
163
- public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target)
164
- {
165
- $this->setRoundcubemailInstallPath($repo);
166
- $this->initializeRoundcubemailEnvironment();
167
- $this->rcubeVersionCheck($target);
168
-
169
- $extra = $target->getExtra();
170
- $fs = new Filesystem();
171
-
172
- // backup persistent files e.g. config.inc.php
173
- $package_dir = $this->getInstallPath($initial);
174
- $temp_dir = $package_dir . '-' . sprintf('%010d%010d', mt_rand(), mt_rand());
175
-
176
- // make a backup of existing files (for restoring persistent files)
177
- $fs->copy($package_dir, $temp_dir);
178
-
179
- $postUpdate = function () use ($target, $extra, $fs, $temp_dir) {
180
- $package_name = $this->getPackageName($target);
181
- $package_dir = $this->getInstallPath($target);
182
-
183
- // restore persistent files
184
- $persistent_files = !empty($extra'roundcube''persistent-files')
185
- ? $extra'roundcube''persistent-files'
186
- : 'config.inc.php';
187
- foreach ($persistent_files as $file) {
188
- $path = $temp_dir . \DIRECTORY_SEPARATOR . $file;
189
- if (is_readable($path)) {
190
- if ($fs->copy($path, $package_dir . \DIRECTORY_SEPARATOR . $file)) {
191
- $this->io->write("<info>Restored {$package_name}/{$file}</info>");
192
- } else {
193
- throw new \Exception('Restoring ' . $file . ' failed.');
194
- }
195
- }
196
- }
197
- // remove backup folder
198
- $fs->remove($temp_dir);
199
-
200
- // update database schema
201
- if (!empty($extra'roundcube''sql-dir') && !getenv('SKIP_DB_UPDATE')) {
202
- if ($sqldir = realpath($package_dir . \DIRECTORY_SEPARATOR . $extra'roundcube''sql-dir')) {
203
- $this->io->write("<info>Updating database schema for {$package_name}</info>");
204
-
205
- \rcmail_utils::db_update($sqldir, $package_name);
206
- }
207
- }
208
-
209
- // run post-update script
210
- if (!empty($extra'roundcube''post-update-script')) {
211
- $this->rcubeRunScript($extra'roundcube''post-update-script', $target);
212
- }
213
- };
214
-
215
- $promise = parent::update($repo, $initial, $target);
216
-
217
- // Composer v2 might return a promise here
218
- if ($promise instanceof PromiseInterface) {
219
- return $promise->then($postUpdate);
220
- }
221
-
222
- // If not, execute the code right away (composer v1, or v2 without async)
223
- $postUpdate();
224
-
225
- return null;
226
- }
227
-
228
- #\Override
229
- public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package)
230
- {
231
- $this->setRoundcubemailInstallPath($repo);
232
- $this->initializeRoundcubemailEnvironment();
233
-
234
- $config = $this->composer->getConfig()->get('roundcube');
235
-
236
- $postUninstall = function () use ($package, $config) {
237
- // post-uninstall: deactivate package
238
- $package_name = $this->getPackageName($package);
239
- $package_dir = $this->getInstallPath($package);
240
-
241
- $this->rcubeAlterConfig($package_name, false);
242
-
243
- // run post-uninstall script
244
- $extra = $package->getExtra();
245
- if (!empty($extra'roundcube''post-uninstall-script')) {
246
- $this->rcubeRunScript($extra'roundcube''post-uninstall-script', $package);
247
- }
248
-
249
- // remove package folder
250
- if (!empty($config'uninstall-remove-folder')) {
251
- $fs = new Filesystem();
252
- $fs->remove($package_dir);
253
- $this->io->write("<info>Removed {$package_name} files</info>");
254
- }
255
- };
256
-
257
- $promise = parent::uninstall($repo, $package);
258
-
259
- // Composer v2 might return a promise here
260
- if ($promise instanceof PromiseInterface) {
261
- return $promise->then($postUninstall);
262
- }
263
-
264
- // If not, execute the code right away (composer v1, or v2 without async)
265
- $postUninstall();
266
-
267
- return null;
268
- }
269
-
270
- #\Override
271
- public function supports($packageType)
272
- {
273
- return $packageType === $this->composer_type;
274
- }
275
-
276
- /**
277
- * Setup vendor directory to one of these two:
278
- *
279
- * @return string
280
- */
281
- abstract public function getVendorDir();
282
-
283
- /**
284
- * Extract the (valid) package name from the package object.
285
- */
286
- protected function getPackageName(PackageInterface $package)
287
- {
288
- @$vendor, $packageName = explode('/', $package->getPrettyName());
289
-
290
- return strtr($packageName, '-', '_');
291
- }
292
-
293
- /**
294
- * Check version requirements from the "extra" block of a package
295
- * against the local Roundcube version.
296
- */
297
- private function rcubeVersionCheck($package)
298
- {
299
- // read rcube version from iniset
300
- $rcubeVersion = self::versionNormalize(RCMAIL_VERSION);
301
-
302
- $extra = $package->getExtra();
303
-
304
- if (!empty($extra'roundcube')) {
305
- foreach ('min-version' => '>=', 'max-version' => '<=' as $key => $operator) {
306
- if (!empty($extra'roundcube'$key)) {
307
- $version = self::versionNormalize($extra'roundcube'$key);
308
- if (!self::versionCompare($rcubeVersion, $version, $operator)) {
309
- throw new \Exception('Version check failed! ' . $package->getName() . " requires Roundcube version {$operator} {$version}, {$rcubeVersion} was detected.");
310
- }
311
- }
312
- }
313
- }
314
- }
315
-
316
- /**
317
- * Add or remove the given package to the Roundcube config.
318
- */
319
- private function rcubeAlterConfig($package_name, $add = true)
320
- {
321
- $config_file = $this->rcubeConfigFile();
322
- @include $config_file;
323
- $success = false;
324
- $varname = '$config';
325
-
326
- if (empty($config) && !empty($rcmail_config)) {
327
- $config = $rcmail_config;
328
- $varname = '$rcmail_config';
329
- }
330
-
331
- if (!empty($config) && is_writable($config_file)) {
332
- $config_template = @file_get_contents($config_file);
333
- if ($config_template === false) {
334
- $config_template = '';
335
- }
336
-
337
- if ($config = $this->getConfig($package_name, $config, $add)) {
338
- $config_name, $config_val = $config;
339
- $count = 0;
340
-
341
- if (empty($config_val)) {
342
- $new_config = preg_replace(
343
- "/(\\{$varname}\\'{$config_name}'\\)\\s+=\\s+(.+);/Uims",
344
- '',
345
- $config_template,
346
- -1,
347
- $count
348
- );
349
- } else {
350
- $new_config = preg_replace(
351
- "/(\\{$varname}\\'{$config_name}'\\)\\s+=\\s+(.+);/Uims",
352
- '\1 = ' . $config_val,
353
- $config_template,
354
- -1,
355
- $count
356
- );
357
- }
358
-
359
- // config option does not exist yet, add it...
360
- if (!$count) {
361
- $var_txt = "\n{$varname}'{$config_name}' = {$config_val}\n";
362
- $new_config = str_replace('?>', $var_txt . '?>', $config_template, $count);
363
-
364
- if (!$count) {
365
- $new_config = $config_template . $var_txt;
366
- }
367
- }
368
-
369
- $success = file_put_contents($config_file, $new_config);
370
- }
371
- }
372
-
373
- if ($success && \PHP_SAPI === 'cli') {
374
- $this->io->write("<info>Updated local config at {$config_file}</info>");
375
- }
376
-
377
- return $success;
378
- }
379
-
380
- /**
381
- * Ask the user to confirm installation.
382
- */
383
- protected function confirmInstall($package_name)
384
- {
385
- return false;
386
- }
387
-
388
- /**
389
- * Generate Roundcube config entry.
390
- */
391
- protected function getConfig($package_name, $cur_config, $add)
392
- {
393
- return false;
394
- }
395
-
396
- /**
397
- * Helper method to get an absolute path to the local Roundcube config file.
398
- */
399
- private function rcubeConfigFile($file = 'config.inc.php')
400
- {
401
- $config = new \rcube_config();
402
- $paths = $config->resolve_paths($file);
403
- $path = $this->getRoundcubemailInstallPath() . '/config/' . $file;
404
-
405
- foreach ($paths as $fpath) {
406
- if ($fpath && is_file($fpath) && is_readable($fpath)) {
407
- $path = $fpath;
408
-
409
- break;
410
- }
411
- }
412
-
413
- return realpath($path);
414
- }
415
-
416
- /**
417
- * Run the given script file.
418
- */
419
- private function rcubeRunScript($script, PackageInterface $package)
420
- {
421
- $package_name = $this->getPackageName($package);
422
- $package_type = $package->getType();
423
- $package_dir = $this->getInstallPath($package);
424
-
425
- // check for executable shell script
426
- if (($scriptfile = realpath($package_dir . \DIRECTORY_SEPARATOR . $script)) && is_executable($scriptfile)) {
427
- $script = $scriptfile;
428
- }
429
-
430
- // run PHP script in Roundcube context
431
- if ($scriptfile && preg_match('/\.php$/', $scriptfile)) {
432
- $incdir = realpath($this->getRoundcubemailInstallPath() . '/program/include');
433
- include_once $incdir . '/iniset.php';
434
- include $scriptfile;
435
- }
436
- // attempt to execute the given string as shell commands
437
- else {
438
- $process = new ProcessExecutor($this->io);
439
- $exitCode = $process->execute($script, $output, $package_dir);
440
- if ($exitCode !== 0) {
441
- throw new \RuntimeException('Error executing script: ' . $process->getErrorOutput(), $exitCode);
442
- }
443
- }
444
- }
445
-
446
- /**
447
- * Normalize Roundcube version string.
448
- */
449
- private static function versionNormalize(string $version): string
450
- {
451
- $parser = new VersionParser();
452
-
453
- return $parser->normalize(str_replace('-git', '.999', $version));
454
- }
455
-
456
- /**
457
- * version_compare() wrapper, originally from composer/semver.
458
- */
459
- private static function versionCompare($a, $b, $operator, $compareBranches = false)
460
- {
461
- $aIsBranch = substr($a, 0, 4) === 'dev-';
462
- $bIsBranch = substr($b, 0, 4) === 'dev-';
463
-
464
- if ($aIsBranch && $bIsBranch) {
465
- return $operator === '==' && $a === $b;
466
- }
467
-
468
- // when branches are not comparable, we make sure dev branches never match anything
469
- if (!$compareBranches && ($aIsBranch || $bIsBranch)) {
470
- return false;
471
- }
472
-
473
- return version_compare($a, $b, $operator);
474
- }
475
-}
476
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/src/PluginInstaller.php
Deleted
56
1
2
-<?php
3
-
4
-namespace Roundcube\Composer;
5
-
6
-class PluginInstaller extends ExtensionInstaller
7
-{
8
- protected $composer_type = 'roundcube-plugin';
9
-
10
- #\Override
11
- public function getVendorDir()
12
- {
13
- return $this->getRoundcubemailInstallPath() . \DIRECTORY_SEPARATOR . 'plugins';
14
- }
15
-
16
- #\Override
17
- protected function confirmInstall($package_name)
18
- {
19
- $config = $this->composer->getConfig()->get('roundcube');
20
-
21
- if (isset($config'enable-plugin')) {
22
- $answer = $config'enable-plugin';
23
- } else {
24
- $answer = $this->io->askConfirmation("Do you want to activate the plugin {$package_name}? Y|n ", true);
25
- }
26
-
27
- return $answer;
28
- }
29
-
30
- #\Override
31
- protected function getConfig($package_name, $config, $add)
32
- {
33
- $cur_config = !empty($config'plugins')
34
- ? ((array) $config'plugins')
35
- : ;
36
- $new_config = $cur_config;
37
-
38
- if ($add && !in_array($package_name, $new_config, true)) {
39
- $new_config = $package_name;
40
- } elseif (!$add && ($i = array_search($package_name, $new_config, true)) !== false) {
41
- unset($new_config$i);
42
- }
43
-
44
- if ($new_config !== $cur_config) {
45
- $config_val = count($new_config) > 0
46
- ? "\n\t'" . implode("',\n\t'", $new_config) . "',\n;"
47
- : ';';
48
- $result = 'plugins', $config_val;
49
- } else {
50
- $result = false;
51
- }
52
-
53
- return $result;
54
- }
55
-}
56
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/src/Roundcube
Added
2
1
+(directory)
2
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/src/Roundcube/Composer
Added
2
1
+(directory)
2
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/src/Roundcube/Composer/PluginInstaller.php
Added
336
1
2
+<?php
3
+
4
+namespace Roundcube\Composer;
5
+
6
+use Composer\Installer\LibraryInstaller;
7
+use Composer\Package\Version\VersionParser;
8
+use Composer\Package\PackageInterface;
9
+use Composer\Repository\InstalledRepositoryInterface;
10
+use Composer\Util\ProcessExecutor;
11
+use React\Promise\PromiseInterface;
12
+
13
+/**
14
+ * @category Plugins
15
+ * @package PluginInstaller
16
+ * @author Till Klampaeckel <till@php.net>
17
+ * @author Thomas Bruederli <thomas@roundcube.net>
18
+ * @license GPL-3.0+
19
+ * @version GIT: <git_id>
20
+ * @link http://github.com/roundcube/plugin-installer
21
+ */
22
+class PluginInstaller extends LibraryInstaller
23
+{
24
+ const INSTALLER_TYPE = 'roundcube-plugin';
25
+
26
+ /**
27
+ * {@inheritDoc}
28
+ */
29
+ public function getInstallPath(PackageInterface $package)
30
+ {
31
+ static $vendorDir;
32
+ if ($vendorDir === null) {
33
+ $vendorDir = $this->getVendorDir();
34
+ }
35
+
36
+ return sprintf('%s/%s', $vendorDir, $this->getPluginName($package));
37
+ }
38
+
39
+ /**
40
+ * {@inheritDoc}
41
+ */
42
+ public function install(InstalledRepositoryInterface $repo, PackageInterface $package)
43
+ {
44
+ $this->rcubeVersionCheck($package);
45
+
46
+ $self = $this;
47
+ $postInstall = function() use ($self, $package) {
48
+ // post-install: activate plugin in Roundcube config
49
+ $config_file = $self->rcubeConfigFile();
50
+ $plugin_name = $self->getPluginName($package);
51
+ $plugin_dir = $self->getVendorDir() . DIRECTORY_SEPARATOR . $plugin_name;
52
+ $extra = $package->getExtra();
53
+ $plugin_name = $self->getPluginName($package);
54
+
55
+ if (is_writeable($config_file) && php_sapi_name() == 'cli') {
56
+ $answer = $self->io->askConfirmation("Do you want to activate the plugin $plugin_name? Y|n ", true);
57
+ if ($answer === true) {
58
+ $self->rcubeAlterConfig($plugin_name, true);
59
+ }
60
+ }
61
+
62
+ // copy config.inc.php.dist -> config.inc.php
63
+ if (is_file($plugin_dir . DIRECTORY_SEPARATOR . 'config.inc.php.dist') && !is_file($plugin_dir . DIRECTORY_SEPARATOR . 'config.inc.php') && is_writeable($plugin_dir)) {
64
+ $self->io->write("<info>Creating plugin config file</info>");
65
+ copy($plugin_dir . DIRECTORY_SEPARATOR . 'config.inc.php.dist', $plugin_dir . DIRECTORY_SEPARATOR . 'config.inc.php');
66
+ }
67
+
68
+ // initialize database schema
69
+ if (!empty($extra'roundcube''sql-dir')) {
70
+ if ($sqldir = realpath($plugin_dir . DIRECTORY_SEPARATOR . $extra'roundcube''sql-dir')) {
71
+ $self->io->write("<info>Running database initialization script for $plugin_name</info>");
72
+ system(getcwd() . "/vendor/bin/rcubeinitdb.sh --package=$plugin_name --dir=$sqldir");
73
+ }
74
+ }
75
+
76
+ // run post-install script
77
+ if (!empty($extra'roundcube''post-install-script')) {
78
+ $self->rcubeRunScript($extra'roundcube''post-install-script', $package);
79
+ }
80
+ };
81
+
82
+ $promise = parent::install($repo, $package);
83
+
84
+ // Composer v2 might return a promise here
85
+ if ($promise instanceof PromiseInterface) {
86
+ return $promise->then($postInstall);
87
+ }
88
+
89
+ // If not, execute the code right away (composer v1, or v2 without async)
90
+ $postInstall();
91
+ }
92
+
93
+ /**
94
+ * {@inheritDoc}
95
+ */
96
+ public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target)
97
+ {
98
+ $this->rcubeVersionCheck($target);
99
+
100
+ $self = $this;
101
+ $postUpdate = function() use ($self, $target) {
102
+ $extra = $target->getExtra();
103
+
104
+ // trigger updatedb.sh
105
+ if (!empty($extra'roundcube''sql-dir')) {
106
+ $plugin_name = $self->getPluginName($target);
107
+ $plugin_dir = $self->getVendorDir() . DIRECTORY_SEPARATOR . $plugin_name;
108
+
109
+ if ($sqldir = realpath($plugin_dir . DIRECTORY_SEPARATOR . $extra'roundcube''sql-dir')) {
110
+ $self->io->write("<info>Updating database schema for $plugin_name</info>");
111
+ system(getcwd() . "/bin/updatedb.sh --package=$plugin_name --dir=$sqldir", $res);
112
+ }
113
+ }
114
+
115
+ // run post-update script
116
+ if (!empty($extra'roundcube''post-update-script')) {
117
+ $self->rcubeRunScript($extra'roundcube''post-update-script', $target);
118
+ }
119
+ };
120
+
121
+ $promise = parent::update($repo, $initial, $target);
122
+
123
+ // Composer v2 might return a promise here
124
+ if ($promise instanceof PromiseInterface) {
125
+ return $promise->then($postUpdate);
126
+ }
127
+
128
+ // If not, execute the code right away (composer v1, or v2 without async)
129
+ $postUpdate();
130
+ }
131
+
132
+ /**
133
+ * {@inheritDoc}
134
+ */
135
+ public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package)
136
+ {
137
+ $self = $this;
138
+ $postUninstall = function() use ($self, $package) {
139
+ // post-uninstall: deactivate plugin
140
+ $plugin_name = $self->getPluginName($package);
141
+ $self->rcubeAlterConfig($plugin_name, false);
142
+
143
+ // run post-uninstall script
144
+ $extra = $package->getExtra();
145
+ if (!empty($extra'roundcube''post-uninstall-script')) {
146
+ $self->rcubeRunScript($extra'roundcube''post-uninstall-script', $package);
147
+ }
148
+ };
149
+
150
+ $promise = parent::uninstall($repo, $package);
151
+
152
+ // Composer v2 might return a promise here
153
+ if ($promise instanceof PromiseInterface) {
154
+ return $promise->then($postUninstall);
155
+ }
156
+
157
+ // If not, execute the code right away (composer v1, or v2 without async)
158
+ $postUninstall();
159
+ }
160
+
161
+ /**
162
+ * {@inheritDoc}
163
+ */
164
+ public function supports($packageType)
165
+ {
166
+ return $packageType === self::INSTALLER_TYPE;
167
+ }
168
+
169
+ /**
170
+ * Setup vendor directory to one of these two:
171
+ * ./plugins
172
+ *
173
+ * @return string
174
+ */
175
+ public function getVendorDir()
176
+ {
177
+ $pluginDir = getcwd();
178
+ $pluginDir .= '/plugins';
179
+
180
+ return $pluginDir;
181
+ }
182
+
183
+ /**
184
+ * Extract the (valid) plugin name from the package object
185
+ */
186
+ private function getPluginName(PackageInterface $package)
187
+ {
188
+ @list($vendor, $pluginName) = explode('/', $package->getPrettyName());
189
+
190
+ return strtr($pluginName, '-', '_');
191
+ }
192
+
193
+ /**
194
+ * Check version requirements from the "extra" block of a package
195
+ * against the local Roundcube version
196
+ */
197
+ private function rcubeVersionCheck($package)
198
+ {
199
+ $parser = new VersionParser;
200
+
201
+ // read rcube version from iniset
202
+ $rootdir = getcwd();
203
+ $iniset = @file_get_contents($rootdir . '/program/include/iniset.php');
204
+ if (preg_match('/define\(.RCMAIL_VERSION.,\s*.(0-9.+a-z-*)?/', $iniset, $m)) {
205
+ $rcubeVersion = $parser->normalize(str_replace('-git', '.999', $m1));
206
+ } else {
207
+ throw new \Exception("Unable to find a Roundcube installation in $rootdir");
208
+ }
209
+
210
+ $extra = $package->getExtra();
211
+
212
+ if (!empty($extra'roundcube')) {
213
+ foreach (array('min-version' => '>=', 'max-version' => '<=') as $key => $operator) {
214
+ if (!empty($extra'roundcube'$key)) {
215
+ $version = $parser->normalize(str_replace('-git', '.999', $extra'roundcube'$key));
216
+ if (!self::versionCompare($rcubeVersion, $version, $operator)) {
217
+ throw new \Exception("Version check failed! " . $package->getName() . " requires Roundcube version $operator $version, $rcubeVersion was detected.");
218
+ }
219
+ }
220
+ }
221
+ }
222
+ }
223
+
224
+ /**
225
+ * Add or remove the given plugin to the list of active plugins in the Roundcube config.
226
+ */
227
+ private function rcubeAlterConfig($plugin_name, $add)
228
+ {
229
+ $config_file = $this->rcubeConfigFile();
230
+ @include($config_file);
231
+ $success = false;
232
+ $varname = '$config';
233
+
234
+ if (empty($config) && !empty($rcmail_config)) {
235
+ $config = $rcmail_config;
236
+ $varname = '$rcmail_config';
237
+ }
238
+
239
+ if (is_array($config) && is_writeable($config_file)) {
240
+ $config_templ = @file_get_contents($config_file) ?: '';
241
+ $config_plugins = !empty($config'plugins') ? ((array) $config'plugins') : array();
242
+ $active_plugins = $config_plugins;
243
+
244
+ if ($add && !in_array($plugin_name, $active_plugins)) {
245
+ $active_plugins = $plugin_name;
246
+ } elseif (!$add && ($i = array_search($plugin_name, $active_plugins)) !== false) {
247
+ unset($active_plugins$i);
248
+ }
249
+
250
+ if ($active_plugins != $config_plugins) {
251
+ $count = 0;
252
+ $var_export = "array(\n\t'" . join("',\n\t'", $active_plugins) . "',\n);";
253
+ $new_config = preg_replace(
254
+ "/(\\$varname\'plugins'\)\s+=\s+(.+);/Uims",
255
+ "\\1 = " . $var_export,
256
+ $config_templ, -1, $count);
257
+
258
+ // 'plugins' option does not exist yet, add it...
259
+ if (!$count) {
260
+ $var_txt = "\n{$varname}'plugins' = $var_export;\n";
261
+ $new_config = str_replace('?>', $var_txt . '?>', $config_templ, $count);
262
+
263
+ if (!$count) {
264
+ $new_config = $config_templ . $var_txt;
265
+ }
266
+ }
267
+
268
+ $success = file_put_contents($config_file, $new_config);
269
+ }
270
+ }
271
+
272
+ if ($success && php_sapi_name() == 'cli') {
273
+ $this->io->write("<info>Updated local config at $config_file</info>");
274
+ }
275
+
276
+ return $success;
277
+ }
278
+
279
+ /**
280
+ * Helper method to get an absolute path to the local Roundcube config file
281
+ */
282
+ private function rcubeConfigFile()
283
+ {
284
+ return realpath(getcwd() . '/config/config.inc.php');
285
+ }
286
+
287
+ /**
288
+ * Run the given script file
289
+ */
290
+ private function rcubeRunScript($script, PackageInterface $package)
291
+ {
292
+ $plugin_name = $this->getPluginName($package);
293
+ $plugin_dir = $this->getVendorDir() . DIRECTORY_SEPARATOR . $plugin_name;
294
+
295
+ // check for executable shell script
296
+ if (($scriptfile = realpath($plugin_dir . DIRECTORY_SEPARATOR . $script)) && is_executable($scriptfile)) {
297
+ $script = $scriptfile;
298
+ }
299
+
300
+ // run PHP script in Roundcube context
301
+ if ($scriptfile && preg_match('/\.php$/', $scriptfile)) {
302
+ $incdir = realpath(getcwd() . '/program/include');
303
+ include_once($incdir . '/iniset.php');
304
+ include($scriptfile);
305
+ }
306
+ // attempt to execute the given string as shell commands
307
+ else {
308
+ $process = new ProcessExecutor($this->io);
309
+ $exitCode = $process->execute($script, $output, $plugin_dir);
310
+ if ($exitCode !== 0) {
311
+ throw new \RuntimeException('Error executing script: '. $process->getErrorOutput(), $exitCode);
312
+ }
313
+ }
314
+ }
315
+
316
+ /**
317
+ * version_compare() wrapper, originally from composer/semver
318
+ */
319
+ private static function versionCompare($a, $b, $operator, $compareBranches = false)
320
+ {
321
+ $aIsBranch = 'dev-' === substr($a, 0, 4);
322
+ $bIsBranch = 'dev-' === substr($b, 0, 4);
323
+
324
+ if ($aIsBranch && $bIsBranch) {
325
+ return $operator === '==' && $a === $b;
326
+ }
327
+
328
+ // when branches are not comparable, we make sure dev branches never match anything
329
+ if (!$compareBranches && ($aIsBranch || $bIsBranch)) {
330
+ return false;
331
+ }
332
+
333
+ return version_compare($a, $b, $operator);
334
+ }
335
+}
336
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/src/RoundcubeInstaller.php
Deleted
36
1
2
-<?php
3
-
4
-namespace Roundcube\Composer;
5
-
6
-use Composer\Composer;
7
-use Composer\IO\IOInterface;
8
-use Composer\Plugin\PluginInterface;
9
-
10
-class RoundcubeInstaller implements PluginInterface
11
-{
12
- private $extentions = PluginInstaller::class, SkinInstaller::class;
13
- private $installers = ;
14
-
15
- #\Override
16
- public function activate(Composer $composer, IOInterface $io)
17
- {
18
- foreach ($this->extentions as $extension) {
19
- $installer = new $extension($io, $composer);
20
- $composer->getInstallationManager()->addInstaller($installer);
21
- $this->installers = $installer;
22
- }
23
- }
24
-
25
- #\Override
26
- public function deactivate(Composer $composer, IOInterface $io)
27
- {
28
- foreach ($this->installers as $installer) {
29
- $composer->getInstallationManager()->removeInstaller($installer);
30
- }
31
- }
32
-
33
- #\Override
34
- public function uninstall(Composer $composer, IOInterface $io) {}
35
-}
36
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/src/SkinInstaller.php
Deleted
56
1
2
-<?php
3
-
4
-namespace Roundcube\Composer;
5
-
6
-class SkinInstaller extends ExtensionInstaller
7
-{
8
- protected $composer_type = 'roundcube-skin';
9
-
10
- #\Override
11
- public function getVendorDir()
12
- {
13
- return $this->getRoundcubemailInstallPath() . \DIRECTORY_SEPARATOR . 'skins';
14
- }
15
-
16
- #\Override
17
- protected function confirmInstall($package_name)
18
- {
19
- $config = $this->composer->getConfig()->get('roundcube');
20
-
21
- if (isset($config'enable-skin')) {
22
- $answer = $config'enable-skin';
23
- } else {
24
- $answer = $this->io->askConfirmation("Do you want to activate the skin {$package_name}? Y|n ", true);
25
- }
26
-
27
- return $answer;
28
- }
29
-
30
- #\Override
31
- protected function getConfig($package_name, $config, $add)
32
- {
33
- $cur_config = !empty($config'skin')
34
- ? $config'skin'
35
- : null;
36
- $new_config = $cur_config;
37
-
38
- if ($add && $new_config !== $package_name) {
39
- $new_config = $package_name;
40
- } elseif (!$add && $new_config === $package_name) {
41
- $new_config = null;
42
- }
43
-
44
- if ($new_config !== $cur_config) {
45
- $config_val = !empty($new_config)
46
- ? "'{$new_config}';"
47
- : null;
48
- $result = 'skin', $config_val;
49
- } else {
50
- $result = false;
51
- }
52
-
53
- return $result;
54
- }
55
-}
56
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/src/bin
Added
2
1
+(directory)
2
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/src/bin/rcubeinitdb.sh
Added
132
1
2
+#!/usr/bin/env php
3
+<?php
4
+
5
+define('INSTALL_PATH', getcwd() . '/' );
6
+
7
+require_once INSTALL_PATH . 'program/include/clisetup.php';
8
+
9
+// get arguments
10
+$opts = rcube_utils::get_opt(array(
11
+ 'd' => 'dir',
12
+ 'p' => 'package',
13
+));
14
+
15
+if (empty($opts'dir')) {
16
+ rcube::raise_error("Database schema directory not specified (--dir).", false, true);
17
+}
18
+if (empty($opts'package')) {
19
+ rcube::raise_error("Database schema package name not specified (--package).", false, true);
20
+}
21
+
22
+// Check if directory exists
23
+if (!file_exists($opts'dir')) {
24
+ rcube::raise_error("Specified database schema directory doesn't exist.", false, true);
25
+}
26
+
27
+$RC = rcube::get_instance();
28
+$DB = rcube_db::factory($RC->config->get('db_dsnw'));
29
+
30
+// Connect to database
31
+$DB->db_connect('w');
32
+if (!$DB->is_connected()) {
33
+ rcube::raise_error("Error connecting to database: " . $DB->is_error(), false, true);
34
+}
35
+
36
+$opts'dir' = rtrim($opts'dir', DIRECTORY_SEPARATOR);
37
+$file = $opts'dir' . DIRECTORY_SEPARATOR . $DB->db_provider . '.initial.sql';
38
+if (!file_exists($file)) {
39
+ rcube::raise_error("No DDL file found for " . $DB->db_provider . " driver.", false, true);
40
+}
41
+
42
+$package = $opts'package';
43
+$error = false;
44
+
45
+// read DDL file
46
+if ($lines = file($file)) {
47
+ $sql = '';
48
+ foreach ($lines as $line) {
49
+ if (preg_match('/^--/', $line) || trim($line) == '')
50
+ continue;
51
+
52
+ $sql .= $line . "\n";
53
+ if (preg_match('/(;|^GO)$/', trim($line))) {
54
+ @$DB->query(fix_table_names($sql));
55
+ $sql = '';
56
+ if ($error = $DB->is_error()) {
57
+ break;
58
+ }
59
+ }
60
+ }
61
+}
62
+
63
+if (!$error) {
64
+ $version = date('Ymd00');
65
+ $system_table = $DB->quote_identifier($DB->table_name('system'));
66
+ $name_col = $DB->quote_identifier('name');
67
+ $value_col = $DB->quote_identifier('value');
68
+ $package_version = $package . '-version';
69
+
70
+ $DB->query("SELECT * FROM $system_table WHERE $name_col=?",
71
+ $package_version);
72
+
73
+ if ($DB->fetch_assoc()) {
74
+ $DB->query("UPDATE $system_table SET $value_col=? WHERE $name_col=?",
75
+ $version, $package_version);
76
+ }
77
+ else {
78
+ $DB->query("INSERT INTO $system_table ($name_col, $value_col) VALUES (?, ?)",
79
+ $package_version, $version);
80
+ }
81
+
82
+ $error = $DB->is_error();
83
+}
84
+
85
+if ($error) {
86
+ echo "FAILED\n";
87
+ rcube::raise_error("Error in DDL schema $file: $error", false, true);
88
+}
89
+echo "OK\n";
90
+
91
+
92
+function fix_table_names($sql)
93
+{
94
+ global $DB, $RC;
95
+
96
+ $prefix = $RC->config->get('db_prefix');
97
+ $engine = $DB->db_provider;
98
+
99
+ if (empty($prefix)) {
100
+ return $sql;
101
+ }
102
+
103
+ $tables = array();
104
+ $sequences = array();
105
+
106
+ // find table names
107
+ if (preg_match_all('/CREATE TABLE (\dbo\\.|IF NOT EXISTS )?`"\\*(^`"\\ \r\n+)/i', $sql, $matches)) {
108
+ foreach ($matches2 as $table) {
109
+ $tables$table = $prefix . $table;
110
+ }
111
+ }
112
+ // find sequence names
113
+ if ($engine == 'postgres' && preg_match_all('/CREATE SEQUENCE (IF NOT EXISTS )?"?(^" \n\r+)/i', $sql, $matches)) {
114
+ foreach ($matches2 as $sequence) {
115
+ $sequences$sequence = $prefix . $sequence;
116
+ }
117
+ }
118
+
119
+ // replace table names
120
+ foreach ($tables as $table => $real_table) {
121
+ $sql = preg_replace("/(^a-zA-Z0-9_)$table(^a-zA-Z0-9_)/", "\\1$real_table\\2", $sql);
122
+ }
123
+ // replace sequence names
124
+ foreach ($sequences as $sequence => $real_sequence) {
125
+ $sql = preg_replace("/(^a-zA-Z0-9_)$sequence(^a-zA-Z0-9_)/", "\\1$real_sequence\\2", $sql);
126
+ }
127
+
128
+ return $sql;
129
+}
130
+
131
+?>
132
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/test-composer
Deleted
2
1
-(directory)
2
roundcubemail-1.6.tar.gz/vendor/roundcube/plugin-installer/test-composer/composer.json
Deleted
25
1
2
-{
3
- "name": "roundcube/plugin-installer-test",
4
- "require": {
5
- "roundcube/carddav": "^4 || ^5"
6
- },
7
- "repositories":
8
- {
9
- "type": "git",
10
- "url": "https://github.com/roundcube/roundcubemail.git"
11
- },
12
- {
13
- "type": "path",
14
- "url": ".."
15
- }
16
- ,
17
- "minimum-stability": "dev",
18
- "prefer-stable": true,
19
- "config": {
20
- "allow-plugins": {
21
- "roundcube/plugin-installer": true
22
- }
23
- }
24
-}
25
roundcubemail-1.6.tar.gz/vendor/sabre/uri/.php-cs-fixer.dist.php
Deleted
20
1
2
-<?php
3
-
4
-$finder = PhpCsFixer\Finder::create()
5
- ->exclude('vendor')
6
- ->in(__DIR__);
7
-
8
-$config = new PhpCsFixer\Config();
9
-$config->setRules(
10
- '@PSR1' => true,
11
- '@Symfony' => true,
12
- 'nullable_type_declaration' =>
13
- 'syntax' => 'question_mark',
14
- ,
15
- 'nullable_type_declaration_for_default_null_value' => true,
16
-);
17
-$config->setFinder($finder);
18
-return $config;
19
\ No newline at end of file
20
roundcubemail-1.6.tar.gz/vendor/sabre/uri/composer.json
Changed
37
1
2
"homepage": "http://sabre.io/uri/",
3
"license": "BSD-3-Clause",
4
"require": {
5
- "php": "^7.4 || ^8.0"
6
+ "php": "^7.1 || ^8.0"
7
},
8
"authors":
9
{
10
11
}
12
},
13
"require-dev": {
14
- "friendsofphp/php-cs-fixer": "^3.63",
15
- "phpstan/phpstan": "^1.12",
16
- "phpstan/phpstan-phpunit": "^1.4",
17
- "phpstan/phpstan-strict-rules": "^1.6",
18
- "phpstan/extension-installer": "^1.4",
19
- "phpunit/phpunit" : "^9.6"
20
+ "friendsofphp/php-cs-fixer": "~2.19.3",
21
+ "phpstan/phpstan": "^0.12",
22
+ "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.0"
23
},
24
"scripts": {
25
"phpstan":
26
27
"composer cs-fixer",
28
"composer phpunit"
29
30
- },
31
- "config": {
32
- "allow-plugins": {
33
- "phpstan/extension-installer": true
34
- }
35
}
36
}
37
roundcubemail-1.6.tar.gz/vendor/sabre/uri/lib/Version.php
Changed
8
1
2
/**
3
* Full version number.
4
*/
5
- public const VERSION = '2.3.4';
6
+ const VERSION = '2.2.4';
7
}
8
roundcubemail-1.6.tar.gz/vendor/sabre/uri/lib/functions.php
Changed
316
1
2
3
// If the new path defines a scheme, it's absolute and we can just return
4
// that.
5
- if (null !== $delta'scheme') {
6
+ if ($delta'scheme') {
7
return build($delta);
8
}
9
10
$base = parse($basePath);
11
$pick = function ($part) use ($base, $delta) {
12
- if (null !== $delta$part) {
13
+ if ($delta$part) {
14
return $delta$part;
15
- } elseif (null !== $base$part) {
16
+ } elseif ($base$part) {
17
return $base$part;
18
}
19
20
21
$newParts'host' = $pick('host');
22
$newParts'port' = $pick('port');
23
24
+ $path = '';
25
if (is_string($delta'path') and strlen($delta'path') > 0) {
26
// If the path starts with a slash
27
if ('/' === $delta'path'0) {
28
$path = $delta'path';
29
} else {
30
// Removing last component from base path.
31
- $path = (string) $base'path';
32
- $length = strrpos($path, '/');
33
+ $path = $base'path';
34
+ $length = strrpos((string) $path, '/');
35
if (false !== $length) {
36
$path = substr($path, 0, $length);
37
}
38
$path .= '/'.$delta'path';
39
}
40
} else {
41
- $path = $base'path' ?? '/';
42
- if ('' === $path) {
43
- $path = '/';
44
- }
45
+ $path = $base'path' ?: '/';
46
}
47
// Removing .. and .
48
$pathParts = explode('/', $path);
49
$newPathParts = ;
50
foreach ($pathParts as $pathPart) {
51
switch ($pathPart) {
52
- // case '' :
53
+ //case '' :
54
case '.':
55
break;
56
case '..':
57
58
59
// If the source url ended with a /, we want to preserve that.
60
$newParts'path' = 0 === strpos($path, '/') ? $path : '/'.$path;
61
- // From PHP 8, no "?" query at all causes 'query' to be null.
62
- // An empty query "http://example.com/foo?" causes 'query' to be the empty string
63
- if (null !== $delta'query' && '' !== $delta'query') {
64
+ if ($delta'query') {
65
$newParts'query' = $delta'query';
66
- } elseif (isset($base'query') && null === $delta'host' && null === $delta'path') {
67
+ } elseif (!empty($base'query') && empty($delta'host') && empty($delta'path')) {
68
// Keep the old query if host and path didn't change
69
$newParts'query' = $base'query';
70
}
71
- // From PHP 8, no "#" fragment at all causes 'fragment' to be null.
72
- // An empty fragment "http://example.com/foo#" causes 'fragment' to be the empty string
73
- if (null !== $delta'fragment' && '' !== $delta'fragment') {
74
+ if ($delta'fragment') {
75
$newParts'fragment' = $delta'fragment';
76
}
77
78
79
{
80
$parts = parse($uri);
81
82
- if (null !== $parts'path') {
83
+ if (!empty($parts'path')) {
84
$pathParts = explode('/', ltrim($parts'path', '/'));
85
$newPathParts = ;
86
foreach ($pathParts as $pathPart) {
87
88
$parts'path' = '/'.implode('/', $newPathParts);
89
}
90
91
- if (null !== $parts'scheme') {
92
+ if ($parts'scheme') {
93
$parts'scheme' = strtolower($parts'scheme');
94
$defaultPorts =
95
'http' => '80',
96
'https' => '443',
97
;
98
99
- if (null !== $parts'port' && isset($defaultPorts$parts'scheme') && $defaultPorts$parts'scheme' == $parts'port') {
100
+ if (!empty($parts'port') && isset($defaultPorts$parts'scheme') && $defaultPorts$parts'scheme' == $parts'port') {
101
// Removing default ports.
102
unset($parts'port');
103
}
104
105
switch ($parts'scheme') {
106
case 'http':
107
case 'https':
108
- if (null === $parts'path') {
109
+ if (empty($parts'path')) {
110
// An empty path is equivalent to / in http.
111
$parts'path' = '/';
112
}
113
114
}
115
}
116
117
- if (null !== $parts'host') {
118
+ if ($parts'host') {
119
$parts'host' = strtolower($parts'host');
120
}
121
122
123
* Unlike PHP's parse_url, it will also convert any non-ascii characters to
124
* percent-encoded strings. PHP's parse_url corrupts these characters on OS X.
125
*
126
- * In the return array, key "port" is an int value. Other keys have a string value.
127
- * "Unused" keys have value null.
128
- *
129
- * @return array{scheme: string|null, host: string|null, path: string|null, port: positive-int|null, user: string|null, query: string|null, fragment: string|null}
130
+ * @return array<string, string>
131
*
132
* @throws InvalidUriException
133
*/
134
function parse(string $uri): array
135
{
136
- // Normally a URI must be ASCII. However, often it's not and
137
+ // Normally a URI must be ASCII, however. However, often it's not and
138
// parse_url might corrupt these strings.
139
//
140
// For that reason we take any non-ascii characters from the uri and
141
142
$uri
143
);
144
145
- if (null === $uri) {
146
- throw new InvalidUriException('Invalid, or could not parse URI');
147
- }
148
-
149
$result = parse_url($uri);
150
- if (false === $result) {
151
+ if (!$result) {
152
$result = _parse_fallback($uri);
153
}
154
155
- /*
156
- * phpstan is not able to process all the things that happen while this function
157
- * constructs the result array. It only understands the $result is
158
- * non-empty-array<string, mixed>
159
- *
160
- * But the detail of the returned array is correctly specified in the PHPdoc
161
- * above the function call.
162
- *
163
- * @phpstan-ignore-next-line
164
- */
165
return
166
$result +
167
- 'scheme' => null,
168
- 'host' => null,
169
- 'path' => null,
170
- 'port' => null,
171
- 'user' => null,
172
- 'query' => null,
173
- 'fragment' => null,
174
- ;
175
+ 'scheme' => null,
176
+ 'host' => null,
177
+ 'path' => null,
178
+ 'port' => null,
179
+ 'user' => null,
180
+ 'query' => null,
181
+ 'fragment' => null,
182
+ ;
183
}
184
185
/**
186
187
$uri = '';
188
189
$authority = '';
190
- if (isset($parts'host')) {
191
+ if (!empty($parts'host')) {
192
$authority = $parts'host';
193
- if (isset($parts'user')) {
194
+ if (!empty($parts'user')) {
195
$authority = $parts'user'.'@'.$authority;
196
}
197
- if (isset($parts'port')) {
198
+ if (!empty($parts'port')) {
199
$authority = $authority.':'.$parts'port';
200
}
201
}
202
203
- if (isset($parts'scheme')) {
204
+ if (!empty($parts'scheme')) {
205
// If there's a scheme, there's also a host.
206
$uri = $parts'scheme'.':';
207
}
208
- if ('' !== $authority || (isset($parts'scheme') && 'file' === $parts'scheme')) {
209
+ if ($authority || (!empty($parts'scheme') && 'file' === $parts'scheme')) {
210
// No scheme, but there is a host.
211
$uri .= '//'.$authority;
212
}
213
214
- if (isset($parts'path')) {
215
+ if (!empty($parts'path')) {
216
$uri .= $parts'path';
217
}
218
- if (isset($parts'query')) {
219
+ if (!empty($parts'query')) {
220
$uri .= '?'.$parts'query';
221
}
222
- if (isset($parts'fragment')) {
223
+ if (!empty($parts'fragment')) {
224
$uri .= '#'.$parts'fragment';
225
}
226
227
228
function split(string $path): array
229
{
230
$matches = ;
231
- if (1 === preg_match('/^(?:(?:(.*)(?:\/+))?(^\/+))(?:\/?)$/u', $path, $matches)) {
232
+ if (preg_match('/^(?:(?:(.*)(?:\/+))?(^\/+))(?:\/?)$/u', $path, $matches)) {
233
return $matches1, $matches2;
234
}
235
236
237
* This function is only called if the main parse method fails. It's pretty
238
* crude and probably slow, so the original parse_url is usually preferred.
239
*
240
- * @return array{scheme: string|null, host: string|null, path: string|null, port: positive-int|null, user: string|null, query: string|null, fragment: string|null}
241
+ * @return array<string, mixed>
242
*
243
* @throws InvalidUriException
244
*/
245
246
$uri
247
);
248
249
- if (null === $uri) {
250
- throw new InvalidUriException('Invalid, or could not parse URI');
251
- }
252
-
253
$result =
254
'scheme' => null,
255
'host' => null,
256
257
'query' => null,
258
;
259
260
- if (1 === preg_match('% ^(A-Za-zA-Za-z0-9+-\.+): %x', $uri, $matches)) {
261
+ if (preg_match('% ^(A-Za-zA-Za-z0-9+-\.+): %x', $uri, $matches)) {
262
$result'scheme' = $matches1;
263
// Take what's left.
264
$uri = substr($uri, strlen($result'scheme') + 1);
265
- if (false === $uri) {
266
- // There was nothing left.
267
- $uri = '';
268
- }
269
}
270
271
// Taking off a fragment part
272
273
if ('///' === substr($uri, 0, 3)) {
274
// The triple slash uris are a bit unusual, but we have special handling
275
// for them.
276
- $path = substr($uri, 2);
277
- if (false === $path) {
278
- throw new \RuntimeException('The string cannot be false');
279
- }
280
- $result'path' = $path;
281
+ $result'path' = substr($uri, 2);
282
$result'host' = '';
283
} elseif ('//' === substr($uri, 0, 2)) {
284
// Uris that have an authority part.
285
286
(?: : (?<port> 0-9+))?
287
(?<path> / .*)?
288
$%x';
289
- if (1 !== preg_match($regex, $uri, $matches)) {
290
+ if (!preg_match($regex, $uri, $matches)) {
291
throw new InvalidUriException('Invalid, or could not parse URI');
292
}
293
- if (isset($matches'host') && '' !== $matches'host') {
294
+ if ($matches'host') {
295
$result'host' = $matches'host';
296
}
297
if (isset($matches'port')) {
298
- $port = (int) $matches'port';
299
- if ($port > 0) {
300
- $result'port' = $port;
301
- }
302
+ $result'port' = (int) $matches'port';
303
}
304
if (isset($matches'path')) {
305
$result'path' = $matches'path';
306
}
307
- if (isset($matches'user') && '' !== $matches'user') {
308
+ if ($matches'user') {
309
$result'user' = $matches'user';
310
}
311
- if (isset($matches'pass') && '' !== $matches'pass') {
312
+ if ($matches'pass') {
313
$result'pass' = $matches'pass';
314
}
315
} else {
316
roundcubemail.dsc
Changed
10
1
2
Source: roundcubemail
3
Binary: roundcubemail
4
Architecture: all
5
-Version: 1:1.6.9.7-1~kolab1
6
+Version: 1:1.6.9.3-1~kolab1
7
Maintainer: Jeroen van Meeuwen <vanmeeuwen@kolabsys.com>
8
Uploaders: Jeroen van Meeuwen <vanmeeuwen@kolabsys.com>
9
Homepage: http://www.roundcube.net/
10
Refresh
roundcubemail-selfcontained
x86_64
x86_64
x86_64
x86_64
ppc64le
x86_64
x86_64
x86_64
x86_64
x86_64
x86_64
x86_64
x86_64
x86_64
ppc64le
x86_64
x86_64
x86_64
x86_64
x86_64
x86_64
x86_64
x86_64
Refresh
Login required, please
login
in order to comment
Request History
mollekopf created request 3 months ago
New release 1.6.9.3
mollekopf superseded request 3 months ago
superseded by 3333