This module has no documentation. If you know how to use this module, please add some.
| This module depends on: |
-- <nowiki>
--------------------------------------------------------------------------------
-- Converted from [[Template:ItemLink]]
--
-- @module itemLink
-- @alias p
-- @require Module:WsBool
-- @require Module:Arguments
-- @require Module:ItemLink/nameList
-- @require Module:ItemLink/levelList
-- @require Module:ItemLink/foodIconList
-- @author [[User:ExE Boss]]
--------------------------------------------------------------------------------
local libraryUtil = require("libraryUtil");
local wsBool = require("Module:WsBool");
local getArgs = require("Module:Arguments").getArgs;
local nameOverrides = mw.loadData("Module:ItemLink/nameList");
local levelList = mw.loadData("Module:ItemLink/levelList");
local foodIconList = mw.loadData("Module:ItemLink/foodIconList");
local p = {};
--------------------------------------------------------------------------------
-- Strips characters that are invalid in MediaWiki page titles.
--
-- @param {string} text
-- @return {string}
--------------------------------------------------------------------------------
local function fixLink(text)
return (mw.ustring.gsub(text, "[%#%<%>%[%]%{%}%|]", ""))
end
--------------------------------------------------------------------------------
-- The main entrypoint
--
-- @function p.main
-- @param {Frame|table} args
-- @param {string} args[1] The item name
-- @return {string|number|nil}
--------------------------------------------------------------------------------
function p.main(frame)
local args = getArgs(frame);
libraryUtil.checkType("_main", 1, args, "table");
args = p.validateArgs(args);
if (args.levelOverride) then
local level = levelList[args.name];
if (level == "ascended" and not args.allowAscended) then
level = nil;
end
return level;
end
return p.createItemLink(args);
end
--------------------------------------------------------------------------------
-- @function p.valiadateArgs
-- @param {table} args
-- @return {table}
--------------------------------------------------------------------------------
function p.validateArgs(args)
libraryUtil.checkType("validateArgs", 1, args, "table");
local name = args[1];
libraryUtil.checkType("validateArgs", 1, name, "string", true);
local result = {};
result.name = name;
result.levelOverride = wsBool(args.levelOverride) or false;
if (result.levelOverride) then
result.allowAscended = wsBool(args.allowAscended) or false;
return result;
end
local nowrap = wsBool(args.nowrap, true);
nowrap = nowrap == nil and true or nowrap;
result.nowrap = nowrap;
local showLevel = not wsBool(args.noLevel);
if (showLevel == true) then
local level = args.level;
if (level ~= "ascended") then
if (type(level) == "string") then
level = tonumber(level) or level;
end
libraryUtil.checkTypeForNamedArg("validateArgs", "level", level, "number", true);
level = level or levelList[name];
end
result.level = level ~= 0 and level;
end
local foodIcon = args.foodIcon;
libraryUtil.checkTypeForNamedArg("validateArgs", "foodIcon", foodIcon, "string", true);
if (not foodIcon and wsBool(args.showFoodIcon)) then
foodIcon = foodIconList[name];
end
result.foodIcon = foodIcon;
result.showIcon = not wsBool(args.noIcon);
local displayName = args.showName;
libraryUtil.checkTypeForNamedArg("validateArgs", "showName", displayName, "string", true);
if ((displayName == nil) and not wsBool(args.noRename)) then
displayName = nameOverrides[name];
result.autoRenamed = displayName ~= nil;
else
result.autoRenamed = false;
end
result.displayName = displayName or name;
result.link = not wsBool(args.noLink);
return result;
end
--------------------------------------------------------------------------------
-- @function p.createItemLink
-- @param {table} data
-- @return {string}
--------------------------------------------------------------------------------
function p.createItemLink(args)
libraryUtil.checkType("createItemLink", 1, args, "table");
local root = mw.html.create();
if (not args or not args.name) then
root
:tag("strong")
:addClass("error")
:wikitext(string.format(
"Missing required parameter #1 to <code>%s[[Template:ItemLink|ItemLink]]%s</code>",
mw.text.nowiki('{{'), mw.text.nowiki('}}')
));
return tostring(root);
end
local current = root;
if (args.nowrap) then
current = current
:tag("span")
:addClass("nowrap")
:css("white-space", "nowrap");
end
local level = args.level;
if (level) then
local levelTag = current
:tag("span")
:addClass("itemLinkLevel");
if (level == "ascended") then
levelTag
:addClass("ascended")
:wikitext("LVL↑");
else
local levelString = level < 10 and "0"..tostring(level) or tostring(level);
levelTag
:wikitext("LV")
:tag("sub")
:wikitext(levelString)
end
end
if (args.foodIcon) then
current
:tag("span")
:addClass("itemLinkFood")
-- This needs to be set here as opposed to [[MediaWiki:Common.css]], so that it takes effect on the FandomMobile skin as well:
:cssText("image-rendering: -webkit-optimize-contrast; image-rendering: crisp-edges;")
:wikitext("[[File:", fixLink(args.foodIcon), "]]");
end
if (args.showIcon) then
local iconSize = "24x24px";
local iconTag = current
:tag("span")
:addClass("itemLinkIcon")
-- This needs to be set here as opposed to [[MediaWiki:Common.css]], so that it takes effect on the FandomMobile skin as well:
:cssText("image-rendering: -webkit-optimize-contrast; image-rendering: crisp-edges;");
if (level == "ascended") then
iconTag:addClass("ascended");
iconSize = "26x26px";
end
iconTag:wikitext("[[File:", fixLink(args.name), ".png|", iconSize, "]]");
end
if (args.autoRenamed) then
current:wikitext("[[Category:AutoRenamedItem]]");
end
if (args.link) then
current:wikitext(
"[[", fixLink(args.name),
"|", args.displayName);
if (args.autoRenamed) then
current:tag("sub"):wikitext("r");
end
current:wikitext("]]");
else
current:wikitext(args.displayName);
if (args.autoRenamed) then
current:tag("sub"):wikitext("r");
end
end
return tostring(root);
end
return p;