Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Common.js: Difference between revisions

MediaWiki interface page
No edit summary
No edit summary
 
(6 intermediate revisions by the same user not shown)
Line 163: Line 163:
}() );
}() );


/* Mobile/tablet class category heading enhancements */
/* Mobile/tablet class category accordions */
( function () {
( function () {
var classCategoryHeadingQuery = window.matchMedia('(max-width: 899px)');
var classCategoryQuery = window.matchMedia('(max-width: 899px)');
var classCategoryHeadings = [
var classCategoryIcons = [
{
{
title: 'Martial Classes',
selector: '.wizlords-class-category-accordion-martial',
variant: 'martial',
fileName: 'MartialIcon.png'
icon: 'MartialIcon.png'
},
},
{
{
title: 'Arcane Classes',
selector: '.wizlords-class-category-accordion-arcane',
variant: 'arcane',
fileName: 'ArcaneIcon.png'
icon: 'ArcaneIcon.png'
},
},
{
{
title: 'Divine Classes',
selector: '.wizlords-class-category-accordion-divine',
variant: 'divine',
fileName: 'DivineIcon.png'
icon: 'DivineIcon.png'
}
}
];
];


function getClassCategoryIcon(fileName) {
function getClassCategoryAccordionIcon(fileName) {
var scriptPath = mw.config.get('wgScriptPath') || '';
var scriptPath = mw.config.get('wgScriptPath') || '';


Line 194: Line 191:
}
}


function getHeadingLabel($heading) {
function initialiseClassCategoryAccordionIcons() {
var $clone = $heading.clone();
classCategoryIcons.forEach(function (category) {
$(category.selector).each(function () {
var $icon = $(this).find('.wizlords-class-category-accordion-icon').first();


$clone
if ($icon.length && !$icon.children('img').length) {
.find('.mw-editsection, .indicator, .wizlords-mobile-class-category-heading-icon')
$icon.empty().append(getClassCategoryAccordionIcon(category.fileName));
.remove();
}
});
});
}
 
function initialiseClassCategoryAccordions() {
initialiseClassCategoryAccordionIcons();
 
$('.wizlords-class-category-accordion').each(function () {
var $accordion = $(this);
var $heading = $accordion.children('.wizlords-class-category-accordion-heading').first();
var isMobileCitizen = classCategoryQuery.matches && $('body').hasClass('skin-citizen');
var isOpen = $accordion.hasClass('is-open');
 
if (isMobileCitizen) {
$heading
.attr('role', 'button')
.attr('tabindex', '0')
.attr('aria-expanded', isOpen ? 'true' : 'false');
} else {
$accordion.removeClass('is-open');
$heading
.removeAttr('role')
.removeAttr('tabindex')
.removeAttr('aria-expanded');
}
});
}
 
function toggleClassCategoryAccordion(heading) {
if (!classCategoryQuery.matches || !$('body').hasClass('skin-citizen')) {
return;
}
 
var $heading = $(heading);
var $accordion = $heading.closest('.wizlords-class-category-accordion');
var isOpen = $accordion.hasClass('is-open');
 
$accordion.toggleClass('is-open', !isOpen);
$heading.attr('aria-expanded', isOpen ? 'false' : 'true');
}
 
$(initialiseClassCategoryAccordions);


return $.trim($clone.text()).replace(/\s+/g, ' ');
if (classCategoryQuery.addEventListener) {
classCategoryQuery.addEventListener('change', initialiseClassCategoryAccordions);
} else if (classCategoryQuery.addListener) {
classCategoryQuery.addListener(initialiseClassCategoryAccordions);
}
}


function enhanceClassCategoryHeadings() {
$(document).on('click', '.wizlords-class-category-accordion-heading', function () {
classCategoryHeadings.forEach(function (category) {
toggleClassCategoryAccordion(this);
$('h2').filter(function () {
});
return getHeadingLabel($(this)) === category.title;
}).each(function () {
var $heading = $(this);


if (classCategoryHeadingQuery.matches && $('body').hasClass('skin-citizen')) {
$(document).on('keydown', '.wizlords-class-category-accordion-heading', function (event) {
$heading
if (event.key === 'Enter' || event.key === ' ') {
.addClass('wizlords-mobile-class-category-heading')
event.preventDefault();
.addClass('wizlords-mobile-class-category-heading-' + category.variant);
toggleClassCategoryAccordion(this);
}
});
}() );


if (!$heading.children('.wizlords-mobile-class-category-heading-icon').length) {
/* Mobile/tablet race culture cards */
var $icon = $('<span>')
( function () {
.addClass('wizlords-mobile-class-category-heading-icon')
var cultureCardQuery = window.matchMedia('(max-width: 899px)');
.append(getClassCategoryIcon(category.icon));
var $editSection = $heading.children('.mw-editsection').first();


if ($editSection.length) {
function isMobileCitizenCultureLayout() {
$icon.insertBefore($editSection);
return cultureCardQuery.matches && $('body').hasClass('skin-citizen');
} else {
}
$heading.append($icon);
 
}
function initialiseCultureCards() {
}
var isActive = isMobileCitizenCultureLayout();
} else {
 
$heading
$('.wizlords-culture-card').each(function () {
.removeClass('wizlords-mobile-class-category-heading')
var $card = $(this);
.removeClass('wizlords-mobile-class-category-heading-' + category.variant)
var isOpen = $card.hasClass('is-open');
.children('.wizlords-mobile-class-category-heading-icon')
 
.remove();
if (isActive) {
}
$card
});
.attr('data-wizlords-mobile-culture-card', '1')
.attr('role', 'button')
.attr('tabindex', '0')
.attr('aria-expanded', isOpen ? 'true' : 'false');
} else {
$card
.removeClass('is-open')
.removeAttr('data-wizlords-mobile-culture-card')
.removeAttr('role')
.removeAttr('tabindex')
.removeAttr('aria-expanded');
}
});
});
}
}


$(enhanceClassCategoryHeadings);
function toggleCultureCard(card) {
if (!isMobileCitizenCultureLayout()) {
return;
}
 
var $card = $(card);
var isOpen = $card.hasClass('is-open');
 
$card
.toggleClass('is-open', !isOpen)
.attr('aria-expanded', isOpen ? 'false' : 'true');
}
 
$(initialiseCultureCards);


if (classCategoryHeadingQuery.addEventListener) {
if (cultureCardQuery.addEventListener) {
classCategoryHeadingQuery.addEventListener('change', enhanceClassCategoryHeadings);
cultureCardQuery.addEventListener('change', initialiseCultureCards);
} else if (classCategoryHeadingQuery.addListener) {
} else if (cultureCardQuery.addListener) {
classCategoryHeadingQuery.addListener(enhanceClassCategoryHeadings);
cultureCardQuery.addListener(initialiseCultureCards);
}
}
$(document).on('click', '.wizlords-culture-card', function (event) {
var isCultureHeaderLink = $(event.target).closest('.wizlords-culture-card-header a, .wizlords-culture-card-title a').length;
if (isMobileCitizenCultureLayout() && isCultureHeaderLink) {
event.preventDefault();
event.stopPropagation();
toggleCultureCard(this);
return;
}
if ($(event.target).closest('a').length) {
return;
}
toggleCultureCard(this);
});
$(document).on('keydown', '.wizlords-culture-card', function (event) {
if (event.key === 'Enter' || event.key === ' ') {
event.preventDefault();
toggleCultureCard(this);
}
});
}() );
/* Responsive race Available Classes lists */
( function () {
function initialiseRaceAvailableClassLists() {
$('.wizlords-culture-classes + ul, .wizlords-shared-classes ul').each(function () {
var $list = $(this);
var itemCount = $list.children('li').length;
var $sharedClasses = $list.closest('.wizlords-shared-classes');
var isDrakelingList = $sharedClasses
.children('.wizlords-shared-classes-title')
.first()
.text()
.indexOf('Drakelings') !== -1;
$list
.removeClass(function (index, className) {
return (className.match(/(^|\s)count-\d+/g) || []).join(' ');
})
.addClass('wizlords-available-classes-list count-' + itemCount)
.toggleClass('is-multicolumn', itemCount > 4)
.toggleClass('is-short', itemCount <= 4)
.toggleClass('is-drakeling-list', isDrakelingList);
$list
.closest('.wizlords-culture-card-body, .wizlords-shared-classes')
.addClass('wizlords-available-classes');
});
}
$(initialiseRaceAvailableClassLists);
}() );
}() );