Passed
Push — master ( 260455...4746f9 )
by Brent
04:30
created

ResponsiveImage::src()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace Brendt\Image;
4
5
class ResponsiveImage
6
{
7
8
    /**
9
     * @var string
10
     */
11
    private $src = '';
12
13
    /**
14
     * @var string[]
15
     */
16
    private $srcset = [];
17
18
    /**
19
     * @var string[]
20
     */
21
    private $sizes = [];
22
23
    /**
24
     * ResponsiveImage constructor.
25
     *
26
     * @param      $src
27
     */
28
    public function __construct($src) {
29
        $src = preg_replace('/^(\/|\.\/)/', '', $src);
30
31
        $this->src = "/{$src}";
32
    }
33
34
    /**
35
     * @return string
36
     */
37
    public function src() {
38
        return $this->src;
39
    }
40
41
    /**
42
     * @param      $sources
43
     * @param null $value
44
     *
45
     * @return ResponsiveImage
46
     */
47
    public function addSource($sources, $value = null) {
48
        if (!is_array($sources) && $value) {
49
            $sources = [$sources => $value];
50
        } elseif (!is_array($sources)) {
51
            return $this;
52
        }
53
54
        foreach ($sources as $url => $width) {
55
            $url = ltrim($url, '/');
56
            $width = str_replace('px', '', $width);
57
58
            $this->srcset[$width] = "/{$url}";
59
        }
60
61
        krsort($this->srcset);
62
63
        return $this;
64
    }
65
66
    /**
67
     * @return string
68
     */
69
    public function srcset() {
70
        $srcset = [];
71
72
        foreach ($this->srcset as $w => $url) {
73
            $srcset[] = "{$url} {$w}w";
74
        }
75
76
        return implode(',', $srcset);
77
    }
78
79
    /**
80
     * @param array|string $sizes
81
     * @param null         $value
82
     *
83
     * @return ResponsiveImage
84
     */
85
    public function addSizes($sizes, $value = null) {
86
        if (!is_array($sizes) && $value) {
87
            $sizes = [$sizes => $value];
88
        } elseif (!is_array($sizes)) {
89
            return $this;
90
        }
91
92
        foreach ($sizes as $media => $value) {
93
            $this->sizes[$media] = $value;
94
        }
95
96
        return $this;
97
    }
98
99
    /**
100
     * @return string
101
     */
102
    public function sizes() {
103
        $sizes = [];
104
105
        foreach ($this->sizes as $media => $value) {
106
            $media = rtrim(ltrim($media, '('), ')');
107
108
            if (is_numeric($media)) {
109
                $sizes[] = "$value";
110
            } else {
111
                $sizes[] = "({$media}) $value";
112
            }
113
        }
114
115
        return implode(', ', $sizes);
116
    }
117
118
}
119