1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
/**
* Collapsible navigation for Vector
*/
( function ( mw, $ ) {
'use strict';
var map;
// Use the same function for all navigation headings - don't repeat
function toggle( $element ) {
$.cookie(
'vector-nav-' + $element.parent().attr( 'id' ),
$element.parent().is( '.collapsed' ),
{ 'expires': 30, 'path': '/' }
);
$element
.parent()
.toggleClass( 'expanded' )
.toggleClass( 'collapsed' )
.find( '.body' )
.slideToggle( 'fast' );
}
/* Browser Support */
map = {
// Left-to-right languages
ltr: {
// Collapsible Nav is broken in Opera < 9.6 and Konqueror < 4
opera: [['>=', 9.6]],
konqueror: [['>=', 4.0]],
blackberry: false,
ipod: false,
iphone: false,
ps3: false
},
// Right-to-left languages
rtl: {
opera: [['>=', 9.6]],
konqueror: [['>=', 4.0]],
blackberry: false,
ipod: false,
iphone: false,
ps3: false
}
};
if ( !$.client.test( map ) ) {
return true;
}
$( function ( $ ) {
var $headings, tabIndex;
/* General Portal Modification */
// Always show the first portal
$( '#mw-panel > .portal:first' ).addClass( 'first persistent' );
// Apply a class to the entire panel to activate styles
$( '#mw-panel' ).addClass( 'collapsible-nav' );
// Use cookie data to restore preferences of what to show and hide
$( '#mw-panel > .portal:not(.persistent)' )
.each( function ( i ) {
var id = $(this).attr( 'id' ),
state = $.cookie( 'vector-nav-' + id );
// Add anchor tag to heading for better accessibility
$( this ).find( 'h3' ).wrapInner( $( '<a href="#"></a>' ).click( false ) );
// In the case that we are not showing the new version, let's show the languages by default
if (
state === 'true' ||
( state === null && i < 1 ) ||
( state === null && id === 'p-lang' )
) {
$(this)
.addClass( 'expanded' )
.removeClass( 'collapsed' )
.find( '.body' )
.hide() // bug 34450
.show();
} else {
$(this)
.addClass( 'collapsed' )
.removeClass( 'expanded' );
}
// Re-save cookie
if ( state !== null ) {
$.cookie( 'vector-nav-' + $(this).attr( 'id' ), state, { 'expires': 30, 'path': '/' } );
}
} );
/* Tab Indexing */
$headings = $( '#mw-panel > .portal:not(.persistent) > h3' );
// Get the highest tab index
tabIndex = $( document ).lastTabIndex() + 1;
// Fix the search not having a tabindex
$( '#searchInput' ).attr( 'tabindex', tabIndex++ );
// Make it keyboard accessible
$headings.attr( 'tabindex', function () {
return tabIndex++;
});
// Toggle the selected menu's class and expand or collapse the menu
$( '#mw-panel' )
.delegate( '.portal:not(.persistent) > h3', 'keydown', function ( e ) {
// Make the space and enter keys act as a click
if ( e.which === 13 /* Enter */ || e.which === 32 /* Space */ ) {
toggle( $(this) );
}
} )
.delegate( '.portal:not(.persistent) > h3', 'mousedown', function ( e ) {
if ( e.which !== 3 ) { // Right mouse click
toggle( $(this) );
$(this).blur();
}
return false;
} );
});
}( mediaWiki, jQuery ) );
|