<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://vitanostra.ru:80/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ADemo</id>
	<title>Модуль:Demo - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://vitanostra.ru:80/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ADemo"/>
	<link rel="alternate" type="text/html" href="http://vitanostra.ru:80/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Demo&amp;action=history"/>
	<updated>2026-05-09T21:26:43Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>http://vitanostra.ru:80/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Demo&amp;diff=232&amp;oldid=prev</id>
		<title>Smoren: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="http://vitanostra.ru:80/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Demo&amp;diff=232&amp;oldid=prev"/>
		<updated>2024-02-22T21:26:55Z</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;Версия от 00:26, 23 февраля 2024&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>Smoren</name></author>
	</entry>
	<entry>
		<id>http://vitanostra.ru:80/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Demo&amp;diff=231&amp;oldid=prev</id>
		<title>ru&gt;QBA-bot: Защитил страницу Модуль:Demo: критический шаблон или модуль (каскадная защита) ([Редактирование=только автоподтверждённые] (бессрочно) [Переименование=только автоподтверждённые] (бессрочно))</title>
		<link rel="alternate" type="text/html" href="http://vitanostra.ru:80/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Demo&amp;diff=231&amp;oldid=prev"/>
		<updated>2019-04-25T13:41:01Z</updated>

		<summary type="html">&lt;p&gt;Защитил страницу &lt;a href=&quot;/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Demo&quot; title=&quot;Модуль:Demo&quot;&gt;Модуль:Demo&lt;/a&gt;: критический шаблон или модуль (каскадная защита) ([Редактирование=только автоподтверждённые] (бессрочно) [Переименование=только автоподтверждённые] (бессрочно))&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;
