MediaWiki:Common.js: Difference between revisions
Custom collapsibles for dialogue |
Another dialogue attempt |
||
(8 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
/* Any JavaScript here will be loaded for all users on every page load. */ | /* Any JavaScript here will be loaded for all users on every page load. */ | ||
/* Custom hex strings */ | /* Custom hex strings */ | ||
Line 40: | Line 20: | ||
/* Custom collapsibles for | /* Custom collapsibles for hints (cannot be nested): */ | ||
var coll = document.getElementsByClassName("collapsible-hint"); | |||
var i; | |||
for (i = 0; i < coll.length; i++) { | |||
coll[i].addEventListener("click", function() { | |||
this.classList.toggle("active"); | |||
var content = this.nextElementSibling; | |||
if (content.style.maxHeight){ | |||
content.style.maxHeight = null; | |||
content.classList.remove("collapsible-hint-content-visible"); | |||
} else { | |||
content.style.maxHeight = content.scrollHeight + "px"; | |||
content.classList.add("collapsible-hint-content-visible"); | |||
} | |||
}); | |||
} | |||
// | /* Custom collapsibles for social media threads */ | ||
$(' | $(document).ready(function() { | ||
// | $('.collapsible-dialogue-link').on('click', function() { | ||
//alert("Click!"); | |||
// | $parentElem = $(this).closest('.collapsible-dialogue'); | ||
if ($(this).text() == 'Collapse') { | |||
} | // hide | ||
$(this).text('Choose'); | |||
$parentElem.children('.collapsible-dialogue-content').slideUp(200); | |||
} else { | |||
// show | |||
$(this).text('Collapse'); | |||
$parentElem.children('.collapsible-dialogue-content').slideDown(200); | |||
$parentElem.siblings('.collapsible-dialogue').find('.collapsible-dialogue-content').slideUp(200); | |||
$parentElem.siblings('.collapsible-dialogue').find('.collapsible-dialogue-link').text('Choose'); | |||
} | |||
}); | }); | ||
}); | |||
/* Custom collapsibles for social media threads METHOD 2 */ | |||
$(document).ready(function() { | |||
var depth; | |||
var stillCollapsing, stillExpanding; | |||
// Attach the click event | |||
$('div.dialogue-thread span.dialogue-choice-button').on('click', chooseDialogue); | |||
// Hide initially | |||
$('div.dialogue-thread ul').each(initialDeepHide); | |||
function initialDeepHide() { | |||
if ($(this).is('ul')) { | |||
$(this).children('li').each(initialDeepHide); | |||
} | |||
else if ($(this).is('li')) { | |||
if ($(this).children('ul').length) { | |||
//myDepth = 1 + $(this).parents('li').length; | |||
//if (myDepth > 1) { $(this).css('background','yellow'); } | |||
//$(this).children('ul').each(initialDeepHide); | |||
} else { | |||
myDepth = 1 + $(this).parents('li').length; | |||
//$(this).append(" - Depth "+myDepth); | |||
if (myDepth > 1) { $(this).hide(); } | |||
} | |||
} | |||
} | |||
function deepCollapse() { | |||
if ($(this).is('ul')) { | |||
$(this).children('li').each(deepCollapse); | |||
} | |||
else if ($(this).is('li')) { | |||
if ($(this).children('ul').length) { | |||
$(this).children('ul').each(deepCollapse); | |||
} else { | |||
myDepth = 1 + $(this).parents('li').length; | |||
if (myDepth <= depth) { stillCollapsing = false; } | |||
if (stillCollapsing) { | |||
$(this).slideUp(); | |||
// Also set any sub-options to be collapsed | |||
$(this).find('span.dialogue-choice-button').data('collapsed', true).text('Expand'); | |||
} | |||
} | |||
} | |||
} | |||
function deepExpand() { | |||
if ($(this).is('ul')) { | |||
$(this).children('li').each(deepExpand); | |||
} | |||
else if ($(this).is('li')) { | |||
if ($(this).children('ul').length) { | |||
$(this).children('ul').each(deepExpand); | |||
} else { | |||
myDepth = 1 + $(this).parents('li').length; | |||
if (myDepth <= depth) { stillExpanding = false; } | |||
if (stillExpanding && myDepth == depth+1) { $(this).slideDown(); } | |||
} | |||
} | |||
} | |||
function chooseDialogue() { | |||
var $topLevelUl = $(this).parents('li').last().parent('ul'); | |||
depth = 1 + $(this).parent('li').parents('li').length; | |||
//$topLevelUl.nextAll('ul').each(diveDeepUl); | |||
if ($(this).data('collapsed') === true) { | |||
$(this).data('collapsed', false); | |||
$(this).text('Collapse'); | |||
stillExpanding = true; | |||
//$topLevelUl.css('background', 'lightgreen'); | |||
$topLevelUl.nextAll('ul').each(deepExpand); | |||
} else { | |||
$(this).data('collapsed', true); | |||
$(this).text('Expand'); | |||
stillCollapsing = true; | |||
//$topLevelUl.css('background', 'pink'); | |||
$topLevelUl.nextAll('ul').each(deepCollapse); | |||
} | |||
} | |||
}); |
Latest revision as of 19:49, 2 December 2023
/* Any JavaScript here will be loaded for all users on every page load. */ /* Custom hex strings */ var hss = document.getElementsByClassName("hex-string"); var i; for (i = 0; i < hss.length; i++) { hss[i].addEventListener("click", function() { if (this.dataset.state === 'hex') { // Switch to English this.querySelector('.hex-string-content').innerText = this.dataset.text; this.dataset.state = 'text'; } else { // Switch to Hex this.querySelector('.hex-string-content').innerText = this.dataset.hex; this.dataset.state = 'hex'; } }); } /* Custom collapsibles for hints (cannot be nested): */ var coll = document.getElementsByClassName("collapsible-hint"); var i; for (i = 0; i < coll.length; i++) { coll[i].addEventListener("click", function() { this.classList.toggle("active"); var content = this.nextElementSibling; if (content.style.maxHeight){ content.style.maxHeight = null; content.classList.remove("collapsible-hint-content-visible"); } else { content.style.maxHeight = content.scrollHeight + "px"; content.classList.add("collapsible-hint-content-visible"); } }); } /* Custom collapsibles for social media threads */ $(document).ready(function() { $('.collapsible-dialogue-link').on('click', function() { //alert("Click!"); $parentElem = $(this).closest('.collapsible-dialogue'); if ($(this).text() == 'Collapse') { // hide $(this).text('Choose'); $parentElem.children('.collapsible-dialogue-content').slideUp(200); } else { // show $(this).text('Collapse'); $parentElem.children('.collapsible-dialogue-content').slideDown(200); $parentElem.siblings('.collapsible-dialogue').find('.collapsible-dialogue-content').slideUp(200); $parentElem.siblings('.collapsible-dialogue').find('.collapsible-dialogue-link').text('Choose'); } }); }); /* Custom collapsibles for social media threads METHOD 2 */ $(document).ready(function() { var depth; var stillCollapsing, stillExpanding; // Attach the click event $('div.dialogue-thread span.dialogue-choice-button').on('click', chooseDialogue); // Hide initially $('div.dialogue-thread ul').each(initialDeepHide); function initialDeepHide() { if ($(this).is('ul')) { $(this).children('li').each(initialDeepHide); } else if ($(this).is('li')) { if ($(this).children('ul').length) { //myDepth = 1 + $(this).parents('li').length; //if (myDepth > 1) { $(this).css('background','yellow'); } //$(this).children('ul').each(initialDeepHide); } else { myDepth = 1 + $(this).parents('li').length; //$(this).append(" - Depth "+myDepth); if (myDepth > 1) { $(this).hide(); } } } } function deepCollapse() { if ($(this).is('ul')) { $(this).children('li').each(deepCollapse); } else if ($(this).is('li')) { if ($(this).children('ul').length) { $(this).children('ul').each(deepCollapse); } else { myDepth = 1 + $(this).parents('li').length; if (myDepth <= depth) { stillCollapsing = false; } if (stillCollapsing) { $(this).slideUp(); // Also set any sub-options to be collapsed $(this).find('span.dialogue-choice-button').data('collapsed', true).text('Expand'); } } } } function deepExpand() { if ($(this).is('ul')) { $(this).children('li').each(deepExpand); } else if ($(this).is('li')) { if ($(this).children('ul').length) { $(this).children('ul').each(deepExpand); } else { myDepth = 1 + $(this).parents('li').length; if (myDepth <= depth) { stillExpanding = false; } if (stillExpanding && myDepth == depth+1) { $(this).slideDown(); } } } } function chooseDialogue() { var $topLevelUl = $(this).parents('li').last().parent('ul'); depth = 1 + $(this).parent('li').parents('li').length; //$topLevelUl.nextAll('ul').each(diveDeepUl); if ($(this).data('collapsed') === true) { $(this).data('collapsed', false); $(this).text('Collapse'); stillExpanding = true; //$topLevelUl.css('background', 'lightgreen'); $topLevelUl.nextAll('ul').each(deepExpand); } else { $(this).data('collapsed', true); $(this).text('Expand'); stillCollapsing = true; //$topLevelUl.css('background', 'pink'); $topLevelUl.nextAll('ul').each(deepCollapse); } } });