sourcehypertextviewsmixins.pug

include comments.pug

mixin sc(text)
	if text.toUpperCase() == text
		span.all-sc= text
	else if text.slice(0, -1).toUpperCase == text.slice(0, -1)
		span.c2sc= text
	else
		span.smallcaps= text

mixin h(level, text)
	#{'h' + level}(id=grimm.slugify(text, {html: true}))
		if block
			a(href=`#${grimm.slugify(text, {html: true})}`): block
		else
			a(href=`#${grimm.slugify(text, {html: true})}`)!= text

mixin h2(text)
	+h(2, text)

mixin h3(text)
	+h(3, text)

mixin h4(text)
	+h(4, text)

mixin sn(number, display)
	if block
		aside.note(id=`sn-body-${number}`, 'sn-slug'=number)&attributes(attributes)
			if display
				a.note-number(href=`#sn-ref-${number}`)= display
			else
				a.note-number(href=`#sn-ref-${number}`)= snCounter(number)
			div
				block
	else
		if display
			a(class=`sidenote-ref` id=`sn-ref-${number}`, href=`#sn-body-${number}`, 'sn-slug'=number)&attributes(attributes): sup.note= display
		else
			a(class=`sidenote-ref` id=`sn-ref-${number}`, href=`#sn-body-${number}`, 'sn-slug'=number)&attributes(attributes): sup.note= snCounter(number)

mixin flag(code, altAs = false)
	- altAs = altAs || code;
	img.flag(src=`/flags/${code}.png` alt=tr(`loc.country.${altAs}`))&attributes(attributes)

mixin table
	if block
		.table-container
			table&attributes(attributes)
				block
	else
		div [#[i No content provided]]

mixin moonPhase(boxSize, phase, angle, lightOnDark)
	- const currentQuarter = Math.floor(phase * 4);
	- const crescentSize = (currentQuarter % 2) ? ((phase * 20) % 5) : (5 - ((phase * 20) % 5));
	- const backPath = `m${boxSize / 2},1 a${boxSize / 8},${boxSize / 8} 0 1,1 0,${boxSize - 2} a${boxSize / 8},${boxSize / 8} 0 1,1 0,-${boxSize - 2}`;
	- const crescentPath = `m${boxSize / 2},1 a${crescentSize},${boxSize / 8} 0 1,${1 - currentQuarter % 2} 0,${boxSize - 2} a${boxSize / 8},${boxSize / 8} 0 1,${+lightOnDark ^ +(currentQuarter < 2)} 0,-${boxSize - 2}`
	svg.svg-moon(viewBox=`0 0 ${boxSize} ${boxSize}`)&attributes(attributes)
		path.svg-moon-back(d=backPath stroke="currentColor" fill="transparent")
		path.svg-moon-crescent(d=crescentPath fill="currentColor")

mixin subs(source, language, isDefault)
	if isDefault
		track(src=source, label=grimm.dict[language].meta.name, srclang=grimm.dict[language].meta.code, kind="subtitles", default)
	else
		track(src=source, label=grimm.dict[language].meta.name, srclang=grimm.dict[language].meta.code, kind="subtitles")

mixin captions(source, language, isDefault)
	if isDefault
		track(src=source, label=grimm.dict[language].meta.name, srclang=grimm.dict[language].meta.code, kind="captions", default)
	else
		track(src=source, label=grimm.dict[language].meta.name, srclang=grimm.dict[language].meta.code, kind="captions")