Модул:Infobox

Извор: SI Wiki
Датум измене: 26. фебруар 2022. у 15:01; аутор: KockaAdmiralac (разговор | доприноси) (Podrška za predmete u više semestara)
Пређи на навигацију Пређи на претрагу

Модул за аутокатегоризацију на основу података прослеђених у инфокутију за предмет. Овај модул такође довлачи потребне податке за рад из модула са подацима.


local p = {}

local data = mw.loadData('Module:Infobox/data')

local function cat(cats, name)
	table.insert(cats, '[[Категорија:')
	table.insert(cats, name)
	table.insert(cats, ']]')
end

local function capFirst(str)
	return mw.ustring.upper(mw.ustring.sub(str, 1, 1)) .. mw.ustring.sub(str, 2)
end

local function decomposeDepartments(arg)
	local decomposed = {}
	for _, v in pairs(mw.text.split(arg, ', ', true)) do
		decomposed[v] = true
	end
	return decomposed
end

local function catSemester(cats, arg, departments)
	for _, part in ipairs(mw.text.split(arg, ', ')) do
		local deptSemester, dept = mw.ustring.match(part, '(%d+) %((%w+)%)')
		local semester = tonumber(deptSemester or part)
		if (dept == 'СИ') or ((not dept) and departments['СИ']) then
			cat(cats, data.semesters[semester] .. ' семестар')
		end
		if (dept == 'РТИ') or ((not dept) and departments['РТИ']) then
			cat(cats, data.semesters[semester] .. ' семестар (РТИ)')
		end
	end
end

local function catStatus(cats, arg, departments)
	for _, part in ipairs(mw.text.split(arg, ', ')) do
		local deptStatus, dept = mw.ustring.match(part, '(%w+) %((%w+)%)')
		local status = deptStatus or part
		if (dept == 'СИ') or ((not dept) and departments['СИ']) then
			cat(cats, capFirst(status) .. ' предмети')
		end
		if (dept == 'РТИ') or ((not dept) and departments['РТИ']) then
			cat(cats, capFirst(status) .. ' предмети (РТИ)')
		end
	end
end

local function catSubject(cats)
	local subject = mw.title.getCurrentTitle().text
	if mw.site.stats.pagesInCategory(subject) > 0 then
		cat(cats, subject)
	end
end

function p.main(frame)
	local cats = {}
	local args = frame:getParent().args
	local departments = decomposeDepartments(args['одсек'] or 'СИ')
	catSemester(cats, args['семестар'], departments)
	catStatus(cats, args['статус'], departments)
	catSubject(cats)
	return table.concat(cats)
end

return p