模組:Vital articles
外观
local p = {}
local lib_PJBS = require("Module:PJBSClass/main")
function p.getDataPage(input_data)
--相依 : 進制模板
local convertBase, convertBaseT = require("Module:BaseConvert").convert, mw.title.new("Template:進制"):getContent()
local subject_page = lib_PJBS.subjectPageTitle(input_data)
subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
if type(subject_page) == type(nil) then return {exists=false} end
local first_char = mw.ustring.upper(mw.ustring.sub(subject_page.fullText, 1, 1)) -- get first letter of article name
local codepoint = mw.ustring.codepoint(first_char, 1, 1)
local base36 = convertBase({n = codepoint, base = 36})
local page = base36:sub(-1,-1)
if (tonumber(page) or 10) < 10 then page = "其他" end
local data_page = mw.title.new('Wikipedia:基礎條目/資料/' .. page .. '.json')
return data_page
end
function p.getVitalData(input_data)
local subject_page = lib_PJBS.subjectPageTitle(input_data)
subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
if type(subject_page) == type(nil) then return nil end
local data_page = p.getDataPage(input_data)
if data_page.exists then
local index = tonumber(subject_page.fullText) or subject_page.fullText --convert to number if page is numerical, otherwise loadJsonData does not work
local data = mw.loadJsonData(data_page.fullText)[index]
return data
end
return nil
end
function p.getTopic(input_data)
local subject_page = lib_PJBS.subjectPageTitle(input_data)
subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
if type(subject_page) == type(nil) then return "" end
local data = p.getVitalData(input_data)
if type(data) ~= type(nil) then
return data.topic or ""
end
return ""
end
function p.getLevel(input_data)
local subject_page = lib_PJBS.subjectPageTitle(input_data)
subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
if type(subject_page) == type(nil) then return "" end
local data = p.getVitalData(input_data)
if type(data) ~= type(nil) then
return data.level or -1
end
return -1
end
function p.getSublist(input_data)
local subject_page = lib_PJBS.subjectPageTitle(input_data)
subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
if type(subject_page) == type(nil) then return "" end
local data = p.getVitalData(input_data)
if type(data) ~= type(nil) then
return data.sublist or ''
end
return ''
end
function p.getSection(input_data)
local subject_page = lib_PJBS.subjectPageTitle(input_data)
subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
if type(subject_page) == type(nil) then return "" end
local data = p.getVitalData(input_data)
if type(data) ~= type(nil) then
return data.section or ''
end
return ''
end
function p.getLink(input_data)
local subject_page = lib_PJBS.subjectPageTitle(input_data)
subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
if type(subject_page) == type(nil) then return "" end
local data = p.getVitalData(input_data)
if type(data) ~= type(nil) then
local level = tostring(data.level)
local level_name = ({'一','二','三','四','五','六','七','八','九','十',[0]='零'})[data.level]
if level and level_name then
local link = 'Wikipedia:基礎條目'
if level~='3' then
if level=='4' then
link = link .. '/擴展'
else
link = link .. '/第' .. level_name ..'級'
end
end
if (level=='4' or level=='5') and data.topic then
link = link .. '/' .. data.topic
end
if data.sublist then
link = link .. '/' .. data.sublist
end
if data.section then
link = link .. '#' .. data.section
end
if not mw.title.new(link).exists then -- add tracking category if link does not exist
--addCategory('Wikipedia vital articles needing attention', 'L')
end
return link
end
end
return ''
end
return p