Difference between revisions of "Module:ItemLink"

From Conan Exiles Wiki
Jump to: navigation, search
([ST] setVar of the output)
([ST])
Line 32: Line 32:
 
end
 
end
 
text = text .. ' [['.. result['_pageName'] .. '|' .. h.switchString(result['_pageName'], inpText) ..']]'
 
text = text .. ' [['.. result['_pageName'] .. '|' .. h.switchString(result['_pageName'], inpText) ..']]'
util_vars.setVar('ITEMLINK_OUTPUT_' .. inpLemma, text)
+
util_vars.setVar('IL_O_' .. inpLemma, text)
 
return text
 
return text
 
end
 
end

Revision as of 08:59, 17 October 2020

Documentation for this module may be created at Module:ItemLink/doc

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_04'
local lang = mw.getLanguage('en')

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

function p.Main(frame)
	local args = util_args.merge()
	local text = ""
	local inpLemma = args[1]
	local inpText  = args[2]
	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
	
	if result['dlcPackage'] ~= "" then
		text = '<span style="position: relative; display: inline-block;"><span style="display: block;">[[File:' .. result['image'] .. '|32px|link=' .. result['_pageName'] .. '|frameless]]</span><span style="position: absolute; display: block; top: 0; bottom: 0; left: 0; right: 0;">[[File:T DLC icon.png|32px|link=' .. result['_pageName'] .. ']]</span></span>'
	else
		text = '[[File:' .. result['image'] .. '|32px|link=' .. result['_pageName'] .. '|frameless]]'
	end
	text = text .. '&nbsp;[['.. result['_pageName'] .. '|' .. h.switchString(result['_pageName'], inpText) ..']]'
	util_vars.setVar('IL_O_' .. inpLemma, text)
	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,dlcPackage'
	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