跳转到内容
打开/关闭菜单
  • 5 条目
  • 6 文件
  • 13 用户
  • 665 编辑
久远澪Wiki
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

Module:TextEffect:修订间差异

来自久远澪Wiki
"新增文字背景/文字描边模板与文字效果样式"
 
"文字背景支持多段文字,各段可独立设置效果/颜色/透明度"
 
第2行: 第2行:
-- 解析文字背景效果串(如「毛玻璃+遮罩」「阴影 + 遮罩」「遮罩+毛玻璃」),
-- 解析文字背景效果串(如「毛玻璃+遮罩」「阴影 + 遮罩」「遮罩+毛玻璃」),
-- 顺序无关、容忍空格,输出 CSS 类名(.text-bg-*)。
-- 顺序无关、容忍空格,输出 CSS 类名(.text-bg-*)。
-- 用法:{{#invoke:TextEffect|class|毛玻璃+遮罩+阴影}}
--
-- 函数:
--  p.class(frame)  输出类名:{{#invoke:TextEffect|class|毛玻璃+遮罩+阴影}}
--  p.text(frame)  渲染多段文字背景(由 Template:文字背景 调用):
--                  位置1=默认效果,位置2..N=各段内容;
--                  第 N 段(位置 N+1)可用 效果N/颜色N/浅色N/深色N/透明度N 覆盖。
--                  兼容单段命名用法:效果=...|内容=...
local p = {}
local p = {}


第13行: 第19行:
}
}


-- 输出类名(含 .text-bg 前缀;去重、排序稳定)
-- 效果串 → 类名串(含 .text-bg 前缀;去重、排序稳定)
function p.class(frame)
local function buildClasses(raw)
local raw = frame.args[1] or frame.args['效果'] or frame.args['effect'] or ''
if not raw then raw = '' end
local seen = {}
local seen = {}
for part in raw:gmatch('[^%+]+') do
for part in raw:gmatch('[^%+]+') do
第30行: 第36行:
table.sort(out)
table.sort(out)
return table.concat(out, ' ')
return table.concat(out, ' ')
end
-- 输出类名
function p.class(frame)
local raw = frame.args[1] or frame.args['效果'] or frame.args['effect'] or ''
return buildClasses(raw)
end
-- 渲染多段文字背景(供模板使用,取父帧全部参数)
function p.text(frame)
local args = (frame:getParent() and frame:getParent().args) or frame.args
local defaultEffect = args['效果'] or args[1] or ''
-- 收集段:位置 2..N 为各段内容;若无位置段但给了「内容」则作为单段
local segs = {}
local i = 2
while args[i] and args[i] ~= '' do
table.insert(segs, { content = args[i], idx = i })
i = i + 1
end
if #segs == 0 and args['内容'] and args['内容'] ~= '' then
table.insert(segs, { content = args['内容'], idx = 0 })
end
if #segs == 0 then
return ''
end
local out = {}
for _, seg in ipairs(segs) do
-- 段号:位置 N+1 → 第 N 段(覆盖参数为 效果N 等);命名「内容」段无编号
local n = seg.idx >= 2 and (seg.idx - 1) or 0
local getN = function(prefix)
if n > 0 then
local v = args[prefix .. n]
if v and v ~= '' then return v end
end
return args[prefix]
end
local effect = getN('效果')
if not effect or effect == '' then
effect = defaultEffect
end
local cls = buildClasses(effect)
local style = {}
local function add(var, val)
if val and val ~= '' then
table.insert(style, var .. ':' .. val .. ';')
end
end
add('--text-bg-color', getN('颜色'))
add('--text-bg-color-light', getN('浅色'))
add('--text-bg-color-night', getN('深色'))
add('--text-bg-opacity', getN('透明度'))
local span = '<span class="' .. cls .. '"'
if #style > 0 then
span = span .. ' style="' .. table.concat(style, '') .. '"'
end
span = span .. '>' .. seg.content .. '</span>'
table.insert(out, span)
end
return table.concat(out, '<br/>')
end
end


return p
return p