Passed
Push — master ( 834be7...9bbb97 )
by P.R.
07:31
created

RenderWalker::setIncludeModuleClass()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 5
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace Plaisio\Helper;
5
6
/**
7
 * Class for generating CSS class names when walking your representation of your HTMl elements.
8
 */
9
class RenderWalker
10
{
11
  //--------------------------------------------------------------------------------------------------------------------
12
  /**
13
   * Whether to always include the module class individually in the list of classes for an HTMl element.
14
   *
15
   * @var bool
16
   */
17
  private bool $includeModuleClass = false;
18
19
  /**
20
   * The CSS module class.
21
   *
22
   * @var string
23
   */
24
  private string $moduleClass;
25
26
  /**
27
   * The CSS sub-module class.
28
   *
29
   * @var string|null
30
   */
31
  private ?string $subModuleClass;
32
33
  //--------------------------------------------------------------------------------------------------------------------
34
  /**
35
   * Object constructor.
36
   *
37
   * @param string      $moduleClass    The CSS module class.
38
   * @param string|null $subModuleClass The CSS sub-module class.
39
   */
40 7
  public function __construct(string $moduleClass, ?string $subModuleClass = null)
41
  {
42 7
    $this->moduleClass    = $moduleClass;
43 7
    $this->subModuleClass = $subModuleClass;
44 7
  }
45
46
  //--------------------------------------------------------------------------------------------------------------------
47
  /**
48
   * Returns all applicable classes for an HTML element.
49
   *
50
   * @param string[]|string|null $subClasses      The CSS sub-classes with the CSS module class.
51
   * @param string[]|string|null $additionClasses Additional CSS classes.
52
   *
53
   * @return string[]
54
   */
55 6
  public function getClasses($subClasses = null, $additionClasses = null): array
56
  {
57 6
    if ($this->includeModuleClass)
58
    {
59 2
      $classes = [$this->moduleClass];
60
    }
61
    else
62
    {
63 4
      $classes = [];
64
    }
65
66 6
    if ($this->subModuleClass!==null)
67
    {
68 2
      $classes[] = $this->subModuleClass;
69
    }
70
71 6
    if ($subClasses!==null)
72
    {
73 5
      if (is_string($subClasses))
74
      {
75 4
        $classes[] = $this->moduleClass.'-'.$subClasses;
76
      }
77 5
      elseif (is_array($subClasses))
78
      {
79 4
        foreach ($subClasses as $subClass)
80
        {
81 4
          $classes[] = $this->moduleClass.'-'.$subClass;
82
        }
83
      }
84
      else
85
      {
86 1
        throw new \InvalidArgumentException(sprintf('Argument $subClasses must be string[]|string|null, got %s',
87 1
                                                    gettype($subClasses)));
88
      }
89
    }
90
91 5
    if ($additionClasses!==null)
92
    {
93 5
      if (is_string($additionClasses))
94
      {
95 4
        $classes[] = $additionClasses;
96
      }
97 5
      elseif (is_array($additionClasses))
98
      {
99 4
        foreach ($additionClasses as $additionClass)
100
        {
101 4
          $classes[] = $additionClass;
102
        }
103
      }
104
      else
105
      {
106 1
        throw new \InvalidArgumentException(sprintf('Argument $additionClasses must be string[]|string|null, got %s',
107 1
                                                    gettype($additionClasses)));
108
      }
109
    }
110
111 4
    return $classes;
112
  }
113
114
  //--------------------------------------------------------------------------------------------------------------------
115
  /**
116
   * Returns the CSS module class.
117
   *
118
   * @return string
119
   */
120 1
  public function getModuleClass(): string
121
  {
122 1
    return $this->moduleClass;
123
  }
124
125
  //--------------------------------------------------------------------------------------------------------------------
126
  /**
127
   * Returns the CSS sub-module class.
128
   *
129
   * @return string|null
130
   */
131 1
  public function getSubModuleClass(): ?string
132
  {
133 1
    return $this->subModuleClass;
134
  }
135
136
  //--------------------------------------------------------------------------------------------------------------------
137
  /**
138
   * Set whether to always include the module and sub-module class individually in the list of classes for an HTMl
139
   * element.
140
   *
141
   * @param bool $includeModuleClass Whether to always include the module class individually in the list of  classes
142
   *                                 for an HTMl element.
143
   *
144
   * @return $this
145
   */
146 2
  public function setIncludeModuleClass(bool $includeModuleClass): RenderWalker
147
  {
148 2
    $this->includeModuleClass = $includeModuleClass;
149
150 2
    return $this;
151
  }
152
153
  //--------------------------------------------------------------------------------------------------------------------
154
  /**
155
   * Sets CSS module class.
156
   *
157
   * @param string $moduleClass The CSS module class.
158
   *
159
   * @return $this
160
   */
161 1
  public function setModuleClass(string $moduleClass): self
162
  {
163 1
    $this->moduleClass = $moduleClass;
164
165 1
    return $this;
166
  }
167
168
  //--------------------------------------------------------------------------------------------------------------------
169
  /**
170
   * Sets CSS sub-module class.
171
   *
172
   * @param string|null $subModuleClass The CSS sub-module class.
173
   *
174
   * @return $this
175
   */
176 1
  public function setSubModuleClass(?string $subModuleClass): RenderWalker
177
  {
178 1
    $this->subModuleClass = $subModuleClass;
179
180 1
    return $this;
181
  }
182
183
  //--------------------------------------------------------------------------------------------------------------------
184
}
185
186
//----------------------------------------------------------------------------------------------------------------------
187