about summary refs log tree commit diff stats
path: root/wiki/lib/scripts/behaviour.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/behaviour.js
parentf57f6cc5a2d159f90168d292437dc4bd8cd7f934 (diff)
downloadsite-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.js195
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);