diff options
author | ahriman <ahriman@falte.red> | 2018-12-03 19:22:25 -0500 |
---|---|---|
committer | ahriman <ahriman@falte.red> | 2018-12-03 19:22:25 -0500 |
commit | 0ae8cbf5c0b1a198b963490985b7738392ebcb97 (patch) | |
tree | b2c77ae72c6b717e2b97492065196ac5ffb2d9e2 /wiki/lib/scripts/behaviour.js | |
parent | f57f6cc5a2d159f90168d292437dc4bd8cd7f934 (diff) | |
download | site-0ae8cbf5c0b1a198b963490985b7738392ebcb97.tar.gz |
installed dokuwiki, added to navbar, updated news
Diffstat (limited to 'wiki/lib/scripts/behaviour.js')
-rw-r--r-- | wiki/lib/scripts/behaviour.js | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/wiki/lib/scripts/behaviour.js b/wiki/lib/scripts/behaviour.js new file mode 100644 index 0000000..18308d6 --- /dev/null +++ b/wiki/lib/scripts/behaviour.js @@ -0,0 +1,195 @@ +/** + * Hides elements with a slide animation + * + * @param {function} fn optional callback to run after hiding + * @param {bool} noaria supress aria-expanded state setting + * @author Adrian Lang <mail@adrianlang.de> + */ +jQuery.fn.dw_hide = function(fn, noaria) { + if(!noaria) this.attr('aria-expanded', 'false'); + return this.slideUp('fast', fn); +}; + +/** + * Unhides elements with a slide animation + * + * @param {function} fn optional callback to run after hiding + * @param {bool} noaria supress aria-expanded state setting + * @author Adrian Lang <mail@adrianlang.de> + */ +jQuery.fn.dw_show = function(fn, noaria) { + if(!noaria) this.attr('aria-expanded', 'true'); + return this.slideDown('fast', fn); +}; + +/** + * Toggles visibility of an element using a slide element + * + * @param {bool} state the current state of the element (optional) + * @param {function} fn callback after the state has been toggled + * @param {bool} noaria supress aria-expanded state setting + */ +jQuery.fn.dw_toggle = function(state, fn, noaria) { + return this.each(function() { + var $this = jQuery(this); + if (typeof state === 'undefined') { + state = $this.is(':hidden'); + } + $this[state ? "dw_show" : "dw_hide" ](fn, noaria); + }); +}; + +/** + * Automatic behaviours + * + * This class wraps various JavaScript functionalities that are triggered + * automatically whenever a certain object is in the DOM or a certain CSS + * class was found + */ +var dw_behaviour = { + + init: function(){ + dw_behaviour.focusMarker(); + dw_behaviour.scrollToMarker(); + dw_behaviour.removeHighlightOnClick(); + dw_behaviour.quickSelect(); + dw_behaviour.checkWindowsShares(); + dw_behaviour.subscription(); + + dw_behaviour.revisionBoxHandler(); + jQuery(document).on('click','#page__revisions input[type=checkbox]', + dw_behaviour.revisionBoxHandler + ); + + jQuery('.bounce').effect('bounce', {times:10}, 2000 ); + }, + + /** + * Looks for an element with the ID scroll__here at scrolls to it + */ + scrollToMarker: function(){ + var $obj = jQuery('#scroll__here'); + if($obj.length) { + if($obj.offset().top != 0) { + jQuery('html, body').animate({ + scrollTop: $obj.offset().top - 100 + }, 500); + } else { + // hidden object have no offset but can still be scrolled into view + $obj[0].scrollIntoView(); + } + } + }, + + /** + * Looks for an element with the ID focus__this at sets focus to it + */ + focusMarker: function(){ + jQuery('#focus__this').focus(); + }, + + /** + * Remove all search highlighting when clicking on a highlighted term + */ + removeHighlightOnClick: function(){ + jQuery('span.search_hit').click( + function(e){ + jQuery(e.target).removeClass('search_hit', 1000); + } + ); + }, + + /** + * Autosubmit quick select forms + * + * When a <select> tag has the class "quickselect", this script will + * automatically submit its parent form when the select value changes. + * It also hides the submit button of the form. + * + * @author Andreas Gohr <andi@splitbrain.org> + */ + quickSelect: function(){ + jQuery('select.quickselect') + .change(function(e){ e.target.form.submit(); }) + .closest('form').find(':button').not('.show').hide(); + }, + + /** + * Display error for Windows Shares on browsers other than IE + * + * @author Michael Klier <chi@chimeric.de> + */ + checkWindowsShares: function() { + if(!LANG.nosmblinks || navigator.userAgent.match(/(Trident|MSIE)/)) { + // No warning requested or none necessary + return; + } + + jQuery('a.windows').on('click', function(){ + alert(LANG.nosmblinks.replace(/\\n/,"\n")); + }); + }, + + /** + * Hide list subscription style if target is a page + * + * @author Adrian Lang <lang@cosmocode.de> + * @author Pierre Spring <pierre.spring@caillou.ch> + */ + subscription: function(){ + var $form, $list, $digest; + + $form = jQuery('#subscribe__form'); + if (0 === $form.length) return; + + $list = $form.find("input[name='sub_style'][value='list']"); + $digest = $form.find("input[name='sub_style'][value='digest']"); + + $form.find("input[name='sub_target']") + .click( + function () { + var $this = jQuery(this), show_list; + if (!$this.prop('checked')) { + return; + } + + show_list = $this.val().match(/:$/); + $list.parent().dw_toggle(show_list); + if (!show_list && $list.prop('checked')) { + $digest.prop('checked', 'checked'); + } + } + ) + .filter(':checked') + .click(); + }, + + /** + * disable multiple revisions checkboxes if two are checked + * + * @author Andreas Gohr <andi@splitbrain.org> + * @author Anika Henke <anika@selfthinker.org> + */ + revisionBoxHandler: function() { + var $revisions = jQuery('#page__revisions'); + var $all = jQuery('input[type=checkbox]', $revisions); + var $checked = $all.filter(':checked'); + var $button = jQuery('button', $revisions); + + if($checked.length < 2) { + $all.removeAttr('disabled'); + $button.attr('disabled', true); + } else { + $all.attr('disabled', true); + $button.removeAttr('disabled'); + $checked.each(function(i) { + jQuery(this).removeAttr('disabled'); + if(i>1) { + jQuery(this).attr('checked', false); + } + }); + } + } +}; + +jQuery(dw_behaviour.init); |