Bu modulun sənədləşdirmə səhifəsi səhifəsində yaradıla bilər
-- Farsca vikidən götürülüb.
require('strict')
local p = {}
local numConv = require('Module:Numeral converter').convert
local showPercentage = function (all, thisCount, frame)
if all == 0 then
return "'''0'''"
else
return frame:expandTemplate{ title = 'Rəqəm və faiz', args = {thisCount, all, 1, size = 'small', disp = 'br()', bold = 'yes'} }
end
end
local frame = mw.getCurrentFrame()
local col_begin = frame:expandTemplate{title = 'sütun-başla'}
local col_break = frame:expandTemplate{title = 'sütun'}
local col_end = frame:expandTemplate{title = 'sütun/son'}
local langAz = mw.language.new('az')
local langEn = mw.language.new('en')
local monthNames = {
'Yanvar',
'Fevral',
'Mart',
'Aprel',
'May',
'İyun',
'İyul',
'Avqust',
'Sentyabr',
'Oktyabr',
'Noyabr',
'Dekabr',
}
local gCount = {
d = 0,
k = 0,
m = 0,
years = {
d = {},
k = {},
m = {}
}
}
function p.makeGeneralGraphs (frame, countTable)
local date = os.date('*t')
local iyear = 2006
local currentYear = date.year
local function makeString (c)
local dGroup, kGroup, mGroup = '', '', ''
local barChartWidth = 45 * ((currentYear - iyear) + 1)
local s = col_begin .. '\n' .. col_break .. '\n'
s = s .. '{{#invoke:Chart|pie chart|radius=150|percent=true' ..
'|slice 1=' .. numConv('en', c.d) .. 'Silinən:#d33' ..
'|slice 2=' .. numConv('en', c.k) .. ':Saxlanılan:#00af89' ..
'|slice 3=' .. numConv('en', c.m) .. ':Birləşdirilən:#36c' ..
'}}' .. '\n' .. col_break
s = s .. '{{#invoke:Chart|bar chart|stack=1|height=400' ..
'|colors=#d33:#00af89:#36c|group names=Silinən:Saxlanılan:Birləşdirilən' ..
'|width=' .. barChartWidth
repeat
dGroup = dGroup .. c.years.d[iyear] .. ':'
iyear = iyear + 1
until iyear > currentYear
s = s .. '|group 1=' .. mw.ustring.sub(dGroup, 1, -2)
iyear = 2006
repeat
kGroup = kGroup .. c.years.k[iyear] .. ':'
iyear = iyear + 1
until iyear > currentYear
s = s .. '|group 2=' .. mw.ustring.sub(kGroup, 1, -2)
iyear = 2006
repeat
mGroup = mGroup .. c.years.m[iyear] .. ':'
iyear = iyear + 1
until iyear > currentYear
s = s .. '|group 3=' .. mw.ustring.sub(mGroup, 1, -2)
iyear = 2006
s = s .. '|x legends='
repeat
s = s .. '[[#' .. iyear .. '|' .. iyear .. ']]:'
iyear = iyear + 1
until iyear > currentYear
s = mw.ustring.sub(s, 1, -2)
s = s .. '}}' .. '\n' .. col_end
return frame:preprocess(s)
end
return frame:expandTemplate{
title = 'gizli blok',
args = {
'Silinənlərin diaqram formatında ümumi statistikası',
makeString(countTable),
background = '#E5E4E2'
}
}
end
function p.getDate (frmt, obj, l)
if l == 'en' then
return langEn:formatDate(frmt, obj or 'now')
else
return langAz:formatDate(frmt, obj or 'now')
end
end
function p.count (arc)
local c = {
a = 0, -- all
d = 0, -- delete
k = 0, -- keep
m = 0 -- merge
}
local titleObj = mw.title.new('Vikipedita:Silinməyə_namizəd_səhifələr/Arxiv/' .. arc)
local content = titleObj:getContent()
if (titleObj.exists) then
for i in string.gfind(content, 'Silinməsinə') do
c.d = c.d + 1
end
for i in string.gfind(content, 'Saxlanılmasına') do
c.k = c.k + 1
end
for i in string.gfind(content, 'Birləşdirilməsinə') do
c.m = c.m + 1
end
c.a = c.d + c.k + c.m
end
return c
end
function p.makeGraph(frame, year, months, count, scale, style)
local columns = #months
local targs = {}
local i = 1
repeat
if count[months[i]].a > 0 then
table.insert(targs, months[i])
else
columns = columns - 1
end
i = i + 1
until i > columns
table.insert(targs, '#36c')
table.insert(targs, 'Birləşdirilən')
for _, month in pairs(months) do
if count[month].a > 0 then
table.insert(targs, count[month].m)
end
end
table.insert(targs, '#00af89')
table.insert(targs, 'Saxlanılan')
for _, month in pairs(months) do
if count[month].a > 0 then
table.insert(targs, count[month].k)
end
end
table.insert(targs, '#d33')
table.insert(targs, 'Silinən')
for _, month in pairs(months) do
if count[month].a > 0 then
table.insert(targs, count[month].d)
end
end
local cur_year_style = (columns > 8) and 5 or 6
local cur_year_scale = (cur_year_style % 2 == 0) and 1.5 or columns / 3
targs.style = style or cur_year_style
targs.scale = scale or cur_year_scale
targs.title = 'SNS müzakirələrinin qrafiki' .. tostring(year)
targs.columns = columns
targs.align = 'center'
return frame:expandTemplate{ title = 'میلههای داده', args = targs }
end
function p.currentYear (frame)
local date = os.date('*t')
local monthIndex = date.month
local i = tonumber(monthIndex) - 1
local n = '\n'
local text = '==' .. date.year .. '==' .. n
local months = {}
local countForGraph = {}
gCount.years.d[date.year] = 0
gCount.years.k[date.year] = 0
gCount.years.m[date.year] = 0
repeat
local month = monthNames[monthIndex - i]
table.insert(months, month)
i = i - 1
until i < tonumber(monthIndex) - tonumber(monthIndex)
local tbl = mw.html.create('table')
tbl
:attr('class', 'wikitable sortable jquery-tablesorter')
:tag('tr')
:tag('th')
:attr('rowspan', '2')
:wikitext('ماه')
:css('width', '70px')
:tag('th')
:attr('rowspan', '2')
:wikitext('کل<br/><small>(باقی)</small>')
:css('width', '32px')
:tag('th')
:attr('colspan', '3')
:wikitext('نتایج')
:done()
:tag('tr')
:tag('th')
:wikitext('حذف<br/><small>(٪ از کل)</small>')
:css('width', '44px')
:tag('th')
:wikitext('بماند<br/><small>(٪ از کل)</small>')
:css('width', '44px')
:tag('th')
:wikitext('ادغام<br/><small>(٪ از کل)</small>')
:css('width', '44px')
:done()
local length = table.maxn(months)
local j = 0
local sortkey = length
repeat
local monthname = monthNames[monthIndex - j]
local ttl = monthname .. ' ' .. date.year
local cnt = p.count(ttl)
-- populate general counts table
gCount.d = gCount.d + cnt.d
gCount.k = gCount.k + cnt.k
gCount.m = gCount.m + cnt.m
gCount.years.d[date.year] = gCount.years.d[date.year] + cnt.d
gCount.years.k[date.year] = gCount.years.k[date.year] + cnt.k
gCount.years.m[date.year] = gCount.years.m[date.year] + cnt.m
-- "ncy" for "not closed yet";
-- will be populated by "pages in current month's category minus total closed discussions
local ncy = 0
if ttl == monthNames[date.month] .. ' ' .. date.year or -- current or previous month
ttl == monthNames[date.month - 1] .. ' ' .. date.year then
ncy = frame:callParserFunction( 'PAGESINCATEGORY', { 'نظرخواهی برای حذف در ' .. ttl, 'R' } ) - cnt.a
end
tbl
:tag('tr')
:tag('td')
:attr('data-sort-value', sortkey)
:wikitext('[' .. '[ویکیپدیا:نظرخواهی برای حذف/بایگانی/' .. ttl .. '|' .. ttl .. ']]')
:tag('td')
:css('text-align', 'center')
:wikitext(
"'''" ..
frame:expandTemplate{
title = 'پیوند رده در صورت وجود ۲',
args= {
'نظرخواهی برای حذف در ' .. ttl,
numConv('fa', cnt.a)
}
} ..
"'''" ..
(tonumber(ncy) > 0 and '<br/><small>(' .. numConv('fa', ncy) .. ')</small>' or '')
)
:tag('td')
:css('text-align', 'center')
:wikitext(showPercentage(cnt.a, cnt.d, frame))
:tag('td')
:css('text-align', 'center')
:wikitext(showPercentage(cnt.a, cnt.k, frame))
:tag('td')
:css('text-align', 'center')
:wikitext(showPercentage(cnt.a, cnt.m, frame))
:done()
j = j + 1
countForGraph[monthname] = cnt
sortkey = sortkey - 1
until j == length
local graphNeeded = (not monthNames[monthIndex] == 'ژانویه') and (not cnt.a + cnt.d + cnt.k + cnt.m == 0)
text = text .. col_begin .. n .. col_break .. n .. tostring(tbl)
if (graphNeeded) then
text = text .. n .. col_break .. n ..
p.makeGraph(frame, date.year, months, countForGraph)
.. n .. col_end
else
text = text .. n .. col_break .. n ..
frame:expandTemplate{
title = 'توجه',
args = {
style = 'width:80%',
content = 'از آنجا که هنوز هیچ جمعبندی در سال جدید انجام نشده،' ..
' نمودار جمعبندیها در حال حاضر در دسترس نیست.'
}
}
.. n .. col_end
end
return text
end
function p.prevYear(frame)
local y = p.getDate('Y', '-1 year', 'fa')
local text = '== ' .. y .. ' ==\n'
local tbl = mw.html.create('table')
local ttl, month, cnt
local sortkey = 12
local countForGraph = {}
gCount.years.d[y] = 0
gCount.years.k[y] = 0
gCount.years.m[y] = 0
tbl
:attr('class', 'wikitable sortable jquery-tablesorter')
:tag('tr')
:tag('th')
:attr('rowspan', '2')
:wikitext('ماه')
:css('width', '70px')
:tag('th')
:attr('rowspan', '2')
:wikitext('کل')
:css('width', '32px')
:tag('th')
:attr('colspan', '3')
:wikitext('نتایج')
:done()
:tag('tr')
:tag('th')
:wikitext('حذف')
:css('width', '44px')
:tag('th')
:wikitext('بماند')
:css('width', '44px')
:tag('th')
:wikitext('ادغام')
:css('width', '44px')
:done()
for i = #monthNames, 1, -1 do
month = monthNames[i]
ttl = month .. ' ' .. y
cnt = p.count(ttl)
-- populate general counts table
gCount.d = gCount.d + cnt.d
gCount.k = gCount.k + cnt.k
gCount.m = gCount.m + cnt.m
gCount.years.d[y] = gCount.years.d[y] + cnt.d
gCount.years.k[y] = gCount.years.k[y] + cnt.k
gCount.years.m[y] = gCount.years.m[y] + cnt.m
countForGraph[month] = cnt
tbl
:tag('tr')
:tag('td')
:attr('data-sort-value', sortkey)
:wikitext('[' .. '[ویکیپدیا:نظرخواهی برای حذف/بایگانی/' .. ttl .. '|' .. ttl .. ']]')
:tag('td')
:css('text-align', 'center')
:wikitext(numConv('fa', cnt.a))
:tag('td')
:css('text-align', 'center')
:wikitext(numConv('fa', cnt.d))
:tag('td')
:css('text-align', 'center')
:wikitext(numConv('fa', cnt.k))
:tag('td')
:css('text-align', 'center')
:wikitext(numConv('fa', cnt.m))
:done()
sortkey = sortkey - 1
end
text = text .. col_begin .. '\n' .. col_break .. '\n' .. tostring(tbl) .. '\n' ..
col_break .. '\n' .. p.makeGraph(frame, y, monthNames, countForGraph, 1.7, 1) .. '\n' .. col_end
return text
end
function p.otherYears()
local hy = p.getDate('Y', '-2 years', 'en') -- Highest year
local ly = 2006 -- lowest year
local lm = 'مارس ۲۰۰۶' -- to break the loop when we reach the oldest archive
local yi = tonumber(hy)
local years = {}
local text = '== ' .. 'بایگانیهای پیش از ' .. p.getDate('Y', '-1 year', 'fa') .. ' =='
repeat
table.insert(years, yi)
yi = yi - 1
until yi - ly < 0
local tbl = mw.html.create('table')
tbl
:attr('class', 'wikitable collapsible collapsed')
:css('width', '372px')
:tag('tr')
:tag('th')
:attr('rowspan', '2')
:wikitext('ماه')
:tag('th')
:attr('rowspan', '2')
:wikitext('کل')
:tag('th')
:attr('colspan', '3')
:wikitext('نتایج')
:done()
:tag('tr')
:tag('th')
:wikitext('حذف')
:tag('th')
:wikitext('بماند')
:tag('th')
:wikitext('ادغام')
:done()
for k, v in pairs(years) do
local yr = v
tbl
:tag('tr')
:tag('td')
:attr('colspan', '5')
:attr('id', numConv('fa', yr))
:css('background', '#39F none repeat scroll 0% 0%')
:css('text-align', 'center')
:wikitext("'''" .. numConv('fa', yr) .. "'''")
:done()
for i = #monthNames, 1, -1 do
local month = monthNames[i]
local ttl = month .. ' ' .. numConv('fa', yr)
if ttl == lm then
break
end
local cn = p.count(ttl)
-- populate general counts table
gCount.d = gCount.d + cn.d
gCount.k = gCount.k + cn.k
gCount.m = gCount.m + cn.m
gCount.years.d[numConv('fa', yr)] = (gCount.years.d[numConv('fa', yr)] or 0) + cn.d
gCount.years.k[numConv('fa', yr)] = (gCount.years.k[numConv('fa', yr)] or 0) + cn.k
gCount.years.m[numConv('fa', yr)] = (gCount.years.m[numConv('fa', yr)] or 0) + cn.m
tbl
:tag('tr')
:tag('td')
:wikitext('[' .. '[ویکیپدیا:نظرخواهی برای حذف/بایگانی/' .. ttl .. '|' .. ttl .. ']]')
:tag('td')
:css('text-align', 'center')
:wikitext(numConv('fa', cn.a))
:tag('td')
:css('text-align', 'center')
:wikitext(numConv('fa', cn.d))
:tag('td')
:css('text-align', 'center')
:wikitext(numConv('fa', cn.k))
:tag('td')
:css('text-align', 'center')
:wikitext(numConv('fa', cn.m))
:done()
end
end
text = text .. '\n' .. tostring(tbl)
return text
end
function p.main(frame)
local nsIsValid = mw.title.getCurrentTitle().namespace == 4
local output = p.currentYear(frame) .. '\n' .. p.prevYear(frame) .. '\n' .. p.otherYears()
.. (nsIsValid and '[[رده:بحثهای نبح| بایگانی]]' or '')
output = frame:expandTemplate{ title = 'ویکیپدیا:نظرخواهی برای حذف/بایگانی/بالا'}
.. '\n' .. p.makeGeneralGraphs(frame, gCount)
.. '\n' .. output
return output
end
return p