diff options
Diffstat (limited to 'platform/www/lib/tpl/dokuwiki/script.js')
-rw-r--r-- | platform/www/lib/tpl/dokuwiki/script.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/platform/www/lib/tpl/dokuwiki/script.js b/platform/www/lib/tpl/dokuwiki/script.js new file mode 100644 index 0000000..88dae90 --- /dev/null +++ b/platform/www/lib/tpl/dokuwiki/script.js @@ -0,0 +1,89 @@ +/** + * We handle several device classes based on browser width. + * + * - desktop: > __tablet_width__ (as set in style.ini) + * - mobile: + * - tablet <= __tablet_width__ + * - phone <= __phone_width__ + */ +var device_class = ''; // not yet known +var device_classes = 'desktop mobile tablet phone'; + +function tpl_dokuwiki_mobile(){ + + // the z-index in mobile.css is (mis-)used purely for detecting the screen mode here + var screen_mode = jQuery('#screen__mode').css('z-index') + ''; + + // determine our device pattern + // TODO: consider moving into dokuwiki core + switch (screen_mode) { + case '1': + if (device_class.match(/tablet/)) return; + device_class = 'mobile tablet'; + break; + case '2': + if (device_class.match(/phone/)) return; + device_class = 'mobile phone'; + break; + default: + if (device_class == 'desktop') return; + device_class = 'desktop'; + } + + jQuery('html').removeClass(device_classes).addClass(device_class); + + // handle some layout changes based on change in device + var $handle = jQuery('#dokuwiki__aside h3.toggle'); + var $toc = jQuery('#dw__toc h3'); + + if (device_class == 'desktop') { + // reset for desktop mode + if($handle.length) { + $handle[0].setState(1); + $handle.hide(); + } + if($toc.length) { + $toc[0].setState(1); + } + } + if (device_class.match(/mobile/)){ + // toc and sidebar hiding + if($handle.length) { + $handle.show(); + $handle[0].setState(-1); + } + if($toc.length) { + $toc[0].setState(-1); + } + } +} + +jQuery(function(){ + var resizeTimer; + dw_page.makeToggle('#dokuwiki__aside h3.toggle','#dokuwiki__aside div.content'); + + tpl_dokuwiki_mobile(); + jQuery(window).on('resize', + function(){ + if (resizeTimer) clearTimeout(resizeTimer); + resizeTimer = setTimeout(tpl_dokuwiki_mobile,200); + } + ); + + // increase sidebar length to match content (desktop mode only) + var sidebar_height = jQuery('.desktop #dokuwiki__aside').height(); + var pagetool_height = jQuery('.desktop #dokuwiki__pagetools ul:first').height(); + // pagetools div has no height; ul has a height + var content_min = Math.max(sidebar_height || 0, pagetool_height || 0); + + var content_height = jQuery('#dokuwiki__content div.page').height(); + if(content_min && content_min > content_height) { + var $content = jQuery('#dokuwiki__content div.page'); + $content.css('min-height', content_min); + } + + // blur when clicked + jQuery('#dokuwiki__pagetools div.tools>ul>li>a').on('click', function(){ + this.blur(); + }); +}); |