ماجۊل:زيبيل
توضیحات این پودمان میتواند در ماجۊل:زيبيل/توضیحات قرار گیرد.
-- Credits:
-- Original from fr:Module:Infobox
-- Adapted & Developed for Arabic Wikipedia by وهراني @arwiki
-- Adapted for Mazeruni Wikipedia by محک @mznwiki
-- Version: 20230314
local p = {}
local wikiLang = 'glk' -- زوان
local item = nil -- عنصر مرتبط ویکی دیتا
local localdata = {} -- دیتا قالب دله پیتی بیه
local page = { -- دیتا صفحهای که ونه خوری سراق دمبی
name = mw.title.getCurrentTitle().prefixedText,
namespace = mw.title.getCurrentTitle().namespace
}
local maincolor, secondcolor, thirdcolor = '#E1E1E1', '#E1E1E1', '#000000'
-- نتایج ثانویه
local maintenance = '' -- بنویشتهای که نتیجه دله اضافه وونه، رجه دله وسه زارا استفاده بونه
local externaltext = '' -- اتا اضافی بئی بنویشت که اضافی چیون، شابلونهای خارج از قالب واری، وسه استفاده بونه
-- واحدونی که استفاده بونه
local i18n = {
['see doc'] = 'شابلون خَوِری',
['edit'] = 'دچينواچين',
['edit code'] = 'کؤد ٚ دچينواچين',
['edit item'] = 'آیتم ٚ دچينواچين',
['tracking cat'] = "وانيويساني گه دیتا دأرده",
['invalid block type'] = "خطادار بلوک",
['default cat'] = "زيبيل دیفالت",
}
local function addWikidataCat(prop)
if type(prop) == 'table' then prop = prop[1] end
if page.namespace == 0 then
maintenance = maintenance .. '[[جرگه:وانيويساني_گه_أ_آیتم-أ_کارأگيرده_' .. prop .. ']]'
end
end
local function addMaintenanceCat(cat, sortkey)
if page.namespace ~= 0 then
return ''
end
if cat then
maintenance = maintenance .. '[[Category:' .. cat .. '|' .. (sortkey or page.name) .. ']]'
end
end
local function expandQuery(query)
local value, number -- نتیجة ، عدد النتائج للضبط الصرفی للعنوان
if(type(query) ~= 'table') then return nil end
-- الوحدات المستعملة
local wikimod = query.wikimod or localdata.wikimod or 'Wikidata2' --'Wikidata/fr'
local wdexpandQuery = require("ماجۊل:زيبيل/ويکي.دیتا").expandQuery
local noerr,data, nb
noerr,data, nb = pcall(wdexpandQuery,localdata.item ,wikimod,query)
if noerr
then return data, nb
else
addMaintenanceCat('صفحهئونی_که_صندخ_دارننه/خطادارون')
mw.log("WD Query Error : "..mw.dumpObject(data))
return '<span class="error">' .. (data) .. '</span>'
end
end
local function getWikidataValue(params, wikidataparam)
if not localdata.item then
return nil
end
if params.blockers then -- blockers are local parameters that disable the wikidata query
local blockers = params.blockers
if (type(blockers) == 'string') then
blockers = {blockers}
end
for i, blocker in ipairs(blockers) do
if localdata[blocker] then
return nil
end
end
end
local v, valnum -- نتایج ره بشمار و تحلیل هاکن (جمع بئی حالت دلوس عرض سه)
if not wikidataparam then -- par défaut la valeur wikidata est dans le paramètre "wikidata" mais dans les structures composées comme "title", il y a plusieurs paramètres wikidata
wikidataparam = 'wikidata'
end
if params[wikidataparam] then
if type(params[wikidataparam]) == 'function' then
v, valnum = params[wikidataparam](localdata.item)
elseif type(params[wikidataparam]) == 'table' then
v, valnum = expandQuery(params[wikidataparam])
else
v, valnum = params[wikidataparam]
end
end
local i = 2
while not v and type(params["wikidata" .. i]) ~= 'nil' do
wikidataparam = "wikidata" .. i
i = i + 1
if params[wikidataparam] then
if type(params[wikidataparam]) == 'function' then
v, valnum = params[wikidataparam](localdata.item)
elseif type(params[wikidataparam]) == 'table' then
v, valnum = expandQuery(params[wikidataparam])
else
v, valnum = params[wikidataparam]
end
end
end
if not v or valnum==0 then
return nil
end
return v, valnum
end
local function getValue(val, params)
if type(val) == 'string' then
return localdata[val:gsub(' ','_')]
elseif type(val) == 'function' then
return val(localdata, localdata.item, params)
elseif type(val) == 'table' then
for i, j in pairs(val) do -- اگه بیش از اتا مقدار هدا بو، اولین مقدار ره کار زنده
if localdata[j] then
return localdata[j]
end
end
end
end
function p.separator(params)
local style = params['separator style'] or {}
style.height = style.height or '2px'
style['background-color'] = style['background-color'] or maincolor
return mw.html.create('hr'):css( style )
end
--[=[
آدرس بلوک ره صندخ دله دینگنین
دیتا:پچوک لیست) :
- value : Moyen d'obtenir le titre via getValue (nom de paramètre de modèle ou fonction).
- textdefaultvalue : عنوان پیشفرض بنویشته.
- icon : Pictogramme d'infobox (voir [[Projet:Infobox/Pictogramme]]).
]=]
function p.buildtitle(params)
local text = getValue(params.value, params) or params.textdefaultvalue or getWikidataValue(params) or mw.title.getCurrentTitle().text
local subtext = getValue(params.subtitle) or getWikidataValue(params, 'wikidatasubtitle') or params.subtitledefaultvalue
if subtext and (subtext ~= text) then
text = text .. '<br /><small>' .. subtext .. '</small>'
end
local class = 'entete ' .. (params.icon or '')
-- overwrites with those provided in the module
local style = {}
style['background-color'] = maincolor
style['color'] = thirdcolor
if params.style then
for i, j in pairs(params.style) do
style[i] = j
end
end
local title = mw.html.create('div')
:addClass(class)
:css(style)
:tag('div')
:wikitext(text)
:allDone()
return title
end
p.buildTitle = p.buildtitle
function p.buildimages(params)
local function getwdImage(Q, property)
property = property
local QID
if type(Q) == 'table' and Q.id and Q.id ~= '-'
then QID = Q.id
else return
end
local wdata
if (type(property) == 'string')
then wdata = mw.wikibase.getBestStatements(QID, property)
elseif(type(property) == 'table')
then for _,prop in ipairs(property) do
wdata = mw.wikibase.getBestStatements(QID,prop)
if(wdata) then break end
end
else return
end
local first
for _, image in pairs(wdata) do
if image.mainsnak.snaktype == 'value' then
if not first then
first = image.mainsnak.datavalue.value
end
local q = image.qualifiers
if q and q.P2096 then
for _, caption in pairs(q.P2096) do -- P2096 is 'caption'
if caption.snaktype == 'value' and caption.datavalue.value.language == wikiLang then
return image.mainsnak.datavalue.value, caption.datavalue.value.text
end
end
end
end
end
return first,''
end
local images = {}
local upright, link, caption, captionfromwd, alt, size -- size is deprecated
if type(params.imageparameters) == 'string' then
params.imageparameters = {params.imageparameters}
end
if not params.imageparameters then -- اگه عکس نداشته
params.imageparameters = {}
end
for j, k in ipairs(params.imageparameters) do
table.insert(images, localdata[k])
end
-- Images from Wikidata
if #images == 0 and localdata.item then
if params.property then
params.wikidata = {entity = localdata.item, property = params.property}
end
if params.wikidata then
local wdq = params.wikidata
if type(params.wikidata.property) == 'table' then params.wikidata.property = mw.text.listToText(params.wikidata.property, '**', '**') end
if type(wdq) == 'table' then
for p in string.gmatch(params.wikidata.property, 'P%d+') do
images,captionfromwd = getwdImage(localdata.item, p)
if images then
params.wikidata.property = p
break
end
end
if captionfromwd then
addMaintenanceCat("وانيويسانی_گه_أ_آیتم-أ_کارأگيرده_P2096")
end
if images then
addWikidataCat(params.wikidata.property)
end
end
if type(wdq) == 'function' then
images = params.wikidata()
if type(images) == 'string' then
return images
end
end
if type(images) == 'string' then
images = {images}
end
if (not images) then
images = {}
end
end
end
-- اگه تونی فرضی عکسها ره کار بزنین
if #images == 0 then
if params.maintenancecat then
addMaintenanceCat(params.maintenancecat, params.sortkey)
end
if params.defaultimages then
images = params.defaultimages
if type(images) == 'string' then
images = {images}
end
upright = params.defaultimageupright
caption = params.defaultimagecaption
link = params.defaultimagelink
alt = params.defaultimagealt
if not alt and ( images[1] == 'DefautAr.svg' or images[1] == 'Defaut 2.svg' ) then
alt = 'إما عکسی لازم داریم که آزاد بوئه'
end
end
end
if #images == 0 then
return nil
end
upright = upright or getValue(params.uprightparameter) or params.defaultupright or "1.2"
link = link or getValue(params.linkparameter) or params.defaultlink
caption = captionfromwd or caption or getValue(params.captionparameter) or params.defaultcaption
alt = alt or getValue( params.altparameter) or params.defaultalt
size = size or getValue(params.sizeparameter) or params.defaultsize
if size then
local numsize = size:gsub('px', '')
numsize = size:gsub('پیکسل', '')
numsize = mw.ustring.gsub(numsize, 'x.*', '')
numsize = tonumber(numsize)
if type(numsize) ~= 'number' or numsize > 280 then
addMaintenanceCat("مقالاتی که وشون عکس قایده دلوست نییه")
end
if tonumber(size) then
size = size .. 'px'
end
size = '|' .. size
else
size = ''
end
if tonumber(upright) then
upright = tostring(tonumber(upright) ) / #images
end
if tonumber(size) then
size = tostring(tonumber(size) ) / #images
end
local style = params.style or {padding ='2px 0',}
-- عکس دیار بین ره آماده کنده
local imagesString = ''
for i,image in pairs(images) do
if image == '-' then
return
end
if(string.find(image, '<table',1,true) ~= nil) then
imagesString = imagesString .. image
else
image = string.match(image, '[^:]*:([^|%]]*)') or image
imagesString = imagesString .. '[[file:' .. image .. size .. '|frameless'
-- [[
if alt then imagesString = imagesString .. '|alt=' .. alt end
if link then imagesString = imagesString .. '|link=' .. link end
if upright then
imagesString = imagesString .. '|upright=' .. upright
elseif #images > 1 then
imagesString = imagesString .. '|upright=' .. ( 1 / #images )
end
imagesString = imagesString .. ']]'
end
end
local image = mw.html.create('div')
:addClass("images")
:css(style)
:wikitext(imagesString)
:done()
-- تعلیق
local captionobj
if caption then
captionobj = mw.html.create('div')
:wikitext(caption)
:css(params.legendstyle or {})
:addClass("legend")
:done()
end
-- فاصله
local separator
if params.separator then
separator = separator(params)
end
local imgout
if params.inner then -- اگه جدول دله دوو
imgout = mw.html.create('tr'):tag('th'):attr('colspan', 2)
else
imgout = mw.html.create('div'):css({ border="unset",padding="unset"})
end
return imgout
:node(image)
:node(captionobj)
:node(separator)
:done()
end
p.buildImages = p.buildimages
function p.buildtext(params)
local class = params.class or ''
local style = {
['text-align'] = 'center',
['font-weight'] = 'bold'
}
if params.style then
for i, j in pairs(params.style) do
style[i] = j
end
end
local text = getValue(params.value, params) or getWikidataValue(params) or params.defaultvalue
if text == '-' then
return
end
if not text then
addMaintenanceCat(params.maintenancecat, params.sortkey)
return nil
end
local formattedtext = mw.html.create('p')
:addClass(class)
:css(style)
:wikitext(text)
:done()
return formattedtext
end
p.buildText = p.buildtext
function p.buildrow(params)
local class = params.class or ''
local style = params.style or {}
local valueClass = params.valueClass or ''
local valueStyle = params.valueStyle or {}
local value, number = getValue(params.value, params)
if (not value) then
value, number = getWikidataValue(params, 'wikidata')
end
if (not value) and (params.property) then
value, number = expandQuery{ property = params.property } --, ucfirst = params.ucfirst
end
if not value then
value = params.defaultvalue
end
if value == '-' then
return nil
end
if not value then
if params.maintenancecat then
local maintenancecat = getValue(params.maintenancecat, params)
addMaintenanceCat(maintenancecat, params.sortkey)
end
return nil
end
if not number then
number = 0 -- == indéfini
end
local label = params.label
if type(label) == 'table' then label= getValue(params.label, params) end
if number > 1 and (params.plurallabel) then
label = params.plurallabel
elseif number == 1 and (params.singularlabel) then
label = params.singularlabel
end
if type(label) == 'function' then
label = label(localdata, localdata.item)
end
if not label and type(params.defaultlabel) == 'string' then
label = params.defaultlabel
end
if number > 4 then
params.hidden = true
end
-- format
local formattedvalue = mw.html.create('div')
:wikitext('\n' .. value) -- رمز '\n' مطلوب عندما تکون value قائمة تبدأ بـ '*' ou '#'
if (params.hidden == true)then
local divNavHead = mw.html.create('div')
:attr({class="nomobile", style="text-align:right;border: none; padding: 0; background:none; font-size: 75%;"})
:wikitext(" [[file:Incomplete list.svg|20x20px|link=]] لیست…") --[دیار]/[پتی]
formattedvalue
:addClass('mw-collapsible-content')
divNavHead = mw.html.create('div'):node(divNavHead)
formattedvalue = mw.html.create('div')
:attr({class="mw-collapsible mw-collapsed ", style="border: none; padding: 0;"})
:node(divNavHead)
:node(formattedvalue)
end
formattedvalue = mw.html.create('td')
:node(formattedvalue)
:addClass(valueClass)
:css(valueStyle)
:allDone()
local formattedlabel
if label then
formattedlabel = mw.html.create('th')
:attr('scope', 'row')
:wikitext(label)
:done()
end
local row = mw.html.create('tr')
:addClass(class)
:css(style)
:node(formattedlabel)
:node(formattedvalue)
:done()
return row
end
p.buildRow = p.buildrow
function p.buildnavbox(params)
-- définition du style
local class = "overflow nav " .. (params.class or '')
local style = params.style or {}
if params.separated then
class = class .. ' bordered'
style['border-top'] = '1px solid' .. maincolor
end
-- ترتیب دیتا
params.previousval = params.previousval or params.previousparameter
params.nextval = params.nextval or params.nextparameter
if params.previousproperty then
params.previouswikidata = {property = params.previousproperty, conjtype='<br />'}
end
if params.nextproperty then
params.nextwikidata = {property = params.nextproperty, conjtype='<br />'}
end
local previousval = getValue(params.previousval, params) or getWikidataValue(params, 'previouswikidata')
local nextval = getValue(params.nextval, params) or getWikidataValue(params, 'nextwikidata')
local navbox
if params.inner then
navbox = mw.html.create('tr'):tag('th'):attr('colspan', 2)
style['font-weight'] = style['font-weight'] or 'normal'
else
navbox = mw.html.create('div')
end
local prevNode, nextNode
if previousval then
prevNode = mw.html.create('div')
:addClass('prev_bloc')
:wikitext(previousval)
:done()
end
if nextval then
nextNode = mw.html.create('div')
:addClass('next_bloc')
:wikitext(nextval)
:done()
end
if previousval or nextval then
navbox
:addClass(class)
:css(style)
:node(prevNode)
:node(nextNode)
:allDone()
return navbox
end
return nil
end
p.buildNavbox = p.buildnavbox
function p.buildsuccession(params)
if not params.value then
return nil
end
local rowI = mw.html.create('tr')
cellI = mw.html.create('td')
:attr({colspan = '2'})
:attr({align = 'center'})
local styleT = {}
styleT['background-color'] = 'transparent'
styleT['width'] = '100%'
tabC = mw.html.create('table')
:attr({cellspacing = '0'})
:addClass('navigation-not-searchable')
:css(styleT)
local row = mw.html.create('tr')
local color = params.color
local style = {}
local arrowLeft
local arrowRight
if color == 'default' then
style['background-color'] = '#E6E6E6'
arrowLeft = '[[file:Fleche-defaut-droite.png|13px|alt=سابق|link=]]'
arrowRight = '[[file:Fleche-defaut-gauche.png|13px|alt=سابق|link=]]'
else
style['background-color'] = color
arrowLeft = '[[file:Fleche-defaut-droite-gris-32.png|13px|alt=لاحق|link=]]'
arrowRight = '[[file:Fleche-defaut-gauche-gris-32.png|13px|alt=لاحق|link=]]'
end
local styleTrans = {}
styleTrans['background-color'] = '#F9F9F9'
-- ترتیب دیتا
params.previousval = params.previousval or params.previousparameter
params.nextval = params.nextval or params.nextparameter
if params.previousproperty then
params.previouswikidata = {property = params.previousproperty}
end
if params.nextproperty then
params.nextwikidata = {property = params.nextproperty}
end
local before = params.value['before'] or getValue(params.previousval, params) or getWikidataValue(params, 'previouswikidata')
local after = params.value['after'] or getValue(params.nextval, params) or getWikidataValue(params, 'nextwikidata')
local center = params.value['center']
--
local widthCell = '44%'
if center then
widthCenter = '28%'
widthCell = '29%'
end
local formattedbefore
if before then
formattedbefore = mw.html.create('td')
:attr({valign = 'middle'})
:attr({align = 'right'})
:attr({width = '5%'})
:css(style)
:wikitext(arrowLeft)
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(style)
:wikitext('')
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(style)
:wikitext(before)
:done()
row:node(formattedbefore)
else
formattedbefore = mw.html.create('td')
:attr({valign = 'middle'})
:attr({align = 'right'})
:attr({width = '5%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
end
local formattedcenter
formattedcenter = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedcenter)
if center then
formattedcenter = mw.html.create('td')
:attr({align = 'center'})
:attr({valign = 'middle'})
:attr({width = widthCenter})
:css(style)
:wikitext(center)
:done()
row:node(formattedcenter)
formattedcenter = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedcenter)
end
local formattedafter
if after then
formattedafter = mw.html.create('td')
:attr({align = 'left'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(style)
:wikitext(after)
:done()
row:node(formattedafter)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(style)
:wikitext('')
:done()
row:node(formattedbefore)
formattedafter = mw.html.create('td')
:attr({align = 'left'})
:attr({valign = 'middle'})
:attr({width = '5%'})
:css(style)
:wikitext(arrowRight)
:done()
row:node(formattedafter)
else
formattedafter = mw.html.create('td')
:attr({align = 'left'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedafter)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
formattedafter = mw.html.create('td')
:attr({align = 'left'})
:attr({valign = 'middle'})
:attr({width = '5%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedafter)
end
row:done()
tabC:node(row)
tabC:done()
cellI:node(tabC)
cellI:done()
rowI:node(cellI)
rowI:allDone()
return rowI
end
p.buildSuccession = p.buildsuccession
function p.buildrow1col(params)
local value, number = getValue(params.value, params)
if (not value) then
value, number = getWikidataValue(params, 'wikidata')
end
if (not value) and (params.property) then
value, number = expandQuery{ property = params.property }
end
if not value then
value = params.defaultvalue
end
if value == '-' or type(value)== 'nil' then
return nil
end
local class = params.class
local rowcolor
if params.color == 'secondcolor' then
rowcolor = secondcolor
else
rowcolor = params.color
end
local style = {}
style['padding'] = '4px'
style['text-align'] = 'center'
style['background-color'] = rowcolor or '#F9F9F9'
style['color'] = '#000000'
if number and number > 4 then
params.hidden = true
end
local formattedvalue = mw.html.create('div')
:wikitext('\n' .. value) -- رمز '\n' مطلوب عندما تکون value قائمة تبدأ بـ '*' ou '#'
if (params.hidden == true) then
local divNavHead = mw.html.create('div')
:attr({class="nomobile", style="text-align:right;border: none; padding: 0; background:none; font-size: 75%;"})
:wikitext(" [[file:Incomplete list.svg|20x20px|link=]] لیست…") --[دیار]/[پتی]
formattedvalue
:addClass('mw-collapsible-content')
divNavHead = mw.html.create('div'):node(divNavHead)
formattedvalue = mw.html.create('div')
:attr({class="mw-collapsible mw-collapsed ", style="border: none; padding: 0;"})
:node(divNavHead)
:node(formattedvalue)
end
formattedvalue = mw.html.create('td')
:node(formattedvalue)
:attr({colspan = '2'})
:css(style)
:done()
local row = mw.html.create('tr')
:addClass(class)
:css(style)
:node(formattedvalue)
:done()
return row
end
p.buildRow1Col = p.buildrow1col
function p.buildsubtitle(params)
local class = params.class or ''
local style = { ['margin-top'] ='-8px',['margin-bottom'] ='10px',
['text-align'] = 'center',
['font-size'] = '90%',
['background-color'] = maincolor,
['color'] = thirdcolor,
flex= "auto",
width="100%"
}
if params.style then
for i, j in pairs(params.style) do
style[i] = j
end
end
local text = getValue(params.value, params) or getWikidataValue(params) or params.defaultvalue
if text == '-' then
return
end
if not text then
addMaintenanceCat(params.maintenancecat, params.sortkey)
return nil
end
local title = mw.html.create('div')
:addClass(class)
:css(style)
:tag('div')
:wikitext(text)
:allDone()
return title
end
p.buildSubTitle = p.buildsubtitle
function p.buildtable(params)
local tab = mw.html.create('table'):css(params.style or {})
local rows = params.rows
-- expand parameters so that we have a list of tables
local i = 1
while (i <= #rows) do
local l = rows[i]
if type(l) == 'function' then
l = l(localdata, localdata.item)
end
if (type(l) == 'table') and (l.type == 'multi') then
table.remove(rows, i)
for j, row in ipairs(l.rows) do
table.insert(rows, i + j - 1, row)
end
elseif type(l) == 'nil' then
table.remove(rows, i)
elseif type(l) ~= 'table' then
return error('صندخ قالب خطوط ("rows") جدولمونا هستنه (table), و اینتی نینه:' .. type(l))
else
i = i + 1
end
end
-- CREATE ROW
local expandedrows = {}
for k, row in ipairs(rows) do
local v = p.buildblock(row)
if v then
table.insert(expandedrows, v)
end
end
if (#expandedrows == 0) then
return nil
end
rows = expandedrows
-- ADD TITLE
local title
if params.title or params.singulartitle or params.pluraltitle then
local text
if #rows > 1 and params.pluraltitle then
text = params.pluraltitle
elseif #rows == 1 and params.singulartitle then
text = params.singulartitle
else
text = params.title
end
local style = params.titlestyle or {display = 'table-caption'}
style['text-align'] = style['text-align'] or 'center'
style['color'] = style['color'] or thirdcolor
style['background-color'] = style['background-color'] or secondcolor
title = mw.html.create('caption')
:attr({colspan = '2'})
:css(style)
:wikitext(text)
:done()
end
if title then
tab:node(title)
end
for i, j in pairs (rows) do
tab:node(j)
end
if params.separator then
local separator = p.separator(params)
tab:node(separator)
end
tab:allDone()
return tab
end
p.buildTable = p.buildtable
function p.buildinvalidblock(args)
addMaintenanceCat(defaultcat)
local text = ''
if type(args) ~= 'table' then
text = "صندخ قالب بلوکها ونه جدولمونا بنویشت بوون (table)"
else
text = i18n["invalid block type"] .. ' : ' .. (args.type or '??')
end
return text
end
p.buildInvalidBlock = p.buildinvalidblock
function p.buildmap(params)
local latitude = getValue({'latitude','عرض دایره','دایره عرض'})
local longitude = getValue({'longitude','طول خط','خط طول'})
local itemid
if localdata.item and localdata.item.id then itemid = localdata.item.id end
if(not params.ids and not longitude and not itemid ) then return nil end
if itemid and not (#(mw.wikibase.getBestStatements(itemid, 'P625'))~=0 or params.ids or longitude) then return nil end
--mw.logObject(#(mw.wikibase.getBestStatements(itemid, 'P625')))
local width = tonumber(params.width) or 260
if width > 260 then
addMaintenanceCat("صندخ دلهی خطا/عکس گت هسته")
width = 260
end
newparams = {
['marker-symbol'] = params.marker or 'marker'
, ['marker-color'] = params.markercolor or '#FF0000'
, ['marker-size'] = params.markersize
, frameless='yes'
, ['width']=width
, ['height']=width
, ['latitude']= latitude
, ['longitude']= longitude
, ['align']='center'
, type='mapframe'
, geotype= params.geotype
, item = itemid
, ids = params.ids
, zoom= params.zoom or params.default_zoom or 9
, lang="glk"
, title = mw.title.getCurrentTitle().text
, debug = params.debug --or 1
}
if params.params and type(params.params) == 'table' then -- دیتا اضافی
for i, j in pairs(params.params) do
if(not newparams[i]) then newparams[i] = j end
end
end
local f_tag = require('ماجۊل:Map')._tag
noerr,data = pcall(f_tag,newparams)
if noerr == true
then return data
else
addMaintenanceCat('وانيويساني گه اۊشان ٚ زيبيل ٚ ماجۊل خطا دأره')
mw.log("Error from [[ماجۊل:Map]] : "..mw.dumpObject(data))
return nil
end
end
p.buildMap = p.buildmap
function p.buildexternaltext(params)
local value = getValue(params.value)
if value and (type(value) == 'string') then
externaltext = externaltext .. value
end
end
p.buildExternalText = p.buildexternaltext
function p.buildfooter(params)
if not params then
params = {}
end
local class = 'navbar noprint bordered ' .. (params.class or '')
local style = params.style or {flex= "auto";}
style['border-top'] = style['border-top'] or '2px dotted ' .. maincolor
style['display'] = 'block'
local backlinkstr = '[' .. tostring( mw.uri.fullUrl( page.name, 'veaction=edit§ion=0' ) ) .. ' ' .. i18n['edit'] .. ']'
.. ' - [' .. tostring( mw.uri.fullUrl( page.name, 'action=edit§ion=0' ) ) .. ' ' .. i18n['edit code'] .. ']'
local itemlinkstr
if localdata.item and localdata.item.id then
itemlinkstr = '[[d:' .. localdata.item.id .. '|' .. i18n['edit item'] .. ']]'
end
local editstr = backlinkstr
if itemlinkstr then
editstr = editstr .. ' - ' .. itemlinkstr
end
local editlinkspan = mw.html.create('span')
:css({['text-align'] = "right", ['font-size'] = "80%",['background'] = "inherit"})
:addClass('plainlinks')
:wikitext(editstr)
:done()
local doclinkstr = '[[File:Test_Template_Info-Icon_-_Version_(2).svg|30x15px|link=' .. localdata.templatename .. '|' .. i18n['see doc'] .. ']]'
local doclinkspan = mw.html.create('span')
:css({['text-align'] = "left",['float'] = "left"})
:wikitext(doclinkstr)
:done()
local footer = mw.html.create('p')
:addClass(class)
:css(style)
:node(editlinkspan)
:node(doclinkspan)
return footer
end
p.buildFooter = p.buildfooter
function p.buildblock(block)
if type(block) == 'function' then
block = block( localdata )
end
local blocktypes = { -- list of functions for block buildings
['invalid'] = p.buildinvalidblock,
['external text'] = p.buildexternaltext,
['footer'] = p.buildfooter,
['images'] = p.buildimages,
['map']= p.buildmap,
['mixed'] = p.buildrow,
['navbox'] = p.buildnavbox,
['table'] = p.buildtable,
['row'] = p.buildrow,
['row1col'] = p.buildrow1col,
['succession'] = p.buildsuccession,
['text'] = p.buildtext,
['title'] = p.buildtitle,
['subtitle'] = p.buildsubtitle,
}
if type(block) ~= 'table' or (not block.type) or (not blocktypes[block.type]) then
return blocktypes['invalid'](block)
end
return blocktypes[block.type](block)
end
p.buildBlock = p.buildblock
local function _modbuild()
local function _table_size(tab)
local tab_size = 0
for k, v in pairs( tab ) do tab_size = tab_size + 1 end
return tab_size
end
localdata = require( 'ماجۊل:زيبيل/دیتا')
if _table_size(localdata) < 5 and page.namespace == 0 then
maintenance = maintenance .. ''
end
item = localdata.item
-- assign rank to the infobox, "secondary" means special formatting like no displaytitle for coordinates
local infoboxrank = 'main' -- main infobox of the page, with coordinates displayed in title etc.
if page.namespace ~= 0 then
infoboxrank = 'secondary'
else
maintenance = maintenance .. ''
.. '[[جرگه:وانيويساني گه ايطلاعات ٚ جعبه دأرده]]'
end
-- if infobox is linked to another item: rank = secondary
if localdata.item and localdata.item.id then
local itemlink = mw.wikibase.sitelink(localdata.item.id)
local pagetitle = mw.title.getCurrentTitle().text
if (itemlink or '') ~= pagetitle then
infoboxrank = 'secondary'
end
end
localdata.infoboxrank = infoboxrank
-- load infobox module page
local moduledata = require('ماجۊل:زيبيل/قالب/' .. localdata.modulename )
moduledata.name = localdata.modulename
localdata.wikimod = moduledata.wikimod or moduledata.wikidatamod or moduledata.wdmod
-- defines main color
maincolor = localdata['infobox color'] or localdata['صندخ رنگ'] or moduledata.maincolor or maincolor
secondcolor = moduledata.secondcolor or secondcolor
thirdcolor = localdata['text color'] or localdata['متن رنگ'] or moduledata.thirdcolor or thirdcolor
if maincolor:match( '^%x%x%x%x%x%x$' ) or maincolor:match( '^%x%x%x$' ) then
maincolor = '#' .. maincolor
end
if thirdcolor:match ('أهأ') or thirdcolor:match( 'true' ) then
thirdcolor = '#000'
end
if thirdcolor:match ('نأ') or thirdcolor:match( 'false' ) then
thirdcolor = '#fff'
end
-- class
local class = 'infobox_v3b mainTable infobox'
if moduledata.class then
class = class .. ' ' .. moduledata.class
end
-- style
local style = moduledata.style or {}
-- build infobox
-- النتیجة النهائیة
local infobox = mw.html.create('td') --mw.html.create('div')
--:addClass(class)
:css({display= "flex"
,["flex-wrap"]= "wrap"
,["flex-direction"]= "row"
,["justify-content"]= "center"
,["align-items"]= "center"})
:done()
local nbblock = 0
for i, j in pairs( moduledata.parts ) do
local mdp= p.buildblock(j)
infobox:node(mdp)
if(mdp) then nbblock = nbblock + 1 end
end
if nbblock < 2 and page.namespace == 0 then
maintenance = maintenance .. ''
end
infobox :node(p.buildfooter(moduledata.footer))
:done()
infobox=mw.html.create('table')
:addClass(class)
:css(style)
:node(infobox)
:done()
templatestyles = mw.getCurrentFrame():extensionTag( 'templatestyles', '',
{src = "زيبيل/infobox v3b/styles.css"})
..mw.getCurrentFrame():extensionTag( 'templatestyles', '', { src = "زيبيل/icones.css"}
)
;
return templatestyles .. tostring(infobox) .. externaltext .. maintenance
end
function p.build()
local noerr,data, nb
noerr,data = pcall(_modbuild)
if noerr
then return data
else
mw.log("WD Query Error : "..mw.dumpObject(data))
return '<span class="error">' .. (data) .. '</span>'
.. ''
end
end
p['ترکیب'] = p.build
return p