From Brotato Wiki

(btn--inactive)
(initStatsCardsToggles - Add support for bulk toggle buttons)
Line 80: Line 80:
/**
/**
* Toggle a StatsCard box (.ibox). Template for the toggle buttons is WIP
* Toggle a StatsCard box (.ibox). Template for the toggle buttons is WIP
*
* @todo: USe the CSS class (ibox--hidden) instead of JS-injected opacity
*
*
* @return  {void}
* @return  {void}
Line 90: Line 92:
var filterStr = $btn.attr( 'data-hide-target' ); // eg "rarity3"
var filterStr = $btn.attr( 'data-hide-target' ); // eg "rarity3"
var $targets  = $( '[data-ibox-type="item"].' + filterStr );
var $targets  = $( '[data-ibox-type="item"].' + filterStr );
$btn.toggleClass( 'btn--active' );
var $all      = $( '[data-ibox-type="item"]' );
$btn.toggleClass( 'btn--inactive' );
 
if ( filterStr === 'show-all' || filterStr === 'show-none' )
{
$targets = $all;
}
else
{
$btn.toggleClass( 'btn--active' );
$btn.toggleClass( 'btn--inactive' );
}


$targets.each( function( i, el )
$targets.each( function( i, el )
Line 98: Line 109:
var isHidden = $target.hasClass( 'ibox--hidden' );
var isHidden = $target.hasClass( 'ibox--hidden' );


// @todo: Use just the class for this, instead of JS-injected CSS
if ( filterStr === 'show-all' )
// (then just use .toggleClass)
if ( isHidden )
{
{
$target.removeClass( 'ibox--hidden' );
$target.removeClass( 'ibox--hidden' );
$targets.css( { opacity: 1 } );
}
}
else
else if ( filterStr === 'show-none' )
{
{
$target.addClass( 'ibox--hidden' );
$target.addClass( 'ibox--hidden' );
$targets.css( { opacity: 0.2 } );
}
else {
if ( isHidden )
{
$target.removeClass( 'ibox--hidden' );
$targets.css( { opacity: 1 } );
}
else
{
$target.addClass( 'ibox--hidden' );
$targets.css( { opacity: 0.2 } );
}
}
}
});
});

Revision as of 12:06, 14 December 2022

/* Any JavaScript here will be loaded for all users on every page load. */


/*
WARNING: ES5 ONLY!
*/


$(document).ready( function()
{
	// Inits
	// ============================================================================

	initCardTabs(); // Template:StatsCardWeaponTabs
	initStatsCardsToggles(); // Allows hiding StatsCard (.ibox) elements, via toggle buttons (WIP)


	// Funcs
	// ============================================================================

	/**
	 * Sets up tabs. Used by the StatsCardWeaponTabs template
	 *
	 * @link https://brotato.wiki.spellsandguns.com/Template:StatsCardWeaponTabs
	 * @link https://brotato.wiki.spellsandguns.com/MediaWiki:Common.css
	 *
	 * @return  {void}
	 */
	function initCardTabs()
	{
		var $containers = $( '[data-cardtabs]' );

		if ( !$containers.length )
		{
			return;
		}

		// Loop over every container
		$containers.each( function( i1, containerEl )
		{
			var $tabs = $( containerEl );

			// We use the extra step of targetting containers here, instead of
			// just using `.find`, because this lets us support nesteds tabs!
			var $panelsContainer = $tabs.children(   '[data-cardtabs-panels]' );
			var $btnsContainer   = $tabs.children(   '[data-cardtabs-btns]' );
			var $panels = $panelsContainer.children( '[data-cardtabs-panel]' );
			var $btns   = $btnsContainer.children(   '[data-cardtabs-btn]' );

			// Loop over buttons and set up their onclicks
			$btns.each( function( i2, btnEl )
			{
				var $btn     = $( btnEl );
				var btnNum   = $btn.attr( 'data-cardtabs-btn' );
				var $panel   = $panels.filter( '[data-cardtabs-panel="' + btnNum + '"]' );
				var btnActiveCls = 'cardtabs__button--active';
				var panelHideCls = 'cardtabs__panel--js-hidden';

				// Disabled buttons use "-1" for their numbers
				if ( btnNum === '-1' )
				{
					return;
				}

				$btn.on( 'click', function()
				{
					// Hide all other panels, then show the button's own panel
					$panels.addClass( panelHideCls );
					$panel.removeClass( panelHideCls );

					$btns.removeClass( btnActiveCls );
					$btn.addClass( btnActiveCls );
				});
			});

		});
	}//end:initCardTabs


	/**
	 * Toggle a StatsCard box (.ibox). Template for the toggle buttons is WIP
	 * 
	 * @todo: USe the CSS class (ibox--hidden) instead of JS-injected opacity
	 *
	 * @return  {void}
	 */
	function initStatsCardsToggles()
	{
		$( '[data-hide-type]' ).on( 'click', function( ev )
		{
			var $btn      = $( ev.currentTarget );
			var filterStr = $btn.attr( 'data-hide-target' ); // eg "rarity3"
			var $targets  = $( '[data-ibox-type="item"].' + filterStr );
			var $all      = $( '[data-ibox-type="item"]' );

			if ( filterStr === 'show-all' || filterStr === 'show-none' )
			{
				$targets = $all;
			}
			else
			{
				$btn.toggleClass( 'btn--active' );
				$btn.toggleClass( 'btn--inactive' );
			}

			$targets.each( function( i, el )
			{
				var $target = $( el );
				var isHidden = $target.hasClass( 'ibox--hidden' );

				if ( filterStr === 'show-all' )
				{
					$target.removeClass( 'ibox--hidden' );
				}
				else if ( filterStr === 'show-none' )
				{
					$target.addClass( 'ibox--hidden' );
				}
				else {
					if ( isHidden )
					{
						$target.removeClass( 'ibox--hidden' );
						$targets.css( { opacity: 1 } );
					}
					else
					{
						$target.addClass( 'ibox--hidden' );
						$targets.css( { opacity: 0.2 } );
					}
				}
			});
		});
	}//end:initStatsCardsToggles

}); // end:$(document).ready