-- এই মডিউলটি {{নিবন্ধ ইতিহাস}} টেমপ্লেটের জন্য তৈরি করা হয়েছে।
-- এটি নিবন্ধের ইতিহাস প্রদর্শনের জন্য ব্যবহৃত হবে যেখানে নিবন্ধের প্রতিটি পরিবর্তনের তারিখ,
-- প্রক্রিয়া এবং ফলাফল প্রদর্শন করা হবে।
local Date = require("Module:Date")._Date -- তারিখের জন্য
local data = require("Module:নিবন্ধ ইতিহাস/উপাত্ত") -- মডিউলের প্রয়োজনীয় উপাত্ত
local p = {}
local LABEL = data.label
local MESSAGE = data.message
local RESULT = data.result
local function date(txt)
-- এই ফাংশনটি একটি তারিখ স্ট্রিং গ্রহণ করে এবং তারিখটি সাজানো ভাবে প্রদর্শন করে।
local dt = Date(txt)
if(dt) then -- যদি তারিখ সঠিক হয়
dt = dt:text("mdy") -- তারিখ সাজানো
else -- যদি তারিখ ভুল হয়
dt = "<font class='error'>ভুলভাবে বিন্যস্ত তারিখ</font>"
end
-- তারিখ প্রদর্শন
return dt
end
function p.showCurrentStatus(title, topic, currentstatus)
-- বর্তমান অবস্থা প্রদর্শন
local topic = data.topic[topic]
if topic == nil then
topic = "অজানা"
end
local image = data.image[currentstatus]
local message = string.format(MESSAGE[currentstatus], title, title, topic, topic)
return '\n|-\n|[[file:'..image..'|30px]]|| align="center" colspan="2" |' .. message
end
function p.showMilestones(actions)
local result = '\n|-\n!তারিখ!!মাইলফলক!!ফলাফল\n|-\n'
mw.logObject(actions)
for seq, action in pairs(actions) do
local actionLabel = LABEL[action[""]]
local resultLabel = RESULT[action["result"]]
if(action["date"] == nil) then
action["date"] = ""
end
if(action["link"] == nil) then
action["link"] = actionLabel
else
action["link"] = '[['..action["link"]..'|'..actionLabel..']]'
end
if actionLabel == nil then
actionLabel = action[""]
end
if resultLabel == nil then
resultLabel = action["result"]
end
if(action["date"] ~= "") then
local dt = date(action["date"])
local oldid = tonumber(action["oldid"])
if(oldid ~= nil) then
dt = "[[বিশেষ:পার্থক্য/"..oldid.."|"..dt.."]]"
end
result = result .. '|' .. dt .. '||' .. action["link"] .. '||' .. resultLabel .. '\n|-\n'
end
end
return result
end
function p.showDYK(dyks, count)
-- first dyk
local firstDyk = dyks[1]
if(firstDyk["date"] == nil) then
return ""
end
local result = date(firstDyk["date"])
if(count > 1) then
-- multiple dyks
for i = 2, count - 1 do
local dyk = dyks[i]
if(dyk["date"] ~= nil) then
result = result .. ", " .. date(dyk["date"])
end
end
-- last dyk
local lastDyk = dyks[count]
result = result .. " ও " .. date(lastDyk["date"])
end
result = "|[[file:"..data.image["dyk"].."|30px]]||"..string.format(MESSAGE["dyk"],result).."\n|-\n"
return result
end
function p.show(config)
-- MESSAGE is a table that contains the messages that will be displayed
-- based on the current status of the article
-- if the current status is not found in the table, then the function will return as if the article is not in any status
if(MESSAGE[config["currentstatus"]] == nil) then
config["currentstatus"] = "unknown" -- Unknown status
end
local content = '{| align="center" style="text-align:center;" class="tmbox tmbox-notice'
local isSmall = config["small"] or config["actioncount"] > 1
if(isSmall) then
content = content.. ' tmbox-small'
end
content = content .. '"'
--- বর্তমান অবস্থা প্রদর্শন
content = content .. p.showCurrentStatus(config["title"], config["topic"], config["currentstatus"])
-- মাইলফলক প্রদর্শন
if (config["actioncount"] > 0) then
content = content .. p.showMilestones(config["action"])
end
if (config["dykcount"] > 0) then
content = content .. p.showDYK(config["dyk"], config["dykcount"])
end
-- মাইলফলক শেষ; এখন আজাকি প্রদর্শন
content = content .. "|}"
return content
end
function parseArguments(arguments)
local PARAMETER_PATTERN = "(%a+)(%d+)(%a*)" -- pattern to match the parameter name
local parsedConfig = {
-- title of the article
["title"] = mw.title.getCurrentTitle()["text"],
-- topic of the article
["topic"] = arguments["topic"],
-- current status of the article
["currentstatus"] = arguments["currentstatus"],
["actioncount"] = 0,
["dykcount"] = 0,
["action"] = {},
["dyk"] = {}
}
for parameter, value in pairs(arguments) do
-- Parse parameters like action1, action1date, action1result, action1oldid, action1link
value = mw.text.trim(value)
parameter = mw.text.trim(parameter)
parameter = mw.ustring.lower(parameter)
local partBeforeNumber, number, partAfterNumber = string.match(parameter, PARAMETER_PATTERN)
if(partBeforeNumber) then
-- covers the action and dyk parameters
partAfterNumber = tostring(partAfterNumber)
number = tonumber(number)
-- strip the value
if(number ~= nil) then
-- Not a scaler because it has a sequence number
if (parsedConfig[partBeforeNumber] == nil) then
parsedConfig[partBeforeNumber] = {}
end
if (parsedConfig[partBeforeNumber][number] == nil) then
parsedConfig[partBeforeNumber][number] = {}
end
parsedConfig[partBeforeNumber][number][partAfterNumber] = value
countLabel = partBeforeNumber.."count"
-- Increase the count of that particular action
parsedConfig[countLabel] = parsedConfig[countLabel] + 1
else
-- Scaler
parsedConfig[partBeforeNumber] = value
end
else
-- covers the rest of the parameters
-- like topic, currentstatus, small
parsedConfig[parameter] = value
end
end
-- log the parsed config
mw.logObject(parsedConfig)
return parsedConfig
end
function p.main(frame)
local arguments = frame:getParent().args
local parsedConfig = parseArguments(arguments)
return p.show(parsedConfig)
end
return p