<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://self-defense.website/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ATransclude</id>
	<title>Модуль:Transclude - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://self-defense.website/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ATransclude"/>
	<link rel="alternate" type="text/html" href="https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;action=history"/>
	<updated>2026-04-21T13:08:09Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=1082&amp;oldid=prev</id>
		<title>Admin: Защитил страницу Модуль:Transclude ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))</title>
		<link rel="alternate" type="text/html" href="https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=1082&amp;oldid=prev"/>
		<updated>2022-01-25T13:57:56Z</updated>

		<summary type="html">&lt;p&gt;Защитил страницу &lt;a href=&quot;/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&quot; title=&quot;Модуль:Transclude&quot;&gt;Модуль:Transclude&lt;/a&gt; ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 13:57, 25 января 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=891&amp;oldid=prev</id>
		<title>Admin: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=891&amp;oldid=prev"/>
		<updated>2022-01-24T13:18:58Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 13:18, 24 января 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=670&amp;oldid=prev</id>
		<title>Admin в 18:21, 23 января 2022</title>
		<link rel="alternate" type="text/html" href="https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=670&amp;oldid=prev"/>
		<updated>2022-01-23T18:21:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;amp;diff=670&amp;amp;oldid=669&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=669&amp;oldid=prev</id>
		<title>Admin: Новая страница: «local p = {}   function p.hello( frame )     return &quot;Hello, world!&quot; end   return p»</title>
		<link rel="alternate" type="text/html" href="https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=669&amp;oldid=prev"/>
		<updated>2022-01-23T18:08:33Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «local p = {}   function p.hello( frame )     return &amp;quot;Hello, world!&amp;quot; end   return p»&lt;/p&gt;
&lt;a href=&quot;https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;amp;diff=669&amp;amp;oldid=890&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=890&amp;oldid=prev</id>
		<title>[[wikipedia:ru:ombox|ombox]]&gt;Wikisaurus: пропускать пустые параметры в forall и join</title>
		<link rel="alternate" type="text/html" href="https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=890&amp;oldid=prev"/>
		<updated>2020-11-17T12:38:34Z</updated>

		<summary type="html">&lt;p&gt;пропускать пустые параметры в forall и join&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p={}&lt;br /&gt;
&lt;br /&gt;
-- Вызывает внутренний шаблон с аргументами объемлющего шаблона&lt;br /&gt;
function p.call(frame)&lt;br /&gt;
	local template = frame.args[1]&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
    return frame:expandTemplate{ title=template, args=args }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Общая реализация для forall и call&lt;br /&gt;
local function forallImpl(args, separator, conjunction, func)&lt;br /&gt;
	-- нумерованные ключи из args&lt;br /&gt;
	local keys = {}&lt;br /&gt;
	-- перебор в произвольном порядке, даже для нумерованных ключей&lt;br /&gt;
	for key, value in pairs(args) do&lt;br /&gt;
		if type(key) == 'number' and value and value ~= '' then&lt;br /&gt;
			table.insert(keys, key)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(keys)&lt;br /&gt;
	&lt;br /&gt;
	local results = {}&lt;br /&gt;
	for _, key in ipairs(keys) do&lt;br /&gt;
		local value = func(args[key])&lt;br /&gt;
		table.insert(results, value)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return mw.text.listToText(results, separator, conjunction)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Вызывает внутренний шаблон, передавая ему нумерованные параметры объемлющего шаблона по-одному&lt;br /&gt;
function p.forall(frame)&lt;br /&gt;
	local template = frame.args[1]&lt;br /&gt;
	local separator = frame.args.separator or ''&lt;br /&gt;
	local conjunction = frame.args.conjunction or separator&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local func = function(value)&lt;br /&gt;
		return frame:expandTemplate{ title = template, args = {value} } -- или другой frame?&lt;br /&gt;
	end&lt;br /&gt;
	return forallImpl(args, separator, conjunction, func)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Берёт нумерованные аргументы объемлющего шаблона и склеивает их в единую строку&lt;br /&gt;
function p.join(frame)&lt;br /&gt;
	local separator = frame.args[1] or ''&lt;br /&gt;
	local conjunction = frame.args[2] or separator&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local func = function(value)&lt;br /&gt;
		return value&lt;br /&gt;
	end&lt;br /&gt;
	return forallImpl(args, separator, conjunction, func)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Служебная функция: удаляет дубликаты из отсортированного массива с нумерованными индексами&lt;br /&gt;
local function deleteDuplicates(args)&lt;br /&gt;
	local res = {}&lt;br /&gt;
	for key, value in pairs(args) do&lt;br /&gt;
		if args[key+1] ~= value then&lt;br /&gt;
			table.insert(res, value)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Вызывает внутренний шаблон несколько раз, передавая в него блоки аргументов объемлющего шаблона&lt;br /&gt;
