summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/user/user.permissions.js40
1 files changed, 40 insertions, 0 deletions
diff --git a/modules/user/user.permissions.js b/modules/user/user.permissions.js
new file mode 100644
index 000000000..d098da54d
--- /dev/null
+++ b/modules/user/user.permissions.js
@@ -0,0 +1,40 @@
+// $Id$
+(function ($) {
+
+/**
+ * Shows checked and disabled checkboxes for inherited permissions.
+ */
+Drupal.behaviors.permissions = {
+ attach: function (context) {
+ $('table#permissions:not(.permissions-processed)').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
+ // permission table would be polluted with redundant entries. This
+ // is deliberate, but desirable when we automatically check them.
+ $(':checkbox', this).not('[name^="2["]').not('[name^="1["]').each(function () {
+ $(this).addClass('real-checkbox');
+ $('<input type="checkbox" class="dummy-checkbox" disabled="disabled" checked="checked" />')
+ .attr('title', Drupal.t("This permission is inherited from the authenticated user role."))
+ .hide()
+ .insertAfter(this);
+ });
+
+ // Helper function toggles all dummy checkboxes based on the checkboxes'
+ // state. If the "authenticated user" checkbox is checked, the checked
+ // and disabled checkboxes are shown, the real checkboxes otherwise.
+ var toggle = function () {
+ $(this).closest('tr')
+ .find('.real-checkbox')[this.checked ? 'hide' : 'show']().end()
+ .find('.dummy-checkbox')[this.checked ? 'show' : 'hide']();
+ };
+
+ // Initialize the authenticated user checkbox.
+ $(':checkbox[name^="2["]', this)
+ .click(toggle)
+ .each(function () { toggle.call(this); });
+ }).addClass('permissions-processed');
+ }
+};
+
+})(jQuery);