''])); } /** @param mixed[] $args */ public static function textarea(array $args): string { return parent::textarea(self::daytidyFieldArgs($args)); } /** @param mixed[] $args */ public static function checkbox(array $args): string { return parent::checkbox(self::daytidyFieldArgs($args)); } /** @param mixed[] $args */ public static function checkboxes(array $args): string { if (!count($args)) return parent::checkboxes($args); $attributes = isset($args['attributes']) && is_array($args['attributes']) ? $args['attributes'] : []; $classes = array_values(array_unique(array_filter(preg_split('/\s+/', trim((string) ($attributes['class'] ?? ''))) ?: [], static function (string $class): bool { return $class !== '' && (Html::is_admin_context() || strpos($class, 'daytidy-admin-') !== 0); }))); $field_class = Html::get_daytidy_class('fields'); if (!in_array($field_class, $classes, true)) $classes[] = $field_class; $attributes['class'] = implode(' ', $classes); $args['attributes'] = $attributes; return parent::checkboxes($args); } /** @param mixed[] $args */ public static function editor(array $args): string { if (Html::is_admin_context() && !wp_doing_ajax()) return parent::editor($args); // wp_editor prints editor-buttons and its Dashicons dependency into its // HTML buffer. Public shortcode sanitization removes those link tags, // although WordPress has already marked the styles as done. Defer only // links produced during this editor render to the normal asset pipeline. $deferred = []; $defer = static function (string $tag, string $handle) use (&$deferred): string { $deferred[] = $handle; return ''; }; add_filter('style_loader_tag', $defer, PHP_INT_MAX, 2); try { return parent::editor($args); } finally { remove_filter('style_loader_tag', $defer, PHP_INT_MAX); $styles = wp_styles(); $styles->done = array_values(array_diff($styles->done, $deferred)); foreach ($deferred as $handle) wp_enqueue_style($handle); } } public static function requiredStar(): string { return '*'; } /** * @param mixed[] $args * @return string */ public static function switcher(array $args): string { if (!count($args)) return ''; $toggle = Arr::isset($args, 'toggle'); $toggle2 = Arr::isset($args, 'toggle2'); // Current Value $value = Arr::isset($args, 'value') ? (int) $args['value'] : 0; $disabled = !empty($args['disabled']); $admin = Html::is_admin_context(); return ''; } /** * @param mixed[] $args * @return string */ public static function imagepicker(array $args): string { if (!count($args)) return ''; $image_id = $args['value'] ?? ''; $image = $image_id ? wp_get_attachment_image($image_id, [400, 266]) : ''; $button_classes = Html::is_admin_context() ? ' daytidy-button daytidy-button--secondary' : ''; return '
%5$s',
$id,
esc_attr($class),
esc_attr($copy_label),
esc_attr($copied_label),
esc_html($value),
$button_content,
esc_attr($button_classes)
);
}
/**
* @param mixed[] $args
* @return string
*/
public static function copyableTextarea(array $args): string
{
if (!count($args)) return '';
$value = (string) ($args['value'] ?? '');
if ($value === '') return '';
$id = (string) ($args['id'] ?? ('daytidy-copyable-textarea-' . md5($value)));
$class = trim('daytidy-copyable-code daytidy-copyable-textarea ' . (string) ($args['class'] ?? ''));
$copy_label = (string) ($args['copy_label'] ?? esc_html__('Copy to clipboard', 'daytidy'));
$copied_label = (string) ($args['copied_label'] ?? esc_html__('Copied', 'daytidy'));
$rows = max(3, absint($args['rows'] ?? 12));
return sprintf(
'',
esc_attr($class),
esc_attr($copy_label),
esc_attr($copied_label),
esc_attr($id),
$rows,
esc_textarea($value),
Html::is_admin_context() ? ' daytidy-textarea ' . Html::get_daytidy_class('fields', 'admin') : ' ' . Html::get_daytidy_class('fields', 'fe'),
Html::is_admin_context() ? ' daytidy-button daytidy-button--tertiary daytidy-button--icon' : '',
Html::get_daytidy_class('icon')
);
}
/**
* @param mixed[] $args
* @return string
*/
public static function iconButton(array $args = []): string
{
if (!count($args)) return '';
$icon = (string) ($args['icon'] ?? '');
$label = (string) ($args['label'] ?? '');
if (!$icon || !$label) return '';
if (strpos($icon, 'wui-icon') !== false)
{
$icon = trim(str_replace(['daytidy-fe-icon', 'daytidy-admin-icon'], '', $icon));
$icon = (preg_replace('/\s+/', ' ', $icon) ?? $icon) . ' ' . Html::get_daytidy_class('icon');
}
$attributes = isset($args['attributes']) && is_array($args['attributes']) ? $args['attributes'] : [];
$attributes['type'] = (string) ($attributes['type'] ?? ($args['type'] ?? 'button'));
$attributes['class'] = trim('wui-button wui-button--tertiary wui-button--icon ' . (Html::is_admin_context() ? 'daytidy-button daytidy-button--tertiary daytidy-button--icon ' : '') . (string) ($args['class'] ?? ''));
$attributes['aria-label'] = (string) ($attributes['aria-label'] ?? $label);
if (isset($args['title']))
{
$attributes['title'] = (string) $args['title'];
}
$html_attributes = '';
foreach ($attributes as $key => $value)
{
if ($value === null || $value === false) continue;
if ($value === true)
{
$html_attributes .= ' ' . esc_attr((string) $key);
continue;
}
$html_attributes .= sprintf(' %s="%s"', esc_attr((string) $key), esc_attr((string) $value));
}
return sprintf(
'',
$html_attributes,
esc_attr($icon),
esc_html($label)
);
}
public static function datepicker(array $args): string
{
if (!count($args)) return '';
return self::input($args);
}
/**
* @param array