MediaWiki:Gadget-hide info.js

Definition från Wiktionary, den fria ordlistan.
Hoppa till navigering Hoppa till sök

OBS: Efter du har publicerat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.

  • Firefox / Safari: Håll ned Skift och klicka på Uppdatera sidan eller tryck Ctrl-F5 eller Ctrl-R (⌘-R på Mac)
  • Google Chrome: Tryck Ctrl-Skift-R (⌘-Skift-R på Mac)
  • Internet Explorer / Edge: Håll ned Ctrl och klicka på Uppdatera eller tryck Ctrl-F5
  • Opera: Tryck Ctrl-F5.
// TODO:
// * dölj bara om det blir för mycket info
// * inställningar för vad man vill visa

/* global $ */

var hiddenByDefault = {
	citat: true,
	'sammansättningar': true,
	'jämför': true,
	'besläktade_ord': true,
	fraser: true,
	'seäven': true,
	etymologi: true,
	grammatik: true,
	stavning: true,
	hyperonymer: true,
	hyponymer: true,
	kohyponymer: true,
	holonymer: true,
	meronymer: true,
	troponymer: true
};


mw.hook('wikipage.content').add(function (parent) {
	$(parent).find('h3').each(function () {
		// Hämta nästa OL eller H3 (utifall att en OL saknas)
		var ol = $(this).nextUntil('ol, h3').last().next();

		if (!ol.is('ol'))
			return;

		ol.children('li').each(function () {
			handle($(this).find('> dl'));
		});

		var belowSep = ol.next('dl');
		if (belowSep.length)
			handle(belowSep);
	});
});

function getType(dd) {
	dd = $(dd);
	var type = (/template\-([^ ]+)/.exec(dd.attr('class')) || {})[1];
	var first = dd.children().first();
	if (!type) {
		if (first.is('b') && /\b[0-9]{4}\b/.test(first.text())) {
			type = 'citat';
		} else if (first.is('i') && !first.nextAll(':not(dl)').length) {
			// Either just <i>, or <i> and <dl>
			type = 'exempel';
		}
	}
	return type;
}

function handle(dl) {
	var hidden = dl.children()
		.filter(function () {
			return hiddenByDefault[getType(this)];
		})
		.addClass('hideable-info')
		.hide();

	if (!hidden.length) {
		return;
	}

	var dd = $('<dd>', {
		'class': 'extrainfo-toggle',
		css: {
			position: 'relative',
			height: 2,
			width: '7em',
			background: '#6c6',
			marginLeft: dl.children().length === hidden.length ? 0 : undefined
		}
	}).append(
		$('<a>', {
			href: '#',
			title: 'Visa/dölj',
			click: false,
			keydown: keydown,
			mousedown: mousedown,
			css: {
				display: 'block',
				position: 'absolute',
				top: -12/2 - 2,
				left: -12 - 2,
				padding: 2,
				paddingRight: 12 + 2,
				width: '100%',
				lineHeight: 1,
				textDecoration: 'none',
				fontSize: 12,
				color: '#666'
			}
		}).append(
			$('<img>', {
				src: '//upload.wikimedia.org/wikipedia/commons/thumb/9/90/Next_Arrow.svg/12px-Next_Arrow.svg.png',
				alt: '[+]'
			}),
			$('<img>', {
				src: '//upload.wikimedia.org/wikipedia/commons/thumb/8/83/Bottom_Arrow.svg/12px-Bottom_Arrow.svg.png',
				alt: '[−]',
				hidden: true
			})
		)
	);

	dl.append(dd, hidden);
}

function keydown(e) {
	if (e.which === 13 || e.which === 32) { // Enter och mellanslag
		e.preventDefault();
		toggle(e);
	}
}

function mousedown(e) {
	if (e.which !== 3) { // Högerklick
		toggle(e);
	}
}

function toggle(e) {
	var topBefore = $(e.target).offset().top;

	$('.extrainfo-toggle img, .hideable-info').toggle();

	var topAfter = $(e.target).offset().top;

	document.documentElement.scrollTop += topAfter - topBefore;
}