Модул:Anchor

Мавод аз Википедиа — донишномаи озод
Jump to navigation Jump to search

Модуль предназначен для создания якорей. На нем работают шаблоны {{лангар}} и {{видимый якорь}}. Также его можно использовать в других модулях.

Использование[вироиш]

Для начала необходимо загрузить модуль:

local anchor = require('Модул:Anchor').main

Можно использовать неограниченное количество параметров:

anchor(anchor1, anchor2, ...)

Также параметр visible (или v) позволяет выбрать первый якорь в качестве текста, который будет подсвечиваться при переходе, либо отдельно указать этот текст через параметр text:

anchor{visible = true, visible_anchor, anchor2, ...}

Шаблон:Между pre

anchor{visible = true, text = 'какой-то текст', anchor1, anchor2, ...}

local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local p = {}

local function _main(args)
	local anchors = {}
	local visible = yesno(args.visible or args.v)
	local i = 1
	while args[i] do
		local text, class
		if i == 1 and visible then
			text = args.text or args['матн'] or args[1]
			class = 'citation'
		end
		anchors[i] = tostring(
			mw.html.create('span')
				:attr('id', args[i])
				:addClass(class or '')
				:wikitext(text or '')
		)
		--[[
			создание старого вида якорей для совместимости, 
			см. Обсуждение шаблона:Якорь#Новые html5 ссылки и старые 
		]]
		local url_encoded = mw.uri.encode(args[i], 'WIKI'):gsub('%%', '.')
		if args[i] ~= url_encoded then
			anchors[i] = anchors[i] .. tostring(
				mw.html.create('span')
					:attr('id', url_encoded)
			)
		end
		i = i + 1
	end
	return table.concat(anchors)
end

function p.main(...)
	local frame = ...
	local args
	if type(frame.args) == 'table' then
		args = getArgs(frame)
	elseif type(frame) == 'table' then
		args = frame
	else 
		args = {frame}
	end
	return _main(args)
end

return p