diff --git a/modules/user/user.admin.inc b/modules/user/user.admin.inc index 0596bde..6bdf11b 100644 --- a/modules/user/user.admin.inc +++ b/modules/user/user.admin.inc @@ -753,11 +753,14 @@ function theme_user_admin_permissions($variables) { $form = $variables['form']; $roles = user_roles(); + $modulekey = ''; foreach (element_children($form['permission']) as $key) { $row = array(); + $class = 'parent'; // Module name if (is_numeric($key)) { $row[] = array('data' => drupal_render($form['permission'][$key]), 'class' => array('module'), 'id' => 'module-' . $form['permission'][$key]['#id'], 'colspan' => count($form['role_names']['#value']) + 1); + $modulekey = 'module-' . $form['permission'][$key]['#id']; } else { // Permission row. @@ -765,13 +768,14 @@ function theme_user_admin_permissions($variables) { 'data' => drupal_render($form['permission'][$key]), 'class' => array('permission'), ); + $class = 'child'; foreach (element_children($form['checkboxes']) as $rid) { $form['checkboxes'][$rid][$key]['#title'] = $roles[$rid] . ': ' . $form['permission'][$key]['#markup']; $form['checkboxes'][$rid][$key]['#title_display'] = 'invisible'; $row[] = array('data' => drupal_render($form['checkboxes'][$rid][$key]), 'class' => array('checkbox')); } } - $rows[] = $row; + $rows[] = array('data' => $row, 'class' => array($modulekey, $class)); } $header[] = (t('Permission')); foreach (element_children($form['role_names']) as $rid) { diff --git a/modules/user/user.css b/modules/user/user.css index 60f93bf..7ce4fc9 100644 --- a/modules/user/user.css +++ b/modules/user/user.css @@ -9,6 +9,14 @@ #permissions tr.even .form-item { white-space: normal; } +html.js #permissions tr.parent td { + cursor: pointer; + background: url(../../misc/menu-collapsed.png) no-repeat left center; +} +html.js #permissions tr.parent td.expanded { + background: url(../../misc/menu-expanded.png) no-repeat left center; +} + #user-admin-settings fieldset .fieldset-description { font-size: 0.85em; padding-bottom: .5em; diff --git a/modules/user/user.permissions.js b/modules/user/user.permissions.js index 4ef576c..fae8fb2 100644 --- a/modules/user/user.permissions.js +++ b/modules/user/user.permissions.js @@ -5,7 +5,7 @@ */ Drupal.behaviors.permissions = { attach: function (context) { - $('table#permissions:not(.permissions-processed)').each(function () { + $('table#permissions').once('permissions').each(function () { // Create dummy checkboxes. We use dummy checkboxes instead of reusing // the existing checkboxes here because new checkboxes don't alter the // submitted form. If we'd automatically check existing checkboxes, the @@ -32,7 +32,14 @@ Drupal.behaviors.permissions = { $(':checkbox[name^="2["]', this) .click(toggle) .each(function () { toggle.call(this); }); - }).addClass('permissions-processed'); + + // Provide the collapse/expand functionality. + $('tr.parent td', this).addClass('expanded').click(function() { + $(this).toggleClass('expanded'); + var module = $(this).attr('id'); + $('table#permissions tr.child.' + module).toggle(); + }); + }); } };