模組:Copied/sandbox

本页使用了标题或全文手工转换
维基百科,自由的百科全书
文档图示 模块文档[查看] [编辑] [历史] [清除缓存]


本模块用于实现{{Copied}}。详情参见模板页面的文档。

local MessageBox = require('Module:Message box')


local p = {}

local function singleText(args)
	local from_oldid = args["from_oldid"] or args["from_oldid1"] or ""
	local from = args["from"] or args["from1"] or ""
	local to = args["to"] or args["to1"] or ""
	local date = args["date"] or args["date1"] or ""
	local afd = args["afd"] or args["afd1"] or ""
	local merge = args["merge"] or args["merge1"] or ""
	local text = "页面中的文本或其他内容" 

	if not (from_oldid == "") then
		text = string.format("[%s 此版本]%s", tostring(mw.uri.fullUrl(from, {oldid=from_oldid} )), text)
	end
	text = string.format("[[%s]]的%s",from,text)

	local diff = args["diff"] or args["diff1"]
	local to_diff = args["to_diff"] or args["to_diff1"]
	local to_oldid = args["to_oldid"] or args["to_oldid1"] 

    if not (date == "") then
        if (diff) then
            text = string.format("%s在%s的[%s 这一编辑]中",text,date,diff)
        elseif (to_oldid or to_diff) then
            text = string.format("%s在%s的[%s 这一编辑]中",text,date,tostring(mw.uri.fullUrl(to, {diff=to_diff or "next", oldid = to_oldid or "prev"} )))
        else
            text = string.format("%s在%s",text,date)
        end
	end

    if (diff) and (date == "") then
		text = string.format("%s在[%s 这一编辑]中",text,diff)
	elseif (to_oldid or to_diff) then
		text = string.format("%s在[%s 这一编辑]中",text,tostring(mw.uri.fullUrl(to, {diff=to_diff or "next", oldid = to_oldid or "prev"} )))
	end

    if (merge == "是") or not (afd == "") then
		text = text .. "被合并到"
	else 
		text = text .. "被复制粘贴移动到"
	end 

	if (merge == "是") and (to == "") then
		text = string.format("%s[[%s:%s]]",text,mw.title.getCurrentTitle().nsText,mw.title.getCurrentTitle().text) --如果没有给出合并目标页面,则假定当前页面是目标。
	else 
		text = string.format("%s[[%s]]",text,to)
	end 

    if not (afd == "") then
		if (mw.ustring.match(afd, "Wikipedia:", 1 )) then --如果没有给出讨论链接,则添加“Wikipedia:頁面存廢討論”前缀
			text = string.format("经[[%s|提删讨论]],%s",afd,text)
		else
			text = string.format("经[[Wikipedia:頁面存廢討論/%s|提删讨论]],%s",afd,text)
		end
	end

	text = text .. "。" -- 第一句完成
	text = string.format("%s先前页面的[%s 历史]现[[Wikipedia:在维基百科内复制内容|归属于]]后者页面,且两个页面应当同样保留。",text,tostring(mw.uri.fullUrl(from,{action="history"}) or ""))
	return text
end

local function row(args, i)
	local text = ""
	local afd = args["afd" .. i]
	if (afd or args["merge" .. i]) then
		text = string.format("%s\n*Merged",text)
	else 
		text = string.format("%s\n*Copied",text)
	end

	local from = args["from" .. i] or ""
	text = string.format("%s [%s %s] (",text,tostring(mw.uri.fullUrl(from, {redirect = "no"} )),from)

	local from_oldid = args["from_oldid" .. i]
	if (from_oldid) then
		text = string.format("%s[%s oldid], ",text,tostring(mw.uri.fullUrl(from, {oldid = from_oldid} )))
	end
	
	local to = args["to".. i] or ""
	text = string.format("%s[%s history]) → [[%s]]",text,tostring(mw.uri.fullUrl(from, {action = "history"} )), to)
	
	local diff = args["diff" .. i]
	if (diff) then
		text = string.format("%s ([%s diff])",text,diff)
	elseif (args["to_oldid" .. i] or args["to_diff".. i]) then
		local to_diff = args["to_diff".. i] or "next"
		local to_oldid = args["to_oldid" .. i] or "prev"
		text = string.format("%s ([%s diff])",text,tostring(mw.uri.fullUrl(to, {diff=to_diff, oldid = to_oldid} )))
	end
	local date = args["date" .. i]
	if (date) then
		text = string.format("%s on %s",text,date)
	end

	if (afd) then
		if (mw.ustring.match(afd, "Wikipedia:", 1 )) then --If no venue is given add AfD prefix
			text = string.format("%s after being [[%s|nominated for deletion]]",text,afd)
		else
			text = string.format("%s after being [[Wikipedia:Articles for deletion/%s|nominated for deletion]]",text,afd)
		end
	end
	if (not (args["to_oldid" .. i] or args["to_diff".. i])) then
		text = string.format("%s[[Category:Wikipedia pages using copied template without oldid]]",text)
	end
	
	return text
end

local function list(args)
	local text = ""
	local from1 = args["from1"]
	if (from1) then --Support from1 and from in case of multiple rows
		text = string.format("%s%s",text,row(args, 1))
	else
		text = string.format("%s%s",text,row(args, ""))
	end
	local i = 2
	while i > 0 do
		if (args["from" .. i]) then 
			text = string.format("%s%s",text,row(args, i))
			i = i + 1 --Check if from(i+1) exist
		else
			i = - 1 --Break if fromi doesn't exist
		end
	end
	return text
end
	
local function multiText(args)
	local pageType
	if (mw.title.getCurrentTitle():inNamespace(1)) then
		pageType = "article"
	else
		pageType = "page"
	end
	
	local historyList = list(args)
	if (args["collapse"] == 'yes') then
		local collapsedText = '<table style="width:100%%; background: transparent;" class="collapsible collapsed">\n<tr><th>Copied pages:</th></tr>\n<tr><td> %s </td></tr></table>'
		historyList = string.format(collapsedText, historyList)
	end

	local text = "Text has been copied to or from this %s; see the list below. The source pages now serve to [[WP:Copying within Wikipedia|provide attribution]] for the content in the destination pages and must not be deleted so long as the copies exist. For attribution and to access older versions of the copied text, please see the history links below. %s"
	text = string.format(text, pageType, historyList)
	return text
end

local function categories(args,multiUsed)
	local to_oldid = args["to_oldid"] or args["to_diff"] or args["diff"] or args["to_oldid1"] or args["to_diff1"] or args["diff1"]
	local from_oldid = args["from_oldid"] or args["from_oldid1"]
	local text = "[[Category:Wikipedia pages using copied template]]" 
	if ((not from_oldid) or (not to_oldid)) and not multiUsed then
		text = text .. "[[Category:Wikipedia pages using copied template without oldid]]"
	end
	return text
end

local function BannerText(args)
	--Checks if there are multiple rows
	local text
	local from2 = args["from2"]
	if (from2) then
		text = multiText(args) .. categories(args,true)
	else
		text = singleText(args) .. categories(args,false)
	end
	return text
end

local function renderBanner(args)
	return MessageBox.main('tmbox', {
		class = "copiednotice",
		small = args["small"],
		image = '[[File:Splitsection.svg|50px]]',
		text = BannerText(args)
	})
end

function p.main(frame)
	local getArgs = require('Module:Arguments').getArgs
	local args = getArgs(frame)
	return renderBanner(args)
end

return p