Module:Infobox/utilities
This module is intended to be a repository for miscellaneous utility functions that support various infoboxes.
- for
{{Infobox U.S. congressional district}}distribution_sort()– sorts the various distribution parameters and renders an unbulleted list of sameethnicity_sort()– sorts the various ethnicity parameters and renders an unbulleted list of sameoccupation_sort()– sorts the various occupation parameters and renders an unbulleted list of same
- for
{{Infobox book}}set_italics()– used to ensure that book-titles in cjk scripts are not italicizedis_cjk_code()– (private) returns true when language code represents a cjk language
require('strict');
local getArgs = require ('Module:Arguments').getArgs;
--[=[--------------------------< I N T E R L A N G _ W I K I S O U R C E _ L I N K _ M A K E >------------------
created as a test function to figure out why the wikitext for |data36= in [[Special:Permalink/1236589613|this version]]
of the template doesn't work in [[Salammbô]] when |title_orig= exists but does not have a value. When that
happened, the infobox returned plain wikitext [[s:fr:Salammbô|]] which should have been a functioning link.
Placing that wikilink in the article body and previewing produced a working inter-language/inter-project link.
{{#invoke:Infobox/utilities|interlang_wikisource_link_make|{{{orig_lang_code|}}}|{{{native_wikisource|}}}|{{{title_orig|}}}|{{{name|}}} }}
]=]
local function interlang_wikisource_link_make (frame)
local lang_mod = require ('Module:Lang'); -- used to wrap non-English wikisource links in proper html markup
local args_t = getArgs (frame); -- parameter values that are emptyspace or only white space are converted to nil
local orig_lang_code = args_t[1]; -- 'all of them sensible everyday names'
local native_wikisource = args_t[2];
local title_orig = args_t[3];
local name = args_t[4];
local orig_lang_name = mw.language.fetchLanguageName (orig_lang_code, 'en'); -- get the English name associated with <orig_lang_code>; only language tags known to MediaWiki allowed
if '' == orig_lang_name then -- empty string when <orig_lang_code> invalid
return '<span style="color:#d33">invalid language tag: <span style="font-family:monospace">' .. orig_lang_code .. '</span></span>';
end
local out_t = {}; -- output goes here
table.insert (out_t, '[[s:'); -- open inter-language/inter-project wikilink
table.insert (out_t, orig_lang_code); -- the language tag
table.insert (out_t, ':'); -- add the required separator
table.insert (out_t, native_wikisource); -- insert wikisource title
table.insert (out_t, '|'); -- done with link; start label
table.insert (out_t, title_orig or name or mw.title.getCurrentTitle().baseText); -- insert the label
table.insert (out_t, ']]'); -- close inter-language/inter-project wikilink
out_t = {lang_mod._lang ({orig_lang_code, table.concat (out_t)})}; -- replace content of out_t with a big string of its contents wrapped in {{lang}}
table.insert (out_t, ' at '); -- begin other language wikisource wikilinklink
table.insert (out_t, orig_lang_name); -- add the MediaWiki-known language name associated with |orig_lang_code=
table.insert (out_t, ' [[Wikisource]]'); -- insert wikisource link static text
return table.concat (out_t); -- make a big string of all and done
end
--[[--------------------------< I S _ C J K _ C O D E >--------------------------------------------------------
return true if code is one of the listed Chinese, Japanese, Korean ISO 639 codes, false else.
]]
local function is_cjk_code (code)
local cjk =
{
['zh'] = true, ['cdo'] = true, ['cjy'] = true, ['cmn'] = true, -- Chinese language codes
['cpi'] = true, ['cpx'] = true, ['czh'] = true, ['czo'] = true,
['gan'] = true, ['hak'] = true, ['hsn'] = true, ['ltc'] = true,
['lzh'] = true, ['mnp'] = true, ['nan'] = true, ['och'] = true,
['wuu'] = true, ['yue'] = true, ['zhx'] = true,
['ja'] = true, ['jpx'] = true, ['ojp'] = true, -- Japanese language codes
['ko'] = true, ['okm'] = true, ['oko'] = true, -- Korean language codes
}
return cjk[code] or false;
end
--[[--------------------------< S E T _ I T A L I C S >--------------------------------------------------------
Created for use with Template:Infobox book and Template:Infobox document and perhaps others to replace hard-coded
italic markup in the call to {{lang}}. This module attempts to make sure that {{lang}} correctly applies italic
markup according to MOS:FOREIGNITALIC.
|italics={{#invoke:Infobox/utilities|set_italics|{{{orig_lang_code|}}}|{{{title_orig}}}}}}}
]]
local function set_italics (frame)
local args=getArgs(frame);
local code = args[1] or args['code'] or ''; -- empty string causes 'yes' return; {{lang}} will handle the missing code error
local text = args[2] or args['text'] or ''; -- empty string causes 'yes' return; {{lang}} will handle the missing text error
local is_latn = require ("Module:Unicode data").is_Latin;
code = code:gsub ('^(%a+).*', '%1'); -- strip subtags from IETF tag to leave just the language subtag
if is_cjk_code (code) and not is_latn (text) then -- is_latn() is in Module:Unicode data
return 'no'; -- only case for 'no'
end
return 'yes'; -- everything else is yes
end
--[[--------------------------< C O M P >----------------------------------------------------------------------
compare function for result{} table descending sort
]]
local function comp (a, b)
return tonumber (a[1]) > tonumber (b[1]);
end
--[[--------------------------< S O R T _ C O M M O N >--------------------------------------------------------
common function to render sorted distribution, ethnicity, and occupation lists.
inputs:
result - table of percentages and labels
ref - value from |distribution ref=, |ethnicity ref=, or |occupation ref= as appropriate
frame - calling frame required for expandTemplate()
returns sorted list on success; empty string else
]]
local function sort_common (result, ref, frame)
for i=#result, 1, -1 do
if not tonumber (result[i][1]) then -- if cannot be converted to a number
table.remove (result, i); -- delete
end
end
if 0 == #result then -- if we get here and the result table is empty
return ''; -- abandon returning empty string
end
table.sort (result, comp); -- sort what remains
for i, v in ipairs (result) do
result[i] = table.concat (result[i]); -- make each table in result{} a string
end
result[1] = table.concat ({result[1], ref and ref or ''}); -- add reference(s) from |<list> ref= to first item in the list
return frame:expandTemplate { title = 'Unbulleted list', args = result}; -- render the unbulleted list
end
--[[--------------------------< D I S R I B U T I O N _ S O R T >----------------------------------------------
{{#invoke:Infobox/utilities|distribution_sort|{{{percent urban|}}}|{{{percent rural|}}}|{{{distribution ref|}}} }}
]]
local function distribution_sort (frame)
local args=getArgs(frame);
local result = { -- initialize; table will be sorted according to values in result[n][1]
{args[1], '% urban'},
{args[2], '% rural'},
};
return sort_common (result, args[#result+1], frame);
end
--[[--------------------------< E T H N I C I T Y _ S O R T >--------------------------------------------------
{{#invoke:Infobox/utilities|ethnicity_sort|{{{percent white|}}}|{{{percent black|}}}|{{{percent asian|}}}|{{{percent hispanic|}}}|{{{percent native american|}}}|{{{percent native hawaiian|}}}|{{{percent more than one race|}}}|{{{percent other race|}}}|{{{ethnicity ref|}}} }}
]]
local function ethnicity_sort (frame)
local args=getArgs(frame);
local result = { -- initialize; table will be sorted according to values in result[n][1]
{args[1], '% [[White Americans|White]]'},
{args[2], '% [[African Americans|Black]]'},
{args[3], '% [[Asian Americans|Asian]]'},
{args[4], '% [[Hispanic and Latino Americans|Hispanic]]'},
{args[5], '% [[Native Americans in the United States|Native American]]'},
{args[6], '% [[Pacific Islander Americans]]'},
{args[7], '% [[Multiracial Americans|Two or more races]]'},
{args[8], '% other'}, -- TODO: make other always last?
};
return sort_common (result, args[#result+1], frame);
end
--[[--------------------------< O C C U P A T I O N _ S O R T >------------------------------------------------
{{#invoke:Infobox/utilities|distribution_sort|{{{percent blue collar|}}}|{{{percent white collar|}}}|{{{percent grey collar|}}}|{{{occupation ref|}}} }}
]]
local function occupation_sort (frame)
local args=getArgs(frame);
local result = { -- initialize; table will be sorted according to values in result[n][1]
{args[1], '% [[Blue-collar worker|Blue-collar]]'},
{args[2], '% [[White-collar worker|White-collar]]'},
{args[3], '% [[Gray-collar]]'},
};
return sort_common (result, args[#result+1], frame)
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
distribution_sort = distribution_sort, -- {{Infobox U.S. congressional district}}
ethnicity_sort = ethnicity_sort,
occupation_sort = occupation_sort,
set_italics = set_italics, -- {{Infobox book}}
interlang_wikisource_link_make = interlang_wikisource_link_make,
}
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.