Modul:Exclusive

Aus Terraria Wiki
Wechseln zu: Navigation, Suche
Siehe auch die englische Modulseite: Module:Exclusive. Sie enthält möglicherweise umfassendere oder aktuellere Informationen.
Important.svg Diese Seite ist nicht oder unvollständig übersetzt.
Hilf mit, indem du den Text übersetzt und anschließend diesen Hinweis entfernst. Dies entfernt diese Seite auch aus der Liste von Seiten mit unzureichender Übersetzung.

This module manages everything {{exclusive}}-related.

The three invokable functions are getInfo, a general exclusivity function which stores information to dplvars, eicons, which provides the functionality of {{eicons}}, and simpleEicons, a helper function to be used in other modules like Module:Item.

Important Note for Porting[Quelltext bearbeiten]

When porting {{exclusive}}-related templates/modules to separate language wikis, you might not want to use a cargo-based cache system like on the English wiki.

Please take the following steps in order to use a non-cargo cache system:

  1. Do not directly port Module:Exclusive/data from the en wiki. Instead, head to Template:Exclusive/luadata (en), copy the generated code from that page, and put it as source code of Module:Exclusive/data on the target language's wiki. Note that this process will need to be repeated in the future in order to keep the language wiki's exclusivity database up-to-date.
  2. Make sure that the l10n auto translation switch for the target language in Template:Exclusive/Template:Eil/Template:Eicons/Template:Eversions is set to false (false is the default value for non-English languages).
  3. Make sure that the l10n cargo switch for the target language in Template:Exclusive (at the beginning) is set to false.

-- l10n text, needs to be translated.
local l10n = mw.loadData('Module:Exclusive/l10n')

-- exclusive info database, please read the documentation of Module:Exclusive/data
local exclusive_info = mw.loadData( 'Module:Exclusive/data' )

------- The following is not related to l10n. --------------
local trim = mw.text.trim

local args_table -- cache
-- helper function
local getArg = function(key)
	local value = trim(args_table[key] or '')
	return (value ~= '') and value or nil
end

local function parameter(parameter, base)
	if parameter then
		if parameter == '1' or parameter == 'y' or parameter == 'yes' then
			return 'y'
		end
		if parameter == '0' or parameter == 'n' or parameter == 'no' then
			return nil
		end
	end
	return base
end

local standAndExtr = function(page)
	-- standardize pagename (remove section parts ('x#section' -> 'x') and replace underscores with spaces)
	page = mw.getContentLanguage():ucfirst(string.gsub(string.gsub(page or '', '#.*', ''), '_', ' '))
	
	-- extract info
	local raw, ex_d, ex_c, ex_o, ex_m, ex_3, ex_j, cached = exclusive_info[page]
	if raw then
		ex_d, ex_c, ex_o, ex_m, ex_3, ex_j, cached = raw:find('d'), raw:find('c'), raw:find('o'), raw:find('m'), raw:find('3'), raw:find('j'), 'y'
	end
	
	return ex_d, ex_c, ex_o, ex_m, ex_3, ex_j, cached
end

local getInfo = function(page, invert, pagenot)
	local ex_d, ex_c, ex_o, ex_m, ex_3, ex_j, cached = standAndExtr(page)

	-- invert?
	if invert then
		ex_d = not ex_d
		ex_c = not ex_c
		ex_o = not ex_o
		ex_m = not ex_m
		ex_3 = not ex_3
		ex_j = false
	end
	
	-- exclude some versions, depending on pagenot
	if pagenot then
		local exnot_d, exnot_c, exnot_o, exnot_m, exnot_3, exnot_j = standAndExtr(pagenot)
		ex_d = ex_d and not exnot_d -- ex_d is true only when ex_d is set and exnot_d is not set.
		ex_c = ex_c and not exnot_c
		ex_o = ex_o and not exnot_o
		ex_m = ex_m and not exnot_m
		ex_3 = ex_3 and not exnot_3
	end

	return ex_d, ex_c, ex_o, ex_m, ex_3, ex_j, cached
end

