모듈:documentation

위키낱말사전, 말과 글의 누리

이 모듈에 대한 설명문서는 모듈:documentation/설명문서에서 만들 수 있습니다

local export = {}

-- it is either here, or in [[Module:ugly hacks]], and it is not in ugly hacks.
function export.CONTENTMODEL()
    return mw.title.getCurrentTitle().contentModel   
end

local skins = {
    ["common"     ] = "";
    ["vector"     ] = "Vector";
    ["monobook"   ] = "Monobook";
    ["cologneblue"] = "Cologne Blue";
    ["modern"     ] = "Modern";
}

local data_modules_regex_cats = {
    ["^Module:data_tables/data..?.?.?$"] = "User:Isomorphyc's datatables"
}

function export.show(frame)
    local output = { '\n<div class="documentation" style="display:block; clear:both">\n' }
    local cats = {}
   
    if (not frame.args.hr) or (frame.args.hr == "above") then
        output[#output + 1] = "----\n"
    end
   
    local title = ((frame.args['for'] ~= "") and frame.args['for']) and mw.title.new(frame.args['for']) or mw.title.getCurrentTitle()
    local doc_title = mw.title.new((frame.args['from'] ~= "") and frame.args['from'] or (title.fullText .. '/documentation'))
   
    local pagetype = mw.getContentLanguage():lcfirst(title.nsText) .. " page"
    local preload

    local user_name, skin_name

    if title.contentModel == "javascript" then
        pagetype = "script"
        preload  = 'Template:documentation/preloadTemplate' -- XXX
        if title.nsText == 'User' then
            user_name = title.rootText   
        end
    elseif title.contentModel == "css" then
        pagetype = "style sheet"
        preload  = 'Template:documentation/preloadTemplate' -- XXX
        if title.nsText == 'User' then
            user_name = title.rootText   
        end
    elseif title.contentModel == "Scribunto" then
        pagetype = "module"
        preload  = 'Template:documentation/preloadModule'
        user_name = title.rootText:match("^User:(.+)")
    elseif title.nsText == "Template" then
        pagetype = "template"
        preload  = 'Template:documentation/preloadTemplate'
    elseif title.nsText == "Wiktionary" then
        pagetype = "project page"
        preload  = 'Template:documentation/preloadTemplate' -- XXX
    end
   
    local old_title
    if doc_title.isRedirect then
        old_title = doc_title
        doc_title = mw.title.new(string.match(doc_title:getContent(), "^#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]]-)%]%]"))
    end
   
    local fallback_docs

    output[#output + 1] = "<dl class=\"plainlinks\" style=\"font-size: smaller;\">"
    if doc_title.exists then
        output[#output + 1] =
            "<dd><i style=\"font-size: larger;\">The following [[Help:Documenting templates and modules|documentation]] is located at [[" .. doc_title.fullText .. "]]. " ..
            "<sup>[[" .. doc_title:fullUrl { action = 'edit' } .. " edit]]</sup> </i></dd>"
    else
        if title.contentModel == "Scribunto" then
            local automatic_cat = "Uncategorized modules"
            if user_name then
                fallback_docs = 'documentation/fallback/user module'
                automatic_cat = "User sandbox modules"
            else
                local categorized = false
                for regex, cat in pairs(data_modules_regex_cats ) do
                    if mw.ustring.match(mw.title.getCurrentTitle(), regex) then
                        automatic_cat = cat;
                        break
                    end
                end
            end
            cats[#cats + 1] = automatic_cat
           
            if not fallback_docs then
                cats[#cats + 1] = "Templates and modules needing documentation"
            end
        elseif title.nsText == "Template" then
            cats[#cats + 1] = "Uncategorized templates"

            if not fallback_docs then
                cats[#cats + 1] = "Templates and modules needing documentation"
            end
        elseif (title.contentModel == "css") or (title.contentModel == "javascript") then
            if user_name then
                skin_name = skins[title.text:sub(#title.rootText + 1):match("^/([a-z]+)%.[jc]ss?$")]
                if skin_name then
                    fallback_docs = 'documentation/fallback/user ' .. title.contentModel
                end
            end
        end

        output[#output + 1] =
            "<dd><i style=\"font-size: larger;\">This " .. pagetype .. " lacks a [[Help:Documenting templates and modules|documentation subpage]]. " ..
            (fallback_docs and "You may " or "Please ") ..
            "[" .. doc_title:fullUrl { action = 'edit', preload = preload } .. " create it].</i></dd>\n"
    end
   
    if title.fullText:match("^MediaWiki:Gadget%-") then
        local is_gadget = false
        local gadget_list = mw.title.new("MediaWiki:Gadgets-definition"):getContent()
       
        for line in mw.text.gsplit(gadget_list, "\n") do
            local gadget, opts, items = line:match("^%*%s*([A-Za-z][A-Za-z0-9_%-]*)%[(.-)%]|(.+)$")
            if not gadget then
                gadget, items = line:match("^%*%s*([A-Za-z][A-Za-z0-9_%-]*)|(.+)$")
            end
           
            if gadget then
                items = mw.text.split(items, "|")
                for i, item in ipairs(items) do
                    if title.fullText == ("MediaWiki:Gadget-" .. item) then
                        is_gadget = true

                        output[#output + 1] = "<dd> ''This script is a part of the <code>"
                        output[#output + 1] = gadget
                        output[#output + 1] = "</code> gadget (["
                        output[#output + 1] = tostring(mw.uri.fullUrl('MediaWiki:Gadgets-definition', 'action=edit'))
                        output[#output + 1] = " edit definitions])'' <dl>"
                       
                        output[#output + 1] = "<dd> ''Description (["
                        output[#output + 1] = tostring(mw.uri.fullUrl('MediaWiki:Gadget-' .. gadget, 'action=edit'))
                        output[#output + 1] = " edit])'': "
                        output[#output + 1] = mw.message.new('Gadget-' .. gadget):plain()
                        output[#output + 1] = " </dd>"

                        table.remove(items, i)
                        if #items > 0 then
                            for j, item in ipairs(items) do
                                items[j] = '[[MediaWiki:Gadget-' .. item .. '|' .. item .. ']]'
                            end
                            output[#output + 1] = "<dd> ''Other parts'': "
                            output[#output + 1] = mw.text.listToText(items)
                            output[#output + 1] = "</dd>"
                        end

                        output[#output + 1] = "</dl></dd>"

                        break
                    end
                end
            end
        end
       
        if not is_gadget then
            output[#output + 1] = "<dd> ''This script is not a part of any ["
            output[#output + 1] = tostring(mw.uri.fullUrl('Special:Gadgets', 'uselang=en'))
            output[#output + 1] = ' gadget] (['
            output[#output + 1] = tostring(mw.uri.fullUrl('MediaWiki:Gadgets-definition', 'action=edit'))
            output[#output + 1] = ' edit definitions]).</dd>'
        end
    end   
   
    if old_title then
        output[#output + 1] = "<dd> ''Redirected from'' ["
        output[#output + 1] = old_title:fullUrl { redirect = 'no' }
        output[#output + 1] = " "
        output[#output + 1] = old_title.fullText
        output[#output + 1] = "] (["
        output[#output + 1] = old_title:fullUrl { action = 'edit' }
        output[#output + 1] = " edit]).</dd>\n"
    end
   
    local links = {}
   
    if title.isSubpage then
        links[#links + 1] = "[[:" .. title.nsText .. ":" .. title.rootText .. "|root page]]"
        links[#links + 1] = "[[Special:PrefixIndex/" .. title.nsText .. ":" .. title.rootText .. "/|root page's subpages]]"
    else
        links[#links + 1] = "[[Special:PrefixIndex/" .. title.fullText .. "/|subpage list]]"
    end
   
    if (title.contentModel == "javascript") or (title.contentModel == "css") then
        links[#links + 1] = "[[Special:WhatLinksHere/" .. title.fullText .. "|what links here]]"

        if user_name then
            links[#links + 1] = "[[Special:MyPage" .. title.text:sub(#title.rootText + 1) .. "|your own]]"
        end
    else
        links[#links + 1] =
            '[' .. tostring(mw.uri.fullUrl('Special:WhatLinksHere/' .. title.fullText, 'hidelinks=1&hideredirs=1')) ..
            ' transclusions]'

        if title.contentModel ~= "Scribunto" then
            links[#links + 1] =
                '[' .. tostring(mw.uri.fullUrl('Special:WhatLinksHere/' .. title.fullText, 'hidelinks=1&hidetrans=1')) ..
                ' redirects]'
        end
    end
   
    if title.contentModel == "Scribunto" then
        if title.isSubpage and (title.subpageText == "testcases") then
            links[#links + 1] = "[[:" .. title.nsText .. ":" .. title.baseText .. "|tested module]]"
        else
            links[#links + 1] = "[[" .. title.fullText .. "/testcases|testcases]]"
        end

        if user_name then
            links[#links + 1] = "[[User:" .. user_name .. "|user page]]"
            links[#links + 1] = "[[User talk:" .. user_name .. "|user talk page]]"
            links[#links + 1] = "[[Special:PrefixIndex/User:" .. user_name .. "/|userspace]]"
        end
    end
   
    if #links > 0 then
        output[#output + 1] =
            "<dd> ''Useful links'': " .. table.concat(links, " • ") .. "</dd>"
    end
   
    output[#output + 1] = "</dl>\n"

    if doc_title.exists then
        output[#output + 1] = frame:expandTemplate { title = doc_title.fullText }
    elseif fallback_docs then
        output[#output + 1] = frame:expandTemplate {
            title = fallback_docs;
            args = {
                ['user'] = user_name;
                ['page'] = title.fullText;
                ['skin name'] = skin_name;
            }
        }
    end

    if frame.args.hr == "below" then
        output[#output + 1] = '\n<hr style="clear: both;" />'
    else
        output[#output + 1] = '\n<br style="clear: both;" />'
    end
   
    for _, cat in ipairs(cats) do
        output[#output + 1] = "[[Category:" .. cat .. "]]"
    end
   
    output[#output + 1] = "</div>\n"

    return table.concat(output)
end

return export