وحدة:تغييرات ذات علاقة
هذه الوحدة ما زالت في مرحلة قبل ألفا، لذلك يحتمل أن تكون في مرحلة الجمود ولا أحد يقوم بتطويرها. تبقى الوحدات في هذه المرحلة إلا أن يقوم مطورها او أي أحد آخر اخذ على عاتقه تطويرها أن يكون راضيا عن بناء الوحدة ليرفعها إلى المرحلة التالية. |
وحدة “تغييرات ذات علاقة” تقوم بعمل مناظر لصفحة خاص:أحدث التغييرات الموصولة. وخلافاً لهذه الصفحة الخاصة، تستطيع الوحدة الوصول فقط إلى المراجعة الأخيرة وتاريخها والعضو الذي قام بها.
الاستخدام
عدلتغييرات ذات علاقة بـ الصفحة الرئيسية: {{تغييرات ذات علاقة|main|الصفحة الرئيسية}} →
Name | Last edited | Last editor |
---|---|---|
الصفحة الرئيسة | 20240510180438 | User:محمد أحمد عبد الفتاح |
local p={}
function getParam(frame)
-- This is a longwinded way to return all the args (first choice) or parent.args (second choice) in an array.
local parent, pargs, args
local param={}
parent = frame['parent']
if (parent) then
pargs = parent['args']
end
if (pargs) then
for k,v in pairs(args) do
param[k] = v
end
end
args = frame['args']
if (args) then
for k,v in pairs(args) do
param[k] = v
end
end
return param
end
function getIndexpage(page)
-- get the contents of either the current page (inadvisable...) or a specified page
-- returns either a title object or an error string, and a boolean true for successful completion
local indexpage
if (page) then
indexpage = mw.title.new(page)
if (not(indexpage)) then
return '<span style="color:red">[[Module:Related changes]] error: failed to access page: [[' + tostring(page) + ']]</span>',false
end
else
indexpage = mw.title.getCurrentTitle()
if (not(indexpage)) then
return '<span style="color:red">[[Module:Related changes]] bug: failed to access getCurrentTitle!</span>',false
end
end
return indexpage, true
end
function getLinks(frame,indexpage)
local index = indexpage:getContent() or "" -- indexpage should exist, so no further checking for errors, just return blank
local nextLink = mw.ustring.gmatch(index,"%[%[([^%]|]+)[^%]]-%]%]")
local linklist = {}
for link in nextLink do
local linkval = frame:callParserFunction('REVISIONTIMESTAMP', link)
if (mw.ustring.len(linkval) > 8) then -- don't even index pages that don't get meaningful results
linklist[tostring(link)] = linkval .. '|' .. frame:callParserFunction('REVISIONUSER', link)
end
end
return linklist
end
function display(linklist, options)
if (not(options)) then
options = 'd-'
end
local sorttype = mw.ustring.match(options,'([%l%u])')
local sortdir = mw.ustring.match(options,'([%+%-])')
if (sorttype == 'n') then
sorttype = 'name'
if (sortdir == '-') then
sortdir = 'descending'
else
sortdir = 'ascending'
end
else
sorttype = 'date'
if (sortdir == '+') then
sortdir = 'ascending'
else
sortdir = 'descending'
end
end
local outsort, outarray = {}, {'{| class="wikitable sortable"\n!Name\n!Last edited\n!Last editor'}
for k,v in pairs(linklist) do
if sorttype == 'name' then
table.insert(outsort, k..'|'..v)
else
table.insert(outsort, v..'|'..k)
end
end
table.sort(outsort)
for i = 1,#outsort do
local n, d, u, split
split = mw.text.split(outsort[i],'|',true)
if sorttype == 'name' then
n, d, u= split[3], split[1], split[2]
else
d, u, n = split[1], split[2], split[3]
end
if ((mw.ustring.sub(n, 1, 5) == 'File:') or (mw.ustring.sub(n, 1, 6) == 'Image:')) then
n = ':' .. n
end
table.insert(outarray,'\n|-\n|[['..(n or '[[Module:Related changes]] bug: missing name') .. ']]\n|' .. (d or '[[Module:Related changes]] bug: missing date') .. '\n|[[User:' .. u .. ']]')
end
table.insert(outarray,'\n|}')
return table.concat(outarray)
end
function filter(linklist, action)
-- pass
end
function p.main(frame)
local param = getParam(frame) -- get all parameters in param tabel; args override parent.args
local indexpage = getIndexpage(param.page)
local linklist = getLinks(frame,indexpage)
for operation = 1, #param do
filter(linklist, param[operation])
end
if param.nowiki then
return frame:preprocess('<nowiki>'..display(linklist)..'</nowiki>')
else
return display(linklist,param.options)
end
end
return p