Модуль:Su

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]

Цей модуль впроваджує шаблон {{su}}. Він використовується, щоб створювати дві менші рядка тексту на одному справжньому рядку.

Використання з вікітексту

[ред. код]

Цей модуль не можу бути використаний напряму з вікітексту. Його можна використати лише через використання шаблону, зазвичай шаблону {{su}}. Будь ласка, дивіться докумантацію на сторінці шаблону.

Використання в модулях Lua

[ред. код]

Щоб використати модуль в інших модулях Lua, спершу завантажте модуль.

local mSu = require('Module:Su')

Тоді ви можете згенерувати рядки su, використавши функцію _main.

mSu._main(sup, sub, options)

sup містить вміст верхнього рядка та sub містить вміст нижнього рядка. options є таблицею, що містить наступні поля:

  • align — можна встановити значення «r» або «right» для вирівнювання справа та «c» або «center» для вирівнювання по центру. Будь-яке інше значення вирівняє вивід ліворуч. Значення повинно бути рядком (string).
  • fontSize — розмір шрифту тексту, наприклад «90%». Якщо встановити «f» або «fixed», то модуль виведе шрифт фіксованої ширини з розміром 80%. Значення повинно бути рядком (string).
  • lineHeight — відстань від верху до низу (включно з верхнім символом). Стандартне значення — 1.2em. Значення повинно бути рядком (string).
  • verticalAlign — Вирівнювання основи від низу. Стандартне значення залежить від наявності sub; -0.4em, якщо наявне, 0.8em, якщо ні. Значення повинно бути рядком (string).

Всі аргументи є необов'язковими.

Приклади

[ред. код]
Код Результат
mSu._main('верхній рядок тексту', 'нижній рядок тексту') верхній рядок тексту
нижній рядок тексту
mSu._main('верхній рядок тексту', 'нижній рядок тексту', {fontSize = '100%'}) верхній рядок тексту
нижній рядок тексту
mSu._main('верхній рядок тексту', 'нижній рядок тексту', {fontSize = 'f'}) верхній рядок тексту
нижній рядок тексту
mSu._main('верхній рядок тексту', 'нижній рядок тексту', {align = 'r'}) верхній рядок тексту
нижній рядок тексту
mSu._main('верхній рядок тексту', 'нижній рядок тексту', {align = 'c'}) верхній рядок тексту
нижній рядок тексту
mSu._main('12', '8', {align = 'c', lineHeight = '0.8em'}) 12
8
mSu._main('верхній рядок тексту') верхній рядок тексту
mSu._main(nil, 'нижній рядок тексту')
нижній рядок тексту
-- This module implements {{su}}.

local p = {}

function p.main(frame)
	-- Use arguments from the parent frame only, and remove any blank arguments.
	-- We don't need to trim whitespace from any arguments, as this module only
	-- uses named arguments, and whitespace is trimmed from them automatically. 
	local origArgs = frame:getParent().args
	local args = {}
	for k, v in pairs(origArgs) do
		if v ~= '' then
			args[k] = v
		end
	end

	-- Define the variables to pass to luaMain.
	local sup = args.p
	local sub = args.b
	local options = {
		align = args.a,
		fontSize = args.w,
		lineHeight = args.lh,
		verticalAlign = args.va
	}
	return p._main(sup, sub, options)
end

function p.invoke_main(frame)
	-- entry point for invocation using frame arguments
	
	local origArgs = frame.args
	local args = {}
	for k, v in pairs(origArgs) do
		if v ~= '' then
			args[k] = v
		end
	end

	-- Define the variables to pass to luaMain.
	local sup = args.p
	local sub = args.b
	local options = {
		align = args.a,
		fontSize = args.w,
		lineHeight = args.lh,
		verticalAlign = args.va
	}
	return p._main(sup, sub, options)
end

function p._main(sup, sub, options)
	options = options or {}
	local span = mw.html.create('span')

	-- Set the styles.
	span:css{
		['display']        = 'inline-block',
		['margin-bottom']  = '-0.3em',
		['vertical-align'] = options.verticalAlign or sub and '-0.4em' or '0.8em',
		['line-height']    = options.lineHeight or '1.2em'
	}
	if options.fontSize == 'f' or options.fontSize == 'fixed' then
		span:css{
			['font-family'] = 'monospace',
			['font-size']   = '80%'
		}
	else
		span:css('font-size', options.fontSize or '80%')
	end
	if options.align == 'r' or options.align == 'right' then
		span:css('text-align', 'right')
	elseif options.align == 'c' or options.align == 'center' then
		span:css('text-align', 'center')
	else
		span:css('text-align', 'left')
	end

	-- Add the wikitext.
	span
		:tag('sup')
			:css('font-size', 'inherit')
			:css('line-height', 'inherit')
			:css('vertical-align', 'baseline')
			:wikitext(sup)
			:done()
		:tag('br', {selfClosing = true}):done()
		:tag('sub')
			:css('font-size', 'inherit')
			:css('line-height', 'inherit')
			:css('vertical-align', 'baseline')
			:wikitext(sub)
	
	return '<span class="nowrap">' .. tostring(span) .. '</span>'
end

return p