diff options
author | Angie Byron <webchick@24967.no-reply.drupal.org> | 2009-11-03 04:35:01 +0000 |
---|---|---|
committer | Angie Byron <webchick@24967.no-reply.drupal.org> | 2009-11-03 04:35:01 +0000 |
commit | c6e2dfa5730568a117523a1bcf2cfd54ee34defe (patch) | |
tree | 1ff964a7d6dd963deb8b7e4929947ac78185a3a5 /modules | |
parent | 2353d1413a8c049cd6ce6aef4695d22c01d992d0 (diff) | |
download | brdo-c6e2dfa5730568a117523a1bcf2cfd54ee34defe.tar.gz brdo-c6e2dfa5730568a117523a1bcf2cfd54ee34defe.tar.bz2 |
#551034 by brandonojc, mgifford, Everett Zufelt, and Cliff: Improved Content filter usability and accessibility.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/node/node-rtl.css | 7 | ||||
-rw-r--r-- | modules/node/node.admin.inc | 57 | ||||
-rw-r--r-- | modules/node/node.css | 15 | ||||
-rw-r--r-- | modules/node/node.test | 2 |
4 files changed, 53 insertions, 28 deletions
diff --git a/modules/node/node-rtl.css b/modules/node/node-rtl.css index f829ab9f2..7e0dce520 100644 --- a/modules/node/node-rtl.css +++ b/modules/node/node-rtl.css @@ -1,5 +1,12 @@ /* $Id$ */ +#node-admin-content dl.multiselect dd.b .form-item label { + display: block; + float: right; + width: 6em; + font-weight: normal; +} + #node-admin-buttons { float: right; margin-left: 0; diff --git a/modules/node/node.admin.inc b/modules/node/node.admin.inc index 804f62980..3256aaa7c 100644 --- a/modules/node/node.admin.inc +++ b/modules/node/node.admin.inc @@ -73,6 +73,7 @@ function node_filters() { $filters['status'] = array( 'title' => t('status'), 'options' => array( + '[any]' => t('any'), 'status-1' => t('published'), 'status-0' => t('not published'), 'promote-1' => t('promoted'), @@ -89,16 +90,31 @@ function node_filters() { ); } - $filters['type'] = array('title' => t('type'), 'options' => node_type_get_names()); + $filters['type'] = array( + 'title' => t('type'), + 'options' => array( + '[any]' => t('any'), + ) + node_type_get_names(), + ); // The taxonomy filter if ($taxonomy = module_invoke('taxonomy', 'form_all', 1)) { - $filters['term'] = array('title' => t('term'), 'options' => $taxonomy); + $filters['term'] = array( + 'title' => t('term'), + 'options' => array( + '[any]' => t('any'), + ) + $taxonomy, + ); } // Language filter if there is a list of languages if ($languages = module_invoke('locale', 'language_list')) { $languages = array('' => t('Language neutral')) + $languages; - $filters['language'] = array('title' => t('language'), 'options' => $languages); + $filters['language'] = array( + 'title' => t('language'), + 'options' => array( + '[any]' => t('any'), + ) + $languages, + ); } return $filters; } @@ -172,10 +188,14 @@ function node_filter_form() { foreach ($filters as $key => $filter) { $names[$key] = $filter['title']; - $form['filters']['status'][$key] = array('#type' => 'select', '#options' => $filter['options']); + $form['filters']['status'][$key] = array( + '#type' => 'select', + '#options' => $filter['options'], + '#title' => $filter['title'], + '#default_value' => '[any]', + ); } - $form['filters']['filter'] = array('#type' => 'radios', '#options' => $names, '#default_value' => 'status'); $form['filters']['buttons']['submit'] = array('#type' => 'submit', '#value' => (count($session) ? t('Refine') : t('Filter'))); if (count($session)) { $form['filters']['buttons']['undo'] = array('#type' => 'submit', '#value' => t('Undo')); @@ -218,14 +238,11 @@ function theme_node_filters($variables) { $output .= '<li>' . drupal_render($form['current'][$key]) . '</li>'; } } + $output .= '</ul>'; - $output .= '<li><dl class="multiselect">' . (!empty($form['current']) ? '<dt><em>' . t('and') . '</em> ' . t('where') . '</dt>' : '') . '<dd class="a">'; - foreach (element_children($form['filter']) as $key) { - $output .= drupal_render($form['filter'][$key]); - } - $output .= '</dd>'; + $output .= '<dl class="multiselect">' . (!empty($form['current']) ? '<dt><em>' . t('and') . '</em> ' . t('where') . '</dt>' : ''); - $output .= '<dt>' . t('is') . '</dt><dd class="b">'; + $output .= '<dd class="b">'; foreach (element_children($form['status']) as $key) { $output .= drupal_render($form['status'][$key]); @@ -234,7 +251,6 @@ function theme_node_filters($variables) { $output .= '</dl>'; $output .= '<div class="container-inline" id="node-admin-buttons">' . drupal_render($form['buttons']) . '</div>'; - $output .= '</li></ul>'; return $output; } @@ -247,14 +263,15 @@ function node_filter_form_submit($form, &$form_state) { switch ($form_state['values']['op']) { case t('Filter'): case t('Refine'): - if (isset($form_state['values']['filter'])) { - $filter = $form_state['values']['filter']; - - // Flatten the options array to accommodate hierarchical/nested options. - $flat_options = form_options_flatten($filters[$filter]['options']); - - if (isset($flat_options[$form_state['values'][$filter]])) { - $_SESSION['node_overview_filter'][] = array($filter, $form_state['values'][$filter]); + // Apply every filter that has a choice selected other than 'any'. + foreach ($filters as $filter => $options) { + if (isset($form_state['values'][$filter]) && $form_state['values'][$filter] != '[any]') { + // Flatten the options array to accommodate hierarchical/nested options. + $flat_options = form_options_flatten($filters[$filter]['options']); + // Only accept valid selections offered on the dropdown, block bad input. + if (isset($flat_options[$form_state['values'][$filter]])) { + $_SESSION['node_overview_filter'][] = array($filter, $form_state['values'][$filter]); + } } } break; diff --git a/modules/node/node.css b/modules/node/node.css index 6c34e2101..83112c82f 100644 --- a/modules/node/node.css +++ b/modules/node/node.css @@ -6,12 +6,15 @@ .preview .node { background-color: #ffffea; } -#node-admin-filter ul { - list-style-type: none; - list-style-image: none; - padding: 0; - margin: 0; - width: 100%; +/* Override the default multiselect layout in system.css. */ +#node-admin-content dl.multiselect dd.b, dl.multiselect dd.b .form-item { + width: 20em; /* 6em label + 14em select */ +} +#node-admin-content dl.multiselect dd.b .form-item label { + display: block; + float: left; /* LTR */ + width: 6em; + font-weight: normal; } #node-admin-buttons { float: left; /* LTR */ diff --git a/modules/node/node.test b/modules/node/node.test index 3c4a74040..a2a8e4420 100644 --- a/modules/node/node.test +++ b/modules/node/node.test @@ -982,7 +982,6 @@ class NodeAdminTestCase extends DrupalWebTestCase { // Filter the node listing by status. $edit = array( - 'filter' => 'status', 'status' => 'status-1', ); $this->drupalPost('admin/content', $edit, t('Filter')); @@ -992,7 +991,6 @@ class NodeAdminTestCase extends DrupalWebTestCase { // Filter the node listing by content type. $edit = array( - 'filter' => 'type', 'type' => 'article', ); $this->drupalPost('admin/content', $edit, t('Refine')); |