Browse code

Fixes #37

bruno.spyckerelle authored on 16/10/2016 14:40:02
Showing 476 changed files
... ...
@@ -25,8 +25,7 @@
25 25
     "jquery": "^2.1.4",
26 26
     "pick-a-color": "^1.2.3",
27 27
     "hammerjs": "hammer.js#^2.0.8",
28
-    "css-hamburgers": "^0.5.0",
29
-    "noty": "^2.3.8"
28
+    "css-hamburgers": "^0.5.0"
30 29
   },
31 30
   "resolutions": {
32 31
     "bootstrap": "^3.3.7",
33 32
new file mode 100644
... ...
@@ -0,0 +1,8 @@
1
+{
2
+    "name": "BrunoSpy/olcc",
3
+    "license": "AGPL",
4
+  "type": "project",
5
+    "require": {
6
+        "dusterio/link-preview": "^1.2"
7
+    }
8
+}
0 9
new file mode 100644
... ...
@@ -0,0 +1,675 @@
1
+{
2
+    "_readme": [
3
+        "This file locks the dependencies of your project to a known state",
4
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5
+        "This file is @generated automatically"
6
+    ],
7
+    "hash": "f38ce5c1764ed7eccaa9391970a215a0",
8
+    "content-hash": "093831dfeb149e1280f2563d98968b7b",
9
+    "packages": [
10
+        {
11
+            "name": "doctrine/inflector",
12
+            "version": "v1.1.0",
13
+            "source": {
14
+                "type": "git",
15
+                "url": "https://github.com/doctrine/inflector.git",
16
+                "reference": "90b2128806bfde671b6952ab8bea493942c1fdae"
17
+            },
18
+            "dist": {
19
+                "type": "zip",
20
+                "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae",
21
+                "reference": "90b2128806bfde671b6952ab8bea493942c1fdae",
22
+                "shasum": ""
23
+            },
24
+            "require": {
25
+                "php": ">=5.3.2"
26
+            },
27
+            "require-dev": {
28
+                "phpunit/phpunit": "4.*"
29
+            },
30
+            "type": "library",
31
+            "extra": {
32
+                "branch-alias": {
33
+                    "dev-master": "1.1.x-dev"
34
+                }
35
+            },
36
+            "autoload": {
37
+                "psr-0": {
38
+                    "Doctrine\\Common\\Inflector\\": "lib/"
39
+                }
40
+            },
41
+            "notification-url": "https://packagist.org/downloads/",
42
+            "license": [
43
+                "MIT"
44
+            ],
45
+            "authors": [
46
+                {
47
+                    "name": "Roman Borschel",
48
+                    "email": "roman@code-factory.org"
49
+                },
50
+                {
51
+                    "name": "Benjamin Eberlei",
52
+                    "email": "kontakt@beberlei.de"
53
+                },
54
+                {
55
+                    "name": "Guilherme Blanco",
56
+                    "email": "guilhermeblanco@gmail.com"
57
+                },
58
+                {
59
+                    "name": "Jonathan Wage",
60
+                    "email": "jonwage@gmail.com"
61
+                },
62
+                {
63
+                    "name": "Johannes Schmitt",
64
+                    "email": "schmittjoh@gmail.com"
65
+                }
66
+            ],
67
+            "description": "Common String Manipulations with regard to casing and singular/plural rules.",
68
+            "homepage": "http://www.doctrine-project.org",
69
+            "keywords": [
70
+                "inflection",
71
+                "pluralize",
72
+                "singularize",
73
+                "string"
74
+            ],
75
+            "time": "2015-11-06 14:35:42"
76
+        },
77
+        {
78
+            "name": "dusterio/link-preview",
79
+            "version": "v1.2.7",
80
+            "source": {
81
+                "type": "git",
82
+                "url": "https://github.com/dusterio/link-preview.git",
83
+                "reference": "b75f08bdbe90b55eff41c090403624466db99253"
84
+            },
85
+            "dist": {
86
+                "type": "zip",
87
+                "url": "https://api.github.com/repos/dusterio/link-preview/zipball/b75f08bdbe90b55eff41c090403624466db99253",
88
+                "reference": "b75f08bdbe90b55eff41c090403624466db99253",
89
+                "shasum": ""
90
+            },
91
+            "require": {
92
+                "guzzlehttp/guzzle": "^6.1",
93
+                "illuminate/support": "5.*",
94
+                "php": ">=5.5.0",
95
+                "symfony/css-selector": "^3.0",
96
+                "symfony/dom-crawler": "^3.0"
97
+            },
98
+            "require-dev": {
99
+                "codeclimate/php-test-reporter": "dev-master",
100
+                "phpunit/phpunit": "3.7.*"
101
+            },
102
+            "type": "library",
103
+            "autoload": {
104
+                "psr-4": {
105
+                    "Dusterio\\LinkPreview\\": "src/"
106
+                }
107
+            },
108
+            "notification-url": "https://packagist.org/downloads/",
109
+            "license": [
110
+                "MIT"
111
+            ],
112
+            "authors": [
113
+                {
114
+                    "name": "Denis Mysenko",
115
+                    "email": "denis@mysenko.com",
116
+                    "homepage": "https://www.mysenko.com"
117
+                }
118
+            ],
119
+            "description": "Link preview generation for PHP with Laravel support",
120
+            "homepage": "http://github.com/dusterio/link-preview",
121
+            "keywords": [
122
+                "laravel",
123
+                "php",
124
+                "preview",
125
+                "scraping",
126
+                "url"
127
+            ],
128
+            "time": "2016-09-03 01:10:16"
129
+        },
130
+        {
131
+            "name": "guzzlehttp/guzzle",
132
+            "version": "6.2.2",
133
+            "source": {
134
+                "type": "git",
135
+                "url": "https://github.com/guzzle/guzzle.git",
136
+                "reference": "ebf29dee597f02f09f4d5bbecc68230ea9b08f60"
137
+            },
138
+            "dist": {
139
+                "type": "zip",
140
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ebf29dee597f02f09f4d5bbecc68230ea9b08f60",
141
+                "reference": "ebf29dee597f02f09f4d5bbecc68230ea9b08f60",
142
+                "shasum": ""
143
+            },
144
+            "require": {
145
+                "guzzlehttp/promises": "^1.0",
146
+                "guzzlehttp/psr7": "^1.3.1",
147
+                "php": ">=5.5"
148
+            },
149
+            "require-dev": {
150
+                "ext-curl": "*",
151
+                "phpunit/phpunit": "^4.0",
152
+                "psr/log": "^1.0"
153
+            },
154
+            "type": "library",
155
+            "extra": {
156
+                "branch-alias": {
157
+                    "dev-master": "6.2-dev"
158
+                }
159
+            },
160
+            "autoload": {
161
+                "files": [
162
+                    "src/functions_include.php"
163
+                ],
164
+                "psr-4": {
165
+                    "GuzzleHttp\\": "src/"
166
+                }
167
+            },
168
+            "notification-url": "https://packagist.org/downloads/",
169
+            "license": [
170
+                "MIT"
171
+            ],
172
+            "authors": [
173
+                {
174
+                    "name": "Michael Dowling",
175
+                    "email": "mtdowling@gmail.com",
176
+                    "homepage": "https://github.com/mtdowling"
177
+                }
178
+            ],
179
+            "description": "Guzzle is a PHP HTTP client library",
180
+            "homepage": "http://guzzlephp.org/",
181
+            "keywords": [
182
+                "client",
183
+                "curl",
184
+                "framework",
185
+                "http",
186
+                "http client",
187
+                "rest",
188
+                "web service"
189
+            ],
190
+            "time": "2016-10-08 15:01:37"
191
+        },
192
+        {
193
+            "name": "guzzlehttp/promises",
194
+            "version": "1.2.0",
195
+            "source": {
196
+                "type": "git",
197
+                "url": "https://github.com/guzzle/promises.git",
198
+                "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579"
199
+            },
200
+            "dist": {
201
+                "type": "zip",
202
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/c10d860e2a9595f8883527fa0021c7da9e65f579",
203
+                "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579",
204
+                "shasum": ""
205
+            },
206
+            "require": {
207
+                "php": ">=5.5.0"
208
+            },
209
+            "require-dev": {
210
+                "phpunit/phpunit": "~4.0"
211
+            },
212
+            "type": "library",
213
+            "extra": {
214
+                "branch-alias": {
215
+                    "dev-master": "1.0-dev"
216
+                }
217
+            },
218
+            "autoload": {
219
+                "psr-4": {
220
+                    "GuzzleHttp\\Promise\\": "src/"
221
+                },
222
+                "files": [
223
+                    "src/functions_include.php"
224
+                ]
225
+            },
226
+            "notification-url": "https://packagist.org/downloads/",
227
+            "license": [
228
+                "MIT"
229
+            ],
230
+            "authors": [
231
+                {
232
+                    "name": "Michael Dowling",
233
+                    "email": "mtdowling@gmail.com",
234
+                    "homepage": "https://github.com/mtdowling"
235
+                }
236
+            ],
237
+            "description": "Guzzle promises library",
238
+            "keywords": [
239
+                "promise"
240
+            ],
241
+            "time": "2016-05-18 16:56:05"
242
+        },
243
+        {
244
+            "name": "guzzlehttp/psr7",
245
+            "version": "1.3.1",
246
+            "source": {
247
+                "type": "git",
248
+                "url": "https://github.com/guzzle/psr7.git",
249
+                "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b"
250
+            },
251
+            "dist": {
252
+                "type": "zip",
253
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/5c6447c9df362e8f8093bda8f5d8873fe5c7f65b",
254
+                "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b",
255
+                "shasum": ""
256
+            },
257
+            "require": {
258
+                "php": ">=5.4.0",
259
+                "psr/http-message": "~1.0"
260
+            },
261
+            "provide": {
262
+                "psr/http-message-implementation": "1.0"
263
+            },
264
+            "require-dev": {
265
+                "phpunit/phpunit": "~4.0"
266
+            },
267
+            "type": "library",
268
+            "extra": {
269
+                "branch-alias": {
270
+                    "dev-master": "1.4-dev"
271
+                }
272
+            },
273
+            "autoload": {
274
+                "psr-4": {
275
+                    "GuzzleHttp\\Psr7\\": "src/"
276
+                },
277
+                "files": [
278
+                    "src/functions_include.php"
279
+                ]
280
+            },
281
+            "notification-url": "https://packagist.org/downloads/",
282
+            "license": [
283
+                "MIT"
284
+            ],
285
+            "authors": [
286
+                {
287
+                    "name": "Michael Dowling",
288
+                    "email": "mtdowling@gmail.com",
289
+                    "homepage": "https://github.com/mtdowling"
290
+                }
291
+            ],
292
+            "description": "PSR-7 message implementation",
293
+            "keywords": [
294
+                "http",
295
+                "message",
296
+                "stream",
297
+                "uri"
298
+            ],
299
+            "time": "2016-06-24 23:00:38"
300
+        },
301
+        {
302
+            "name": "illuminate/contracts",
303
+            "version": "v5.3.16",
304
+            "source": {
305
+                "type": "git",
306
+                "url": "https://github.com/illuminate/contracts.git",
307
+                "reference": "ce5d73c6015b2054d32f3f8530767847b358ae4e"
308
+            },
309
+            "dist": {
310
+                "type": "zip",
311
+                "url": "https://api.github.com/repos/illuminate/contracts/zipball/ce5d73c6015b2054d32f3f8530767847b358ae4e",
312
+                "reference": "ce5d73c6015b2054d32f3f8530767847b358ae4e",
313
+                "shasum": ""
314
+            },
315
+            "require": {
316
+                "php": ">=5.6.4"
317
+            },
318
+            "type": "library",
319
+            "extra": {
320
+                "branch-alias": {
321
+                    "dev-master": "5.3-dev"
322
+                }
323
+            },
324
+            "autoload": {
325
+                "psr-4": {
326
+                    "Illuminate\\Contracts\\": ""
327
+                }
328
+            },
329
+            "notification-url": "https://packagist.org/downloads/",
330
+            "license": [
331
+                "MIT"
332
+            ],
333
+            "authors": [
334
+                {
335
+                    "name": "Taylor Otwell",
336
+                    "email": "taylor@laravel.com"
337
+                }
338
+            ],
339
+            "description": "The Illuminate Contracts package.",
340
+            "homepage": "https://laravel.com",
341
+            "time": "2016-09-26 20:36:27"
342
+        },
343
+        {
344
+            "name": "illuminate/support",
345
+            "version": "v5.3.16",
346
+            "source": {
347
+                "type": "git",
348
+                "url": "https://github.com/illuminate/support.git",
349
+                "reference": "aa685c61c88a69b2e0e86310e65ef5ad2ebf2448"
350
+            },
351
+            "dist": {
352
+                "type": "zip",
353
+                "url": "https://api.github.com/repos/illuminate/support/zipball/aa685c61c88a69b2e0e86310e65ef5ad2ebf2448",
354
+                "reference": "aa685c61c88a69b2e0e86310e65ef5ad2ebf2448",
355
+                "shasum": ""
356
+            },
357
+            "require": {
358
+                "doctrine/inflector": "~1.0",
359
+                "ext-mbstring": "*",
360
+                "illuminate/contracts": "5.3.*",
361
+                "paragonie/random_compat": "~1.4|~2.0",
362
+                "php": ">=5.6.4"
363
+            },
364
+            "replace": {
365
+                "tightenco/collect": "self.version"
366
+            },
367
+            "suggest": {
368
+                "illuminate/filesystem": "Required to use the composer class (5.2.*).",
369
+                "symfony/process": "Required to use the composer class (3.1.*).",
370
+                "symfony/var-dumper": "Required to use the dd function (3.1.*)."
371
+            },
372
+            "type": "library",
373
+            "extra": {
374
+                "branch-alias": {
375
+                    "dev-master": "5.3-dev"
376
+                }
377
+            },
378
+            "autoload": {
379
+                "psr-4": {
380
+                    "Illuminate\\Support\\": ""
381
+                },
382
+                "files": [
383
+                    "helpers.php"
384
+                ]
385
+            },
386
+            "notification-url": "https://packagist.org/downloads/",
387
+            "license": [
388
+                "MIT"
389
+            ],
390
+            "authors": [
391
+                {
392
+                    "name": "Taylor Otwell",
393
+                    "email": "taylor@laravel.com"
394
+                }
395
+            ],
396
+            "description": "The Illuminate Support package.",
397
+            "homepage": "https://laravel.com",
398
+            "time": "2016-10-02 01:14:47"
399
+        },
400
+        {
401
+            "name": "paragonie/random_compat",
402
+            "version": "v2.0.2",
403
+            "source": {
404
+                "type": "git",
405
+                "url": "https://github.com/paragonie/random_compat.git",
406
+                "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf"
407
+            },
408
+            "dist": {
409
+                "type": "zip",
410
+                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/088c04e2f261c33bed6ca5245491cfca69195ccf",
411
+                "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf",
412
+                "shasum": ""
413
+            },
414
+            "require": {
415
+                "php": ">=5.2.0"
416
+            },
417
+            "require-dev": {
418
+                "phpunit/phpunit": "4.*|5.*"
419
+            },
420
+            "suggest": {
421
+                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
422
+            },
423
+            "type": "library",
424
+            "autoload": {
425
+                "files": [
426
+                    "lib/random.php"
427
+                ]
428
+            },
429
+            "notification-url": "https://packagist.org/downloads/",
430
+            "license": [
431
+                "MIT"
432
+            ],
433
+            "authors": [
434
+                {
435
+                    "name": "Paragon Initiative Enterprises",
436
+                    "email": "security@paragonie.com",
437
+                    "homepage": "https://paragonie.com"
438
+                }
439
+            ],
440
+            "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
441
+            "keywords": [
442
+                "csprng",
443
+                "pseudorandom",
444
+                "random"
445
+            ],
446
+            "time": "2016-04-03 06:00:07"
447
+        },
448
+        {
449
+            "name": "psr/http-message",
450
+            "version": "1.0.1",
451
+            "source": {
452
+                "type": "git",
453
+                "url": "https://github.com/php-fig/http-message.git",
454
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
455
+            },
456
+            "dist": {
457
+                "type": "zip",
458
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
459
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
460
+                "shasum": ""
461
+            },
462
+            "require": {
463
+                "php": ">=5.3.0"
464
+            },
465
+            "type": "library",
466
+            "extra": {
467
+                "branch-alias": {
468
+                    "dev-master": "1.0.x-dev"
469
+                }
470
+            },
471
+            "autoload": {
472
+                "psr-4": {
473
+                    "Psr\\Http\\Message\\": "src/"
474
+                }
475
+            },
476
+            "notification-url": "https://packagist.org/downloads/",
477
+            "license": [
478
+                "MIT"
479
+            ],
480
+            "authors": [
481
+                {
482
+                    "name": "PHP-FIG",
483
+                    "homepage": "http://www.php-fig.org/"
484
+                }
485
+            ],
486
+            "description": "Common interface for HTTP messages",
487
+            "homepage": "https://github.com/php-fig/http-message",
488
+            "keywords": [
489
+                "http",
490
+                "http-message",
491
+                "psr",
492
+                "psr-7",
493
+                "request",
494
+                "response"
495
+            ],
496
+            "time": "2016-08-06 14:39:51"
497
+        },
498
+        {
499
+            "name": "symfony/css-selector",
500
+            "version": "v3.1.5",
501
+            "source": {
502
+                "type": "git",
503
+                "url": "https://github.com/symfony/css-selector.git",
504
+                "reference": "ca809c64072e0fe61c1c7fb3c76cdc32265042ac"
505
+            },
506
+            "dist": {
507
+                "type": "zip",
508
+                "url": "https://api.github.com/repos/symfony/css-selector/zipball/ca809c64072e0fe61c1c7fb3c76cdc32265042ac",
509
+                "reference": "ca809c64072e0fe61c1c7fb3c76cdc32265042ac",
510
+                "shasum": ""
511
+            },
512
+            "require": {
513
+                "php": ">=5.5.9"
514
+            },
515
+            "type": "library",
516
+            "extra": {
517
+                "branch-alias": {
518
+                    "dev-master": "3.1-dev"
519
+                }
520
+            },
521
+            "autoload": {
522
+                "psr-4": {
523
+                    "Symfony\\Component\\CssSelector\\": ""
524
+                },
525
+                "exclude-from-classmap": [
526
+                    "/Tests/"
527
+                ]
528
+            },
529
+            "notification-url": "https://packagist.org/downloads/",
530
+            "license": [
531
+                "MIT"
532
+            ],
533
+            "authors": [
534
+                {
535
+                    "name": "Jean-François Simon",
536
+                    "email": "jeanfrancois.simon@sensiolabs.com"
537
+                },
538
+                {
539
+                    "name": "Fabien Potencier",
540
+                    "email": "fabien@symfony.com"
541
+                },
542
+                {
543
+                    "name": "Symfony Community",
544
+                    "homepage": "https://symfony.com/contributors"
545
+                }
546
+            ],
547
+            "description": "Symfony CssSelector Component",
548
+            "homepage": "https://symfony.com",
549
+            "time": "2016-09-06 11:02:40"
550
+        },
551
+        {
552
+            "name": "symfony/dom-crawler",
553
+            "version": "v3.1.5",
554
+            "source": {
555
+                "type": "git",
556
+                "url": "https://github.com/symfony/dom-crawler.git",
557
+                "reference": "bb7395e8b1db3654de82b9f35d019958276de4d7"
558
+            },
559
+            "dist": {
560
+                "type": "zip",
561
+                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bb7395e8b1db3654de82b9f35d019958276de4d7",
562
+                "reference": "bb7395e8b1db3654de82b9f35d019958276de4d7",
563
+                "shasum": ""
564
+            },
565
+            "require": {
566
+                "php": ">=5.5.9",
567
+                "symfony/polyfill-mbstring": "~1.0"
568
+            },
569
+            "require-dev": {
570
+                "symfony/css-selector": "~2.8|~3.0"
571
+            },
572
+            "suggest": {
573
+                "symfony/css-selector": ""
574
+            },
575
+            "type": "library",
576
+            "extra": {
577
+                "branch-alias": {
578
+                    "dev-master": "3.1-dev"
579
+                }
580
+            },
581
+            "autoload": {
582
+                "psr-4": {
583
+                    "Symfony\\Component\\DomCrawler\\": ""
584
+                },
585
+                "exclude-from-classmap": [
586
+                    "/Tests/"
587
+                ]
588
+            },
589
+            "notification-url": "https://packagist.org/downloads/",
590
+            "license": [
591
+                "MIT"
592
+            ],
593
+            "authors": [
594
+                {
595
+                    "name": "Fabien Potencier",
596
+                    "email": "fabien@symfony.com"
597
+                },
598
+                {
599
+                    "name": "Symfony Community",
600
+                    "homepage": "https://symfony.com/contributors"
601
+                }
602
+            ],
603
+            "description": "Symfony DomCrawler Component",
604
+            "homepage": "https://symfony.com",
605
+            "time": "2016-08-05 08:37:39"
606
+        },
607
+        {
608
+            "name": "symfony/polyfill-mbstring",
609
+            "version": "v1.2.0",
610
+            "source": {
611
+                "type": "git",
612
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
613
+                "reference": "dff51f72b0706335131b00a7f49606168c582594"
614
+            },
615
+            "dist": {
616
+                "type": "zip",
617
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594",
618
+                "reference": "dff51f72b0706335131b00a7f49606168c582594",
619
+                "shasum": ""
620
+            },
621
+            "require": {
622
+                "php": ">=5.3.3"
623
+            },
624
+            "suggest": {
625
+                "ext-mbstring": "For best performance"
626
+            },
627
+            "type": "library",
628
+            "extra": {
629
+                "branch-alias": {
630
+                    "dev-master": "1.2-dev"
631
+                }
632
+            },
633
+            "autoload": {
634
+                "psr-4": {
635
+                    "Symfony\\Polyfill\\Mbstring\\": ""
636
+                },
637
+                "files": [
638
+                    "bootstrap.php"
639
+                ]
640
+            },
641
+            "notification-url": "https://packagist.org/downloads/",
642
+            "license": [
643
+                "MIT"
644
+            ],
645
+            "authors": [
646
+                {
647
+                    "name": "Nicolas Grekas",
648
+                    "email": "p@tchwork.com"
649
+                },
650
+                {
651
+                    "name": "Symfony Community",
652
+                    "homepage": "https://symfony.com/contributors"
653
+                }
654
+            ],
655
+            "description": "Symfony polyfill for the Mbstring extension",
656
+            "homepage": "https://symfony.com",
657
+            "keywords": [
658
+                "compatibility",
659
+                "mbstring",
660
+                "polyfill",
661
+                "portable",
662
+                "shim"
663
+            ],
664
+            "time": "2016-05-18 14:26:46"
665
+        }
666
+    ],
667
+    "packages-dev": [],
668
+    "aliases": [],
669
+    "minimum-stability": "stable",
670
+    "stability-flags": [],
671
+    "prefer-stable": false,
672
+    "prefer-lowest": false,
673
+    "platform": [],
674
+    "platform-dev": []
675
+}
0 676
new file mode 100755
1 677
Binary files /dev/null and b/composer.phar differ
... ...
@@ -405,6 +405,19 @@ body {
405 405
     transition: all 0.5s ease;
406 406
 }
407 407
 
408
+.loadingwide {
409
+    min-width: 200px;
410
+    min-height: 100px;
411
+    background-image: url('../img/ajax-loader2.gif');
412
+    background-repeat: no-repeat !important;
413
+    background-position: center center !important;
414
+}
415
+
416
+.img-preview {
417
+    max-width: 64px;
418
+    max-height: 64px;
419
+}
420
+
408 421
 .loading {
409 422
     background-image: url("../img/ajax-loader2.gif") !important;
410 423
     background-repeat: no-repeat !important;
... ...
@@ -95,7 +95,7 @@ img.totoz {
95 95
 #pinnipede A, #popup A {
96 96
   text-decoration: none;
97 97
 }
98
-#pinnipede DIV {
98
+#pinnipede > DIV {
99 99
   border-left: 4px solid transparent;
100 100
 }
101 101
 DIV.post {
... ...
@@ -104,6 +104,7 @@ DIV.post {
104 104
   background-color: #EFEFEF!important;
105 105
   border-bottom: 1px solid transparent;
106 106
   border-top: 1px solid transparent;
107
+  border-left: 4px solid transparent;
107 108
   opacity: 0.85;
108 109
 }
109 110
 
... ...
@@ -227,6 +227,15 @@
227 227
                             <div class="form-group">
228 228
                                 <div class="col-sm-offset-4 col-sm-8">
229 229
                                     <div class="checkbox">
230
+                                        <label>
231
+                                            <input type="checkbox" id="config-urlpreview"> Aperçu des url au survol
232
+                                        </label>
233
+                                    </div>
234
+                                </div>
235
+                            </div>
236
+                            <div class="form-group">
237
+                                <div class="col-sm-offset-4 col-sm-8">
238
+                                    <div class="checkbox">
230 239
                                         <label title="Nécessite de recharger la page">
231 240
                                             <input type="checkbox" id="config-autocomplete"> Auto-complétion
232 241
                                         </label>
... ...
@@ -52,8 +52,12 @@ var settings = {
52 52
             descr: "Accès rapide aux tribunes",
53 53
             type: TYPE_BOOL
54 54
         },
55
+        'urlpreview': {
56
+            descr: "Aperçu des url au survol",
57
+            type: TYPE_BOOL
58
+        },
55 59
         'favicon': {
56
-            descr: "Icone de la fenêtre",
60
+            descr: "Icône de la fenêtre",
57 61
             type: TYPE_STR
58 62
         },
59 63
         'boss_mode': {
... ...
@@ -291,6 +291,28 @@ function onMouseOver(event) {
291 291
             var totoz = getTotoz(targetId.substr(6));
292 292
             showTotoz(totoz, event.clientX, event.clientY);
293 293
         }
294
+    } else if (targetClass.indexOf('urlpreview') != -1) {
295
+        if(settings.value('urlpreview')) {
296
+            $(target).popover({
297
+                html: true,
298
+                placement: 'auto',
299
+                container: "#pinnipede",
300
+                title: "Loading url...",
301
+                content: '<div class="loadingwide"></div>'
302
+            }).popover('show');
303
+            var urlPopover = $(target).data('bs.popover');
304
+            $.getJSON('linkpreview.php?url=' + target.getAttribute('href'), function (data) {
305
+                var response = '<div class="pull-left">';
306
+                response += '<img class="img-preview" src="' + data.cover + '">';
307
+                response += "</div>";
308
+                response += data.description;
309
+                urlPopover.options.title = data.title;
310
+                urlPopover.options.content = response;
311
+                $(target).popover('show');
312
+            }).fail(function (jqxhr, textStatus, error) {
313
+                urlPopover.options.content = error;
314
+            });
315
+        }
294 316
     }
295 317
 }
296 318
 
... ...
@@ -301,6 +323,10 @@ function onMouseOut(event) {
301 323
     if (!targetClass) return;
302 324
     if (targetClass.indexOf('totoz') != -1) {
303 325
         document.getElementById('totozImg[' + targetId.substr(6) + ']').style.display = 'none';
326
+    } else if (targetClass.indexOf('urlpreview') != -1) {
327
+        if(settings.value('urlpreview')) {
328
+            $(target).popover('destroy');
329
+        }
304 330
     }
305 331
 }
306 332
 
... ...
@@ -979,8 +1005,8 @@ $(document).ready(function(){
979 1005
     });
980 1006
 
981 1007
     mc.on('singletap', function(ev) {
982
-        GlobalOnTouch = true;
983 1008
         if(ev.pointerType == 'touch') {
1009
+            GlobalOnTouch = true;
984 1010
             var target = $(ev.target);
985 1011
             if (target.is('a') 
986 1012
                 || target.hasClass('clock')
... ...
@@ -42,6 +42,7 @@ function writeUrl(message) {
42 42
 
43 43
         var text = $(this).text();
44 44
         var href = $(this).attr('href');
45
+        $(this).addClass('urlpreview');
45 46
         if(exp.test(text)){
46 47
             var matches = href.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i);
47 48
             var domain = matches && matches[1];
... ...
@@ -58,6 +58,7 @@ var DEFAULT_BALLTRAP = true;
58 58
 var DEFAULT_MAX_DUCKS = 15;
59 59
 var DEFAULT_BALLTRAP_MODE = BALLTRAP_AUTO;
60 60
 var DEFAULT_BALLTRAP_SILENT = false;
61
+var DEFAULT_URLPREVIEW = true;
61 62
 /*
62 63
 var DEFAULT_SOUND_ENABLED = false;
63 64
 var DEFAULT_SOUND_ZOO = false;
64 65
new file mode 100644
... ...
@@ -0,0 +1,22 @@
1
+<?php
2
+require __DIR__ . '/vendor/autoload.php';
3
+
4
+use Dusterio\LinkPreview\Client;
5
+
6
+if(isset($_REQUEST['url'])) {
7
+    $previewClient = new Dusterio\LinkPreview\Client($_REQUEST['url']);
8
+    try {
9
+        $preview = $previewClient->getPreview('general');
10
+        $response = json_encode($preview->toArray());
11
+        header('HTTP 1.1 200');
12
+        header( 'Content-type: text/xml');
13
+        echo $response;
14
+    } catch (\Dusterio\LinkPreview\Exceptions\ConnectionErrorException $e) {
15
+        header('HTTP 1.1 500 Internal Server Error');
16
+        header('Content-type: text/text');
17
+        echo $e->getMessage();
18
+        error_log($e->getMessage());
19
+    }
20
+} else {
21
+    header('HTTP 1.0 400 Bad Request');
22
+}
0 23
\ No newline at end of file
1 24
new file mode 100644
... ...
@@ -0,0 +1,7 @@
1
+<?php
2
+
3
+// autoload.php @generated by Composer
4
+
5
+require_once __DIR__ . '/composer' . '/autoload_real.php';
6
+
7
+return ComposerAutoloaderInit5a5db18957052394a225c5f4a83eb6c7::getLoader();
0 8
new file mode 100644
... ...
@@ -0,0 +1,415 @@
1
+<?php
2
+
3
+/*
4
+ * This file is part of Composer.
5
+ *
6
+ * (c) Nils Adermann <naderman@naderman.de>
7
+ *     Jordi Boggiano <j.boggiano@seld.be>
8
+ *
9
+ * For the full copyright and license information, please view the LICENSE
10
+ * file that was distributed with this source code.
11
+ */
12
+
13
+namespace Composer\Autoload;
14
+
15
+/**
16
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
17
+ *
18
+ *     $loader = new \Composer\Autoload\ClassLoader();
19
+ *
20
+ *     // register classes with namespaces
21
+ *     $loader->add('Symfony\Component', __DIR__.'/component');
22
+ *     $loader->add('Symfony',           __DIR__.'/framework');
23
+ *
24
+ *     // activate the autoloader
25
+ *     $loader->register();
26
+ *
27
+ *     // to enable searching the include path (eg. for PEAR packages)
28
+ *     $loader->setUseIncludePath(true);
29
+ *
30
+ * In this example, if you try to use a class in the Symfony\Component
31
+ * namespace or one of its children (Symfony\Component\Console for instance),
32
+ * the autoloader will first look for the class under the component/
33
+ * directory, and it will then fallback to the framework/ directory if not
34
+ * found before giving up.
35
+ *
36
+ * This class is loosely based on the Symfony UniversalClassLoader.
37
+ *
38
+ * @author Fabien Potencier <fabien@symfony.com>
39
+ * @author Jordi Boggiano <j.boggiano@seld.be>
40
+ * @see    http://www.php-fig.org/psr/psr-0/
41
+ * @see    http://www.php-fig.org/psr/psr-4/
42
+ */
43
+class ClassLoader
44
+{
45
+    // PSR-4
46
+    private $prefixLengthsPsr4 = array();
47
+    private $prefixDirsPsr4 = array();
48
+    private $fallbackDirsPsr4 = array();
49
+
50
+    // PSR-0
51
+    private $prefixesPsr0 = array();
52
+    private $fallbackDirsPsr0 = array();
53
+
54
+    private $useIncludePath = false;
55
+    private $classMap = array();
56
+    private $classMapAuthoritative = false;
57
+    private $missingClasses = array();
58
+
59
+    public function getPrefixes()
60
+    {
61
+        if (!empty($this->prefixesPsr0)) {
62
+            return call_user_func_array('array_merge', $this->prefixesPsr0);
63
+        }
64
+
65
+        return array();
66
+    }
67
+
68
+    public function getPrefixesPsr4()
69
+    {
70
+        return $this->prefixDirsPsr4;
71
+    }
72
+
73
+    public function getFallbackDirs()
74
+    {
75
+        return $this->fallbackDirsPsr0;
76
+    }
77
+
78
+    public function getFallbackDirsPsr4()
79
+    {
80
+        return $this->fallbackDirsPsr4;
81
+    }
82
+
83
+    public function getClassMap()
84
+    {
85
+        return $this->classMap;
86
+    }
87
+
88
+    /**
89
+     * @param array $classMap Class to filename map
90
+     */
91
+    public function addClassMap(array $classMap)
92
+    {
93
+        if ($this->classMap) {
94
+            $this->classMap = array_merge($this->classMap, $classMap);
95
+        } else {
96
+            $this->classMap = $classMap;
97
+        }
98
+    }
99
+
100
+    /**
101
+     * Registers a set of PSR-0 directories for a given prefix, either
102
+     * appending or prepending to the ones previously set for this prefix.
103
+     *
104
+     * @param string       $prefix  The prefix
105
+     * @param array|string $paths   The PSR-0 root directories
106
+     * @param bool         $prepend Whether to prepend the directories
107
+     */
108
+    public function add($prefix, $paths, $prepend = false)
109
+    {
110
+        if (!$prefix) {
111
+            if ($prepend) {
112
+                $this->fallbackDirsPsr0 = array_merge(
113
+                    (array) $paths,
114
+                    $this->fallbackDirsPsr0
115
+                );
116
+            } else {
117
+                $this->fallbackDirsPsr0 = array_merge(
118
+                    $this->fallbackDirsPsr0,
119
+                    (array) $paths
120
+                );
121
+            }
122
+
123
+            return;
124
+        }
125
+
126
+        $first = $prefix[0];
127
+        if (!isset($this->prefixesPsr0[$first][$prefix])) {
128
+            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
129
+
130
+            return;
131
+        }
132
+        if ($prepend) {
133
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
134
+                (array) $paths,
135
+                $this->prefixesPsr0[$first][$prefix]
136
+            );
137
+        } else {
138
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
139
+                $this->prefixesPsr0[$first][$prefix],
140
+                (array) $paths
141
+            );
142
+        }
143
+    }
144
+
145
+    /**
146
+     * Registers a set of PSR-4 directories for a given namespace, either
147
+     * appending or prepending to the ones previously set for this namespace.
148
+     *
149
+     * @param string       $prefix  The prefix/namespace, with trailing '\\'
150
+     * @param array|string $paths   The PSR-4 base directories
151
+     * @param bool         $prepend Whether to prepend the directories
152
+     *
153
+     * @throws \InvalidArgumentException
154
+     */
155
+    public function addPsr4($prefix, $paths, $prepend = false)
156
+    {
157
+        if (!$prefix) {
158
+            // Register directories for the root namespace.
159
+            if ($prepend) {
160
+                $this->fallbackDirsPsr4 = array_merge(
161
+                    (array) $paths,
162
+                    $this->fallbackDirsPsr4
163
+                );
164
+            } else {
165
+                $this->fallbackDirsPsr4 = array_merge(
166
+                    $this->fallbackDirsPsr4,
167
+                    (array) $paths
168
+                );
169
+            }
170
+        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
171
+            // Register directories for a new namespace.
172
+            $length = strlen($prefix);
173
+            if ('\\' !== $prefix[$length - 1]) {
174
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
175
+            }
176
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
177
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
178
+        } elseif ($prepend) {
179
+            // Prepend directories for an already registered namespace.
180
+            $this->prefixDirsPsr4[$prefix] = array_merge(
181
+                (array) $paths,
182
+                $this->prefixDirsPsr4[$prefix]
183
+            );
184
+        } else {
185
+            // Append directories for an already registered namespace.
186
+            $this->prefixDirsPsr4[$prefix] = array_merge(
187
+                $this->prefixDirsPsr4[$prefix],
188
+                (array) $paths
189
+            );
190
+        }
191
+    }
192
+
193
+    /**
194
+     * Registers a set of PSR-0 directories for a given prefix,
195
+     * replacing any others previously set for this prefix.
196
+     *
197
+     * @param string       $prefix The prefix
198
+     * @param array|string $paths  The PSR-0 base directories
199
+     */
200
+    public function set($prefix, $paths)
201
+    {
202
+        if (!$prefix) {
203
+            $this->fallbackDirsPsr0 = (array) $paths;
204
+        } else {
205
+            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
206
+        }
207
+    }
208
+
209
+    /**
210
+     * Registers a set of PSR-4 directories for a given namespace,
211
+     * replacing any others previously set for this namespace.
212
+     *
213
+     * @param string       $prefix The prefix/namespace, with trailing '\\'
214
+     * @param array|string $paths  The PSR-4 base directories
215
+     *
216
+     * @throws \InvalidArgumentException
217
+     */
218
+    public function setPsr4($prefix, $paths)
219
+    {
220
+        if (!$prefix) {
221
+            $this->fallbackDirsPsr4 = (array) $paths;
222
+        } else {
223
+            $length = strlen($prefix);
224
+            if ('\\' !== $prefix[$length - 1]) {
225
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
226
+            }
227
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
228
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
229
+        }
230
+    }
231
+
232
+    /**
233
+     * Turns on searching the include path for class files.
234
+     *
235
+     * @param bool $useIncludePath
236
+     */
237
+    public function setUseIncludePath($useIncludePath)
238
+    {
239
+        $this->useIncludePath = $useIncludePath;
240
+    }
241
+
242
+    /**
243
+     * Can be used to check if the autoloader uses the include path to check
244
+     * for classes.
245
+     *
246
+     * @return bool
247
+     */
248
+    public function getUseIncludePath()
249
+    {
250
+        return $this->useIncludePath;
251
+    }
252
+
253
+    /**
254
+     * Turns off searching the prefix and fallback directories for classes
255
+     * that have not been registered with the class map.
256
+     *
257
+     * @param bool $classMapAuthoritative
258
+     */
259
+    public function setClassMapAuthoritative($classMapAuthoritative)
260
+    {
261
+        $this->classMapAuthoritative = $classMapAuthoritative;
262
+    }
263
+
264
+    /**
265
+     * Should class lookup fail if not found in the current class map?
266
+     *
267
+     * @return bool
268
+     */
269
+    public function isClassMapAuthoritative()
270
+    {
271
+        return $this->classMapAuthoritative;
272
+    }
273
+
274
+    /**
275
+     * Registers this instance as an autoloader.
276
+     *
277
+     * @param bool $prepend Whether to prepend the autoloader or not
278
+     */
279
+    public function register($prepend = false)
280
+    {
281
+        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
282
+    }
283
+
284
+    /**
285
+     * Unregisters this instance as an autoloader.
286
+     */
287
+    public function unregister()
288
+    {
289
+        spl_autoload_unregister(array($this, 'loadClass'));
290
+    }
291
+
292
+    /**
293
+     * Loads the given class or interface.
294
+     *
295
+     * @param  string    $class The name of the class
296
+     * @return bool|null True if loaded, null otherwise
297
+     */
298
+    public function loadClass($class)
299
+    {
300
+        if ($file = $this->findFile($class)) {
301
+            includeFile($file);
302
+
303
+            return true;
304
+        }
305
+    }
306
+
307
+    /**
308
+     * Finds the path to the file where the class is defined.
309
+     *
310
+     * @param string $class The name of the class
311
+     *
312
+     * @return string|false The path if found, false otherwise
313
+     */
314
+    public function findFile($class)
315
+    {
316
+        // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
317
+        if ('\\' == $class[0]) {
318
+            $class = substr($class, 1);
319
+        }
320
+
321
+        // class map lookup
322
+        if (isset($this->classMap[$class])) {
323
+            return $this->classMap[$class];
324
+        }
325
+        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
326
+            return false;
327
+        }
328
+
329
+        $file = $this->findFileWithExtension($class, '.php');
330
+
331
+        // Search for Hack files if we are running on HHVM
332
+        if (false === $file && defined('HHVM_VERSION')) {
333
+            $file = $this->findFileWithExtension($class, '.hh');
334
+        }
335
+
336
+        if (false === $file) {
337
+            // Remember that this class does not exist.
338
+            $this->missingClasses[$class] = true;
339
+        }
340
+
341
+        return $file;
342
+    }
343
+
344
+    private function findFileWithExtension($class, $ext)
345
+    {
346
+        // PSR-4 lookup
347
+        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
348
+
349
+        $first = $class[0];
350
+        if (isset($this->prefixLengthsPsr4[$first])) {
351
+            foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
352
+                if (0 === strpos($class, $prefix)) {
353
+                    foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
354
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
355
+                            return $file;
356
+                        }
357
+                    }
358
+                }
359
+            }
360
+        }
361
+
362
+        // PSR-4 fallback dirs
363
+        foreach ($this->fallbackDirsPsr4 as $dir) {
364
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
365
+                return $file;
366
+            }
367
+        }
368
+
369
+        // PSR-0 lookup
370
+        if (false !== $pos = strrpos($class, '\\')) {
371
+            // namespaced class name
372
+            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
373
+                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
374
+        } else {
375
+            // PEAR-like class name
376
+            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
377
+        }
378
+
379
+        if (isset($this->prefixesPsr0[$first])) {
380
+            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
381
+                if (0 === strpos($class, $prefix)) {
382
+                    foreach ($dirs as $dir) {
383
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
384
+                            return $file;
385
+                        }
386
+                    }
387
+                }
388
+            }
389
+        }
390
+
391
+        // PSR-0 fallback dirs
392
+        foreach ($this->fallbackDirsPsr0 as $dir) {
393
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
394
+                return $file;
395
+            }
396
+        }
397
+
398
+        // PSR-0 include paths.
399
+        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
400
+            return $file;
401
+        }
402
+
403
+        return false;
404
+    }
405
+}
406
+
407