User:Erutuon/scripts/missingEntries.js

From Wiktionary, the free dictionary
Jump to navigation Jump to search

Note: You may have to bypass your browser’s cache to see the changes. In addition, after saving a sitewide CSS file such as MediaWiki:Common.css, it will take 5-10 minutes before the changes take effect, even if you clear your cache.

  • Mozilla / Firefox / Safari: hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (Command-R on a Macintosh);
  • Konqueror and Chrome: click Reload or press F5;
  • Opera: clear the cache in Tools → Preferences;
  • Internet Explorer: hold Ctrl while clicking Refresh, or press Ctrl-F5.

/*
 *  Script for more quickly hiding lists of entries in the "Sources" column of
 *  pages linked from [[User:Jberkel/lists/missing/20190401]].
 *
 *  Replacement for jQuery.makeCollapsible ([[mw:Manual:Collapsible elements]]),
 *  which is very slow.
 */
$(function () {
	const linkedFrom = document.querySelectorAll('.redlink-list .linked-from');
	
	if (linkedFrom.length === 0)
		return;
	
	const collapseText = '[Collapse]', expandText = '[Expand]';
	
	const initiallyShown = window.showMissingEntries;
	
	function makeButton (collapsible) {
		const button = document.createElement('div');
		button.style.float = 'right';
		button.style.cursor = 'pointer';
		button.style.color = 'blue';
		button.style.display = 'inline-block';
		
		let shown = typeof initiallyShown == 'boolean' ? initiallyShown : false;
		button.textContent = shown ? collapseText : expandText;
		collapsible.style.display = shown ? null : 'none';
		
		button.addEventListener('click', () => {
			shown = !shown;
			collapsible.style.display = shown ? null : 'none';
			button.textContent = shown ? collapseText : expandText;
		});
		
		return button;
	}
	
	function moveChildNodes (origin, destination) {
		const childNodes = origin.childNodes;
		let child;
		while ((child = childNodes[0]))
			destination.appendChild(child);
	}
	
	function collapsify (parent) {
		const collapsible = document.createElement("div");
		moveChildNodes(parent, collapsible);
		
		button = makeButton(collapsible);
		parent.appendChild(button);
		parent.appendChild(collapsible);
	}
	
	Array.from(linkedFrom).forEach(collapsify);
});