Module:SocialMedia
Documentation for this module may be created at Module:SocialMedia/doc
-- Reusable, single-row or multi-row social media footer that can be called from any other module or template.
local sf = {}
-- 1) Define the social platforms
-- param = the name of the parameter
-- icon = wiki file for the icon
-- prefix = URL prefix
-- label = optional for referencing or debugging
local socialPlatforms = {
{
param = "twitter",
icon = "File:TwitterIcon.png", -- or "File:XIcon.png"
prefix = "https://x.com/",
label = "X (Twitter)"
},
{
param = "facebook",
icon = "File:FacebookIcon.png",
prefix = "https://www.facebook.com/",
label = "Facebook"
},
{
param = "instagram",
icon = "File:InstagramIcon.png",
prefix = "https://www.instagram.com/",
label = "Instagram"
},
{
param = "threads",
icon = "File:ThreadsIcon.png",
prefix = "https://www.threads.net/",
label = "Threads"
},
{
param = "linkedin",
icon = "File:LinkedInIcon.png",
prefix = "https://www.linkedin.com/",
label = "LinkedIn"
},
{
param = "youtube",
icon = "File:YouTubeIcon.png",
prefix = "https://www.youtube.com/",
label = "YouTube"
},
{
param = "mastodon",
icon = "File:MastodonIcon.png",
prefix = "",
label = "Mastodon"
},
{
param = "tiktok",
icon = "File:TikTokIcon.png",
prefix = "https://www.tiktok.com/",
label = "TikTok"
},
}
-- 2) Helper function to build a clickable icon link
-- Using wikitext syntax: [[File:Something.png|16px|link=URL]]
local function buildIconLink(iconFile, url)
return string.format("[[%s|16px|link=%s]]", iconFile, url)
end
-- 3) The main render function, called from another module or via #invoke
-- Takes a table of arguments (handles), returns wiki markup with social icons.
function sf.render(args)
local icons = {}
for _, platform in ipairs(socialPlatforms) do
local handle = args[platform.param]
if handle and handle ~= "" then
local url
-- Special-case Mastodon, as it can vary. Example approach:
if platform.param == "mastodon" then
if handle:match("^https?://") then
-- user typed a full URL
url = handle
else
-- parse e.g. "icann@mastodon.social"
local domain = handle:match("@([^@]+)$") or "mastodon.social"
local user = handle:match("^(.-)@") or handle
url = "https://" .. domain .. "/@" .. user
end
else
-- For everything else, prefix + handle
url = platform.prefix .. handle
end
-- Build an icon link
local iconLink = buildIconLink(platform.icon, url)
table.insert(icons, iconLink)
end
end
-- If no handles were provided, return nothing (empty string).
if #icons == 0 then
return ""
end
-- Otherwise, return a table row or any layout you want.
-- Example: single row labeled "Social Media"
local iconString = table.concat(icons, " ")
local row = table.concat({
"|-",
"| '''Social Media''':", -- Label on the left
"| " .. iconString -- Icons on the right
}, "\n")
return row
end
return sf