Overview

Request 3332 (superseded)

New release 1.6.9.3


roundcubemail.spec Changed
x
 
1
@@ -57,7 +57,7 @@
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
@@ -1,5 +1,5 @@
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
@@ -22,7 +22,7 @@
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
@@ -179,7 +179,7 @@
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
@@ -188,9 +188,8 @@
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
@@ -261,7 +260,7 @@
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
@@ -1,4 +1,4 @@
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,7 +2,6 @@
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
@@ -4,7 +4,7 @@
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
@@ -161,7 +161,7 @@
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
@@ -170,9 +170,8 @@
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
@@ -4,7 +4,7 @@
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
@@ -266,20 +266,20 @@
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
@@ -313,9 +313,9 @@
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
@@ -1204,11 +1204,11 @@
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
@@ -2800,77 +2800,40 @@
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
@@ -2880,18 +2843,14 @@
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
@@ -3161,28 +3120,25 @@
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
@@ -3217,7 +3173,7 @@
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
@@ -4543,51 +4499,6 @@
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
@@ -4834,35 +4745,28 @@
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
@@ -4886,45 +4790,37 @@
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
@@ -4950,9 +4846,9 @@
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
@@ -5022,64 +4918,17 @@
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
@@ -5124,7 +4973,7 @@
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
@@ -6401,17 +6250,16 @@
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
@@ -0,0 +1,18 @@
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
@@ -1,71 +0,0 @@
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
@@ -4,7 +4,7 @@
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
@@ -1,4 +0,0 @@
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
@@ -1,4 +0,0 @@
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
@@ -1,102 +0,0 @@
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
@@ -1,196 +0,0 @@
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
@@ -1,394 +0,0 @@
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
@@ -1,27 +0,0 @@
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
@@ -1,268 +0,0 @@
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
@@ -393,7 +393,7 @@
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
@@ -684,8 +684,7 @@
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
@@ -694,7 +693,7 @@
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
@@ -57,12 +57,12 @@
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
@@ -77,11 +77,13 @@
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
@@ -0,0 +1,110 @@
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
@@ -26,6 +26,7 @@
2
     private $backend;
3
     private $plugin;
4
     private $rc;
5
+    private $taglist;
6
 
7
     /**
8
      * Class constructor
9
@@ -34,16 +35,11 @@
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
@@ -149,6 +145,7 @@
30
             $this->rc->output->command('plugin.kolab_tags', $response);
31
         }
32
 
33
+
34
         $this->rc->output->send();
35
     }
36
 
37
@@ -157,24 +154,65 @@
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
@@ -189,33 +227,49 @@
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
@@ -253,6 +307,12 @@
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
@@ -270,7 +330,30 @@
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
@@ -282,22 +365,23 @@
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
@@ -318,7 +402,6 @@
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
@@ -327,27 +410,34 @@
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
@@ -355,8 +445,8 @@
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
@@ -364,7 +454,7 @@
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
@@ -398,13 +488,62 @@
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
@@ -17,8 +17,8 @@
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
@@ -401,7 +401,6 @@
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
@@ -14,7 +14,6 @@
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
@@ -262,7 +262,7 @@
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
@@ -777,7 +777,7 @@
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
@@ -866,7 +866,7 @@
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
@@ -946,42 +946,40 @@
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
@@ -80,7 +80,7 @@
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
@@ -100,7 +100,7 @@
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
@@ -448,7 +448,7 @@
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
@@ -558,9 +558,7 @@
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
@@ -413,7 +413,7 @@
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
@@ -454,7 +454,7 @@
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
@@ -1,474 +0,0 @@
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
@@ -93,6 +93,7 @@
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
@@ -1,1 +1,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
@@ -93,6 +93,7 @@
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
@@ -1,1 +1,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
@@ -93,6 +93,7 @@
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
@@ -1,1 +1,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
@@ -37,7 +37,6 @@
2
     private $lists;
3
     private $folders = ;
4
     private $tasks   = ;
5
-    private $tags    = ;
6
     private $bonnie_api = false;
7
 
8
 
9
@@ -452,7 +451,7 @@
10
      */
