মডিউল:অজানাক্রমে প্রবেশদ্বারের উপাদান
অবয়ব
![]() | This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
![]() | ব্যবহৃত লুয়া: |
এই মডিউলটি {{অজানাক্রমে প্রবেশদ্বারের উপাদান}} প্রয়োগ করে। নথির জন্য টেমপ্লেট নথি পৃষ্ঠা দেখুন।
আরো দেখুন
[সম্পাদনা]
-- This module implements [[Template:Random portal component]]
local p = {}
local mRandom = require('মডিউল:Random')
local convert = require('মডিউল:সংখ্যা রূপান্তরকারী').convert
local currentTitle = mw.title.getCurrentTitle()
-- tracking function added by BHG 29/04/2019
-- called as subPageTrackingCategories(pages, args.max)
local function subPageTrackingCategories(pages, max, header)
local retval = "";
local thispagetitle = mw.title.getCurrentTitle().text
-- don't track DYK etc, only selected/featured articles, biogs etc
if ((string.find(header, "/[sS]elected") == -1) and (string.find(header, "/[fF]eatured") == -1)) then
return retval
end
-- no tracking unless we are in Portal namespace
if (mw.title.getCurrentTitle().nsText ~= "Portal") then
return ""
end
-- no tracking if this is a subpage
if ((mw.ustring.match(thispagetitle, "/") ~= nil) and (thispagetitle ~= "AC/DC")) then
return retval
end
local maxNum = tonumber(max)
local availableSubPageCount = maxNum
-- Check for missing subpages at end of alleged number range
while availableSubPageCount > 0 and not mw.title.new(pages.subpage .. '/' .. tostring(availableSubPageCount)).exists do
availableSubPageCount = availableSubPageCount - 1
end
if availableSubPageCount < maxNum then
retval = retval .. ""
else
-- Check for spurious subpages beyond end of alleged number range
while mw.title.new(pages.subpage .. '/' .. tostring(availableSubPageCount + 1)).exists do
availableSubPageCount = availableSubPageCount + 1
end
if availableSubPageCount > maxNum then
retval = retval .. ""
end
end
-- before categorising, check what type of subpage we are categorising, and if detected, categorise images separately
local subpageType = "subpages" -- generic type
local subpageName = pages.subpage
subpageName = mw.ustring.gsub(subpageName, "^[^/]*/", "")
subpageName = mw.ustring.lower(subpageName)
if ((mw.ustring.find(subpageName, "picture", 1, true) ~= nil) or
(mw.ustring.find(subpageName, "image", 1, true) ~= nil) or
(mw.ustring.find(subpageName, "panorama", 1, true) ~= nil)) then
subpageType = "image subpages"
end
if (availableSubPageCount < 2) then
retval = retval .. ""
elseif (availableSubPageCount <= 5) then
retval = retval .. ""
elseif (availableSubPageCount <= 10) then
retval = retval .. ""
elseif (availableSubPageCount <= 15) then
retval = retval .. ""
elseif (availableSubPageCount <= 20) then
retval = retval .. ""
elseif (availableSubPageCount <= 25) then
retval = retval .. ""
elseif (availableSubPageCount <= 30) then
retval = retval .. ""
elseif (availableSubPageCount <= 40) then
retval = retval .. ""
elseif (availableSubPageCount <= 50) then
retval = retval .. ""
else
retval = retval .. ""
end
return retval;
end
local function getRandomNumber(max)
-- gets a random integer between 1 and max; max defaults to 1
return mRandom.number{max or 1}
end
local function expandArg(args, key)
-- Emulate how unspecified template parameters appear in wikitext. If the
-- specified argument exists, its value is returned, and if not the argument
-- name is returned inside triple curly braces.
local val = args[key]
if val then
return val
else
return string.format('{{{%s}}}', key)
end
end
local function getPages(args)
local pages = {}
pages.root = args.rootpage or currentTitle.prefixedText
pages.subpage = pages.root .. '/' .. expandArg(args, 'subpage')
local tries = 10
repeat
pages.random = pages.subpage .. '/' .. convert('bn', tostring(getRandomNumber(args.max)))
tries = tries - 1
until tries < 1 or mw.title.new(pages.random).exists
pages.footer = 'টেমপ্লেট:বাক্স-নিচ'
return pages
end
local function tryExpandTemplate(frame, title, args)
local success, result = pcall(frame.expandTemplate, frame, {title = title, args = args})
if success then
return result
else
local msg = string.format(
'<strong class="error">"[[%s]]" নামক কোন পাতার অস্তিত্ব নেই।</strong>',
title
)
if mw.title.getCurrentTitle().namespace == 100 then -- is in the portal namespace
msg = msg .. '[[বিষয়শ্রেণী:প্রবেশদ্বারে দৃষ্টি আকর্ষণ প্রয়োজন]]'
end
return msg
end
end
local function getHeader(frame, pages, header, template)
return tryExpandTemplate(
frame,
template or pages.root .. '/বাক্স-উপর',
{header, pages.random}
)
end
local function getRandomSubpageContent(frame, pages)
return tryExpandTemplate(
frame,
pages.random
)
end
local function getFooter(frame, pages, link)
return tryExpandTemplate(
frame,
pages.footer,
{link}
)
end
function p._main(args, frame)
frame = frame or mw.getCurrentFrame()
local pages = getPages(args)
local ret = {}
ret[#ret + 1] = getHeader(frame, pages, args.header or 'subpage', args.headertemplate)
ret[#ret + 1] = getRandomSubpageContent(frame, pages)
if not args.footer or not args.footer:find('%S') then
ret[#ret + 1] = '<div style="clear:both;"></div></div>'
else
ret[#ret + 1] = getFooter(frame, pages, string.format(
'[[%s|%s]]',
pages.subpage,
expandArg(args, 'footer')
))
end
return table.concat(ret, '\n') .. subPageTrackingCategories(pages, args.max, args.header)
end
function p._nominate(args, frame)
frame = frame or mw.getCurrentFrame()
local pages = getPages(args)
local ret = {}
ret[#ret + 1] = getHeader(frame, pages, expandArg(args, 'header'), args.headertemplate)
ret[#ret + 1] = getRandomSubpageContent(frame, pages)
ret[#ret + 1] = getFooter(frame, pages, string.format(
'[[/মনোনয়ন/%s|প্রস্তাবনা]] • [[%s|%s]] ',
expandArg(args, 'subpage'),
pages.subpage,
args.footer or 'সংগ্রহশালা'
))
return table.concat(ret, '\n') .. subPageTrackingCategories(pages, args.max, args.header)
end
local function makeInvokeFunction(func)
return function (frame)
local args = require('Module:Arguments').getArgs(frame, {
trim = false,
removeBlanks = false,
wrappers = {
'টেমপ্লেট:অজানাক্রমে প্রবেশদ্বারের উপাদান',
'টেমপ্লেট:মনোনয়ন করুন সহকারে অজানাক্রমে প্রবেশদ্বারের উপাদান'
}
})
return func(args, frame)
end
end
p.main = makeInvokeFunction(p._main)
p.nominate = makeInvokeFunction(p._nominate)
return p