Current File : /home/jvzmxxx/wiki/extensions/Flow/modules/engine/components/board/features/flow-board-side-rail.js
/*!
 * Contains Side Rail functionality.
 */

( function ( $, mw ) {
	/**
	 * Binds handlers for side rail in board header.
	 * @param {jQuery} $container
	 * @this FlowComponent
	 * @constructor
	 */
	function FlowBoardComponentSideRailFeatureMixin( $container ) {
		// Bind element handlers
		this.bindNodeHandlers( FlowBoardComponentSideRailFeatureMixin.UI.events );
	}
	OO.initClass( FlowBoardComponentSideRailFeatureMixin );

	FlowBoardComponentSideRailFeatureMixin.UI = {
		events: {
			apiPreHandlers: {},
			apiHandlers: {},
			interactiveHandlers: {},
			loadHandlers: {}
		}
	};

	//
	// Load handlers
	//

	/**
	 * Sets side rail state based on user preferences.
	 *
	 * @param {Event} event
	 */
	function FlowBoardComponentSideRailFeatureMixinLoadCallback( event ) {
		if ( mw.user.options.get( 'flow-side-rail-state' ) === 'collapsed' ) {
			$( '.flow-component' ).addClass( 'expanded' );
		}
	}
	FlowBoardComponentSideRailFeatureMixin.UI.events.loadHandlers.loadSideRail = FlowBoardComponentSideRailFeatureMixinLoadCallback;

	//
	// On element-click handlers
	//

	/**
	 * Toggles side rail state and sets user preferences.
	 *
	 * @param {Event} event
	 */
	function FlowBoardComponentSideRailFeatureMixinToggleCallback( event ) {
		var boardIsExpanded = $( '.flow-component' ).toggleClass( 'expanded' ).hasClass( 'expanded' ),
			sideRailState = boardIsExpanded ? 'collapsed' : 'expanded';

		if ( !mw.user.isAnon() ) {
			// update the user preferences; no preferences for anons
			new mw.Api().saveOption( 'flow-side-rail-state', sideRailState );
			// ensure we also see that preference in the current page
			mw.user.options.set( 'flow-side-rail-state', sideRailState );
		}
	}
	FlowBoardComponentSideRailFeatureMixin.UI.events.interactiveHandlers.toggleSideRail = FlowBoardComponentSideRailFeatureMixinToggleCallback;

	// Mixin to FlowComponent
	mw.flow.mixinComponent( 'component', FlowBoardComponentSideRailFeatureMixin );
}( jQuery, mediaWiki ) );