11
     public function get_tags()
12
     {
13
-        return $this->tags;
14
+        return ;
15
     }
16
 
17
     /**
18
@@ -1131,13 +1130,9 @@
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
@@ -1274,9 +1269,7 @@
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
@@ -1543,6 +1536,15 @@
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
@@ -1554,6 +1556,16 @@
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
@@ -1304,7 +1304,7 @@
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
@@ -1894,7 +1894,7 @@
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
@@ -2606,8 +2606,6 @@
20
             $this->set_search_dirty($folder);
21
         }
22
 
23
-        unset($this->icache'message');
24
-
25
         return $result;
26
     }
27
 
28
@@ -2724,9 +2722,8 @@
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
@@ -2816,9 +2813,8 @@
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
@@ -2890,31 +2886,6 @@
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
@@ -3953,15 +3924,6 @@
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
@@ -2528,7 +2528,6 @@
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
@@ -2560,21 +2559,6 @@
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
@@ -2710,15 +2694,14 @@
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
@@ -2743,13 +2726,12 @@
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
@@ -3778,60 +3760,6 @@
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
@@ -209,13 +209,6 @@
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
@@ -1,37 +0,0 @@
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
@@ -1,444 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,7 +0,0 @@
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
@@ -1,55 +0,0 @@
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
@@ -1,44 +0,0 @@
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
@@ -1,51 +0,0 @@
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
@@ -1,9 +0,0 @@
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
@@ -1,36 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,108 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,8 +0,0 @@
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
@@ -1,5 +0,0 @@
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
@@ -1,44 +0,0 @@
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 &amp;&amp; !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 &amp;&amp; !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
@@ -1,11 +0,0 @@
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
@@ -1,66 +0,0 @@
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
@@ -1,9 +0,0 @@
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
@@ -1,1557 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,6 +0,0 @@
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
@@ -1,124 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,30 +0,0 @@
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="&#9881;" 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
@@ -1,188 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,21 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,91 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,40 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,15 +0,0 @@
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
@@ -1,30 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,1540 +0,0 @@
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
@@ -1,556 +0,0 @@
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
@@ -1,6 +0,0 @@
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
@@ -1,432 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,105 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,544 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,62 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,29 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,86 +0,0 @@
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="&#9881;" 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="&#9881;" 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
@@ -1,23 +0,0 @@
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
@@ -1,23 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,37 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,14 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,206 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,394 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,3200 +0,0 @@
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
@@ -1,1 +0,0 @@
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
@@ -1,21 +0,0 @@
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
@@ -1,162 +0,0 @@
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
@@ -1,46 +0,0 @@
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
@@ -1,241 +0,0 @@
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
@@ -1,32 +0,0 @@
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
@@ -1,47 +0,0 @@
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
@@ -1,20 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,18 +0,0 @@
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
@@ -1,24 +0,0 @@
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()" />&nbsp;
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
@@ -1,68 +0,0 @@
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="&#9881;" 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
@@ -1,40 +0,0 @@
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
@@ -1,21 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,54 +0,0 @@
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 &gt; 0" /> <roundcube:object name="version" condition="config:display_product_info == 2" />
30
-   <roundcube:if condition="config:support_url" />
31
-       &nbsp;&#9679;&nbsp; <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
@@ -1,270 +0,0 @@
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="&#9881;" 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
-       &nbsp; <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
@@ -1,111 +0,0 @@
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
@@ -1,55 +0,0 @@
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
@@ -1,90 +0,0 @@
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
@@ -1,81 +0,0 @@
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
-   &nbsp;
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
-   &nbsp;
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
-   &nbsp;
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
@@ -1,19 +0,0 @@
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
@@ -1,27 +0,0 @@
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
@@ -1,21 +0,0 @@
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
@@ -1,41 +0,0 @@
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
@@ -1,38 +0,0 @@
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
@@ -1,21 +0,0 @@
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
@@ -1,1501 +0,0 @@
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') ? '&#9650;' : '&#9660;');
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
@@ -1,13 +0,0 @@
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")?"&#9650;":"&#9660;"),$(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
@@ -1,21 +0,0 @@
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
@@ -22,4 +22,4 @@
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
@@ -0,0 +1,119 @@
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
@@ -33,11 +33,6 @@
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
@@ -314,12 +309,6 @@
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
@@ -336,9 +325,7 @@
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
@@ -346,14 +333,11 @@
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
@@ -21,13 +21,14 @@
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
@@ -6,7 +6,7 @@
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
@@ -22,13 +22,11 @@
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
@@ -37,7 +35,6 @@
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,7 +2,7 @@
2
 
3
 // autoload_real.php @generated by Composer
4
 
5
-class ComposerAutoloaderInit85451a37b3f0077caeb7d96fe7c31367
6
+class ComposerAutoloaderInitc6a250ad85fd067f9d235d5d523ffe44
7
 {
8
     private static $loader;
9
 
10
@@ -24,20 +24,20 @@
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
@@ -4,7 +4,7 @@
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
@@ -148,7 +148,6 @@
11
         'R' => 
12
         array (
13
             'RtfHtmlPhp\\' => 11,
14
-            'Roundcube\\Composer\\' => 19,
15
         ),
16
         'P' => 
17
         array (
18
@@ -157,7 +156,6 @@
19
             'Psr\\Http\\Message\\' => 17,
20
             'Prophecy\\' => 9,
21
             'ParagonIE\\ConstantTime\\' => 23,
22
-            'PHPStan\\PhpDocParser\\' => 21,
23
         ),
24
         'O' => 
25
         array (
26
@@ -184,7 +182,6 @@
27
         'D' => 
28
         array (
29
             'Doctrine\\Instantiator\\' => 22,
30
-            'Doctrine\\Deprecations\\' => 22,
31
             'Desarrolla2\\Cache\\' => 18,
32
             'DeepCopy\\' => 9,
33
         ),
34
@@ -197,9 +194,9 @@
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
@@ -263,10 +260,6 @@
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
@@ -287,10 +280,6 @@
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
@@ -323,10 +312,6 @@
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
@@ -408,12 +393,19 @@
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
@@ -449,8 +441,8 @@
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
@@ -1155,10 +1147,10 @@
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
@@ -12,9 +12,9 @@
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
@@ -214,54 +214,6 @@
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
@@ -393,27 +345,27 @@
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
@@ -443,7 +395,7 @@
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
@@ -1388,12 +1340,12 @@
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
@@ -3052,38 +3004,31 @@
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
@@ -3107,48 +3052,40 @@
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
@@ -3174,7 +3111,7 @@
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
@@ -3249,68 +3186,18 @@
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
@@ -3319,7 +3206,7 @@
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
@@ -4014,83 +3901,43 @@
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
@@ -4100,16 +3947,12 @@
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
@@ -4393,31 +4236,28 @@
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
@@ -6733,7 +6573,6 @@
479
     ,
480
     "dev": true,
481
     "dev-package-names": 
482
-        "doctrine/deprecations",
483
         "doctrine/instantiator",
484
         "myclabs/deep-copy",
485
         "phpcompatibility/php-compatibility",
486
@@ -6741,7 +6580,6 @@
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
@@ -3,7 +3,7 @@
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
@@ -45,15 +45,6 @@
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
@@ -73,9 +64,9 @@
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
@@ -244,9 +235,9 @@
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
@@ -516,18 +507,18 @@
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
@@ -542,19 +533,10 @@
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
@@ -671,30 +653,19 @@
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
@@ -743,9 +714,9 @@
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
@@ -4,8 +4,8 @@
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
@@ -1,19 +0,0 @@
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
@@ -1,218 +0,0 @@
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
@@ -1,36 +0,0 @@
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
@@ -1,309 +0,0 @@
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
@@ -1,62 +0,0 @@
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
@@ -1,5 +1,4 @@
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
@@ -13,7 +13,7 @@
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
@@ -45,7 +45,6 @@
2
      *
3
      * @return integer Count of current Requests
4
      */
