<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://blockland.wiki/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3ABackground</id>
	<title>模块:Background - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://blockland.wiki/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3ABackground"/>
	<link rel="alternate" type="text/html" href="https://blockland.wiki/index.php?title=%E6%A8%A1%E5%9D%97:Background&amp;action=history"/>
	<updated>2026-10-19T07:10:50Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://blockland.wiki/index.php?title=%E6%A8%A1%E5%9D%97:Background&amp;diff=8735&amp;oldid=prev</id>
		<title>2026年10月9日 (五) 15:13 KK</title>
		<link rel="alternate" type="text/html" href="https://blockland.wiki/index.php?title=%E6%A8%A1%E5%9D%97:Background&amp;diff=8735&amp;oldid=prev"/>
		<updated>2026-10-09T15:13:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://blockland.wiki/index.php?title=%E6%A8%A1%E5%9D%97:Background&amp;amp;diff=8735&amp;amp;oldid=8731&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>KK</name></author>
	</entry>
	<entry>
		<id>https://blockland.wiki/index.php?title=%E6%A8%A1%E5%9D%97:Background&amp;diff=8731&amp;oldid=prev</id>
		<title>KK：​创建页面，内容为“ local p = {}  -- 清理参数 local function trim(value) 	return mw.text.trim(tostring(value or &quot;&quot;)) end  -- 透明度限制在 0 到 1 local function opacity(value, default) 	local number = tonumber(trim(value))  	if not number then 		return default 	end  	number = math.max(0, math.min(1, number)) 	return tostring(number) end  -- 只接受安全、常见的图片定位写法 local validPositions = { 	center = true, 	top = true, 	bottom = true, 	left = true,…”</title>
		<link rel="alternate" type="text/html" href="https://blockland.wiki/index.php?title=%E6%A8%A1%E5%9D%97:Background&amp;diff=8731&amp;oldid=prev"/>
		<updated>2026-10-09T14:34:04Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“ local p = {}  -- 清理参数 local function trim(value) 	return mw.text.trim(tostring(value or &amp;quot;&amp;quot;)) end  -- 透明度限制在 0 到 1 local function opacity(value, default) 	local number = tonumber(trim(value))  	if not number then 		return default 	end  	number = math.max(0, math.min(1, number)) 	return tostring(number) end  -- 只接受安全、常见的图片定位写法 local validPositions = { 	center = true, 	top = true, 	bottom = true, 	left = true,…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- 清理参数&lt;br /&gt;
local function trim(value)&lt;br /&gt;
	return mw.text.trim(tostring(value or &amp;quot;&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 透明度限制在 0 到 1&lt;br /&gt;
local function opacity(value, default)&lt;br /&gt;
	local number = tonumber(trim(value))&lt;br /&gt;
&lt;br /&gt;
	if not number then&lt;br /&gt;
		return default&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	number = math.max(0, math.min(1, number))&lt;br /&gt;
	return tostring(number)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 只接受安全、常见的图片定位写法&lt;br /&gt;
local validPositions = {&lt;br /&gt;
	center = true,&lt;br /&gt;
	top = true,&lt;br /&gt;
	bottom = true,&lt;br /&gt;
	left = true,&lt;br /&gt;
	right = true,&lt;br /&gt;
	[&amp;quot;center top&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;center bottom&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;left center&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;right center&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;left top&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;right top&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;left bottom&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;right bottom&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;center center&amp;quot;] = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function validPositionToken(token)&lt;br /&gt;
	if token:match(&amp;quot;^%-?%d+%.?%d*%%$&amp;quot;) then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if token:match(&amp;quot;^%-?%d+%.?%d*px$&amp;quot;) then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tonumber(token) == 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function position(value)&lt;br /&gt;
	value = trim(value)&lt;br /&gt;
&lt;br /&gt;
	if validPositions[value] then&lt;br /&gt;
		return value&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local x, y = value:match(&amp;quot;^(%S+)%s+(%S+)$&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	if x and y&lt;br /&gt;
		and validPositionToken(x)&lt;br /&gt;
		and validPositionToken(y) then&lt;br /&gt;
		return x .. &amp;quot; &amp;quot; .. y&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return &amp;quot;center center&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 限制颜色格式，避免把任意内容拼入 CSS&lt;br /&gt;
local colorNames = {&lt;br /&gt;
	white = true,&lt;br /&gt;
	black = true,&lt;br /&gt;
	transparent = true,&lt;br /&gt;
	red = true,&lt;br /&gt;
	blue = true,&lt;br /&gt;
	green = true,&lt;br /&gt;
	yellow = true,&lt;br /&gt;
	gray = true,&lt;br /&gt;
	grey = true,&lt;br /&gt;
	navy = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function safeColor(value)&lt;br /&gt;
	value = trim(value)&lt;br /&gt;
&lt;br /&gt;
	if value:match(&amp;quot;^#%x%x%x$&amp;quot;) or&lt;br /&gt;
		value:match(&amp;quot;^#%x%x%x%x%x%x$&amp;quot;) then&lt;br /&gt;
		return value&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local lower = value:lower()&lt;br /&gt;
&lt;br /&gt;
	if colorNames[lower] then&lt;br /&gt;
		return lower&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 解析外部图片 URL 或 Wiki 文件名&lt;br /&gt;
local function getImageSource(frame, image)&lt;br /&gt;
	image = trim(image)&lt;br /&gt;
&lt;br /&gt;
	if image == &amp;quot;&amp;quot; then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- 允许 HTTPS、HTTP 或协议相对的外链&lt;br /&gt;
	if image:match(&amp;quot;^https?://&amp;quot;) or image:match(&amp;quot;^//&amp;quot;) then&lt;br /&gt;
		return image&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- 内部文件：支持 File:、Image:、文件: 前缀&lt;br /&gt;
	image = image:gsub(&amp;quot;^[Ff]ile:&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	image = image:gsub(&amp;quot;^[Ii]mage:&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	image = image:gsub(&amp;quot;^文件:&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	local ok, result = pcall(function()&lt;br /&gt;
		return frame:callParserFunction(&amp;quot;filepath&amp;quot;, image)&lt;br /&gt;
	end)&lt;br /&gt;
&lt;br /&gt;
	if ok and result and result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		return result&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local parent = frame:getParent()&lt;br /&gt;
	local args = (parent or frame).args&lt;br /&gt;
&lt;br /&gt;
	local image = args[&amp;quot;图片&amp;quot;] or args[&amp;quot;url&amp;quot;] or args[1] or &amp;quot;&amp;quot;&lt;br /&gt;
	local src = getImageSource(frame, image)&lt;br /&gt;
&lt;br /&gt;
	local imageOpacity = opacity(args[&amp;quot;透明度&amp;quot;] or args[&amp;quot;opacity&amp;quot;], 1)&lt;br /&gt;
	local imagePosition = position(args[&amp;quot;位置&amp;quot;] or args[&amp;quot;position&amp;quot;] or &amp;quot;center&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	local baseColor = safeColor(args[&amp;quot;背景色&amp;quot;] or args[&amp;quot;颜色&amp;quot;] or args[&amp;quot;color&amp;quot;])&lt;br /&gt;
	local shadeColor = safeColor(args[&amp;quot;遮罩颜色&amp;quot;] or args[&amp;quot;shadeColor&amp;quot;])&lt;br /&gt;
	local shadeOpacity = opacity(args[&amp;quot;遮罩透明度&amp;quot;] or args[&amp;quot;shade&amp;quot;], 0)&lt;br /&gt;
&lt;br /&gt;
	-- 无图片、无背景色、无有效遮罩时不输出&lt;br /&gt;
	if src == &amp;quot;&amp;quot; and baseColor == &amp;quot;&amp;quot; then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- 最外层位于负层级；不需要 pointer-events&lt;br /&gt;
	local rootStyle =&lt;br /&gt;
		&amp;quot;position:fixed;&amp;quot; ..&lt;br /&gt;
		&amp;quot;top:0;&amp;quot; ..&lt;br /&gt;
		&amp;quot;left:0;&amp;quot; ..&lt;br /&gt;
		&amp;quot;width:100%;&amp;quot; ..&lt;br /&gt;
		&amp;quot;height:100%;&amp;quot; ..&lt;br /&gt;
		&amp;quot;z-index:-1;&amp;quot; ..&lt;br /&gt;
		&amp;quot;overflow:hidden;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	if baseColor ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		rootStyle = rootStyle .. &amp;quot;background-color:&amp;quot; .. baseColor .. &amp;quot;;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;bl-page-bg-layer&amp;quot;)&lt;br /&gt;
		:attr(&amp;quot;aria-hidden&amp;quot;, &amp;quot;true&amp;quot;)&lt;br /&gt;
		:cssText(rootStyle)&lt;br /&gt;
&lt;br /&gt;
	-- 图片层&lt;br /&gt;
	if src ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		local img = mw.html.create(&amp;quot;img&amp;quot;)&lt;br /&gt;
			:addClass(&amp;quot;bl-page-bg-image&amp;quot;)&lt;br /&gt;
			:attr(&amp;quot;src&amp;quot;, src)&lt;br /&gt;
			:attr(&amp;quot;alt&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			:cssText(&lt;br /&gt;
				&amp;quot;position:absolute;&amp;quot; ..&lt;br /&gt;
				&amp;quot;top:0;&amp;quot; ..&lt;br /&gt;
				&amp;quot;left:0;&amp;quot; ..&lt;br /&gt;
				&amp;quot;width:100%;&amp;quot; ..&lt;br /&gt;
				&amp;quot;height:100%;&amp;quot; ..&lt;br /&gt;
				&amp;quot;object-fit:cover;&amp;quot; ..&lt;br /&gt;
				&amp;quot;object-position:&amp;quot; .. imagePosition .. &amp;quot;;&amp;quot; ..&lt;br /&gt;
				&amp;quot;opacity:&amp;quot; .. imageOpacity .. &amp;quot;;&amp;quot;&lt;br /&gt;
			)&lt;br /&gt;
&lt;br /&gt;
		root:wikitext(tostring(img))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- 可选颜色遮罩&lt;br /&gt;
	if shadeColor ~= &amp;quot;&amp;quot; and tonumber(shadeOpacity) &amp;gt; 0 then&lt;br /&gt;
		local shade = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
			:addClass(&amp;quot;bl-page-bg-shade&amp;quot;)&lt;br /&gt;
			:cssText(&lt;br /&gt;
				&amp;quot;position:absolute;&amp;quot; ..&lt;br /&gt;
				&amp;quot;top:0;&amp;quot; ..&lt;br /&gt;
				&amp;quot;left:0;&amp;quot; ..&lt;br /&gt;
				&amp;quot;width:100%;&amp;quot; ..&lt;br /&gt;
				&amp;quot;height:100%;&amp;quot; ..&lt;br /&gt;
				&amp;quot;background-color:&amp;quot; .. shadeColor .. &amp;quot;;&amp;quot; ..&lt;br /&gt;
				&amp;quot;opacity:&amp;quot; .. shadeOpacity .. &amp;quot;;&amp;quot;&lt;br /&gt;
			)&lt;br /&gt;
&lt;br /&gt;
		root:wikitext(tostring(shade))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>KK</name></author>
	</entry>
</feed>