Module:Uses TemplateStyles

From Uncyclopedia, the content-free encyclopedia
Jump to navigation Jump to search
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')

local p = {}

-- Replace TNT.format with Lua's string.format
local function format(msg, ...)
    return string.format(msg, ...)
end

local function getConfig()
    return mw.loadData('Module:Uses TemplateStyles/config')
end

local function renderBox(tStyles)
    local boxArgs = {
        type = 'notice',
        small = true,
        image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt'))
    }
    if #tStyles < 1 then
        boxArgs.text = string.format('<strong class="error">%s</strong>', format('error-emptylist'))
    else
        local cfg = getConfig()
        local tStylesLinks = {}
        for i, ts in ipairs(tStyles) do
            local link = string.format('[[:%s]]', ts)
            local sandboxLink = nil
            local tsTitle = mw.title.new(ts)
            if tsTitle and cfg['sandbox_title'] then
                local tsSandboxTitle = mw.title.new(string.format(
                    '%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], tsTitle.subpageText))
                if tsSandboxTitle and tsSandboxTitle.exists then
                    sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText)
                end
            end
            tStylesLinks[i] = sandboxLink or link
        end
        local tStylesList = mList.makeList('bulleted', tStylesLinks)
		local headerText = mw.title.getCurrentTitle():inNamespaces(828,829) and 'This module uses TemplateStyles' or 'This template uses TemplateStyles'
		boxArgs.text = headerText .. '\n' .. tStylesList

    end
    return mMessageBox.main('mbox', boxArgs)
end

local function renderTrackingCategories(args, tStyles, titleObj)
    if yesno(args.nocat) then
        return ''
    end
    
    local cfg = getConfig()
    
    local cats = {}
    
    -- Error category
    if #tStyles < 1 and cfg['error_category'] then
        cats[#cats + 1] = cfg['error_category']
    end
    
    -- TemplateStyles category
    titleObj = titleObj or mw.title.getCurrentTitle()
    if (titleObj.namespace == 10 or titleObj.namespace == 828)
        and not cfg['subpage_blacklist'][titleObj.subpageText]
    then
        local category = args.category or cfg['default_category']
        if category then
            cats[#cats + 1] = category
        end
        if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
            local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
            local addedLevelCat = false
            local addedPadlockCat = false
            for i, ts in ipairs(tStyles) do
                local tsTitleObj = mw.title.new(ts)
                local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
                if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then
                    local content = tsTitleObj:getContent()
                    if not content:find(cfg['padlock_pattern']) then
                        cats[#cats + 1] = cfg['missing_padlock_category']
                        addedPadlockCat = true
                    end
                end
                if cfg['protection_conflict_category'] and currentProt and tsProt ~= currentProt and not addedLevelCat then
                    currentProt = cfg['protection_hierarchy'][currentProt] or 0
                    tsProt = cfg['protection_hierarchy'][tsProt] or 0
                    if tsProt < currentProt then
                        addedLevelCat = true
                        cats[#cats + 1] = cfg['protection_conflict_category']
                    end
                end
            end
        end
    end
    for i, cat in ipairs(cats) do
        cats[i] = string.format('[[Category:%s]]', cat)
    end
    return table.concat(cats)
end

function p._main(args)
    local cfg = getConfig()
    if #args == 0 then
        local prefixed = mw.title.getCurrentTitle().prefixedText
        prefixed = prefixed:gsub("/doc","")
        args[1] = prefixed .. "/" .. cfg["default_subpage_name"]
    end
    local tStyles = mTableTools.compressSparseArray(args)
    local box = renderBox(tStyles)
    local trackingCategories = renderTrackingCategories(args, tStyles)
    return box .. trackingCategories
end

function p.main(frame)
    local origArgs = frame:getParent().args
    local args = {}
    for k, v in pairs(origArgs) do
        v = v:match('^%s*(.-)%s*$')
        if v ~= '' then
            args[k] = v
        end
    end
    return p._main(args)
end

return p