Difference between revisions of "Module:Icon"
Jump to navigation
Jump to search
(7 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
local p = {} | local p = {} | ||
local com = require('Module:Common') | local com = require('Module:Common') | ||
local function _requirements(resource, value, link, text) | |||
local function _requirements(resource, value, link, text, lang) | |||
--[[ Language switch isn't acctually needed, but stems from early design when | |||
all languages would have a single wiki, leaving in as this may change in the | |||
future ]] | |||
if lang and string.lower(lang) == 'en' then | |||
require('Module:Icon/en') | |||
else | |||
require('Module:Icon/en') -- if no language is supplied or code is invalid, fallback to english | |||
end | |||
resource = string.lower(com.trim(resource)) | resource = string.lower(com.trim(resource)) | ||
resource = iconList[resource] | resource = iconList[resource] | ||
Line 10: | Line 18: | ||
if resource ~= nil then | if resource ~= nil then | ||
-- Init link here, will be nil if resource is nil | -- Init link here, will be nil if resource is nil | ||
if com.exists(link) | if not com.exists(link) then | ||
link = resource['link'] | link = resource['link'] | ||
end | end | ||
Line 22: | Line 30: | ||
value = '' | value = '' | ||
end | end | ||
result = '[[file:' | result = '[[file:' | ||
.. resource['file'] | .. resource['file'] | ||
Line 50: | Line 57: | ||
l = frame.args['link'] | l = frame.args['link'] | ||
t = frame.args[1] | t = frame.args[1] | ||
return _requirements(r, v, l, t) | l = frame.args['lang'] | ||
return _requirements(r, v, l, t, l) | |||
end | end | ||
function p.icon(resource, value, link, text) | function p.icon(resource, value, link, text, lang) | ||
return _requirements(resource, value, link, text) | return _requirements(resource, value, link, text, lang) | ||
end | end | ||
function p.iconList(frame) | function p.iconList(frame) | ||
if string.match(string.lower(frame.args[1]), '%[%[file:') ~= nil then | if string.match(string.lower(frame.args[1]), '%[%[file:') ~= nil then | ||
return '[[Category:Material List with Embedded Templates]]' | return frame.args[1] .. '[[Category:Material List with Embedded Templates]]' | ||
else | else | ||
list = string.gsub(string.gsub(frame.args[1], '%[%[', ''), '%]%]', '') | list = string.gsub(string.gsub(frame.args[1], '%[%[', ''), '%]%]', '') | ||
Line 67: | Line 75: | ||
for k, v in ipairs(list) do | for k, v in ipairs(list) do | ||
vs = mw.text.split(v, '-') | vs = mw.text.split(v, '-') | ||
result = result .. _requirements(vs[1], vs[2], nil, frame.args['text']) | result = result .. _requirements(vs[1], vs[2], nil, frame.args['text'], frame.args['lang']) | ||
if k ~= table.getn(list) then | if k ~= table.getn(list) then | ||
result = result .. '<br />' | result = result .. '<br />' | ||
Line 77: | Line 85: | ||
end | end | ||
function p.documentation() | function p.documentation(frame) | ||
require('Module:Icon/en') | |||
keys = {} | keys = {} | ||
for z in pairs(iconList) do | for z in pairs(iconList) do | ||
Line 98: | Line 107: | ||
dataTable[i] = dataTable[i] | dataTable[i] = dataTable[i] | ||
.. '| ' .. v | .. '| ' .. v | ||
.. ' || ' .. _requirements(v, '', '', '') | .. ' || ' .. _requirements(v, '', '', '', '') | ||
.. ' || ' .. iconList[v]['link'] | .. ' || ' .. iconList[v]['link'] | ||
.. '\n|-\n' | .. '\n|-\n' |
Latest revision as of 17:08, 26 October 2022
Documentation for this module may be created at Module:Icon/doc
--<nowiki> local p = {} local com = require('Module:Common') local function _requirements(resource, value, link, text, lang) --[[ Language switch isn't acctually needed, but stems from early design when all languages would have a single wiki, leaving in as this may change in the future ]] if lang and string.lower(lang) == 'en' then require('Module:Icon/en') else require('Module:Icon/en') -- if no language is supplied or code is invalid, fallback to english end resource = string.lower(com.trim(resource)) resource = iconList[resource] if resource ~= nil then -- Init link here, will be nil if resource is nil if not com.exists(link) then link = resource['link'] end --No point trimming the value if it won't be used value = com.trim(value) --Check after trim as may be whitespace only if com.exists(value) then value = ' (' .. value .. ')' else value = '' end result = '[[file:' .. resource['file'] .. '|16px|link=' .. link .. ']]' if com.exists(text) then if string.lower(text) ~= 'no' then result = result .. '[[' .. link .. ']]' end end result = result .. value else result = 'Icon does not exist[[Category:Missing Icon]]' end return result end function p.requirements(frame) r = frame.args['resource'] v = frame.args['value'] l = frame.args['link'] t = frame.args[1] l = frame.args['lang'] return _requirements(r, v, l, t, l) end function p.icon(resource, value, link, text, lang) return _requirements(resource, value, link, text, lang) end function p.iconList(frame) if string.match(string.lower(frame.args[1]), '%[%[file:') ~= nil then return frame.args[1] .. '[[Category:Material List with Embedded Templates]]' else list = string.gsub(string.gsub(frame.args[1], '%[%[', ''), '%]%]', '') mw.log(list) list = mw.text.split(list, ';') result = '' for k, v in ipairs(list) do vs = mw.text.split(v, '-') result = result .. _requirements(vs[1], vs[2], nil, frame.args['text'], frame.args['lang']) if k ~= table.getn(list) then result = result .. '<br />' end end end return result end function p.documentation(frame) require('Module:Icon/en') keys = {} for z in pairs(iconList) do table.insert(keys, z) end table.sort(keys) dataTable = {[1] = '', [2] = '', [3] = ''} header = '\n{| class="wikitable"\n' .. '! Code !! Icon !! Link\n' .. '\n|-\n' footer = '|}' i = 1 while i < 4 do dataTable[i] = header i = i + 1 end i = 1 for k, v in ipairs(keys) do dataTable[i] = dataTable[i] .. '| ' .. v .. ' || ' .. _requirements(v, '', '', '', '') .. ' || ' .. iconList[v]['link'] .. '\n|-\n' if i == 3 then i = 1 else i = i + 1 end end i = 1 while i < 4 do dataTable[i] = dataTable[i] .. footer i = i + 1 end result = mw.html.create('div') result:css('display', 'grid') :css('grid-template-columns', '1fr 1fr 1fr') :wikitext(dataTable[1] .. dataTable[2] .. dataTable[3] .. '\n') return result end return p