light-switch-presenter.php
4.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<?php
namespace Yoast\WP\SEO\Presenters\Admin;
use Yoast\WP\SEO\Presenters\Abstract_Presenter;
/**
* Class Light_Switch_Presenter.
*
* @package Yoast\WP\SEO\Presenters\Admin
*/
class Light_Switch_Presenter extends Abstract_Presenter {
/**
* The variable to create the checkbox for.
*
* @var string
*/
protected $var;
/**
* The visual label text for the toggle.
*
* @var string
*/
protected $label;
/**
* Array of two visual labels for the buttons.
*
* @var array
*/
protected $buttons;
/**
* The name of the underlying checkbox.
*
* @var string
*/
protected $name;
/**
* The variable current value.
*
* @var string|bool
*/
protected $value;
/**
* Reverse order of buttons.
*
* @var bool
*/
protected $reverse;
/**
* The inline Help HTML.
*
* @var string
*/
protected $help;
/**
* Whether the visual label is displayed in strong text.
*
* @var bool
*/
protected $strong;
/**
* The disabled attribute HTML.
*
* @var string
*/
protected $disabled_attribute;
/**
* Light_Switch_Presenter constructor.
*
* @param string $variable The variable to create the checkbox for.
* @param string $label The visual label text for the toggle.
* @param array $buttons Array of two visual labels for the buttons (defaults Disabled/Enabled).
* @param string $name The name of the underlying checkbox.
* @param string|bool $value The variable current value, to determine the checked attribute.
* @param bool $reverse Optional. Reverse order of buttons (default true).
* @param string $help Optional. Inline Help HTML that will be printed out before the toggle. Default is empty.
* @param bool $strong Optional. Whether the visual label is displayed in strong text. Default is false.
* Starting from Yoast SEO 16.5, the visual label is forced to bold via CSS.
* @param string $disabled_attribute Optional. The disabled HTML attribute. Default is empty.
*/
public function __construct(
$variable,
$label,
$buttons,
$name,
$value,
$reverse = true,
$help = '',
$strong = false,
$disabled_attribute = ''
) {
$this->var = $variable;
$this->label = $label;
$this->buttons = $buttons;
$this->name = $name;
$this->value = $value;
$this->reverse = $reverse;
$this->help = $help;
$this->strong = $strong;
$this->disabled_attribute = $disabled_attribute;
}
/**
* Presents the light switch toggle.
*
* @return string The light switch's HTML.
*/
public function present() {
if ( empty( $this->buttons ) ) {
$this->buttons = [ \__( 'Disabled', 'wordpress-seo' ), \__( 'Enabled', 'wordpress-seo' ) ];
}
list( $off_button, $on_button ) = $this->buttons;
$class = 'switch-light switch-candy switch-yoast-seo';
if ( $this->reverse ) {
$class .= ' switch-yoast-seo-reverse';
}
$help_class = ! empty( $this->help ) ? ' switch-container__has-help' : '';
$strong_class = ( $this->strong ) ? ' switch-light-visual-label__strong' : '';
$output = '<div class="switch-container' . $help_class . '">';
$output .= \sprintf(
'<span class="switch-light-visual-label%1$s" id="%2$s">%3$s</span>%4$s',
$strong_class, // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $strong_class output is hardcoded.
\esc_attr( $this->var . '-label' ),
\esc_html( $this->label ),
$this->help // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: The help contains HTML.
);
$output .= '<label class="' . $class . '"><b class="switch-yoast-seo-jaws-a11y"> </b>';
$output .= \sprintf(
'<input type="checkbox" aria-labelledby="%1$s" id="%2$s" name="%3$s" value="on"%4$s%5$s/>',
\esc_attr( $this->var . '-label' ),
\esc_attr( $this->var ),
\esc_attr( $this->name ),
\checked( $this->value, 'on', false ), // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: The output is hardcoded by WordPress.
$this->disabled_attribute // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded.
);
$output .= '<span aria-hidden="true">';
$output .= '<span>' . \esc_html( $off_button ) . '</span>';
$output .= '<span>' . \esc_html( $on_button ) . '</span>';
$output .= '<a></a>';
$output .= '</span></label><div class="clear"></div></div>';
return $output;
}
}