پودمان:Infobox: تفاوت میان نسخه‌ها

پرش به ناوبری پرش به جستجو
۸۴۳ بایت حذف‌شده ،  ‏۱۲ مهٔ ۲۰۲۲
بدون خلاصۀ ویرایش
جز (۱ نسخه واردشده)
بدون خلاصۀ ویرایش
خط ۴: خط ۴:
local root
local root
local empty_row_categories = {}
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[ر][د][ه]%s*:[^]]*]]'
local category_in_empty_row_pattern = '%[%[%s*رده%s*:[^]]*]]'
local has_rows = false


local function fixChildBoxes(sval, tt)
local function fixChildBoxes(sval, tt)
خط ۱۳: خط ۱۲:
local marker = '<span class=special_infobox_marker>'
local marker = '<span class=special_infobox_marker>'
local s = sval
local s = sval
-- start moving templatestyles and categories inside of table rows
local slast = ''
while slast ~= s do
slast = s
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[ر][د][ه]%s*:[^]]*%]%])', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
end
-- end moving templatestyles and categories inside of table rows
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
if mw.ustring.match(s, marker) then
if s:match(marker) then
s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
خط ۶۵: خط ۵۶:
else
else
return sval
return sval
end
end
-- Cleans empty tables
local function cleanInfobox()
root = tostring(root)
if has_rows == false then
root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '')
end
end
end
end
خط ۹۹: خط ۸۲:
local nums = {}
local nums = {}
for k, v in pairs(args) do
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
if num then table.insert(nums, tonumber(num)) end
end
end
خط ۱۱۱: خط ۹۴:
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
has_rows = true
root
root
:tag('tr')
:tag('tr')
خط ۱۲۱: خط ۱۰۳:
:addClass(rowArgs.class)
:addClass(rowArgs.class)
:addClass(args.headerclass)
:addClass(args.headerclass)
:css('text-align', 'center')
-- @deprecated next; target .infobox-<name> .infobox-header
-- @deprecated next; target .infobox-<name> .infobox-header
:cssText(args.headerstyle)
:cssText(args.headerstyle)
خط ۱۳۱: خط ۱۱۴:
end
end
elseif rowArgs.data and rowArgs.data:gsub(
elseif rowArgs.data and rowArgs.data:gsub(
category_in_empty_row_pattern, ''
category_in_empty_row_pattern, ''
):match('^%S') then
):match('^%S') then
has_rows = true
local row = root:tag('tr')
local row = root:tag('tr')
row:addClass(rowArgs.rowclass)
row:addClass(rowArgs.rowclass)
خط ۱۶۶: خط ۱۴۸:
if not args.title then return end
if not args.title then return end


has_rows = true
root
root
:tag('caption')
:tag('caption')
خط ۱۷۹: خط ۱۶۰:
if not args.above then return end
if not args.above then return end


has_rows = true
root
root
:tag('tr')
:tag('tr')
خط ۱۸۶: خط ۱۶۶:
:addClass('infobox-above')
:addClass('infobox-above')
:addClass(args.aboveclass)
:addClass(args.aboveclass)
:css('text-align', 'center')
-- @deprecated next; target .infobox-<name> .infobox-above
-- @deprecated next; target .infobox-<name> .infobox-above
:cssText(args.abovestyle)
:cssText(args.abovestyle)
خط ۱۹۴: خط ۱۷۵:
if not args.below then return end
if not args.below then return end


has_rows = true
root
root
:tag('tr')
:tag('tr')
خط ۲۰۱: خط ۱۸۱:
:addClass('infobox-below')
:addClass('infobox-below')
:addClass(args.belowclass)
:addClass(args.belowclass)
:css('text-align', 'center')
-- @deprecated next; target .infobox-<name> .infobox-below
-- @deprecated next; target .infobox-<name> .infobox-below
:cssText(args.belowstyle)
:cssText(args.belowstyle)
خط ۲۰۹: خط ۱۹۰:
if subheaderArgs.data and
if subheaderArgs.data and
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
local row = root:tag('tr')
local row = root:tag('tr')
row:addClass(subheaderArgs.rowclass)
row:addClass(subheaderArgs.rowclass)
خط ۲۵۰: خط ۲۳۰:
if imageArgs.data and
if imageArgs.data and
imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
local row = root:tag('tr')
local row = root:tag('tr')
row:addClass(imageArgs.rowclass)
row  
:addClass(imageArgs.rowclass)
:css('text-align', 'center')


