Editing Module:Infobox
Jump to navigation
Jump to search
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 4: | Line 4: | ||
-- <nowiki> |
-- <nowiki> |
||
-- Edit button for unknown params |
|||
require('strict') |
|||
local editbutton = require('Module:Edit button') |
local editbutton = require('Module:Edit button') |
||
local smwutils = require('Module:SMW Utils') |
|||
local Infobox = {} |
local Infobox = {} |
||
Infobox.__index = Infobox |
Infobox.__index = Infobox |
||
--[[ |
--[[ |
||
Line 24: | Line 24: | ||
args_smw = {}, -- parameters parsed for smw |
args_smw = {}, -- parameters parsed for smw |
||
infobox_name = nil, -- template name |
infobox_name = nil, -- template name |
||
classes = {}, -- list of classes to add, using the default_version |
|||
param_names = {}, -- ordered param list |
param_names = {}, -- ordered param list |
||
params = {}, -- param definitions |
params = {}, -- param definitions |
||
Line 32: | Line 31: | ||
version_names = {}, -- title of each version (for selection and SMW) |
version_names = {}, -- title of each version (for selection and SMW) |
||
rtable = nil, -- infobox table to return at the end |
rtable = nil, -- infobox table to return at the end |
||
switch_datatable = |
switch_datatable = nil, -- datatable for javascript for switch infoboxes |
||
categories = {}, -- set of categories |
categories = {}, -- set of categories |
||
errors = {}, -- list of errors |
errors = {}, -- list of errors |
||
Line 59: | Line 58: | ||
--]] |
--]] |
||
function Infobox.param(param_name) |
function Infobox.param(param_name) |
||
param = { |
|||
property = 'args_parsed', |
property = 'args_parsed', |
||
param_name = param_name, |
param_name = param_name, |
||
Line 72: | Line 71: | ||
--]] |
--]] |
||
function Infobox.raw_param(param_name) |
function Infobox.raw_param(param_name) |
||
param = { |
|||
property = 'args_raw', |
property = 'args_raw', |
||
param_name = param_name, |
param_name = param_name, |
||
Line 85: | Line 84: | ||
--]] |
--]] |
||
function Infobox.smw_param(param_name) |
function Infobox.smw_param(param_name) |
||
param = { |
|||
property = 'args_smw', |
property = 'args_smw', |
||
param_name = param_name, |
param_name = param_name, |
||
Line 172: | Line 171: | ||
_cell:wikitext(content) |
_cell:wikitext(content) |
||
-- Add the switch data if multiple values exist |
-- Add the switch data if multiple values exist |
||
data_attr_param = self:add_switch_data(v.content) |
|||
if data_attr_param then |
if data_attr_param then |
||
_cell:attr('data-attr-param', data_attr_param) |
_cell:attr('data-attr-param', data_attr_param) |
||
Line 195: | Line 194: | ||
return self |
return self |
||
end |
end |
||
--[[ |
--[[ |
||
Line 209: | Line 209: | ||
-- config: table containing configuration parameters |
-- config: table containing configuration parameters |
||
---- infobox_name = mandatory unique identifier for this infobox, used for css |
---- infobox_name = mandatory unique identifier for this infobox, used for css |
||
---- |
---- max_buttuons = max number of switch buttons before using a dropdown list instead |
||
--]] |
--]] |
||
function Infobox:config(config) |
function Infobox:config(config) |
||
Line 217: | Line 217: | ||
elseif k == 'max_buttons' then |
elseif k == 'max_buttons' then |
||
self.max_buttons = tonumber(v) |
self.max_buttons = tonumber(v) |
||
elseif k == 'class' then |
|||
if type(v) == 'string' then |
|||
⚫ | |||
elseif type(v) == 'table' then |
|||
self.classes = v |
|||
⚫ | |||
end |
end |
||
end |
end |
||
Line 238: | Line 232: | ||
--]] |
--]] |
||
function Infobox:parse_versions() |
function Infobox:parse_versions() |
||
local function insert_version_name(version_name) |
|||
⚫ | |||
if smwutils.valid_subobject_name(version_name) == false then |
|||
table.insert(self.errors, 'Illegal version value: must not be "0" nor contain a "." in the first five characters') |
|||
end |
|||
end |
|||
-- Count the versions and setup self.version_names |
-- Count the versions and setup self.version_names |
||
local i = 1 |
local i = 1 |
||
while self.args_raw['version'..i] do |
while self.args_raw['version'..i] do |
||
table.insert(self.version_names, self.args_raw['version'..i]) |
|||
i = i + 1 |
i = i + 1 |
||
end |
end |
||
self.versions = i - 1 |
self.versions = i - 1 |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
-- Should either have 0 or 2+ versions |
-- Should either have 0 or 2+ versions |
||
if self.versions == 1 then |
if self.versions == 1 then |
||
table.insert(self.errors, 'There should be multiple versions or no versions. If defining a custom version name for a single entry, use "version=Name" instead of "version1=Name".') |
table.insert(self.errors, 'There should be multiple versions or no versions. If defining a custom version name for a single entry, use "version=Name" instead of "version1=Name".') |
||
⚫ | |||
end |
|||
⚫ | |||
⚫ | |||
insert_version_name(self.args_raw['version'] or 'DEFAULT') |
|||
self.versions = 1 |
|||
end |
end |
||
-- Check for a default_version |
-- Check for a default_version |
||
Line 369: | Line 356: | ||
local func_params = func.params |
local func_params = func.params |
||
local func_fetched_params = {} |
local func_fetched_params = {} |
||
local i = 1 |
|||
for _, func_param in ipairs(func_params) do |
for _, func_param in ipairs(func_params) do |
||
func_fetched_params |
table.insert(func_fetched_params, self:get_param(func_param, version)) |
||
i = i + 1 |
|||
end |
end |
||
return func_name(unpack(func_fetched_params)) |
return func_name(unpack(func_fetched_params)) |
||
Line 411: | Line 396: | ||
:addClass('infobox') |
:addClass('infobox') |
||
:addClass('infobox-'..self.infobox_name) |
:addClass('infobox-'..self.infobox_name) |
||
⚫ | |||
local class_name = self:get_param(class, self.default_version) |
|||
if type(class_name) == 'string' then |
|||
self.rtable:addClass('infobox-'..mw.ustring.gsub(class_name, '%s', '_')) |
|||
end |
|||
end |
|||
-- Create the switch datatable if multiple versions |
-- Create the switch datatable if multiple versions |
||
if self.versions > 1 then |
if self.versions > 1 then |
||
Line 424: | Line 403: | ||
:addClass('infobox-resources-'..self.infobox_name) |
:addClass('infobox-resources-'..self.infobox_name) |
||
:addClass('hidden') |
:addClass('hidden') |
||
self.switch_datatable:tag('span'):wikitext('Versions: '..self.versions) |
|||
self.switch_datatable:tag('span'):wikitext('Default version: '..self.default_version) |
|||
end |
end |
||
return self |
return self |
||
Line 441: | Line 422: | ||
:tag('div') |
:tag('div') |
||
:addClass('infobox-buttons') |
:addClass('infobox-buttons') |
||
:attr('data-default- |
:attr('data-default-version', self.default_version) |
||
-- Dropdown list instead of buttons if too many versions |
-- Dropdown list instead of buttons if too many versions |
||
if self.versions > self.max_buttons then |
if self.versions > self.max_buttons then |
||
Line 448: | Line 429: | ||
-- Create all the buttons |
-- Create all the buttons |
||
for version=1, self.versions do |
for version=1, self.versions do |
||
buttons:tag('span') |
|||
:attr('data-switch-index', version) |
:attr('data-switch-index', version) |
||
:attr('data-switch-anchor', '#'..self.version_names[version]) |
:attr('data-switch-anchor', '#'..self.version_names[version]) |
||
:addClass('button') |
:addClass('button') |
||
:wikitext(self.version_names[version]) |
:wikitext(self.version_names[version]) |
||
-- In case of dropdown list, hide the buttons as the switch gadget will convert them to a dropdown list - we can't directly create the dropdown list here as the select/option tags are rejected by wikitext |
|||
if self.versions > self.max_buttons then |
|||
button:addClass('hidden') |
|||
end |
|||
end |
end |
||
end |
end |
||
Line 468: | Line 445: | ||
-- Generate a subobject name |
-- Generate a subobject name |
||
-- Reminder - subobject name cannot have a . in the first 5 characters |
-- Reminder - subobject name cannot have a . in the first 5 characters |
||
local subobject_name = self.version_names[version] |
local subobject_name = 'Infobox.'..mw.title.getCurrentTitle().fullText..'#'..self.version_names[version] |
||
-- Store each param that has smw_property defined and is not nil |
-- Store each param that has smw_property defined and is not nil |
||
local subobject = { |
local subobject = {} |
||
for _, param_name in ipairs(self.param_names) do |
for _, param_name in ipairs(self.param_names) do |
||
local property = self.params[param_name].smw_property |
local property = self.params[param_name].smw_property |
||
if property then |
if property then |
||
value = self:get_param(self.smw_param(param_name), version) |
|||
if value ~= nil then |
if value ~= nil then |
||
subobject[property] = value |
subobject[property] = value |
||
Line 484: | Line 461: | ||
-- Save subobjects if not in mainspace |
-- Save subobjects if not in mainspace |
||
if mw.title.getCurrentTitle():inNamespace(0) then |
if mw.title.getCurrentTitle():inNamespace(0) then |
||
local result = |
local result = mw.smw.subobject(subobject, subobject_name) |
||
if self.versions == 1 then |
|||
result = mw.smw.set(subobject) |
|||
else |
|||
result = mw.smw.subobject(subobject, subobject_name) |
|||
end |
|||
if result ~= true then |
if result ~= true then |
||
table.insert(self.errors, 'SMW error: '..result.error) |
table.insert(self.errors, 'SMW error: '..result.error) |
||
Line 527: | Line 499: | ||
--]] |
--]] |
||
function Infobox:add_switch_data(content) |
function Infobox:add_switch_data(content) |
||
if self.versions < |
if self.versions <= 1 then |
||
return false |
return false |
||
end |
end |
||
Line 555: | Line 527: | ||
name = 'smw__' + name |
name = 'smw__' + name |
||
end |
end |
||
data_param = self.switch_datatable:tag('span'):attr('data-attr-param', name) |
|||
-- Add each version to the datatable |
-- Add each version to the datatable |
||
for version=1, self.versions do |
for version=1, self.versions do |
||
text = self:get_param(content, version) |
|||
if text == nil then |
if text == nil then |
||
text = self.params[content.param_name].empty |
text = self.params[content.param_name].empty |
||
Line 580: | Line 552: | ||
-- Create categories |
-- Create categories |
||
local category_text = '' |
local category_text = '' |
||
⚫ | |||
if mw.title.getCurrentTitle():inNamespace(0) then |
|||
⚫ | |||
for key, _ in pairs(self.categories) do |
|||
⚫ | |||
end |
|||
end |
|||
local dump = '' |
|||
if self.args_raw.__dump then |
|||
setmetatable(self, nil) |
|||
dump = '<nowiki>'..mw.dumpObject(self)..'</nowiki>' |
|||
setmetatable(self, Infobox) |
|||
end |
end |
||
return tostring(self.rtable) .. tostring(self.switch_datatable) .. error_text .. category_text |
return tostring(self.rtable) .. tostring(self.switch_datatable) .. error_text .. category_text |
||
end |
end |
||