View source
<?php
function html5_tools_menu() {
$items['admin/config/development/html5-tools'] = array(
'title' => 'HTML5 Tools',
'description' => 'Configure how HTML5 markup is applied to your site.',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'html5_tools_admin_settings',
),
'access arguments' => array(
'administer site configuration',
),
'file' => 'html5_tools.admin.inc',
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function html5_tools_element_info_alter(&$type) {
if (module_exists('link') && !empty($type['link_field'])) {
$type['link_field']['#process'][] = '_html5_tools_link_field_process';
}
}
function _html5_tools_link_field_process($element, $form_state, $complete_form) {
$instance = field_widget_instance($element, $form_state);
if (!empty($instance['widget']['type']) && $instance['widget']['type'] == 'urlwidget') {
$element['url']['#type'] = 'urlfield';
}
return $element;
}
function html5_tools_help($path, $arg) {
switch ($path) {
case 'admin/config/development/html5-tools':
return t("HTML5 simplifies many things about HTML. Some of these new standards are a bit tricky to implement in Drupal, because they are hardcoded into Drupal core. You can alter some of them by using theme override functions in your theme's template.php file, but this module provides tools for accomplishing these changes more easily.");
break;
}
}
function html5_tools_field_widget_info() {
return array(
'numberfield' => array(
'label' => t('Number field'),
'field types' => array(
'number_integer',
'number_decimal',
'number_float',
),
),
'rangewidget' => array(
'label' => t('Range field'),
'field types' => array(
'number_integer',
),
),
'telwidget' => array(
'label' => t('Telephone number field'),
'field types' => array(
'text',
'textfield',
),
),
'urlwidget' => array(
'label' => t('URL field'),
'field types' => array(
'text',
'textfield',
'link_field',
),
),
'emailwidget' => array(
'label' => t('Email field'),
'field types' => array(
'text',
'textfield',
'email',
),
),
);
}
function html5_tools_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
$target = $field['type'] == 'email' ? 'email' : 'value';
$value = isset($items[$delta][$target]) ? $items[$delta][$target] : '';
switch ($instance['widget']['type']) {
case 'numberfield':
_numberfield_html5_tools_field_widget_forms($form, $form_state, $field, $instance, $langcode, $items, $delta, $element, $value);
break;
case 'rangewidget':
_rangewidget_html5_tools_field_widget_forms($form, $form_state, $field, $instance, $langcode, $items, $delta, $element, $value);
break;
case 'telwidget':
_telwidget_html5_tools_field_widget_forms($form, $form_state, $field, $instance, $langcode, $items, $delta, $element, $value);
break;
case 'urlwidget':
_urlwidget_html5_tools_field_widget_forms($form, $form_state, $field, $instance, $langcode, $items, $delta, $element, $value);
if ($field['type'] == 'link_field') {
return $element;
}
break;
case 'emailwidget':
_emailwidget_html5_tools_field_widget_forms($form, $form_state, $field, $instance, $langcode, $items, $delta, $element, $value);
break;
}
return array(
$target => $element,
);
}
function html5_tools_field_widget_error($element, $error, $form, &$form_state) {
$target = isset($element['email']) ? 'email' : 'value';
form_error($element[$target], $error['message']);
}
function html5_tools_preprocess_html_tag(&$variables) {
if (variable_get('html5_tools_override_style_tags', 1) && ($variables['element']['#tag'] == 'style' || $variables['element']['#tag'] == 'link' && $variables['element']['#attributes']['rel'] == 'stylesheet')) {
unset($variables['element']['#attributes']['type']);
}
if (variable_get('html5_tools_override_script_tags', 1) && $variables['element']['#tag'] == 'script') {
unset($variables['element']['#attributes']['type']);
}
if (variable_get('html5_tools_override_meta_tags', 1) && $variables['element']['#tag'] == 'meta' && isset($variables['element']['#attributes']['http-equiv']) && $variables['element']['#attributes']['http-equiv'] == 'Content-Type') {
$variables['element']['#attributes'] = array(
'charset' => 'utf-8',
);
}
}
function html5_tools_date_format_types() {
return array(
'html5_tools_iso8601' => t('ISO 8601'),
);
}
function html5_tools_date_formats() {
return array(
array(
'type' => 'html5_tools_iso8601',
'format' => 'c',
'locales' => array(),
),
);
}
function html5_tools_preprocess_node(&$variables) {
if (variable_get('html5_tools_override_submitted', 0) && $variables['display_submitted']) {
$variables['submitted'] = t('Submitted by !username on !datetime', array(
'!username' => $variables['name'],
'!datetime' => theme('html5_tools_time', array(
'date' => $variables['date'],
'isodate' => format_date($variables['created'], 'html5_tools_iso8601'),
)),
));
}
}
function html5_tools_preprocess_comment(&$variables) {
if (variable_get('html5_tools_override_submitted', 0)) {
$comment = $variables['elements']['#comment'];
$variables['submitted'] = t('Submitted by !username on !datetime', array(
'!username' => $variables['author'],
'!datetime' => theme('html5_tools_time', array(
'date' => $variables['created'],
'isodate' => format_date($comment->created, 'html5_tools_iso8601'),
)),
));
$variables['created'] = theme('html5_tools_time', array(
'date' => $variables['created'],
'isodate' => format_date($comment->created, 'html5_tools_iso8601'),
));
}
}
function html5_tools_theme($existing, $type, $theme, $path) {
return array(
'html5_tools_time' => array(
'variables' => array(
'date' => NULL,
'isodate' => NULL,
),
),
);
}
function html5_tools_theme_registry_alter(&$theme_registry) {
if (variable_get('html5_tools_override_doctype', 1) && $theme_registry['html']['template'] == drupal_get_path('module', 'system') . '/html') {
$theme_registry['html']['template'] = drupal_get_path('module', 'html5_tools') . '/html';
}
}
function html5_tools_process_html(&$variables) {
$cdata = array(
"\n<!--//--><![CDATA[//><!--",
"//--><!]]>\n",
);
$variables['scripts'] = str_replace($cdata, '', $variables['scripts']);
$variables['page_bottom'] = str_replace($cdata, '', $variables['page_bottom']);
$variables['styles'] = str_replace($cdata, '', $variables['styles']);
$variables['rdf_header'] = '';
$variables['rdf_profile'] = '';
$variables['html_attributes'] = '';
if (module_exists('rdf')) {
$variables['rdf_header'] = ' PUBLIC "-//W3C//DTD HTML+RDFa 1.1//EN"';
$variables['rdf_profile'] = ' profile="' . $variables['grddl_profile'] . '"';
}
if (variable_get('html5_tools_add_chrome_frame_header', 1)) {
drupal_add_http_header('X-UA-Compatible', 'IE=Edge,chrome=1');
}
if (!empty($variables['html_attributes_array'])) {
$variables['html_attributes'] = drupal_attributes($variables['html_attributes_array']);
}
}
function theme_html5_tools_time($variables) {
$attributes['datetime'] = $variables['isodate'];
return '<time' . drupal_attributes($attributes) . '>' . $variables['date'] . '</time>';
}
function html5_tools_form_system_site_information_settings_alter(&$form, &$form_state) {
if (variable_get('html5_tools_override_system_site_information_form', 1) && $form['site_information']['site_mail']['#type'] == 'textfield') {
$form['site_information']['site_mail']['#type'] = 'emailfield';
}
}
function html5_tools_form_search_block_form_alter(&$form, &$form_state) {
if (variable_get('html5_tools_override_search_block_form', 1) && $form['search_block_form']['#type'] == 'textfield') {
$form['search_block_form']['#type'] = 'searchfield';
}
}
function html5_tools_form_search_form_alter(&$form, &$form_state) {
if (variable_get('html5_tools_override_search_form', 1) && $form['basic']['keys']['#type'] == 'textfield') {
$form['basic']['keys']['#type'] = 'searchfield';
}
}
function html5_tools_form_user_register_form_alter(&$form, &$form_state) {
if (variable_get('html5_tools_override_user_register_form', 1) && $form['account']['mail']['#type'] == 'textfield') {
$form['account']['mail']['#type'] = 'emailfield';
}
}
function html5_tools_form_contact_site_form_alter(&$form, &$form_state) {
if (variable_get('html5_tools_override_contact_forms', 1) && $form['mail']['#type'] == 'textfield') {
$form['mail']['#type'] = 'emailfield';
}
}
function html5_tools_form_contact_personal_form_alter(&$form, &$form_state) {
if (variable_get('html5_tools_override_contact_forms', 1) && $form['mail']['#type'] == 'textfield') {
$form['mail']['#type'] = 'emailfield';
}
}
function _numberfield_html5_tools_field_widget_forms(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, &$element, $value) {
if ($field['type'] == 'number_decimal' || $field['type'] == 'number_float') {
$value = strtr($value, '.', $field['settings']['decimal_separator']);
}
$element += array(
'#type' => 'numberfield',
'#default_value' => $value,
'#size' => $field['type'] == 'number_decimal' ? $field['settings']['precision'] + 4 : 12,
'#maxlength' => $field['type'] == 'number_decimal' ? $field['settings']['precision'] + 2 : 10,
'#number_type' => str_replace('number_', '', $field['type']),
);
if (!empty($instance['settings']['min']) || $instance['settings']['min'] === '0') {
$element['#min'] = $instance['settings']['min'];
}
if (!empty($instance['settings']['max'])) {
$element['#max'] = $instance['settings']['max'];
}
if (!empty($instance['settings']['prefix'])) {
$prefixes = explode('|', $instance['settings']['prefix']);
$element['#field_prefix'] = field_filter_xss(array_pop($prefixes));
}
if (!empty($instance['settings']['suffix'])) {
$suffixes = explode('|', $instance['settings']['suffix']);
$element['#field_suffix'] = field_filter_xss(array_pop($suffixes));
}
if ($field['type'] == 'number_decimal') {
$element['#step'] = pow(10, -$field['settings']['scale']);
}
$element['#element_validate'][] = 'number_field_widget_validate';
}
function _rangewidget_html5_tools_field_widget_forms(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, &$element, $value) {
$element += array(
'#type' => 'rangefield',
'#default_value' => $value,
);
if (!empty($instance['settings']['prefix'])) {
$element['#field_prefix'] = $instance['settings']['prefix'];
}
if (!empty($instance['settings']['suffix'])) {
$element['#field_suffix'] = $instance['settings']['suffix'];
}
if (!empty($instance['settings']['min'])) {
$element['#min'] = $instance['settings']['min'];
}
if (!empty($instance['settings']['max'])) {
$element['#max'] = $instance['settings']['max'];
}
if (!empty($instance['settings']['step'])) {
$element['#step'] = $instance['settings']['step'];
}
}
function _telwidget_html5_tools_field_widget_forms(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, &$element, $value) {
$element += array(
'#type' => 'telfield',
'#default_value' => $value,
);
}
function _urlwidget_html5_tools_field_widget_forms(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, &$element, $value) {
if ($field['type'] == 'link_field') {
$element += array(
'#type' => 'link_field',
'#default_value' => isset($items[$delta]) ? $items[$delta] : '',
'#extra' => 'urlwidget',
);
}
else {
$element += array(
'#type' => 'urlfield',
'#default_value' => $value,
);
}
}
function _emailwidget_html5_tools_field_widget_forms(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, &$element, $value) {
$element += array(
'#type' => 'emailfield',
'#default_value' => $value,
);
}