Passed
Push — chartjs ( a4225c )
by Guillaume
12:22
created

Chartjs::grab()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 41
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 20
c 1
b 0
f 0
dl 0
loc 41
ccs 0
cts 13
cp 0
rs 9.6
cc 1
nc 1
nop 0
crap 2
1
<?php
2
3
namespace App\Docsets;
4
5
use Godbout\DashDocsetBuilder\Docsets\BaseDocset;
6
use Illuminate\Support\Collection;
7
use Illuminate\Support\Facades\Storage;
8
use Wa72\HtmlPageDom\HtmlPageCrawler;
9
10
class Chartjs extends BaseDocset
11
{
12
    public const CODE = 'chartjs';
13
    public const NAME = 'Chart.js';
14
    public const URL = 'www.chartjs.org';
15
    public const INDEX = 'index.html';
16
    public const PLAYGROUND = '';
17
    public const ICON_16 = '../../icons/icon.png';
18
    public const ICON_32 = '../../icons/[email protected]';
19
    public const EXTERNAL_DOMAINS = [
20
    ];
21
22
23
    public function grab(): bool
24
    {
25
        $toIgnore = implode('|', [
26
            '/docs/2.9.3',
27
            '/docs/master',
28
            '/samples/master'
29
        ]);
30
31
        $toGet = implode('|', [
32
            '\.css',
33
            // '\.gif',
34
            '\.ico',
35
            // '\.jpg',
36
            '\.js',
37
            // '\.png',
38
            // '\.svg',
39
            // '\.webmanifest',
40
            '/docs',
41
            '/samples'
42
        ]);
43
44
        system(
45
            "echo; wget www.chartjs.org \
46
                --mirror \
47
                --trust-server-names \
48
                --reject-regex='{$toIgnore}' \
49
                --accept-regex='{$toGet}' \
50
                --ignore-case \
51
                --page-requisites \
52
                --adjust-extension \
53
                --convert-links \
54
                --span-hosts \
55
                --domains={$this->externalDomains()} \
56
                --directory-prefix=storage/{$this->downloadedDirectory()} \
57
                -e robots=off \
58
                --quiet \
59
                --show-progress",
60
            $result
61
        );
62
63
        return $result === 0;
64
    }
65
66
    public function entries(string $file): Collection
67
    {
68
        $crawler = HtmlPageCrawler::create(Storage::get($file));
69
70
        $entries = collect();
71
72
        $crawler->filter('.summary a')->each(function (HtmlPageCrawler $node) use ($entries) {
73
            $entries->push([
74
                'name' => $node->text(),
75
                'type' => 'Guide',
76
                'path' => $node->attr('href'),
77
            ]);
78
        });
79
80
        return $entries;
81
    }
82
83
    public function format(string $file): string
84
    {
85
        $crawler = HtmlPageCrawler::create(Storage::get($file));
86
87
        return $crawler->saveHTML();
88
    }
89
}
90