Jump to content

Module:ElementNTLDStats

Documentation for this module may be created at Module:ElementNTLDStats/doc

--[[ 
 * Module:ElementNTLDStats
 * Renders the NTLDStats element for generic TLDs (not ccTLDs), displaying a link to ntldstats.com.
 * Designed for integration with the Blueprint template system.
 ]]

local p = {}

p.elementName = "ntldstats"

-- Dependencies
local TemplateHelpers = require('Module:TemplateHelpers')
local ConfigRepository = require('Module:ConfigRepository')
local ErrorHandling    = require('Module:ErrorHandling')
local mw               = mw  -- MediaWiki API

-- Classic TLDs not integrated into NTLDStats database
local CLASSIC_TLDS = {
    com=true, net=true, org=true, info=true,
    edu=true, gov=true, mil=true, int=true,
    aero=true, asia=true, cat=true, coop=true,
    jobs=true, mobi=true, museum=true, post=true,
    tel=true, travel=true, xxx=true
}

-- Create an NTLDStats block
function p.createBlock()
    return function(template, args)
        local ctx = template._errorContext

        -- Protected execution wrapper
        local function execute(func, ...)
            if ctx then
                return ErrorHandling.protect(
                    ctx,
                    "ElementBlock_ntldstats",
                    func,
                    "",
                    ...
                )
            else
                local ok, result = pcall(func, ...)
                return ok and result or ""
            end
        end

        return execute(function()
            -- Skip for ccTLDs
            if args._type == "ccTLD" then
                return ""
            end

-- Use CLASSIC_TLDS constant defined above

            -- Determine page name and TLD identifier
            local titleObj = mw.title.getCurrentTitle()
            local pageName = titleObj and titleObj.text or ""
            local tldName = pageName:gsub("^%.", "")
            local ext = tldName:match("%.([^%.]+)$")

-- Skip classic TLDs
            if CLASSIC_TLDS[string.lower(tldName)] or (ext and CLASSIC_TLDS[string.lower(ext)]) then
                return ""
            end

            -- Render divider and NTLDStats link
            local divider = require('Module:TemplateStructure').renderDividerBlock("Find out more:")
            local stats = string.format(
                '|-\n| colspan="2" | <div class="ntldstats icannwiki-centered">[[File:NTLDStatsLogo.png|100px|alt=NTLDStats|link=https://ntldstats.com/tld/%s]]</div>',
                tldName
            )
            return divider .. "\n" .. stats
        end)
    end
end

return p