Difference between revisions of "Module:Icon"

From Foundation - Wiki
Jump to navigation Jump to search
 
(21 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')
require('Module:Icon/data')


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]
mw.log('Requirements ' .. resource .. ' ' .. value)
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) == false then
if not com.exists(link) then
link = resource['link']
link = resource['link']
end
end
Line 16: Line 24:
--No point trimming the value if it won't be used
--No point trimming the value if it won't be used
value = com.trim(value)
value = com.trim(value)
--Check after trim as may be whitespace only
--Check after trim as may be whitespace only
if com.exists(value) == true then
if com.exists(value) then
value = ' (' .. value .. ')'
value = ' (' .. value .. ')'
else
value = ''
end
end
 
result = '[[file:'  
result = '[[file:'  
.. resource['file']  
.. resource['file']  
Line 28: Line 37:
.. ']]'
.. ']]'
if com.exists(text) == true then
if com.exists(text) then
if string.lower(text) ~= 'no' then
if string.lower(text) ~= 'no' then
result = result .. '[['
result = result .. '[['
Line 35: Line 44:
end
end
end
end
result = result .. value
else
else
result = 'Icon does not exist[[Category:Missing Icon]]'
result = 'Icon does not exist[[Category:Missing Icon]]'
Line 48: 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)
list = mw.text.split(frame.args[1], ';')
if string.match(string.lower(frame.args[1]), '%[%[file:') ~= nil then
result = ''
return frame.args[1] .. '[[Category:Material List with Embedded Templates]]'
for k, v in ipairs(list) do
else
vs = mw.text.split(v, '-')
list = string.gsub(string.gsub(frame.args[1], '%[%[', ''), '%]%]', '')
mw.log(vs[1] .. ' ' .. vs[2] .. '\n')
mw.log(list)
result = result .. _requirements(vs[1], vs[2], nil, frame.args['text'])
list = mw.text.split(list, ';')
if k ~= table.getn(list) then
result = ''
result = result .. '<br />'
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
end
end
Line 70: 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 91: 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