Module:MovementTabs: Difference between revisions

No edit summary
No edit summary
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
local p = {}
local p = {}
local lang_module = require("Module:Lang")


function p.render(frame)
function p.render(frame)
     local args = frame:getParent().args
     local args = frame:getParent().args
    local root = args[2] and args[1] or nil
     local tabsStr = args[2] and args[2] or args[1] or ""
     local tabsStr = args[2] and args[2] or args[1] or ""
    local tabs = mw.text.split(tabsStr, "%s*,%s*")


    local tabs = mw.text.split(tabsStr, "%s*,%s*")
     local current = mw.title.getCurrentTitle().fullText
     local current = mw.title.getCurrentTitle().fullText
    local rootPage = args[1] or current
    local lang_code = lang_module.get_lang_code()
    local lang_suffix = (lang_code ~= "en") and ("/" .. lang_code) or ""
    -- Remove lang suffix from root if present
    if lang_suffix ~= "" and rootPage:sub(-#lang_suffix) == lang_suffix then
        rootPage = rootPage:sub(1, -#lang_suffix - 1)
    end
    -- Create outer container using your new CSS class
    local html = mw.html.create("div"):addClass("hero-tabs")


     local baseRoot
     for _, tab in ipairs(tabs) do
    if root then
         local pageTarget
         baseRoot = root
         if tab == "Overview" then
    else
             pageTarget = rootPage .. lang_suffix
         local fullTitle = mw.title.getCurrentTitle().fullText
        local segments = mw.text.split(fullTitle, "/")
        if #segments > 1 then
             table.remove(segments)
            baseRoot = table.concat(segments, "/")
         else
         else
             baseRoot = fullTitle
             pageTarget = rootPage .. "/" .. tab .. lang_suffix
         end
         end
    end


    local html = mw.html.create("div")
        local pagePlain = tab == "Overview" and rootPage or (rootPage .. "/" .. tab)
         :css{
         local active = current == pagePlain or current == pagePlain .. lang_suffix
            ["border-radius"]="8px",
            ["background-image"]="linear-gradient(#987556, #483728)",
            ["color"]="#FFF5E8",
            ["display"]="flex",
            ["flex-wrap"]="wrap",
            ["justify-content"]="center",
            ["gap"]="1em",
            ["font-family"]="Retail Demo, Radiance, sans-serif",
            ["text-transform"]="uppercase",
            ["font-weight"]="bold",
            ["font-size"]="15px",
            ["padding"]="4px"
        }


    for _, tab in ipairs(tabs) do
         local div = html:tag("div"):addClass("hero-tab")
         local page = tab == "Overview" and baseRoot or (baseRoot .. "/" .. tab)
        local active = current == page


         html:tag("div")
         if active then
             :css{
            div:addClass("hero-tab-active")
                ["padding"]="4px 8px",
             div:wikitext(string.format('[[:%s|%s]]', pageTarget, tab))
                ["cursor"]="pointer",
        else
                ["border-radius"]=active and "4px 4px 0 0" or nil,
             div:wikitext(string.format('[[:%s|<span class="hero-tab-inactive">%s</span>]]', pageTarget, tab))
                ["background-color"]=active and "#FFF0D6" or nil,
        end
                ["color"]=active and "#483728" or "#FFF0D6",
                ["text-shadow"]=not active and "0px 2px 2px black, 0px 0px 2px black" or nil
            }
             :wikitext(string.format(
                "[[%s|%s]]",
                page,
                tab
            ))
     end
     end