aboutsummaryrefslogtreecommitdiff
path: root/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js')
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js116
1 files changed, 116 insertions, 0 deletions
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js
new file mode 100644
index 000000000..16b00c0ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js
@@ -0,0 +1,116 @@
+/**
+ * Javascript for index view
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+var index = {
+
+ /**
+ * Delay in ms before showing the throbber.
+ * Used to skip the throbber for fast AJAX calls.
+ */
+ throbber_delay: 500,
+
+ /**
+ * Attach event handlers to all "folders" below the given element
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treeattach: function(obj){
+ if(!obj) return;
+
+ var items = getElementsByClass('idx_dir',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+
+ // attach action to make the link clickable by AJAX
+ addEvent(elem,'click',function(e){ return index.toggle(e,this); });
+
+ // get the listitem the elem belongs to
+ var listitem = elem.parentNode;
+ while (listitem.tagName != 'LI') {
+ listitem = listitem.parentNode;
+ }
+ //when there are uls under this listitem mark this listitem as opened
+ if (listitem.getElementsByTagName('ul').length) {
+ listitem.open = true;
+ }
+ }
+ },
+
+ /**
+ * Open or close a subtree using AJAX
+ * The contents of subtrees are "cached" untill 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>
+ */
+ toggle: function(e,clicky){
+ var listitem = clicky.parentNode.parentNode;
+
+ listitem.open = !listitem.open;
+ // listitem.open represents now the action to be done
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(!listitem.open){
+ if (sublists.length) {
+ sublists[0].style.display='none';
+ }
+ listitem.className='closed';
+ e.preventDefault();
+ return false;
+ }
+
+ // just show if already loaded
+ if(sublists.length && listitem.open){
+ sublists[0].style.display='';
+ listitem.className='open';
+ e.preventDefault();
+ return false;
+ }
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ ul.className = 'idx';
+ timeout = window.setTimeout(function(){
+ // show the throbber as needed
+ if (listitem.open) {
+ ul.innerHTML = '<li><img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="loading..." title="loading..." /></li>';
+ listitem.appendChild(ul);
+ listitem.className='open';
+ }
+ }, this.throbber_delay);
+ ajax.elementObj = ul;
+ ajax.afterCompletion = function(){
+ window.clearTimeout(timeout);
+ index.treeattach(ul);
+ if (listitem.className!='open') {
+ if (!listitem.open) {
+ ul.style.display='none';
+ }
+ listitem.appendChild(ul);
+ if (listitem.open) {
+ listitem.className='open';
+ }
+ }
+ };
+ ajax.runAJAX(clicky.search.substr(1)+'&call=index');
+ e.preventDefault();
+ return false;
+ }
+};
+
+
+addInitEvent(function(){
+ if (DOKUid('index__tree'))
+ index.treeattach(DOKUid('index__tree'));
+});