xref: /template/writr/script.js (revision b40dee05a44100641dd6a63f28599f2115bcfabd)
1/* DOKUWIKI:include js/skip-link-focus-fix.js */
2
3( function( $ ) {
4    /*
5     * Click to toggle sidebar.
6     */
7    function toggleSidebar() {
8        $( '#writr__sidebar' ).on( 'click', '#writr__sidebar-toggle', function( e ) {
9            e.preventDefault();
10            $( 'html, body' ).scrollTop( 0 );
11            $( this ).toggleClass( 'open' );
12            $( 'body' ).toggleClass( 'sidebar-closed' );
13            $( '#writr__secondary' ).resize();
14        } );
15    }
16
17    /**
18     * Handles toggling the navigation menu for small screens.
19     */
20    function toggleNavigation() {
21        var $container = $('#writr__site-navigation');
22        if (!$container.length) return;
23        var $button = $('.menu-toggle', $container);
24        if (!$button.length) return;
25        var $menu = $('ul', $container);
26        if (!$menu.length) {
27            $menu.hide();
28            return;
29        }
30        $button.click(function(){
31            $container.toggleClass('toggled');
32        });
33    }
34
35    /*
36     * A function to enable/disable a dropdown submenu.
37     */
38    function toggleSubmenu() {
39        $( '.main-navigation .node > div > a' ).append( '<span class="dropdown-icon" />' );
40        $( '#writr__site-navigation' ).on( 'click', '.dropdown-icon', function( e ) {
41            e.preventDefault();
42            $( this ).toggleClass( 'open' );
43            if ( $( this ).hasClass( 'open' ) ) {
44                $( this ).parent().parent().next( 'ul' ).show();
45            } else {
46                $( this ).parent().parent().next( 'ul' ).hide();
47            }
48        } );
49    }
50
51    /*
52     * Close TOC by default
53     */
54    function closeToc() {
55        var $toc = jQuery('#dw__toc .toggle');
56        if($toc.length) {
57            $toc[0].setState(-1);
58        }
59    }
60
61    /*
62     * Change search submit input to submit button to make it easier to style
63     * @deprecated since Detritus
64     */
65    function changeSearchInput() {
66        var $searchForm = $('.search-form > form > div');
67        var $searchButton = $('input[type="submit"]', $searchForm).detach();
68        var title = $searchButton.attr('title');
69        var value = $searchButton.val();
70        $searchForm.append('<button type="submit" title="'+title+'">'+value+'</button>');
71    }
72
73    /*
74     * Enable add new page dropdown
75     */
76    function enableAddNewPage() {
77        $('.action.AddNewPage').click(function(event) {
78            event.preventDefault();
79            $('.addnewpage').toggle();
80        });
81
82        $(document).click(function(event) {
83            if (!$(event.target).closest('.action.AddNewPage, .addnewpage').length) {
84                $('.addnewpage').hide();
85            }
86        });
87    }
88
89    /*
90     * Enable translation dropdown
91     */
92    function enableTranslation() {
93        $('.action.Translation').click(function(event) {
94            event.preventDefault();
95            $('.plugin_translation').toggle();
96        });
97
98        $(document).click(function(event) {
99            if (!$(event.target).closest('.action.Translation, .plugin_translation').length) {
100                $('.plugin_translation').hide();
101            }
102        });
103    }
104
105    $(function(){
106        toggleSidebar();
107        toggleNavigation();
108        toggleSubmenu();
109        closeToc();
110        changeSearchInput();
111        enableAddNewPage();
112        enableTranslation();
113    });
114} )( jQuery );
115