More languages
More actions
m (Added if to external timestamp to prevent errors) |
(Adding Odysee and Vimeo links) |
||
(11 intermediate revisions by the same user not shown) | |||
Line 15: | Line 15: | ||
local Channel = parent.args.channel | local Channel = parent.args.channel | ||
local Date = parent.args['date'] | local Date = parent.args['date'] | ||
local | local Quote = parent.args.quote | ||
local URL = parent.args.url | local URL = parent.args.url | ||
local ArchiveURL = parent.args['archive-url'] | |||
local ArchiveDate = parent.args['archive-date'] | |||
local Retrieved = parent.args.retrieved | |||
local first_part = '' | local first_part = '' | ||
local second_part = '' | local second_part = '' | ||
local third_part = '' | |||
local platform = '' | |||
if is_set(URL) then | if is_set(URL) then | ||
local linkDomain = URL:match("(%a+.%a+)/") | |||
if | -- YouTube links and Odysee use the same logic for links with timestamps, so they are treated withing the same code block | ||
if linkDomain == 'youtube.com' or linkDomain == 'youtu.be' or linkDomain == 'odysee.com' then | |||
-- Differentiating between links | |||
if linkDomain == 'youtube.com' or linkDomain == 'youtu.be' then | |||
platform = '[[YouTube]]' | |||
if | -- Only YouTube and Odysee get to this point, so the only one left is Odysee | ||
else | else | ||
platform = 'Odysee' | |||
end | end | ||
if hour>0 then | |||
-- Checks if the youtube link has a timestamp | |||
local extTimestamp = URL:match("?t=(%d+)") | |||
if is_set(extTimestamp) then | |||
-- Extracts seconds, minutes and hours from timestamp | |||
local second = extTimestamp%60 | |||
local minute = math.floor(extTimestamp/60)%60 | |||
local hour = math.floor(minute/60) | |||
local timestampString = second | |||
timestampString = string.format("%02d", minute) .. ":" .. timestampString | |||
-- Display hours only if it's larger than 0 | |||
if hour>0 then | |||
timestampString = string.format("%02d", hour) .. ":" .. timestampString | |||
end | |||
second_part = second_part .. " (" .. timestampString .. ")" | |||
end | end | ||
elseif linkDomain == 'vimeo.com' then | |||
platform = 'Vimeo' | |||
elseif linkDomain == 'dailymotion.com' then | |||
platform = 'DailyMotion' | |||
end | end | ||
end | |||
if is_set (Quote) then | |||
Quote = string.gsub(Quote,"\n","<br>") | |||
Quote = "“" .. Quote .. "”" | |||
local div = mw.html.create ('div') | |||
div | |||
:attr("style", "width:80%; margin-left:10%;") | |||
:wikitext(Quote) | |||
local br = mw.html.create ('br', selfClosing) | |||
first_part = italics(tostring(div)) .. tostring(br) .. first_part | |||
end | end | ||
Line 46: | Line 79: | ||
if is_set(Title) then | if is_set(Title) then | ||
if is_set(URL) then | if is_set(URL) then | ||
Title = '[' .. URL .. " " .. Title .. ']' | Title = '[' .. URL .. " " .. '"' .. Title .. '"' .. ']' | ||
end | end | ||
second_part = | second_part = Title .. second_part | ||
end | end | ||
Line 65: | Line 92: | ||
end | end | ||
if is_set(platform) then | |||
second_part = second_part .. ". ''" .. platform .. "''" | |||
end | |||
if is_set(ArchiveURL) then | |||
if is_set(ArchiveDate) then | |||
third_part = " [" .. ArchiveURL .. " " .. "Archived" .. "]" .. " " .. " from the original on" .. " " .. ArchiveDate .. "." | |||
else | |||
third_part = " [" .. ArchiveURL .. " " .. "Archived" .. "]" .. " from the original." | |||
end | |||
end | |||
if is_set (Retrieved) then | |||
third_part = third_part .. " Retrieved" .. " " .. Retrieved | |||
end | |||
-- Concatenating all strings and adding the dot punctuations at the end of every part if they are set | |||
local finalString = '' | |||
if is_set(first_part) then | |||
finalString = first_part .. "." | |||
end | |||
if is_set(second_part) then | |||
finalString = finalString .. " " .. second_part .. "." | |||
end | |||
if is_set(third_part) then | |||
finalString = finalString .. " " .. third_part .. "." | |||
end | |||
return finalString | |||
end | end | ||
return p | return p |
Latest revision as of 23:59, 28 April 2024
local p = {}
local function is_set (var)
return not (var == nil or var == '');
end
local function italics (var)
return "<i>" .. var .. "</i>"
end
function p.cite(frame)
local parent = frame:getParent()
local Title = parent.args.title
local Channel = parent.args.channel
local Date = parent.args['date']
local Quote = parent.args.quote
local URL = parent.args.url
local ArchiveURL = parent.args['archive-url']
local ArchiveDate = parent.args['archive-date']
local Retrieved = parent.args.retrieved
local first_part = ''
local second_part = ''
local third_part = ''
local platform = ''
if is_set(URL) then
local linkDomain = URL:match("(%a+.%a+)/")
-- YouTube links and Odysee use the same logic for links with timestamps, so they are treated withing the same code block
if linkDomain == 'youtube.com' or linkDomain == 'youtu.be' or linkDomain == 'odysee.com' then
-- Differentiating between links
if linkDomain == 'youtube.com' or linkDomain == 'youtu.be' then
platform = '[[YouTube]]'
-- Only YouTube and Odysee get to this point, so the only one left is Odysee
else
platform = 'Odysee'
end
-- Checks if the youtube link has a timestamp
local extTimestamp = URL:match("?t=(%d+)")
if is_set(extTimestamp) then
-- Extracts seconds, minutes and hours from timestamp
local second = extTimestamp%60
local minute = math.floor(extTimestamp/60)%60
local hour = math.floor(minute/60)
local timestampString = second
timestampString = string.format("%02d", minute) .. ":" .. timestampString
-- Display hours only if it's larger than 0
if hour>0 then
timestampString = string.format("%02d", hour) .. ":" .. timestampString
end
second_part = second_part .. " (" .. timestampString .. ")"
end
elseif linkDomain == 'vimeo.com' then
platform = 'Vimeo'
elseif linkDomain == 'dailymotion.com' then
platform = 'DailyMotion'
end
end
if is_set (Quote) then
Quote = string.gsub(Quote,"\n","<br>")
Quote = "“" .. Quote .. "”"
local div = mw.html.create ('div')
div
:attr("style", "width:80%; margin-left:10%;")
:wikitext(Quote)
local br = mw.html.create ('br', selfClosing)
first_part = italics(tostring(div)) .. tostring(br) .. first_part
end
if is_set(Channel) then
first_part = first_part .. Channel
end
if is_set(Title) then
if is_set(URL) then
Title = '[' .. URL .. " " .. '"' .. Title .. '"' .. ']'
end
second_part = Title .. second_part
end
if is_set(Date) then
if is_set(Channel) then
first_part = first_part .. ' (' .. Date .. ')'
else
second_part = second_part .. ' (' .. Date .. ')'
end
end
if is_set(platform) then
second_part = second_part .. ". ''" .. platform .. "''"
end
if is_set(ArchiveURL) then
if is_set(ArchiveDate) then
third_part = " [" .. ArchiveURL .. " " .. "Archived" .. "]" .. " " .. " from the original on" .. " " .. ArchiveDate .. "."
else
third_part = " [" .. ArchiveURL .. " " .. "Archived" .. "]" .. " from the original."
end
end
if is_set (Retrieved) then
third_part = third_part .. " Retrieved" .. " " .. Retrieved
end
-- Concatenating all strings and adding the dot punctuations at the end of every part if they are set
local finalString = ''
if is_set(first_part) then
finalString = first_part .. "."
end
if is_set(second_part) then
finalString = finalString .. " " .. second_part .. "."
end
if is_set(third_part) then
finalString = finalString .. " " .. third_part .. "."
end
return finalString
end
return p