ClassicRenderer.php
3.33 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
<?php
namespace YahnisElsts\AdminMenuEditor\Customizable\Rendering;
use YahnisElsts\AdminMenuEditor\Customizable\Controls\Section;
use YahnisElsts\AdminMenuEditor\Customizable\Controls\Tooltip;
abstract class ClassicRenderer extends Renderer {
protected $needsTooltipDependencies = false;
public function renderTooltipTrigger(Tooltip $tooltip) {
$this->needsTooltipDependencies = true;
$linkClasses = array('ws_tooltip_trigger');
$dashiconClasses = array('dashicons');
switch ($tooltip->getType()) {
case Tooltip::EXPERIMENTAL:
$linkClasses[] = 'ame-warning-tooltip';
$dashiconClasses[] = 'dashicons-admin-tools';
break;
case Tooltip::INFO:
default:
$dashiconClasses[] = 'dashicons-info';
}
$linkClasses = array_merge($linkClasses, $tooltip->getExtraClasses());
printf(
'<a class="%s" title="%s"><span class="%s"></span></a>',
esc_attr(implode(' ', $linkClasses)),
esc_attr($tooltip->getHtmlContent()),
esc_attr(implode(' ', $dashiconClasses))
);
}
public function enqueueDependencies($containerSelector = '') {
static $done = false;
if ( $done ) {
return;
}
$done = true;
parent::enqueueDependencies($containerSelector);
if ( $this->needsTooltipDependencies ) {
if ( !(wp_script_is('jquery-qtip', 'done') || wp_script_is('jquery-qtip')) ) {
wp_enqueue_script('jquery-qtip');
}
$tooltipInitScript = /** @lang JavaScript */
'(function(containerSelector) {
jQuery(function ($) {
$(containerSelector + \' .ws_tooltip_trigger\').qtip({
style: {
classes: \'qtip qtip-rounded ws_tooltip_node ws_wide_tooltip\'
}
});
});
})';
$tooltipInitScript .= "('" . esc_js($containerSelector) . "');";
$initScriptTag = '<script type="text/javascript">' . $tooltipInitScript . '</script>';
//Adding inline scripts only works if the script is in queue
//and not already done.
if ( wp_script_is('jquery-qtip') && !wp_script_is('jquery-qtip', 'done') ) {
wp_add_inline_script('jquery-qtip', $tooltipInitScript);
} else {
$fallbackAction = 'admin_print_footer_scripts';
if ( !did_action($fallbackAction) ) {
add_action($fallbackAction, function () use ($initScriptTag) {
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Outputs generated JS.
echo $initScriptTag;
});
} else {
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $initScriptTag;
}
}
}
}
/**
* @param \YahnisElsts\AdminMenuEditor\Customizable\Controls\ControlGroup $group
* @return void
*/
protected function renderGroupTitleContent($group) {
$tooltip = $group->getTooltip();
$title = $group->getTitle();
if ( !empty($title) ) {
$labelTargetId = $group->getLabelFor();
if ( !empty($labelTargetId) ) {
printf(
'<label for="%s">%s</label>',
esc_attr($labelTargetId),
esc_html($title)
);
} else {
echo esc_html($title);
}
}
if ( $tooltip ) {
echo ' '; //Add a space between the title and the tooltip.
$this->renderTooltipTrigger($tooltip);
}
}
protected function renderSectionTitleContent(Section $section) {
if ( !$section->hasTitle() ) {
return;
}
$title = $section->getTitle();
echo esc_html($title);
$tooltip = $section->getTooltip();
if ( $tooltip ) {
echo ' ';
$this->renderTooltipTrigger($tooltip);
}
}
}