跳转到内容
打开/关闭菜单
  • 451 条目
  • 808 文件
  • 22 用户
  • 9259 编辑
Blockland Wiki
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

模块:Infobox settlement:修订间差异

来自Blockland Wiki
无编辑摘要
无编辑摘要
第6行: 第6行:
end
end


-- 构建分组子标题行 (调整了背景色以模仿维基百科样式)
-- 构建分组子标题行 (浅灰色背景,靠左对齐)
local function buildSubheader(label)
local function buildSubheader(label)
     if hasValue(label) then
     if hasValue(label) then
第12行: 第12行:
         row:tag('th')
         row:tag('th')
           :attr('colspan', '2')
           :attr('colspan', '2')
           :css('background', '#f0f0f0') -- 更改为浅灰色
           :css('background', '#f0f0f0') -- 浅灰色
           :css('text-align', 'left')   -- 标签靠左
           :css('text-align', 'left')
           :css('padding-left', '0.4em')
           :css('padding-left', '0.4em')
           :css('font-weight', 'bold')
           :css('font-weight', 'bold')
第26行: 第26行:
     if hasValue(data) then
     if hasValue(data) then
         local row = mw.html.create('tr')
         local row = mw.html.create('tr')
         row:tag('th'):css('width', '30%'):css('text-align', 'left'):wikitext(label)
        -- 使用 vertical-align:top 确保长短不一的内容对齐
         row:tag('th'):css('width', '30%'):css('text-align', 'left'):css('vertical-align', 'top'):wikitext(label)
         row:tag('td'):wikitext(data)
         row:tag('td'):wikitext(data)
         return tostring(row)
         return tostring(row)
第41行: 第42行:
       :css('font-size', '90%')
       :css('font-size', '90%')


     -- 标题 和 副标题
     -- 1. 标题 和 副标题
     local title = args.name or mw.title.getCurrentTitle().text
     local title = args.name or mw.title.getCurrentTitle().text
     local title_cell = root:tag('tr'):tag('th')
     local title_cell = root:tag('tr'):tag('th')
第53行: 第54行:
     end
     end


     -- 行政区分类子标题 (模仿维基百科样式)
     -- 2. 行政区分类子标题 (模仿维基百科样式)
     if hasValue(args.type) then
     if hasValue(args.type) then
         local type_row = mw.html.create('tr')
         local type_row = mw.html.create('tr')
第65行: 第66行:
     end
     end


     -- 图片和图注
     -- 3. 图片和图注
     if hasValue(args.image) then
     if hasValue(args.image) then
         local image_cell = root:tag('tr'):tag('td')
         local image_cell = root:tag('tr'):tag('td')
第77行: 第78行:
     end
     end
      
      
     -- 坐标行
     -- 4. 坐标行 (模仿维基百科样式)
     if hasValue(args.lon) or hasValue(args.lat) then
     if hasValue(args.lon) or hasValue(args.lat) then
        -- 将坐标直接放在图片下方,不使用子标题或普通行,模仿维基样式
         local coord_row = mw.html.create('tr')
         local coord_row = mw.html.create('tr')
         coord_row:tag('td')
         coord_row:tag('td')
第89行: 第89行:
     end
     end
      
      
     -- 开始构建数据部分
     -- 5. 开始构建数据行
     local rows = {}
     local rows = {}
      
      
     -- 地理位置
     -- 【已恢复】地理位置与行政部分
     table.insert(rows, buildRow('国家', args.country))
     table.insert(rows, buildRow('国家', args.country))
     table.insert(rows, buildRow('自治区', args.province)) -- 标签改为更通用的“自治区”或“省”
     table.insert(rows, buildRow('省', args.province))
     table.insert(rows, buildRow('省', args.province2))    -- 添加一个额外的省份/区域字段
     table.insert(rows, buildRow('设立', args.established))
     table.insert(rows, buildRow('市长', args.mayor))
      
      
     -- 人口信息
     -- 人口信息
     local pop_header_text = '人口'
     if hasValue(args.population) then
    if hasValue(args.population_as_of) then
        local pop_header_text = '人口'
        pop_header_text = pop_header_text .. ' (' .. args.population_as_of .. ')'
        if hasValue(args.population_as_of) then
            pop_header_text = pop_header_text .. ' (' .. args.population_as_of .. ')'
        end
        table.insert(rows, buildSubheader(pop_header_text))
        table.insert(rows, buildRow(' • 总计', args.population .. '人'))
     end
     end
    table.insert(rows, buildSubheader(pop_header_text))
    table.insert(rows, buildRow(' • 总计', args.population))
      
      
     -- 时区信息
     -- 时区信息

2025年11月1日 (六) 17:24的版本

