Module:Chapters: Difference between revisions
No edit summary |
NeonWabbit (talk | contribs) No edit summary |
||
Line 65: | Line 65: | ||
local year, month, day = string.match(date, "(%d+)%-(%d+)%-(%d+)") | local year, month, day = string.match(date, "(%d+)%-(%d+)%-(%d+)") | ||
if year and month and day then | if year and month and day then | ||
return string.format("{{Start date|%s|%s|%s}}", year, month, day) | return string.format("{{Start date and age|%s|%s|%s}}", year, month, day) | ||
else | else | ||
return date | return date | ||
Line 96: | Line 96: | ||
:done() | :done() | ||
-- Optionally add image | -- Optionally add image with standard size | ||
if image and image ~= "" then | if image and image ~= "" then | ||
infobox:tag('tr') | infobox:tag('tr') | ||
Line 102: | Line 102: | ||
:attr('colspan', '2') | :attr('colspan', '2') | ||
:css('text-align', 'center') | :css('text-align', 'center') | ||
:wikitext('[[File:' .. image .. ']]') | :wikitext('[[File:' .. image .. '|250px]]') | ||
:done() | :done() | ||
:done() | :done() |
Revision as of 03:41, 21 May 2024
Documentation for this module may be created at Module:Chapters/doc
-- Module:Chapters
local p = {}
function p.getChaptersList()
local listPage = mw.title.new('Template:ChapterList')
if not listPage then
return {}
end
local content = listPage:getContent()
if not content then
return {}
end
local chapters = {}
for number, title, date, pagecount in string.gmatch(content, "{{Chapter|number=(%d+)|title=([^|]+)|date=([^|]+)|pagecount=(%d+)}}") do
table.insert(chapters, {number = tonumber(number), title = title, date = date, pagecount = tonumber(pagecount)})
end
mw.logObject(chapters) -- Debug: log the parsed chapters
return chapters
end
function p.getChapterDetails(chapterTitle, detail)
local chapters = p.getChaptersList()
for _, chapter in ipairs(chapters) do
if chapter.title == chapterTitle then
mw.logObject(chapter) -- Debug: log the chapter details
return chapter[detail]
end
end
return nil
end
function p.getTotalChapters()
local totalChapters = #p.getChaptersList()
mw.log("Total chapters: " .. totalChapters) -- Debug: log the total number of chapters
return totalChapters
end
function p.getNextChapter(chapterTitle)
local chapters = p.getChaptersList()
for i, chapter in ipairs(chapters) do
if chapter.title == chapterTitle and i < #chapters then
mw.log("Next chapter: " .. chapters[i + 1].title) -- Debug: log the next chapter
return chapters[i + 1].title
end
end
return nil
end
function p.getPreviousChapter(chapterTitle)
local chapters = p.getChaptersList()
for i, chapter in ipairs(chapters) do
if chapter.title == chapterTitle and i > 1 then
mw.log("Previous chapter: " .. chapters[i - 1].title) -- Debug: log the previous chapter
return chapters[i - 1].title
end
end
return nil
end
function p.formatDate(date)
local year, month, day = string.match(date, "(%d+)%-(%d+)%-(%d+)")
if year and month and day then
return string.format("{{Start date and age|%s|%s|%s}}", year, month, day)
else
return date
end
end
function p.infoboxChapter(frame)
local chapterTitle = frame.args.chapter_title or mw.title.getCurrentTitle().text
local image = frame.args.image
local chapter_no = p.getChapterDetails(chapterTitle, "number") or "N/A"
local date = p.getChapterDetails(chapterTitle, "date") or "N/A"
local pagecount = p.getChapterDetails(chapterTitle, "pagecount") or "N/A"
local total_chapters = p.getTotalChapters() or "N/A"
local next_chapter = p.getNextChapter(chapterTitle) or "N/A"
local prev_chapter = p.getPreviousChapter(chapterTitle) or "N/A"
local infobox = mw.html.create('table')
infobox:addClass('infobox')
-- Add title as heading
infobox:tag('tr')
:tag('th')
:attr('colspan', '2')
:css('text-align', 'center')
:css('font-size', '125%')
:css('padding', '5px')
:wikitext(chapterTitle)
:done()
:done()
-- Optionally add image with standard size
if image and image ~= "" then
infobox:tag('tr')
:tag('td')
:attr('colspan', '2')
:css('text-align', 'center')
:wikitext('[[File:' .. image .. '|250px]]')
:done()
:done()
end
-- Add chapter number and total chapters on the same line
local chapter_info = string.format("%s of %s [[Template:ChapterList|(list of chapters)]]", chapter_no, total_chapters)
infobox:tag('tr')
:tag('th'):wikitext('Chapter'):done()
:tag('td'):wikitext(chapter_info):done()
:done()
infobox:tag('tr')
:tag('th'):wikitext('Date'):done()
:tag('td'):wikitext(p.formatDate(date)):done()
:done()
infobox:tag('tr')
:tag('th'):wikitext('Page count'):done()
:tag('td'):wikitext(pagecount):done()
:done()
-- Add chapter navigation heading
infobox:tag('tr')
:tag('th')
:attr('colspan', '2')
:css('text-align', 'center')
:css('font-size', '110%')
:css('padding', '5px')
:css('background-color', '#f0f0f0')
:wikitext('Chapter navigation')
:done()
:done()
-- Add chapter navigation links in separate columns
local nav_row = infobox:tag('tr')
nav_row:tag('td')
:css('text-align', 'left')
:wikitext(prev_chapter ~= "N/A" and string.format("[[%s:%s|← %s]]", mw.title.getCurrentTitle().nsText, prev_chapter, prev_chapter) or "← Previous")
:done()
nav_row:tag('td')
:css('text-align', 'right')
:wikitext(next_chapter ~= "N/A" and string.format("[[%s:%s|%s →]]", mw.title.getCurrentTitle().nsText, next_chapter, next_chapter) or "Next →")
:done()
nav_row:done()
-- Return the complete wikitext
return frame:preprocess(tostring(infobox))
end
return p