Jump to content

Module:Blocks

From Meta, a Wikimedia project coordination wiki
Module documentation

This module is used for Template:Blocks.

Usage

[edit]

To use this module, add the following code to your wiki page:

{{#invoke:Blocks|main}}

Inputs

[edit]

See Template:Blocks/doc#Usage.

Outputs

[edit]

This module outputs a single string containing the HTML markup for the generated blocks. Each block will include:

  • The section name (if provided) as an <h2> heading, followed by an edit link (either to that page or the transcluded page if a page title is passed).
  • The transcluded content from the specified page or the provided content, wrapped in a <div> with the class blocks-block.

local p = {}

function p.main(frame)
    local parent = frame:getParent()
    local pages = {}
    local index = 1

    while parent.args['page' .. index] or parent.args['content' .. index] do
        local pageName = parent.args['page' .. index]
        local content = parent.args['content' .. index]
        local sectionName = parent.args['section' .. index]
        local pageDiv = mw.html.create('div'):addClass('blocks-block')

        if sectionName then
            local editLink
            if pageName then
                editLink = mw.uri.fullUrl(pageName, {action = 'edit'})
            elseif content then
                editLink = mw.uri.fullUrl(mw.title.getCurrentTitle().prefixedText, {action = 'edit'})
            end
            local encodedEditLink = mw.text.encode(tostring(editLink))
            local editButton = mw.html.create('span')
                :addClass('mw-editsection plainlinks')
                :wikitext('[ [' .. encodedEditLink .. ' edit] ]')

            local heading = mw.html.create('h2')
                :wikitext(sectionName)
                :node(editButton)
            
            local headingContainer = mw.html.create('div')
                :addClass('heading-container')
                :node(heading)
                
            pageDiv:node(headingContainer)
        end

        if pageName then
            local transcludedContent = frame:expandTemplate{title = pageName}
            pageDiv:wikitext('\n' .. transcludedContent)
        elseif content then
            pageDiv:wikitext('\n' .. content)
        end

        table.insert(pages, pageDiv)
        index = index + 1
    end

    if #pages == 0 then
        return ''
    end

    local mainDiv = mw.html.create('div')
    for _, pageDiv in ipairs(pages) do
        mainDiv:node(pageDiv)
    end

    return tostring(mainDiv)
end

return p