Jump to content

Module:Newarticletext

From The Petit Planet Wiki
Revision as of 13:30, 17 September 2026 by ReisuDesign (talk | contribs)
Module documentation

This module is used in MediaWiki:Newarticletext. Used through {{Newarticletext}}

Uses Module:Newarticletext/data.

local p = {}

function p.main(frame)
    local td_attr = {
        valign = 'top'
    }

    local td_css = {
        width = '50%'
    }

    local title = mw.title.getCurrentTitle().text
    local sections = mw.loadData('Module:Newarticletext/data')

    local output = {}

    -- For Each Section
    for i, section_data in ipairs(sections) do
        if section_data['header'] and section_data['sections'] then
            local evenTest
            local section = page_layout(section_data['header'])
            local row
            local column

            -- For Each Link Area
            for j, link_data in ipairs(section_data['sections']) do
                evenTest = j % 2

                if evenTest == 1 then
                    row = section:tag('tr')
                end

                column = row:tag('td')
                    :attr(td_attr)
                    :css(td_css)

                if type(link_data['link']) == 'table' then
                    local ul = column
                        :wikitext(link_data['text'] .. '<br/>')
                        :tag('ul')
                        :addClass('pipe_delimit')
                        :css('font-size', link_data['link']['size'])

                    for k, sub_link in ipairs(link_data['link']) do
                        local li = ul:tag('li')

                        preload_link(
                            li,
                            title,
                            sub_link['link'],
                            sub_link['text']
                        )
                    end
                else
                    preload_link(
                        column,
                        title,
                        link_data['link'],
                        tostring(link_data['text'])
                    )
                end
            end

            if evenTest == 1 then
                column:attr('colspan', 2)
            end

            table.insert(output, tostring(section))
        end
    end

    return table.concat(output)
end

function preload_link(parent, page, preload, display)
    parent:tag('a')
        :attr('href', tostring(mw.uri.fullUrl(page)))
        :attr('class', 'preload-plus-link')
        :attr('data-preload', tostring(preload))
        :attr('data-page', tostring(page))
        :wikitext(display)
end

function page_layout(section_title)
    local table_attr = {
        class = 'wikitable mw-collapsible plainlinks',
        ['data-expandtext'] = '+',
        ['data-collapsetext'] = '-'
    }

    local table_css = {
        width = '100%',
        ['text-align'] = 'center'
    }

    return mw.html.create('table')
        :attr(table_attr)
        :css(table_css)
        :tag('tr')
        :tag('th')
        :attr('colspan', 2)
        :wikitext(section_title)
        :allDone()
end

return p