Conan Exiles Wiki
Register
No edit summary
No edit summary
 
(37 intermediate revisions by 2 users not shown)
Line 3: Line 3:
 
local util_vars = require("Module:VarsUtil")
 
local util_vars = require("Module:VarsUtil")
 
local cache = require('mw.ext.LuaCache')
 
local cache = require('mw.ext.LuaCache')
local PREFIX = 'ITEMLINK_04'
+
local PREFIX = 'ITEMLINK_08'
 
local lang = mw.getLanguage('en')
 
local lang = mw.getLanguage('en')
   
Line 11: Line 11:
   
 
function p.Main(frame)
 
function p.Main(frame)
local args = util_args.merge()
+
local args = util_args.mergeKeepEmpty()
 
local text = ""
 
local text = ""
 
local inpLemma = args[1]
 
local inpLemma = args[1]
local inpText = args[2]
+
local inpText = args[2] or ''
  +
local iconOnly = util_args.castAsBool(args.iconOnly)
  +
  +
-- supported icon size: 32px, 64px and 128px
  +
local iconSize = args.size or '32'
  +
if iconSize == '128px' then
  +
iconSize = '128'
  +
end
  +
-- if iconSize ~= '64px' and iconSize ~= '128px' and iconSize ~= '64' and iconSize ~= '128' then
  +
-- iconSize = '32'
  +
-- end
  +
-- local iconWrapperPostfix = ''
  +
-- if iconSize == '128' or iconSize == '128px' then
  +
-- iconWrapperPostfix = '128'
  +
-- elseif iconSize == '64' or iconSize == '64px' then
  +
-- iconWrapperPostfix = '64'
  +
-- end
  +
 
local key = h.getKey(inpLemma)
 
local key = h.getKey(inpLemma)
 
local result
 
local result
  +
 
if util_args.castAsBool(args.force) then
 
if util_args.castAsBool(args.force) then
 
result = h.getFromCargoAndUpdateCache(inpLemma, key)
 
result = h.getFromCargoAndUpdateCache(inpLemma, key)
Line 26: Line 44:
 
end
 
end
 
 
  +
local text = '<span class="icon-container-' .. iconSize .. '">'
  +
  +
-- background image
  +
local backgroundImage = result["imageBackground"] or ""
  +
if backgroundImage ~= "" then
  +
backgroundImage = backgroundImage:sub(1, backgroundImage:find(".", 1, true)-1)
  +
end
  +
  +
-- the plain icon
 
text = text .. '<span class="icon-' .. iconSize .. ' ' .. backgroundImage .. '">[[File:' .. result['image'] .. '|' .. iconSize .. 'px|link=' .. result['_pageName'] .. '|frameless]]</span>'
  +
  +
-- border overlay
  +
local imageOverlay = result['imageOverlay'] or ""
  +
if imageOverlay ~= "" then
  +
text = text .. '<span class="icon-overlay-' .. imageOverlay .. '-' .. iconSize .. '"></span>'
  +
end
  +
  +
-- dlc overlay
 
if result['dlcPackage'] ~= "" then
 
if result['dlcPackage'] ~= "" then
  +
text = text .. '<span class="icon-overlay-dlc-' .. iconSize .. '"></span>'
-- text = '<span style="position: relative; display: inline-block;"><span style="display: block;">[[File:' .. result['image'] .. '|32px|link=' .. result['_pageName'] .. '|frameless]]</span><span class="item-link-dlc-image">[[File:T DLC icon.png|32px|link=' .. result['_pageName'] .. ']]</span></span>'
 
  +
end
text = '<span class="dlc-image-wrapper">[[File:' .. result['image'] .. '|32px|link=' .. result['_pageName'] .. '|frameless]]</span>'
 
  +
else
 
  +
text = text .. '</span>'
-- text = '[[File:' .. result['image'] .. '|32px|link=' .. result['_pageName'] .. '|frameless]]'
 
  +
