Passed
Push — master ( c5451f...8c7bf5 )
by P.R.
06:56
created

RenderWalker::setPrevailingModuleClasses()   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
   * The CSS module class.
14
   *
15
   * @var string
16
   */
17
  private string $moduleClass;
18
19
  /**
20
   * Whether to always include the module and sub-module classes individually in the list of applicable classes for an
21
   * HTMl element.
22
   *
23
   * @var bool
24
   */
25
  private bool $prevailingModuleClasses = false;
26
27
  /**
28
   * The CSS sub-module class.
29
   *
30
   * @var string|null
31
   */
32
  private ?string $subModuleClass;
33
34
  //--------------------------------------------------------------------------------------------------------------------
35
  /**
36
   * Object constructor.
37
   *
38
   * @param string      $moduleClass    The CSS module class.
39
   * @param string|null $subModuleClass The CSS sub-module class.
40
   */
41 7
  public function __construct(string $moduleClass, ?string $subModuleClass = null)
42
  {
43 7
    $this->moduleClass    = $moduleClass;
44 7
    $this->subModuleClass = $subModuleClass;
45 7
  }
46
47
  //--------------------------------------------------------------------------------------------------------------------
48
  /**
49
   * Returns all applicable classes for an HTML element.
50
   *
51
   * @param string[]|string|null $subClasses      The CSS sub-classes with the CSS module class.
52
   * @param string[]|string|null $additionClasses Additional CSS classes.
53
   *
54
   * @return string[]
55
   */
56 6
  public function getClasses($subClasses = null, $additionClasses = null): array
57
  {
58 6
    if ($this->prevailingModuleClasses)
59
    {
60 2
      $classes = [$this->moduleClass];
61 2
      if ($this->subModuleClass!==null)
62
      {
63 2
        $classes[] = $this->subModuleClass;
64
      }
65
    }
66
    else
67
    {
68 4
      $classes = [];
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
   * Sets CSS module class.
139
   *
140
   * @param string $moduleClass The CSS module class.
141
   *
142
   * @return $this
143
   */
144 1
  public function setModuleClass(string $moduleClass): self
145
  {
146 1
    $this->moduleClass = $moduleClass;
147
148 1
    return $this;
149
  }
150
151
  //--------------------------------------------------------------------------------------------------------------------
152
  /**
153
   * Set whether to always include the module and sub-module classes individually in the list of applicable classes for
154
   * an HTMl element.
155
   *
156
   * @param bool $prevailingModuleClasses Whether to always include the module and sub-module classes individually in
157
   *                                      the list of applicable classes for an HTMl element.
158
   *
159
   * @return $this
160
   */
161 2
  public function setPrevailingModuleClasses(bool $prevailingModuleClasses): RenderWalker
162
  {
163 2
    $this->prevailingModuleClasses = $prevailingModuleClasses;
164
165 2
    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