FALSE, 'modules/aggregator/aggregator.css' => FALSE, 'modules/block/block.css' => FALSE, 'modules/book/book.css' => FALSE, 'modules/comment/comment.css' => FALSE, 'modules/dblog/dblog.css' => FALSE, 'modules/file/file.css' => FALSE, 'modules/filter/filter.css' => FALSE, 'modules/forum/forum.css' => FALSE, 'modules/help/help.css' => FALSE, 'modules/menu/menu.css' => FALSE, 'modules/node/node.css' => FALSE, 'modules/openid/openid.css' => FALSE, 'modules/poll/poll.css' => FALSE, 'modules/profile/profile.css' => FALSE, 'modules/search/search.css' => FALSE, 'modules/statistics/statistics.css' => FALSE, 'modules/syslog/syslog.css' => FALSE, 'modules/system/admin.css' => FALSE, 'modules/system/maintenance.css' => FALSE, 'modules/system/system.css' => FALSE, 'modules/system/system.admin.css' => FALSE, 'modules/system/system.base.css' => FALSE, 'modules/system/system.maintenance.css' => FALSE, 'modules/system/system.menus.css' => FALSE, 'modules/system/system.theme.css' => FALSE, 'modules/taxonomy/taxonomy.css' => FALSE, 'modules/tracker/tracker.css' => FALSE, 'modules/update/update.css' => FALSE, 'modules/user/user.css' => FALSE, ); $css = array_diff_key($css, $exclude); } /** * Implementation of hook_theme(). */ function tao_theme() { $items = array(); // Consolidate a variety of theme functions under a single template type. $items['block'] = array( 'arguments' => array('block' => NULL), 'template' => 'object', 'path' => drupal_get_path('theme', 'tao') .'/templates', ); $items['comment'] = array( 'arguments' => array('comment' => NULL, 'node' => NULL, 'links' => array()), 'template' => 'object', 'path' => drupal_get_path('theme', 'tao') .'/templates', ); $items['node'] = array( 'arguments' => array('node' => NULL, 'teaser' => FALSE, 'page' => FALSE), 'template' => 'node', 'path' => drupal_get_path('theme', 'tao') .'/templates', ); $items['fieldset'] = array( 'arguments' => array('element' => array()), 'template' => 'fieldset', 'path' => drupal_get_path('theme', 'tao') .'/templates', ); // Split out pager list into separate theme function. $items['pager_list'] = array('arguments' => array( 'tags' => array(), 'limit' => 10, 'element' => 0, 'parameters' => array(), 'quantity' => 9, )); return $items; } /** * Preprocess functions =============================================== */ function tao_preprocess_html(&$vars) { $vars['classes_array'][] = 'tao'; // Add IE from theme file. $tao_path = drupal_get_path('theme', 'tao'); $info = drupal_parse_info_file($tao_path.'/tao.info'); $ie = $info['stylesheets']['ie']; foreach ($ie as $key => $value) { drupal_add_css( $tao_path.'/'.$value, array( 'browsers' => array( 'IE' => $key, '!IE' => FALSE ) ) ); } } /** * Implementation of preprocess_page(). */ function tao_preprocess_page(&$vars) { // Split primary and secondary local tasks $vars['primary_local_tasks'] = menu_primary_local_tasks(); $vars['secondary_local_tasks'] = menu_secondary_local_tasks(); // Link site name to frontpage $vars['site_name'] = l($vars['site_name'], ''); } /** * Implementation of preprocess_block(). */ function tao_preprocess_block(&$vars) { $vars['hook'] = 'block'; $vars['attributes_array']['id'] = $vars['block_html_id']; $vars['attributes_array']['class'] = $vars['classes_array']; $vars['title_attributes_array']['class'][] = $vars['hook'] . '-title'; $vars['title_attributes_array']['class'][] = 'clearfix'; $vars['content_attributes_array']['class'][] = $vars['hook'] . '-content'; $vars['content_attributes_array']['class'][] = 'clearfix'; if ($vars['block']->module == 'block') { $vars['content_attributes_array']['class'][] = 'prose'; } $vars['title'] = !empty($vars['block']->subject) ? $vars['block']->subject : ''; // In D7 the page content may be served as a block. Replace the generic // 'block' class from the page content with a more specific class that can // be used to distinguish this block from others. // Subthemes can easily override this behavior in an implementation of // preprocess_block(). if ($vars['block']->module === 'system' && $vars['block']->delta === 'main') { $vars['classes_array'] = array_diff($vars['classes_array'], array('block')); $vars['classes_array'][] = 'block-page-content'; } } /** * Implementation of preprocess_node(). */ function tao_preprocess_node(&$vars) { $vars['hook'] = 'node'; $vars['classes_array'][] = 'clearfix'; $vars['attributes_array']['id'] = "node-{$vars['node']->nid}"; $vars['title_attributes_array']['class'][] = $vars['hook'] . '-title'; $vars['title_attributes_array']['class'][] = 'clearfix'; $vars['content_attributes_array']['class'][] = $vars['hook'] . '-content'; $vars['content_attributes_array']['class'][] = 'clearfix'; $vars['content_attributes_array']['class'][] = 'prose'; if (isset($vars['content']['links'])) { $vars['links'] = $vars['content']['links']; unset($vars['content']['links']); } if (isset($vars['content']['comments'])) { $vars['post_object']['comments'] = $vars['content']['comments']; unset($vars['content']['comments']); } if ($vars['display_submitted']) { $vars['submitted'] = t('Submitted by !username on !datetime', array( '!username' => $vars['name'], '!datetime' => $vars['date'], )); } } /** * Implementation of preprocess_comment(). */ function tao_preprocess_comment(&$vars) { $vars['hook'] = 'comment'; $vars['classes_array'][] = 'clearfix'; $vars['title_attributes_array']['class'][] = $vars['hook'] . '-title'; $vars['title_attributes_array']['class'][] = 'clearfix'; $vars['content_attributes_array']['class'][] = $vars['hook'] . '-content'; $vars['content_attributes_array']['class'][] = 'clearfix'; $vars['submitted'] = t('Submitted by !username on !datetime', array( '!username' => $vars['author'], '!datetime' => $vars['created'], )); if (isset($vars['content']['links'])) { $vars['links'] = $vars['content']['links']; unset($vars['content']['links']); } } /** * Implementation of preprocess_fieldset(). */ function tao_preprocess_fieldset(&$vars) { $element = $vars['element']; _form_set_class($element, array('form-wrapper')); $vars['attributes'] = isset($element['#attributes']) ? $element['#attributes'] : array(); $vars['attributes']['class'][] = 'fieldset'; if (!empty($element['#title'])) { $vars['attributes']['class'][] = 'titled'; } if (!empty($element['#id'])) { if (!empty($element["#attributes"]["id"])) { $vars['attributes']['id'] = $element["#attributes"]["id"]; } else { $vars['attributes']['id'] = $element['#id']; } } $description = !empty($element['#description']) ? "
{$element['#description']}
" : ''; $children = !empty($element['#children']) ? $element['#children'] : ''; $value = !empty($element['#value']) ? $element['#value'] : ''; $vars['content'] = $description . $children . $value; $vars['title'] = !empty($element['#title']) ? $element['#title'] : ''; $vars['hook'] = 'fieldset'; } /** * Implementation of preprocess_field(). */ function tao_preprocess_field(&$vars) { // Add prose class to long text fields. if ($vars['element']['#field_type'] === 'text_with_summary') { $vars['classes_array'][] = 'prose'; } } /** * Function overrides ================================================= */ /** * Override of theme('textarea'). * Deprecate misc/textarea.js in favor of using the 'resize' CSS3 property. */ function tao_textarea($vars) { $element = $vars['element']; $element['#attributes']['name'] = $element['#name']; $element['#attributes']['id'] = $element['#id']; $element['#attributes']['cols'] = $element['#cols']; $element['#attributes']['rows'] = $element['#rows']; _form_set_class($element, array('form-textarea')); $wrapper_attributes = array( 'class' => array('form-textarea-wrapper'), ); // Add resizable behavior. if (!empty($element['#resizable'])) { $wrapper_attributes['class'][] = 'resizable'; } $output = ''; $output .= '' . check_plain($element['#value']) . ''; $output .= ''; return $output; } /** * Override of theme_pager(). * Easily one of the most obnoxious theming jobs in Drupal core. * Goals: consolidate functionality into less than 5 functions and * ensure the markup will not conflict with major other styles * (theme_item_list() in particular). */ function tao_pager($vars) { $tags = $vars['tags']; $element = $vars['element']; $parameters = $vars['parameters']; $quantity = $vars['quantity']; $pager_list = theme('pager_list', $vars); $links = array(); $links['pager-first'] = theme('pager_first', array( 'text' => (isset($tags[0]) ? $tags[0] : t('First')), 'element' => $element, 'parameters' => $parameters )); $links['pager-previous'] = theme('pager_previous', array( 'text' => (isset($tags[1]) ? $tags[1] : t('Prev')), 'element' => $element, 'interval' => 1, 'parameters' => $parameters )); $links['pager-next'] = theme('pager_next', array( 'text' => (isset($tags[3]) ? $tags[3] : t('Next')), 'element' => $element, 'interval' => 1, 'parameters' => $parameters )); $links['pager-last'] = theme('pager_last', array( 'text' => (isset($tags[4]) ? $tags[4] : t('Last')), 'element' => $element, 'parameters' => $parameters )); $links = array_filter($links); $pager_links = theme('links', array( 'links' => $links, 'attributes' => array('class' => 'links pager pager-links') )); if ($pager_list) { return '
' . $pager_list . ' ' . $pager_links . '
'; } } /** * Split out page list generation into its own function. */ function tao_pager_list($vars) { $tags = $vars['tags']; $element = $vars['element']; $parameters = $vars['parameters']; $quantity = $vars['quantity']; global $pager_page_array, $pager_total; if ($pager_total[$element] > 1) { // Calculate various markers within this pager piece: // Middle is used to "center" pages around the current page. $pager_middle = ceil($quantity / 2); // current is the page we are currently paged to $pager_current = $pager_page_array[$element] + 1; // first is the first page listed by this pager piece (re quantity) $pager_first = $pager_current - $pager_middle + 1; // last is the last page listed by this pager piece (re quantity) $pager_last = $pager_current + $quantity - $pager_middle; // max is the maximum page number $pager_max = $pager_total[$element]; // End of marker calculations. // Prepare for generation loop. $i = $pager_first; if ($pager_last > $pager_max) { // Adjust "center" if at end of query. $i = $i + ($pager_max - $pager_last); $pager_last = $pager_max; } if ($i <= 0) { // Adjust "center" if at start of query. $pager_last = $pager_last + (1 - $i); $i = 1; } // End of generation loop preparation. $links = array(); // When there is more than one page, create the pager list. if ($i != $pager_max) { // Now generate the actual pager piece. for ($i; $i <= $pager_last && $i <= $pager_max; $i++) { if ($i < $pager_current) { $links["$i pager-item"] = theme('pager_previous', array( 'text' => $i, 'element' => $element, 'interval' => ($pager_current - $i), 'parameters' => $parameters )); } if ($i == $pager_current) { $links["$i pager-current"] = array('title' => $i); } if ($i > $pager_current) { $links["$i pager-item"] = theme('pager_next', array( 'text' => $i, 'element' => $element, 'interval' => ($i - $pager_current), 'parameters' => $parameters )); } } return theme('links', array( 'links' => $links, 'attributes' => array('class' => 'links pager pager-list') )); } } return ''; } /** * Return an array suitable for theme_links() rather than marked up HTML link. */ function tao_pager_link($vars) { $text = $vars['text']; $page_new = $vars['page_new']; $element = $vars['element']; $parameters = $vars['parameters']; $attributes = $vars['attributes']; $page = isset($_GET['page']) ? $_GET['page'] : ''; if ($new_page = implode(',', pager_load_array($page_new[$element], $element, explode(',', $page)))) { $parameters['page'] = $new_page; } $query = array(); if (count($parameters)) { $query = drupal_get_query_parameters($parameters, array()); } if ($query_pager = pager_get_query_parameters()) { $query = array_merge($query, $query_pager); } // Set each pager link title if (!isset($attributes['title'])) { static $titles = NULL; if (!isset($titles)) { $titles = array( t('« first') => t('Go to first page'), t('‹ previous') => t('Go to previous page'), t('next ›') => t('Go to next page'), t('last »') => t('Go to last page'), ); } if (isset($titles[$text])) { $attributes['title'] = $titles[$text]; } else if (is_numeric($text)) { $attributes['title'] = t('Go to page @number', array('@number' => $text)); } } return array( 'title' => $text, 'href' => $_GET['q'], 'attributes' => $attributes, 'query' => count($query) ? $query : NULL, ); } /** * Override of theme_views_mini_pager(). */ function tao_views_mini_pager($vars) { $tags = $vars['tags']; $quantity = $vars['quantity']; $element = $vars['element']; $parameters = $vars['parameters']; global $pager_page_array, $pager_total; // Calculate various markers within this pager piece: // Middle is used to "center" pages around the current page. $pager_middle = ceil($quantity / 2); // current is the page we are currently paged to $pager_current = $pager_page_array[$element] + 1; // max is the maximum page number $pager_max = $pager_total[$element]; // End of marker calculations. $links = array(); if ($pager_total[$element] > 1) { $links['pager-previous'] = theme('pager_previous', array( 'text' => (isset($tags[1]) ? $tags[1] : t('Prev')), 'element' => $element, 'interval' => 1, 'parameters' => $parameters )); $links['pager-current'] = array( 'title' => t('@current of @max', array( '@current' => $pager_current, '@max' => $pager_max) ) ); $links['pager-next'] = theme('pager_next', array( 'text' => (isset($tags[3]) ? $tags[3] : t('Next')), 'element' => $element, 'interval' => 1, 'parameters' => $parameters )); return theme('links', array('links' => $links, 'attributes' => array('class' => array('links', 'pager', 'views-mini-pager')))); } }