diff options
Diffstat (limited to 'includes')
-rw-r--r-- | includes/common.inc | 122 | ||||
-rw-r--r-- | includes/theme.inc | 56 |
2 files changed, 92 insertions, 86 deletions
diff --git a/includes/common.inc b/includes/common.inc index 428580a2c..aa0a08a9c 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -5071,196 +5071,196 @@ function drupal_common_theme() { return array( // theme.inc 'placeholder' => array( - 'arguments' => array('text' => NULL) + 'variables' => array('text' => NULL) ), 'html' => array( - 'arguments' => array('page' => NULL), + 'render element' => 'page', 'template' => 'html', ), 'page' => array( - 'arguments' => array('page' => NULL), + 'render element' => 'page', 'template' => 'page', ), 'region' => array( - 'arguments' => array('elements' => NULL), + 'render element' => 'elements', 'template' => 'region', ), 'status_messages' => array( - 'arguments' => array('display' => NULL), + 'variables' => array('display' => NULL), ), 'links' => array( - 'arguments' => array('links' => NULL, 'attributes' => array('class' => array('links')), 'heading' => array()), + 'variables' => array('links' => NULL, 'attributes' => array('class' => array('links')), 'heading' => array()), ), 'image' => array( - 'arguments' => array('path' => NULL, 'alt' => '', 'title' => '', 'attributes' => array(), 'getsize' => TRUE), + 'variables' => array('path' => NULL, 'alt' => '', 'title' => '', 'attributes' => array(), 'getsize' => TRUE), ), 'breadcrumb' => array( - 'arguments' => array('breadcrumb' => NULL), + 'variables' => array('breadcrumb' => NULL), ), 'help' => array( - 'arguments' => array(), + 'variables' => array(), ), 'submenu' => array( - 'arguments' => array('links' => NULL), + 'variables' => array('links' => NULL), ), 'table' => array( - 'arguments' => array('header' => NULL, 'rows' => NULL, 'attributes' => array(), 'caption' => NULL, 'colgroups' => array(), 'sticky' => TRUE), + 'variables' => array('header' => NULL, 'rows' => NULL, 'attributes' => array(), 'caption' => NULL, 'colgroups' => array(), 'sticky' => TRUE), ), 'table_select_header_cell' => array( - 'arguments' => array(), + 'variables' => array(), ), 'tablesort_indicator' => array( - 'arguments' => array('style' => NULL), + 'variables' => array('style' => NULL), ), 'mark' => array( - 'arguments' => array('type' => MARK_NEW), + 'variables' => array('type' => MARK_NEW), ), 'item_list' => array( - 'arguments' => array('items' => array(), 'title' => NULL, 'type' => 'ul', 'attributes' => array()), + 'variables' => array('items' => array(), 'title' => NULL, 'type' => 'ul', 'attributes' => array()), ), 'more_help_link' => array( - 'arguments' => array('url' => NULL), + 'variables' => array('url' => NULL), ), 'feed_icon' => array( - 'arguments' => array('url' => NULL, 'title' => NULL), + 'variables' => array('url' => NULL, 'title' => NULL), ), 'more_link' => array( - 'arguments' => array('url' => NULL, 'title' => NULL) + 'variables' => array('url' => NULL, 'title' => NULL) ), 'blocks' => array( - 'arguments' => array('region' => NULL), + 'variables' => array('region' => NULL), ), 'username' => array( - 'arguments' => array('account' => NULL), + 'variables' => array('account' => NULL), ), 'progress_bar' => array( - 'arguments' => array('percent' => NULL, 'message' => NULL), + 'variables' => array('percent' => NULL, 'message' => NULL), ), 'indentation' => array( - 'arguments' => array('size' => 1), + 'variables' => array('size' => 1), ), // from theme.maintenance.inc 'maintenance_page' => array( - 'arguments' => array('content' => NULL, 'show_messages' => TRUE), + 'variables' => array('content' => NULL, 'show_messages' => TRUE), 'template' => 'maintenance-page', ), 'update_page' => array( - 'arguments' => array('content' => NULL, 'show_messages' => TRUE), + 'variables' => array('content' => NULL, 'show_messages' => TRUE), ), 'install_page' => array( - 'arguments' => array('content' => NULL), + 'variables' => array('content' => NULL), ), 'task_list' => array( - 'arguments' => array('items' => NULL, 'active' => NULL), + 'variables' => array('items' => NULL, 'active' => NULL), ), 'authorize_message' => array( - 'arguments' => array('message' => NULL, 'success' => TRUE), + 'variables' => array('message' => NULL, 'success' => TRUE), ), 'authorize_report' => array( - 'arguments' => array('messages' => array()), + 'variables' => array('messages' => array()), ), // from pager.inc 'pager' => array( - 'arguments' => array('tags' => array(), 'element' => 0, 'parameters' => array(), 'quantity' => 9), + 'variables' => array('tags' => array(), 'element' => 0, 'parameters' => array(), 'quantity' => 9), ), 'pager_first' => array( - 'arguments' => array('text' => NULL, 'element' => 0, 'parameters' => array()), + 'variables' => array('text' => NULL, 'element' => 0, 'parameters' => array()), ), 'pager_previous' => array( - 'arguments' => array('text' => NULL, 'element' => 0, 'interval' => 1, 'parameters' => array()), + 'variables' => array('text' => NULL, 'element' => 0, 'interval' => 1, 'parameters' => array()), ), 'pager_next' => array( - 'arguments' => array('text' => NULL, 'element' => 0, 'interval' => 1, 'parameters' => array()), + 'variables' => array('text' => NULL, 'element' => 0, 'interval' => 1, 'parameters' => array()), ), 'pager_last' => array( - 'arguments' => array('text' => NULL, 'element' => 0, 'parameters' => array()), + 'variables' => array('text' => NULL, 'element' => 0, 'parameters' => array()), ), 'pager_link' => array( - 'arguments' => array('text' => NULL, 'page_new' => NULL, 'element' => NULL, 'parameters' => array(), 'attributes' => array()), + 'variables' => array('text' => NULL, 'page_new' => NULL, 'element' => NULL, 'parameters' => array(), 'attributes' => array()), ), // from locale.inc 'locale_admin_manage_screen' => array( - 'arguments' => array('form' => NULL), + 'render element' => 'form', ), // from menu.inc 'menu_link' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'menu_tree' => array( - 'arguments' => array('tree' => NULL), + 'render element' => 'tree', ), 'menu_local_task' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'menu_local_action' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'menu_local_tasks' => array( - 'arguments' => array(), + 'variables' => array(), ), // from form.inc 'select' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'fieldset' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'radio' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'radios' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'date' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'checkbox' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'checkboxes' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'button' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'image_button' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'hidden' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'textfield' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'form' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'textarea' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'markup' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'password' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'file' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'tableselect' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'form_element' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'text_format_wrapper' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'vertical_tabs' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), 'container' => array( - 'arguments' => array('element' => NULL), + 'render element' => 'element', ), ); } diff --git a/includes/theme.inc b/includes/theme.inc index 7238a1fab..32140a62f 100644 --- a/includes/theme.inc +++ b/includes/theme.inc @@ -299,11 +299,15 @@ function drupal_theme_rebuild() { * - 'template': The filename of the template generating output for this * theme hook. The template is in the directory defined by the 'path' key of * hook_theme() or defaults to $path. - * - 'arguments': The arguments for this theme hook as defined in - * hook_theme(). If there is more than one implementation and 'arguments' is + * - 'variables': The variables for this theme hook as defined in + * hook_theme(). If there is more than one implementation and 'variables' is * not specified in a later one, then the previous definition is kept. + * - 'render element': The renderable element for this theme hook as defined + * in hook_theme(). If there is more than one implementation and + * 'render element' is not specified in a later one, then the previous + * definition is kept. * - 'theme paths': The paths where implementations of a theme hook can be - * found. Its definition is similarly inherited like 'arguments'. Each time + * found. Its definition is similarly inherited like 'variables'. Each time * _theme_process_registry() is called for this theme hook, either the * 'path' key from hook_theme() (if defined) or $path is added. * - 'preprocess functions': See theme() for detailed documentation. @@ -365,11 +369,15 @@ function _theme_process_registry(&$cache, $name, $type, $theme, $path) { $result[$hook]['includes'][] = $include_file; } - // If 'arguments' have been defined previously, carry them forward. + // If 'variables' have been defined previously, carry them forward. // This should happen if a theme overrides a Drupal defined theme // function, for example. - if (!isset($info['arguments']) && isset($cache[$hook])) { - $result[$hook]['arguments'] = $cache[$hook]['arguments']; + if (!isset($info['variables']) && isset($cache[$hook]['variables'])) { + $result[$hook]['variables'] = $cache[$hook]['variables']; + } + // Same for 'render element'. + if (!isset($info['render element']) && isset($cache[$hook]['render element'])) { + $result[$hook]['render element'] = $cache[$hook]['render element']; } // The following apply only to theming hooks implemented as templates. @@ -780,30 +788,28 @@ function theme($hook, $variables = array()) { } // If a renderable array is passed as $variables, then set $variables to - // what's expected by the theme hook. If the theme hook expects a single - // argument, set the renderable array as that argument. If the theme hook - // expects multiple arguments, set the properties of the renderable array as - // those arguments. + // the arguments expected by the theme function. if (isset($variables['#theme']) || isset($variables['#theme_wrappers'])) { $element = $variables; $variables = array(); - $n = count($info['arguments']); - if ($n == 1) { - $arg_keys = array_keys($info['arguments']); - $variables[$arg_keys[0]] = $element; - } - elseif ($n > 1) { - foreach ($info['arguments'] as $name => $default) { + if (isset($info['variables'])) { + foreach (array_keys($info['variables']) as $name) { if (isset($element["#$name"])) { $variables[$name] = $element["#$name"]; } } } + else { + $variables[$info['render element']] = $element; + } } // Merge in argument defaults. - if (!empty($info['arguments'])) { - $variables += $info['arguments']; + if (!empty($info['variables'])) { + $variables += $info['variables']; + } + elseif (!empty($info['render element'])) { + $variables += array($info['render element'] => array()); } // Invoke the variable processors, if any. The processors may specify @@ -968,8 +974,7 @@ function path_to_theme() { } /** - * Find overridden theme functions. Called by themes and/or theme engines to - * easily discover theme functions. + * Allow themes and/or theme engines to easily discover overridden theme functions. * * @param $cache * The existing cache of theme hooks to test against. @@ -990,9 +995,10 @@ function drupal_find_theme_functions($cache, $prefixes) { if ($matches) { foreach ($matches as $match) { $new_hook = str_replace($prefix . '_', '', $match); + $arg_name = isset($info['variables']) ? 'variables' : 'render element'; $templates[$new_hook] = array( 'function' => $match, - 'arguments' => $info['arguments'], + $arg_name => $info[$arg_name], ); } } @@ -1015,8 +1021,7 @@ function drupal_find_theme_functions($cache, $prefixes) { } /** - * Find overridden theme templates. Called by themes and/or theme engines to - * easily discover templates. + * Allow themes and/or theme engines to easily discover overridden templates. * * @param $cache * The existing cache of theme hooks to test against. @@ -1093,10 +1098,11 @@ function drupal_find_theme_templates($cache, $extension, $path) { foreach ($matches as $match) { $file = substr($match, 0, strpos($match, '.')); // Put the underscores back in for the hook name and register this pattern. + $arg_name = isset($info['variables']) ? 'variables' : 'render element'; $templates[strtr($file, '-', '_')] = array( 'template' => $file, 'path' => dirname($files[$match]->uri), - 'arguments' => $info['arguments'], + $arg_name => $info[$arg_name], ); } } |