此模块的文档可以在模块:Infobox settlement/doc创建

local p = {}

-- 辅助函数:检查参数是否存在且不为空
local function hasValue(arg)
    return arg and arg:match('%S')
end

-- 构建分组子标题行 (浅灰色背景,靠左对齐)
local function buildSubheader(label)
    if hasValue(label) then
        local row = mw.html.create('tr')
        row:tag('th')
           :attr('colspan', '2')
           :css('background', '#f0f0f0') -- 浅灰色
           :css('text-align', 'left')
           :css('padding-left', '0.4em')
           :css('font-weight', 'bold')
           :wikitext(label)
        return tostring(row)
    end
    return ''
end

-- 构建信息框的单行数据(标签+数据)
local function buildRow(label, data)
    if hasValue(data) then
        local row = mw.html.create('tr')
        -- 使用 vertical-align:top 确保长短不一的内容对齐
        row:tag('th'):css('width', '30%'):css('text-align', 'left'):css('vertical-align', 'top'):wikitext(label)
        row:tag('td'):wikitext(data)
        return tostring(row)
    end
    return ''
end

-- 主函数,生成整个信息框
function p.main(frame)
    local args = frame:getParent().args
    local root = mw.html.create('table')
    root:addClass('infobox')
       :css('width', '300px')
       :css('font-size', '90%')

    -- 1. 标题 和 副标题
    local title = args.name or mw.title.getCurrentTitle().text
    local title_cell = root:tag('tr'):tag('th')
        :attr('colspan', '2')
        :css('text-align', 'center')
        :css('font-size', '125%')
        :css('padding', '0.2em')
        :wikitext(title)
    if hasValue(args.native_name) then
        title_cell:wikitext('<br /><span style="font-size:85%; font-weight:normal;">' .. args.native_name .. '</span>')
    end

    -- 2. 行政区分类子标题 (模仿维基百科样式)
    if hasValue(args.type) then
        local type_row = mw.html.create('tr')
        type_row:tag('th')
            :attr('colspan', '2')
            :css('background', '#cddeff') -- 淡蓝色背景
            :css('text-align', 'center')
            :css('font-weight', 'bold')
            :wikitext(args.type)
        root:wikitext(tostring(type_row))
    end

    -- 3. 图片和图注
    if hasValue(args.image) then
        local image_cell = root:tag('tr'):tag('td')
            :attr('colspan', '2')
            :css('text-align', 'center')
        local image_wikitext = '[[File:' .. args.image .. '|290x220px|frameless]]'
        if hasValue(args.image_caption) then
            image_wikitext = image_wikitext .. '<br /><span style="font-size:90%;">' .. args.image_caption .. '</span>'
        end
        image_cell:wikitext(image_wikitext)
    end
    
    -- 4. 坐标行 (模仿维基百科样式)
    if hasValue(args.lon) or hasValue(args.lat) then
        local coord_row = mw.html.create('tr')
        coord_row:tag('td')
            :attr('colspan', '2')
            :css('text-align', 'center')
            :css('font-size', '95%')
            :wikitext('坐标:' .. (args.lat or '') .. ' ' .. (args.lon or ''))
        root:wikitext(tostring(coord_row))
    end
    
    -- 5. 开始构建数据行
    local rows = {}
    
    -- 【已恢复】地理位置与行政部分
    table.insert(rows, buildRow('国家', args.country))
    table.insert(rows, buildRow('省', args.province))
    table.insert(rows, buildRow('设立', args.established))
    table.insert(rows, buildRow('市长', args.mayor))
    
    -- 人口信息
    if hasValue(args.population) then
        local pop_header_text = '人口'
        if hasValue(args.population_as_of) then
            pop_header_text = pop_header_text .. ' (' .. args.population_as_of .. ')'
        end
        table.insert(rows, buildSubheader(pop_header_text))
        table.insert(rows, buildRow(' • 总计', args.population .. '人'))
    end
    
    -- 时区信息
    if hasValue(args.timezone) then
        table.insert(rows, buildSubheader('时区'))
        local tz_data = args.timezone
        if hasValue(args.utc_offset) then
            tz_data = tz_data .. ' (' .. args.utc_offset .. ')'
        end
        table.insert(rows, buildRow(' ', tz_data)) -- 标签留空,让内容靠左
        
        if hasValue(args.timezone_DST) then
            local tz_dst_data = args.timezone_DST
            if hasValue(args.utc_offset_DST) then
                tz_dst_data = tz_dst_data .. ' (' .. args.utc_offset_DST .. ')'
            end
            table.insert(rows, buildRow(' • 夏时制', tz_dst_data))
        end
    end

    -- 将所有行添加到表格中
    root:wikitext(table.concat(rows))

    return tostring(root)
end

return p