5
-    #\ReturnTypeWillChange
6
     public function count()
7
     {
8
         return count($this->requests);
9
@@ -56,7 +55,6 @@
10
      *
11
      * @return Current Request object
12
      */
13
-    #\ReturnTypeWillChange
14
     public function current()
15
     {
16
         return $this->requests$this->position;
17
@@ -67,7 +65,6 @@
18
      *
19
      * @return integer Current position in set
20
      */
21
-    #\ReturnTypeWillChange
22
     public function key()
23
     {
24
         return $this->position;
25
@@ -78,7 +75,6 @@
26
      *
27
      * @return integer Next positiion in set
28
      */
29
-    #\ReturnTypeWillChange
30
     public function next()
31
     {
32
         return ++$this->position;
33
@@ -87,7 +83,6 @@
34
     /**
35
      * For Iterator, rewind set location to beginning
36
      */
37
-    #\ReturnTypeWillChange
38
     public function rewind()
39
     {
40
         $this->position = 0;
41
@@ -98,7 +93,6 @@
42
      *
43
      * @return boolean Valid/invalid result
44
      */
45
-    #\ReturnTypeWillChange
46
     public function valid()
47
     {
48
         return isset($this->requests$this->position);
49
@@ -110,7 +104,6 @@
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
@@ -122,7 +115,6 @@
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
@@ -134,7 +126,6 @@
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
@@ -145,9 +136,8 @@
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
@@ -74,7 +74,6 @@
2
      *
3
      * @return integer Count of current Requests
4
      */
5
-    #\ReturnTypeWillChange
6
     public function count()
7
     {
8
         return count($this->responses);
9
@@ -85,7 +84,6 @@
10
      *
11
      * @return Current Request object
12
      */
13
-    #\ReturnTypeWillChange
14
     public function current()
15
     {
16
         return $this->responses$this->position;
17
@@ -96,7 +94,6 @@
18
      *
19
      * @return integer Current position in set
20
      */
21
-    #\ReturnTypeWillChange
22
     public function key()
23
     {
24
         return $this->position;
25
@@ -107,7 +104,6 @@
26
      *
27
      * @return integer Next positiion in set
28
      */
29
-    #\ReturnTypeWillChange
30
     public function next()
31
     {
32
         return ++$this->position;
33
@@ -116,7 +112,6 @@
34
     /**
35
      * For Iterator, rewind set location to beginning
36
      */
37
-    #\ReturnTypeWillChange
38
     public function rewind()
39
     {
40
         $this->position = 0;
41
@@ -127,7 +122,6 @@
42
      *
43
      * @return boolean Valid/invalid result
44
      */
45
-    #\ReturnTypeWillChange
46
     public function valid()
47
     {
48
         return isset($this->responses$this->position);
49
@@ -139,7 +133,6 @@
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
@@ -151,7 +144,6 @@
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
@@ -163,7 +155,6 @@
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
@@ -174,7 +165,6 @@
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
@@ -46,13 +46,6 @@
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
@@ -255,7 +248,7 @@
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
@@ -1,3 +1,3 @@
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
@@ -1,1 +1,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
@@ -1,1 +1,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
@@ -1,2 +1,2 @@
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
@@ -1,5 +1,6 @@
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
@@ -10,26 +10,19 @@
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
@@ -41,14 +34,6 @@
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
@@ -20,25 +20,25 @@
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
@@ -48,14 +48,15 @@
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
@@ -92,10 +93,6 @@
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
@@ -13,7 +13,6 @@
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
@@ -48,12 +47,13 @@
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
@@ -31,10 +31,11 @@
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
@@ -44,7 +45,7 @@
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
@@ -112,7 +113,7 @@
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
@@ -122,7 +123,7 @@
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
@@ -29,20 +29,21 @@
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
@@ -82,7 +83,7 @@
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
@@ -17,12 +17,10 @@
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
@@ -31,7 +29,6 @@
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
@@ -43,14 +40,12 @@
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
@@ -77,52 +72,51 @@
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
@@ -165,28 +159,21 @@
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
@@ -204,6 +191,10 @@
154
             );
155
         }
156
 
157
+        if (count($matches) < 3) {
158
+            $matches = '';
159
+        }
160
+
161
         return array_slice($matches, 1);
162
     }
163
 
164
@@ -219,10 +210,6 @@
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
@@ -238,9 +225,9 @@
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
@@ -281,18 +268,18 @@
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
@@ -302,14 +289,12 @@
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
@@ -322,7 +307,7 @@
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
@@ -14,9 +14,9 @@
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
@@ -41,6 +41,17 @@
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
@@ -60,7 +71,7 @@
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
@@ -69,5 +80,5 @@
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
@@ -27,13 +27,13 @@
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
@@ -22,10 +22,10 @@
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
@@ -29,9 +29,11 @@
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
@@ -25,7 +25,8 @@
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
@@ -44,7 +45,7 @@
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
@@ -62,7 +63,7 @@
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
@@ -29,19 +29,22 @@
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
@@ -94,10 +97,10 @@
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
@@ -1,48 +0,0 @@
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
@@ -1,138 +0,0 @@
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
@@ -1,52 +0,0 @@
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
@@ -1,41 +0,0 @@
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
@@ -1,52 +0,0 @@
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
@@ -1,83 +0,0 @@
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
@@ -1,100 +0,0 @@
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
@@ -1,16 +0,0 @@
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
@@ -1,92 +0,0 @@
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
@@ -1,54 +0,0 @@
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
@@ -1,54 +0,0 @@
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
@@ -1,54 +0,0 @@
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
@@ -1,52 +0,0 @@
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
@@ -1,52 +0,0 @@
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
@@ -1,56 +0,0 @@
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
@@ -1,52 +0,0 @@
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
@@ -1,54 +0,0 @@
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
@@ -23,7 +23,7 @@
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
@@ -1,48 +0,0 @@
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
@@ -27,16 +27,19 @@
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
@@ -24,9 +24,11 @@
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
@@ -24,7 +24,6 @@
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
@@ -32,33 +31,34 @@
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
@@ -66,9 +66,7 @@
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
@@ -76,31 +74,19 @@
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
@@ -109,13 +95,11 @@
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
@@ -138,11 +122,6 @@
122
                     )
123
                     \s+
124
                 )?
125
-                # Returns reference
126
-                (?:
127
-                    (&)
128
-                    \s*
129
-                )?
130
                 # Method name
131
                 (\w_+)
132
                 # Arguments
133
@@ -160,7 +139,7 @@
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
@@ -168,8 +147,6 @@
143
             $returnType = 'void';
144
         }
145
 
146
-        $returnsReference = $returnsReference === '&';
147
-
148
         $returnType  = $typeResolver->resolve($returnType, $context);
149
         $description = $descriptionFactory->create($description, $context);
150
 
151
@@ -195,14 +172,7 @@
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
@@ -214,27 +184,12 @@
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
@@ -252,16 +207,11 @@
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
@@ -278,11 +228,9 @@
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
@@ -328,28 +276,4 @@
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
@@ -1,91 +0,0 @@
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
@@ -1,51 +0,0 @@
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
@@ -13,7 +13,6 @@
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
@@ -35,13 +34,14 @@
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
@@ -58,23 +58,12 @@
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
@@ -160,7 +149,7 @@
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
@@ -13,7 +13,6 @@
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
@@ -35,7 +34,8 @@
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
@@ -47,23 +47,12 @@
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
@@ -111,13 +100,13 @@
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
@@ -13,7 +13,6 @@
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
@@ -35,7 +34,8 @@
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
@@ -47,23 +47,12 @@
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
@@ -111,13 +100,13 @@
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
@@ -13,7 +13,6 @@
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
@@ -35,7 +34,8 @@
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
@@ -47,23 +47,12 @@
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
@@ -20,7 +20,8 @@
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
@@ -20,7 +20,8 @@
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
@@ -13,7 +13,6 @@
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
@@ -33,23 +32,12 @@
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
@@ -60,4 +48,17 @@
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
@@ -33,9 +33,11 @@
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
@@ -25,7 +25,8 @@
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
@@ -44,7 +45,7 @@
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
@@ -59,7 +60,7 @@
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
@@ -89,7 +90,7 @@
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
@@ -25,13 +25,14 @@
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
@@ -13,11 +13,9 @@
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
@@ -25,7 +23,7 @@
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
@@ -61,27 +59,8 @@
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
@@ -1,92 +0,0 @@
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
@@ -1,51 +0,0 @@
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
@@ -1,29 +0,0 @@
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
@@ -1,29 +0,0 @@
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
@@ -48,4 +48,17 @@
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
@@ -29,9 +29,11 @@
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
@@ -13,7 +13,6 @@
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
@@ -35,7 +34,8 @@
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
@@ -47,22 +47,12 @@
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
@@ -111,13 +101,13 @@
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
@@ -25,7 +25,8 @@
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
@@ -44,7 +45,7 @@
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
@@ -59,7 +60,7 @@
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
@@ -19,20 +19,6 @@
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
@@ -49,9 +35,11 @@
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
@@ -59,50 +47,22 @@
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
@@ -151,9 +111,9 @@
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
@@ -178,7 +138,6 @@
106
     }
107
 
108
     // phpcs:disable
109
-
110
     /**
111
      * Splits the DocBlock into a template marker, summary, description and block of tags.
112
      *
113
@@ -190,7 +149,7 @@
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
@@ -268,7 +227,7 @@
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
@@ -281,7 +240,7 @@
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
@@ -14,7 +14,7 @@
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
@@ -26,7 +26,7 @@
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
@@ -1,15 +0,0 @@
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
@@ -10,20 +10,12 @@
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
@@ -39,13 +31,5 @@
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
@@ -1,32 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,46 +0,0 @@
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
@@ -1,52 +0,0 @@
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
@@ -1,18 +0,0 @@
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
@@ -1,55 +0,0 @@
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
@@ -37,4 +37,4 @@
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
@@ -1,45 +0,0 @@
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
@@ -1,45 +0,0 @@
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
@@ -1,16 +0,0 @@
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
@@ -1,9 +0,0 @@
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
@@ -1,48 +0,0 @@
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
@@ -1,50 +0,0 @@
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
@@ -1,41 +0,0 @@
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
@@ -1,9 +0,0 @@
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
@@ -1,56 +0,0 @@
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
@@ -1,47 +0,0 @@
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
@@ -37,4 +37,4 @@
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
@@ -13,176 +13,117 @@
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
@@ -190,14 +131,6 @@
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
@@ -210,9 +143,9 @@
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
@@ -227,252 +160,182 @@
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
@@ -594,89 +457,244 @@
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
@@ -54,7 +54,7 @@
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
@@ -107,7 +107,7 @@
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
@@ -1,77 +0,0 @@
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
@@ -22,31 +22,6 @@
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
@@ -45,15 +45,14 @@
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
@@ -182,7 +181,6 @@
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
@@ -20,7 +20,7 @@
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
@@ -1,21 +0,0 @@
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
@@ -1,123 +0,0 @@
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
@@ -1,129 +0,0 @@
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
@@ -1,44 +0,0 @@
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
@@ -1,34 +0,0 @@
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
@@ -1,16 +0,0 @@
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
@@ -1,34 +0,0 @@
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
@@ -1,30 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,25 +0,0 @@
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
@@ -1,25 +0,0 @@
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
@@ -1,10 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,80 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,34 +0,0 @@
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
@@ -1,41 +0,0 @@
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
@@ -1,22 +0,0 @@
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
@@ -1,38 +0,0 @@
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
@@ -1,312 +0,0 @@
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
@@ -1,87 +0,0 @@
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
@@ -1,20 +0,0 @@
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
@@ -1,45 +0,0 @@
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
@@ -1,45 +0,0 @@
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
@@ -1,42 +0,0 @@
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
@@ -1,27 +0,0 @@
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
@@ -1,34 +0,0 @@
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
@@ -1,42 +0,0 @@
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
@@ -1,32 +0,0 @@
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
@@ -1,47 +0,0 @@
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
@@ -1,35 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,26 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,53 +0,0 @@
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
@@ -1,55 +0,0 @@
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
@@ -1,44 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,33 +0,0 @@
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
@@ -1,29 +0,0 @@
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
@@ -1,29 +0,0 @@
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
@@ -1,33 +0,0 @@
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
@@ -1,42 +0,0 @@
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
@@ -1,10 +0,0 @@
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
@@ -1,390 +0,0 @@
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
@@ -1,34 +0,0 @@
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
@@ -1,10 +0,0 @@
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
@@ -1,25 +0,0 @@
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
@@ -1,34 +0,0 @@
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
@@ -1,29 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,47 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,35 +0,0 @@
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
@@ -1,30 +0,0 @@
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
@@ -1,38 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,35 +0,0 @@
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
@@ -1,48 +0,0 @@
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
@@ -1,76 +0,0 @@
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
@@ -1,32 +0,0 @@
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
@@ -1,33 +0,0 @@
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
@@ -1,50 +0,0 @@
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
@@ -1,44 +0,0 @@
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
@@ -1,44 +0,0 @@
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
@@ -1,44 +0,0 @@
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
@@ -1,25 +0,0 @@
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
@@ -1,57 +0,0 @@
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
@@ -1,25 +0,0 @@
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
@@ -1,37 +0,0 @@
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
@@ -1,38 +0,0 @@
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
@@ -1,25 +0,0 @@
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
@@ -1,47 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,34 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,10 +0,0 @@
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
@@ -1,37 +0,0 @@
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
@@ -1,195 +0,0 @@
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
@@ -1,292 +0,0 @@
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
@@ -1,100 +0,0 @@
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
@@ -1,1243 +0,0 @@
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
@@ -1,100 +0,0 @@
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
@@ -1,381 +0,0 @@
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
@@ -1,1062 +0,0 @@
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
@@ -1,21 +0,0 @@
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
@@ -1,44 +0,0 @@
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
@@ -1,196 +0,0 @@
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
@@ -1,866 +0,0 @@
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
@@ -1,16 +1,16 @@
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
@@ -1,131 +0,0 @@
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
@@ -1,5 +1,2 @@
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
@@ -1,65 +0,0 @@
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
@@ -1,9 +1,8 @@
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
@@ -13,56 +12,29 @@
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
@@ -71,4 +43,4 @@
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
@@ -1,8 +1,8 @@
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
@@ -11,48 +11,23 @@
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
@@ -1,20 +0,0 @@
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
@@ -1,474 +0,0 @@
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
@@ -1,54 +0,0 @@
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
@@ -0,0 +1,334 @@
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
@@ -1,34 +0,0 @@
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
@@ -1,54 +0,0 @@
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
@@ -0,0 +1,130 @@
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
@@ -1,23 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -9,7 +9,7 @@
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
@@ -37,12 +37,9 @@
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
@@ -59,10 +56,5 @@
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
@@ -16,5 +16,5 @@
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
@@ -26,15 +26,15 @@
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
@@ -47,31 +47,29 @@
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
@@ -87,17 +85,13 @@
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
@@ -119,7 +113,7 @@
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
@@ -140,14 +134,14 @@
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
@@ -155,7 +149,7 @@
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
@@ -163,7 +157,7 @@
114
         }
115
     }
116
 
117
-    if (null !== $parts'host') {
118
+    if ($parts'host') {
119
         $parts'host' = strtolower($parts'host');
120
     }
121
 
122
@@ -180,16 +174,13 @@
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
@@ -202,35 +193,21 @@
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
@@ -244,32 +221,32 @@
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
@@ -296,7 +273,7 @@
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
@@ -313,7 +290,7 @@
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
@@ -332,10 +309,6 @@
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
@@ -346,14 +319,10 @@
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
@@ -368,11 +337,7 @@
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
@@ -383,25 +348,22 @@
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,7 +2,7 @@
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


Request History
mollekopf's avatar

mollekopf created request 3 months ago

New release 1.6.9.3