function p.npc(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local templateFrame = frame:getParent()&lt;br /&gt;
	local template = frame.args[1]&lt;br /&gt;
	&lt;br /&gt;
	-- определение, блоки аргументов с какими номерами нужны:&lt;br /&gt;
	-- если в объемлющем шаблоне есть &amp;quot;параметр12&amp;quot; и в вызове модуля есть &amp;quot;параметр&amp;quot;, то вызывается 12-й блок&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for key, _ in pairs(args) do&lt;br /&gt;
		local main, num = string.match(key, '^(.-)%s*(%d*)$')&lt;br /&gt;
		num = tonumber(num)&lt;br /&gt;
		-- учитывать &amp;quot;параметр12&amp;quot;, только если задано &amp;quot;параметр&amp;quot;&lt;br /&gt;
		if num and frame.args[main] then&lt;br /&gt;
			table.insert(nums, num)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	nums = deleteDuplicates(nums)&lt;br /&gt;
	&lt;br /&gt;
	-- проходить по нужным номерам блоков по возрастанию и однократно&lt;br /&gt;
	-- подставлять в шаблон:&lt;br /&gt;
	-- 1. общие аргументы данного модуля&lt;br /&gt;
	-- 2. аргументы объемлющего шаблона вида &amp;quot;параметр12&amp;quot; как &amp;quot;параметр&amp;quot; в 12-й блок&lt;br /&gt;
	local results = {}&lt;br /&gt;
	for _, blockNum in ipairs(nums) do&lt;br /&gt;
		-- общие аргументы модуля, которые передаются в каждый блок&lt;br /&gt;
		local blockArgs = mw.clone(frame.args)&lt;br /&gt;
		 -- metatable ломает expandTemplate&lt;br /&gt;
		setmetatable(blockArgs, nil)&lt;br /&gt;
		&lt;br /&gt;
		for key, value in pairs(args) do&lt;br /&gt;
			local main, num = string.match(key, '^(.-)%s*(%d*)$')&lt;br /&gt;
			num = tonumber(num)&lt;br /&gt;
			-- передавать &amp;quot;параметр12&amp;quot; как &amp;quot;параметр&amp;quot; в 12-й блок, только если есть &amp;quot;параметр&amp;quot; в вызове модуля&lt;br /&gt;
			if blockNum == num and frame.args[main] then&lt;br /&gt;
				blockArgs[main] = value&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local blockText = templateFrame:expandTemplate{ title=template; args=blockArgs }&lt;br /&gt;
		table.insert(results, blockText)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    return table.concat(results)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Действует аналогично forall по числовой переменной, изменяющейся (по умолчанию, от 1) до f.args[2].&lt;br /&gt;
function p.cycle(f)&lt;br /&gt;
    local tf,ac,op=f:getParent(), {}, f.args.output or 'inline';&lt;br /&gt;
    local sep='';&lt;br /&gt;
    if op == 'newline' then&lt;br /&gt;
    	sep='\n';&lt;br /&gt;
    end&lt;br /&gt;
    for p,k in pairs(f.args) do&lt;br /&gt;
        if type(p)=='number' then&lt;br /&gt;
            if p&amp;gt;2 then ac[p-1]=k end&lt;br /&gt;
        else ac[p]=k&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local s,fh = f.args[2]:match('^%s*(%-?%d+)%s*%.%.') or 1,&lt;br /&gt;
        f.args[2]:match('%.%.%s*(%S.*)%s*$') or f.args[2] or '';&lt;br /&gt;
    fh=tonumber(fh) or fh:match('^%s*(.-)%s*$');&lt;br /&gt;
	s=tonumber(s);&lt;br /&gt;
    local acr={};&lt;br /&gt;
    if not s then error('Начало цикла «'..s..'» — не число') end&lt;br /&gt;
    local function dc(order)&lt;br /&gt;
        local r=tf:expandTemplate{ title=f.args[1]; args={s,unpack(ac)} }&lt;br /&gt;
        if order == 'desc' then&lt;br /&gt;
        	s=s-1;&lt;br /&gt;
        else&lt;br /&gt;
        	s=s+1;&lt;br /&gt;
    	end&lt;br /&gt;
        if r~='' then table.insert(acr,r); return r end&lt;br /&gt;
    end&lt;br /&gt;
    if type(fh)=='number' then&lt;br /&gt;
    	if fh &amp;gt; s then&lt;br /&gt;
        	while s&amp;lt;=fh do dc('asc') end&lt;br /&gt;
    	else&lt;br /&gt;
        	while s&amp;gt;=fh do dc('desc') end&lt;br /&gt;
    	end&lt;br /&gt;
    elseif fh~='' then&lt;br /&gt;
        while tf:expandTemplate{ title=fh; args={s,unpack(ac)} } do dc('asc') end&lt;br /&gt;
    else&lt;br /&gt;
        while dc('asc') do end&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(acr, sep)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>[[wikipedia:ru:ombox|ombox]]&gt;Wikisaurus</name></author>
	</entry>
</feed>