Difference between revisions of "Module:Silent1/sandbox"

From Idlescape Wiki
Jump to navigation Jump to search
m
m
Line 15: Line 15:
 
local loaded_data_modules = {}
 
local loaded_data_modules = {}
  
 +
--Load data modules
 
function p.loadData (data_type)  
 
function p.loadData (data_type)  
 
local module_name = data_module_names[data_type]
 
local module_name = data_module_names[data_type]
if loaded_data_modules[module_name] == nil then
+
if loaded_data_modules[data_type] == nil then
loaded_data_modules[module_name] = mw.loadData(module_name)
+
loaded_data_modules[data_type] = mw.loadData(module_name)
 
end
 
end
 
return loaded_data_modules[module_name]
 
 
end
 
end
  
 
--Search the item data for item name and return its id
 
--Search the item data for item name and return its id
 
function p.findItemID(name)
 
function p.findItemID(name)
local items = p.loadData('item')
+
p.loadData('item')
 +
local items = loaded_data_modules['items']
 
local lname = string.lower(name)
 
local lname = string.lower(name)
 
local id = nil
 
local id = nil
Line 43: Line 43:
 
local id
 
local id
 
name = string.lower(name)
 
name = string.lower(name)
local image = p.loadData('other')[name]
+
p.loadData('other')
 +
local image = loaded_data_modules['other'][name]
 
 
 
--If name is a number, pass in as an item ID
 
--If name is a number, pass in as an item ID
Line 54: Line 55:
 
--If id is valid
 
--If id is valid
 
if id then
 
if id then
local item = p.loadData('item')[id]
+
p.loadData('item')
 +
local item = loaded_data_modules['items'][id]
 
local url = item['itemImage']
 
local url = item['itemImage']
 
local icon = item['itemIcon']
 
local icon = item['itemIcon']
Line 107: Line 109:
 
end
 
end
  
 +
--Used through a template
 
function p.image(frame)
 
function p.image(frame)
 
return p._image(frame:getParent())
 
return p._image(frame:getParent())
 
end
 
end
  
 +
--For directly invoking
 
function p._image(frame)
 
function p._image(frame)
 
origArgs = frame.args
 
origArgs = frame.args

Revision as of 18:28, 14 February 2022


local p = {}
local origArgs = {}
local name
local width = 'auto'
local height = 'auto'
local add_word
local only_url
local no_link
local link

local data_module_names = {
	item = 'Module:Items/data',
	other = 'Module:OtherImages/data'
}
local loaded_data_modules = {}

--Load data modules
function p.loadData (data_type) 
	local module_name = data_module_names[data_type]
	if loaded_data_modules[data_type] == nil then
		loaded_data_modules[data_type] = mw.loadData(module_name)
	end
end

--Search the item data for item name and return its id
function p.findItemID(name)
	p.loadData('item')
	local items = loaded_data_modules['items']
	local lname = string.lower(name)
	local id = nil
	
	for k,v in pairs(items) do
		if lname == string.lower(v['name']) then 
			id = k
			return id
		end
	end
	return id
end

--Find the image from the name
function p.findImage(name)
	local id
	name = string.lower(name)
	p.loadData('other')
	local image = loaded_data_modules['other'][name]
	
	--If name is a number, pass in as an item ID
	if tonumber(name) then
		id = name
	else 
		id = p.findItemID(name)
	end
		
	--If id is valid
	if id then
		p.loadData('item')
		local item = loaded_data_modules['items'][id]
		local url = item['itemImage']
		local icon = item['itemIcon']
		local realname = item['name']
		
		if icon then url = icon end
		image = {name = realname, image = url}
		
		if not (image['name'] and image['image']) then
			image = nil
		end
	end
	
	return image
end

--Create a string to output
local function _image()
	local image = p.findImage(name)
	local s = ''
	local rs = nil
	
	if image then 
		local realname = image['name']
		local url = image['image']
		
		if url:sub(1,1) ~= '/' then url = '/' .. url end
		url = 'https://idlescape.com' .. url
		s = url
		
		if only_url == '1' then rs = s end
		
		s = 'src="' .. s .. '"'
		s = s .. ' alt="' .. realname .. '"'
		s = s .. ' width="' .. width .. '"'
		s = s .. ' height="' .. height .. '"'
		s = '<img ' .. s .. '>'
		
		if add_word == '1' then 
			s = s .. ' ' .. realname
		end
		
		if no_link == '1' then rs = s end
		
		if not (link and link:match('%S')) then link = realname end
		s = '[[' .. link .. '|' .. s .. ']]'
	else
		s = '[[' .. name .. ']]' .. '{{?}}'
	end
	if not rs then rs = s end 
	return rs
end

--Used through a template
function p.image(frame)
	return p._image(frame:getParent())
end

--For directly invoking
function p._image(frame)
	origArgs = frame.args
	name = origArgs[1]
	arg = origArgs[2]
	if not arg then 
		width = 20 
	else arg:match('%S')
		width = arg
	end
	arg = origArgs[3]
	if arg and arg:match('%S') then height = arg end
	add_word = origArgs['word']
	only_url = origArgs['url']
	no_link = origArgs['nolink']
	link = origArgs['link']
	
	if not name then return '' end
	return _image()
end

return p