local dataCell = row:tag('td')
local dataCell = row:tag('td')
خط ۲۶۰: خط ۲۴۱:
:addClass('infobox-image')
:addClass('infobox-image')
:addClass(imageArgs.class)
:addClass(imageArgs.class)
:css('text-align', 'center')
:cssText(imageArgs.datastyle)
:cssText(imageArgs.datastyle)
:wikitext(fixChildBoxes(imageArgs.data, 'td'))
:wikitext(fixChildBoxes(imageArgs.data, 'td'))
خط ۳۴۸: خط ۳۳۰:
if not args.name then return end
if not args.name then return end


has_rows = true
root
root
:tag('tr')
:tag('tr')
خط ۳۵۴: خط ۳۳۵:
:attr('colspan', '2')
:attr('colspan', '2')
:addClass('infobox-navbar')
:addClass('infobox-navbar')
:css('align', 'center')
:wikitext(require('Module:Navbar')._navbar{
:wikitext(require('Module:Navbar')._navbar{
args.name,
args.name,
خط ۳۹۴: خط ۳۷۶:
Loads the templatestyles for the infobox.
Loads the templatestyles for the infobox.


TODO: FINISH loading base templatestyles here rather than in
TODO: load base templatestyles here rather than in MediaWiki:Common.css
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
We aren't doing it here yet because there are 4-5000 pages with 'raw' infobox
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.
Will have to do some bizarre conversion category like with sidebar.
 
]=]
]=]
local function loadTemplateStyles()
local function loadTemplateStyles()
local frame = mw.getCurrentFrame()
local frame = mw.getCurrentFrame()
-- See function description
-- See function description
local base_templatestyles = frame:extensionTag{
-- local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' }
-- name = 'templatestyles', args = { src = cfg.i18n.templatestyles }
}
-- }
 
local templatestyles = ''
local templatestyles = ''
if args['templatestyles'] then templatestyles = frame:extensionTag{
if args['templatestyles'] then templatestyles = frame:extensionTag{
خط ۴۲۸: خط ۴۱۰:


return table.concat({
return table.concat({
base_templatestyles, -- see function description
-- base_templatestyles, -- see function description
templatestyles,
templatestyles,
child_templatestyles,
child_templatestyles,
grandchild_templatestyles
grandchild_templatestyles
})
})
end
 
-- common functions between the child and non child cases
local function structure_infobox_common()
renderSubheaders()
renderImages()
preprocessRows()
renderRows()
renderBelowRow()
renderNavBar()
renderItalicTitle()
renderEmptyRowCategories()
renderTrackingCategories()
cleanInfobox()
end
end


خط ۴۶۹: خط ۴۳۸:
:wikitext(args.title)
:wikitext(args.title)
end
end
structure_infobox_common()
 
renderSubheaders()
return loadTemplateStyles() .. root
renderImages()
preprocessRows()
renderRows()
renderBelowRow()
renderNavBar()
renderItalicTitle()
renderEmptyRowCategories()
renderTrackingCategories()
 
return loadTemplateStyles() .. tostring(root)
end
end


خط ۴۹۱: خط ۴۶۹:
local function preprocessArgs(prefixTable, step)
local function preprocessArgs(prefixTable, step)
if type(prefixTable) ~= 'table' then
if type(prefixTable) ~= 'table' then
error("مقدار غیر جدولی برای جدول پیشوند شناسایی شد", 2)
error("Non-table value detected for the prefix table", 2)
end
end
if type(step) ~= 'number' then
if type(step) ~= 'number' then
error("مقدار نامعتبر برای مرحله شناسایی شد", 2)
error("Invalid step value detected", 2)
end
end


خط ۵۰۱: خط ۴۷۹:
if type(v) ~= 'table' or type(v.prefix) ~= "string" or
if type(v) ~= 'table' or type(v.prefix) ~= "string" or
(v.depend and type(v.depend) ~= 'table') then
(v.depend and type(v.depend) ~= 'table') then
error('ورودی نامعتبر برای جدول پیشوند preprocessArgs شناسایی شد', 2)
error('Invalid input detected to preprocessArgs prefix table', 2)
end
end
preprocessSingleArg(v.prefix)
preprocessSingleArg(v.prefix)
خط ۵۰۹: خط ۴۸۷:
for j, dependValue in ipairs(v.depend) do
for j, dependValue in ipairs(v.depend) do
if type(dependValue) ~= 'string' then
if type(dependValue) ~= 'string' then
error('مقدار نامعتبر برای پارامتر «depend» در تابع preprocessArgs شناسایی شد')
error('Invalid "depend" parameter value detected in preprocessArgs')
end
end
preprocessSingleArg(dependValue)
preprocessSingleArg(dependValue)

منوی ناوبری