--creates a frame object that cannot access any of the parent's args&lt;br /&gt;
--unless a table containing a list keys of not to inherit is provided&lt;br /&gt;
function disinherit(frame, onlyTheseKeys)&lt;br /&gt;
	local parent = frame:getParent() or frame&lt;br /&gt;
	local orphan = parent:newChild{}&lt;br /&gt;
	orphan.getParent = parent.getParent --returns nil&lt;br /&gt;
	orphan.args = {}&lt;br /&gt;
	if onlyTheseKeys then&lt;br /&gt;
		local family = {parent, frame}&lt;br /&gt;
		for f = 1, 2 do&lt;br /&gt;
			for k, v in pairs(family[f] and family[f].args or {}) do&lt;br /&gt;
				orphan.args[k] = orphan.args[k] or v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		parent.args = mw.clone(orphan.args)&lt;br /&gt;
		setmetatable(orphan.args, nil)&lt;br /&gt;
		for _, k in ipairs(onlyTheseKeys) do&lt;br /&gt;
			rawset(orphan.args, k, nil)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return orphan, parent&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.get(frame, arg, passArgs)&lt;br /&gt;
	local orphan, frame = disinherit(frame, passArgs and {arg or 1})&lt;br /&gt;
	local code, noWiki, preserve = frame.args[arg or 1] or ''&lt;br /&gt;
	local kill_categories = not frame.args.save_categories&lt;br /&gt;
	local tag, sep&lt;br /&gt;
	if code:match'nowiki' then&lt;br /&gt;
		local placeholder, preserve = ('6'):char(), {}&lt;br /&gt;
		-- We replace &amp;quot;&amp;amp;#125;%-&amp;quot; and &amp;quot;%-&amp;amp;#123;&amp;quot; because of some server bug probably connected to&lt;br /&gt;
		-- [[mw:Parsoid/MediaWiki DOM spec/Language conversion blocks]] and leading to&lt;br /&gt;
		-- =mw.text.unstripNoWiki(mw.getCurrentFrame():preprocess('&amp;lt;nowiki&amp;gt;}-&amp;lt;/nowiki&amp;gt;'))&lt;br /&gt;
		-- outputting '&amp;amp;#125;-' instead of &amp;quot;}-&amp;quot;, while it's ok with &amp;quot;&amp;lt;nowiki&amp;gt;} -&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
		code = mw.text.unstripNoWiki(code)&lt;br /&gt;
			:gsub('&amp;amp;lt;', '&amp;lt;')&lt;br /&gt;
			:gsub('&amp;amp;gt;', '&amp;gt;')&lt;br /&gt;
			:gsub('&amp;amp;#125;%-', '}-')&lt;br /&gt;
			:gsub('%-&amp;amp;#123;', '-{')&lt;br /&gt;
		if (mw.text.trim(code):match'\n') then&lt;br /&gt;
			tag = 'pre'&lt;br /&gt;
			sep = ''&lt;br /&gt;
		end&lt;br /&gt;
		noWiki = code:gsub('%%', placeholder)&lt;br /&gt;
		for k in noWiki:gmatch('&amp;amp;.-;') do&lt;br /&gt;
			table.insert(preserve, (k:gsub('&amp;amp;', '&amp;amp;amp;')))&lt;br /&gt;
			noWiki = noWiki:gsub('(&amp;amp;.-;)', '%%%s')&lt;br /&gt;
		end&lt;br /&gt;
		noWiki = mw.text.nowiki(noWiki):format(unpack(preserve)):gsub(placeholder, '%%')&lt;br /&gt;
	end&lt;br /&gt;
	return {&lt;br /&gt;
		source = noWiki or code,&lt;br /&gt;
		output = orphan:preprocess(code)&lt;br /&gt;
			:gsub(kill_categories and '%[%[Категория:.-%]%]' or '', '')&lt;br /&gt;
			:gsub(kill_categories and '%[%[К:.-%]%]' or '', '')&lt;br /&gt;
			:gsub(kill_categories and '%[%[Category:.-%]%]' or '', ''),&lt;br /&gt;
		frame = frame,&lt;br /&gt;
		tag = tag,&lt;br /&gt;
		sep = sep&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame, demoTable)&lt;br /&gt;
	local show = demoTable or p.get(frame)&lt;br /&gt;
	local args = show.frame.args&lt;br /&gt;
	local yesno = require('Module:Yesno')&lt;br /&gt;
	args.reverse = yesno(args.reverse, false)&lt;br /&gt;
    args.tag = args.tag or show.tag or &amp;quot;code&amp;quot;&lt;br /&gt;
    args.sep = args.sep or args.br or show.sep&lt;br /&gt;
	args.sep = tonumber(args.sep) and ('&amp;lt;br&amp;gt;'):rep(args.sep or 0) or args.sep or (args.tag == 'pre' and '' or ' → ')&lt;br /&gt;
	if show[args.result_arg] then&lt;br /&gt;
		return show[args.result_arg]&lt;br /&gt;
	end&lt;br /&gt;
	return args.reverse&lt;br /&gt;
		and string.format('%s%s&amp;lt;%s%s&amp;gt;%s&amp;lt;/%s&amp;gt;', show.output, args.sep, args.tag, args.style and string.format(&amp;quot; style='%s'&amp;quot;, args.style) or '', show.source, args.tag)&lt;br /&gt;
		or string.format('&amp;lt;%s%s&amp;gt;%s&amp;lt;/%s&amp;gt;%s%s', args.tag, args.style and string.format(&amp;quot; style='%s'&amp;quot;, args.style) or '', show.source, args.tag, args.sep, show.output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--passing of args into other module without preprocessing&lt;br /&gt;
function p.module(frame)&lt;br /&gt;
	local orphan, frame = disinherit(frame, {&lt;br /&gt;
		'demo_template',&lt;br /&gt;
		'demo_module',&lt;br /&gt;
		'demo_module_func',&lt;br /&gt;
		'demo_main',&lt;br /&gt;
		'demo_br',&lt;br /&gt;
		'demo_result_arg',&lt;br /&gt;
		'demo_save_categories'&lt;br /&gt;
	})&lt;br /&gt;
	local template = frame.args.demo_template and 'Template:'..frame.args.demo_template&lt;br /&gt;
	local demoFunc = frame.args.demo_module_func or 'main\n'&lt;br /&gt;
	local demoModule = require('Module:' .. frame.args.demo_module)[demoFunc:match('^%s*(.-)%s*$')]&lt;br /&gt;
	frame.args.br, frame.args.result_arg = frame.args.demo_br or frame.args.demo_sep, frame.args.demo_result_arg&lt;br /&gt;
	local kill_categories = not save_categories&lt;br /&gt;
	if demoModule then&lt;br /&gt;
		local named = {insert = function(self, ...) table.insert(self, ...) return self end}&lt;br /&gt;
		local source = {insert = named.insert, '{{', frame.args.demo_template or frame.args.demo_module, '\n'}&lt;br /&gt;
		if not template then&lt;br /&gt;
			source:insert(2, '#invoke:'):insert(4, '|'):insert(5, demoFunc)&lt;br /&gt;
		end&lt;br /&gt;
		local insertNamed = #source + 1&lt;br /&gt;
		for k, v in pairs(orphan.args) do&lt;br /&gt;
			local nan, insert = type(k) ~= 'number', {v}&lt;br /&gt;
			local target = nan and named or source&lt;br /&gt;
			target:insert'|'&lt;br /&gt;
			if nan then&lt;br /&gt;
				target:insert(k):insert'=':insert'\n'&lt;br /&gt;
				table.insert(insert, 1, #target)&lt;br /&gt;
			end&lt;br /&gt;
			target:insert(unpack(insert))&lt;br /&gt;
			local nowiki = v:match('nowiki')&lt;br /&gt;
			if nowiki or v:match('{{.-}}') then&lt;br /&gt;
				orphan.args[k] = frame:preprocess(nowiki and mw.text.unstripNoWiki(v) or v)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		source:insert'}}'&lt;br /&gt;
		table.insert(source, insertNamed, table.concat(named))&lt;br /&gt;
		return p.main(orphan, {&lt;br /&gt;
			source = mw.text.encode(table.concat(source), &amp;quot;&amp;lt;&amp;gt;'|=~&amp;quot;),&lt;br /&gt;
			output = tostring(demoModule(orphan)):gsub(kill_categories and '%[%[Категория:.-%]%]' or '', ''):gsub(kill_categories and '%[%[К:.-%]%]' or '', ''):gsub(kill_categories and '%[%[Category:.-%]%]' or '', ''),&lt;br /&gt;
			frame = frame&lt;br /&gt;
		})&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;ERROR: Invalid module function: &amp;quot;..demoFunc&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>ru&gt;QBA-bot</name></author>
	</entry>
</feed>