Модул:Infobox — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (Ispravka logike za dohvatanje RTI semestra)
м (Samo 20)
 
(11 међуизмена истог корисника није приказано)
Ред 2: Ред 2:


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


local function cat(cats, name)
local function cat(cats, name)
Ред 9: Ред 10:
end
end


local function catSemester(cats, arg)
local function capFirst(str)
local semester = tonumber(mw.ustring.match(arg, '%d+'))
return mw.ustring.upper(mw.ustring.sub(str, 1, 1)) .. mw.ustring.sub(str, 2)
local matchSI = mw.ustring.match(arg, '%d+ %(СИ%)')
end
local matchRTI = mw.ustring.match(arg, '(%d+) %(РТИ%)')
 
if (not matchRTI) or matchSI then
local function decomposeDepartments(arg)
cat(cats, data.semesters[semester] .. ' семестар')
local decomposed = {}
for _, v in pairs(mw.text.split(arg, ', ', true)) do
decomposed[v] = true
end
end
if (not matchSI) or matchRTI then
return decomposed
local semesterRTI = matchRTI and tonumber(matchRTI) or semester
end
cat(cats, data.semesters[semesterRTI] .. ' семестар (РТИ)')
 
local function catSemester(cats, arg, departments)
for _, part in ipairs(mw.text.split(arg, ', ', true)) 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, ', ', true)) 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
end
end
Ред 25: Ред 58:
local cats = {}
local cats = {}
local args = frame:getParent().args
local args = frame:getParent().args
catSemester(cats, args['семестар'])
local departments = decomposeDepartments(args['одсек'] or 'СИ')
catSemester(cats, args['семестар'], departments)
catStatus(cats, args['статус'], departments)
catSubject(cats)
return table.concat(cats)
return table.concat(cats)
end
function p.cardlink(frame)
local linked = {}
local codes = frame.args[1]
for _, code in ipairs(mw.text.split(codes, ', ', true)) do
local year = mw.ustring.sub(code, 1, 2)
local programme = mw.ustring.sub(code, 3, 3)
if programme == 'М' then
-- Ове картице предмета су потпуно неконзистентне за мастер предмете
-- тако да ће морати да се у будуће прави мапирање за ове потребе.
year = '20'
end
local department = mw.ustring.sub(code, 4, 5)
local latinified = latinify(code)
if department == '00' then
-- Ово није прави предмет ([[Стручна пракса]]).
table.insert(linked, code)
else
table.insert(linked, table.concat({
'[https://www.etf.bg.ac.rs/fis/karton_predmeta/',
latinified,
'-20',
year,
' ',
code,
']'
}, ''))
end
end
return table.concat(linked, ', ')
end
end


return p
return p

Тренутна верзија на датум 30. октобар 2023. у 02:15

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


local p = {}

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

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, ', ', true)) 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, ', ', true)) 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

function p.cardlink(frame)
	local linked = {}
	local codes = frame.args[1]
	for _, code in ipairs(mw.text.split(codes, ', ', true)) do
		local year = mw.ustring.sub(code, 1, 2)
		local programme = mw.ustring.sub(code, 3, 3)
		if programme == 'М' then
			-- Ове картице предмета су потпуно неконзистентне за мастер предмете
			-- тако да ће морати да се у будуће прави мапирање за ове потребе.
			year = '20'
		end
		local department = mw.ustring.sub(code, 4, 5)
		local latinified = latinify(code)
		if department == '00' then
			-- Ово није прави предмет ([[Стручна пракса]]).
			table.insert(linked, code)
		else
			table.insert(linked, table.concat({
				'[https://www.etf.bg.ac.rs/fis/karton_predmeta/',
				latinified,
				'-20',
				year,
				' ',
				code,
				']'
			}, ''))
		end
	end
	return table.concat(linked, ', ')
end

return p