Editing Module:Card
Appearance
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
| Latest revision | Your text | ||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
| Line 6: | Line 5: | ||
local TemplateData = require('Module:TemplateData') | local TemplateData = require('Module:TemplateData') | ||
local array = require('Module:Array') | local array = require('Module:Array') | ||
local allData = CentralData. | local allData = { | ||
-- {'Neighbor', mw.loadData('Module:CentralData/Neighbors')}, | |||
{'Creature', mw.loadData('Module:CentralData/Creatures')}, | |||
-- {'Furniture', mw.loadData('Module:CentralData/Furniture')}, | |||
{'Item', mw.loadData('Module:CentralData/Items')}, | |||
} | |||
-- Minimal TemplateData args. | |||
-- This does not need to be huge unless you want full documentation for every parameter. | |||
local CARD_ARGS = { | local CARD_ARGS = { | ||
{ | { | ||
| Line 28: | Line 33: | ||
name = 'quality', | name = 'quality', | ||
alias = 'rarity', | alias = 'rarity', | ||
default = ' | default = 'Gray', | ||
}, | }, | ||
{ | { | ||
name = 'type', | name = 'type', | ||
default = 'Item', | |||
}, | }, | ||
{ | { | ||
| Line 45: | Line 48: | ||
{ | { | ||
name = 'image_size', | name = 'image_size', | ||
alias = | alias = 'imageSize', | ||
}, | }, | ||
{ | { | ||
name = 'image_ext', | name = 'image_ext', | ||
alias = {'imageExt | alias = {'imageExt', 'extension'}, | ||
default = 'png', | default = 'png', | ||
}, | }, | ||
| Line 60: | Line 63: | ||
}, | }, | ||
{ | { | ||
name = ' | name = 'nolink', | ||
type = '1', | type = '1', | ||
}, | }, | ||
| Line 86: | Line 89: | ||
alias = 'UP', | alias = 'UP', | ||
type = '1', | type = '1', | ||
}, | |||
{ | |||
name = 'galaxy', | |||
}, | }, | ||
{ | { | ||
| Line 94: | Line 100: | ||
function p.main(frame) | function p.main(frame) | ||
local args = require('Module:Arguments').getArgs(frame, { | local args = require('Module:Arguments').getArgs(frame, { | ||
wrapper = {'Template:Card'}, | wrapper = { 'Template:Card' }, | ||
parentOnly = false | parentOnly = false | ||
}) | }) | ||
return p._main(args) | return p._main(args) | ||
end | end | ||
| Line 137: | Line 116: | ||
if lib.isEmpty(requestedType) or dataType == requestedType then | if lib.isEmpty(requestedType) or dataType == requestedType then | ||
local data = | local data = dataTable[name] | ||
if data then | if data then | ||
| Line 172: | Line 151: | ||
if lib.isEmpty(quality) then | if lib.isEmpty(quality) then | ||
quality = ' | quality = 'Gray' | ||
end | end | ||
return normalizeClassName(quality) | return normalizeClassName(quality) | ||
end | end | ||
| Line 191: | Line 163: | ||
node:css('width', width) | node:css('width', width) | ||
end | end | ||
end | end | ||
| Line 213: | Line 170: | ||
-- Basic identity | -- Basic identity | ||
out.name = out.name or 'Unknown' | out.name = out.name or 'Unknown' | ||
out.type, out.data = p.getTypeAndData( | -- Data lookup | ||
out.type, out.data = p.getTypeAndData(out.name, out.type) | |||
-- | -- Boolean-ish params | ||
out.mini = normalizeBool(out.mini) | out.mini = normalizeBool(out.mini) | ||
out.first = normalizeBool(out.first) | out.first = normalizeBool(out.first) | ||
out.up = normalizeBool(out.up) | out.up = normalizeBool(out.up) | ||
out. | out.nolink = normalizeBool(out.nolink) | ||
out.show_label = normalizeBool(out.show_label) | out.show_label = normalizeBool(out.show_label) | ||
out.show_caption = normalizeBool(out.show_caption) | out.show_caption = normalizeBool(out.show_caption) | ||
| Line 249: | Line 194: | ||
end | end | ||
-- Data-driven | -- Data-driven name | ||
out.data_name = out.data and out.data.name or nil | |||
-- Quality / rarity | |||
if lib.isEmpty(out.quality) and out.data and out.data.quality then | |||
out.quality = out.data.quality | |||
end | |||
out.quality = normalizeQuality(out.quality) | |||
-- Galaxy | |||
if lib.isEmpty(out.galaxy) and out.data and out.data.galaxy then | |||
out.galaxy = out.data.galaxy | |||
end | end | ||
-- | -- Label/text handling | ||
if out.show_label then | if out.show_label then | ||
out.label = out. | out.label = out.data_name or out.name | ||
end | end | ||
| Line 295: | Line 230: | ||
end | end | ||
-- Account for transparent borders on neighbor icons | |||
if tonumber(out.image_size) then | if tonumber(out.image_size) then | ||
out.image_size = tonumber(out.image_size) + 2 | out.image_size = tonumber(out.image_size) + 2 | ||
| Line 300: | Line 236: | ||
end | end | ||
-- Caption handling | |||
-- Caption | |||
if out.show_caption and lib.isEmpty(out.caption) then | if out.show_caption and lib.isEmpty(out.caption) then | ||
out.caption = out.data_name or out.name | |||
end | end | ||
-- Link handling | -- Link handling | ||
if out.link == nil then | if out.link == nil then | ||
out.link = lib.ternary( | out.link = lib.ternary(out.name == 'Unknown', '', out.name) | ||
end | end | ||
| Line 331: | Line 249: | ||
out.final_link = out.link .. out.link_suffix | out.final_link = out.link .. out.link_suffix | ||
if out. | if out.nolink then | ||
out.final_link = '' | out.final_link = '' | ||
end | end | ||
-- | -- File name | ||
if ne(out.image) then | if ne(out.image) then | ||
out.final_file = out.image | out.final_file = out.image | ||
else | else | ||
out.final_file = | out.final_file = lib.sanitizeFileName(out.name) .. out.suffix .. '.' .. out.image_ext | ||
end | end | ||
-- Main image wikitext | -- Main image wikitext | ||
local linkPart = out. | local linkPart = out.nolink and '|link=' or ('|link=' .. out.final_link) | ||
out.image_wikitext = table.concat({ | out.image_wikitext = table.concat({ | ||
| Line 357: | Line 269: | ||
out.image_size, | out.image_size, | ||
'px|alt=', | 'px|alt=', | ||
out.name, | |||
linkPart, | linkPart, | ||
']]' | ']]' | ||
| Line 368: | Line 279: | ||
function p._main(args) | function p._main(args) | ||
local a = p._processArgs(args) | local a = p._processArgs(args) | ||
local node_container = mw.html.create('div') | local node_container = mw.html.create('div') | ||
:addClass('card-container') | :addClass('card-container') | ||
if a.mini then | if a.mini then | ||
| Line 382: | Line 287: | ||
end | end | ||
-- | -- Old-style wrapper/body structure. | ||
-- This is usually important if your existing CSS was written for the old Card module. | |||
local node_card = node_container:tag('span') | local node_card = node_container:tag('span') | ||
:addClass('card-wrapper') | :addClass('card-wrapper') | ||
:tag('span') | :tag('span') | ||
:addClass('card-body') | :addClass('card-body') | ||
-- Main image container | -- Main image container | ||
node_card:tag('span') | |||
:addClass('card-image-container') | :addClass('card-image-container') | ||
:addClass('card-quality-' .. a.quality) | :addClass('card-quality-' .. a.quality) | ||
:wikitext(a.image_wikitext) | |||
-- | -- Galaxy icon | ||
if | if not a.mini and ne(a.galaxy) then | ||
node_card:addClass('card-galaxy-' .. normalizeClassName(a.galaxy)) | |||
node_card:tag('span') | |||
:addClass('card-icon-galaxy') | |||
:addClass('card- | :wikitext( | ||
: | '[[File:Icon ' .. | ||
a.galaxy .. | |||
'.png|alt=' .. | |||
a.galaxy .. | |||
'|link=' .. | |||
a.galaxy .. | |||
'|20px]]' | |||
) | |||
end | end | ||
| Line 431: | Line 329: | ||
:addClass('card-modifier') | :addClass('card-modifier') | ||
:addClass('card-modifier-first') | :addClass('card-modifier-first') | ||
:wikitext( | :wikitext('[[File:Icon Item First.png|x25px|link=|alt=First]]') | ||
end | end | ||
| Line 441: | Line 337: | ||
:addClass('card-modifier') | :addClass('card-modifier') | ||
:addClass('card-modifier-up') | :addClass('card-modifier-up') | ||
:wikitext( | :wikitext('[[File:Icon Item UP.png|x25px|link=|alt=UP]]') | ||
end | end | ||
-- Label below | -- Label/text below card image | ||
if ne(a.label) then | if ne(a.label) then | ||
node_container:tag('span') | node_container:tag('span') | ||
| Line 453: | Line 347: | ||
end | end | ||
-- Caption | -- Caption below card | ||
if a.show_caption and ne(a.caption) then | |||
if a.show_caption and | |||
local node_caption = node_container:tag('span') | local node_caption = node_container:tag('span') | ||
:addClass('card-caption') | :addClass('card-caption') | ||
if a.nolink or lib.isEmpty(a.final_link) then | |||
if a. | |||
node_caption:wikitext(a.caption) | node_caption:wikitext(a.caption) | ||
else | else | ||
node_caption:wikitext( | node_caption:wikitext('[[', a.final_link, '|', a.caption, ']]') | ||
end | end | ||
| Line 493: | Line 366: | ||
function p.templateData(frame) | function p.templateData(frame) | ||
return TemplateData.templateData(CARD_ARGS, { | return TemplateData.templateData(CARD_ARGS, { | ||
description = 'Creates an item-style card with image, quality, label, | description = 'Creates an item-style card with image, quality, label, caption, modifiers, and optional data-driven icons.', | ||
format = 'inline' | format = 'inline' | ||
}, frame) | }, frame) | ||