模块:Element/heading

此模块的文档可以在模块:Element/heading/doc创建

local p = {}

function handle(frame, type)
    local args = frame:getParent().args

    local title
    local database
    local defaultPageStyle
    local templateArgs = {}
    local noteTAArgs = {}

    if (args.overridingIndexingTitleLink) then
        title = args.overridingIndexingTitleLink
    else
        title = string.gsub(mw.title.getCurrentTitle().rootText, ' ', '_')
    end

    local currentNamespace = (mw.title.getCurrentTitle().nsText):lower()
    if (args.overridingDatabaseName) then
        database = args.overridingDatabaseName
    elseif (currentNamespace == 'moment') then
        database = currentNamespace
        defaultPageStyle = 'bluetint'
        templateArgs.titleAlignsLeft = true
    elseif (currentNamespace == 'column' or currentNamespace == 'literature') then
        database = currentNamespace
        defaultPageStyle = 'serif'
    end

    local dataJSON = frame:callParserFunction{name = '#getdata', args = {database, 'queryString=link includes ' .. title:lower()}}
    if (dataJSON ~= '' and dataJSON ~= '[]') then
        local templateRawArgs = mw.text.jsonDecode(dataJSON, mw.text.JSON_PRESERVE_KEYS)[0]
        for key, value in pairs(templateRawArgs) do
            if (string.find(key, 'display', 1, 1) == 1) then
                -- 'displayTitle' to 'title'
                templateArgs[string.sub(key, 8, 8):lower() .. string.sub(key, 9)] = value
            elseif (key == 'link') then
            elseif (templateArgs[key] == nil) then
                templateArgs[key] = value
            end
        end
    end

    if (type =='header') then
        templateArgs.chapters = nil

        for key, value in pairs(args) do
            if (string.find(key, 'c[G%d]') == 1) then
                noteTAArgs[string.sub(key, 2)] = value
            else
                templateArgs[key] = value
            end
        end

        if (templateArgs.pageStyle ~= nil) then
            templateArgs.pageStyle = defaultPageStyle .. ' ' .. templateArgs.pageStyle
        else
            templateArgs.pageStyle = defaultPageStyle
        end

        return frame:expandTemplate{title = 'NoteTA', args = noteTAArgs} .. frame:expandTemplate{title = 'Element/heading/frame', args = templateArgs}
    elseif (type == 'footer') then
        -- 'chapters': {
        --     '0': 'title0',
        --     '1': 'title1',
        --     '2': 'title2',
        -- }
        local result = '';
        local chapters = templateArgs.chapters;
        local forcedNextPrevious = mw.text.trim(args.np or '');
        if (chapters ~= nil and forcedNextPrevious ~= 'false') then
            local nextPrevArgs = {}
            local subname = tonumber(mw.title.getCurrentTitle().subpageText)
            if (chapters[subname + 2 - 1] ~= nil) then
                nextPrevArgs.nextTitle = chapters[subname + 2 - 1]
            end
            if (chapters[subname - 0 - 1] ~= nil) then
                nextPrevArgs.prevTitle = chapters[subname - 0 - 1]
            end
            result = frame:expandTemplate{title = 'Element/pageNextPrevious', args = nextPrevArgs}
        elseif (templateArgs.serial ~= nil and forcedNextPrevious ~= "false" or forcedNextPrevious == 'true') then
            result = frame:expandTemplate{title = 'Element/pageNextPrevious', args = {}}
        end
        local footerArgs = {}
        if (templateArgs.class ~= nil) then
            for i, v in ipairs(mw.text.split(templateArgs.class, ' ', true)) do
                footerArgs['cat' .. i] = v
            end
        end
        result = result .. frame:expandTemplate{title = 'Element/footer', args = footerArgs}
        return result
    end
end

function p.header(frame)
    return handle(frame, 'header')
end

function p.footer(frame)
    return handle(frame, 'footer')
end

return p