מדיה ויקי:Gadget-foldPortalMenus.js

מתוך צפונות ויקי

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על Ctrl-F5.
$( function() {
	"use strict";

	var storageKey = 'sidemenuFolded',
		storage = $.jStorage.storageAvailable(),
		heights = {},
		toggleElement = function( elem ) {
			var id = elem.closest( 'div.portal' ).attr( 'id' ),
				hide = ! elem.hasClass( 'foldmenu-folded' );
			elem.toggleClass( 'foldmenu-expanded', !hide )
				.toggleClass('foldmenu-folded', hide )
				.siblings( 'div.body' ).animate( { maxHeight: hide ? 0 : heights[id] } );
			updateState();
		},
		updateState = function() {
			if (! storage)
				return;
			var folded = [];
			$( 'div.portal h3.foldmenu-folded' ).each( function( id, item ) {
				folded.push( $( item ).closest( 'div.portal' ).attr( 'id' ) );
			});
			$.jStorage.set( storageKey, folded );
		};
		
	$( 'div.portal h3#p-navigation-label' ).toggle( true );
	$( 'div.portal div.body' ).each( function() {
		var $this = $( this ),
			id = $this.closest( 'div.portal' ).attr( 'id' ),
			height = $this.height();
		$this.css( 'max-height', $this.height() );
		heights[id] = height;
	});
	$( 'div.portal h3' )
		.addClass( 'foldmenu-expanded' )
		.prepend( $('<span>', { 'class': 'plus' } ).text( '+' ) )
		.prepend( $('<span>', { 'class': 'minus' } ).text( '-' ) )
		.click( function() { toggleElement( $(this) ) } );
	if (storage)
			$( $.jStorage.get( storageKey ) || [] ).each(function( index, item ) {
				toggleElement( $( 'div.portal#' + item ).find( 'h3:first' ) );
			});
});