Mô đun:Navseasoncats with year navigation

require('Module:Module wikitext')._addText([[{{db-reason|1=mô đun không sử dụng|help=off}}]]);
local p = {}
local nsc = require('Module:Navseasoncats')

local errorList = {
	["FIND_VAR"] = "Function find_var can't recognize the decade for category %s.",
	["NO_YEAR"] = "{{Navseasoncats with centuries below decade}} can't recognize the year for category %s.",
	["NO_DECADE"] = "{{Navseasoncats with centuries below decade}} can't recognize the decade for category %s."
}

local function create_category(firstPart, lastPart, dateValue, dateWord)
	local category = mw.text.trim(firstPart .. ' ' .. nsc.addord(dateValue) .. dateWord .. lastPart)

	if (mw.title.new(category, 'Category').exists) then
		return category
	else
		return nil
	end
end

local function getCentury(decade)
	decade = tonumber(decade)
	local century = math.floor(((decade - 1) / 100) + 1) --from {{CENTURY}}
	if (string.match(decade, '00$')) then
		century = century + 1
	end --'2000' is technically in the 20th, but the rest of the 2000s is in the 21st
	
	return century
end

local function getDecade(year)
	year = tonumber(year)
	local decade = year / 10
	decade = math.floor(decade)
	return decade .. "0s"
end

local function getNestTierDateCategory(dateArgs, dateValue, firstPart, lastPart, decade)
	local nextTierDateCategory = ""
	if (dateArgs.dateType == "year") then
		local decade = getDecade(dateValue)
		nextTierDateCategory = create_category(firstPart, lastPart, decade, " ")
		if (not nextTierDateCategory) then --check for "the YYYY"
			nextTierDateCategory = create_category(firstPart, lastPart, "the " .. decade, " ")
		end
	elseif (dateArgs.dateType == "decade") then
		local century = getCentury(dateValue)
		nextTierDateCategory = create_category(firstPart, lastPart, century, " century ")
		if (not nextTierDateCategory) then --check for hyphenated century
			nextTierDateCategory = create_category(firstPart, lastPart, century, "-century ")
		end
	end

	return nextTierDateCategory
end

local function isCategoryValid(dateValue, dateType, dateArgs)
	if ((dateValue) and (dateType == dateArgs.dateType)) then
		return true
	else
		return false
	end
end

local function getError(pageName, avoidSelf, testcases, errorMessage)
	local errorOut = ''
	if (avoidSelf) then
		local errors = nsc.errorclass(string.format(errorMessage, pageName))
		errorOut = nsc.failedcat(errors, 'P')
		if (testcases) then
			string.gsub(errorOut, '(%[%[)(Category)', '%1:%2')
		end
	end
	return errorOut
end

local function getAvoidSelf(currentTitle, testcases)
	local avoidSelf = (currentTitle.text ~= 'Navseasoncats with year navigation' and
		currentTitle.text ~= 'Navseasoncats with year navigation/doc' and
		currentTitle.text ~= 'Navseasoncats with year navigation/sandbox' and
		(currentTitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors
	return avoidSelf
end

local function main(frame, dateArgs)
	local currentTitle = mw.title.getCurrentTitle()
	local testcases = (currentTitle.subpageText == 'testcases')
	local avoidSelf = getAvoidSelf(currentTitle, testcases)

	local getArgs = require('Module:Arguments').getArgs
	local args = getArgs(frame)
	
	local testcase = args[1]

	if ((testcase == nil) and (avoidself == false)) then
		return ''
	end

	local pageName = testcase or currentTitle.baseText
	
	local findVar = nsc.find_var(pageName) --picks up decades/seasons/etc.
	if (findVar[1] == 'error') then
		return getError(pageName, avoidSelf, testcases, errorList["FIND_VAR"])
	end

	local dateValue = tonumber(string.match(findVar[2], dateArgs.pattern))
	if (not isCategoryValid(dateValue, findVar[1], dateArgs)) then
		return getError(pageName, avoidSelf, testcases, dateArgs.errorMessage)
	end

	local nav1 = ''
	if (testcase) then
		nav1 = frame:expandTemplate{title = 'Navseasoncats', args = {testcase = testcase}} --not sure how else to pass frame & args together
	else
		nav1 = nsc.navseasoncats(frame)
	end

	local firstPart, lastPart = string.match(pageName, '^(.*)' .. findVar[2] .. '(.*)$')
	firstPart = mw.text.trim(firstPart or '')
	lastPart  = mw.text.trim(lastPart or '')

	local nextTierDateCategory = getNestTierDateCategory(dateArgs, dateValue, firstPart, lastPart, decade)

	if (nextTierDateCategory) then
		local nav2 = frame:expandTemplate{title = 'Navseasoncats', args = {[dateArgs.argName] = nextTierDateCategory}} --not sure how else to pass frame & args together
		return '<div style="display:block !important; max-width: calc(100% - 25em);">' .."\n" .. nav1 .. nav2 .."\n" .. '</div>'
	else
		return nav1
	end
end

function p.centuriesBelowDecade(frame)
	local dateArgs = {dateType = "decade", pattern = '^(%d+)s', argName = "century-below-decade", errorMessage = errorList["NO_DECADE"]}
	return main(frame, dateArgs)
end

function p.decadesBelowYear(frame)
	local dateArgs = {dateType = "year", pattern = '^(%d+)', argName = "decade-below-year", errorMessage = errorList["NO_YEAR"]}
	return main(frame, dateArgs)
end

return p
Chúng tôi bán
Bài viết liên quan
Những quyền năng của Công Lý Vương [Michael]
Những quyền năng của Công Lý Vương [Michael]
Thân là kĩ năng có quyền hạn cao nhất, Công Lí Vương [Michael] có thể chi phối toàn bộ những kẻ sở hữu kĩ năng tối thượng thuộc Thiên Sứ hệ
Tại sao nên làm việc ở Philippines?
Tại sao nên làm việc ở Philippines?
So với các nước trong khu vực, mức sống ở Manila khá rẻ trừ tiền thuê nhà có hơi cao
🌳 Review Hà Giang 3N2Đ chỉ với 1,8tr/người ❤️
🌳 Review Hà Giang 3N2Đ chỉ với 1,8tr/người ❤️
Mình chưa từng thấy 1 nơi nào mà nó đẹp tới như vậy,thiên nhiên bao la hùng vĩ với những quả núi xếp lên nhau. Đi cả đoạn đường chỉ có thốt lên là sao có thể đẹp như vậy
Review phim
Review phim "Muốn gặp anh"
Nhận xét về phim "Muốn gặp anh" (hiện tại phin được đánh giá 9.2 trên douban)