text = '[[File:' .. result['image'] .. '|32px|link=' .. result['_pageName'] .. '|frameless]]'
 
 
--local text = '[[File:' .. result['image'] .. '|' .. iconSize .. '|link=' .. result['_pageName'] .. '|frameless]]'
  +
-- dlc layer wrapper
  +
--if result['dlcPackage'] ~= "" then
  +
-- text = '<span class="dlc-image-wrapper' .. iconWrapperPostfix .. '">' .. text .. '</span>'
  +
--end
  +
-- epic border wrapper
  +
--if util_args.castAsBool(result['epicBorder']) then
  +
-- text = '<span class="epic-border-wrapper' .. iconWrapperPostfix .. '">' .. text .. '</span>'
  +
--end
  +
  +
-- border wrapper
  +
--local imageOverlay = result['imageOverlay'] or ""
  +
--if imageOverlay ~= "" then
  +
-- text = '<span class="' .. imageOverlay ..'-border-wrapper' .. iconWrapperPostfix .. '">' .. text .. '</span>'
  +
--end
  +
  +
if not iconOnly then
 
text = text .. '&nbsp;[['.. result['_pageName'] .. '|' .. h.switchString(result['_pageName'], inpText) ..']]'
 
util_vars.setVar('IL_O_' .. inpLemma .. '_' .. inpText, text)
 
end
 
end
   
text = text .. '&nbsp;[['.. result['_pageName'] .. '|' .. h.switchString(result['_pageName'], inpText) ..']]'
+
--text = 'x' .. tostring(args[1]).. '/'..tostring(args[2]).. '/'..tostring(iconOnly).. 'x'
util_vars.setVar('IL_O_' .. inpLemma, text)
 
 
return text
 
return text
 
end
 
end
Line 76: Line 130:
 
function h.getFromCargoAndUpdateCache(str, key)
 
function h.getFromCargoAndUpdateCache(str, key)
 
local tables = 'Item'
 
local tables = 'Item'
local fields = '_pageName,image,dlcPackage'
+
local fields = '_pageName,image,epicBorder,imageOverlay,dlcPackage,imageBackground'
 
