$args * @return string */ public static function error(string $message, array $args = []): string { return self::message($message, 'error', $args); } /** * @param string $message * @param array $args * @return string */ public static function info(string $message, array $args = []): string { return self::message($message, 'info', $args); } /** * @param string $message * @param array $args * @return string */ public static function success(string $message, array $args = []): string { return self::message($message, 'success', $args); } /** * @param string $message * @param array $args * @return string */ public static function warning(string $message, array $args = []): string { return self::message($message, 'warning', $args); } /** * @param string $message * @param string $type * @param array $args * @return string */ public static function message(string $message, string $type = 'info', array $args = []): string { $type = self::type($type); $class = trim( 'daytidy-empty-state daytidy-empty-state-' . sanitize_html_class($type) . ' ' . (string) ($args['class'] ?? '') ); $attributes = [ 'class' => $class, 'role' => (string) ($args['role'] ?? self::role($type)), 'aria-live' => (string) ($args['aria_live'] ?? self::ariaLive($type)), ]; if (!empty($args['id'])) $attributes['id'] = $args['id']; return '
' . $message . '
'; } private static function type(string $type): string { return in_array($type, ['error', 'info', 'success', 'warning'], true) ? $type : 'info'; } private static function role(string $type): string { return in_array($type, ['error', 'warning'], true) ? 'alert' : 'status'; } private static function ariaLive(string $type): string { return in_array($type, ['error', 'warning'], true) ? 'assertive' : 'polite'; } /** * @param array $attributes * @return string */ private static function attributes(array $attributes): string { $output = []; foreach ($attributes as $key => $value) { if ($value === '') continue; $output[] = sprintf('%s="%s"', esc_attr($key), esc_attr($value)); } return implode(' ', $output); } }