/** * Renders a HTML tag attribute. * * @access public * @since 0.8 * * @uses sanitize_html_class() * @uses esc_attr() * * @param string $type The attribute name. * @param array|string $value The attribute value. * * @return string The rendered attribute. */ public static function attribute($type, $value) { switch ($type) { case 'class': if (is_array($value) && !empty($value)) { array_walk($value, 'sanitize_html_class'); return $value ? ' class="' . implode($value, ' ') . '" ' : ''; } elseif (!empty($value)) { return ' class="' . sanitize_html_class((string) $value) . '" '; } else { return ''; } break; case 'id': if (!empty($value)) { return ' id="' . esc_attr((string) $value) . '" '; } else { return ''; } break; case 'style': if (is_array($value) && !empty($value)) { array_walk($value, create_function('&$i, $property', '$i = "$property: $i";')); return $value ? ' style="' . implode($value, '; ') . '"' : ''; } return ''; break; case 'value': return ' value="' . esc_attr((string) $value) . '" '; break; case 'data': $data = array(); /** * Create valid HTML5 data attributes. * * @link http://stackoverflow.com/a/22753630/5351316 * @link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset */ if (cnFunction::isDimensionalArray($value)) { foreach ($value as $_value) { if (isset($_value['name']) && 0 < strlen($_value['name'])) { $name = 'data-' . cnFormatting::toCamelCase($_value['name']); $data[$name] = $_value['value']; } } } else { if (isset($value['name']) && 0 < strlen($value['name'])) { $name = 'data-' . cnFormatting::toCamelCase($value['name']); $data[$name] = $value['value']; } } if (!empty($data)) { array_walk($data, create_function('&$i, $name', '$i = $name . \'="\' . esc_attr( $i ) . \'"\';')); return ' ' . implode($data, ' '); } return ''; break; default: if (is_array($value) && !empty($value)) { array_walk($value, 'esc_attr'); return $value ? ' ' . esc_attr($type) . '="' . implode($value, ' ') . '" ' : ''; } elseif (!empty($value)) { return ' ' . esc_attr($type) . '="' . esc_attr((string) $value) . '" '; } else { return ''; } } }