about summary refs log tree commit diff stats
path: root/wiki/lib/scripts/tree.js
diff options
context:
space:
mode:
authorahriman <ahriman@falte.red>2018-12-03 19:22:25 -0500
committerahriman <ahriman@falte.red>2018-12-03 19:22:25 -0500
commit0ae8cbf5c0b1a198b963490985b7738392ebcb97 (patch)
treeb2c77ae72c6b717e2b97492065196ac5ffb2d9e2 /wiki/lib/scripts/tree.js
parentf57f6cc5a2d159f90168d292437dc4bd8cd7f934 (diff)
downloadsite-0ae8cbf5c0b1a198b963490985b7738392ebcb97.tar.gz
installed dokuwiki, added to navbar, updated news
Diffstat (limited to 'wiki/lib/scripts/tree.js')
-rw-r--r--wiki/lib/scripts/tree.js107
1 files changed, 107 insertions, 0 deletions
diff --git a/wiki/lib/scripts/tree.js b/wiki/lib/scripts/tree.js
new file mode 100644
index 0000000..9b2d245
--- /dev/null
+++ b/wiki/lib/scripts/tree.js
@@ -0,0 +1,107 @@
+jQuery.fn.dw_tree = function(overrides) {
+    var dw_tree = {
+
+        /**
+         * Delay in ms before showing the throbber.
+         * Used to skip the throbber for fast AJAX calls.
+         */
+        throbber_delay: 500,
+
+        $obj: this,
+
+        toggle_selector: 'a.idx_dir',
+
+        init: function () {
+            this.$obj.on('click', this.toggle_selector, this,
+                               this.toggle);
+            jQuery('ul:first', this.$obj).attr('role', 'tree');
+            jQuery('ul', this.$obj).not(':first').attr('role', 'group');
+            jQuery('li', this.$obj).attr('role', 'treeitem');
+            jQuery('li.open > ul', this.$obj).attr('aria-expanded', 'true');
+            jQuery('li.closed > ul', this.$obj).attr('aria-expanded', 'false');
+            jQuery('li.closed', this.$obj).attr('aria-live', 'assertive');
+        },
+
+        /**
+         * Open or close a subtree using AJAX
+         * The contents of subtrees are "cached" until the page is reloaded.
+         * A "loading" indicator is shown only when the AJAX call is slow.
+         *
+         * @author Andreas Gohr <andi@splitbrain.org>
+         * @author Ben Coburn <btcoburn@silicodon.net>
+         * @author Pierre Spring <pierre.spring@caillou.ch>
+         */
+        toggle: function (e) {
+            var $listitem, $sublist, timeout, $clicky, show_sublist, dw_tree, opening;
+
+            e.preventDefault();
+
+            dw_tree = e.data;
+            $clicky = jQuery(this);
+            $listitem = $clicky.closest('li');
+            $sublist = $listitem.find('ul').first();
+            opening = $listitem.hasClass('closed');
+            dw_tree.toggle_display($clicky, opening);
+            if ($sublist.is(':visible')) {
+                $listitem.removeClass('open').addClass('closed');
+                $sublist.attr('aria-expanded', 'false');
+            } else {
+                $listitem.removeClass('closed').addClass('open');
+                $sublist.attr('aria-expanded', 'true');
+            }
+
+            // if already open, close by hiding the sublist
+            if (!opening) {
+                $sublist.dw_hide();
+                return;
+            }
+
+            show_sublist = function (data) {
+                $sublist.hide();
+                if (typeof data !== 'undefined') {
+                    $sublist.html(data);
+                    $sublist.parent().attr('aria-busy', 'false').removeAttr('aria-live');
+                    jQuery('li.closed', $sublist).attr('aria-live', 'assertive');
+                }
+                if ($listitem.hasClass('open')) {
+                    // Only show if user didn’t close the list since starting
+                    // to load the content
+                    $sublist.dw_show();
+                }
+            };
+
+            // just show if already loaded
+            if ($sublist.length > 0) {
+                show_sublist();
+                return;
+            }
+
+            //prepare the new ul
+            $sublist = jQuery('<ul class="idx" role="group"/>');
+            $listitem.append($sublist);
+
+            timeout = window.setTimeout(
+                bind(show_sublist, '<li aria-busy="true"><img src="' + DOKU_BASE + 'lib/images/throbber.gif" alt="loading..." title="loading..." /></li>'), dw_tree.throbber_delay);
+
+            dw_tree.load_data(function (data) {
+                                  window.clearTimeout(timeout);
+                                  show_sublist(data);
+                              }, $clicky);
+        },
+
+        toggle_display: function ($clicky, opening) {
+        },
+
+        load_data: function (show_data, $clicky) {
+            show_data();
+        }
+    };
+
+    jQuery.extend(dw_tree, overrides);
+
+    if (!overrides.deferInit) {
+        dw_tree.init();
+    }
+
+    return dw_tree;
+};