置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:Sandbox/Chi ZJ2/模块:UmaList

猛汉♂百科,万男皆可猛的百科全书!转载请标注来源页面的网页链接,并声明引自猛汉百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
local data_module = require("Module:Sandbox/Chi ZJ2/模块:UmaList/data")
nameList = data_module.data

sortTags = {}  -- sortTag,起到提示并分隔某种排序方式中的不同分类的作用
function templatePlate(text)    --  相当于{{Plate}},用于显示sortTag
    return "<span style=\"background:#E6F6E6;border-bottom:#C0ECC0 solid 2px;color:inherit\">&nbsp;'''" .. text .. "'''&nbsp;</span>"
end


-- 【拼音排序】,sortTag为拼音首字母
local pinyinData = mw.loadData("Module:拼音/Data")
function getPinyin(text)
    return pinyinData[mw.ustring.sub(text,1,1)]
end
function sortByPinyin(arr)
    table.sort(arr, function(name1, name2)
        --return name1[5] < name2[5]
        local i = 1
        while( getPinyin(mw.ustring.sub(name1[1],i,i)) ~= nil and getPinyin(mw.ustring.sub(name2[1],i,i)) ~= nil )
        do
            local a, b = string.sub(getPinyin(name1[1]),1,1), string.sub(getPinyin(name2[1]),1,1)
            if a ~= b then
                return a < b
            end
            i = i + 1
        end
    end)
    
    sortTags = {}
    local nowFirst = ""  -- 当前的拼音首字母
    for i=1, #arr do 
        if nowFirst ~= string.sub(getPinyin(arr[i][1]),1,1) then  --  发生变化则代表以某首字母开头的名字已列完,此时会添加一个sortTag
            nowFirst = string.sub(getPinyin(arr[i][1]),1,1)
            sortTags[i] = templatePlate(string.upper(nowFirst))
        end
    end
    return arr
end

function output(type)
    local res = "<div class=\"Tab\"><div class=\"TabLabelText\">" .. type .. "</div><div class=\"TabContentText\">"
    for i=1, #nameList do
        -- 插入sortTag
        if sortTags[i] ~= nil then
            res = res .. sortTags[i]
        end

        -- 插入角色名
        local link
        if nameList[i][2] == "" then
            link = nameList[i][1]
        else
            link = nameList[i][2]
        end
        res = res .. "[[" ..link .. "|" .. nameList[i][1] .. "]]"

        if i ~= #nameList then
            res = res .. " • "
        end
    end
    return res .. "</div></div>"
end

local f = {}
local code = "<div class=\"umaList\"><div class=\"Tabs\" data-label-padding=\"0\" data-label-border-color=\"transparent\" data-label-color=\"transparent\" data-text-border-color=\"transparent\" data-text-padding=\"0\" data-label-background-color=\"transparent\" data-text-background-color=\"transparent\" data-auto-width=\"no\">"
function f.main( frame )
    code = code .. output("正常排序")

    nameList = sortByPinyin(nameList)
    code = code .. output("拼音排序")
    return code .. "</div></div>"
end
return f