local query = {
 
local query = {
 
where = 'uniqueName = "' .. str .. '" ',
 
where = 'uniqueName = "' .. str .. '" ',

Latest revision as of 06:32, 22 August 2023

local util_args = require("Module:ArgsUtil")
local util_cache = require("Module:CacheUtil")
local util_vars = require("Module:VarsUtil")
local cache = require('mw.ext.LuaCache')
local PREFIX = 'ITEMLINK_08'
local lang = mw.getLanguage('en')

local p = {}
local h = {}
local cargo = mw.ext.cargo

function p.Main(frame)
	local args = util_args.mergeKeepEmpty()
	local text = ""
	local inpLemma = args[1]
	local inpText  = args[2] or ''
	local iconOnly = util_args.castAsBool(args.iconOnly)
	
	-- supported icon size: 32px, 64px and 128px
	local iconSize = args.size or '32'
	if iconSize == '128px' then
		iconSize = '128'
	end
	-- if iconSize ~= '64px' and iconSize ~= '128px' and iconSize ~= '64' and iconSize ~= '128' then
	-- 	iconSize = '32'
	-- end
	-- local iconWrapperPostfix = ''
	-- if iconSize == '128' or iconSize == '128px' then
	-- 	iconWrapperPostfix = '128'
	-- elseif iconSize == '64' or iconSize == '64px' then
	-- 	iconWrapperPostfix = '64'
	-- end
	
	local key = h.getKey(inpLemma)
	local result
	
	if util_args.castAsBool(args.force) then
		result = h.getFromCargoAndUpdateCache(inpLemma, key)
	else
		result = h.getFromVariablesOrCache(inpLemma, key)
	end
	if not result then
		return '[[' .. h.switchString(inpLemma, inpText) .. ']]'
	end
	
	local text = '<span class="icon-container-' .. iconSize .. '">'
	
	-- background image
	local backgroundImage = result["imageBackground"] or ""
	if backgroundImage ~= "" then
		backgroundImage = backgroundImage:sub(1, backgroundImage:find(".", 1, true)-1)
	end
	
	-- the plain icon
	text = text .. '<span class="icon-' .. iconSize .. ' ' .. backgroundImage .. '">[[File:' .. result['image'] .. '|' .. iconSize .. 'px|link=' .. result['_pageName'] .. '|frameless]]</span>'
	
	-- border overlay
	local imageOverlay = result['imageOverlay'] or ""
	if imageOverlay ~= "" then
		text = text .. '<span class="icon-overlay-' .. imageOverlay .. '-' .. iconSize .. '"></span>'
	end
	
	-- dlc overlay
	if result['dlcPackage'] ~= "" then
		text = text .. '<span class="icon-overlay-dlc-' .. iconSize .. '"></span>'
	end

	text = text .. '</span>'
	
	--local text = '[[File:' .. result['image'] .. '|' .. iconSize .. '|link=' .. result['_pageName'] .. '|frameless]]'
	-- dlc layer wrapper
	--if result['dlcPackage'] ~= "" then
	--	text = '<span class="dlc-image-wrapper' .. iconWrapperPostfix .. '">' .. text .. '</span>'
	--end
	-- epic border wrapper
	--if util_args.castAsBool(result['epicBorder']) then
	--	text = '<span class="epic-border-wrapper' .. iconWrapperPostfix .. '">' .. text .. '</span>'
	--end

	-- border wrapper
	--local imageOverlay = result['imageOverlay'] or ""
	--if imageOverlay ~= "" then
	--	text = '<span class="' .. imageOverlay ..'-border-wrapper' .. iconWrapperPostfix .. '">' .. text .. '</span>'
	--end

	if not iconOnly then
		text = text .. '&nbsp;[['.. result['_pageName'] .. '|' .. h.switchString(result['_pageName'], inpText) ..']]'
		util_vars.setVar('IL_O_' .. inpLemma .. '_' .. inpText, text)
	end

	--text = 'x' .. tostring(args[1]).. '/'..tostring(args[2]).. '/'..tostring(iconOnly).. 'x'
	return text
end

function p.updateCache(frame)
	-- this method returns nothing & just exists to query & update the LuaCache object
	-- it's called from the infobox so that when the page is saved, the cache will be updated
	local args = util_args.merge()
	local str = args[1]
	if not str then return end
	local key = h.getKey(str)
	h.getFromCargoAndUpdateCache(str, key)
end

-- the following code extracts the result from either:
-- (a) a LuaVariables result stored earlier on the page; or
-- (b) a LuaCache object of the lowercase name; or finally
-- (c) an actual Cargo query to retrieve the information from the page
-- we avoid doing a Cargo query at all costs because Cargo queries are extremely expensive

-- this was not premature optimization; the wiki was actually experiencing errors
-- prior to this optimization being added
-- this code was adapted from Module:Team on Leaguepedia
-- contact River for questions

function h.getKey(str)
	return PREFIX .. lang:lc(str)
end

function h.getFromVariablesOrCache(str, key)
	return util_vars.getObject(key) or h.getFromCacheOrCargo(str, key)
end

function h.getFromCacheOrCargo(str, key)
	local result = cache.get(key) or h.getFromCargoAndUpdateCache(str, key)
	util_vars.setObject(key, result)
	return result
end

function h.getFromCargoAndUpdateCache(str, key)
	local tables = 'Item'
	local fields = '_pageName,image,epicBorder,imageOverlay,dlcPackage,imageBackground'
	local query = {
		where = 'uniqueName = "' .. str .. '" ',
		limit = 1
	}
	local result = cargo.query( tables, fields, query )[1]
	cache.set(key, result)
	return result
end

-- end luacache wrapper

function h.switchString(str1, str2)
	if str2 == nil then return str1 end
	if str2 == '' then return str1 end
	return str2
end

return p