Jump to content

Module:নিবন্ধ ইতিহাস

Unchecked
From Wikipedia
নিবন্ধ ইতিহাস অজানাবিষয়ক ভালো নিবন্ধের মানদণ্ড অনুসারে একটি ভালো নিবন্ধ হিসেবে চিহ্নিত। আপনি যদি নিবন্ধটির আরো উন্নয়ন করতে সমর্থ হন, তবে অনুগ্রহপূর্বক তা করুন। আপনি যদি মনে করেন যে নিবন্ধটিতে মানদণ্ড অনুসৃত হয়নি তাহলে এটির পুনঃপর্যালোচনা আহবান করতে পারেন।
তারিখ মাইলফলক ফলাফল
January 29, 2023 প্রস্তাবিত ভালো নিবন্ধ Passed
এই নিবন্ধ থেকে একটি তথ্য উইকিপিডিয়ার প্রধান পাতার আপনি জানেন কি? January 31, 2024 তারিখে প্রদর্শিত হয়েছে।

-- এই মডিউলটি {{নিবন্ধ ইতিহাস}} টেমপ্লেটের জন্য তৈরি করা হয়েছে।
-- এটি নিবন্ধের ইতিহাস প্রদর্শনের জন্য ব্যবহৃত হবে যেখানে নিবন্ধের প্রতিটি পরিবর্তনের তারিখ, 
-- প্রক্রিয়া এবং ফলাফল প্রদর্শন করা হবে।
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