|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace Charcoal\View\Mustache; |
|
4
|
|
|
|
|
5
|
|
|
use \ArrayIterator; |
|
6
|
|
|
use \IteratorAggregate; |
|
7
|
|
|
|
|
8
|
|
|
use \Mustache_LambdaHelper; |
|
9
|
|
|
|
|
10
|
|
|
/** |
|
11
|
|
|
* Default mustache render helper. Helpers are global functions available to all the templates. |
|
12
|
|
|
*/ |
|
13
|
|
|
class GenericHelper implements IteratorAggregate |
|
14
|
|
|
{ |
|
15
|
|
|
/** |
|
16
|
|
|
* @var string $js |
|
17
|
|
|
*/ |
|
18
|
|
|
static private $js = ''; |
|
19
|
|
|
|
|
20
|
|
|
/** |
|
21
|
|
|
* @var array $jsRequirements |
|
22
|
|
|
*/ |
|
23
|
|
|
static private $jsRequirements = []; |
|
24
|
|
|
|
|
25
|
|
|
/** |
|
26
|
|
|
* @var array $cssRequirements |
|
27
|
|
|
*/ |
|
28
|
|
|
static private $cssRequirements = []; |
|
29
|
|
|
/** |
|
30
|
|
|
* @var string $css; |
|
31
|
|
|
*/ |
|
32
|
|
|
static private $css = ''; |
|
33
|
|
|
|
|
34
|
|
|
/** |
|
35
|
|
|
* IteratorAggregate > getIterator |
|
36
|
|
|
* Also ensure this class is `Traversable` |
|
37
|
|
|
* |
|
38
|
|
|
* @return ArrayIterator |
|
39
|
|
|
*/ |
|
40
|
|
|
public function getIterator() |
|
41
|
|
|
{ |
|
42
|
|
|
return new ArrayIterator([ |
|
43
|
|
|
'_t' => function($txt) { |
|
44
|
|
|
return $txt; |
|
45
|
|
|
}, |
|
46
|
|
|
'addJs' => function($js, Mustache_LambdaHelper $helper) { |
|
47
|
|
|
return $this->addJs($js, $helper); |
|
48
|
|
|
}, |
|
49
|
|
|
'js' => function() { |
|
50
|
|
|
return $this->js(); |
|
51
|
|
|
}, |
|
52
|
|
|
'addJsRequirement' => function($jsRequirement) { |
|
53
|
|
|
return $this->addJsRequirement($jsRequirement); |
|
54
|
|
|
}, |
|
55
|
|
|
'jsRequirements' => function() { |
|
56
|
|
|
return $this->jsRequirements(); |
|
57
|
|
|
}, |
|
58
|
|
|
'addCss' => function($css, Mustache_LambdaHelper $helper) { |
|
59
|
|
|
return $this->addCss($css, $helper); |
|
60
|
|
|
}, |
|
61
|
|
|
'css' => function() { |
|
62
|
|
|
return $this->css(); |
|
63
|
|
|
}, |
|
64
|
|
|
'addCssRequirement' => function($cssRequirement) { |
|
65
|
|
|
return $this->addCssRequirement($cssRequirement); |
|
66
|
|
|
} |
|
67
|
|
|
]); |
|
68
|
|
|
} |
|
69
|
|
|
|
|
70
|
|
|
/** |
|
71
|
|
|
* @param string $js |
|
72
|
|
|
* @param Mustache_LamdaHelper $helper |
|
73
|
|
|
* @return void |
|
74
|
|
|
*/ |
|
75
|
|
View Code Duplication |
public function addJs($js, Mustache_LambdaHelper $helper = null) |
|
|
|
|
|
|
76
|
|
|
{ |
|
77
|
|
|
if ($helper !== null) { |
|
78
|
|
|
$js = $helper->render($js); |
|
79
|
|
|
} |
|
80
|
|
|
self::$js .= $js; |
|
81
|
|
|
} |
|
82
|
|
|
|
|
83
|
|
|
/** |
|
84
|
|
|
* Get the saved js content and purge |
|
85
|
|
|
* |
|
86
|
|
|
* @return string |
|
87
|
|
|
*/ |
|
88
|
|
|
public function js() |
|
89
|
|
|
{ |
|
90
|
|
|
$js = self::$js; |
|
91
|
|
|
self::$js = ''; |
|
92
|
|
|
return $js; |
|
93
|
|
|
} |
|
94
|
|
|
|
|
95
|
|
|
/** |
|
96
|
|
|
* @param string $jsRequirement |
|
97
|
|
|
* @return void |
|
98
|
|
|
*/ |
|
99
|
|
|
public function addJsRequirement($jsRequirement) |
|
100
|
|
|
{ |
|
101
|
|
|
if (!in_array($jsRequirement, self::$jsRequirements)) { |
|
102
|
|
|
self::$jsRequirements[] = $jsRequirement; |
|
103
|
|
|
} |
|
104
|
|
|
} |
|
105
|
|
|
|
|
106
|
|
|
/** |
|
107
|
|
|
* Ouput and reset JS requirements |
|
108
|
|
|
* |
|
109
|
|
|
* @return string |
|
110
|
|
|
*/ |
|
111
|
|
|
public function jsRequirements() |
|
112
|
|
|
{ |
|
113
|
|
|
$req = implode("\n", self::$jsRequirements); |
|
114
|
|
|
self::$jsRequirements = []; |
|
115
|
|
|
return $req; |
|
116
|
|
|
} |
|
117
|
|
|
|
|
118
|
|
|
/** |
|
119
|
|
|
* @param string $css |
|
120
|
|
|
* @return void |
|
121
|
|
|
*/ |
|
122
|
|
View Code Duplication |
public function addCss($css, Mustache_LambdaHelper $helper = null) |
|
|
|
|
|
|
123
|
|
|
{ |
|
124
|
|
|
if ($helper !== null) { |
|
125
|
|
|
$css = $helper->render($css); |
|
126
|
|
|
} |
|
127
|
|
|
self::$css .= $css; |
|
128
|
|
|
} |
|
129
|
|
|
|
|
130
|
|
|
/** |
|
131
|
|
|
* Get the saved css content and purge |
|
132
|
|
|
* |
|
133
|
|
|
* @return string |
|
134
|
|
|
*/ |
|
135
|
|
|
public function css() |
|
136
|
|
|
{ |
|
137
|
|
|
$css = self::$css; |
|
138
|
|
|
self::$css = ''; |
|
139
|
|
|
return $css; |
|
140
|
|
|
} |
|
141
|
|
|
|
|
142
|
|
|
/** |
|
143
|
|
|
* @param string $cssRequirement |
|
144
|
|
|
* @return string |
|
145
|
|
|
*/ |
|
146
|
|
|
public function addCssRequirement($cssRequirement) |
|
147
|
|
|
{ |
|
148
|
|
|
if (!in_array($cssRequirement, self::$cssRequirements)) { |
|
149
|
|
|
self::$cssRequirements[] = $cssRequirement; |
|
150
|
|
|
} |
|
151
|
|
|
} |
|
152
|
|
|
|
|
153
|
|
|
/** |
|
154
|
|
|
* Ouput and reset CSS requirements |
|
155
|
|
|
* |
|
156
|
|
|
* @return string |
|
157
|
|
|
*/ |
|
158
|
|
|
public function cssRequirements() |
|
159
|
|
|
{ |
|
160
|
|
|
$req = implode("\n", self::$cssRequirements); |
|
161
|
|
|
self::$cssRequirements = []; |
|
162
|
|
|
return $req; |
|
163
|
|
|
} |
|
164
|
|
|
} |
|
165
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.