From 688c5219ce1f6bf1dbda6e733bec881baaa24025 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 30 Jun 2012 12:03:59 +0200 Subject: fixed the toc/sidebar toggling script for real --- lib/scripts/page.js | 50 ++++++++++++++++++++++++++++------------------ lib/tpl/dokuwiki/script.js | 34 +++++++++++++++++++++++-------- 2 files changed, 57 insertions(+), 27 deletions(-) diff --git a/lib/scripts/page.js b/lib/scripts/page.js index 74dec37fb..78943be7a 100644 --- a/lib/scripts/page.js +++ b/lib/scripts/page.js @@ -102,7 +102,7 @@ dw_page = { * @param selector handle What should be clicked to toggle * @param selector content This element will be toggled */ - makeToggle: function(handle, content){ + makeToggle: function(handle, content, state){ var $handle, $content, $clicky, $child, setClicky; $handle = jQuery(handle); if(!$handle.length) return; @@ -125,32 +125,44 @@ dw_page = { } }; - // the state indicator - $clicky = jQuery(document.createElement('strong')); + $handle[0].setState = function(state){ + var hidden; + if(!state) state = 1; - // click function - $handle.css('cursor','pointer') - .click(function () { - var hidden; + // Assert that content instantly takes the whole space + $content.css('height', $content.height()).show(); - // Assert that content instantly takes the whole space - $content.css('height', $content.height()).show(); + // stop any running animation + $child.stop(true, true); - // stop any running animation and get current state - hidden = $child.stop(true, true).is(':hidden'); + // was a state given or do we toggle? + if(state === -1) { + hidden = false; + } else if(state === 1) { + hidden = true; + } else { + hidden = $child.is(':hidden'); + } - // update the state - setClicky(!hidden); + // update the state + setClicky(!hidden); - // Start animation and assure that $toc is hidden/visible - $child.dw_toggle(hidden, function () { - $content.toggle(hidden); - }); - }) + // Start animation and assure that $toc is hidden/visible + $child.dw_toggle(hidden, function () { + $content.toggle(hidden); + }); + }; + + // the state indicator + $clicky = jQuery(document.createElement('strong')); + + // click function + $handle.css('cursor','pointer') + .click($handle[0].setState) .prepend($clicky); // initial state - setClicky(); + $handle[0].setState(state); } }; diff --git a/lib/tpl/dokuwiki/script.js b/lib/tpl/dokuwiki/script.js index 75575608b..d32cf5cff 100644 --- a/lib/tpl/dokuwiki/script.js +++ b/lib/tpl/dokuwiki/script.js @@ -1,14 +1,32 @@ function tpl_dokuwiki_mobile(){ // check if we are in mobile or tablet mode be sure to adjust the number // here when adjusting it in the css - if(document.body.clientWidth > 979) return; + var $handle = jQuery('#dokuwiki__aside h3.toggle'); + var $toc = jQuery('#dw__toc h3'); + if(document.body.clientWidth > 979) { + console.log('desktop'); + // reset for desktop mode + $handle[0].setState(1); + $handle.hide(); + $toc[0].setState(1); + } else { + console.log('mobile'); + // toc and sidebar hiding + $handle.show(); + $handle[0].setState(-1); + $toc[0].setState(-1); + } +} - // toc and sidebar hiding +jQuery(function(){ + var resizeTimer; dw_page.makeToggle('#dokuwiki__aside h3.toggle','#dokuwiki__aside div.content'); - jQuery('#dw__toc h3.toggle').click(); - jQuery('#dokuwiki__aside h3.toggle').show().click(); -} - -jQuery(tpl_dokuwiki_mobile); -jQuery(window).bind('resize',tpl_dokuwiki_mobile); + tpl_dokuwiki_mobile(); + jQuery(window).bind('resize', + function(){ + if (resizeTimer) clearTimeout(resizeTimer); + resizeTimer = setTimeout(tpl_dokuwiki_mobile,200); + } + ); +}); -- cgit v1.2.3