Module:Infobox/Widget/Links: Difference between revisions
From TwogPedia
            mNo edit summary  | 
				mNo edit summary  | 
				||
| (3 intermediate revisions by the same user not shown) | |||
| Line 101: | Line 101: | ||
function Links.make(links, variant)  | function Links.make(links, variant)  | ||
	if _isTableEmpty(links) then return nil end  | |||
	local infoboxLinks = mw.html.create('div')  | 	local infoboxLinks = mw.html.create('div')  | ||
	infoboxLinks	:addClass('ib-links')  | 	infoboxLinks	:addClass('ib-links')  | ||
| Line 109: | Line 108: | ||
		for _, key in ipairs(group) do  | 		for _, key in ipairs(group) do  | ||
			if links[key] ~= nil then  | 			if links[key] ~= nil then  | ||
				infoboxLinks:wikitext(' ' .. _makeLink(key, links[key]))  | 				infoboxLinks:wikitext(' ' .. _makeLink(key, links[key], variant))  | ||
				-- Remove link from the collection  | 				-- Remove link from the collection  | ||
				links[key] = nil  | 				links[key] = nil  | ||
| Line 115: | Line 114: | ||
				local index = 2  | 				local index = 2  | ||
				while links[key .. index] ~= nil do  | 				while links[key .. index] ~= nil do  | ||
					infoboxLinks:wikitext(' ' .. _makeLink(key, links[key .. index]))  | 					infoboxLinks:wikitext(' ' .. _makeLink(key, links[key .. index], variant))  | ||
					-- Remove link from the collection  | 					-- Remove link from the collection  | ||
					links[key .. index] = nil  | 					links[key .. index] = nil  | ||
| Line 127: | Line 126: | ||
		infoboxLinks:wikitext(' ' .. _makeLink(key, value, variant))  | 		infoboxLinks:wikitext(' ' .. _makeLink(key, value, variant))  | ||
	end  | 	end  | ||
	return mw.html.create('div'):node(infoboxLinks)  | 	return mw.html.create('div'):node(infoboxLinks)  | ||
| Line 145: | Line 144: | ||
function _removeAppendedNumber(key)  | function _removeAppendedNumber(key)  | ||
	return string.gsub(key, '%d$', '')  | 	return string.gsub(key, '%d$', '')  | ||
end  | |||
function _isTableEmpty(tbl)  | |||
    for key, value in pairs(tbl) do  | |||
        return false   | |||
    end  | |||
    return true  | |||
end  | end  | ||
return Links  | return Links  | ||
Latest revision as of 15:41, 12 October 2023
Documentation for this module may be created at Module:Infobox/Widget/Links/doc
local UtilLinks = require('Module:Links')
local Table = require('Module:Table')
local Links = {}
local _ICON_KEYS_TO_RENAME = {
	['bilibili-stream'] = 'bilibili',
	daumcafe = 'cafe-daum',
	['esea-d'] = 'esea-league',
	['faceit-c'] = 'faceit',
	['faceit-c2'] = 'faceit',
	['faceit-hub'] = 'faceit',
	['faceit-org'] = 'faceit',
	matcherinolink = 'matcherino',
	playlist = 'music',
	privsteam = 'steam',
	pubsteam = 'steam',
	steamalternative = 'steam',
	tlpdint = 'tlpd',
	tlpdkr = 'tlpd-wol-korea',
	tlpdsospa = 'tlpd-sospa',
}
local _PRIORITY_GROUPS = {
	core = {
		'home',
		'site',
		'website'
	},
	league = {
		'5ewin',
		'abiosgaming',
		'aligulac',
		'battlefy',
		'b5csgo',
		'challengermode',
		'challonge',
		'cybergamer',
		'datdota',
		'dotabuff',
		'esea',
		'esea-d',
		'esl',
		'esportal',
		'faceit',
		'faceit-c',
		'faceit-hub',
		'faceit-org',
		'factor',
		'gamersclub',
		'halodatahive',
		'letsplaylive',
		'matcherino',
		'matcherinolink',
		'siege-gg',
		'sk',
		'smash-gg',
		'sostronk',
		'stratz',
		'toornament',
		'trackmania-io',
		'vlr',
		'bracket',
		'rules',
		'rulebook',
	},
	social = {
		'discord',
		'facebook',
		'instagram',
		'privsteam',
		'pubsteam',
		'reddit',
		'snapchat',
		'steam',
		'steamalternative',
		'telegram',
		'tiktok',
		'twitter',
		'vk',
		'weibo',
		'email',
		'linkedin'
	},
	streams = {
		'twitch',
		'youtube',
		'stream',
		'afreeca',
		'dlive',
		'facebook-gaming',
		'vidio',
		'booyah',
		'douyu',
		'huyatv',
		'zhangyutv',
		'bilibili-stream',
		'kuaishou',
	}
}
function Links.make(links, variant)
	if _isTableEmpty(links) then return nil end
	local infoboxLinks = mw.html.create('div')
	infoboxLinks	:addClass('ib-links')
	for _, group in Table.iter.spairs(_PRIORITY_GROUPS) do
		for _, key in ipairs(group) do
			if links[key] ~= nil then
				infoboxLinks:wikitext(' ' .. _makeLink(key, links[key], variant))
				-- Remove link from the collection
				links[key] = nil
				local index = 2
				while links[key .. index] ~= nil do
					infoboxLinks:wikitext(' ' .. _makeLink(key, links[key .. index], variant))
					-- Remove link from the collection
					links[key .. index] = nil
					index = index + 1
				end
			end
		end
	end
	for key, value in Table.iter.spairs(links) do
		infoboxLinks:wikitext(' ' .. _makeLink(key, value, variant))
	end
	
	return mw.html.create('div'):node(infoboxLinks)
end
function _makeLink(key, value, variant)
	key = _removeAppendedNumber(key)
	local link = UtilLinks.makeFullLink(key, value, variant)
	return '[[Image:' .. (_ICON_KEYS_TO_RENAME[key] or key) .. '.png|40px|link=' .. link[1] ..
			'|' .. (link[2] or '' ) .. ']]'
		-- ' <i class="lp-icon lp-' .. (_ICON_KEYS_TO_RENAME[key] or key) .. '></i>]'
		
end
--remove appended number
--needed because the link icons require e.g. 'esl' instead of 'esl2'
function _removeAppendedNumber(key)
	return string.gsub(key, '%d$', '')
end
function _isTableEmpty(tbl)
    for key, value in pairs(tbl) do
        return false 
    end
    return true
end
return Links
No categories