Module:InterviewArchive: Difference between revisions

Content deleted Content added
No edit summary
No edit summary
 
(47 intermediate revisions by 2 users not shown)
Line 2:
local p = {}
 
local function generateInterviewcleanIntervieweeName(interview, frameinterviewee)
local output = {}
local year = utils.parse(interview.date)
local year, _, _ = utils.parse(interview.date) -- get the year from the date
 
local function cleanIntervieweeName(interviewee)
local cleaned = mw.text.trim(interviewee)
cleaned = string.gsub(cleaned, '%[%[(.-)%]%]', '%1') -- remove wikitext link
Line 15 ⟶ 10:
cleaned = string.gsub(cleaned, "'", ''') -- replace single quotes with HTML character entity
return cleaned
end
 
local function generateInterview(interview, frame)
local output = {}
local year = utils.parse(interview.date)
local year, _, _ = utils.parse(interview.date) -- get the year from the date
 
local cleanInterviewees = {}
for _, interviewee in ipairs(interview.interviewee) do
Line 22:
table.insert(cleanInterviewees, cleanInterviewee)
end
table.insert(output, '<div class="mnbox interview" id="' .. interview.title .. '" data-year="' .. year .. '" data-interviewee=\'' .. mw.text.jsonEncode(cleanInterviewees) .. '\' data-type="' .. interview.type .. '" data-tags=\'' .. mw.text.jsonEncode(interview.tags) .. '\'>')
local function valueOrDefault(value, default)
if value == nil or value == '' then
return default
else
return value
end
end
 
table.insert(output, '<div class="mnbox interview" id="' .. interview.title .. '" data-year="' .. year .. '" data-interviewee=\'' .. mw.text.jsonEncode(cleanInterviewees) .. '\' data-type="' .. interview.type .. '" data-tlstatus="' .. valueOrDefault(interview.translation, 'Complete') .. '" data-trstatus="' .. valueOrDefault(interview.transcript, 'Complete') .. '" data-publication="' .. valueOrDefault(interview.publication, 'None') .. '" data-tags=\'' .. mw.text.jsonEncode(interview.tags) .. '\'>')
table.insert(output, '<div class="ivimage" style="display:table-cell; vertical-align:top;">')
if interview.cover ~= '' then
Line 37 ⟶ 46:
table.insert(output, '[[File:JJLSymbol.png|20px|link=#' .. interview.title .. '|Link to this section]]</span>')
if interview.display then
table.insert(output, '<span class="iv-link mcbutton mw-ui-button mw-ui-progressive">' .. frame:preprocess("{{Shadow|{{White2|Interview:" .. interview.title .. "|'''" .. interview.display .. "}}}}") .. '</span>')
else
table.insert(output, '<span class="iv-link mcbutton mw-ui-button mw-ui-progressive">' .. frame:preprocess("{{Shadow|{{White2|Interview:" .. interview.title .. "|'''" .. interview.title .. "}}}}") .. '</span>')
end
table.insert(output, '</div>')
Line 47 ⟶ 56:
end
if interview.transcript then
table.insert(output, frame:preprocess('{{Tag|' .. interview.transcript .. '2}}'))
end
table.insert(output, frame:preprocess('{{Tag|' .. interview.media .. '}}'))
Line 88 ⟶ 97:
-- If we found the interview, generate it
if interview ~= nil then
-- Rest of your code...
return generateInterview(interview, frame)
else
Line 105 ⟶ 113:
table.insert(html, '</div>') -- End the div with the ID 'interview-container'
return table.concat(html)
end
 
function p.generateIndividual(frame)
-- Extract the interviewee
local targetInterviewee = mw.title.getCurrentTitle().text
targetInterviewee = string.gsub(targetInterviewee, "'", '&#39;')
targetInterviewee = string.gsub(targetInterviewee, "/pl", '')
 
-- Load the interviews from JSON data
local content = mw.loadJsonData('JoJo Wiki:Interviews').interviews
 
-- Find the interviews belonging to the interviewee
local interviewsForPerson = {}
 
for i, interview in ipairs(content) do
for _, interviewee in ipairs(interview.interviewee) do
local functioncleanedInterviewee = cleanIntervieweeName(interviewee)
if cleanedInterviewee == targetInterviewee then
table.insert(interviewsForPerson, interview)
break
end
end
end
local output = {}
if #interviewsForPerson > 0 then
table.insert(output, '{| class="wikitable sortable" style="font-size:small"')
table.insert(output, '|-')
table.insert(output, '! |#|| class="unsortable" |Interview||Type||Media||class="unsortable"|Published')
for i, interview in ipairs(interviewsForPerson) do
local displayTitle = interview.display
local title = interview.title
table.insert(output, '|-')
if displayTitle == nil then
table.insert(output, '|' .. i .. '|| style="color:white; background: {{Color|' .. interview.part .. '}}; text-shadow: 1px 1px 1px #333333;"|{{White2|Interview:' .. title .. '|' .. title .. '}}||{{Tag|' .. interview.type .. '}}||{{Tag|' .. interview.media .. '}}||' .. interview.date)
else
table.insert(output, '|' .. i .. '|| style="color:white; background: {{Color|' .. interview.part .. '}}; text-shadow: 1px 1px 1px #333333;"|{{White2|Interview:' .. title .. '|' .. displayTitle .. '}}||{{Tag|' .. interview.type .. '}}||{{Tag|' .. interview.media .. '}}||' .. interview.date)
end
end
table.insert(output, '|}')
return frame:preprocess(table.concat(output, '\n'))
else
return "No interviews found for " .. targetInterviewee
end
end