Модул:Infobox — разлика између измена
Пређи на навигацију
Пређи на претрагу
м (Parametar za odsek sad igra važniju ulogu u tome koja će kategorija biti dodata na stranicu) |
м (Ostatak kompleksne logike za autokategorizaciju) |
||
| Ред 7: | Ред 7: | ||
table.insert(cats, name) | table.insert(cats, name) | ||
table.insert(cats, ']]') | table.insert(cats, ']]') | ||
end | |||
local function capFirst(str) | |||
return mw.ustring.upper(mw.ustring.sub(str, 1, 1)) .. mw.ustring.sub(str, 2) | |||
end | end | ||
| Ред 26: | Ред 30: | ||
local semesterRTI = matchRTI and tonumber(matchRTI) or semester | local semesterRTI = matchRTI and tonumber(matchRTI) or semester | ||
cat(cats, data.semesters[semesterRTI] .. ' семестар (РТИ)') | cat(cats, data.semesters[semesterRTI] .. ' семестар (РТИ)') | ||
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) .. ' предмети (РТИ)') | |||
elseif (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 | ||
| Ред 34: | Ред 57: | ||
local departments = decomposeDepartments(args['одсек'] or 'СИ') | local departments = decomposeDepartments(args['одсек'] or 'СИ') | ||
catSemester(cats, args['семестар'], departments) | catSemester(cats, args['семестар'], departments) | ||
catStatus(cats, args['статус'], departments) | |||
catSubject(cats) | |||
return table.concat(cats) | return table.concat(cats) | ||
end | end | ||
return p | return p | ||
Верзија на датум 20. фебруар 2022. у 01:08
Модул за аутокатегоризацију на основу података прослеђених у инфокутију за предмет. Овај модул такође довлачи потребне податке за рад из модула са подацима.
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)
local semester = tonumber(mw.ustring.match(arg, '%d+'))
if departments['СИ'] then
cat(cats, data.semesters[semester] .. ' семестар')
end
if departments['РТИ'] then
local matchRTI = mw.ustring.match(arg, '(%d+) %(РТИ%)')
local semesterRTI = matchRTI and tonumber(matchRTI) or semester
cat(cats, data.semesters[semesterRTI] .. ' семестар (РТИ)')
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) .. ' предмети (РТИ)')
elseif (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