summaryrefslogtreecommitdiff
path: root/django/conf/admin_media/js/admin/CollapsedFieldsets.js
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2005-07-18 22:35:04 +0000
committerAdrian Holovaty <adrian@holovaty.com>2005-07-18 22:35:04 +0000
commita7506973af918e177d102328c6db52bc9e0f43b4 (patch)
tree69833283acdbfa9a7f36f3525d373578262b4851 /django/conf/admin_media/js/admin/CollapsedFieldsets.js
parent34f749e506b6e0748809ba71e877082cf5eedd21 (diff)
Moved default admin from media to django/conf/admin_media, so Django is able to introspect their location, in preparation for #76
git-svn-id: http://code.djangoproject.com/svn/django/trunk@185 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/conf/admin_media/js/admin/CollapsedFieldsets.js')
-rw-r--r--django/conf/admin_media/js/admin/CollapsedFieldsets.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/django/conf/admin_media/js/admin/CollapsedFieldsets.js b/django/conf/admin_media/js/admin/CollapsedFieldsets.js
new file mode 100644
index 0000000000..bb6eaa79f3
--- /dev/null
+++ b/django/conf/admin_media/js/admin/CollapsedFieldsets.js
@@ -0,0 +1,82 @@
+// Finds all fieldsets with class="collapse", collapses them, and gives each
+// one a "Show foo" link that uncollapses it.
+
+function findForm(node) {
+ // returns the node of the form containing the given node
+ if (node.tagName.toLowerCase() != 'form') {
+ return findForm(node.parentNode);
+ }
+ return node;
+}
+
+var CollapsedFieldsets = {
+ collapse_re: /\bcollapse\b/, // Class of fieldsets that should be dealt with.
+ collapsed_re: /\bcollapsed\b/, // Class that fieldsets get when they're hidden.
+ collapsed_class: 'collapsed',
+ init: function() {
+ var fieldsets = document.getElementsByTagName('fieldset');
+ var collapsed_seen = false;
+ for (var i=0; i<fieldsets.length; i++) {
+ var fs = fieldsets[i];
+ // Collapse this fieldset if it has the correct class, and if it
+ // doesn't have any errors. (Collapsing shouldn't apply in the case
+ // of error messages.)
+ if (fs.className.match(CollapsedFieldsets.collapse_re) && !CollapsedFieldsets.fieldset_has_errors(fs)) {
+
+ collapsed_seen = true;
+
+ // Give it an additional class, used by CSS to hide it.
+ fs.className += ' ' + CollapsedFieldsets.collapsed_class;
+
+ // Get plural verbose name of object.
+ var verbose_name = fs.getElementsByTagName('h2')[0].innerHTML;
+
+ // <div class="form-row collapse-toggle" id="fieldsetcollapser1">
+ // <a href="javascript:toggleDisplay;">Show section priorities&hellip;</a>
+ // </div>
+ var div = document.createElement('div');
+
+ // Give it a hook so we can remove it later.
+ div.id = 'fieldsetcollapser' + i;
+
+ div.className = 'form-row collapse-toggle'; // CSS hook
+ var collapse_link = document.createElement('a');
+ collapse_link.setAttribute('href', 'javascript:CollapsedFieldsets.display(' + i + ');');
+ collapse_link.appendChild(document.createTextNode('Show ' + verbose_name));
+ div.appendChild(collapse_link);
+ fs.appendChild(div);
+ }
+ }
+ if (collapsed_seen) {
+ // Expand all collapsed fieldsets when form is submitted.
+ addEvent(findForm(document.getElementsByTagName('fieldset')[0]), 'submit', function() { CollapsedFieldsets.uncollapse_all(); });
+ }
+ },
+ fieldset_has_errors: function(fs) {
+ // Returns true if any fields in the fieldset have validation errors.
+ var divs = fs.getElementsByTagName('div');
+ for (var i=0; i<divs.length; i++) {
+ if (divs[i].className.match(/\berror\b/)) {
+ return true;
+ }
+ }
+ return false;
+ },
+ display: function(fieldset_index) {
+ var fs = document.getElementsByTagName('fieldset')[fieldset_index];
+ // Remove the class name that causes the "display: none".
+ fs.className = fs.className.replace(CollapsedFieldsets.collapsed_re, '');
+ // Remove the "Show foo" link.
+ fs.removeChild(document.getElementById('fieldsetcollapser' + fieldset_index));
+ },
+ uncollapse_all: function() {
+ var fieldsets = document.getElementsByTagName('fieldset');
+ for (var i=0; i<fieldsets.length; i++) {
+ if (fieldsets[i].className.match(CollapsedFieldsets.collapsed_re)) {
+ CollapsedFieldsets.display(i);
+ }
+ }
+ }
+}
+
+addEvent(window, 'load', CollapsedFieldsets.init);