local eicons = function(ex_d, ex_c, ex_o, ex_m, ex_3, ex_j, _small, _link, lang)
	
	local link = ''
	local space = false
	local size
	local result = ''
	local l10n = l10n[lang] or l10n['en']

	-- compact mode only if nolink.
	if link == '' then
		if ex_d and ex_c and ex_o and ex_m and not ex_3 and not ex_j then
			result = 
			'[[File:DCOM only.png|' .. (_small and 'x12' or 'x16') ..'px|link=|' .. l10n['icon_text_dcom'] .. ']]'
			return mw.text.tag('span',{class='eico'}, result)
		end
		if ex_d and ex_c and not ex_o and ex_m and not ex_3 and not ex_j then
			result = 
			'[[File:DCM only.png|' .. (_small and 'x12' or 'x16') ..'px|link=|' .. l10n['icon_text_dcm'] .. ']]'
			return mw.text.tag('span',{class='eico'}, result)
		end
		if ex_d and ex_c and not ex_o and not ex_m and not ex_3 and not ex_j then
			result = 
			'[[File:DC only.png|' .. (_small and 'x12' or 'x16') ..'px|link=|' .. l10n['icon_text_dc'] .. ']]'
			return mw.text.tag('span',{class='eico'}, result)
		end
		if ex_d and not ex_c and not ex_o and ex_m and not ex_3 and not ex_j then
			result = 
			'[[File:DM only.png|' .. (_small and 'x12' or 'x16') ..'px|link=|' .. l10n['icon_text_dm'] .. ']]'
			return mw.text.tag('span',{class='eico'}, result)
		end
	end

	if ex_d then
		result = 
		'[[File:Desktop only.png|' .. (_small and '12' or '16') ..'px|link='
		.. (_link and l10n['icon_link_d'] or '') .. '|' .. l10n['icon_text_d'] .. ']]'
		space = true
	end
	if ex_c then
		result = result .. (space and ' ' or '') ..
		'[[File:Console only.png|' .. (_small and '13' or '17') ..'px|link='
		.. (_link and l10n['icon_link_c'] or '') .. '|' .. l10n['icon_text_c'] .. ']]'
		space = true
	end
	if ex_o then
		result = result .. (space and ' ' or '') ..
		'[[File:Old-Gen Console only.png|' .. (_small and 'x12' or 'x16') ..'px|link='
		.. (_link and l10n['icon_link_o'] or '') .. '|' .. l10n['icon_text_o'] .. ']]'
		space = true
	end
	if ex_m then
		result = result .. (space and ' ' or '') ..
		'[[File:Mobile only.png|' .. (_small and 'x12' or 'x16') ..'px|link='
		.. (_link and l10n['icon_link_m'] or '') .. '|' .. l10n['icon_text_m'] .. ']]'
		space = true
	end
	if ex_3 then
		result = result .. (space and ' ' or '') ..
		'[[File:3DS.svg|' .. (_small and '24' or '32') ..'px|link='
		.. (_link and l10n['icon_link_3'] or '') .. '|' .. l10n['icon_text_3'] .. ']]'
		space = true
	end
	if ex_j then
		result = result .. (space and ' ' or '') ..
		'[[File:Flag jp.svg|' .. (_small and '12' or '16') ..'px|link='
		.. (_link and l10n['icon_link_j'] or '') .. '|' .. l10n['icon_text_j'] .. ']]'
	end
	return mw.text.tag('span',{class='eico'}, result)
end

local getExclusiveInfo = function(page, invert, pagenot)
	local ex_d, ex_c, ex_o, ex_m, ex_3, ex_j
	if page then
		ex_d, ex_c, ex_o, ex_m, ex_3, ex_j = getInfo(page, invert, pagenot)
	end
	
	-- override
	ex_d = parameter(getArg('dsk'), ex_d)
	ex_c = parameter(getArg('cns'), ex_c)
	ex_o = parameter(getArg('old'), ex_o)
	ex_m = parameter(getArg('mbl'), ex_m)
	ex_3 = parameter(getArg('3ds'), ex_3)
	ex_j = parameter(getArg('jas'), ex_j)

	return ex_d, ex_c, ex_o, ex_m, ex_3, ex_j
end



---------------------------------------------------------------------------------



return {
	-- for template; get all exclusive info, set it in dplvars.
	-- parameters: $1 = pagename
	getInfo = function(frame)
		args_table = frame.args -- cache
		local page = getArg(1)
		if not page then
			frame:callParserFunction{ name = '#dplvar:set', args = {
				'ex_d', '', 'ex_c', '', 'ex_o', '', 'ex_m', '', 'ex_3', '', 'ex_j', '', 'ex_cached', 'y'
			} }
			return
		end
		local ex_d, ex_c, ex_o, ex_m, ex_3, ex_j, cached = getInfo(page, getArg('invert'), getArg('pagenot'))
		frame:callParserFunction{ name = '#dplvar:set', args = {
			'ex_d', ex_d and 'y' or '',
			'ex_c', ex_c and 'y' or '',
			'ex_o', ex_o and 'y' or '',
			'ex_m', ex_m and 'y' or '',
			'ex_3', ex_3 and 'y' or '',
			'ex_j', ex_j and 'y' or '',
			'ex_cached', cached and 'y' or ''
		} }
	end,

	-- for {{eicons}}
	eicons = function(frame)
		args_table = frame.args -- cache
		local ex_d, ex_c, ex_o, ex_m, ex_3, ex_j = getExclusiveInfo(getArg(1), getArg('invert'), getArg('pagenot'))
		if not(ex_d or ex_c or ex_o or ex_m or ex_3 or ex_j) then
			return ''
		end
		local small = getArg('small')
		if small == 'n' or small == '0' or small == 'no' then
			small = false
		end
		return eicons(
			ex_d, ex_c, ex_o, ex_m, ex_3, ex_j,
			small, getArg('link'), getArg('lang')
		)
	end,

	-- for other modules such as Module:item; simple eicons:
	simpleEicons = function(page, lang, small, link)
		local ex_d, ex_c, ex_o, ex_m, ex_3, ex_j = getInfo(page)
		if not(ex_d or ex_c or ex_o or ex_m or ex_3 or ex_j) then
			return ''
		end
		return eicons(
			ex_d, ex_c, ex_o, ex_m, ex_3, ex_j, 
			small, link, lang
		)
	end,
	
	--purge luacached cache data.
	purge = function(frame)
		local cache = require 'mw.ext.LuaCache'
		cache.delete('exclusive-database')
	end,
	
}