Модуль:Якорь: различия между версиями

Материал из Юридический факультет МГУ
Перейти к навигации Перейти к поиску
[[:ru:]]>Jack who built the house
м (29 версий импортировано)
 
(не показано 12 промежуточных версий 5 участников)
Строка 1: Строка 1:
<!--
+
local getArgs = require('Module:Arguments').getArgs
-->{{#if: {{{1|}}}|<span id="{{anchorencode:{{{1|}}}}}"></span><span id="{{replace|{{urlencode:{{{1|}}}|WIKI}}|%|.|}}"></span><!--
+
local yesno = require('Module:Yesno')
-->{{#if: {{{2|}}}|<span id="{{anchorencode:{{{2|}}}}}"></span><span id="{{replace|{{urlencode:{{{2|}}}|WIKI}}|%|.|}}"></span><!--
+
local compressSparseArray = require('Module:TableTools').compressSparseArray
-->{{#if: {{{3|}}}|<span id="{{anchorencode:{{{3|}}}}}"></span><span id="{{replace|{{urlencode:{{{3|}}}|WIKI}}|%|.|}}"></span><!--
+
local p = {}
-->{{#if: {{{4|}}}|<span id="{{anchorencode:{{{4|}}}}}"></span><span id="{{replace|{{urlencode:{{{4|}}}|WIKI}}|%|.|}}"></span><!--
+
 
-->{{#if: {{{5|}}}|<span id="{{anchorencode:{{{5|}}}}}"></span><span id="{{replace|{{urlencode:{{{5|}}}|WIKI}}|%|.|}}"></span><!--
+
local function add_anchor(anchor, text, visible)
-->{{#if: {{{6|}}}|<span id="{{anchorencode:{{{6|}}}}}"></span><span id="{{replace|{{urlencode:{{{6|}}}|WIKI}}|%|.|}}"></span><!--
+
local result = mw.html.create('span')
-->{{#if: {{{7|}}}|<span id="{{anchorencode:{{{7|}}}}}"></span><span id="{{replace|{{urlencode:{{{7|}}}|WIKI}}|%|.|}}"></span><!--
+
:attr('id', anchor)
-->{{#if: {{{8|}}}|<span id="{{anchorencode:{{{8|}}}}}"></span><span id="{{replace|{{urlencode:{{{8|}}}|WIKI}}|%|.|}}"></span><!--
+
:wikitext(text)
-->{{#if: {{{9|}}}|<span id="{{anchorencode:{{{9|}}}}}"></span><span id="{{replace|{{urlencode:{{{9|}}}|WIKI}}|%|.|}}"></span><!--
+
if visible then
-->{{#if: {{{10|}}}|<span id="{{anchorencode:{{{10|}}}}}"></span><!--
+
result:addClass('highlight-target')
-->{{#if: {{{11|}}}|<span style="background:#ffdd80; padding:0.2em 0.5em;">[[Шаблон:Якорь]]: задано более 10 названий метки</span><!--
+
end
-->}} }} }} }} }} }} }} }} }} }} }}<noinclude>
+
return tostring(result)
{{doc}}
+
end
<!-- Добавляйте категории на страницу документацию, не сюда -->
+
 
</noinclude>
+
local function unpack(...)
 +
local frame = ...
 +
local args
 +
if type(frame.args) == 'table' then
 +
args = getArgs(frame)
 +
elseif type(frame) == 'table' then
 +
args = frame
 +
else
 +
args = {...}
 +
end
 +
return args
 +
end
 +
 
 +
function p.main(...)
 +
local args = unpack(...)
 +
local anchors = compressSparseArray(args)
 +
local text
 +
local visible = yesno(args.visible or args.v)
 +
if visible then
 +
text = args.text or args['текст'] or args[1]
 +
end
 +
 
 +
local result = text
 +
for i, v in ipairs(anchors) do
 +
result = add_anchor(anchors[i], result, visible)
 +
--[[
 +
создание старого вида якорей для совместимости,
 +
см. Обсуждение шаблона:Якорь#Новые html5 ссылки и старые
 +
]]
 +
local encoded_anchor = mw.uri.encode(anchors[i], 'WIKI'):gsub('%%', '.')
 +
if anchors[i] ~= encoded_anchor then
 +
result = add_anchor(encoded_anchor, result, visible)
 +
end
 +
end
 +
 
 +
return result
 +
end
 +
 
 +
return p

Текущая версия на 11:31, 13 февраля 2021

Для документации этого модуля может быть создана страница Модуль:Якорь/doc

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

local function add_anchor(anchor, text, visible)
	local result = mw.html.create('span')
		:attr('id', anchor)
		:wikitext(text)
	if visible then
		result:addClass('highlight-target')
	end
	return tostring(result)
end

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

function p.main(...)
	local args = unpack(...)
	local anchors = compressSparseArray(args)
	local text
	local visible = yesno(args.visible or args.v)
	if visible then
		text = args.text or args['текст'] or args[1]
	end

	local result = text
	for i, v in ipairs(anchors) do
		result = add_anchor(anchors[i], result, visible)
		--[[
			создание старого вида якорей для совместимости,
			см. Обсуждение шаблона:Якорь#Новые html5 ссылки и старые
		]]
		local encoded_anchor = mw.uri.encode(anchors[i], 'WIKI'):gsub('%%', '.')
		if anchors[i] ~= encoded_anchor then
			result = add_anchor(encoded_anchor, result, visible)
		end
	end

	return result
end

return p