Module:InterviewNavbox: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
Created page with "local p = {} local function getDateRange(dateString) local year = tonumber(dateString:sub(1, 4)) if year >= 1981 and year <= 1995 then return 1 elseif year >= 1996 and year <= 2005 then return 2 elseif year >= 2006 and year <= 2015 then return 3 elseif year >= 2016 and year <= 2020 then return 4 elseif year >= 2021 and year <= 2025 then return 5 elseif year >= 2026 and year <= 2030 then ret..." Tags: Mobile edit Mobile web edit Advanced mobile edit |
No edit summary |
||
(9 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local p = {} |
local p = {} |
||
local dateParser = require('Module:InterviewUtils') |
|||
-- Initialize caches |
|||
⚫ | |||
local dateRangeCache = {} |
|||
local year = tonumber(dateString:sub(1, 4)) |
|||
local parsedDateCache = {} |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
-- Check if the year's range is cached |
|||
if not dateRangeCache[year] then |
|||
⚫ | |||
local ranges = { |
|||
{1981, 1995, 1}, |
|||
{1996, 2005, 2}, |
|||
{2006, 2015, 3}, |
|||
{2016, 2020, 4}, |
|||
{2021, 2025, 5}, |
|||
{2026, 2030, 6}, |
|||
} |
|||
⚫ | |||
⚫ | |||
dateRangeCache[year] = range[3] -- Cache the result |
|||
break |
|||
⚫ | |||
⚫ | |||
end |
end |
||
return dateRangeCache[year] or nil |
|||
return nil |
|||
end |
end |
||
function p.main(frame) |
function p.main(frame) |
||
local dateRangeInput = tonumber(frame.args[1]) or 1 |
local dateRangeInput = tonumber(frame.args[1]) or 1 |
||
local |
local content = mw.loadJsonData('JoJo Wiki:Interviews') |
||
local interviews_table = content.interviews |
|||
local list = {} |
local list = {} |
||
local titleGroup = {} |
|||
⚫ | |||
-- Group interviews by title without date |
|||
⚫ | |||
-- Use caching for date parsing |
|||
for _, interview in ipairs(interviews_table) do |
|||
local date = interview.date |
|||
-- Check if the parsed date is cached |
|||
if not parsedDateCache[date] then |
|||
parsedDateCache[date] = dateParser.parse(date) -- Cache the parsed date |
|||
⚫ | |||
local year = parsedDateCache[date] |
|||
local titleWithoutDate = string.match(interview.title, '^(.-)%s*%(.-%)$') or interview.title |
|||
titleGroup[titleWithoutDate] = titleGroup[titleWithoutDate] or {} |
|||
table.insert(titleGroup[titleWithoutDate], {interview = interview, year = year}) |
|||
end |
|||
-- Generate list |
|||
for _, interview in ipairs(interviews_table) do |
|||
local year = dateParser.parse(interview.date) |
|||
⚫ | |||
if dateRange == dateRangeInput then |
if dateRange == dateRangeInput then |
||
local titleWithoutDate = string.match(interview.title, '^(.-)%s*%(.-%)$') or interview.title |
|||
local interviews = titleGroup[titleWithoutDate] |
|||
local hasMultipleInterviews = #interviews > 1 |
|||
local itemTitle = hasMultipleInterviews and interview.title or titleWithoutDate |
|||
local item = frame:expandTemplate{title = 'INT', args = {interview.title, itemTitle}} |
|||
table.insert(list, '*' .. item) |
|||
end |
end |
||
end |
end |
||
return table.concat(list, '\n') |
return table.concat(list, '\n') |
||
end |
end |
||
return p |
return p |
Latest revision as of 06:42, 28 February 2024
Documentation for this module may be created at Module:InterviewNavbox/doc
local p = {}
local dateParser = require('Module:InterviewUtils')
-- Initialize caches
local dateRangeCache = {}
local parsedDateCache = {}
local function getDateRange(year)
-- Check if the year's range is cached
if not dateRangeCache[year] then
local ranges = {
{1981, 1995, 1},
{1996, 2005, 2},
{2006, 2015, 3},
{2016, 2020, 4},
{2021, 2025, 5},
{2026, 2030, 6},
}
for _, range in ipairs(ranges) do
if year >= range[1] and year <= range[2] then
dateRangeCache[year] = range[3] -- Cache the result
break
end
end
end
return dateRangeCache[year] or nil
end
function p.main(frame)
local dateRangeInput = tonumber(frame.args[1]) or 1
local content = mw.loadJsonData('JoJo Wiki:Interviews')
local interviews_table = content.interviews
local list = {}
local titleGroup = {}
-- Group interviews by title without date
-- Use caching for date parsing
for _, interview in ipairs(interviews_table) do
local date = interview.date
-- Check if the parsed date is cached
if not parsedDateCache[date] then
parsedDateCache[date] = dateParser.parse(date) -- Cache the parsed date
end
local year = parsedDateCache[date]
local titleWithoutDate = string.match(interview.title, '^(.-)%s*%(.-%)$') or interview.title
titleGroup[titleWithoutDate] = titleGroup[titleWithoutDate] or {}
table.insert(titleGroup[titleWithoutDate], {interview = interview, year = year})
end
-- Generate list
for _, interview in ipairs(interviews_table) do
local year = dateParser.parse(interview.date)
local dateRange = getDateRange(year)
if dateRange == dateRangeInput then
local titleWithoutDate = string.match(interview.title, '^(.-)%s*%(.-%)$') or interview.title
local interviews = titleGroup[titleWithoutDate]
local hasMultipleInterviews = #interviews > 1
local itemTitle = hasMultipleInterviews and interview.title or titleWithoutDate
local item = frame:expandTemplate{title = 'INT', args = {interview.title, itemTitle}}
table.insert(list, '*' .. item)
end
end
return table.concat(list, '\n')
end
return p