Модул:Infobox — разлика између измена
Пређи на навигацију
Пређи на претрагу
м (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 | local function capFirst(str) | ||
return mw.ustring.upper(mw.ustring.sub(str, 1, 1)) .. mw.ustring.sub(str, 2) | |||
end | |||
local | |||
local function decomposeDepartments(arg) | |||
local decomposed = {} | |||
for _, v in pairs(mw.text.split(arg, ', ', true)) do | |||
decomposed[v] = true | |||
end | end | ||
return decomposed | |||
local | end | ||
cat(cats, data.semesters[ | |||
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