summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2009-11-03 04:35:01 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2009-11-03 04:35:01 +0000
commitc6e2dfa5730568a117523a1bcf2cfd54ee34defe (patch)
tree1ff964a7d6dd963deb8b7e4929947ac78185a3a5 /modules
parent2353d1413a8c049cd6ce6aef4695d22c01d992d0 (diff)
downloadbrdo-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.css7
-rw-r--r--modules/node/node.admin.inc57
-rw-r--r--modules/node/node.css15
-rw-r--r--modules/node/node.test2
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'));