Module:InterviewNavigation: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
No edit summary |
No edit summary Tag: Reverted |
||
Line 1: | Line 1: | ||
local p = {} |
local p = {} |
||
local function |
local function load_interviews() |
||
local month_name, day, year = date_string:match("(%a+)%s*(%d*),%s*(%d+)") |
|||
if not year then |
|||
month_name, year = date_string:match("(%a+)%s*(%d+)") |
|||
day = nil |
|||
end |
|||
if not month_name then |
|||
year = date_string:match("(%d+)") |
|||
month_name = nil |
|||
day = nil |
|||
end |
|||
local month_number |
|||
if month_name then |
|||
month_number = mw.language.getContentLanguage():formatDate("n", month_name .. " 1, " .. year) |
|||
end |
|||
return { |
|||
year = tonumber(year), |
|||
month = tonumber(month_number), |
|||
day = tonumber(day) |
|||
} |
|||
end |
|||
local function load_and_sort_interviews() |
|||
local content = mw.loadJsonData("JoJo Wiki:Interviews") |
local content = mw.loadJsonData("JoJo Wiki:Interviews") |
||
local interviews_table = content.interviews |
local interviews_table = content.interviews |
||
Line 36: | Line 10: | ||
table.insert(interviews, interview) |
table.insert(interviews, interview) |
||
end |
end |
||
-- Sort interviews by date |
|||
table.sort(interviews, function(a, b) |
|||
local a_date = parse_date(a.date) |
|||
local b_date = parse_date(b.date) |
|||
if a_date.year ~= b_date.year then |
|||
return a_date.year < b_date.year |
|||
elseif a_date.month and b_date.month and a_date.month ~= b_date.month then |
|||
return a_date.month < b_date.month |
|||
elseif a_date.day and b_date.day and a_date.day ~= b_date.day then |
|||
return a_date.day < b_date.day |
|||
else |
|||
return false |
|||
end |
|||
end) |
|||
return interviews |
return interviews |
||
end |
end |
||
local function find_prev_and_next_interviews( |
local function find_prev_and_next_interviews(interviews, current_title) |
||
local prev, next |
local prev, next |
||
local formatted_title = current_title:gsub("Interview:", "") |
local formatted_title = current_title:gsub("Interview:", "") |
||
for i, interview in ipairs( |
for i, interview in ipairs(interviews) do |
||
if interview.title == formatted_title then |
if interview.title == formatted_title then |
||
prev = i > 1 and |
prev = i > 1 and interviews[i - 1] or nil |
||
next = i < # |
next = i < #interviews and interviews[i + 1] or nil |
||
break |
break |
||
end |
end |
||
Line 75: | Line 33: | ||
local nav_type = frame.args[2] |
local nav_type = frame.args[2] |
||
local |
local interviews = load_interviews() |
||
local prev_interview, next_interview = find_prev_and_next_interviews( |
local prev_interview, next_interview = find_prev_and_next_interviews(interviews, current_title) |
||
if nav_type == "prev" and prev_interview then |
if nav_type == "prev" and prev_interview then |
Revision as of 15:40, 5 May 2023
Documentation for this module may be created at Module:InterviewNavigation/doc
local p = {}
local function load_interviews()
local content = mw.loadJsonData("JoJo Wiki:Interviews")
local interviews_table = content.interviews
-- Convert the interviews table to an array
local interviews = {}
for _, interview in pairs(interviews_table) do
table.insert(interviews, interview)
end
return interviews
end
local function find_prev_and_next_interviews(interviews, current_title)
local prev, next
local formatted_title = current_title:gsub("Interview:", "")
for i, interview in ipairs(interviews) do
if interview.title == formatted_title then
prev = i > 1 and interviews[i - 1] or nil
next = i < #interviews and interviews[i + 1] or nil
break
end
end
return prev, next
end
function p.main(frame)
local current_title = frame.args[1]
local nav_type = frame.args[2]
local interviews = load_interviews()
local prev_interview, next_interview = find_prev_and_next_interviews(interviews, current_title)
if nav_type == "prev" and prev_interview then
return prev_interview.title
elseif nav_type == "next" and next_interview then
return next_interview.title
else
return ""
end
end
return p